chombo-discharge
Loading...
Searching...
No Matches
CD_EddingtonSP1.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_EDDINGTONSP1_H
14#define CD_EDDINGTONSP1_H
15
16// Std includes
17#include <random>
18
19// Chombo includes
20#include <AMRMultiGrid.H>
21#include <AMRTGA.H>
22#include <EBBackwardEuler.H>
23#include <EBSimpleSolver.H>
24#include <BiCGStabSolver.H>
25#include <GMRESSolver.H>
26
27// Our includes
28#include <CD_RtSolver.H>
31#include <CD_NamespaceHeader.H>
32
36class EddingtonSP1 : public RtSolver
37{
38public:
46 static Real
48
53
58
63
67 virtual ~EddingtonSP1();
68
73 operator=(const EddingtonSP1& a_other) = delete;
74
79 operator=(const EddingtonSP1&& a_other) = delete;
80
90 virtual bool
91 advance(const Real a_dt, EBAMRCellData& a_phi, const EBAMRCellData& a_source, const bool a_zeroPhi = false) override;
92
102 virtual void
103 advanceEuler(EBAMRCellData& a_phi, const EBAMRCellData& a_source, const Real a_dt, const bool a_zeroPhi) noexcept;
104
108 virtual void
109 parseOptions() override;
110
114 virtual void
115 parseRuntimeOptions() override;
116
124 virtual void
128
132 virtual void
133 allocate() override;
134
140 virtual void
141 preRegrid(const int a_base, const int a_oldFinestLevel) override;
142
146 virtual void
147 deallocate() override;
148
155 virtual void
156 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override;
157
161 virtual void
162 registerOperators() override;
163
169 virtual void
171
177 virtual void
179
185 virtual void
187
194 virtual void
196
200 virtual void
201 writePlotFile() override;
202
208#ifdef CH_USE_HDF5
209 virtual void
210 writeCheckpointLevel(HDF5Handle& a_handle, const int a_level) const override;
211#endif
212
218#ifdef CH_USE_HDF5
219 virtual void
220 readCheckpointLevel(HDF5Handle& a_handle, const int a_level) override;
221#endif
222
223protected:
227 static constexpr Real m_alpha = 1.0;
228
232 static constexpr Real m_beta = -1.0;
233
238 {
239 Simple,
240 BiCGStab,
241 GMRES,
242 };
243
247 enum class MultigridType
248 {
249 VCycle,
250 WCycle,
251 };
252
256 enum class EBBCType
257 {
258 Dirichlet,
259 Neumann,
260 Larsen
261 };
262
267
272
277
282
287
292
297
302
307
312
317
322
327
332
337
342
348
354
359
364
369
374
379
384
389
394
399
404
409
414
419
424
429
433 virtual void
434 setupSolver();
435
439 virtual void
441
451 virtual void
455 const int a_lvl,
456 const DataIndex& a_dit);
457
461 virtual void
463
467 virtual void
469
477 virtual std::string
478 makeBcString(const int a_dir, const Side::LoHiSide a_side) const;
479
486 parseBcString(const std::string& a_str) const;
487
491 virtual void
493
497 virtual void
498 parseEBBC();
499
503 virtual void
505
509 virtual void
511
515 virtual void
517
521 virtual void
523
527 virtual void
529
533 virtual void
535
539 virtual void
541};
542
543#include <CD_NamespaceFooter.H>
544
545#endif
Declaration of a factory class for making Poisson operators for multigrid.
Simple data holder for holding domain boundary condition types for EddingtonSP1.
Abstract parent class for various radiative transfer solvers.
Smoother
Relaxation method for the operators.
Definition CD_EBHelmholtzOp.H:48
Class which maps boundary condition types to a side and direction.
Definition CD_EddingtonSP1DomainBc.H:32
std::function< Real(const RealVect a_position, const Real a_time)> BcFunction
Function which maps f(R^3,t) : R. Used for setting the associated value and boundary condition type.
Definition CD_EddingtonSP1DomainBc.H:47
BcType
Boundary condition type.
Definition CD_EddingtonSP1DomainBc.H:38
Radiative transfer equation solver in the SP1 (diffusion) approximation.
Definition CD_EddingtonSP1.H:37
virtual void setupSolver()
Set up geometric multigrid.
Definition CD_EddingtonSP1.cpp:739
virtual EddingtonSP1DomainBc::BcType parseBcString(const std::string &a_str) const
Returns BC type based on string.
Definition CD_EddingtonSP1.cpp:159
virtual void computeBoundaryFlux(EBAMRIVData &a_ebFlux, const EBAMRCellData &a_phi) override
Compute the boundary flux. For Eddington, the boundary flux is = c*phi/2.
Definition CD_EddingtonSP1.cpp:1054
EBAMRCellData m_resid
Multigrid residue.
Definition CD_EddingtonSP1.H:398
RefCountedPtr< EBHelmholtzOpFactory > m_helmholtzOpFactory
Operator factory.
Definition CD_EddingtonSP1.H:383
GMRESSolver< LevelData< EBCellFAB > > m_gmres
GMRES solver.
Definition CD_EddingtonSP1.H:378
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override
Regrid function for this class.
Definition CD_EddingtonSP1.cpp:527
MultigridType m_multigridType
GMG multigrid type.
Definition CD_EddingtonSP1.H:271
int m_multigridBcWeight
Multigrid EBBC weight (only relevant for Dirichlet)
Definition CD_EddingtonSP1.H:326
virtual void advanceEuler(EBAMRCellData &a_phi, const EBAMRCellData &a_source, const Real a_dt, const bool a_zeroPhi) noexcept
Advance using the Euler rule.
Definition CD_EddingtonSP1.cpp:673
virtual void parseReflection()
Parse reflection coefficients for Robin bcs.
Definition CD_EddingtonSP1.cpp:442
EBHelmholtzOp::Smoother m_multigridRelaxMethod
Relaxation type for gmg.
Definition CD_EddingtonSP1.H:266
BottomSolverType m_bottomSolverType
Bottom solver type.
Definition CD_EddingtonSP1.H:331
EBAMRFluxData m_helmBco
b-coefficient
Definition CD_EddingtonSP1.H:408
virtual void computeFlux(EBAMRCellData &a_flux, const EBAMRCellData &a_phi) override
Compute the flux. For Eddington, the flux is F = -c/(3*kappa)*grad(phi)
Definition CD_EddingtonSP1.cpp:1138
virtual void setupMultigrid()
Set the GMG solver.
Definition CD_EddingtonSP1.cpp:980
EddingtonSP1 & operator=(const EddingtonSP1 &a_other)=delete
Disallowed copy assignment.
virtual void writePlotFile() override
Write plot file.
Definition CD_EddingtonSP1.cpp:1180
int m_multigridPreSmooth
Number of smoothings before averaging.
Definition CD_EddingtonSP1.H:296
virtual void setupHelmholtzFactory()
Set the operator factory.
Definition CD_EddingtonSP1.cpp:898
virtual void setHelmholtzCoefficients()
Set multigrid coefficients.
Definition CD_EddingtonSP1.cpp:754
Real m_reflectCoefTwo
Reflection coefficient.
Definition CD_EddingtonSP1.H:363
Real m_multigridExitHang
Multigrid exit hang.
Definition CD_EddingtonSP1.H:353
virtual void setDefaultDomainBcFunctions()
Set default domain BC functions.
Definition CD_EddingtonSP1.cpp:94
virtual void deallocate() override
Deallocate internal storage.
Definition CD_EddingtonSP1.cpp:511
virtual ~EddingtonSP1()
Destructor.
int m_minCellsBottom
Set bottom drop depth.
Definition CD_EddingtonSP1.H:341
virtual bool advance(const Real a_dt, EBAMRCellData &a_phi, const EBAMRCellData &a_source, const bool a_zeroPhi=false) override
Advance RTE onto state a_phi.
Definition CD_EddingtonSP1.cpp:580
virtual void parsePlotVariables()
Parse plot variables.
Definition CD_EddingtonSP1.cpp:325
static Real s_defaultDomainBcFunction(const RealVect &a_position, const Real a_time)
Default function for space-time dependence of domain boundary conditions.
Definition CD_EddingtonSP1.cpp:37
EddingtonSP1 & operator=(const EddingtonSP1 &&a_other)=delete
Disallowed move assignment.
int m_multigridMaxIterations
Maximum number of iterations.
Definition CD_EddingtonSP1.H:311
virtual void preRegrid(const int a_base, const int a_oldFinestLevel) override
Cache state.
Definition CD_EddingtonSP1.cpp:472
virtual std::string makeBcString(const int a_dir, const Side::LoHiSide a_side) const
Make domain bc string.
Definition CD_EddingtonSP1.cpp:125
Real m_multigridExitTolerance
Multigrid exit tolerance.
Definition CD_EddingtonSP1.H:347
EddingtonSP1(const EddingtonSP1 &&a_other)=delete
Disallowed move construction.
virtual void parseEBBC()
Parse domain BC settings.
Definition CD_EddingtonSP1.cpp:269
std::pair< EBBCType, Real > m_ebbc
Associated boundary condition on the embedded boundary.
Definition CD_EddingtonSP1.H:428
int m_numSmoothingsForSimpleSolver
Number of smoothing for bottom solver.
Definition CD_EddingtonSP1.H:336
EBSimpleSolver m_simpleSolver
multi-fluid simple solver
Definition CD_EddingtonSP1.H:388
virtual void parseDomainBC()
Parse domain BC settings.
Definition CD_EddingtonSP1.cpp:185
bool m_kappaScale
Use kappa scaling for source or not.
Definition CD_EddingtonSP1.H:281
static constexpr Real m_beta
Beta-coefficient for Helmholtz operator.
Definition CD_EddingtonSP1.H:232
EBAMRIVData m_helmBcoIrreg
b-coefficient
Definition CD_EddingtonSP1.H:413
virtual void computeDomainFlux(EBAMRIFData &a_domainflux, const EBAMRCellData &a_data) override
Compute the domain flux. For Eddington, the domain flux is = c*phi/2.
Definition CD_EddingtonSP1.cpp:1071
bool m_isSolverSetup
Needs setup.
Definition CD_EddingtonSP1.H:276
virtual void setDomainSideBcFunction(const int a_dir, const Side::LoHiSide a_side, const EddingtonSP1DomainBc::BcFunction &a_function)
Set the boundary condition function on a domain side.
Definition CD_EddingtonSP1.cpp:110
EBAMRCellData m_cacheSrc
For regridding the source term. This is needed when doing a stationary solve.
Definition CD_EddingtonSP1.H:393
Real m_reflectCoefOne
Reflection coefficient.
Definition CD_EddingtonSP1.H:358
RefCountedPtr< AMRMultiGrid< LevelData< EBCellFAB > > > m_multigridSolver
Geometric multigrid solver.
Definition CD_EddingtonSP1.H:368
virtual void computeDensity(EBAMRCellData &a_isotropic, const EBAMRCellData &a_phi) override
Get isotropic part.
Definition CD_EddingtonSP1.cpp:1167
EddingtonSP1DomainBc m_domainBc
Wrapper class.
Definition CD_EddingtonSP1.H:418
BiCGStabSolver< LevelData< EBCellFAB > > m_bicgstab
Conjugate gradient solver bottom MG level.
Definition CD_EddingtonSP1.H:373
int m_multigridBcOrder
Multigrid EBBC order (only relevant for Dirichlet)
Definition CD_EddingtonSP1.H:321
int m_multigridVerbosity
Verbosity for geometric multigrid.
Definition CD_EddingtonSP1.H:291
EddingtonSP1()
Weak constructor.
Definition CD_EddingtonSP1.cpp:42
EddingtonSP1(const EddingtonSP1 &a_other)=delete
Disallowed copy construction.
EBAMRCellData m_helmAco
a-coefficient
Definition CD_EddingtonSP1.H:403
virtual void setHelmholtzCoefficientsBox(EBCellFAB &a_helmAco, EBFluxFAB &a_helmBco, BaseIVFAB< Real > &a_helmBcoIrreg, const int a_lvl, const DataIndex &a_dit)
Set EBHelmholtzOp A- and B-coefficients.
Definition CD_EddingtonSP1.cpp:783
int m_multigridMinIterations
Minimum number of iterations.
Definition CD_EddingtonSP1.H:316
virtual void parseKappaScale()
Parse kappa-scaling or not.
Definition CD_EddingtonSP1.cpp:351
static constexpr Real m_alpha
Write checkpoint data into HDF5 file.
Definition CD_EddingtonSP1.H:227
BottomSolverType
Enum class for supported bottom solvers in multigrid.
Definition CD_EddingtonSP1.H:238
virtual void parseRuntimeOptions() override
Parse class options.
Definition CD_EddingtonSP1.cpp:79
virtual void parseOptions() override
Parse class options.
Definition CD_EddingtonSP1.cpp:60
virtual void allocate() override
Allocate internal storage.
Definition CD_EddingtonSP1.cpp:489
EBBCType
Enum for boundary condition types on EBs.
Definition CD_EddingtonSP1.H:257
virtual void registerOperators() override
Register operators.
Definition CD_EddingtonSP1.cpp:558
bool m_regridSlopes
Use slopes when regridding (or not)
Definition CD_EddingtonSP1.H:286
std::map< EddingtonSP1DomainBc::DomainSide, EddingtonSP1DomainBc::BcFunction > m_domainBcFunctions
Actual functions on domain edges (faces).
Definition CD_EddingtonSP1.H:423
virtual void parseStationary()
Parse whether or not this is a stationary solver.
Definition CD_EddingtonSP1.cpp:312
int m_multigridBottomSmooth
Number of smoothing before bottom solver.
Definition CD_EddingtonSP1.H:306
MultigridType
Enum for multigrid cycle types.
Definition CD_EddingtonSP1.H:248
int m_multigridPostSmooth
Number of smoothings before averaging.
Definition CD_EddingtonSP1.H:301
virtual void parseMultigridSettings()
Parse multigrid settings.
Definition CD_EddingtonSP1.cpp:359
virtual void parseRegridSlopes()
Parse whether or not to use slopes when regridding.
Definition CD_EddingtonSP1.cpp:459
Abstract RTE solver class for doing various kinds of radiative transfer equations....
Definition CD_RtSolver.H:31
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