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_DataParser.H>
25#include <CD_LookupTable1D.H>
26#include <CD_LookupTable.H>
28#include <CD_NamespaceHeader.H>
29
36{
37public:
42
48
53 FieldSolver(const FieldSolver&& a_other) = delete;
54
60 operator=(const FieldSolver& a_other) = delete;
61
67 operator=(const FieldSolver&& a_other) = delete;
68
72 virtual ~FieldSolver();
73
77 virtual void
79
87 virtual void
91
98 virtual bool
99 solve(const bool a_zeroPhi = false);
100
108 virtual bool
109 solve(MFAMRCellData& a_potential, const bool a_zerophi = false);
110
120 virtual bool
121 solve(MFAMRCellData& a_phi, const MFAMRCellData& a_rho, const EBAMRIVData& a_sigma, const bool a_zerophi = false) = 0;
122
127 virtual void
129
135 virtual void
137
143 virtual void
145
152 virtual void
154 const phase::which_phase a_phase,
155 const MFAMRCellData& a_potential) const = 0;
156
163 virtual void
165 const phase::which_phase a_phase,
166 const MFAMRCellData& a_potential) const = 0;
167
171 virtual void
173
177 virtual void
179
183 virtual void
184 allocate();
185
192 virtual void
193 preRegrid(const int a_lbase, const int a_oldFinestLevel);
194
200 virtual void
202
206 virtual void
207 deallocate();
208
216 virtual void
217 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel);
218
222 virtual void
224
229 void
230 setRho(const Real a_rho);
231
236 void
237 setRho(const std::function<Real(const RealVect)>& a_rho);
238
242 void
243 setSigma(const Real a_sigma);
244
249 void
251
256 void
258
263 void
265
270 virtual void
272
277 virtual void
279
286#ifdef CH_USE_HDF5
287 virtual void
289#endif
290
297#ifdef CH_USE_HDF5
298 virtual void
300#endif
301
306 virtual void
308
318 virtual void
320 int& a_comp,
322 const int a_level,
323 const bool a_forceNoInterp = false) const noexcept;
324
336 virtual void
338 int& a_comp,
340 const phase::which_phase a_phase,
341 const std::string a_outputRealm,
342 const int a_level,
344
354 virtual void
356 int& a_comp,
358 const std::string a_outputRealm,
360
365 void
366 setRealm(const std::string a_realm);
367
375 void
377
382 void
384
390 virtual void
392
400 virtual void
404
410 virtual void
412
417 virtual int
419
426
431 Real
433
438 Real
439 getTime() const;
440
447 Real
449
455 Real
457
462 virtual Vector<std::string>
464
471 virtual Vector<long long>
473
479 void
481
486 std::string
487 getRealm() const;
488
493 getPotential();
494
500
506 getRho();
507
512 getResidue();
513
519
525
531
536 getSigma();
537
541 Location::Cell
543
549
554
559
564
568 std::string m_realm;
569
574
579
584
589
594
599
604
609
614
619
624
629
634
639
644
649
654
659
664
669
674
679
684
689
694
699
704
709
714
719
724
728 virtual void
730
734 virtual void
736
740 virtual void
742
746 virtual void
748
752 virtual void
754
759 virtual void
761
769
778 virtual void
783 const Real& a_dx);
784
793 virtual void
798 const Real& a_dx);
799
808 virtual void
813 const Real& a_dx);
814
822
829 virtual std::string
831
836 virtual void
838};
839
840#include <CD_NamespaceFooter.H>
841
842#include <CD_FieldSolverImplem.H>
843
844#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: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:36
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:1846
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:1802
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:1189
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:1923
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:673
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:578
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:1824
std::string m_className
Class name (i.e., "FieldSolver" for the base class)
Definition CD_FieldSolver.H:573
bool m_plotElectricFieldSolid
If true, the electric field on the inside of dielectrics will be added to plot files.
Definition CD_FieldSolver.H:658
Location::Face m_faceLocation
Flag which specifies where the permittivities are stored.
Definition CD_FieldSolver.H:563
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:603
MFAMRCellData m_potential
State data, i.e. the potential. The centering of this is the same as m_dataLocation.
Definition CD_FieldSolver.H:598
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:548
bool m_isVoltageSet
Flag for checking if voltage has been set.
Definition CD_FieldSolver.H:638
Location::Cell m_dataLocation
Flag which specifies that data location.
Definition CD_FieldSolver.H:558
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:593
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:1774
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:1654
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:583
MFAMRIVData m_permittivityEB
EB permittivity.
Definition CD_FieldSolver.H:633
virtual void writePlotFile()
Write plot file.
Definition CD_FieldSolver.cpp:1217
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:1694
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:1835
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:628
EBAMRIVData & getSigma()
Get m_sigma.
Definition CD_FieldSolver.cpp:1868
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:1347
MFAMRIVData & getPermittivityEB()
Get irregular b coefficient.
Definition CD_FieldSolver.cpp:1912
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:718
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:688
virtual Vector< std::string > getPlotVariableNames() const
Get output plot names.
Definition CD_FieldSolver.cpp:1729
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:1398
std::string m_realm
Realm where this solver is registered.
Definition CD_FieldSolver.H:568
MFAMRCellData & getRho()
Get storage for the space charge density.
Definition CD_FieldSolver.cpp:1857
EBAMRIVData m_sigma
Storage for surface charge density.
Definition CD_FieldSolver.H:613
MFAMRCellData m_residue
Residue, e.g. used after solving Poisson equation.
Definition CD_FieldSolver.H:618
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:1145
static constexpr int m_nComp
Number of components in data holders.
Definition CD_FieldSolver.H:553
Real getCurrentVoltage() const
Get current voltage.
Definition CD_FieldSolver.cpp:1813
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:1054
Real m_time
Current time.
Definition CD_FieldSolver.H:698
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:713
ElectrostaticEbBc m_ebBc
Dirichlet boundary conditions on electrodes.
Definition CD_FieldSolver.H:708
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:1890
RefCountedPtr< AmrMesh > m_amr
AMR - needed for pretty much everything.
Definition CD_FieldSolver.H:588
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:1356
MFAMRCellData & getResidue()
Get the residue.
Definition CD_FieldSolver.cpp:1879
virtual ~FieldSolver()
Constructor.
Definition CD_FieldSolver.cpp:48
bool m_plotPotential
If true, potential will be added to plot files.
Definition CD_FieldSolver.H:643
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:668
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:1104
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:648
bool m_regridSlopes
Use slopes when regridding or ont.
Definition CD_FieldSolver.H:678
bool m_plotElectricField
If true, the electric field will be added to plot files.
Definition CD_FieldSolver.H:653
int m_verbosity
Verbosity for this calss.
Definition CD_FieldSolver.H:683
bool m_plotResidue
If true, the residue will be added to plot files.
Definition CD_FieldSolver.H:663
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:703
std::function< Real(const Real a_time)> m_voltage
Voltage function.
Definition CD_FieldSolver.H:723
MFAMRCellData m_permittivityCell
Cell permittivity.
Definition CD_FieldSolver.H:623
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:1901
Real m_dt
Last time step increment.
Definition CD_FieldSolver.H:693
MFAMRCellData m_rho
Storage for space charge density.
Definition CD_FieldSolver.H:608
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