chombo-discharge
CD_ItoPlasmaStepper.H
Go to the documentation of this file.
1 /* chombo-discharge
2  * Copyright © 2021 SINTEF Energy Research.
3  * Please refer to Copyright.txt and LICENSE in the chombo-discharge root directory.
4  */
5 
12 #ifndef CD_ItoPlasmaStepper_H
13 #define CD_ItoPlasmaStepper_H
14 
15 // Std includes
16 #include <functional>
17 
18 // Our includes
19 #include <CD_TimeStepper.H>
20 #include <CD_ItoPlasmaPhysics.H>
21 #include <CD_ItoLayout.H>
22 #include <CD_PointParticle.H>
23 #include <CD_RtLayout.H>
24 #include <CD_McPhoto.H>
25 #include "CD_FieldSolver.H"
26 #include "CD_SurfaceODESolver.H"
27 #include <CD_NamespaceHeader.H>
28 
29 namespace Physics {
30  namespace ItoPlasma {
31 
35  enum class SpeciesSubset
36  {
37  All,
38  AllMobile,
39  AllDiffusive,
40  AllMobileOrDiffusive,
41  AllMobileAndDiffusive,
42  Charged,
43  ChargedMobile,
44  ChargedDiffusive,
45  ChargedMobileOrDiffusive,
46  ChargedMobileAndDiffusive,
47  Stationary,
48  };
49 
54  {
55  public:
60 
65  ItoPlasmaStepper(RefCountedPtr<ItoPlasmaPhysics>& a_physics);
66 
70  virtual ~ItoPlasmaStepper();
71 
75  virtual void
76  parseOptions();
77 
81  virtual void
82  parseRuntimeOptions() override;
83 
87  virtual void
88  allocate() override;
89 
93  virtual void
95 
99  virtual void
100  setupSolvers() override;
101 
105  virtual void
106  initialData() override;
107 
112  virtual void
113  postCheckpointSetup() override;
114 
119  virtual void
121 
125  virtual void
126  postInitialize() override;
127 
128 #ifdef CH_USE_HDF5
133  virtual void
134  readCheckpointHeader(HDF5HeaderData& a_header);
135 #endif
136 
137 #ifdef CH_USE_HDF5
142  virtual void
143  writeCheckpointHeader(HDF5HeaderData& a_header) const override;
144 #endif
145 
146 #ifdef CH_USE_HDF5
152  virtual void
153  writeCheckpointData(HDF5Handle& a_handle, const int a_lvl) const override;
154 #endif
155 
156 #ifdef CH_USE_HDF5
162  virtual void
163  readCheckpointData(HDF5Handle& a_handle, const int a_lvl) override;
164 #endif
165 
172  virtual void
173  writePlotData(EBAMRCellData& a_output, Vector<std::string>& a_plotVariableNames, int& a_icomp) const override;
174 
178  virtual int
179  getNumberOfPlotVariables() const override;
180 
190  virtual Vector<long int>
191  getCheckpointLoads(const std::string a_realm, const int a_level) const override;
192 
198  virtual Real
199  advance(const Real a_dt) = 0;
200 
204  virtual Real
205  computeDt() override;
206 
213  virtual void
214  synchronizeSolverTimes(const int a_step, const Real a_time, const Real a_dt) override;
215 
219  virtual void
220  printStepReport() override;
221 
225  virtual void
226  registerRealms() override;
227 
231  virtual void
232  registerOperators() override;
233 
240  virtual void
241  preRegrid(const int a_lmin, const int a_oldFinestLevel) override;
242 
249  virtual void
250  regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override;
251 
255  virtual void
256  postRegrid() override;
257 
262  virtual bool
263  loadBalanceThisRealm(const std::string a_realm) const override;
264 
277  virtual void
278  loadBalanceBoxes(Vector<Vector<int>>& a_procs,
279  Vector<Vector<Box>>& a_boxes,
280  const std::string a_realm,
281  const Vector<DisjointBoxLayout>& a_grids,
282  const int a_lmin,
283  const int a_finestLevel) override;
284 
289  virtual void
290  setIto(RefCountedPtr<ItoLayout<ItoSolver>>& a_itoLayout) noexcept;
291 
296  virtual void
297  setFieldSolver(RefCountedPtr<FieldSolver>& a_fieldSolver) noexcept;
298 
303  virtual void
304  setRadiativeTransferSolvers(RefCountedPtr<RtLayout<McPhoto>>& a_rteLayout) noexcept;
305 
311  virtual void
312  setVoltage(const std::function<Real(const Real a_time)>& a_voltage) noexcept;
313 
318  virtual Real
319  getTime() const noexcept;
320 
326  virtual void
327  computeElectricField(EBAMRCellData& a_electricField, const phase::which_phase a_phase) const noexcept;
328 
329  protected:
333  enum class TimeCode
334  {
335  Advection,
336  Diffusion,
337  AdvectionDiffusion,
338  RelaxationTime,
339  Hardcap,
340  Physics
341  };
342 
347 
352 
357  std::string m_fluidRealm;
358 
362  std::string m_particleRealm;
363 
367  std::string m_name;
368 
373  phase::which_phase m_plasmaPhase;
374 
379  RefCountedPtr<ItoPlasmaPhysics> m_physics;
380 
384  RefCountedPtr<ItoLayout<ItoSolver>> m_ito;
385 
389  RefCountedPtr<RtLayout<McPhoto>> m_rte;
390 
394  RefCountedPtr<FieldSolver> m_fieldSolver;
395 
399  RefCountedPtr<SurfaceODESolver<1>> m_sigmaSolver;
400 
404  std::function<Real(const Real a_time)> m_voltage;
405 
410 
415 
419  bool m_profile;
420 
425 
430 
435 
440 
445 
450 
455 
459  Vector<int> m_particlesPerCell;
460 
466 
473 
478 
483 
488 
493 
499 
503  Real m_minDt;
504 
508  Real m_maxDt;
509 
514 
519 
524 
529 
534 
538  Vector<EBAMRCellData> m_loadBalancePPC;
539 
543  Vector<int> m_loadBalanceIndices;
544 
550 
556 
562 
568 
574 
580 
586 
592 
598 
604 
610 
616 
622 
627 
632 
637  Vector<EBAMRCellData> m_energySources;
638 
643 
648 
653 
658 
663 
667  virtual void
668  setupIto();
669 
673  virtual void
674  setupPoisson();
675 
679  virtual void
681 
685  virtual void
686  setupSigma();
687 
696  virtual void
697  intersectParticles(const SpeciesSubset a_speciesSubset,
698  const EBIntersection a_interactionAlg,
699  const bool a_delete) noexcept;
700 
710  virtual void
711  intersectParticles(const SpeciesSubset a_speciesSubset,
712  const ItoSolver::WhichContainer a_containerBulk,
713  const ItoSolver::WhichContainer a_containerEB,
714  const ItoSolver::WhichContainer a_containerDomain,
715  const EBIntersection a_intersectionAlg,
716  const bool a_delete) noexcept;
717 
725  virtual void
727  const EBRepresentation a_representation,
728  const Real a_tolerance) noexcept;
729 
738  virtual void
740  const ItoSolver::WhichContainer a_container,
741  const EBRepresentation a_representation,
742  const Real a_tolerance) noexcept;
743 
751  virtual void
752  transferCoveredParticles(const SpeciesSubset a_speciesSubset,
753  const EBRepresentation a_representation,
754  const Real a_tolerance) noexcept;
755 
765  virtual void
766  transferCoveredParticles(const SpeciesSubset a_speciesSubset,
767  const ItoSolver::WhichContainer a_containerFrom,
768  const ItoSolver::WhichContainer a_containerTo,
769  const EBRepresentation a_representation,
770  const Real a_tolerance) noexcept;
771 
777  virtual void
778  writeNumParticlesPerPatch(EBAMRCellData& a_output, int& a_icomp) const;
779 
787  virtual void
788  getMaxMinItoDensity(Real& a_maxDensity,
789  Real& a_minDensity,
790  std::string& a_maxSolver,
791  std::string& a_minSolver) const noexcept;
792 
802  virtual void
803  getParticleStatistics(Real& a_avgParticles,
804  Real& a_sigma,
805  Real& a_minParticles,
806  Real& a_maxParticles,
807  int& a_minRank,
808  int& a_maxRank);
809 
819  virtual void
820  loadBalanceParticleRealm(Vector<Vector<int>>& a_procs,
821  Vector<Vector<Box>>& a_boxes,
822  const std::string a_realm,
823  const Vector<DisjointBoxLayout>& a_grids,
824  const int a_lmin,
825  const int a_finestLevel) noexcept;
826 
836  virtual void
837  loadBalanceFluidRealm(Vector<Vector<int>>& a_procs,
838  Vector<Vector<Box>>& a_boxes,
839  const std::string a_realm,
840  const Vector<DisjointBoxLayout>& a_grids,
841  const int a_lmin,
842  const int a_finestLevel) noexcept;
843 
848  virtual Vector<RefCountedPtr<ItoSolver>>
849  getLoadBalanceSolvers() const noexcept;
850 
855  virtual Real
856  computeMaxElectricField(const phase::which_phase a_phase) noexcept;
857 
862  virtual void
863  computeSpaceChargeDensity() noexcept;
864 
870  virtual void
871  computeSpaceChargeDensity(MFAMRCellData& a_rho, const Vector<EBAMRCellData*>& a_densities) noexcept;
872 
878  virtual void
879  computeConductivityCell(EBAMRCellData& a_conductivity) noexcept;
880 
887  virtual void
888  computeConductivityCell(EBAMRCellData& a_conductivity,
889  const Vector<ParticleContainer<ItoParticle>*>& a_particles) noexcept;
890 
895  virtual void
896  computeCurrentDensity(EBAMRCellData& a_J) noexcept;
897 
901  virtual Real
902  computeRelaxationTime() noexcept;
903 
910  virtual bool
911  solvePoisson() noexcept;
912 
917  virtual void
918  depositParticles(const SpeciesSubset a_speciesSubset) noexcept;
919 
925  virtual void
926  depositParticles(const SpeciesSubset a_speciesSubset, const ItoSolver::WhichContainer a_container) noexcept;
927 
933  virtual void
934  remapParticles(const SpeciesSubset a_speciesSubset) noexcept;
935 
941  virtual void
942  remapParticles(const SpeciesSubset a_speciesSubset, const ItoSolver::WhichContainer a_container) noexcept;
943 
948  virtual void
949  setItoVelocityFunctions() noexcept;
950 
955  virtual void
956  computeItoVelocities() noexcept;
957 
962  virtual void
963  computeItoDiffusion() noexcept;
964 
969  virtual void
970  computeItoMobilitiesLFA() noexcept;
971 
978  virtual void
979  computeItoMobilitiesLFA(Vector<EBAMRCellData*>& a_meshMobilities,
980  const EBAMRCellData& a_electricField,
981  const Real a_time) noexcept;
982 
990  virtual void
991  computeItoMobilitiesLFA(Vector<LevelData<EBCellFAB>*>& a_meshMobilities,
992  const LevelData<EBCellFAB>& a_E,
993  const int a_level,
994  const Real a_time) noexcept;
995 
1005  virtual void
1006  computeItoMobilitiesLFA(Vector<EBCellFAB*>& a_meshMobilities,
1007  const EBCellFAB& a_electricField,
1008  const int a_level,
1009  const DataIndex a_dit,
1010  const Box a_cellBox,
1011  const Real a_time) noexcept;
1012 
1017  virtual void
1018  computeItoMobilitiesLEA() noexcept;
1019 
1024  virtual void
1025  computeItoDiffusionLFA() noexcept;
1026 
1033  virtual void
1034  computeItoDiffusionLFA(Vector<EBAMRCellData*>& a_diffusionCoefficient,
1035  const EBAMRCellData& a_electricField,
1036  const Real a_time) noexcept;
1037 
1045  virtual void
1046  computeItoDiffusionLFA(Vector<LevelData<EBCellFAB>*>& a_diffusionCoefficient,
1047  const LevelData<EBCellFAB>& a_electricField,
1048  const int a_level,
1049  const Real a_time) noexcept;
1050 
1062  virtual void
1063  computeItoDiffusionLFA(Vector<EBCellFAB*>& a_diffusionCoefficient,
1064  const EBCellFAB& a_E,
1065  const int a_level,
1066  const DataIndex a_dit,
1067  const Box a_box,
1068  const Real a_time) noexcept;
1069 
1074  virtual void
1075  computeItoDiffusionLEA() noexcept;
1076 
1081  virtual void
1082  getPhysicalParticlesPerCell(EBAMRCellData& a_ppc) const noexcept;
1083 
1089  virtual void
1091 
1098  virtual void
1099  computeReactiveParticlesPerCell(LevelData<EBCellFAB>& a_ppc, const int a_level) noexcept;
1100 
1110  virtual void
1111  computeReactiveParticlesPerCell(EBCellFAB& a_ppc,
1112  const int a_level,
1113  const DataIndex a_dit,
1114  const Box a_box,
1115  const EBISBox& a_ebisbox) noexcept;
1116 
1122  virtual void
1123  computeReactiveMeanEnergiesPerCell(EBAMRCellData& a_meanEnergies) noexcept;
1124 
1131  virtual void
1132  computeReactiveMeanEnergiesPerCell(LevelData<EBCellFAB>& a_meanEnergies, const int a_level) noexcept;
1133 
1143  virtual void
1144  computeReactiveMeanEnergiesPerCell(EBCellFAB& a_meanEnergies,
1145  const int a_level,
1146  const DataIndex a_dit,
1147  const Box a_box,
1148  const EBISBox& a_ebisbox) noexcept;
1149 
1155  virtual void
1156  advanceReactionNetwork(const Real a_dt) noexcept;
1157 
1165  virtual void
1166  advanceReactionNetwork(const EBAMRCellData& a_E, const EBAMRCellData& a_EdotJ, const Real a_dt) noexcept;
1167 
1180  virtual void
1181  advanceReactionNetwork(LevelData<EBCellFAB>& a_particlesPerCell,
1182  LevelData<EBCellFAB>& a_newPhotonsPerCell,
1183  LevelData<EBCellFAB>& a_meanParticleEnergies,
1184  const LevelData<EBCellFAB>& a_electricField,
1185  const LevelData<EBCellFAB>& a_EdotJ,
1186  const int a_level,
1187  const Real a_dt) noexcept;
1188 
1204  virtual void
1205  advanceReactionNetwork(EBCellFAB& a_particlesPerCell,
1206  EBCellFAB& a_newPhotonsPerCell,
1207  EBCellFAB& a_meanParticleEnergies,
1208  const EBCellFAB& a_electricField,
1209  const EBCellFAB& a_EdotJ,
1210  const int a_level,
1211  const DataIndex a_dit,
1212  const Box a_box,
1213  const Real a_dx,
1214  const Real a_dt) noexcept;
1215 
1224  virtual void
1225  reconcileParticles(const EBAMRCellData& a_newParticlesPerCell,
1226  const EBAMRCellData& a_oldParticlesPerCell,
1227  const EBAMRCellData& a_meanParticleEnergies,
1228  const EBAMRCellData& a_newPhotonsPerCell) noexcept;
1229 
1239  virtual void
1240  reconcileParticles(const LevelData<EBCellFAB>& a_newParticlesPerCell,
1241  const LevelData<EBCellFAB>& a_oldParticlesPerCell,
1242  const LevelData<EBCellFAB>& a_meanParticleEnergies,
1243  const LevelData<EBCellFAB>& a_newPhotonsPerCell,
1244  const int a_level) noexcept;
1245 
1258  virtual void
1259  reconcileParticles(const EBCellFAB& a_newParticlesPerCell,
1260  const EBCellFAB& a_oldParticlesPerCell,
1261  const EBCellFAB& a_meanParticleEnergies,
1262  const EBCellFAB& a_newPhotonsPerCell,
1263  const int a_level,
1264  const DataIndex a_dit,
1265  const Box a_box,
1266  const Real a_dx) noexcept;
1267 
1273  virtual void
1274  resolveParticlesEB(const Real a_dt) noexcept;
1275 
1280  virtual void
1281  resolveParticlesEB(Vector<ParticleContainer<ItoParticle>*>& a_inOutParticles,
1282  Vector<ParticleContainer<Photon>*>& a_inOutPhotons,
1283  const EBAMRCellData& a_electricField,
1284  const Real a_dt) noexcept;
1285 
1290  virtual void
1291  injectParticlesEB() noexcept;
1292 
1296  virtual void
1297  injectParticlesEB(Vector<ParticleContainer<ItoParticle>*> a_bulkParticles,
1298  Vector<ParticleContainer<ItoParticle>*> a_injectedParticles) noexcept;
1299 
1305  virtual Real
1306  computePhysicsDt() noexcept;
1307 
1314  virtual Real
1315  computePhysicsDt(const EBAMRCellData& a_electricField) noexcept;
1316 
1324  virtual Real
1325  computePhysicsDt(const LevelData<EBCellFAB>& a_electricField,
1326  const LevelData<EBCellFAB>& a_particlesPerCell,
1327  const int a_level) noexcept;
1328 
1338  virtual Real
1339  computePhysicsDt(const EBCellFAB& a_electricField,
1340  const EBCellFAB& a_particlesPercCell,
1341  const int a_level,
1342  const DataIndex a_dit,
1343  const Box a_box) noexcept;
1344 
1349  virtual void
1350  advancePhotons(const Real a_dt) noexcept;
1351 
1356  virtual void
1357  sortPhotonsByCell(const McPhoto::WhichContainer a_which) noexcept;
1358 
1363  virtual void
1364  sortPhotonsByPatch(const McPhoto::WhichContainer a_which) noexcept;
1365 
1371  virtual void
1372  computeEdotJSource(const Real a_dt) noexcept;
1373 
1377  virtual void
1378  initialSigma();
1379 
1384  virtual void
1385  parseVerbosity() noexcept;
1386 
1390  virtual void
1391  parseAbort() noexcept;
1392 
1397  virtual void
1398  parseSuperParticles() noexcept;
1399 
1404  virtual void
1405  parseDualGrid() noexcept;
1406 
1410  virtual void
1411  parseLoadBalance() noexcept;
1412 
1416  virtual void
1417  parseTimeStepRestrictions() noexcept;
1418 
1422  virtual void
1423  parseParametersEB() noexcept;
1424 
1428  virtual void
1429  parsePlotVariables() noexcept;
1430  };
1431  } // namespace ItoPlasma
1432 } // namespace Physics
1433 
1434 #include <CD_NamespaceFooter.H>
1435 
1436 #endif
BoxSorting
Enum for sorting boxes.
Definition: CD_BoxSorting.H:21
EBIntersection
Enum for putting some logic into how we think about intersection between particles and EBs.
Definition: CD_EBIntersection.H:21
EBRepresentation
Enum for putting some logic into how we think about EBs. This is just a simply supporting class for v...
Definition: CD_EBRepresentation.H:22
Contains declaration of a base electrostatics solver class.
Declaration of a class that holds a set of ItoSolvers.
Main file for describing Ito-based plasma physics.
SpeciesSubset
Enum for differentiating between types of particles.
Definition: CD_ItoPlasmaStepper.H:36
Declaration of a radiative transfer solver which uses Monte Carlo sampling of computational or real p...
Declaration of a computational point particle.
Declaration of a class that holds a set of RtSolvers.
Declaration of a cut-cell ODE solver.
Declaration of main (abstract) time stepper class.
Class for holding a set of ItoSolvers.
Definition: CD_ItoLayout.H:30
A particle class for use with ItoSolvers, i.e. drifting Brownian walkers.
Definition: CD_ItoParticle.H:40
Base class for Ito diffusion particle models.
Definition: CD_ItoSolver.H:33
WhichContainer
Enum class for distinguishing various types of particle containers.
Definition: CD_ItoSolver.H:47
Radiative tranfer equation solver using Monte-Carlo simulation.
Definition: CD_McPhoto.H:38
Templated class for holding particles on an AMR hierarchy with particle remapping.
Definition: CD_ParticleContainer.H:48
Particle class for usage with Monte Carlo radiative transfer.
Definition: CD_Photon.H:29
Base time stepper class that advances the Ito-Poisson system of equations.
Definition: CD_ItoPlasmaStepper.H:54
EBAMRCellData m_currentDensity
Storage for current density.
Definition: CD_ItoPlasmaStepper.H:549
Real m_advectionDiffusionCFL
CFL-like time step for advection-diffusion.
Definition: CD_ItoPlasmaStepper.H:492
EBAMRCellData m_fluidEPS
For holding the mean particle energy.
Definition: CD_ItoPlasmaStepper.H:621
bool m_regridSuperparticles
Do or do not superparticle merging/splitting on regrids.
Definition: CD_ItoPlasmaStepper.H:424
virtual void reconcileParticles(const EBAMRCellData &a_newParticlesPerCell, const EBAMRCellData &a_oldParticlesPerCell, const EBAMRCellData &a_meanParticleEnergies, const EBAMRCellData &a_newPhotonsPerCell) noexcept
Reconcile particles. At the bottom, this will call the physics interface for particle reconciliation.
Definition: CD_ItoPlasmaStepper.cpp:3016
virtual void parseLoadBalance() noexcept
Parse load balancing.
Definition: CD_ItoPlasmaStepper.cpp:219
virtual void parseParametersEB() noexcept
Parse things related to the EB.
Definition: CD_ItoPlasmaStepper.cpp:310
virtual void injectParticlesEB() noexcept
Inject particles through the EB.
Definition: CD_ItoPlasmaStepper.cpp:3480
virtual void computeConductivityCell(EBAMRCellData &a_conductivity) noexcept
Compute the cell-centered conductiivty.
Definition: CD_ItoPlasmaStepper.cpp:1352
virtual Real advance(const Real a_dt)=0
Advancement method. Needs to be implemented by subclasses.
Vector< int > m_loadBalanceIndices
Solver indices used when load-balancing the particle solvers.
Definition: CD_ItoPlasmaStepper.H:543
virtual void parseTimeStepRestrictions() noexcept
Parse time step restrictions.
Definition: CD_ItoPlasmaStepper.cpp:268
virtual void loadBalanceParticleRealm(Vector< Vector< int >> &a_procs, Vector< Vector< Box >> &a_boxes, const std::string a_realm, const Vector< DisjointBoxLayout > &a_grids, const int a_lmin, const int a_finestLevel) noexcept
Routine called by loadBalanceBoxes and used for particle-based load balancing.
Definition: CD_ItoPlasmaStepper.cpp:3820
EBAMRCellData m_newPPC
For holding the number of physical particles per cell.
Definition: CD_ItoPlasmaStepper.H:579
virtual Real computePhysicsDt() noexcept
Compute a maximum time step from the physics interface.
Definition: CD_ItoPlasmaStepper.cpp:3514
virtual Real getTime() const noexcept
Get current simulation time.
Definition: CD_ItoPlasmaStepper.cpp:1290
EBAMRCellData m_electricFieldFluid
Storage for holding the plasma phase electric field on the fluid realm.
Definition: CD_ItoPlasmaStepper.H:626
virtual void parseRuntimeOptions() override
Parse runtime configurable options.
Definition: CD_ItoPlasmaStepper.cpp:84
virtual void setFieldSolver(RefCountedPtr< FieldSolver > &a_fieldSolver) noexcept
Set the field solver.
Definition: CD_ItoPlasmaStepper.cpp:1217
virtual void preRegrid(const int a_lmin, const int a_oldFinestLevel) override
Perform pre-regrid operations.
Definition: CD_ItoPlasmaStepper.cpp:1068
virtual void initialSigma()
Fill surface charge solver with initial data.
Definition: CD_ItoPlasmaStepper.cpp:520
RefCountedPtr< ItoPlasmaPhysics > m_physics
Implementation of ItoPlasmaPhysics.
Definition: CD_ItoPlasmaStepper.H:379
virtual void setupRadiativeTransfer()
Set up the radiative transfer solver.
Definition: CD_ItoPlasmaStepper.cpp:376
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override
Regrid methods – puts all data on the new mesh.
Definition: CD_ItoPlasmaStepper.cpp:1103
virtual Vector< RefCountedPtr< ItoSolver > > getLoadBalanceSolvers() const noexcept
Get the solvers used for load balancing.
Definition: CD_ItoPlasmaStepper.cpp:3745
virtual void parseDualGrid() noexcept
Parse dual or single realm calculations.
Definition: CD_ItoPlasmaStepper.cpp:197
virtual void loadBalanceFluidRealm(Vector< Vector< int >> &a_procs, Vector< Vector< Box >> &a_boxes, const std::string a_realm, const Vector< DisjointBoxLayout > &a_grids, const int a_lmin, const int a_finestLevel) noexcept
Routine called by loadBalanceBoxes and used for particle-based load balancing.
Definition: CD_ItoPlasmaStepper.cpp:3960
bool m_plotCurrentDensity
Plot conductivity or not.
Definition: CD_ItoPlasmaStepper.H:449
virtual void writePlotData(EBAMRCellData &a_output, Vector< std::string > &a_plotVariableNames, int &a_icomp) const override
Write plot data to output holder.
Definition: CD_ItoPlasmaStepper.cpp:687
virtual void parseOptions()
Parse options.
Definition: CD_ItoPlasmaStepper.cpp:66
virtual void computeItoDiffusionLFA() noexcept
Compute mesh-based diffusion coefficients for LFA coupling.
Definition: CD_ItoPlasmaStepper.cpp:2323
EBAMRCellData m_oldPPC
For holding the number of physical particles per cell.
Definition: CD_ItoPlasmaStepper.H:573
virtual Real computeRelaxationTime() noexcept
Compute the dielectric relaxation time.
Definition: CD_ItoPlasmaStepper.cpp:1421
virtual void sortPhotonsByCell(const McPhoto::WhichContainer a_which) noexcept
Sort photons by cells.
Definition: CD_ItoPlasmaStepper.cpp:3719
virtual void setupSigma()
Set up the surface charge solver.
Definition: CD_ItoPlasmaStepper.cpp:392
int m_mergeInterval
How often to merge superparticles.
Definition: CD_ItoPlasmaStepper.H:465
virtual void intersectParticles(const SpeciesSubset a_speciesSubset, const EBIntersection a_interactionAlg, const bool a_delete) noexcept
Intersect a subset of the particles with the domain and embedded boundary.
Definition: CD_ItoPlasmaStepper.cpp:1493
Real m_diffusionDt
The diffusive time step (not multiplied by m_diffusionCFL)
Definition: CD_ItoPlasmaStepper.H:518
bool m_abortOnFailure
Flag for abandoning simulation of Poisson solver fails.
Definition: CD_ItoPlasmaStepper.H:409
virtual void postRegrid() override
Perform post-regrid operations – default implementation does nothing.
Definition: CD_ItoPlasmaStepper.cpp:1147
virtual void setItoVelocityFunctions() noexcept
Set the Ito velocity functions. This is sgn(charge) * E.
Definition: CD_ItoPlasmaStepper.cpp:2082
bool m_plotConductivity
Plot conductivity or not.
Definition: CD_ItoPlasmaStepper.H:444
virtual Real computeDt() override
Compute a time step used for the advance method.
Definition: CD_ItoPlasmaStepper.cpp:966
virtual void getMaxMinItoDensity(Real &a_maxDensity, Real &a_minDensity, std::string &a_maxSolver, std::string &a_minSolver) const noexcept
Get maximum density of the Ito species.
Definition: CD_ItoPlasmaStepper.cpp:896
virtual void allocateInternals()
Allocate "internal" storage.
Definition: CD_ItoPlasmaStepper.cpp:428
TimeCode
An enum for encapsulating how time steps were restricted.
Definition: CD_ItoPlasmaStepper.H:334
RefCountedPtr< ItoLayout< ItoSolver > > m_ito
Ito solvers.
Definition: CD_ItoPlasmaStepper.H:384
virtual void setupSolvers() override
Set up solvers.
Definition: CD_ItoPlasmaStepper.cpp:325
virtual void postCheckpointSetup() override
Perform post-checkpoint operations.
Definition: CD_ItoPlasmaStepper.cpp:562
bool m_plotParticlesPerPatch
Plot number of particles per patch or not.
Definition: CD_ItoPlasmaStepper.H:454
Real m_diffusionCFL
CFL-like time step for diffusion.
Definition: CD_ItoPlasmaStepper.H:487
RefCountedPtr< FieldSolver > m_fieldSolver
Field solver.
Definition: CD_ItoPlasmaStepper.H:394
virtual void removeCoveredParticles(const SpeciesSubset a_which, const EBRepresentation a_representation, const Real a_tolerance) noexcept
Remove covered particles (i.e., particles inside the EB)
Definition: CD_ItoPlasmaStepper.cpp:1617
virtual void writeNumParticlesPerPatch(EBAMRCellData &a_output, int &a_icomp) const
Write number of particles per patch to output holder.
Definition: CD_ItoPlasmaStepper.cpp:750
virtual bool loadBalanceThisRealm(const std::string a_realm) const override
Load balancing query for a specified realm. If this returns true for a_realm, load balancing routines...
Definition: CD_ItoPlasmaStepper.cpp:3779
EBAMRCellData m_particleYPC
For holding the number of generated photons per cell.
Definition: CD_ItoPlasmaStepper.H:591
RefCountedPtr< RtLayout< McPhoto > > m_rte
Radiative transfer solvers.
Definition: CD_ItoPlasmaStepper.H:389
TimeCode m_timeCode
Time code for understanding how the time step was restricted.
Definition: CD_ItoPlasmaStepper.H:351
virtual void computeReactiveMeanEnergiesPerCell(EBAMRCellData &a_meanEnergies) noexcept
Compute the mean particle energy in all grid cells.
Definition: CD_ItoPlasmaStepper.cpp:2663
RefCountedPtr< SurfaceODESolver< 1 > > m_sigmaSolver
Surface charge solver.
Definition: CD_ItoPlasmaStepper.H:399
std::string m_name
Time stepper name.
Definition: CD_ItoPlasmaStepper.H:367
bool m_profile
Profile kernels or not.
Definition: CD_ItoPlasmaStepper.H:419
EBAMRCellData m_fluidScratchD
Scratch storage on the fluid realm with SpaceDim components.
Definition: CD_ItoPlasmaStepper.H:652
virtual Vector< long int > getCheckpointLoads(const std::string a_realm, const int a_level) const override
Get computational loads to be checkpointed.
Definition: CD_ItoPlasmaStepper.cpp:4003
virtual void computeItoVelocities() noexcept
Compute ItoSolver velocities.
Definition: CD_ItoPlasmaStepper.cpp:2114
EBAMRIVData m_conductivityEB
EB-centered conductivity.
Definition: CD_ItoPlasmaStepper.H:567
Vector< EBAMRCellData > m_energySources
Storage for holding the energy sources for each species.
Definition: CD_ItoPlasmaStepper.H:637
Real m_maxDt
Maximum permitted time step.
Definition: CD_ItoPlasmaStepper.H:508
EBAMRCellData m_fluidYPC
For holding the number of generated photons per cell.
Definition: CD_ItoPlasmaStepper.H:615
virtual void setVoltage(const std::function< Real(const Real a_time)> &a_voltage) noexcept
Set voltage used for the simulation.
Definition: CD_ItoPlasmaStepper.cpp:1239
virtual int getNumberOfPlotVariables() const override
Get number of plot variables for the output file.
Definition: CD_ItoPlasmaStepper.cpp:1162
virtual void loadBalanceBoxes(Vector< Vector< int >> &a_procs, Vector< Vector< Box >> &a_boxes, const std::string a_realm, const Vector< DisjointBoxLayout > &a_grids, const int a_lmin, const int a_finestLevel) override
Load balance grid boxes for a specified realm.
Definition: CD_ItoPlasmaStepper.cpp:3799
Real m_advectionDiffusionDt
The advection-diffusion time step (not multiplied by m_advectionDiffusionCFL)
Definition: CD_ItoPlasmaStepper.H:523
bool m_loadBalanceFluid
Load balance fluid realm or not.
Definition: CD_ItoPlasmaStepper.H:434
virtual Real computeMaxElectricField(const phase::which_phase a_phase) noexcept
Compute the maximum electric field (norm)
Definition: CD_ItoPlasmaStepper.cpp:1250
Real m_toleranceEB
Accepted tolerance (relative to dx) for EB intersection.
Definition: CD_ItoPlasmaStepper.H:477
Real m_advectionCFL
CFL-like time step for advection.
Definition: CD_ItoPlasmaStepper.H:482
virtual void synchronizeSolverTimes(const int a_step, const Real a_time, const Real a_dt) override
Synchronize solver times for all the solvers.
Definition: CD_ItoPlasmaStepper.cpp:775
virtual void resolveParticlesEB(const Real a_dt) noexcept
Resolve particle injection at EBs.
Definition: CD_ItoPlasmaStepper.cpp:3293
Real m_advectionDt
The advective time step (not multiplied by m_advectionCFL)
Definition: CD_ItoPlasmaStepper.H:513
std::function< Real(const Real a_time)> m_voltage
Voltage curve on the electrodes used in the simulation.
Definition: CD_ItoPlasmaStepper.H:404
phase::which_phase m_plasmaPhase
Phase where we solve for the plasma.
Definition: CD_ItoPlasmaStepper.H:373
virtual ~ItoPlasmaStepper()
Destructor.
Definition: CD_ItoPlasmaStepper.cpp:63
virtual void remapParticles(const SpeciesSubset a_speciesSubset) noexcept
Remap a subset of ItoSolver particles.
Definition: CD_ItoPlasmaStepper.cpp:1856
EBAMRCellData m_fluidPPC
For holding the number of particles per cell for all species.
Definition: CD_ItoPlasmaStepper.H:609
EBAMRCellData m_particleScratchD
Scratch storage on the particle realm with SpaceDim components.
Definition: CD_ItoPlasmaStepper.H:662
virtual void parseAbort() noexcept
Parse abort on failure.
Definition: CD_ItoPlasmaStepper.cpp:122
virtual void computeCurrentDensity(EBAMRCellData &a_J) noexcept
Compute the current density.
Definition: CD_ItoPlasmaStepper.cpp:1402
virtual void postCheckpointPoisson()
Do some post-checkpoint operations for the electrostatic part.
Definition: CD_ItoPlasmaStepper.cpp:583
bool m_dualGrid
Using dual grid or not.
Definition: CD_ItoPlasmaStepper.H:414
Real m_physicsDt
The physics-based time step.
Definition: CD_ItoPlasmaStepper.H:533
virtual void advanceReactionNetwork(const Real a_dt) noexcept
Chemistry advance over time a_dt.
Definition: CD_ItoPlasmaStepper.cpp:2788
EBAMRCellData m_electricFieldParticle
Storage for holding the plasma phase electric field on the particle realm.
Definition: CD_ItoPlasmaStepper.H:631
Real m_relaxTimeFactor
Factor proportional to the dielectric relaxation time dtRelax = eps0/sigma.
Definition: CD_ItoPlasmaStepper.H:498
bool m_useNewReactionAlgorithm
For switching between the old and new reaction algorithms.
Definition: CD_ItoPlasmaStepper.H:439
virtual void parseVerbosity() noexcept
Parse chattiness.
Definition: CD_ItoPlasmaStepper.cpp:108
virtual void transferCoveredParticles(const SpeciesSubset a_speciesSubset, const EBRepresentation a_representation, const Real a_tolerance) noexcept
Transfer covered particles (i.e., particles inside the EB) from the ItoSolver bulk container to EB co...
Definition: CD_ItoPlasmaStepper.cpp:1734
Vector< EBAMRCellData > m_loadBalancePPC
For holding the number of computational particles per cell when load balancing.
Definition: CD_ItoPlasmaStepper.H:538
virtual void computeItoDiffusionLEA() noexcept
Compute the IonSolver particle diffusion coefficients in the LEA coupling regime.
Definition: CD_ItoPlasmaStepper.cpp:2517
virtual void computeReactiveParticlesPerCell(EBAMRCellData &a_ppc) noexcept
Compute the number of reactive particles per cell.
Definition: CD_ItoPlasmaStepper.cpp:2552
Real m_loadPerCell
The "background" load per cell when using particle load balancing.
Definition: CD_ItoPlasmaStepper.H:472
virtual void parsePlotVariables() noexcept
Parse plot variables.
Definition: CD_ItoPlasmaStepper.cpp:135
virtual void computeItoMobilitiesLEA() noexcept
Compute the IonSolver particle mobilities in the LEA coupling regime.
Definition: CD_ItoPlasmaStepper.cpp:2309
virtual void getParticleStatistics(Real &a_avgParticles, Real &a_sigma, Real &a_minParticles, Real &a_maxParticles, int &a_minRank, int &a_maxRank)
Compute some particle statistics.
Definition: CD_ItoPlasmaStepper.cpp:935
virtual void computeElectricField(EBAMRCellData &a_electricField, const phase::which_phase a_phase) const noexcept
Recompute the electric field onto the specified data holder.
Definition: CD_ItoPlasmaStepper.cpp:1277
virtual void setIto(RefCountedPtr< ItoLayout< ItoSolver >> &a_itoLayout) noexcept
Set the Ito layout.
Definition: CD_ItoPlasmaStepper.cpp:1206
EBAMRCellData m_conductivityCell
Cell-centered conductivity.
Definition: CD_ItoPlasmaStepper.H:555
std::string m_fluidRealm
Realm used for the fluid part (i.e., electrostatic) part of the simulation.
Definition: CD_ItoPlasmaStepper.H:357
virtual void computeEdotJSource(const Real a_dt) noexcept
Compute the energy source term for the various plasma species.
Definition: CD_ItoPlasmaStepper.cpp:4051
EBAMRCellData m_EdotJ
Storage for holdnig E*J on the fluid realm. 1 component.
Definition: CD_ItoPlasmaStepper.H:642
EBAMRCellData m_particleEPS
For holding the mean particle energy.
Definition: CD_ItoPlasmaStepper.H:597
EBAMRCellData m_particleScratch1
Scratch storage on the particle realm with 1 component.
Definition: CD_ItoPlasmaStepper.H:657
virtual void allocate() override
Allocate storage for solvers.
Definition: CD_ItoPlasmaStepper.cpp:408
virtual void getPhysicalParticlesPerCell(EBAMRCellData &a_ppc) const noexcept
Get the physical number of particles per cell.
Definition: CD_ItoPlasmaStepper.cpp:2531
virtual void postInitialize() override
Post-initialization operations. Default does nothing.
Definition: CD_ItoPlasmaStepper.cpp:485
bool m_loadBalanceParticles
Load balance particle realm or not.
Definition: CD_ItoPlasmaStepper.H:429
virtual void sortPhotonsByPatch(const McPhoto::WhichContainer a_which) noexcept
Sort photons by patch.
Definition: CD_ItoPlasmaStepper.cpp:3732
Real m_relaxationTime
The relaxation time eps0/sigma.
Definition: CD_ItoPlasmaStepper.H:528
virtual void setupPoisson()
Set up the electrostatic field solver.
Definition: CD_ItoPlasmaStepper.cpp:361
EBAMRCellData m_particlePPC
For holding the number of physical particles per cell for all species.
Definition: CD_ItoPlasmaStepper.H:585
virtual void registerOperators() override
Register operators used for the simulation.
Definition: CD_ItoPlasmaStepper.cpp:1054
virtual void registerRealms() override
Register realms used for the simulation.
Definition: CD_ItoPlasmaStepper.cpp:1041
EBAMRCellData m_particleOldPPC
For holding the previous number of particles per cell for all species.
Definition: CD_ItoPlasmaStepper.H:603
virtual void setupIto()
Set up the Ito particle solvers.
Definition: CD_ItoPlasmaStepper.cpp:346
virtual void computeItoMobilitiesLFA() noexcept
Compute mesh-based mobilities for LFA coupling.
Definition: CD_ItoPlasmaStepper.cpp:2145
virtual bool solvePoisson() noexcept
Solve the electrostatic problem.
Definition: CD_ItoPlasmaStepper.cpp:1452
virtual void depositParticles(const SpeciesSubset a_speciesSubset) noexcept
Deposit a subset of the ItoSolver particles on the mesh.
Definition: CD_ItoPlasmaStepper.cpp:1969
virtual void advancePhotons(const Real a_dt) noexcept
Photon advancement routine.
Definition: CD_ItoPlasmaStepper.cpp:3673
Vector< int > m_particlesPerCell
Target number of particles per cell when squishing ItoParticle's into superparticles.
Definition: CD_ItoPlasmaStepper.H:459
virtual void printStepReport() override
Print a step report. Used by Driver for user monitoring of simulation.
Definition: CD_ItoPlasmaStepper.cpp:793
std::string m_particleRealm
Realm used for the particle part of the simulation.
Definition: CD_ItoPlasmaStepper.H:362
ItoPlasmaStepper()
Default constructor. Sets default options.
Definition: CD_ItoPlasmaStepper.cpp:31
virtual void initialData() override
Fill solvers with initial data.
Definition: CD_ItoPlasmaStepper.cpp:494
virtual void computeSpaceChargeDensity() noexcept
Compute the space charge. Calls the other version.
Definition: CD_ItoPlasmaStepper.cpp:1301
EBAMRCellData m_fluidScratch1
Scratch storage on the fluid realm having 1 component.
Definition: CD_ItoPlasmaStepper.H:647
virtual void computeItoDiffusion() noexcept
Compute ItoSolver velocities.
Definition: CD_ItoPlasmaStepper.cpp:2134
virtual void parseSuperParticles() noexcept
Parse the desired number of particles per cell.
Definition: CD_ItoPlasmaStepper.cpp:170
BoxSorting m_boxSort
Box sorting method when using dual-grid with particle load balancing.
Definition: CD_ItoPlasmaStepper.H:346
Real m_minDt
Minimum permitted time step.
Definition: CD_ItoPlasmaStepper.H:503
EBAMRFluxData m_conductivityFace
Face-centered conductivity.
Definition: CD_ItoPlasmaStepper.H:561
virtual void setRadiativeTransferSolvers(RefCountedPtr< RtLayout< McPhoto >> &a_rteLayout) noexcept
Set the radiative transfer solvers.
Definition: CD_ItoPlasmaStepper.cpp:1228
Class for holding a set of RtSolvers. T must derive from RtSolver.
Definition: CD_RtLayout.H:27
Base class for advancing equations.
Definition: CD_TimeStepper.H:30
Name containing various physics models for running chombo-discharge code.
Definition: CD_AdvectionDiffusion.H:15
phase names
Definition: CD_MultiFluidIndexSpace.H:27