chombo-discharge
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
Physics::ItoPlasma::ItoPlasmaStepper Class Referenceabstract

Base time stepper class that advances the Ito-Poisson system of equations. More...

#include <CD_ItoPlasmaStepper.H>

Inheritance diagram for Physics::ItoPlasma::ItoPlasmaStepper:
Inheritance graph
[legend]
Collaboration diagram for Physics::ItoPlasma::ItoPlasmaStepper:
Collaboration graph
[legend]

Public Member Functions

 ItoPlasmaStepper ()
 Default constructor. Sets default options.
 
 ItoPlasmaStepper (RefCountedPtr< ItoPlasmaPhysics > &a_physics)
 Full constructor. Calls the other constructor. More...
 
virtual ~ItoPlasmaStepper ()
 Destructor.
 
virtual void parseOptions ()
 Parse options.
 
virtual void parseRuntimeOptions () override
 Parse runtime configurable options.
 
virtual void allocate () override
 Allocate storage for solvers.
 
virtual void allocateInternals ()
 Allocate "internal" storage.
 
virtual void setupSolvers () override
 Set up solvers.
 
virtual void initialData () override
 Fill solvers with initial data.
 
virtual void postCheckpointSetup () override
 Perform post-checkpoint operations. More...
 
virtual void postCheckpointPoisson ()
 Do some post-checkpoint operations for the electrostatic part. More...
 
virtual void postInitialize () override
 Post-initialization operations. Default does nothing.
 
virtual void writePlotData (EBAMRCellData &a_output, Vector< std::string > &a_plotVariableNames, int &a_icomp) const override
 Write plot data to output holder. More...
 
virtual int getNumberOfPlotVariables () const override
 Get number of plot variables for the output file.
 
virtual Vector< long int > getCheckpointLoads (const std::string a_realm, const int a_level) const override
 Get computational loads to be checkpointed. More...
 
virtual Real advance (const Real a_dt)=0
 Advancement method. Needs to be implemented by subclasses. More...
 
virtual Real computeDt () override
 Compute a time step used for the advance method.
 
virtual void synchronizeSolverTimes (const int a_step, const Real a_time, const Real a_dt) override
 Synchronize solver times for all the solvers. More...
 
virtual void printStepReport () override
 Print a step report. Used by Driver for user monitoring of simulation.
 
virtual void registerRealms () override
 Register realms used for the simulation.
 
virtual void registerOperators () override
 Register operators used for the simulation.
 
virtual void preRegrid (const int a_lmin, const int a_oldFinestLevel) override
 Perform pre-regrid operations. More...
 
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. More...
 
virtual void postRegrid () override
 Perform post-regrid operations – default implementation does nothing.
 
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 will be called during regrids for the input realm. More...
 
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. More...
 
virtual void setIto (RefCountedPtr< ItoLayout< ItoSolver >> &a_itoLayout) noexcept
 Set the Ito layout. More...
 
virtual void setFieldSolver (RefCountedPtr< FieldSolver > &a_fieldSolver) noexcept
 Set the field solver. More...
 
virtual void setRadiativeTransferSolvers (RefCountedPtr< RtLayout< McPhoto >> &a_rteLayout) noexcept
 Set the radiative transfer solvers. More...
 
virtual void setVoltage (const std::function< Real(const Real a_time)> &a_voltage) noexcept
 Set voltage used for the simulation. More...
 
virtual Real getTime () const noexcept
 Get current simulation time. More...
 
virtual void computeElectricField (EBAMRCellData &a_electricField, const phase::which_phase a_phase) const noexcept
 Recompute the electric field onto the specified data holder. More...
 
- Public Member Functions inherited from TimeStepper
 TimeStepper ()
 Default constructor (does nothing)
 
virtual ~TimeStepper ()
 Default destructor (does nothing)
 
void setAmr (const RefCountedPtr< AmrMesh > &a_amr)
 Set AmrMesh. More...
 
void setComputationalGeometry (const RefCountedPtr< ComputationalGeometry > &a_computationalGeometry)
 Set the computational geometry. More...
 
virtual bool needToRegrid ()
 Fuction which can have Driver do regrids at arbitrary points in the simulation. More...
 

Protected Types

enum class  TimeCode {
  Advection , Diffusion , AdvectionDiffusion , RelaxationTime ,
  Hardcap , Physics
}
 An enum for encapsulating how time steps were restricted.
 

Protected Member Functions

virtual void setupIto ()
 Set up the Ito particle solvers.
 
virtual void setupPoisson ()
 Set up the electrostatic field solver.
 
virtual void setupRadiativeTransfer ()
 Set up the radiative transfer solver.
 
virtual void setupSigma ()
 Set up the surface charge solver.
 
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. More...
 
virtual void intersectParticles (const SpeciesSubset a_speciesSubset, const ItoSolver::WhichContainer a_containerBulk, const ItoSolver::WhichContainer a_containerEB, const ItoSolver::WhichContainer a_containerDomain, const EBIntersection a_intersectionAlg, const bool a_delete) noexcept
 Intersect a subset of the particles with the domain and embedded boundary. More...
 
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) More...
 
virtual void removeCoveredParticles (const SpeciesSubset a_which, const ItoSolver::WhichContainer a_container, const EBRepresentation a_representation, const Real a_tolerance) noexcept
 Remove covered particles (i.e., particles inside the EB) More...
 
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 container. More...
 
virtual void transferCoveredParticles (const SpeciesSubset a_speciesSubset, const ItoSolver::WhichContainer a_containerFrom, const ItoSolver::WhichContainer a_containerTo, 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 container. More...
 
virtual void writeNumParticlesPerPatch (EBAMRCellData &a_output, int &a_icomp) const
 Write number of particles per patch to output holder. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
virtual Vector< RefCountedPtr< ItoSolver > > getLoadBalanceSolvers () const noexcept
 Get the solvers used for load balancing. More...
 
virtual Real computeMaxElectricField (const phase::which_phase a_phase) noexcept
 Compute the maximum electric field (norm) More...
 
virtual void computeSpaceChargeDensity () noexcept
 Compute the space charge. Calls the other version. More...
 
virtual void computeSpaceChargeDensity (MFAMRCellData &a_rho, const Vector< EBAMRCellData * > &a_densities) noexcept
 Compute the space charge density (both phases) More...
 
virtual void computeConductivityCell (EBAMRCellData &a_conductivity) noexcept
 Compute the cell-centered conductiivty. More...
 
virtual void computeConductivityCell (EBAMRCellData &a_conductivity, const Vector< ParticleContainer< ItoParticle > * > &a_particles) noexcept
 Compute the cell-centered conductiivty. More...
 
virtual void computeCurrentDensity (EBAMRCellData &a_J) noexcept
 Compute the current density. More...
 
virtual Real computeRelaxationTime () noexcept
 Compute the dielectric relaxation time.
 
virtual bool solvePoisson () noexcept
 Solve the electrostatic problem. More...
 
virtual void depositParticles (const SpeciesSubset a_speciesSubset) noexcept
 Deposit a subset of the ItoSolver particles on the mesh. More...
 
virtual void depositParticles (const SpeciesSubset a_speciesSubset, const ItoSolver::WhichContainer a_container) noexcept
 Deposit a subset of the ItoSolver particles on the mesh. More...
 
virtual void remapParticles (const SpeciesSubset a_speciesSubset) noexcept
 Remap a subset of ItoSolver particles. More...
 
virtual void remapParticles (const SpeciesSubset a_speciesSubset, const ItoSolver::WhichContainer a_container) noexcept
 Remap a subset of ItoSolver particles. More...
 
virtual void setItoVelocityFunctions () noexcept
 Set the Ito velocity functions. This is sgn(charge) * E. More...
 
virtual void computeItoVelocities () noexcept
 Compute ItoSolver velocities. More...
 
virtual void computeItoDiffusion () noexcept
 Compute ItoSolver velocities. More...
 
virtual void computeItoMobilitiesLFA () noexcept
 Compute mesh-based mobilities for LFA coupling. More...
 
virtual void computeItoMobilitiesLFA (Vector< EBAMRCellData * > &a_meshMobilities, const EBAMRCellData &a_electricField, const Real a_time) noexcept
 Compute mesh-based mobilities for LFA coupling. More...
 
virtual void computeItoMobilitiesLFA (Vector< LevelData< EBCellFAB > * > &a_meshMobilities, const LevelData< EBCellFAB > &a_E, const int a_level, const Real a_time) noexcept
 Level-routine when computing mesh-based mobilities for LFA coupling. More...
 
virtual void computeItoMobilitiesLFA (Vector< EBCellFAB * > &a_meshMobilities, const EBCellFAB &a_electricField, const int a_level, const DataIndex a_dit, const Box a_cellBox, const Real a_time) noexcept
 Patch-routine when computing mesh-based mobilities for LFA coupling. More...
 
virtual void computeItoMobilitiesLEA () noexcept
 Compute the IonSolver particle mobilities in the LEA coupling regime. More...
 
virtual void computeItoDiffusionLFA () noexcept
 Compute mesh-based diffusion coefficients for LFA coupling. More...
 
virtual void computeItoDiffusionLFA (Vector< EBAMRCellData * > &a_diffusionCoefficient, const EBAMRCellData &a_electricField, const Real a_time) noexcept
 Compute mesh-based diffusion coefficients for LFA coupling. More...
 
virtual void computeItoDiffusionLFA (Vector< LevelData< EBCellFAB > * > &a_diffusionCoefficient, const LevelData< EBCellFAB > &a_electricField, const int a_level, const Real a_time) noexcept
 Level-routine when computing mesh-based mobilities for LFA coupling. More...
 
virtual void computeItoDiffusionLFA (Vector< EBCellFAB * > &a_diffusionCoefficient, const EBCellFAB &a_E, const int a_level, const DataIndex a_dit, const Box a_box, const Real a_time) noexcept
 Patch-routine when computing mesh-based diffusion coefficients in the LFA coupling. More...
 
virtual void computeItoDiffusionLEA () noexcept
 Compute the IonSolver particle diffusion coefficients in the LEA coupling regime. More...
 
virtual void getPhysicalParticlesPerCell (EBAMRCellData &a_ppc) const noexcept
 Get the physical number of particles per cell. More...
 
virtual void computeReactiveParticlesPerCell (EBAMRCellData &a_ppc) noexcept
 Compute the number of reactive particles per cell. More...
 
virtual void computeReactiveParticlesPerCell (LevelData< EBCellFAB > &a_ppc, const int a_level) noexcept
 Compute the number of reactive particles per cell. More...
 
virtual void computeReactiveParticlesPerCell (EBCellFAB &a_ppc, const int a_level, const DataIndex a_dit, const Box a_box, const EBISBox &a_ebisbox) noexcept
 Compute the number of reactive particles per cell. More...
 
virtual void computeReactiveMeanEnergiesPerCell (EBAMRCellData &a_meanEnergies) noexcept
 Compute the mean particle energy in all grid cells. More...
 
virtual void computeReactiveMeanEnergiesPerCell (LevelData< EBCellFAB > &a_meanEnergies, const int a_level) noexcept
 Compute the mean particle energy in all grid cells. Level version. More...
 
virtual void computeReactiveMeanEnergiesPerCell (EBCellFAB &a_meanEnergies, const int a_level, const DataIndex a_dit, const Box a_box, const EBISBox &a_ebisbox) noexcept
 Compute the mean particle energy in all grid cells. Patch version. More...
 
virtual void advanceReactionNetwork (const Real a_dt) noexcept
 Chemistry advance over time a_dt. More...
 
virtual void advanceReactionNetwork (const EBAMRCellData &a_E, const EBAMRCellData &a_EdotJ, const Real a_dt) noexcept
 Chemistry advance over time a_dt. AMR version. More...
 
virtual void advanceReactionNetwork (LevelData< EBCellFAB > &a_particlesPerCell, LevelData< EBCellFAB > &a_newPhotonsPerCell, LevelData< EBCellFAB > &a_meanParticleEnergies, const LevelData< EBCellFAB > &a_electricField, const LevelData< EBCellFAB > &a_EdotJ, const int a_level, const Real a_dt) noexcept
 Chemistry advance over time a_dt. Level version. More...
 
virtual void advanceReactionNetwork (EBCellFAB &a_particlesPerCell, EBCellFAB &a_newPhotonsPerCell, EBCellFAB &a_meanParticleEnergies, const EBCellFAB &a_electricField, const EBCellFAB &a_EdotJ, const int a_level, const DataIndex a_dit, const Box a_box, const Real a_dx, const Real a_dt) noexcept
 Chemistry advance over time a_dt. Patch version. More...
 
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. More...
 
virtual void reconcileParticles (const LevelData< EBCellFAB > &a_newParticlesPerCell, const LevelData< EBCellFAB > &a_oldParticlesPerCell, const LevelData< EBCellFAB > &a_meanParticleEnergies, const LevelData< EBCellFAB > &a_newPhotonsPerCell, const int a_level) noexcept
 Reconcile particles. At the bottom, this will call the physics interface for particle reconciliation. More...
 
virtual void reconcileParticles (const EBCellFAB &a_newParticlesPerCell, const EBCellFAB &a_oldParticlesPerCell, const EBCellFAB &a_meanParticleEnergies, const EBCellFAB &a_newPhotonsPerCell, const int a_level, const DataIndex a_dit, const Box a_box, const Real a_dx) noexcept
 Reconcile particles. At the bottom, this will call the physics interface for particle reconciliation. More...
 
virtual void resolveParticlesEB (const Real a_dt) noexcept
 Resolve particle injection at EBs. More...
 
virtual void resolveParticlesEB (Vector< ParticleContainer< ItoParticle > * > &a_inOutParticles, Vector< ParticleContainer< Photon > * > &a_inOutPhotons, const EBAMRCellData &a_electricField, const Real a_dt) noexcept
 Resolve particle injection at EBs. More...
 
virtual void injectParticlesEB () noexcept
 Inject particles through the EB. More...
 
virtual void injectParticlesEB (Vector< ParticleContainer< ItoParticle > * > a_bulkParticles, Vector< ParticleContainer< ItoParticle > * > a_injectedParticles) noexcept
 Inject particles through the EB.
 
virtual Real computePhysicsDt () noexcept
 Compute a maximum time step from the physics interface. More...
 
virtual Real computePhysicsDt (const EBAMRCellData &a_electricField) noexcept
 Compute a maximum time step from the physics interface. More...
 
virtual Real computePhysicsDt (const LevelData< EBCellFAB > &a_electricField, const LevelData< EBCellFAB > &a_particlesPerCell, const int a_level) noexcept
 Compute a maximum time step from the physics interface. More...
 
virtual Real computePhysicsDt (const EBCellFAB &a_electricField, const EBCellFAB &a_particlesPercCell, const int a_level, const DataIndex a_dit, const Box a_box) noexcept
 Compute a maximum time step from the physics interface. More...
 
virtual void advancePhotons (const Real a_dt) noexcept
 Photon advancement routine. More...
 
virtual void sortPhotonsByCell (const McPhoto::WhichContainer a_which) noexcept
 Sort photons by cells. More...
 
virtual void sortPhotonsByPatch (const McPhoto::WhichContainer a_which) noexcept
 Sort photons by patch. More...
 
virtual void computeEdotJSource (const Real a_dt) noexcept
 Compute the energy source term for the various plasma species. More...
 
virtual void initialSigma ()
 Fill surface charge solver with initial data.
 
virtual void parseVerbosity () noexcept
 Parse chattiness. More...
 
virtual void parseAbort () noexcept
 Parse abort on failure.
 
virtual void parseSuperParticles () noexcept
 Parse the desired number of particles per cell. More...
 
virtual void parseDualGrid () noexcept
 Parse dual or single realm calculations. More...
 
virtual void parseLoadBalance () noexcept
 Parse load balancing.
 
virtual void parseTimeStepRestrictions () noexcept
 Parse time step restrictions.
 
virtual void parseParametersEB () noexcept
 Parse things related to the EB.
 
virtual void parsePlotVariables () noexcept
 Parse plot variables.
 

Protected Attributes

BoxSorting m_boxSort
 Box sorting method when using dual-grid with particle load balancing.
 
TimeCode m_timeCode
 Time code for understanding how the time step was restricted.
 
std::string m_fluidRealm
 Realm used for the fluid part (i.e., electrostatic) part of the simulation. More...
 
std::string m_particleRealm
 Realm used for the particle part of the simulation.
 
std::string m_name
 Time stepper name.
 
phase::which_phase m_plasmaPhase
 Phase where we solve for the plasma. More...
 
RefCountedPtr< ItoPlasmaPhysicsm_physics
 Implementation of ItoPlasmaPhysics. More...
 
RefCountedPtr< ItoLayout< ItoSolver > > m_ito
 Ito solvers.
 
RefCountedPtr< RtLayout< McPhoto > > m_rte
 Radiative transfer solvers.
 
RefCountedPtr< FieldSolverm_fieldSolver
 Field solver.
 
RefCountedPtr< SurfaceODESolver< 1 > > m_sigmaSolver
 Surface charge solver.
 
std::function< Real(const Real a_time)> m_voltage
 Voltage curve on the electrodes used in the simulation.
 
bool m_abortOnFailure
 Flag for abandoning simulation of Poisson solver fails.
 
bool m_dualGrid
 Using dual grid or not.
 
bool m_profile
 Profile kernels or not.
 
bool m_regridSuperparticles
 Do or do not superparticle merging/splitting on regrids.
 
bool m_loadBalanceParticles
 Load balance particle realm or not.
 
bool m_loadBalanceFluid
 Load balance fluid realm or not.
 
bool m_useNewReactionAlgorithm
 For switching between the old and new reaction algorithms.
 
bool m_plotConductivity
 Plot conductivity or not.
 
bool m_plotCurrentDensity
 Plot conductivity or not.
 
bool m_plotParticlesPerPatch
 Plot number of particles per patch or not.
 
Vector< int > m_particlesPerCell
 Target number of particles per cell when squishing ItoParticle's into superparticles.
 
int m_mergeInterval
 How often to merge superparticles. More...
 
Real m_loadPerCell
 The "background" load per cell when using particle load balancing. More...
 
Real m_toleranceEB
 Accepted tolerance (relative to dx) for EB intersection.
 
Real m_advectionCFL
 CFL-like time step for advection.
 
Real m_diffusionCFL
 CFL-like time step for diffusion.
 
Real m_advectionDiffusionCFL
 CFL-like time step for advection-diffusion.
 
Real m_relaxTimeFactor
 Factor proportional to the dielectric relaxation time dtRelax = eps0/sigma. More...
 
Real m_minDt
 Minimum permitted time step.
 
Real m_maxDt
 Maximum permitted time step.
 
Real m_advectionDt
 The advective time step (not multiplied by m_advectionCFL)
 
Real m_diffusionDt
 The diffusive time step (not multiplied by m_diffusionCFL)
 
Real m_advectionDiffusionDt
 The advection-diffusion time step (not multiplied by m_advectionDiffusionCFL)
 
Real m_relaxationTime
 The relaxation time eps0/sigma.
 
Real m_physicsDt
 The physics-based time step.
 
Vector< EBAMRCellDatam_loadBalancePPC
 For holding the number of computational particles per cell when load balancing.
 
Vector< int > m_loadBalanceIndices
 Solver indices used when load-balancing the particle solvers.
 
EBAMRCellData m_currentDensity
 Storage for current density. More...
 
EBAMRCellData m_conductivityCell
 Cell-centered conductivity. More...
 
EBAMRFluxData m_conductivityFace
 Face-centered conductivity. More...
 
EBAMRIVData m_conductivityEB
 EB-centered conductivity. More...
 
EBAMRCellData m_oldPPC
 For holding the number of physical particles per cell. More...
 
EBAMRCellData m_newPPC
 For holding the number of physical particles per cell. More...
 
EBAMRCellData m_particlePPC
 For holding the number of physical particles per cell for all species. More...
 
EBAMRCellData m_particleYPC
 For holding the number of generated photons per cell. More...
 
EBAMRCellData m_particleEPS
 For holding the mean particle energy. More...
 
EBAMRCellData m_particleOldPPC
 For holding the previous number of particles per cell for all species. More...
 
EBAMRCellData m_fluidPPC
 For holding the number of particles per cell for all species. More...
 
EBAMRCellData m_fluidYPC
 For holding the number of generated photons per cell. More...
 
EBAMRCellData m_fluidEPS
 For holding the mean particle energy. More...
 
EBAMRCellData m_electricFieldFluid
 Storage for holding the plasma phase electric field on the fluid realm.
 
EBAMRCellData m_electricFieldParticle
 Storage for holding the plasma phase electric field on the particle realm.
 
Vector< EBAMRCellDatam_energySources
 Storage for holding the energy sources for each species. More...
 
EBAMRCellData m_EdotJ
 Storage for holdnig E*J on the fluid realm. 1 component.
 
EBAMRCellData m_fluidScratch1
 Scratch storage on the fluid realm having 1 component.
 
EBAMRCellData m_fluidScratchD
 Scratch storage on the fluid realm with SpaceDim components.
 
EBAMRCellData m_particleScratch1
 Scratch storage on the particle realm with 1 component.
 
EBAMRCellData m_particleScratchD
 Scratch storage on the particle realm with SpaceDim components.
 
- Protected Attributes inherited from TimeStepper
int m_verbosity
 Class verbosity.
 
int m_timeStep
 Time step.
 
Real m_time
 TIme.
 
Real m_dt
 Previous time step size.
 
RefCountedPtr< AmrMeshm_amr
 AmrMesh.
 
RefCountedPtr< ComputationalGeometrym_computationalGeometry
 Computational geometry.
 

Detailed Description

Base time stepper class that advances the Ito-Poisson system of equations.

Constructor & Destructor Documentation

◆ ItoPlasmaStepper()

ItoPlasmaStepper::ItoPlasmaStepper ( RefCountedPtr< ItoPlasmaPhysics > &  a_physics)

Full constructor. Calls the other constructor.

Parameters
[in]a_physicsImplementation of the Ito plasma physics model.

Member Function Documentation

◆ advance()

virtual Real Physics::ItoPlasma::ItoPlasmaStepper::advance ( const Real  a_dt)
pure virtual

Advancement method. Needs to be implemented by subclasses.

Parameters
[in]a_dtTime step to be used for advancement
Returns
Returns the time step that was used.

Implements TimeStepper.

Implemented in Physics::ItoPlasma::ItoPlasmaGodunovStepper.

◆ advancePhotons()

void ItoPlasmaStepper::advancePhotons ( const Real  a_dt)
protectedvirtualnoexcept

Photon advancement routine.

Parameters
[in]a_dtTime step

◆ advanceReactionNetwork() [1/4]

void ItoPlasmaStepper::advanceReactionNetwork ( const EBAMRCellData a_E,
const EBAMRCellData a_EdotJ,
const Real  a_dt 
)
protectedvirtualnoexcept

Chemistry advance over time a_dt. AMR version.

Parameters
[in]a_electricFieldElectric field. Must be defined on the fluid realm.
[in]a_EdotJSource term EdotJ for each species. Must have same number of components as Ito layout and be defined on the fluid realm.
[in]a_dtTime step
Note
This will call the level versions AND reconcileParticles. The kernel will only run over valid grid cells (not covered by a finer grid.

◆ advanceReactionNetwork() [2/4]

void ItoPlasmaStepper::advanceReactionNetwork ( const Real  a_dt)
protectedvirtualnoexcept

Chemistry advance over time a_dt.

Parameters
[in]a_dtTime step
Note
This will call the other version. The kernel will only run over valid grid cells (not covered by a finer grid.

◆ advanceReactionNetwork() [3/4]

void ItoPlasmaStepper::advanceReactionNetwork ( EBCellFAB &  a_particlesPerCell,
EBCellFAB &  a_newPhotonsPerCell,
EBCellFAB &  a_meanParticleEnergies,
const EBCellFAB &  a_electricField,
const EBCellFAB &  a_EdotJ,
const int  a_level,
const DataIndex  a_dit,
const Box  a_box,
const Real  a_dx,
const Real  a_dt 
)
protectedvirtualnoexcept

Chemistry advance over time a_dt. Patch version.

Parameters
[in,out]a_particlesPerCellNumber of particles per cell for each plasma species
[in,out]a_newPhotonsPerCellNumber of physical photons to be generated for each photon species
[in,out]a_meanParticleEnergiesMean particle energies for each plasma species
[in]a_electricFieldElectric field.
[in]a_EdotJEdotJ for each plasma species.
[in]a_levelGrid level
[in]a_ditGrid index.
[in]a_boxGrid box
[in]a_dxGrid resolution.
[in]a_dtTime increment
Note
This should be called through the AMR signature. All data should be defined on the fluid realm. The kernel will only run over valid grid cells (not covered by a finer grid.

◆ advanceReactionNetwork() [4/4]

void ItoPlasmaStepper::advanceReactionNetwork ( LevelData< EBCellFAB > &  a_particlesPerCell,
LevelData< EBCellFAB > &  a_newPhotonsPerCell,
LevelData< EBCellFAB > &  a_meanParticleEnergies,
const LevelData< EBCellFAB > &  a_electricField,
const LevelData< EBCellFAB > &  a_EdotJ,
const int  a_level,
const Real  a_dt 
)
protectedvirtualnoexcept

Chemistry advance over time a_dt. Level version.

Parameters
[in,out]a_particlesPerCellNumber of particles per cell for each plasma species
[in,out]a_newPhotonsPerCellNumber of physical photons to be generated for each photon species
[in,out]a_meanParticleEnergiesMean particle energies for each plasma species
[in]a_electricFieldElectric field.
[in]a_EdotJEdotJ for each plasma species.
[in]a_levelGrid level
[in]a_dtTime increment
Note
This should be called through the AMR signature. All data should be defined on the fluid realm. The kernel will only run over valid grid cells (not covered by a finer grid.

◆ computeConductivityCell() [1/2]

void ItoPlasmaStepper::computeConductivityCell ( EBAMRCellData a_conductivity)
protectedvirtualnoexcept

Compute the cell-centered conductiivty.

Parameters
[out]a_conductivityCell-centered conductivity
Note
Calls the other version.

◆ computeConductivityCell() [2/2]

void ItoPlasmaStepper::computeConductivityCell ( EBAMRCellData a_conductivity,
const Vector< ParticleContainer< ItoParticle > * > &  a_particles 
)
protectedvirtualnoexcept

Compute the cell-centered conductiivty.

Parameters
[out]a_conductivityCell-centered conductivity
[in]a_particlesIto particles.

◆ computeCurrentDensity()

void ItoPlasmaStepper::computeCurrentDensity ( EBAMRCellData a_J)
protectedvirtualnoexcept

Compute the current density.

Note
This calls computeConductivityCell and uses m_electricFieldFluid. Make sure they're updated.

◆ computeEdotJSource()

void ItoPlasmaStepper::computeEdotJSource ( const Real  a_dt)
protectedvirtualnoexcept

Compute the energy source term for the various plasma species.

Parameters
[in]a_dtTime step during which the particles move.
Note
This fills m_EdotJ

◆ computeElectricField()

void ItoPlasmaStepper::computeElectricField ( EBAMRCellData a_electricField,
const phase::which_phase  a_phase 
) const
virtualnoexcept

Recompute the electric field onto the specified data holder.

Parameters
[out]a_electricFieldElectric field on cell centroid (defined on the fluid realm).
[in]a_phasePhase where we compute the electric field.

◆ computeItoDiffusion()

void ItoPlasmaStepper::computeItoDiffusion ( )
protectedvirtualnoexcept

Compute ItoSolver velocities.

This will compute the diffusion coefficients (in the specified coupling regime)

◆ computeItoDiffusionLEA()

void ItoPlasmaStepper::computeItoDiffusionLEA ( )
protectedvirtualnoexcept

Compute the IonSolver particle diffusion coefficients in the LEA coupling regime.

Note
This one is very simple because the solvers just update the diffusion coefficients from appropriate coupling functions.

◆ computeItoDiffusionLFA() [1/4]

void ItoPlasmaStepper::computeItoDiffusionLFA ( )
protectedvirtualnoexcept

Compute mesh-based diffusion coefficients for LFA coupling.

Note
Calls the other version with diffusion coefficients taken from ItoSolver solvers.

◆ computeItoDiffusionLFA() [2/4]

void ItoPlasmaStepper::computeItoDiffusionLFA ( Vector< EBAMRCellData * > &  a_diffusionCoefficient,
const EBAMRCellData a_electricField,
const Real  a_time 
)
protectedvirtualnoexcept

Compute mesh-based diffusion coefficients for LFA coupling.

Parameters
[out]a_diffusionCoefficientsMesh-based diffusion coefficients. Must be defined on the particle realm.
[in]a_electricFieldElectric field. Must be defined on the fluid realm.
[in]a_timeTime

◆ computeItoDiffusionLFA() [3/4]

void ItoPlasmaStepper::computeItoDiffusionLFA ( Vector< EBCellFAB * > &  a_diffusionCoefficient,
const EBCellFAB &  a_E,
const int  a_level,
const DataIndex  a_dit,
const Box  a_box,
const Real  a_time 
)
protectedvirtualnoexcept

Patch-routine when computing mesh-based diffusion coefficients in the LFA coupling.

Parameters
[out]a_diffusionCoefficientsDiffusion coefficients. Must be defined on the fluid realm.
[in]a_electricFieldElectric field. Must be defined on the fluid realm.
[in]a_levelGrid level
[in]a_timeTime
[in]a_levelGrid level
[in]a_ditGrid index
[in]a_cellBoxComputation box
[in]a_timeTime

◆ computeItoDiffusionLFA() [4/4]

void ItoPlasmaStepper::computeItoDiffusionLFA ( Vector< LevelData< EBCellFAB > * > &  a_diffusionCoefficient,
const LevelData< EBCellFAB > &  a_electricField,
const int  a_level,
const Real  a_time 
)
protectedvirtualnoexcept

Level-routine when computing mesh-based mobilities for LFA coupling.

Parameters
[out]a_diffusionCoefficientsDiffusion coefficients. Must be defined on the fluid realm.
[in]a_electricFieldElectric field. Must be defined on the fluid realm.
[in]a_levelGrid level
[in]a_timeTime

◆ computeItoMobilitiesLEA()

void ItoPlasmaStepper::computeItoMobilitiesLEA ( )
protectedvirtualnoexcept

Compute the IonSolver particle mobilities in the LEA coupling regime.

Note
This one is very simple because the solvers just update the mobilities from appropriate coupling functions.

◆ computeItoMobilitiesLFA() [1/4]

void ItoPlasmaStepper::computeItoMobilitiesLFA ( )
protectedvirtualnoexcept

Compute mesh-based mobilities for LFA coupling.

Note
Calls the other version with mesh mobilities taken from ItoSolver solvers.

◆ computeItoMobilitiesLFA() [2/4]

void ItoPlasmaStepper::computeItoMobilitiesLFA ( Vector< EBAMRCellData * > &  a_meshMobilities,
const EBAMRCellData a_electricField,
const Real  a_time 
)
protectedvirtualnoexcept

Compute mesh-based mobilities for LFA coupling.

Parameters
[out]a_meshMobilitiesMesh-based mobilities. Must be defined on the particle realm.
[in]a_electricFieldElectric field. Must be defined on the fluid realm.
[in]a_timeTime

◆ computeItoMobilitiesLFA() [3/4]

void ItoPlasmaStepper::computeItoMobilitiesLFA ( Vector< EBCellFAB * > &  a_meshMobilities,
const EBCellFAB &  a_electricField,
const int  a_level,
const DataIndex  a_dit,
const Box  a_cellBox,
const Real  a_time 
)
protectedvirtualnoexcept

Patch-routine when computing mesh-based mobilities for LFA coupling.

Parameters
[out]a_meshMobilitiesMesh-based mobilities. Must be defined on the fluid realm.
[in]a_electricFieldElectric field. Must be defined on the fluid realm.
[in]a_levelGrid level
[in]a_ditGrid index
[in]a_cellBoxComputation box
[in]a_timeTime

◆ computeItoMobilitiesLFA() [4/4]

void ItoPlasmaStepper::computeItoMobilitiesLFA ( Vector< LevelData< EBCellFAB > * > &  a_meshMobilities,
const LevelData< EBCellFAB > &  a_E,
const int  a_level,
const Real  a_time 
)
protectedvirtualnoexcept

Level-routine when computing mesh-based mobilities for LFA coupling.

Parameters
[out]a_meshMobilitiesMesh-based mobilities. Must be defined on the fluid realm.
[in]a_electricFieldElectric field. Must be defined on the fluid realm.
[in]a_levelGrid level
[in]a_timeTime

◆ computeItoVelocities()

void ItoPlasmaStepper::computeItoVelocities ( )
protectedvirtualnoexcept

Compute ItoSolver velocities.

This will compute the mobilities and then interpolate mu*E to particle positions.

◆ computeMaxElectricField()

Real ItoPlasmaStepper::computeMaxElectricField ( const phase::which_phase  a_phase)
protectedvirtualnoexcept

Compute the maximum electric field (norm)

Parameters
[in]a_phasePhase where we compute the field.

◆ computePhysicsDt() [1/4]

Real ItoPlasmaStepper::computePhysicsDt ( )
protectedvirtualnoexcept

Compute a maximum time step from the physics interface.

Note
Calls the other version with m_electricFieldParticle and the ItoSolver densities. The kernels are only called on the valid region.

◆ computePhysicsDt() [2/4]

Real ItoPlasmaStepper::computePhysicsDt ( const EBAMRCellData a_electricField)
protectedvirtualnoexcept

Compute a maximum time step from the physics interface.

Parameters
[in]a_electricFieldElectric field.
[in]a_densitiesItoSolver mesh densities.
Note
Input data must be defined on the fluid realms. Kernels are only called on the valid region.

◆ computePhysicsDt() [3/4]

Real ItoPlasmaStepper::computePhysicsDt ( const EBCellFAB &  a_electricField,
const EBCellFAB &  a_particlesPercCell,
const int  a_level,
const DataIndex  a_dit,
const Box  a_box 
)
protectedvirtualnoexcept

Compute a maximum time step from the physics interface.

Parameters
[in]a_electricFieldElectric field.
[in]a_particlesPerCellNumber of particles per grid cell
[in]a_levelGrid level
[in]a_ditGrid index
[in]a_boxGrid box
Note
Input data must be defined on the fluid realms. Kernels are only called on the valid region.

◆ computePhysicsDt() [4/4]

Real ItoPlasmaStepper::computePhysicsDt ( const LevelData< EBCellFAB > &  a_electricField,
const LevelData< EBCellFAB > &  a_particlesPerCell,
const int  a_level 
)
protectedvirtualnoexcept

Compute a maximum time step from the physics interface.

Parameters
[in]a_electricFieldElectric field.
[in]a_particlesPerCellNumber of particles per grid cell
[in]a_levelGrid level
Note
Input data must be defined on the fluid realms. Kernels are only called on the valid region.

◆ computeReactiveMeanEnergiesPerCell() [1/3]

void ItoPlasmaStepper::computeReactiveMeanEnergiesPerCell ( EBAMRCellData a_meanEnergies)
protectedvirtualnoexcept

Compute the mean particle energy in all grid cells.

Parameters
[out]a_meanEnergiesMean particle energies = sum(w * E)/sum(w) for all species.
Note
a_meanEnergies must be defined over the particle realm and have the same number of components as the number of palsma species involved in the simulation.

◆ computeReactiveMeanEnergiesPerCell() [2/3]

void ItoPlasmaStepper::computeReactiveMeanEnergiesPerCell ( EBCellFAB &  a_meanEnergies,
const int  a_level,
const DataIndex  a_dit,
const Box  a_box,
const EBISBox &  a_ebisbox 
)
protectedvirtualnoexcept

Compute the mean particle energy in all grid cells. Patch version.

Parameters
[out]a_meanEnergiesNumber of physical particles per grid cell for all species
[in]a_levelGrid level
[in]a_ditGrid index
[in]a_boxGrid box
[in]a_ebisboxEB grid box
Note
a_meanEnergies must be defined over the particle realm and have the same number of components as the number of palsma species involved in the simulation.

◆ computeReactiveMeanEnergiesPerCell() [3/3]

void ItoPlasmaStepper::computeReactiveMeanEnergiesPerCell ( LevelData< EBCellFAB > &  a_meanEnergies,
const int  a_level 
)
protectedvirtualnoexcept

Compute the mean particle energy in all grid cells. Level version.

Parameters
[out]a_meanEnergiesMean particle energies = sum(w * E)/sum(w) for all species.
[in]a_levelGrid level
Note
a_meanEnergies must be defined over the particle realm and have the same number of components as the number of palsma species involved in the simulation.

◆ computeReactiveParticlesPerCell() [1/3]

void ItoPlasmaStepper::computeReactiveParticlesPerCell ( EBAMRCellData a_ppc)
protectedvirtualnoexcept

Compute the number of reactive particles per cell.

Parameters
[out]a_ppcNumber of physical particles per grid cell for all species
Note
a_ppc Must be defined over the particle realm and have the same number of components as the number of plasma species involved in the simulation.

◆ computeReactiveParticlesPerCell() [2/3]

void ItoPlasmaStepper::computeReactiveParticlesPerCell ( EBCellFAB &  a_ppc,
const int  a_level,
const DataIndex  a_dit,
const Box  a_box,
const EBISBox &  a_ebisbox 
)
protectedvirtualnoexcept

Compute the number of reactive particles per cell.

Parameters
[out]a_ppcNumber of physical particles per grid cell for all species
[in]a_levelGrid level
[in]a_ditGrid index
[in]a_boxGrid box
[in]a_ebisboxEB grid box
Note
a_ppc Must be defined over the particle realm and have the same number of components as the number of plasma species involved in the simulation.

◆ computeReactiveParticlesPerCell() [3/3]

void ItoPlasmaStepper::computeReactiveParticlesPerCell ( LevelData< EBCellFAB > &  a_ppc,
const int  a_level 
)
protectedvirtualnoexcept

Compute the number of reactive particles per cell.

Parameters
[out]a_ppcNumber of physical particles per grid cell for all species
[in]a_levelGrid level
Note
a_ppc Must be defined over the particle realm and have the same number of components as the number of plasma species involved in the simulation.

◆ computeSpaceChargeDensity() [1/2]

void ItoPlasmaStepper::computeSpaceChargeDensity ( )
protectedvirtualnoexcept

Compute the space charge. Calls the other version.

Note
This runs through the ItoSolver densities – user should remember to deposit before calling this routine.

◆ computeSpaceChargeDensity() [2/2]

void ItoPlasmaStepper::computeSpaceChargeDensity ( MFAMRCellData a_rho,
const Vector< EBAMRCellData * > &  a_densities 
)
protectedvirtualnoexcept

Compute the space charge density (both phases)

Parameters
[out]a_rhoSpace cahrge density
[in]a_phasePhase where we compute the space charge density

◆ depositParticles() [1/2]

void ItoPlasmaStepper::depositParticles ( const SpeciesSubset  a_speciesSubset)
protectedvirtualnoexcept

Deposit a subset of the ItoSolver particles on the mesh.

Note
Calls the other version with ItoSolver::WhichContainer::Bulk

◆ depositParticles() [2/2]

void ItoPlasmaStepper::depositParticles ( const SpeciesSubset  a_speciesSubset,
const ItoSolver::WhichContainer  a_container 
)
protectedvirtualnoexcept

Deposit a subset of the ItoSolver particles on the mesh.

Parameters
[in]a_speciesSubsetSubset of species to deposit
[in]a_containerWhich container in ItoSolver to deposit.

◆ getCheckpointLoads()

Vector< long int > ItoPlasmaStepper::getCheckpointLoads ( const std::string  a_realm,
const int  a_level 
) const
overridevirtual

Get computational loads to be checkpointed.

This is used by Driver both for setting up load-balanced restarts AND for plotting the computational loads to a file. This routine is disjoint from loadBalanceBoxes because this routine is not part of a regrid. This means that we are not operating with temporarily load balanced grids, and all operators etc. are already in place.

Parameters
[in]a_realmRealm
[in]a_levelGrid level
Returns
Returns computational loads for each box on grid level a_level.

Reimplemented from TimeStepper.

◆ getLoadBalanceSolvers()

Vector< RefCountedPtr< ItoSolver > > ItoPlasmaStepper::getLoadBalanceSolvers ( ) const
protectedvirtualnoexcept

Get the solvers used for load balancing.

This depends on m_loadBalanceIndex – if it's < 0 we use ALL plasma species for load balancing.

◆ getMaxMinItoDensity()

void ItoPlasmaStepper::getMaxMinItoDensity ( Real &  a_maxDensity,
Real &  a_minDensity,
std::string &  a_maxSolver,
std::string &  a_minSolver 
) const
protectedvirtualnoexcept

Get maximum density of the Ito species.

Parameters
[out]a_maxDensityMaximum mesh density
[out]a_minDensityMinium mesh density
[out]a_maxSolverSolver with highest density
[out]a_minSolverSolver with lowest density

◆ getParticleStatistics()

void ItoPlasmaStepper::getParticleStatistics ( Real &  a_avgParticles,
Real &  a_sigma,
Real &  a_minParticles,
Real &  a_maxParticles,
int &  a_minRank,
int &  a_maxRank 
)
protectedvirtual

Compute some particle statistics.

Parameters
[out]a_avgParticlesAverage numer of particles
[out]a_sigmaParticle standard deviation (across MPI ranks)
[out]a_minParticlesMinimum number of particles
[out]a_maxParticlesMaximum number of particles
[out]a_minRankMPI rank with lowest number of particles
[out]a_maxRankMPI rank with highest number of particles

◆ getPhysicalParticlesPerCell()

void ItoPlasmaStepper::getPhysicalParticlesPerCell ( EBAMRCellData a_ppc) const
protectedvirtualnoexcept

Get the physical number of particles per cell.

Parameters
[out]a_ppcNumber of physical particles per cell. Must be defined over the fluid realm.

◆ getTime()

Real ItoPlasmaStepper::getTime ( ) const
virtualnoexcept

Get current simulation time.

Returns
m_time

◆ injectParticlesEB()

void ItoPlasmaStepper::injectParticlesEB ( )
protectedvirtualnoexcept

Inject particles through the EB.

Note
Calls the other version with solver containers.

◆ intersectParticles() [1/2]

void ItoPlasmaStepper::intersectParticles ( const SpeciesSubset  a_speciesSubset,
const EBIntersection  a_interactionAlg,
const bool  a_delete 
)
protectedvirtualnoexcept

Intersect a subset of the particles with the domain and embedded boundary.

This calls the other version, intersecting the Ito bulk particles with the EB and placing the collided particles in the appropriate particle containers (ItoSolver::WhichContainer::EB, for example).

Parameters
[in]a_speciesSubsetSubset of particles to intersect. Can be charged, mobile, diffusive, etc.
[in]a_intersectionAlgRepresentation of the EB – basically an algorithmic selection.
[in]a_deleteDelete original particles. If this is left to false, the particles are copied into the other containers.

◆ intersectParticles() [2/2]

void ItoPlasmaStepper::intersectParticles ( const SpeciesSubset  a_speciesSubset,
const ItoSolver::WhichContainer  a_containerBulk,
const ItoSolver::WhichContainer  a_containerEB,
const ItoSolver::WhichContainer  a_containerDomain,
const EBIntersection  a_intersectionAlg,
const bool  a_delete 
)
protectedvirtualnoexcept

Intersect a subset of the particles with the domain and embedded boundary.

Parameters
[in]a_speciesSubsetSubset of particles to intersect. Can be charged, mobile, diffusive, etc.
[in]a_containerBulkItoSolver container for "bulk" particles, i.e. particles that will be intersected.
[in]a_containerEBItoSolver container for EB particles.
[in]a_containerDomainItoSolver container for domain particles.
[in]a_intersectionAlgEB intersection algorithm
[in]a_deleteDelete original particles. If this is left to false, the particles are copied into the other containers.

◆ loadBalanceBoxes()

void ItoPlasmaStepper::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 
)
overridevirtual

Load balance grid boxes for a specified realm.

Parameters
[out]a_procsMPI ranks owning the various grid boxes.
[out]a_boxesGrid boxes on every level (obtain them with a_grids[lvl].boxArray())
[in]a_realmRealm identifier
[in]a_gridsOriginal grids
[in]a_lminCoarsest grid level that changed
[in]a_finestLevelNew finest grid level

This is only called by Driver if TimeStepper::loadBalanceThisRealm(a_realm) returned true. The default implementation uses volume-based loads for the grid patches. If the user wants to load balance boxes on a realm, this routine must be overwritten and he should compute loads for the various patches in a_grids and call LoadBalancing::makeBalance(Vector<int>, Vector<T>, Vector<Box>).

Reimplemented from TimeStepper.

◆ loadBalanceFluidRealm()

void ItoPlasmaStepper::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 
)
protectedvirtualnoexcept

Routine called by loadBalanceBoxes and used for particle-based load balancing.

Parameters
[out]a_procsMPI ranks owning the various grid boxes.
[out]a_boxesGrid boxes on every level (obtain them with a_grids[lvl].boxArray())
[in]a_realmRealm identifier
[in]a_gridsOriginal grids
[in]a_lminCoarsest grid level to load balance.
[in]a_finestLevelFinest grid level

◆ loadBalanceParticleRealm()

void ItoPlasmaStepper::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 
)
protectedvirtualnoexcept

Routine called by loadBalanceBoxes and used for particle-based load balancing.

Parameters
[out]a_procsMPI ranks owning the various grid boxes.
[out]a_boxesGrid boxes on every level (obtain them with a_grids[lvl].boxArray())
[in]a_realmRealm identifier
[in]a_gridsOriginal grids
[in]a_lminCoarsest grid level to load balance.
[in]a_finestLevelFinest grid level

◆ loadBalanceThisRealm()

bool ItoPlasmaStepper::loadBalanceThisRealm ( const std::string  a_realm) const
overridevirtual

Load balancing query for a specified realm. If this returns true for a_realm, load balancing routines will be called during regrids for the input realm.

Parameters
[in]a_realmRealm name

Reimplemented from TimeStepper.

◆ parseDualGrid()

void ItoPlasmaStepper::parseDualGrid ( )
protectedvirtualnoexcept

Parse dual or single realm calculations.

Sets m_particleRealm = "ParticleRealm" if 'dual_grid' is true.

◆ parseSuperParticles()

void ItoPlasmaStepper::parseSuperParticles ( )
protectedvirtualnoexcept

Parse the desired number of particles per cell.

Sets m_particlesPerCell from input script.

◆ parseVerbosity()

void ItoPlasmaStepper::parseVerbosity ( )
protectedvirtualnoexcept

Parse chattiness.

Sets m_verbosity from input script.

◆ postCheckpointPoisson()

void ItoPlasmaStepper::postCheckpointPoisson ( )
virtual

Do some post-checkpoint operations for the electrostatic part.

This computes the electric field from the checkpointed potential and populates m_electricFieldFluid and m_electricFieldParticle.

◆ postCheckpointSetup()

void ItoPlasmaStepper::postCheckpointSetup ( )
overridevirtual

Perform post-checkpoint operations.

This allocates the internal storage, recomputes the electric field and recomputes the velocity and diffusion coefficients.

Implements TimeStepper.

◆ preRegrid()

void ItoPlasmaStepper::preRegrid ( const int  a_lmin,
const int  a_oldFinestLevel 
)
overridevirtual

Perform pre-regrid operations.

This stores the particles and mesh data on the old grids.

Parameters
[in]a_lminThe coarsest level that changes
[in]a_oldFinestLevelThe finest level before the regrid.

Implements TimeStepper.

Reimplemented in Physics::ItoPlasma::ItoPlasmaGodunovStepper.

◆ reconcileParticles() [1/3]

void ItoPlasmaStepper::reconcileParticles ( const EBAMRCellData a_newParticlesPerCell,
const EBAMRCellData a_oldParticlesPerCell,
const EBAMRCellData a_meanParticleEnergies,
const EBAMRCellData a_newPhotonsPerCell 
)
protectedvirtualnoexcept

Reconcile particles. At the bottom, this will call the physics interface for particle reconciliation.

Parameters
[in]a_newParticlesPerCellParticles per cell after the chemistry advance.
[in]a_oldParticlesPerCellParticles per cell before the chemistry advance.
[in]a_meanParticleEnergiesMean particle energies after the chemistry advance.
[in]a_newPhotonsPerCellNewly generated photons per cell after the chemistry avance.
Note
All data should be defined on the particle realm since this is where the particle reconciliation takes place.

◆ reconcileParticles() [2/3]

void ItoPlasmaStepper::reconcileParticles ( const EBCellFAB &  a_newParticlesPerCell,
const EBCellFAB &  a_oldParticlesPerCell,
const EBCellFAB &  a_meanParticleEnergies,
const EBCellFAB &  a_newPhotonsPerCell,
const int  a_level,
const DataIndex  a_dit,
const Box  a_box,
const Real  a_dx 
)
protectedvirtualnoexcept

Reconcile particles. At the bottom, this will call the physics interface for particle reconciliation.

Parameters
[in]a_newParticlesPerCellParticles per cell after the chemistry advance.
[in]a_oldParticlesPerCellParticles per cell before the chemistry advance.
[in]a_meanParticleEnergiesMean particle energies after the chemistry advance.
[in]a_newPhotonsPerCellNewly generated photons per cell after the chemistry avance.
[in]a_levelGrid level
[in]a_ditGrid index
[in]a_boxGrid box
[in]a_dxGrid resolution.
Note
All data should be defined on the particle realm since this is where the particle reconciliation takes place.

◆ reconcileParticles() [3/3]

void ItoPlasmaStepper::reconcileParticles ( const LevelData< EBCellFAB > &  a_newParticlesPerCell,
const LevelData< EBCellFAB > &  a_oldParticlesPerCell,
const LevelData< EBCellFAB > &  a_meanParticleEnergies,
const LevelData< EBCellFAB > &  a_newPhotonsPerCell,
const int  a_level 
)
protectedvirtualnoexcept

Reconcile particles. At the bottom, this will call the physics interface for particle reconciliation.

Parameters
[in]a_newParticlesPerCellParticles per cell after the chemistry advance.
[in]a_oldParticlesPerCellParticles per cell before the chemistry advance.
[in]a_meanParticleEnergiesMean particle energies after the chemistry advance.
[in]a_newPhotonsPerCellNewly generated photons per cell after the chemistry avance.
[in]a_levelGrid level
Note
All data should be defined on the particle realm since this is where the particle reconciliation takes place.

◆ regrid()

void ItoPlasmaStepper::regrid ( const int  a_lmin,
const int  a_oldFinestLevel,
const int  a_newFinestLevel 
)
overridevirtual

Regrid methods – puts all data on the new mesh.

Parameters
[in]a_lminThe coarsest level that changed.
[in]a_oldFinestLevelThe finest level before the regrid.
[in]a_newFinestLevelThe finest level after the regrid.

Implements TimeStepper.

Reimplemented in Physics::ItoPlasma::ItoPlasmaGodunovStepper.

◆ remapParticles() [1/2]

void ItoPlasmaStepper::remapParticles ( const SpeciesSubset  a_speciesSubset)
protectedvirtualnoexcept

Remap a subset of ItoSolver particles.

Parameters
[in]a_speciesSubsetSubset of species to remap
Note
Calls the other version with ItoSolver::WhichContainer::Bulk

◆ remapParticles() [2/2]

void ItoPlasmaStepper::remapParticles ( const SpeciesSubset  a_speciesSubset,
const ItoSolver::WhichContainer  a_container 
)
protectedvirtualnoexcept

Remap a subset of ItoSolver particles.

Parameters
[in]a_speciesSubsetSubset of species to remap
[in]a_containerWhich container in ItoSolver to remap.

◆ removeCoveredParticles() [1/2]

void ItoPlasmaStepper::removeCoveredParticles ( const SpeciesSubset  a_which,
const EBRepresentation  a_representation,
const Real  a_tolerance 
)
protectedvirtualnoexcept

Remove covered particles (i.e., particles inside the EB)

Parameters
[in]a_speciesSubsetSubset of particles to intersect. Can be charged, mobile, diffusive, etc.
[in]a_representationRepresentation of the EB.
[in]a_toleranceTolerance for removal. Removes up to distance a_tolerance from the EB.
Note
a_representation is basically an algorithmic selection that propagates into ItoSolver

◆ removeCoveredParticles() [2/2]

void ItoPlasmaStepper::removeCoveredParticles ( const SpeciesSubset  a_which,
const ItoSolver::WhichContainer  a_container,
const EBRepresentation  a_representation,
const Real  a_tolerance 
)
protectedvirtualnoexcept

Remove covered particles (i.e., particles inside the EB)

Parameters
[in]a_speciesSubsetSubset of particles to intersect. Can be charged, mobile, diffusive, etc.
[in]a_containerWhich of the containers in ItoSolver to remove from.
[in]a_representationRepresentation of the EB.
[in]a_toleranceTolerance for removal. Removes up to distance a_tolerance from the EB.
Note
a_representation is basically an algorithmic selection that propagates into ItoSolver

◆ resolveParticlesEB() [1/2]

void ItoPlasmaStepper::resolveParticlesEB ( const Real  a_dt)
protectedvirtualnoexcept

Resolve particle injection at EBs.

Parameters
[in]a_dtTime step.
Note
Calls the other version.

◆ resolveParticlesEB() [2/2]

void ItoPlasmaStepper::resolveParticlesEB ( Vector< ParticleContainer< ItoParticle > * > &  a_inOutParticles,
Vector< ParticleContainer< Photon > * > &  a_inOutPhotons,
const EBAMRCellData a_electricField,
const Real  a_dt 
)
protectedvirtualnoexcept

Resolve particle injection at EBs.

Parameters
[in]a_dtTime step

◆ setFieldSolver()

void ItoPlasmaStepper::setFieldSolver ( RefCountedPtr< FieldSolver > &  a_fieldSolver)
virtualnoexcept

Set the field solver.

Parameters
[in]a_fieldSolverField solver

◆ setIto()

void ItoPlasmaStepper::setIto ( RefCountedPtr< ItoLayout< ItoSolver >> &  a_itoLayout)
virtualnoexcept

Set the Ito layout.

Parameters
[in]a_itoLayoutSet of ItoSolver solvers.

◆ setItoVelocityFunctions()

void ItoPlasmaStepper::setItoVelocityFunctions ( )
protectedvirtualnoexcept

Set the Ito velocity functions. This is sgn(charge) * E.

Note
This should be set before ItoSolver computes velocities.

◆ setRadiativeTransferSolvers()

void ItoPlasmaStepper::setRadiativeTransferSolvers ( RefCountedPtr< RtLayout< McPhoto >> &  a_rteLayout)
virtualnoexcept

Set the radiative transfer solvers.

Parameters
[in]a_rteLayoutRadiative transfer solvers

◆ setVoltage()

void ItoPlasmaStepper::setVoltage ( const std::function< Real(const Real a_time)> &  a_voltage)
virtualnoexcept

Set voltage used for the simulation.

Parameters
[in]a_voltageVoltage
Note
This should be done BEFORE calling setupSolvers.

◆ solvePoisson()

bool ItoPlasmaStepper::solvePoisson ( )
protectedvirtualnoexcept

Solve the electrostatic problem.

This calls the other version with all lhs/rhs taken from the field solver. Space charge density is computed in this routine.

Returns
Returns true if the solver converged.

◆ sortPhotonsByCell()

void ItoPlasmaStepper::sortPhotonsByCell ( const McPhoto::WhichContainer  a_which)
protectedvirtualnoexcept

Sort photons by cells.

Parameters
[in]a_whichWhich container to sort by cell

◆ sortPhotonsByPatch()

void ItoPlasmaStepper::sortPhotonsByPatch ( const McPhoto::WhichContainer  a_which)
protectedvirtualnoexcept

Sort photons by patch.

Parameters
[in]a_whichWhich container to sort by patch

◆ synchronizeSolverTimes()

void ItoPlasmaStepper::synchronizeSolverTimes ( const int  a_step,
const Real  a_time,
const Real  a_dt 
)
overridevirtual

Synchronize solver times for all the solvers.

Parameters
[in]a_stepTime step
[in]a_timeSimulation time
[in]a_dtLast time step used.

Implements TimeStepper.

◆ transferCoveredParticles() [1/2]

void ItoPlasmaStepper::transferCoveredParticles ( const SpeciesSubset  a_speciesSubset,
const EBRepresentation  a_representation,
const Real  a_tolerance 
)
protectedvirtualnoexcept

Transfer covered particles (i.e., particles inside the EB) from the ItoSolver bulk container to EB container.

Parameters
[in]a_speciesSubsetSubset of particles to intersect. Can be charged, mobile, diffusive, etc.
[in]a_representationRepresentation of the EB.
[in]a_toleranceTolerance for transfer. Transfers up to distance a_tolerance from the EB.
Note
a_representation is basically an algorithmic selection that propagates into ItoSolver

◆ transferCoveredParticles() [2/2]

void ItoPlasmaStepper::transferCoveredParticles ( const SpeciesSubset  a_speciesSubset,
const ItoSolver::WhichContainer  a_containerFrom,
const ItoSolver::WhichContainer  a_containerTo,
const EBRepresentation  a_representation,
const Real  a_tolerance 
)
protectedvirtualnoexcept

Transfer covered particles (i.e., particles inside the EB) from the ItoSolver bulk container to EB container.

Parameters
[in]a_speciesSubsetSubset of particles to intersect. Can be charged, mobile, diffusive, etc.
[in]a_containerFromParticle container (in ItoSolver) to transfer from
[in]a_containerToParticle container (in ItoSolver) to transfer to
[in]a_representationRepresentation of the EB.
[in]a_toleranceTolerance for transfer. Transfers up to distance a_tolerance from the EB.
Note
a_representation is basically an algorithmic selection that propagates into ItoSolver

◆ writeNumParticlesPerPatch()

void ItoPlasmaStepper::writeNumParticlesPerPatch ( EBAMRCellData a_output,
int &  a_icomp 
) const
protectedvirtual

Write number of particles per patch to output holder.

Parameters
[in,out]a_outputOutput data holder.
[in,out]a_icompStarting component in a_output to begin at.

◆ writePlotData()

void ItoPlasmaStepper::writePlotData ( EBAMRCellData a_output,
Vector< std::string > &  a_plotVariableNames,
int &  a_icomp 
) const
overridevirtual

Write plot data to output holder.

Parameters
[in,out]a_outputOutput data holder.
[in]a_plotVariableNamesPlot variable names.
[in,out]a_icompStarting component in a_output to begin at.

Implements TimeStepper.

Member Data Documentation

◆ m_conductivityCell

EBAMRCellData Physics::ItoPlasma::ItoPlasmaStepper::m_conductivityCell
protected

Cell-centered conductivity.

Note
Defined on the fluid realm with 1 component

◆ m_conductivityEB

EBAMRIVData Physics::ItoPlasma::ItoPlasmaStepper::m_conductivityEB
protected

EB-centered conductivity.

Note
Defined on the fluid realm with 1 component

◆ m_conductivityFace

EBAMRFluxData Physics::ItoPlasma::ItoPlasmaStepper::m_conductivityFace
protected

Face-centered conductivity.

Note
Defined on the fluid realm with 1 component

◆ m_currentDensity

EBAMRCellData Physics::ItoPlasma::ItoPlasmaStepper::m_currentDensity
protected

Storage for current density.

Note
Defined over the fluid realm with SpaceDim components.

◆ m_energySources

Vector<EBAMRCellData> Physics::ItoPlasma::ItoPlasmaStepper::m_energySources
protected

Storage for holding the energy sources for each species.

Note
Defined on the particle realm but about to get deprecated when we switch to the new reaction algorithm.

◆ m_fluidEPS

EBAMRCellData Physics::ItoPlasma::ItoPlasmaStepper::m_fluidEPS
protected

For holding the mean particle energy.

Note
Defined on the fluid realm with components = number of plasma species

◆ m_fluidPPC

EBAMRCellData Physics::ItoPlasma::ItoPlasmaStepper::m_fluidPPC
protected

For holding the number of particles per cell for all species.

Note
Defined on the fluid realm with components = number of plasma species

◆ m_fluidRealm

std::string Physics::ItoPlasma::ItoPlasmaStepper::m_fluidRealm
protected

Realm used for the fluid part (i.e., electrostatic) part of the simulation.

Note
This is hardcoded to Realm::Primal

◆ m_fluidYPC

EBAMRCellData Physics::ItoPlasma::ItoPlasmaStepper::m_fluidYPC
protected

For holding the number of generated photons per cell.

Note
Defined on the fluid realm with components = number of photon species

◆ m_loadPerCell

Real Physics::ItoPlasma::ItoPlasmaStepper::m_loadPerCell
protected

The "background" load per cell when using particle load balancing.

Note
This is used when computing the loads per patch on the particle realm such that the total load is m_loadPerCell * numGridPoints + numParticles.

◆ m_mergeInterval

int Physics::ItoPlasma::ItoPlasmaStepper::m_mergeInterval
protected

How often to merge superparticles.

If <= 1 we merge every time step.

◆ m_newPPC

EBAMRCellData Physics::ItoPlasma::ItoPlasmaStepper::m_newPPC
protected

For holding the number of physical particles per cell.

Note
Defined over the particle realm.

◆ m_oldPPC

EBAMRCellData Physics::ItoPlasma::ItoPlasmaStepper::m_oldPPC
protected

For holding the number of physical particles per cell.

Note
Defined over the particle realm.

◆ m_particleEPS

EBAMRCellData Physics::ItoPlasma::ItoPlasmaStepper::m_particleEPS
protected

For holding the mean particle energy.

Note
Defined on the particle realm with components = number of plasma species

◆ m_particleOldPPC

EBAMRCellData Physics::ItoPlasma::ItoPlasmaStepper::m_particleOldPPC
protected

For holding the previous number of particles per cell for all species.

Note
Defined on the particle realm with components = number of plasma species

◆ m_particlePPC

EBAMRCellData Physics::ItoPlasma::ItoPlasmaStepper::m_particlePPC
protected

For holding the number of physical particles per cell for all species.

Note
Defined on the particle realm with components = number of plasma species

◆ m_particleYPC

EBAMRCellData Physics::ItoPlasma::ItoPlasmaStepper::m_particleYPC
protected

For holding the number of generated photons per cell.

Note
Defined on the particle realm with components = number of photon species

◆ m_physics

RefCountedPtr<ItoPlasmaPhysics> Physics::ItoPlasma::ItoPlasmaStepper::m_physics
protected

Implementation of ItoPlasmaPhysics.

All solver coupling occurs through the implementation of this class

◆ m_plasmaPhase

phase::which_phase Physics::ItoPlasma::ItoPlasmaStepper::m_plasmaPhase
protected

Phase where we solve for the plasma.

Note
This is hardcoded to phase::gas

◆ m_relaxTimeFactor

Real Physics::ItoPlasma::ItoPlasmaStepper::m_relaxTimeFactor
protected

Factor proportional to the dielectric relaxation time dtRelax = eps0/sigma.

Used for restricting dt < m_relaxTimeFactor * eps0/sigma


The documentation for this class was generated from the following files: