chombo-discharge
Loading...
Searching...
No Matches
CD_FieldSolver.H
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2021-2026 SINTEF Energy Research
3 *
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 */
6
13#ifndef CD_FIELDSOLVER_H
14#define CD_FIELDSOLVER_H
15
16// Std includes
17#include <functional>
18
19// Our includes
20#include <CD_Location.H>
22#include <CD_AmrMesh.H>
25#include <CD_DataParser.H>
26#include <CD_LookupTable1D.H>
27#include <CD_LookupTable.H>
29#include <CD_NamespaceHeader.H>
30
37{
38public:
43
49
54 FieldSolver(const FieldSolver&& a_other) = delete;
55
61 operator=(const FieldSolver& a_other) = delete;
62
68 operator=(const FieldSolver&& a_other) = delete;
69
73 virtual ~FieldSolver();
74
78 virtual void
80
88 virtual void
92
99 virtual bool
100 solve(const bool a_zeroPhi = false);
101
109 virtual bool
110 solve(MFAMRCellData& a_potential, const bool a_zerophi = false);
111
121 virtual bool
122 solve(MFAMRCellData& a_phi, const MFAMRCellData& a_rho, const EBAMRIVData& a_sigma, const bool a_zerophi = false) = 0;
123
128 virtual void
130
136 virtual void
138
144 virtual void
146
153 virtual void
156 const MFAMRCellData& a_potential) const = 0;
157
164 virtual void
167 const MFAMRCellData& a_potential) const = 0;
168
172 virtual void
174
178 virtual void
180
184 virtual void
185 allocate();
186
193 virtual void
194 preRegrid(const int a_lbase, const int a_oldFinestLevel);
195
201 virtual void
203
207 virtual void
208 deallocate();
209
217 virtual void
218 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel);
219
223 virtual void
225
230 void
231 setRho(const Real a_rho);
232
237 void
238 setRho(const std::function<Real(const RealVect)>& a_rho);
239
244 void
245 setSigma(const Real a_sigma);
246
251 void
253
258 void
260
265 void
267
272 virtual void
274
279 virtual void
281
282#ifdef CH_USE_HDF5
289 virtual void
291#endif
292
293#ifdef CH_USE_HDF5
300 virtual void
302#endif
303
308 virtual void
310
319 virtual void
321 int& a_comp,
323 const int a_level,
324 const bool a_forceNoInterp = false) const noexcept;
325
337 virtual void
339 int& a_comp,
341 const phase::which_phase a_phase,
342 const std::string& a_outputRealm,
343 const int a_level,
345
355 virtual void
357 int& a_comp,
359 const std::string& a_outputRealm,
361
366 void
367 setRealm(const std::string& a_realm);
368
376 void
378
383 void
385
391 virtual void
393
401 virtual void
405
411 virtual void
413
418 virtual int
420
427
432 Real
434
439 Real
440 getTime() const;
441
448 Real
450
456 Real
458
463 virtual Vector<std::string>
465
474 virtual Vector<long long>
476
482 void
484
489 std::string
490 getRealm() const;
491
497 getPotential();
498
505
512 getRho();
513
519 getResidue();
520
527
534
541
547 getSigma();
548
553 Location::Cell
555
561
566
571
576
580 std::string m_realm;
581
586
591
596
601
606
613
618
623
628
633
638
643
648
653
658
663
668
673
678
683
688
693
698
703
708
713
718
723
728
733
738
743
747 virtual void
749
753 virtual void
755
759 virtual void
761
765 virtual void
767
771 virtual void
773
778 virtual void
780
789
799 virtual void
804 const Real& a_dx,
806
816 virtual void
821 const Real& a_dx,
823
833 virtual void
838 const Real& a_dx,
840
848
855 virtual std::string
857
862 virtual void
864};
865
866#include <CD_NamespaceFooter.H>
867
868#include <CD_FieldSolverImplem.H>
869
870#endif
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