⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controlg.cpp

📁 pic 模拟程序!面向对象
💻 CPP
字号:
/*====================================================================CONTROLG.CPPPurpose:	Defines ControlParams, which holds overall controlling		parametersVersion:	$Id: controlg.cpp,v 1.38 2005/09/07 21:53:45 jhammel Exp $Revision History2.01  (Bruhwiler 10/08/99) added SynchRadiationFlag references2.0?  (Cary 22 Jan 00) Added shiftDelayTime.====================================================================*/#include "controlg.h"//=================== ControlParams ClassControlParams::ControlParams()	  : ParameterGroup(){  name = "Control";#ifdef MPI_VERSION  MPIpartition.setNameAndDescription("MPIpartition","Partition info for MPI version");  MPIpartition.setValue("Nx1");  parameterList.add(&MPIpartition);#endif  dt.setNameAndDescription(ostring("dt"), ostring("time step"));  dt.setValue("1.0e-12");    emdamping.setNameAndDescription(ostring("emdamping"), ostring("EMdamping, a value from 0 to 2"));  emdamping.setValue("0");  movingWindow.setNameAndDescription("movingWindow",	"Moving window:  0 none, 1 system leftward = window right");  movingWindow.setValue("0");  parameterList.add(&movingWindow);  shiftDelayTime.setNameAndDescription("shiftDelayTime",	"Time before shifting begins");  shiftDelayTime.setValue("0");  parameterList.add(&shiftDelayTime);  gasOffTime.setNameAndDescription("gasOffTime",	"Time at which to set the neutral gas density to zero.");  gasOffTime.setValue("-1.0"); // default is a negative value for not switching off the gas  parameterList.add(&gasOffTime);  dumpTextFiles.setNameAndDescription("dumpTextFiles",        "write in files, particles and electric field in text");  dumpTextFiles.setValue("0");  parameterList.add(&dumpTextFiles);  Frandseed.setNameAndDescription("Frandseed","seed for frand");  Frandseed.setValue("0");  B01.setNameAndDescription(ostring("B01"), 			    ostring("Ambient B field in x1 direction"));  B01.setValue("0.0");  B01analytic.setNameAndDescription(ostring("B01analytic"), 												ostring("Ambient B field in x1 direction"));  B01analytic.setValue("0.0");  parameterList.add(&B01analytic);  B02analytic.setNameAndDescription(ostring("B02analytic"), 				    ostring("Ambient B field in x2 direction"));  B02analytic.setValue("0.0");  parameterList.add(&B02analytic);    B03analytic.setNameAndDescription(ostring("B03analytic"), 				    ostring("Ambient B field in x3 direction"));  B03analytic.setValue("0.0");  parameterList.add(&B03analytic);    B02.setNameAndDescription(ostring("B02"), 			    ostring("Ambient B field in x2 direction"));  B02.setValue("0.0");  B03.setNameAndDescription(ostring("B03"), 			    ostring("Ambient B field in x3 direction"));  B03.setValue("0.0");  B1init.setNameAndDescription("B1init",			       "Initial B1 fields as a function of x1, x2");  B1init.setValue("0");  parameterList.add(&B1init);  B2init.setNameAndDescription("B2init",			       "Initial B2 fields as a function of x1, x2");  B2init.setValue("0");  parameterList.add(&B2init);  B3init.setNameAndDescription("B3init",			       "Initial B3 fields as a function of x1, x2");  B3init.setValue("0");  parameterList.add(&B3init);  E1init.setNameAndDescription("E1init",			       "Initial E1 fields as a function of x1, x2");  E1init.setValue("0");  parameterList.add(&E1init);  E2init.setNameAndDescription("E2init",			       "Initial E2 fields as a function of x1, x2");  E2init.setValue("0");  parameterList.add(&E2init);  E3init.setNameAndDescription("E3init","Initial E3 fields as a function of x1, x2");  E3init.setValue("0");  parameterList.add(&E3init);  Bf.setNameAndDescription(ostring("Bf"), 			   ostring("file containing B field"));  Bf.setValue("NULL");    zoff.setNameAndDescription(ostring("zoff"), 			     ostring("z offset for wiggler field"));  zoff.setValue("0.0");    betwig.setNameAndDescription(ostring("betwig"), 			       ostring("kz for wiggler field"));  betwig.setValue("0.0");  j1BeamDump.setNameAndDescription("j1BeamDump", 				   "grid coord of left side (-1 = off)");  j1BeamDump.setValue("-1");  j2BeamDump.setNameAndDescription("j2BeamDump", 				   "grid coord of right side (-1 = off)");  j2BeamDump.setValue("-1");   MarderIter.setNameAndDescription(ostring("MarderIter"), "");  MarderIter.setValue("0");  MarderParameter.setNameAndDescription(ostring("MarderParameter"),					ostring("Relaxation parameter, should be less than 0.5"));  MarderParameter.setValue("0.5");  ElectrostaticFlag.setNameAndDescription(ostring("ElectrostaticFlag"),					  ostring("Flag: 1=Electrostatic, 0=Electromagnetic."));  ElectrostaticFlag.setValue("0");  SynchRadiationFlag.setNameAndDescription(ostring("SynchRadiationFlag"),                                           ostring("Flag: 1=SynchRadiation, 0=Electromagnetic."));  SynchRadiationFlag.setValue("0");  FreezeFields.setNameAndDescription("FreezeFields", "");  FreezeFields.setValue("0");  NonRelativisticFlag.setNameAndDescription(ostring("NonRelativisticFlag"),					    ostring("Flag:  1=NonRelativistic particle push, 0=Relativisticparticle push - default is 0."));  NonRelativisticFlag.setValue("0");  nSmoothing.setNameAndDescription("nSmoothing", "");  nSmoothing.setValue("0");  histmax.setNameAndDescription(ostring("histmax"),"");  histmax.setValue("4096");  InfiniteBFlag.setNameAndDescription(ostring("InfiniteBFlag"),				      ostring("Flag:  1=Non Relativistic Infinite B1, 0=Relativisticparticle push - default is 0."));  InfiniteBFlag.setValue("0");    FieldSubFlag.setNameAndDescription(ostring("FieldSubFlag"),				     ostring("Flag:  number of times to subcycle the fields - default is 1."));  FieldSubFlag.setValue("1");  CurrentWeighting.setNameAndDescription(ostring("CurrentWeighting"),					 ostring("Flag:  1=bilinear (need divergence clean), 0=charge conserving."));  CurrentWeighting.setValue("0");  DivergenceCleanFlag.setNameAndDescription(ostring("DivergenceCleanFlag"),														  ostring("Flag:  1=use clean, 0=no clean."));  DivergenceCleanFlag.setValue("0");  BoltzmannFlag.setNameAndDescription(ostring("BoltzmannFlag"),				      ostring("Flag: 1=Boltzmann electrons field solve, 0=full particles"));  BoltzmannFlag.setValue("0");    BoltzmannTemp.setNameAndDescription(ostring("BoltzmannTemp"),				      ostring("Temperature of Boltzmann electrons"));  BoltzmannTemp.setValue("1");  BoltzmannDensity.setNameAndDescription(ostring("BoltzmannDensity"),					 ostring("Neutral density of Boltzmann electrons"));  BoltzmannDensity.setValue("0.0");  BoltzSpecies.setNameAndDescription("BoltzSpecies",	"name of Boltzmann Species");  BoltzSpecies.setValue("NULL");  parameterList.add(&BoltzSpecies);  BoltzmannCharge.setNameAndDescription(ostring("BoltzmannCharge"),					ostring("Charge of Boltzmann electrons"));  BoltzmannCharge.setValue("-1");  BoltzmannEBFlag.setNameAndDescription(ostring("BoltzmannEBFlag"),					ostring("if EBFlag=1 energy balance is used, EBFlag=0 temperature constant"));  BoltzmannEBFlag.setValue("0");  BoltzmannChargeRatio.setNameAndDescription(ostring("BoltzmannChargeRatio"),				ostring("Set the charge ratio of source to n0"));  BoltzmannChargeRatio.setValue("1");  echoFlag.setNameAndDescription("echoFlag", "0 = no echo, 1 = echo input file");  echoFlag.setValue("0");  parameterList.add(&echoFlag);  duplicateParticles.setNameAndDescription("duplicateParticles", "number of times to duplicate particles");  duplicateParticles.setValue("0");  parameterList.add(&duplicateParticles);  np2cFactor.setNameAndDescription("np2cFactor", "Dump file np2c multiplier");  np2cFactor.setValue("1");  parameterList.add(&np2cFactor);  particleLimit.setNameAndDescription("particleLimit", "max. total particles in sim");  particleLimit.setValue("1E8");  parameterList.add(&particleLimit);  presidue.setNameAndDescription("presidue","Residue for poisson solves");  presidue.setValue("1E-3");  parameterList.add(&presidue);  initPoissonSolve.setNameAndDescription("initPoissonSolve","flag turning on/off the intital poisson solve.");  initPoissonSolve.setValue("1");  parameterList.add(&initPoissonSolve);  parameterList.add(&dt);  parameterList.add(&emdamping);   parameterList.add(&B01);  parameterList.add(&B02);  parameterList.add(&B03);  parameterList.add(&Bf);  parameterList.add(&zoff);  parameterList.add(&betwig);  parameterList.add(&j1BeamDump);  parameterList.add(&j2BeamDump);  parameterList.add(&MarderIter);  parameterList.add(&MarderParameter);  parameterList.add(&ElectrostaticFlag);  parameterList.add(&SynchRadiationFlag);  parameterList.add(&FreezeFields);  parameterList.add(&NonRelativisticFlag);  parameterList.add(&nSmoothing);  parameterList.add(&histmax);  parameterList.add(&InfiniteBFlag);  parameterList.add(&FieldSubFlag);  parameterList.add(&CurrentWeighting);  parameterList.add(&DivergenceCleanFlag);  parameterList.add(&BoltzmannFlag);  parameterList.add(&BoltzmannTemp);  parameterList.add(&BoltzmannDensity);  parameterList.add(&BoltzmannCharge);  parameterList.add(&BoltzmannEBFlag);  parameterList.add(&BoltzmannChargeRatio);  parameterList.add(&Frandseed);  addLimitRule("emdamping","<",0.0,				  "Fatal  -- Positive values only",1);  addLimitRule("emdamping",">",0.5,				  "Fatal  -- must be less than 0.5",1);  addLimitRule("MarderIter","<",0.0,				  "Fatal  --  Positive values only for MarderIter",1);  addLimitRule("MarderIter",">",20.0,				  "Warning  --  Do you really want to use so many iterations of the Marder correction?\nMore is not always better!",1);  addLimitRule("MarderParameter","<",0.0,				  "Fatal  --  MarderParameter < 0 causes numerical instability",1);  addLimitRule("MarderParameter",">",1.0,				  "Fatal  --  MarderParameter > 1 causes numerical instability",1);  addLimitRule("ElectrostaticFlag","<",0.0,				  "Fatal  --  0 (off), 1 (DADI), 2 (CGXY), 3 (MULTIGRID), 4 (DADIXY,peridicX1) are valid.",1);  addLimitRule("ElectrostaticFlag",">",4.0,				  "Fatal  --  0 (off), 1 (DADI), 2 (CGXY), 3 (MULTIGRID), 4 (DADIXY,peridicX1) are valid.",1);  addLimitRule("SynchRadiationFlag","<",0.0,				  "Fatal  --  0 (off), 1 (on) are valid.",1);  addLimitRule("SynchRadiationFlag",">",1.0,				  "Fatal  --  0 (off), 1 (on) are valid.",1);  addLimitRule("CurrentWeighting","<",0.0,				  "Fatal  --  0 (charge conserving) and 1 (bilinear) are the onlyvalid values for CurrentWeighting.",1);  addLimitRule("CurrentWeighting",">",1.0,				  "Fatal  --  0 (charge conserving) and 1 (bilinear) are the onlyvalid values for CurrentWeighting.",1);  addLimitRule("DivergenceCleanFlag","<",0.0,				  "Fatal  --  0 (off) and 1 (on) are the only valid values for DivergenceCleanFlag.",1);  addLimitRule("DivergenceCleanFlag",">",1.0,				  "Fatal  --  0 (off) and 1 (on) are the only valid values for DivergenceCleanFlag.",1);}void ControlParams::checkRules(){	/*		ostring name = CP.getBoltzSpecies();	if (name == (ostring)"NULL")		ruleMessages.add(new ostring("speciesName is required!"));	else if (!KnownSpecies(name))		{			char buffer[512];			sprintf(buffer, "Unrecognized speciesName: %s", name.c_str());			ruleMessages.add(new ostring(buffer));		}	*/}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -