chombo-discharge
Loading...
Searching...
No Matches
CD_FieldSolver.H
Go to the documentation of this file.
1/* chombo-discharge
2 * Copyright © 2021 SINTEF Energy Research.
3 * Please refer to Copyright.txt and LICENSE in the chombo-discharge root directory.
4 */
5
12#ifndef CD_FieldSolver_H
13#define CD_FieldSolver_H
14
15// Std includes
16#include <functional>
17
18// Our includes
19#include <CD_Location.H>
21#include <CD_AmrMesh.H>
24#include <CD_NamespaceHeader.H>
25
32{
33public:
38
44
49 FieldSolver(const FieldSolver&& a_other) = delete;
50
56 operator=(const FieldSolver& a_other) = delete;
57
63 operator=(const FieldSolver&& a_other) = delete;
64
68 virtual ~FieldSolver();
69
73 virtual void
75
83 virtual void
87
94 virtual bool
95 solve(const bool a_zeroPhi = false);
96
104 virtual bool
105 solve(MFAMRCellData& a_potential, const bool a_zerophi = false);
106
116 virtual bool
117 solve(MFAMRCellData& a_phi, const MFAMRCellData& a_rho, const EBAMRIVData& a_sigma, const bool a_zerophi = false) = 0;
118
123 virtual void
125
131 virtual void
133
139 virtual void
141
148 virtual void
150 const phase::which_phase a_phase,
151 const MFAMRCellData& a_potential) const = 0;
152
159 virtual void
161 const phase::which_phase a_phase,
162 const MFAMRCellData& a_potential) const = 0;
163
167 virtual void
169
173 virtual void
175
179 virtual void
180 allocate();
181
188 virtual void
189 preRegrid(const int a_lbase, const int a_oldFinestLevel);
190
196 virtual void
198
202 virtual void
203 deallocate();
204
212 virtual void
213 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel);
214
218 virtual void
220
225 void
226 setRho(const Real a_rho);
227
232 void
233 setRho(const std::function<Real(const RealVect)>& a_rho);
234
238 void
239 setSigma(const Real a_sigma);
240
245 void
247
252 void
254
259 void
261
266 virtual void
268
273 virtual void
275
282#ifdef CH_USE_HDF5
283 virtual void
285#endif
286
293#ifdef CH_USE_HDF5
294 virtual void
296#endif
297
302 virtual void
304
314 virtual void
316 int& a_comp,
318 const int a_level,
319 const bool a_forceNoInterp = false) const noexcept;
320
332 virtual void
334 int& a_comp,
336 const phase::which_phase a_phase,
337 const std::string a_outputRealm,
338 const int a_level,
340
350 virtual void
352 int& a_comp,
354 const std::string a_outputRealm,
356
361 void
362 setRealm(const std::string a_realm);
363
371 void
373
378 void
380
386 virtual void
388
396 virtual void
400
406 virtual void
408
413 virtual int
415
422
427 Real
429
434 Real
435 getTime() const;
436
443 Real
445
451 Real
453
458 virtual Vector<std::string>
460
467 virtual Vector<long long>
469
475 void
477
482 std::string
483 getRealm() const;
484
489 getPotential();
490
496
502 getRho();
503
508 getResidue();
509
515
521
527
532 getSigma();
533
537 Location::Cell
539
545
550
555
560
564 std::string m_realm;
565
570
575
580
585
590
595
600
605
610
615
620
625
630
635
640
645
650
655
660
665
670
675
680
685
690
695
700
705
710
715
720
724 virtual void
726
730 virtual void
732
736 virtual void
738
742 virtual void
744
748 virtual void
750
755 virtual void
757
765
774 virtual void
779 const Real& a_dx);
780
789 virtual void
794 const Real& a_dx);
795
804 virtual void
809 const Real& a_dx);
810
818
825 virtual std::string
827
832 virtual void
834};
835
836#include <CD_NamespaceFooter.H>
837
838#include <CD_FieldSolverImplem.H>
839
840#endif
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