13#ifndef CD_FIELDSOLVER_H
14#define CD_FIELDSOLVER_H
29#include <CD_NamespaceHeader.H>
866#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 various routines for simple parsing of input data.
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.
Declaration of a lookup table in one independent variable.
Declaration of a table for looking up coefficients etc.
File containing the declaration of TriangleCollection.
Class for handling spatial operations.
Definition CD_AmrMesh.H:43
Abstract base class for geometries.
Definition CD_ComputationalGeometry.H:37
Electrode class for encapsulating the concept of an electrical conductor.
Definition CD_Electrode.H:27
Class which maps boundary condition types to a side and direction.
Definition CD_ElectrostaticDomainBc.H:34
Class which maps boundary condition types to a side and direction.
Definition CD_ElectrostaticEbBc.H:34
Base class for electrostatic solvers.
Definition CD_FieldSolver.H:37
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:1689
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:1881
void setSigma(const Real a_sigma)
Set surface charge to specified value.
Definition CD_FieldSolver.cpp:503
const std::function< Real(const Real a_time)> & getVoltage() const
Get voltage function.
Definition CD_FieldSolver.cpp:1837
FieldSolver(const FieldSolver &a_other)=delete
Disallowed copy constructor.
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:1958
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:692
void setTime(const int a_timeStep, const Real a_time, const Real a_dt)
Set time for this solver.
Definition CD_FieldSolver.cpp:597
RefCountedPtr< MultiFluidIndexSpace > m_multifluidIndexSpace
Multifluid index space.
Definition CD_FieldSolver.H:590
void setAmr(const RefCountedPtr< AmrMesh > &a_amr)
Set the amr object.
Definition CD_FieldSolver.cpp:550
Real getTime() const
Get time.
Definition CD_FieldSolver.cpp:1859
std::string m_className
Class name (i.e., "FieldSolver" for the base class)
Definition CD_FieldSolver.H:585
bool m_plotElectricFieldSolid
If true, the electric field on the inside of dielectrics will be added to plot files.
Definition CD_FieldSolver.H:677
Location::Face m_faceLocation
Flag which specifies where the permittivities are stored.
Definition CD_FieldSolver.H:575
MFAMRCellData m_electricField
Electric field. The centering of this is the same as m_dataLocation.
Definition CD_FieldSolver.H:622
virtual void setFacePermittivities(EBFluxFAB &a_relPerm, const Box &a_cellBox, const EBISBox &a_ebisbox, const RealVect &a_probLo, const Real &a_dx, std::array< FaceIterator, SpaceDim > &a_faceIter)
Set face-centered permittivities.
Definition CD_FieldSolver.cpp:1185
MFAMRCellData m_potential
State data, i.e. the potential. The centering of this is the same as m_dataLocation.
Definition CD_FieldSolver.H:617
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:560
bool m_isVoltageSet
Flag for checking if voltage has been set.
Definition CD_FieldSolver.H:657
Location::Cell m_dataLocation
Flag which specifies that data location.
Definition CD_FieldSolver.H:570
std::string getRealm() const
Get the Realm where this solver is registered.
Definition CD_FieldSolver.cpp:621
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:816
MFAMRCellData m_cache
Cached state used for regridding.
Definition CD_FieldSolver.H:605
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:694
virtual Vector< long long > computeLoads(const DisjointBoxLayout &a_dbl, const int a_level)
Get computational loads for a level.
Definition CD_FieldSolver.cpp:1809
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:439
RefCountedPtr< ComputationalGeometry > m_computationalGeometry
Computational geometry.
Definition CD_FieldSolver.H:595
MFAMRIVData m_permittivityEB
EB permittivity.
Definition CD_FieldSolver.H:652
virtual void writePlotFile()
Write plot file.
Definition CD_FieldSolver.cpp:1251
virtual void setDefaultEbBcFunctions()
Set default Dirichlet boundary conditions on the embedded boundaries.
Definition CD_FieldSolver.cpp:784
virtual int getNumberOfPlotVariables() const
Get number of output fields.
Definition CD_FieldSolver.cpp:1729
virtual void deallocate()
Deallocate internal storage.
Definition CD_FieldSolver.cpp:420
FieldSolver()
Constructor.
Definition CD_FieldSolver.cpp:34
MFAMRCellData & getPotential()
Get potential on both phases.
Definition CD_FieldSolver.cpp:1870
Real getDielectricPermittivity(const RealVect &a_pos) const
Get relative permittivity at some point in space.
Definition CD_FieldSolverImplem.H:21
void setRealm(const std::string &a_realm)
Set Realm.
Definition CD_FieldSolver.cpp:610
MFAMRFluxData m_permittivityFace
Face permittivity.
Definition CD_FieldSolver.H:647
EBAMRIVData & getSigma()
Get m_sigma.
Definition CD_FieldSolver.cpp:1903
virtual void parsePlotVariables()
Function which parses which plot variables to write to plot files.
Definition CD_FieldSolver.cpp:645
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:113
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:586
Real computeCapacitance()
Compute the capacitance.
Definition CD_FieldSolver.cpp:366
virtual void parseOptions()=0
Parse options (for derived class)
virtual void postCheckpoint()
Post checkpoint method.
Definition CD_FieldSolver.cpp:1381
MFAMRIVData & getPermittivityEB()
Get irregular b coefficient.
Definition CD_FieldSolver.cpp:1947
virtual void computeDisplacementField(MFAMRCellData &a_displacementField, const MFAMRCellData &a_electricField)
Compute displacement field from the electric field.
Definition CD_FieldSolver.cpp:180
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:737
virtual void allocate()
Allocates internal storage for FieldSolver. Derived classes may want to overwrite.
Definition CD_FieldSolver.cpp:135
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.
virtual void setCellPermittivities(EBCellFAB &a_relPerm, const Box &a_cellBox, const EBISBox &a_ebisbox, const RealVect &a_probLo, const Real &a_dx, VoFIterator &a_vofit)
Set cell-centered permittivities.
Definition CD_FieldSolver.cpp:1148
void setDataLocation(const Location::Cell a_dataLocation)
Set the data location for the solver.
Definition CD_FieldSolver.cpp:48
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:1390
int m_timeStep
Current time step.
Definition CD_FieldSolver.H:707
virtual Vector< std::string > getPlotVariableNames() const
Get output plot names.
Definition CD_FieldSolver.cpp:1764
virtual bool solve(const bool a_zeroPhi=false)
Solve Poisson equation using m_potential, m_rho, and m_sigma.
Definition CD_FieldSolver.cpp:83
std::string m_realm
Realm where this solver is registered.
Definition CD_FieldSolver.H:580
MFAMRCellData & getRho()
Get storage for the space charge density.
Definition CD_FieldSolver.cpp:1892
EBAMRIVData m_sigma
Storage for surface charge density.
Definition CD_FieldSolver.H:632
MFAMRCellData m_residue
Residue, e.g. used after solving Poisson equation.
Definition CD_FieldSolver.H:637
static constexpr int m_nComp
Number of components in data holders.
Definition CD_FieldSolver.H:565
Real getCurrentVoltage() const
Get current voltage.
Definition CD_FieldSolver.cpp:1848
virtual void setVoltage(std::function< Real(const Real a_time)> a_voltage)
Set potential dependence in time.
Definition CD_FieldSolver.cpp:563
virtual void setPermittivities()
Set the permittivities.
Definition CD_FieldSolver.cpp:1071
Real m_time
Current time.
Definition CD_FieldSolver.H:717
virtual void parseVerbosity()
Parse solver class verbosity.
Definition CD_FieldSolver.cpp:632
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:732
ElectrostaticEbBc m_ebBc
Dirichlet boundary conditions on electrodes.
Definition CD_FieldSolver.H:727
Vector< RefCountedPtr< LayoutData< VoFIterator > > > m_grownCellVofIter
Pre-built VoFIterators for grown-box irregular cells (solid phase, grow=1).
Definition CD_FieldSolver.H:612
virtual void setEbPermittivities(BaseIVFAB< Real > &a_relPerm, const Box &a_cellBox, const EBISBox &a_ebisbox, const RealVect &a_origin, const Real &a_dx, VoFIterator &a_vofit)
Set EB-centered permittivities.
Definition CD_FieldSolver.cpp:1227
virtual void computeElectricField()
Compute the cell-centered electric field.
Definition CD_FieldSolver.cpp:124
void setComputationalGeometry(const RefCountedPtr< ComputationalGeometry > &a_computationalGeometry)
Set the computational geometry.
Definition CD_FieldSolver.cpp:534
MFAMRCellData & getPermittivityCell()
Get cell-centered permittivity.
Definition CD_FieldSolver.cpp:1925
RefCountedPtr< AmrMesh > m_amr
AMR - needed for pretty much everything.
Definition CD_FieldSolver.H:600
MFAMRCellData & getResidue()
Get the residue.
Definition CD_FieldSolver.cpp:1914
virtual ~FieldSolver()
Constructor.
bool m_plotPotential
If true, potential will be added to plot files.
Definition CD_FieldSolver.H:662
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:687
virtual void parseDomainBc()
Parse domain boundary conditions.
Definition CD_FieldSolver.cpp:831
virtual void setupSolver()=0
Set up solver routines.
virtual ElectrostaticDomainBc::BcType parseBcString(const std::string &a_str) const
Returns BC type based on string.
Definition CD_FieldSolver.cpp:740
Real computeEnergy(const MFAMRCellData &a_electricField)
Compute energy density U = 0.5*int(E.dot.D dV)
Definition CD_FieldSolver.cpp:275
void setRho(const Real a_rho)
Set space charge to constant value everywhere.
Definition CD_FieldSolver.cpp:469
bool m_plotRho
If true, space charge will be added to plot files.
Definition CD_FieldSolver.H:667
bool m_regridSlopes
Use slopes when regridding or ont.
Definition CD_FieldSolver.H:697
bool m_plotElectricField
If true, the electric field will be added to plot files.
Definition CD_FieldSolver.H:672
int m_verbosity
Verbosity for this class.
Definition CD_FieldSolver.H:702
bool m_plotResidue
If true, the residue will be added to plot files.
Definition CD_FieldSolver.H:682
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:707
ElectrostaticDomainBc m_domainBc
Domain boundary conditions for FieldSolver.
Definition CD_FieldSolver.H:722
std::function< Real(const Real a_time)> m_voltage
Voltage function.
Definition CD_FieldSolver.H:742
MFAMRCellData m_permittivityCell
Cell permittivity.
Definition CD_FieldSolver.H:642
virtual void setDefaultDomainBcFunctions()
Set default BC functions. This sets all the m_domainBcFunction objects to s_defaultDomainBcFunction,...
Definition CD_FieldSolver.cpp:763
virtual void preRegrid(const int a_lbase, const int a_oldFinestLevel)
Cache state before regridding.
Definition CD_FieldSolver.cpp:163
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:575
MFAMRFluxData & getPermittivityFace()
Get face-centered permittivity.
Definition CD_FieldSolver.cpp:1936
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:1432
Real m_dt
Last time step increment.
Definition CD_FieldSolver.H:712
MFAMRCellData m_rho
Storage for space charge density.
Definition CD_FieldSolver.H:627
Two-fluid index space.
Definition CD_MultiFluidIndexSpace.H:49
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:38
TracerParticleSolver()
Default constructor.
Definition CD_TracerParticleSolverImplem.H:26
Namespace for encapsulating various data centerings.
Definition CD_Location.H:25
Phase names namespace.
Definition CD_MultiFluidIndexSpace.H:28
which_phase
Enumeration of supported phases.
Definition CD_MultiFluidIndexSpace.H:38