12#ifndef CD_FieldSolver_H
13#define CD_FieldSolver_H
24#include <CD_NamespaceHeader.H>
150 const phase::which_phase
a_phase,
161 const phase::which_phase
a_phase,
836#include <CD_NamespaceFooter.H>
Declaration of core class for handling AMR-related operations (with embedded boundaries)
Declaration of base class for defining geometries.
Declaration of a class for holding function-based boundary conditions on domain edges.
Data holder for holding the voltage at electrodes.
Implementation of CD_FieldSolver.H.
Declaration of cell positions.
Class for handling spatial operations.
Definition CD_AmrMesh.H:42
Abstract base class for geometries.
Definition CD_ComputationalGeometry.H:36
Electrode class for encapsulating the concept of an electrical conductor.
Definition CD_Electrode.H:26
Class which maps boundary condition types to a side and direction.
Definition CD_ElectrostaticDomainBc.H:33
Class which maps boundary condition types to a side and direction.
Definition CD_ElectrostaticEbBc.H:33
Base class for electrostatic solvers.
Definition CD_FieldSolver.H:32
virtual void registerOperators()=0
Register operators for AMR. Derived classes have to implement these.
MFAMRCellData & getElectricField()
Get electric field on both phases.
Definition CD_FieldSolver.cpp:1702
void setSigma(const Real a_sigma)
Set surface charge to specified value.
Definition CD_FieldSolver.cpp:496
const std::function< Real(const Real a_time)> & getVoltage() const
Get voltage function.
Definition CD_FieldSolver.cpp:1658
virtual ElectrostaticDomainBc::BcType parseBcString(const std::string a_str) const
Returns BC type based on string.
Definition CD_FieldSolver.cpp:728
FieldSolver(const FieldSolver &a_other)=delete
Disallowed copy constructor.
virtual void setEbPermittivities(BaseIVFAB< Real > &a_perm, const Box &a_cellBox, const EBISBox &a_ebisbox, const RealVect &a_origin, const Real &a_dx)
Set EB-centered permittivities.
Definition CD_FieldSolver.cpp:1045
virtual void fillCoveredPotential(MFAMRCellData &a_phi) const noexcept
Utility routine that fills the gas-side covered cells by the potential from the closest electrode.
Definition CD_FieldSolver.cpp:1779
FieldSolver & operator=(const FieldSolver &&a_other)=delete
Disallowed move assignment operator.
bool m_plotSigma
If true, m_sigma will be added to plot files.
Definition CD_FieldSolver.H:669
void setTime(const int a_timeStep, const Real a_time, const Real a_dt)
Set time for this solver.
Definition CD_FieldSolver.cpp:585
RefCountedPtr< MultiFluidIndexSpace > m_multifluidIndexSpace
Multifluid index space.
Definition CD_FieldSolver.H:574
void setAmr(const RefCountedPtr< AmrMesh > &a_amr)
Set the amr object.
Definition CD_FieldSolver.cpp:538
Real getTime() const
Get time.
Definition CD_FieldSolver.cpp:1680
std::string m_className
Class name (i.e., "FieldSolver" for the base class)
Definition CD_FieldSolver.H:569
bool m_plotElectricFieldSolid
If true, the electric field on the inside of dielectrics will be added to plot files.
Definition CD_FieldSolver.H:654
Location::Face m_faceLocation
Flag which specifies where the permittivities are stored.
Definition CD_FieldSolver.H:559
void setRealm(const std::string a_realm)
Set Realm.
Definition CD_FieldSolver.cpp:598
MFAMRCellData m_electricField
Electric field. The centering of this is the same as m_dataLocation.
Definition CD_FieldSolver.H:599
MFAMRCellData m_potential
State data, i.e. the potential. The centering of this is the same as m_dataLocation.
Definition CD_FieldSolver.H:594
virtual void parseRuntimeOptions()=0
Parse runtime options (for derived class)
static constexpr int m_comp
Component number where data is stored.
Definition CD_FieldSolver.H:544
bool m_isVoltageSet
Flag for checking if voltage has been set.
Definition CD_FieldSolver.H:634
Location::Cell m_dataLocation
Flag which specifies that data location.
Definition CD_FieldSolver.H:554
std::string getRealm() const
Get the Realm where this solver is registered.
Definition CD_FieldSolver.cpp:609
virtual void setDomainSideBcFunction(const int a_dir, const Side::LoHiSide a_side, const ElectrostaticDomainBc::BcFunction &a_function)
Boundary condition function on a domain side.
Definition CD_FieldSolver.cpp:803
MFAMRCellData m_cache
Cached state used for regridding.
Definition CD_FieldSolver.H:589
virtual bool solve(MFAMRCellData &a_phi, const MFAMRCellData &a_rho, const EBAMRIVData &a_sigma, const bool a_zerophi=false)=0
Solves Poisson equation onto a_phi using a_rho and a_sigma as right-hand sides.
FieldSolver(const FieldSolver &&a_other)=delete
Disallowed move constructor.
virtual void parseRegridSlopes()
Parse slope regrid.
Definition CD_FieldSolver.cpp:682
virtual Vector< long long > computeLoads(const DisjointBoxLayout &a_dbl, const int a_level)
Get computational loads for a level.
Definition CD_FieldSolver.cpp:1630
virtual void writeSurfaceData(LevelData< EBCellFAB > &a_output, int &a_comp, const LevelData< BaseIVFAB< Real > > &a_data, const std::string a_outputRealm, const int a_level) const noexcept
Write surface data to volume data holder.
Definition CD_FieldSolver.cpp:1510
Location::Cell getDataLocation() const
Get data location.
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel)
Regrid method.
Definition CD_FieldSolver.cpp:438
RefCountedPtr< ComputationalGeometry > m_computationalGeometry
Computational geometry.
Definition CD_FieldSolver.H:579
MFAMRIVData m_permittivityEB
EB permittivity.
Definition CD_FieldSolver.H:629
virtual void writePlotFile()
Write plot file.
Definition CD_FieldSolver.cpp:1073
virtual void setDefaultEbBcFunctions()
Set default Dirichlet boundary conditions on the embedded boundaries.
Definition CD_FieldSolver.cpp:772
virtual int getNumberOfPlotVariables() const
Get number of output fields.
Definition CD_FieldSolver.cpp:1550
virtual void deallocate()
Deallocate internal storage.
Definition CD_FieldSolver.cpp:420
FieldSolver()
Constructor.
Definition CD_FieldSolver.cpp:33
MFAMRCellData & getPotential()
Get potential on both phases.
Definition CD_FieldSolver.cpp:1691
Real getDielectricPermittivity(const RealVect &a_pos) const
Get relative permittivity at some point in space.
Definition CD_FieldSolverImplem.H:20
MFAMRFluxData m_permittivityFace
Face permittivity.
Definition CD_FieldSolver.H:624
EBAMRIVData & getSigma()
Get m_sigma.
Definition CD_FieldSolver.cpp:1724
virtual void parsePlotVariables()
Function which parses which plot variables to write to plot files.
Definition CD_FieldSolver.cpp:633
virtual void setSolverPermittivities(const MFAMRCellData &a_permittivityCell, const MFAMRFluxData &a_permittivityFace, const MFAMRIVData &a_permittivityEB)
A special routine for when solver permittivities need to change but solver does not.
Definition CD_FieldSolver.cpp:117
FieldSolver & operator=(const FieldSolver &a_other)=delete
Disallowed copy assignment operator.
virtual void computeElectricField(MFAMRCellData &a_E, const MFAMRCellData &a_potential) const =0
Compute the cell-centered electric field.
virtual void computeElectricField(MFAMRFluxData &a_E, const MFAMRCellData &a_potential) const =0
Compute the face-centered electric field.
void setVerbosity(const int a_verbosity)
Set verbosity.
Definition CD_FieldSolver.cpp:574
Real computeCapacitance()
Compute the capacitance.
Definition CD_FieldSolver.cpp:366
virtual void parseOptions()=0
Parse options (for derived class)
virtual void postCheckpoint()
Write checkpoint data for a level @paramo[out] a_handle HDF5 handle.
Definition CD_FieldSolver.cpp:1203
MFAMRIVData & getPermittivityEB()
Get irregular b coefficient.
Definition CD_FieldSolver.cpp:1768
virtual void computeDisplacementField(MFAMRCellData &a_displacementField, const MFAMRCellData &a_electricField)
Compute displacement field from the electric field.
Definition CD_FieldSolver.cpp:184
std::vector< std::pair< Electrode, ElectrostaticEbBc::BcFunction > > m_electrodeBcFunctions
BC functions (Dirichlet) on the electrodes. Used to map space/time to a voltage on the electrodes.
Definition CD_FieldSolver.H:714
virtual void allocate()
Allocates internal storage for FieldSolver. Derived classes may want to overwrite.
Definition CD_FieldSolver.cpp:139
virtual void computeElectricField(EBAMRCellData &a_E, const phase::which_phase a_phase, const MFAMRCellData &a_potential) const =0
Compute the cell-centered electric field on a specific phase.
void setDataLocation(const Location::Cell a_dataLocation)
Set the data location for the solver.
Definition CD_FieldSolver.cpp:52
int m_timeStep
Current time step.
Definition CD_FieldSolver.H:684
virtual Vector< std::string > getPlotVariableNames() const
Get output plot names.
Definition CD_FieldSolver.cpp:1585
virtual bool solve(const bool a_zeroPhi=false)
Solve Poisson equation using m_potential, m_rho, and m_sigma.
Definition CD_FieldSolver.cpp:87
virtual void writeMultifluidData(LevelData< EBCellFAB > &a_output, int &a_comp, const MFAMRCellData &a_data, const phase::which_phase a_phase, const std::string a_outputRealm, const int a_level, const bool a_interp) const noexcept
Write multifluid data to single-fluid data holders.
Definition CD_FieldSolver.cpp:1254
std::string m_realm
Realm where this solver is registered.
Definition CD_FieldSolver.H:564
MFAMRCellData & getRho()
Get storage for the space charge density.
Definition CD_FieldSolver.cpp:1713
EBAMRIVData m_sigma
Storage for surface charge density.
Definition CD_FieldSolver.H:609
MFAMRCellData m_residue
Residue, e.g. used after solving Poisson equation.
Definition CD_FieldSolver.H:614
virtual void setFacePermittivities(EBFluxFAB &a_perm, const Box &a_cellBox, const EBISBox &a_ebisbox, const RealVect &a_probLo, const Real &a_dx)
Set face-centered permittivities.
Definition CD_FieldSolver.cpp:1001
static constexpr int m_nComp
Number of components in data holders.
Definition CD_FieldSolver.H:549
Real getCurrentVoltage() const
Get current voltage.
Definition CD_FieldSolver.cpp:1669
virtual void setVoltage(std::function< Real(const Real a_time)> a_voltage)
Set potential dependence in time.
Definition CD_FieldSolver.cpp:551
virtual void setPermittivities()
Set the permittivities.
Definition CD_FieldSolver.cpp:910
Real m_time
Current time.
Definition CD_FieldSolver.H:694
virtual void parseVerbosity()
Parse solver class verbosity.
Definition CD_FieldSolver.cpp:620
std::map< ElectrostaticDomainBc::DomainSide, ElectrostaticDomainBc::BcFunction > m_domainBcFunctions
Domain BC functions. This is used to map space/time to a voltage/field at the domain faces.
Definition CD_FieldSolver.H:709
ElectrostaticEbBc m_ebBc
Dirichlet boundary conditions on electrodes.
Definition CD_FieldSolver.H:704
virtual void computeElectricField()
Compute the cell-centered electric field.
Definition CD_FieldSolver.cpp:128
void setComputationalGeometry(const RefCountedPtr< ComputationalGeometry > &a_computationalGeometry)
Set the computational geometry.
Definition CD_FieldSolver.cpp:522
MFAMRCellData & getPermittivityCell()
Get cell-centered permittivity.
Definition CD_FieldSolver.cpp:1746
RefCountedPtr< AmrMesh > m_amr
AMR - needed for pretty much everything.
Definition CD_FieldSolver.H:584
virtual void writePlotData(LevelData< EBCellFAB > &a_output, int &a_comp, const std::string a_outputRealm, const int a_level, const bool a_forceNoInterp=false) const noexcept
Write output data to a_output.
Definition CD_FieldSolver.cpp:1212
MFAMRCellData & getResidue()
Get the residue.
Definition CD_FieldSolver.cpp:1735
virtual ~FieldSolver()
Constructor.
Definition CD_FieldSolver.cpp:48
bool m_plotPotential
If true, potential will be added to plot files.
Definition CD_FieldSolver.H:639
virtual void computeElectricField(EBAMRFluxData &a_E, const phase::which_phase a_phase, const MFAMRCellData &a_potential) const =0
Compute the face-centered electric field on a specific phase.
bool m_plotPermittivity
If true, the permittivity will be added to plot files.
Definition CD_FieldSolver.H:664
virtual void setCellPermittivities(EBCellFAB &a_perm, const Box &a_cellBox, const EBISBox &a_ebisbox, const RealVect &a_probLo, const Real &a_dx)
Set cell-centered permittivities.
Definition CD_FieldSolver.cpp:960
virtual void parseDomainBc()
Parse domain boundary conditions.
Definition CD_FieldSolver.cpp:818
virtual void setupSolver()=0
Set up solver routines.
Real computeEnergy(const MFAMRCellData &a_electricField)
Compute energy density U = 0.5*int(E.dot.D dV)
Definition CD_FieldSolver.cpp:282
void setRho(const Real a_rho)
Set space charge to constant value everywhere.
Definition CD_FieldSolver.cpp:468
bool m_plotRho
If true, space charge will be added to plot files.
Definition CD_FieldSolver.H:644
bool m_regridSlopes
Use slopes when regridding or ont.
Definition CD_FieldSolver.H:674
bool m_plotElectricField
If true, the electric field will be added to plot files.
Definition CD_FieldSolver.H:649
int m_verbosity
Verbosity for this calss.
Definition CD_FieldSolver.H:679
bool m_plotResidue
If true, the residue will be added to plot files.
Definition CD_FieldSolver.H:659
virtual std::string makeBcString(const int a_dir, const Side::LoHiSide a_side) const
Shortcut for making a boundary condition string.
Definition CD_FieldSolver.cpp:695
ElectrostaticDomainBc m_domainBc
Domain boundary conditions for FieldSolver.
Definition CD_FieldSolver.H:699
std::function< Real(const Real a_time)> m_voltage
Voltage function.
Definition CD_FieldSolver.H:719
MFAMRCellData m_permittivityCell
Cell permittivity.
Definition CD_FieldSolver.H:619
virtual void setDefaultDomainBcFunctions()
Set default BC functions. This sets all the m_domainBcFunction objects to s_defaultDomainBcFunction,...
Definition CD_FieldSolver.cpp:751
virtual void preRegrid(const int a_lbase, const int a_oldFinestLevel)
Cache state before regridding.
Definition CD_FieldSolver.cpp:167
virtual void setElectrodeDirichletFunction(const int a_electrode, const ElectrostaticEbBc::BcFunction &a_function)
Set embedded boundary Dirichlet function on a specific electrode.
Definition CD_FieldSolver.cpp:563
MFAMRFluxData & getPermittivityFace()
Get face-centered permittivity.
Definition CD_FieldSolver.cpp:1757
Real m_dt
Last time step increment.
Definition CD_FieldSolver.H:689
MFAMRCellData m_rho
Storage for space charge density.
Definition CD_FieldSolver.H:604
Two-fluid index space.
Definition CD_MultiFluidIndexSpace.H:42
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:37
TracerParticleSolver()
Default constructor.
Definition CD_TracerParticleSolverImplem.H:25
Namespace for encapsulating various data centerings.
Definition CD_Location.H:24
phase names
Definition CD_MultiFluidIndexSpace.H:27