13#ifndef CD_FIELDSOLVER_H
14#define CD_FIELDSOLVER_H
29#include <CD_NamespaceHeader.H>
90 const MFAMRFluxData& a_permittivityFace,
91 const MFAMRIVData& a_permittivityEB);
100 solve(
const bool a_zeroPhi =
false);
110 solve(MFAMRCellData& a_potential,
const bool a_zerophi =
false);
122 solve(MFAMRCellData& a_phi,
const MFAMRCellData& a_rho,
const EBAMRIVData& a_sigma,
const bool a_zerophi =
false) = 0;
156 const MFAMRCellData& a_potential)
const = 0;
167 const MFAMRCellData& a_potential)
const = 0;
194 preRegrid(
const int a_lbase,
const int a_oldFinestLevel);
219 regrid(
const int a_lmin,
const int a_oldFinestLevel,
const int a_newFinestLevel);
239 setRho(
const std::function<Real(
const RealVect)>& a_rho);
253 setSigma(
const std::function<Real(
const RealVect)>& a_sigma);
267 setAmr(
const RefCountedPtr<AmrMesh>& a_amr);
291 writeCheckpointLevel(HDF5Handle& a_handle,
const int a_level)
const;
302 readCheckpointLevel(HDF5Handle& a_handle,
const int a_level);
323 const std::string& a_outputRealm,
325 const bool a_forceNoInterp =
false) const noexcept;
343 const MFAMRCellData& a_data,
344 const
phase::which_phase a_phase,
345 const std::
string& a_outputRealm,
347 const
bool a_interp) const noexcept;
361 const LevelData<BaseIVFAB<Real>>& a_data,
362 const std::
string& a_outputRealm,
363 const
int a_level) const noexcept;
370 setRealm(const std::
string& a_realm);
380 setTime(const
int a_timeStep, const Real a_time, const Real a_dt);
396 setVoltage(std::function<Real(const Real a_time)> a_voltage);
408 const Side::LoHiSide a_side,
430 const std::function<Real(const Real a_time)>&
469 virtual Vector<std::
string>
481 virtual Vector<
long long>
482 computeLoads(const DisjointBoxLayout& a_dbl, const
int a_level);
810 const Box& a_cellBox,
811 const EBISBox& a_ebisbox,
812 const RealVect& a_probLo,
814 VoFIterator& a_vofit);
828 const Box& a_cellBox,
829 const EBISBox& a_ebisbox,
830 const RealVect& a_probLo,
832 std::array<FaceIterator, SpaceDim>& a_faceIter);
846 const Box& a_cellBox,
847 const EBISBox& a_ebisbox,
848 const RealVect& a_origin,
850 VoFIterator& a_vofit);
869 makeBcString(const
int a_dir, const Side::LoHiSide a_side) const;
879#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:45
Abstract base class for geometries.
Definition CD_ComputationalGeometry.H:39
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:1705
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:1897
void setSigma(const Real a_sigma)
Set surface charge to specified value.
Definition CD_FieldSolver.cpp:509
const std::function< Real(const Real a_time)> & getVoltage() const
Get voltage function.
Definition CD_FieldSolver.cpp:1853
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:1974
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:699
void setTime(const int a_timeStep, const Real a_time, const Real a_dt)
Set time for this solver.
Definition CD_FieldSolver.cpp:603
RefCountedPtr< MultiFluidIndexSpace > m_multifluidIndexSpace
Multifluid index space.
Definition CD_FieldSolver.H:597
void setAmr(const RefCountedPtr< AmrMesh > &a_amr)
Set the amr object.
Definition CD_FieldSolver.cpp:556
Real getTime() const
Get time.
Definition CD_FieldSolver.cpp:1875
std::string m_className
Class name (i.e., "FieldSolver" for the base class)
Definition CD_FieldSolver.H:592
bool m_plotElectricFieldSolid
If true, the electric field on the inside of dielectrics will be added to plot files.
Definition CD_FieldSolver.H:684
Location::Face m_faceLocation
Flag which specifies where the permittivities are stored.
Definition CD_FieldSolver.H:582
MFAMRCellData m_electricField
Electric field. The centering of this is the same as m_dataLocation.
Definition CD_FieldSolver.H:629
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:1193
MFAMRCellData m_potential
State data, i.e. the potential. The centering of this is the same as m_dataLocation.
Definition CD_FieldSolver.H:624
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:567
bool m_isVoltageSet
Flag for checking if voltage has been set.
Definition CD_FieldSolver.H:664
Location::Cell m_dataLocation
Flag which specifies that data location.
Definition CD_FieldSolver.H:577
std::string getRealm() const
Get the Realm where this solver is registered.
Definition CD_FieldSolver.cpp:627
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:822
MFAMRCellData m_cache
Cached state used for regridding.
Definition CD_FieldSolver.H:612
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:700
virtual Vector< long long > computeLoads(const DisjointBoxLayout &a_dbl, const int a_level)
Get computational loads for a level.
Definition CD_FieldSolver.cpp:1825
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:445
RefCountedPtr< ComputationalGeometry > m_computationalGeometry
Computational geometry.
Definition CD_FieldSolver.H:602
MFAMRIVData m_permittivityEB
EB permittivity.
Definition CD_FieldSolver.H:659
virtual void writePlotFile()
Write plot file.
Definition CD_FieldSolver.cpp:1259
virtual void setDefaultEbBcFunctions()
Set default Dirichlet boundary conditions on the embedded boundaries.
Definition CD_FieldSolver.cpp:790
virtual int getNumberOfPlotVariables() const
Get number of output fields.
Definition CD_FieldSolver.cpp:1745
virtual void deallocate()
Deallocate internal storage.
Definition CD_FieldSolver.cpp:426
FieldSolver()
Constructor.
Definition CD_FieldSolver.cpp:34
MFAMRCellData & getPotential()
Get potential on both phases.
Definition CD_FieldSolver.cpp:1886
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:616
MFAMRFluxData m_permittivityFace
Face permittivity.
Definition CD_FieldSolver.H:654
EBAMRIVData & getSigma()
Get m_sigma.
Definition CD_FieldSolver.cpp:1919
virtual void parsePlotVariables()
Function which parses which plot variables to write to plot files.
Definition CD_FieldSolver.cpp:651
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:592
Real computeCapacitance()
Compute the capacitance.
Definition CD_FieldSolver.cpp:370
virtual void parseOptions()=0
Parse options (for derived class)
virtual void postCheckpoint()
Post checkpoint method.
Definition CD_FieldSolver.cpp:1389
MFAMRIVData & getPermittivityEB()
Get irregular b coefficient.
Definition CD_FieldSolver.cpp:1963
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:744
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:1156
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:1398
int m_timeStep
Current time step.
Definition CD_FieldSolver.H:714
virtual Vector< std::string > getPlotVariableNames() const
Get output plot names.
Definition CD_FieldSolver.cpp:1780
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:587
MFAMRCellData & getRho()
Get storage for the space charge density.
Definition CD_FieldSolver.cpp:1908
EBAMRIVData m_sigma
Storage for surface charge density.
Definition CD_FieldSolver.H:639
MFAMRCellData m_residue
Residue, e.g. used after solving Poisson equation.
Definition CD_FieldSolver.H:644
static constexpr int m_nComp
Number of components in data holders.
Definition CD_FieldSolver.H:572
Real getCurrentVoltage() const
Get current voltage.
Definition CD_FieldSolver.cpp:1864
virtual void setVoltage(std::function< Real(const Real a_time)> a_voltage)
Set potential dependence in time.
Definition CD_FieldSolver.cpp:569
virtual void setPermittivities()
Set the permittivities.
Definition CD_FieldSolver.cpp:1079
Real m_time
Current time.
Definition CD_FieldSolver.H:724
virtual void parseVerbosity()
Parse solver class verbosity.
Definition CD_FieldSolver.cpp:638
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:739
ElectrostaticEbBc m_ebBc
Dirichlet boundary conditions on electrodes.
Definition CD_FieldSolver.H:734
Vector< RefCountedPtr< LayoutData< VoFIterator > > > m_grownCellVofIter
Pre-built VoFIterators for grown-box irregular cells (solid phase, grow=1).
Definition CD_FieldSolver.H:619
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:1235
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:540
MFAMRCellData & getPermittivityCell()
Get cell-centered permittivity.
Definition CD_FieldSolver.cpp:1941
RefCountedPtr< AmrMesh > m_amr
AMR - needed for pretty much everything.
Definition CD_FieldSolver.H:607
MFAMRCellData & getResidue()
Get the residue.
Definition CD_FieldSolver.cpp:1930
virtual ~FieldSolver()
Constructor.
bool m_plotPotential
If true, potential will be added to plot files.
Definition CD_FieldSolver.H:669
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:694
virtual void parseDomainBc()
Parse domain boundary conditions.
Definition CD_FieldSolver.cpp:837
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:746
Real computeEnergy(const MFAMRCellData &a_electricField)
Compute energy density U = 0.5*int(E.dot.D dV)
Definition CD_FieldSolver.cpp:277
void setRho(const Real a_rho)
Set space charge to constant value everywhere.
Definition CD_FieldSolver.cpp:475
bool m_plotRho
If true, space charge will be added to plot files.
Definition CD_FieldSolver.H:674
bool m_regridSlopes
Use slopes when regridding or ont.
Definition CD_FieldSolver.H:704
bool m_plotElectricField
If true, the electric field will be added to plot files.
Definition CD_FieldSolver.H:679
int m_verbosity
Verbosity for this class.
Definition CD_FieldSolver.H:709
bool m_plotResidue
If true, the residue will be added to plot files.
Definition CD_FieldSolver.H:689
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:713
ElectrostaticDomainBc m_domainBc
Domain boundary conditions for FieldSolver.
Definition CD_FieldSolver.H:729
std::function< Real(const Real a_time)> m_voltage
Voltage function.
Definition CD_FieldSolver.H:749
MFAMRCellData m_permittivityCell
Cell permittivity.
Definition CD_FieldSolver.H:649
virtual void setDefaultDomainBcFunctions()
Set default BC functions. This sets all the m_domainBcFunction objects to s_defaultDomainBcFunction,...
Definition CD_FieldSolver.cpp:769
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:581
MFAMRFluxData & getPermittivityFace()
Get face-centered permittivity.
Definition CD_FieldSolver.cpp:1952
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:1441
Real m_dt
Last time step increment.
Definition CD_FieldSolver.H:719
MFAMRCellData m_rho
Storage for space charge density.
Definition CD_FieldSolver.H:634
Two-fluid index space.
Definition CD_MultiFluidIndexSpace.H:50
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