chombo-discharge
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
Physics::ItoKMC::ItoKMCGodunovStepper< I, C, R, F > Class Template Reference

Implementation of ItoKMCStepper that uses a semi-implicit split-step formalism for advancing the Ito-Poisson-KMC system. More...

#include <CD_ItoKMCGodunovStepper.H>

Inheritance diagram for Physics::ItoKMC::ItoKMCGodunovStepper< I, C, R, F >:
Inheritance graph
[legend]
Collaboration diagram for Physics::ItoKMC::ItoKMCGodunovStepper< I, C, R, F >:
Collaboration graph
[legend]

Public Member Functions

 ItoKMCGodunovStepper ()=delete
 Disallowed default constructor. Use the full constructor.
 
 ItoKMCGodunovStepper (RefCountedPtr< ItoKMCPhysics > &a_physics)
 Full constructor. More...
 
virtual ~ItoKMCGodunovStepper ()
 Destructor. Does nothing.
 
virtual Real advance (const Real a_dt) override
 Advance the Ito-Poisson-KMC system over a_dt. More...
 
virtual void allocate () noexcept override
 Allocate storage required for advancing the equations.
 
virtual void parseOptions () noexcept override
 Parse options.
 
virtual void parseRuntimeOptions () noexcept override
 Parse run-time options.
 
virtual void preRegrid (const int a_lmin, const int a_oldFinestLevel) noexcept override
 Perform pre-regrid operations. More...
 
virtual void regrid (const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) noexcept override
 Regrid methods – puts all data on the new mesh. More...
 
virtual void postPlot () noexcept override
 Perform post-plot operations.
 
- Public Member Functions inherited from Physics::ItoKMC::ItoKMCStepper< ItoSolver, CdrCTU, McPhoto, FieldSolverMultigrid >
 ItoKMCStepper () noexcept
 Default constructor. Sets default options.
 
 ItoKMCStepper (RefCountedPtr< ItoKMCPhysics > &a_physics) noexcept
 Full constructor. Calls the other constructor. More...
 
virtual ~ItoKMCStepper () noexcept
 Destructor.
 
virtual void setupSolvers () noexcept override
 Set up solvers.
 
virtual void initialData () noexcept override
 Fill solvers with initial data.
 
virtual void postCheckpointSetup () noexcept override
 Perform post-checkpoint operations. More...
 
virtual void postInitialize () noexcept override
 Post-initialization operations. Default does nothing.
 
virtual int getNumberOfPlotVariables () const noexcept override
 Get number of plot variables for the output file.
 
virtual Vector< std::string > getPlotVariableNames () const noexcept override
 Get plot variable names.
 
virtual void writePlotData (LevelData< EBCellFAB > &a_output, int &a_icomp, const std::string a_outputRealm, const int a_level) const noexcept override
 Write plot data to output holder. More...
 
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 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) noexcept override
 Synchronize solver times for all the solvers. More...
 
virtual void printStepReport () noexcept override
 Print a step report. Used by Driver for user monitoring of simulation.
 
virtual void registerRealms () noexcept override
 Register realms used for the simulation.
 
virtual void registerOperators () noexcept override
 Register operators used for the simulation.
 
virtual void prePlot () noexcept override
 Perform pre-plot operations.
 
virtual void postRegrid () noexcept override
 Perform post-regrid operations.
 
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 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  WhichAlgorithm { EulerMaruyama }
 Simple enum for distinguishing between algorithms.
 
- Protected Types inherited from Physics::ItoKMC::ItoKMCStepper< ItoSolver, CdrCTU, McPhoto, FieldSolverMultigrid >
enum class  TimeCode
 An enum for encapsulating how time steps were restricted.
 

Protected Member Functions

virtual void allocateInternals () noexcept override
 Allocate "internal" storage.
 
virtual void parseAlgorithm () noexcept
 Parse advancement algorithm.
 
virtual void parseCheckpointParticles () noexcept
 Parse checkpoint-restart functionality.
 
virtual void setOldPositions () noexcept
 Set the starting positions for the ItoSolver particles.
 
virtual void barrier () const noexcept
 Set an MPI barrier if using debug mode. More...
 
virtual void remapPointParticles (Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_particles, const SpeciesSubset a_subset) noexcept
 Remap the input point particles. More...
 
virtual void depositPointParticles (const Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_particles, const SpeciesSubset a_subset) noexcept
 Deposit the input point particles on the mesh. More...
 
virtual void clearPointParticles (const Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_particles, const SpeciesSubset a_subset) noexcept
 Clear the input particle data holders. More...
 
virtual void computeConductivities (const Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_particles) noexcept
 Compute all conductivities (cell, face, and EB) from the input point particles. More...
 
virtual void computeCellConductivity (EBAMRCellData &a_conductivityCell, const Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_particles) noexcept
 Compute the cell-centered conductivity. More...
 
virtual void computeFaceConductivity () noexcept
 Compute the cell-centered conductivity. More...
 
virtual void computeSemiImplicitRho () noexcept
 Set up the space charge density for the regrid operation.
 
virtual void setupSemiImplicitPoisson (const Real a_dt) noexcept
 Set up the semi-implicit Poisson solver.
 
virtual void removeCoveredPointParticles (Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_particles, const EBRepresentation a_representation, const Real a_tolerance) const noexcept
 Remove covered particles. More...
 
virtual void copyConductivityParticles (Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_conductivityParticles) noexcept
 Copy particles from the ItoSolver into PointParticles whose weight are ItoParticle::m_weight * ItoParticle::m_mobility. More...
 
virtual void advanceEulerMaruyama (const Real a_dt) noexcept
 Advance the particles using the Euler-Maruyama scheme. More...
 
virtual void diffuseParticlesEulerMaruyama (Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &a_rhoDaggerParticles, const Real a_dt) noexcept
 Perform the diffusive Ito advance in the Euler-Maruyama step. More...
 
virtual void computeDiffusionTermCDR (EBAMRCellData &m_semiImplicitRhoCDR, const Real a_dt) noexcept
 Compute the diffusion term for the CDR equations as well as the resulting CDR-contributions to the space charge density. More...
 
virtual void stepEulerMaruyamaParticles (const Real a_dt) noexcept
 Step the particles according to the regular Euler-Maruyama scheme. More...
 
virtual void stepEulerMaruyamaCDR (const Real a_dt) noexcept
 Step the CDR equations according to the regular Euler-Maruyama scheme. More...
 
virtual void plotParticles () const noexcept
 Utility function for plotting the ItoSolver particles. These are written in a particles folder.
 
- Protected Member Functions inherited from Physics::ItoKMC::ItoKMCStepper< ItoSolver, CdrCTU, McPhoto, FieldSolverMultigrid >
virtual void setupIto () noexcept
 Set up the Ito particle solvers.
 
virtual void setupCdr () noexcept
 Set up the CDR solvers.
 
virtual void setupRadiativeTransfer () noexcept
 Set up the radiative transfer solver.
 
virtual void setupPoisson () noexcept
 Set up the electrostatic field solver.
 
virtual void setupSigma () noexcept
 Set up the surface charge solver.
 
virtual void intersectParticles (const SpeciesSubset a_speciesSubset, const bool a_delete, const std::function< void(ItoParticle &)> a_nonDeletionModifier=[](ItoParticle &) -> void { return;}) 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 bool a_delete, const std::function< void(ItoParticle &)> a_nonDeletionModifier=[](ItoParticle &) -> void { return;}) 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 writeData (LevelData< EBCellFAB > &a_output, int &a_comp, const EBAMRCellData &a_data, const std::string a_outputRealm, const int a_level, const bool a_interpToCentroids, const bool a_interpGhost) const noexcept
 Write data to output. Convenience function. More...
 
virtual void writeNumberOfParticlesPerPatch (LevelData< EBCellFAB > &a_output, int &a_icomp, const std::string a_outputRealm, const int a_level) const noexcept
 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 getMaxMinCDRDensity (Real &a_maxDensity, Real &a_minDensity, std::string &a_maxSolver, std::string &a_minSolver) const noexcept
 Get maximum density of the CDr 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) const 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_itoDensities, const Vector< EBAMRCellData * > &a_cdrDensities) noexcept
 Compute the space charge density. 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 computeDensityGradients () noexcept
 Compute grad(phi) and phi for both CDR and Ito species and put the result on the fluid realm. 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 computeDriftVelocities () noexcept
 Compute ItoSolver velocities. More...
 
virtual void setItoVelocityFunctions () noexcept
 Set the Ito velocity functions. This is sgn(charge) * E. More...
 
virtual void setCdrVelocityFunctions () noexcept
 Set the Cdr velocities to be sgn(charge) * E. More...
 
virtual void multiplyCdrVelocitiesByMobilities () noexcept
 Multiply CDR solver velocities by mobilities.
 
virtual void computeMobilities () noexcept
 Compute mesh-based mobilities for LFA coupling. More...
 
virtual void computeMobilities (Vector< EBAMRCellData * > &a_itoMobilities, Vector< EBAMRCellData > &a_cdrMobilities, const EBAMRCellData &a_electricField, const Real a_time) noexcept
 Compute mesh-based mobilities for LFA coupling. More...
 
virtual void computeMobilities (Vector< LevelData< EBCellFAB > * > &a_itoMobilities, Vector< LevelData< EBCellFAB > * > &a_cdrMobilities, 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 computeMobilities (Vector< EBCellFAB * > &a_itoMobilities, Vector< EBCellFAB * > &a_cdrMobilities, 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 computeDiffusionCoefficients () noexcept
 Compute mesh-based diffusion coefficients for LFA coupling. More...
 
virtual void computeDiffusionCoefficients (Vector< EBAMRCellData * > &a_itoDiffusionCoefficients, Vector< EBAMRCellData * > &a_cdrDiffusionCoefficients, const EBAMRCellData &a_electricField, const Real a_time) noexcept
 Compute mesh-based diffusion coefficients for LFA coupling. More...
 
virtual void computeDiffusionCoefficients (Vector< LevelData< EBCellFAB > * > &a_itoDiffusionCoefficients, Vector< LevelData< EBCellFAB > * > &a_cdrDiffusionCoefficients, 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 computeDiffusionCoefficients (Vector< EBCellFAB * > &a_itoDiffusionCoefficients, Vector< EBCellFAB * > &a_cdrDiffusionCoefficients, 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 averageDiffusionCoefficientsCellToFace () noexcept
 Average cell-centered diffusion coefficient to faces.
 
virtual void getPhysicalParticlesPerCell (EBAMRCellData &a_ppc) const noexcept
 Get the physical number of particles per cell. More...
 
virtual void computeReactiveItoParticlesPerCell (EBAMRCellData &a_ppc) noexcept
 Compute the number of reactive particles per cell. More...
 
virtual void computeReactiveItoParticlesPerCell (LevelData< EBCellFAB > &a_ppc, const int a_level) noexcept
 Compute the number of reactive particles per cell. More...
 
virtual void computeReactiveItoParticlesPerCell (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 computeReactiveCdrParticlesPerCell (EBAMRCellData &a_ppc) noexcept
 Compute the number of reactive particles per cell for the CDR solvers. More...
 
virtual void computeReactiveCdrParticlesPerCell (LevelData< EBCellFAB > &a_ppc, const int a_level) noexcept
 Compute the number of reactive particles per cell for the CDR solvers. More...
 
virtual void computeReactiveCdrParticlesPerCell (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 for the CDR solvers. 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 Real a_dt) noexcept
 Chemistry advance over time a_dt. AMR version. More...
 
void advanceReactionNetwork (LevelData< EBCellFAB > &a_particlesPerCell, LevelData< EBCellFAB > &a_newPhotonsPerCell, const LevelData< EBCellFAB > &a_electricField, const int a_level, const Real a_dt) const noexcept
 Chemistry advance over time a_dt. Level version. More...
 
void advanceReactionNetwork (EBCellFAB &a_particlesPerCell, EBCellFAB &a_newPhotonsPerCell, const EBCellFAB &a_electricField, const int a_level, const DataIndex a_dit, const Box a_box, const Real a_dx, const Real a_dt) const noexcept
 Chemistry advance over time a_dt. Patch version. More...
 
void reconcileParticles (const EBAMRCellData &a_newParticlesPerCell, const EBAMRCellData &a_oldParticlesPerCell, const EBAMRCellData &a_newPhotonsPerCell) const noexcept
 Reconcile particles. At the bottom, this will call the physics interface for particle reconciliation. More...
 
void reconcileParticles (const LevelData< EBCellFAB > &a_newParticlesPerCell, const LevelData< EBCellFAB > &a_oldParticlesPerCell, const LevelData< EBCellFAB > &a_newPhotonsPerCell, const int a_level) const noexcept
 Reconcile particles. At the bottom, this will call the physics interface for particle reconciliation. More...
 
void reconcileParticles (const EBCellFAB &a_newParticlesPerCell, const EBCellFAB &a_oldParticlesPerCell, const EBCellFAB &a_newPhotonsPerCell, const int a_level, const DataIndex a_dit, const Box a_box, const Real a_dx) const noexcept
 Reconcile particles. At the bottom, this will call the physics interface for particle reconciliation. More...
 
virtual void reconcilePhotoionization () noexcept
 Reconcile the results from photoionization reactions. More...
 
virtual void reconcileCdrDensities (const EBAMRCellData &a_newParticlesPerCell, const EBAMRCellData &a_oldParticlesPerCell, const Real a_dt) noexcept
 Reconcile the CDR densities after the reaction network. More...
 
virtual void reconcileCdrDensities (const LevelData< EBCellFAB > &a_newParticlesPerCell, const LevelData< EBCellFAB > &a_oldParticlesPerCell, const int a_level, const Real a_dt) noexcept
 Reconcile the CDR densities after the reaction network. More...
 
virtual void reconcileCdrDensities (const EBCellFAB &a_newParticlesPerCell, const EBCellFAB &a_oldParticlesPerCell, const int a_level, const DataIndex a_dit, const Box a_box, const Real a_dx, const Real a_dt) noexcept
 Reconcile the CDR densities after the reaction network. More...
 
virtual void coarsenCDRSolvers () noexcept
 Coarsen data for CDR solvers.
 
virtual void fillSecondaryEmissionEB (const Real a_dt) noexcept
 Resolve particle injection at EBs. More...
 
virtual void fillSecondaryEmissionEB (Vector< ParticleContainer< ItoParticle >> &a_secondaryParticles, Vector< EBAMRIVData > &a_cdrFluxes, Vector< ParticleContainer< Photon >> &a_secondaryPhotons, Vector< ParticleContainer< ItoParticle > * > &a_primaryParticles, Vector< EBAMRIVData > &a_cdrFluxesExtrap, Vector< ParticleContainer< Photon > * > &a_primaryPhotons, const EBAMRCellData &a_electricField, const Real a_dt) noexcept
 Compute secondary emission at the EB. More...
 
virtual void resolveSecondaryEmissionEB (const Real a_dt) noexcept
 Resolve secondary emission at the EB. More...
 
virtual void resolveSecondaryEmissionEB (Vector< ParticleContainer< ItoParticle > * > &a_secondaryParticles, Vector< ParticleContainer< ItoParticle > * > &a_primaryParticles, Vector< EBAMRIVData * > &a_cdrFluxes, EBAMRIVData &a_surfaceChargeDensity, const Real a_dt) noexcept
 Resolve secondary emission at the EB. More...
 
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 Real computeTotalCharge () const noexcept
 Compute total charge.
 
virtual Real computeQplus () const noexcept
 Compute positive charge.
 
virtual Real computeQminu () const noexcept
 Compute negative charge.
 
virtual Real computeQsurf () const noexcept
 Compute surface charge.
 
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 postCheckpointPoisson () noexcept
 Do some post-checkpoint operations for the electrostatic part. More...
 
virtual void computeEdotJSource (const Real a_dt) noexcept
 Compute the energy source term for the various plasma species. More...
 
virtual void initialSigma () noexcept
 Fill surface charge solver with initial data taken from the physics interface.
 
virtual void parseVerbosity () noexcept
 Parse chattiness. More...
 
virtual void parseExitOnFailure () noexcept
 Parse exit on failure.
 
virtual void parseRedistributeCDR () noexcept
 Parse CDR mass redistribution when assigning reactive products.
 
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 parameters related to how we treat particle-EB interaction.
 
virtual void parsePlotVariables () noexcept
 Parse plot variables.
 
virtual void computePhysicsPlotVariables (EBAMRCellData &a_physicsPlotVars) noexcept
 Compute physics plot variables. More...
 

Protected Attributes

bool m_writeCheckpointParticles
 If true, then the particles are checkpointed so we can regrid on checkpoint-restart.
 
bool m_readCheckpointParticles
 If true, then the HDF5 checkpoint file contained particles that we can read.
 
bool m_canRegridOnRestart
 If true, then the class supports regrid-on-restart. More...
 
bool m_extendConductivityEB
 For achieving a slightly smoother gradient in the conductivity near the EB.
 
bool m_smoothConductivity
 Smooth the conductivity or not.
 
WhichAlgorithm m_algorithm
 Which advancement algorithm to use.
 
Timer m_timer
 Timer used for run-time logging of routines.
 
Vector< RefCountedPtr< ParticleContainer< PointParticle > > > m_conductivityParticles
 Storage for simplified particles that gave us sigma^k. More...
 
Vector< RefCountedPtr< ParticleContainer< PointParticle > > > m_irregularParticles
 Storage for particles that fell inside the EB but should still contribute to the conductivity.
 
Vector< RefCountedPtr< ParticleContainer< PointParticle > > > m_rhoDaggerParticles
 Storage for particles that gave rho^dagger. More...
 
EBAMRCellData m_semiImplicitRhoCDR
 Storage for CDR densities used during the semi-implicit solve. More...
 
EBAMRCellData m_semiImplicitConductivityCDR
 Storage for conductivity term due to mobile CDR species. More...
 
EBAMRCellData m_scratchSemiImplicitRhoCDR
 Scratch storage for CDR contribution to space charge density. More...
 
EBAMRCellData m_scratchSemiImplicitConductivityCDR
 Scratch storage for CDR contribution to conductivity. More...
 
Vector< EBAMRCellDatam_cdrDivD
 Storage for the finite-volume approximation of div(D*grad(phi)) for the CDR equations.
 
- Protected Attributes inherited from Physics::ItoKMC::ItoKMCStepper< ItoSolver, CdrCTU, McPhoto, FieldSolverMultigrid >
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< ItoKMCPhysicsm_physics
 Implementation of ItoKMCPhysics. More...
 
RefCountedPtr< ItoLayout< ItoSolver > > m_ito
 Ito solvers.
 
RefCountedPtr< CdrLayout< CdrSolver > > m_cdr
 CDR solvers.
 
RefCountedPtr< RtLayout< McPhoto > > m_rte
 Radiative transfer solvers.
 
RefCountedPtr< FieldSolverm_fieldSolver
 Field solver.
 
RefCountedPtr< SurfaceODESolver< 1 > > m_sigmaSolver
 Surface charge solver.
 
Vector< ParticleContainer< ItoParticle > > m_secondaryParticles
 List of secondary particles injected through the EB. More...
 
Vector< ParticleContainer< Photon > > m_secondaryPhotons
 List of secondary photons injected through the EB. More...
 
Vector< EBAMRIVDatam_cdrFluxes
 CDR fluxes for CDR BCs. More...
 
Vector< EBAMRIVDatam_cdrFluxesExtrap
 Extrapolated CDR fluxes.
 
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_redistributeCDR
 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_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_prevDt
 Previous time step.
 
Real m_maxGrowthDt
 Maximum permissible time step growth.
 
Real m_maxShrinkDt
 Maximum permissible time step shrinkage.
 
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_minParticleAdvectionCFL
 Minimum CFL-like time step for particle advection.
 
Real m_maxParticleAdvectionCFL
 Maximum CFL-like time step for particle advection.
 
Real m_minParticleDiffusionCFL
 Minium CFL-like time step for particle diffusion.
 
Real m_maxParticleDiffusionCFL
 Maximum CFL-like time step for particle diffusion.
 
Real m_minParticleAdvectionDiffusionCFL
 Maximum CFL-like time step for particle advection-diffusion.
 
Real m_maxParticleAdvectionDiffusionCFL
 Maximum CFL-like time step for particle advection-diffusion.
 
Real m_fluidAdvectionDiffusionCFL
 CFL-like time step for fluid 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_particleAdvectionDt
 The particle advective time step.
 
Real m_particleDiffusionDt
 The particle diffusive time step.
 
Real m_particleAdvectionDiffusionDt
 The advection-diffusion time step.
 
Real m_fluidAdvectionDiffusionDt
 The advection-diffusion time step for the CDR equations.
 
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< EBAMRCellDatam_cdrMobilities
 For holding the mobilities for the CDR species. More...
 
Vector< EBAMRCellDatam_fluidGradPhiCDR
 For holding the gradient of all CDR species densities. More...
 
Vector< EBAMRCellDatam_fluidGradPhiIto
 For holding the gradient of all Ito species densities. More...
 
Vector< EBAMRCellDatam_fluidPhiIto
 For holding the Ito species densities on the fluid realm.
 
Vector< ParticleContainer< PointParticle > > m_cdrPhotoiProducts
 Photoionization products to be put in the CDR equations. More...
 
Vector< int > m_loadBalanceIndices
 Solver indices used when load-balancing the particle solvers.
 
EBAMRCellData m_currentDensity
 Storage for current density. More...
 
EBAMRCellData m_physicsPlotVariables
 Storage for physics plot variables.
 
EBAMRCellData m_conductivityCell
 Cell-centered conductivity. More...
 
EBAMRFluxData m_conductivityFace
 Face-centered conductivity. More...
 
EBAMRIVData m_conductivityEB
 EB-centered conductivity. More...
 
EBAMRCellData m_particleItoPPC
 For holding the number of physical particles per cell for all Ito 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_particleOldItoPPC
 For holding the previous number of particles per cell for all species. More...
 
EBAMRCellData m_fluidCdrPPC
 For holding the number of physical particles per cell for all CDR species. More...
 
EBAMRCellData m_fluidOldCdrPPC
 For holding the previous number of physical particles per cell for all CDR 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_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.
 
EBAMRIVData m_fluidScratchEB
 Scratch storage for EB-only data on the fluid realm. One component.
 
EBAMRIVData m_particleScratchEB
 Scratch storage for EB-only data on the particle realm. One component.
 
- 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

template<typename I = ItoSolver, typename C = CdrCTU, typename R = McPhoto, typename F = FieldSolverMultigrid>
class Physics::ItoKMC::ItoKMCGodunovStepper< I, C, R, F >

Implementation of ItoKMCStepper that uses a semi-implicit split-step formalism for advancing the Ito-Poisson-KMC system.

Constructor & Destructor Documentation

◆ ItoKMCGodunovStepper()

template<typename I , typename C , typename R , typename F >
ItoKMCGodunovStepper::ItoKMCGodunovStepper ( RefCountedPtr< ItoKMCPhysics > &  a_physics)

Full constructor.

Parameters
[in]a_phyicsPhysics implementation.

Member Function Documentation

◆ advance()

template<typename I , typename C , typename R , typename F >
Real ItoKMCGodunovStepper::advance ( const Real  a_dt)
overridevirtual

Advance the Ito-Poisson-KMC system over a_dt.

Parameters
[in]a_dtTime step

Implements Physics::ItoKMC::ItoKMCStepper< ItoSolver, CdrCTU, McPhoto, FieldSolverMultigrid >.

◆ advanceEulerMaruyama()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::advanceEulerMaruyama ( const Real  a_dt)
protectedvirtualnoexcept

Advance the particles using the Euler-Maruyama scheme.

Parameters
[in]a_dtTime step

◆ barrier()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::barrier
protectedvirtualnoexcept

Set an MPI barrier if using debug mode.

This defaults to ParallelOps::barrier() if m_debug=true

◆ clearPointParticles()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::clearPointParticles ( const Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &  a_particles,
const SpeciesSubset  a_subset 
)
protectedvirtualnoexcept

Clear the input particle data holders.

Parameters
[in,out]a_particlesList of particle containers to remap. Indices must correspond to indices in the ItoSolvers
[in]a_subsetParticle subset to remap.

◆ computeCellConductivity()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::computeCellConductivity ( EBAMRCellData a_conductivityCell,
const Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &  a_particles 
)
protectedvirtualnoexcept

Compute the cell-centered conductivity.

Parameters
[out]a_conductivityCellCell-centered conductivity
[in]a_particlesParticles to deposit. Particle weights must hold the mobility*weight
Note
Also adds in the conductive contribution from the CDR solvers.

◆ computeConductivities()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::computeConductivities ( const Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &  a_particles)
protectedvirtualnoexcept

Compute all conductivities (cell, face, and EB) from the input point particles.

Parameters
[in]a_particlesParticles to deposit. Particle weights must hold the mobility*weight
Note
This deposits the input particle weights onto m_conductivityCell, m_conductivityFace.
Also adds in the conductive contribution from the CDR solvers.

◆ computeDiffusionTermCDR()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::computeDiffusionTermCDR ( EBAMRCellData m_semiImplicitRhoCDR,
const Real  a_dt 
)
protectedvirtualnoexcept

Compute the diffusion term for the CDR equations as well as the resulting CDR-contributions to the space charge density.

This does an explicit diffusion advance over a_dt for the diffusive CDR species. This also stores the resultant space charge on m_semiImplicitRhoCDR.

◆ computeFaceConductivity()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::computeFaceConductivity
protectedvirtualnoexcept

Compute the cell-centered conductivity.

Note
Interpolates m_conductivityCell to m_conductivityFace

◆ copyConductivityParticles()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::copyConductivityParticles ( Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &  a_conductivityParticles)
protectedvirtualnoexcept

Copy particles from the ItoSolver into PointParticles whose weight are ItoParticle::m_weight * ItoParticle::m_mobility.

Parameters
[out]a_conductivityParticlesPoint-particles holding the mobility * weight

◆ depositPointParticles()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::depositPointParticles ( const Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &  a_particles,
const SpeciesSubset  a_subset 
)
protectedvirtualnoexcept

Deposit the input point particles on the mesh.

Parameters
[in,out]a_particlesList of particle containers to remap. Indices must correspond to indices in the ItoSolvers
[in]a_subsetParticle subset to remap.
Note
This deposits into the ItoSolver m_phi data.

◆ diffuseParticlesEulerMaruyama()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::diffuseParticlesEulerMaruyama ( Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &  a_rhoDaggerParticles,
const Real  a_dt 
)
protectedvirtualnoexcept

Perform the diffusive Ito advance in the Euler-Maruyama step.

This computes the diffusion hop onto run-time enabled storage on the ItoParticles. We also store the "rho dagger" particles which correspond to the position of the charged particles after the diffusionhop.

◆ preRegrid()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::preRegrid ( const int  a_lmin,
const int  a_oldFinestLevel 
)
overridevirtualnoexcept

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.
Note
This will store the "conductivity" and "rho dagger" particles.

Reimplemented from Physics::ItoKMC::ItoKMCStepper< ItoSolver, CdrCTU, McPhoto, FieldSolverMultigrid >.

◆ regrid()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::regrid ( const int  a_lmin,
const int  a_oldFinestLevel,
const int  a_newFinestLevel 
)
overridevirtualnoexcept

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.

Reimplemented from Physics::ItoKMC::ItoKMCStepper< ItoSolver, CdrCTU, McPhoto, FieldSolverMultigrid >.

◆ remapPointParticles()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::remapPointParticles ( Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &  a_particles,
const SpeciesSubset  a_subset 
)
protectedvirtualnoexcept

Remap the input point particles.

Parameters
[in,out]a_particlesList of particle containers to remap. Indices must correspond to indices in the ItoSolvers
[in]a_subsetParticle subset to remap.

◆ removeCoveredPointParticles()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::removeCoveredPointParticles ( Vector< RefCountedPtr< ParticleContainer< PointParticle >>> &  a_particles,
const EBRepresentation  a_representation,
const Real  a_tolerance 
) const
protectedvirtualnoexcept

Remove covered particles.

Parameters
[in,out]a_particlesParticles to remove
[in]a_representationRepresentation of the EB
[in]a_toleranceEB tolerance

◆ stepEulerMaruyamaCDR()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::stepEulerMaruyamaCDR ( const Real  a_dt)
protectedvirtualnoexcept

Step the CDR equations according to the regular Euler-Maruyama scheme.

Parameters
[in]a_dtTime step.

This sets phi^(k+1) = phi^k - a_dt * div(v * phi) + a_dt * div(D*grad(phi))

◆ stepEulerMaruyamaParticles()

template<typename I , typename C , typename R , typename F >
void ItoKMCGodunovStepper::stepEulerMaruyamaParticles ( const Real  a_dt)
protectedvirtualnoexcept

Step the particles according to the regular Euler-Maruyama scheme.

Parameters
[in]a_dtTime step.

This sets X^(k+1) = X^k + a_dt * V + sqrt(2*D*a_dt) * W

Note
The hop MUST have been stored on the particle run-time storage

Member Data Documentation

◆ m_canRegridOnRestart

template<typename I = ItoSolver, typename C = CdrCTU, typename R = McPhoto, typename F = FieldSolverMultigrid>
bool Physics::ItoKMC::ItoKMCGodunovStepper< I, C, R, F >::m_canRegridOnRestart
protected

If true, then the class supports regrid-on-restart.

This is populated in the constructor or when reading the checkpoint file.

◆ m_conductivityParticles

template<typename I = ItoSolver, typename C = CdrCTU, typename R = McPhoto, typename F = FieldSolverMultigrid>
Vector<RefCountedPtr<ParticleContainer<PointParticle> > > Physics::ItoKMC::ItoKMCGodunovStepper< I, C, R, F >::m_conductivityParticles
protected

Storage for simplified particles that gave us sigma^k.

Note
Needed for regrids

◆ m_rhoDaggerParticles

template<typename I = ItoSolver, typename C = CdrCTU, typename R = McPhoto, typename F = FieldSolverMultigrid>
Vector<RefCountedPtr<ParticleContainer<PointParticle> > > Physics::ItoKMC::ItoKMCGodunovStepper< I, C, R, F >::m_rhoDaggerParticles
protected

Storage for particles that gave rho^dagger.

Note
Needed for regrids

◆ m_scratchSemiImplicitConductivityCDR

template<typename I = ItoSolver, typename C = CdrCTU, typename R = McPhoto, typename F = FieldSolverMultigrid>
EBAMRCellData Physics::ItoKMC::ItoKMCGodunovStepper< I, C, R, F >::m_scratchSemiImplicitConductivityCDR
protected

Scratch storage for CDR contribution to conductivity.

Note
Only used during regrids.

◆ m_scratchSemiImplicitRhoCDR

template<typename I = ItoSolver, typename C = CdrCTU, typename R = McPhoto, typename F = FieldSolverMultigrid>
EBAMRCellData Physics::ItoKMC::ItoKMCGodunovStepper< I, C, R, F >::m_scratchSemiImplicitRhoCDR
protected

Scratch storage for CDR contribution to space charge density.

Note
Only used during regrids.

◆ m_semiImplicitConductivityCDR

template<typename I = ItoSolver, typename C = CdrCTU, typename R = McPhoto, typename F = FieldSolverMultigrid>
EBAMRCellData Physics::ItoKMC::ItoKMCGodunovStepper< I, C, R, F >::m_semiImplicitConductivityCDR
protected

Storage for conductivity term due to mobile CDR species.

Note
This is needed because the semi-implicit requires the conductivity when solving the Poisson equation.

◆ m_semiImplicitRhoCDR

template<typename I = ItoSolver, typename C = CdrCTU, typename R = McPhoto, typename F = FieldSolverMultigrid>
EBAMRCellData Physics::ItoKMC::ItoKMCGodunovStepper< I, C, R, F >::m_semiImplicitRhoCDR
protected

Storage for CDR densities used during the semi-implicit solve.

Note
This is needed because the semi-implicit requires the space charge from before the reaction step.

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