chombo-discharge
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Physics::Electrostatics::FieldStepper< T > Class Template Reference

Implementation of TimeStepper for solving electrostatic problems. The template parameter is the FieldSolver implementation type. More...

#include <CD_FieldStepper.H>

Inheritance diagram for Physics::Electrostatics::FieldStepper< T >:
Inheritance graph
[legend]
Collaboration diagram for Physics::Electrostatics::FieldStepper< T >:
Collaboration graph
[legend]

Public Member Functions

 FieldStepper ()
 Constructor – parses some input options.
 
virtual ~FieldStepper ()
 Destructor (does nothing)
 
void setupSolvers () override
 Solver setup routine. This instantiates the FieldSolver and parses input options.
 
void initialData () override
 Set initial data – this sets the space and surface charges.
 
void postInitialize () override
 Post-initialization routine. This solves the Poisson equation.
 
void allocate () override
 Allocation method – allocates memory and internal data for solvers.
 
MFAMRCellDatagetPotential ()
 Get the potential.
 
void postCheckpointSetup () override
 Post-initialize operations to be performed – does nothing.
 
int getNumberOfPlotVariables () const override
 Get number of plot variables. More...
 
Vector< std::string > getPlotVariableNames () const override
 Get plot variable names.
 
void writePlotData (LevelData< EBCellFAB > &a_output, int &a_icomp, const std::string a_outputRealm, const int a_level) const override
 Write plot data to file. More...
 
Real computeDt () override
 Compute time step. More...
 
Real advance (const Real a_dt) override
 Perform a single time step with step a_dt. More...
 
void synchronizeSolverTimes (const int a_step, const Real a_time, const Real a_dt) override
 Synchronzie solver times and time steps. More...
 
void printStepReport () override
 Print step report – this does nothing.
 
void registerRealms () override
 Register simulation realms to be used for this simulation module.
 
void registerOperators () override
 Register operators for this simulation module.
 
void preRegrid (const int a_lbase, const int a_finestLevel) override
 Perform pre-regrid operations. More...
 
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. More...
 
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...
 
void regrid (const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override
 Regrid method – regrids the potential distribution in FieldSolver (but does not solve the Poisson equation, that is done in postRegrid()). More...
 
void postRegrid () override
 Perform post-regrid operations – this will resolve the Poisson equation. More...
 
void setRho (const std::function< Real(const RealVect &a_pos)> &a_rho, const phase::which_phase a_phase) noexcept
 Set space charge. More...
 
void setSigma (const std::function< Real(const RealVect &a_pos)> &a_sigma) noexcept
 Set surface charge. 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 void parseRuntimeOptions ()
 Parse runtime options. More...
 
virtual void prePlot ()
 An option for calling special functions prior to plotting data. Called by Driver in the IMMEDIATELY before writing the plot file.
 
virtual void postPlot ()
 An option for calling special functions prior to plotting data. Called by Driver in the IMMEDIATELY after writing the plot file.
 
virtual Vector< long int > getCheckpointLoads (const std::string a_realm, const int a_level) const
 Get computational loads to be checkpointed. More...
 
virtual bool needToRegrid ()
 Fuction which can have Driver do regrids at arbitrary points in the simulation. More...
 

Protected Member Functions

void solvePoisson ()
 Internal routine for solving the Poisson equation.
 

Protected Attributes

bool m_loadBalance
 If true, the simulation will be introspectively load balanced.
 
BoxSorting m_boxSort
 If using load balancing, this specifies how boxes will be sorted (in space) before load balancing.
 
RefCountedPtr< FieldSolverm_fieldSolver
 Reference to the FieldSolver.
 
RefCountedPtr< SurfaceODESolver< 1 > > m_sigma
 Reference to the surface charge solver.
 
std::string m_realm
 Realm where the solver lives.
 
std::function< Real(const RealVect &a_pos)> m_rhoGas
 Space charge inside gas phase.
 
std::function< Real(const RealVect &a_pos)> m_rhoDielectric
 Space charge inside dielectric.
 
std::function< Real(const RealVect &a_pos)> m_surfaceChargeDensity
 Surface charge distribution.
 
- 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<class T>
class Physics::Electrostatics::FieldStepper< T >

Implementation of TimeStepper for solving electrostatic problems. The template parameter is the FieldSolver implementation type.

This is just a one-step method – it currently does not feature adaptive mesh refinement but uses the static grid set up by Driver. If the user wants to add mesh refinement he/she can add a CellTagger which flags cells for refinement.

The voltage on electrodes/domain faces is set to one. If the user wants to set a different voltage he will need to fetch the FieldSolver from the FieldStepper and call FieldStepper::setVoltage(...).

The initial space charge is set to a Gaussian blob, specified in the input script. The initial surface charge is set to a constant value specified in the input script.

Member Function Documentation

◆ advance()

template<class T >
Real Physics::Electrostatics::FieldStepper< T >::advance ( const Real  a_dt)
overridevirtual

Perform a single time step with step a_dt.

Parameters
[in]a_dtTime step
Returns
a_dt

Implements TimeStepper.

◆ computeDt()

template<class T >
Real Physics::Electrostatics::FieldStepper< T >::computeDt ( )
inlineoverridevirtual

Compute time step.

This is a static solver so it returns 0.0

Implements TimeStepper.

◆ getNumberOfPlotVariables()

template<class T >
int Physics::Electrostatics::FieldStepper< T >::getNumberOfPlotVariables
overridevirtual

Get number of plot variables.

Returns
Returns plot variables for FieldSolver

Implements TimeStepper.

◆ loadBalanceBoxes()

template<class T >
void Physics::Electrostatics::FieldStepper< T >::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 on each level. It is up to the user/programmer to decide if load balancing should be done independently on each level, or if loads per MPI rank are accumulated across levels.

Reimplemented from TimeStepper.

◆ loadBalanceThisRealm()

template<class T >
bool Physics::Electrostatics::FieldStepper< T >::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.

Parameters
[in]a_realmRealm name

Reimplemented from TimeStepper.

◆ postRegrid()

template<class T >
void Physics::Electrostatics::FieldStepper< T >::postRegrid
overridevirtual

Perform post-regrid operations – this will resolve the Poisson equation.

This includes all operations to be done AFTER interpolating data to new grids.

Implements TimeStepper.

◆ preRegrid()

template<class T >
void Physics::Electrostatics::FieldStepper< T >::preRegrid ( const int  a_lbase,
const int  a_finestLevel 
)
overridevirtual

Perform pre-regrid operations.

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

Implements TimeStepper.

◆ regrid()

template<class T >
void Physics::Electrostatics::FieldStepper< T >::regrid ( const int  a_lmin,
const int  a_oldFinestLevel,
const int  a_newFinestLevel 
)
overridevirtual

Regrid method – regrids the potential distribution in FieldSolver (but does not solve the Poisson equation, that is done in postRegrid()).

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.

◆ setRho()

template<class T >
void Physics::Electrostatics::FieldStepper< T >::setRho ( const std::function< Real(const RealVect &a_pos)> &  a_rho,
const phase::which_phase  a_phase 
)
noexcept

Set space charge.

Parameters
[in]a_rhoSpace charge distribution

◆ setSigma()

template<class T >
void Physics::Electrostatics::FieldStepper< T >::setSigma ( const std::function< Real(const RealVect &a_pos)> &  a_sigma)
noexcept

Set surface charge.

Parameters
[in]a_sigmaSurface charge distribution

◆ synchronizeSolverTimes()

template<class T >
void Physics::Electrostatics::FieldStepper< T >::synchronizeSolverTimes ( const int  a_step,
const Real  a_time,
const Real  a_dt 
)
overridevirtual

Synchronzie solver times and time steps.

Parameters
[in]a_stepTime step
[in]a_timeTime (in seconds)
[in]a_dtTime step that was used.

Implements TimeStepper.

◆ writePlotData()

template<class T >
void Physics::Electrostatics::FieldStepper< T >::writePlotData ( LevelData< EBCellFAB > &  a_output,
int &  a_icomp,
const std::string  a_outputRealm,
const int  a_level 
) const
overridevirtual

Write plot data to file.

Parameters
[in,out]a_outputOutput data holder.
[in,out]a_icompStarting component in a_output to begin at.
{in]a_outputRealm Realm where a_output belongs
[in]a_levelGrid level

Implements TimeStepper.


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