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>
32#include <CD_NamespaceHeader.H>
33
37class EddingtonSP1 : public RtSolver
38{
39public:
47 static Real
48 s_defaultDomainBcFunction(const RealVect& a_position, const Real a_time);
49
54
58 EddingtonSP1(const EddingtonSP1& a_other) = delete;
59
63 EddingtonSP1(const EddingtonSP1&& a_other) = delete;
64
68 virtual ~EddingtonSP1();
69
74 operator=(const EddingtonSP1& a_other) = delete;
75
80 operator=(const EddingtonSP1&& a_other) = delete;
81
91 virtual bool
92 advance(const Real a_dt, EBAMRCellData& a_phi, const EBAMRCellData& a_source, const bool a_zeroPhi = false) override;
93
103 virtual void
104 advanceEuler(EBAMRCellData& a_phi, const EBAMRCellData& a_source, const Real a_dt, const bool a_zeroPhi) noexcept;
105
109 virtual void
110 parseOptions() override;
111
115 virtual void
116 parseRuntimeOptions() override;
117
126 virtual void
127 setDomainSideBcFunction(const int a_dir,
128 const Side::LoHiSide a_side,
129 const EddingtonSP1DomainBc::BcFunction& a_function);
130
134 virtual void
135 allocate() override;
136
142 virtual void
143 preRegrid(const int a_base, const int a_oldFinestLevel) override;
144
148 virtual void
149 deallocate() override;
150
157 virtual void
158 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override;
159
163 virtual void
164 registerOperators() override;
165
171 virtual void
172 computeBoundaryFlux(EBAMRIVData& a_ebFlux, const EBAMRCellData& a_phi) override;
173
179 virtual void
180 computeDomainFlux(EBAMRIFData& a_domainflux, const EBAMRCellData& a_data) override;
181
187 virtual void
188 computeFlux(EBAMRCellData& a_flux, const EBAMRCellData& a_phi) override;
189
196 virtual void
197 computeDensity(EBAMRCellData& a_isotropic, const EBAMRCellData& a_phi) override;
198
202 virtual void
203 writePlotFile() override;
204
210#ifdef CH_USE_HDF5
211 virtual void
212 writeCheckpointLevel(HDF5Handle& a_handle, const int a_level) const override;
213#endif
214
220#ifdef CH_USE_HDF5
221 virtual void
222 readCheckpointLevel(HDF5Handle& a_handle, const int a_level) override;
223#endif
224
225protected:
229 static constexpr Real m_alpha = 1.0;
230
234 static constexpr Real m_beta = -1.0;
235
240 {
241 Simple,
242 BiCGStab,
243 GMRES,
244 };
245
249 enum class MultigridType
250 {
251 VCycle,
252 WCycle,
253 };
254
258 enum class EBBCType
259 {
260 Dirichlet,
261 Neumann,
262 Larsen
263 };
264
269
274
280
286
291
296
301
306
311
316
321
326
331
336
341
346
351
356
361
366
375
384
389
394
398 RefCountedPtr<AMRMultiGrid<LevelData<EBCellFAB>>> m_multigridSolver;
399
403 BiCGStabSolver<LevelData<EBCellFAB>> m_bicgstab;
404
408 GMRESSolver<LevelData<EBCellFAB>> m_gmres;
409
413 RefCountedPtr<EBHelmholtzOpFactory> m_helmholtzOpFactory;
414
418 EBSimpleSolver m_simpleSolver;
419
424
429
434
438 EBAMRCellData m_cacheSrc;
439
443 EBAMRCellData m_resid;
444
448 EBAMRCellData m_helmAco;
449
453 EBAMRFluxData m_helmBco;
454
458 EBAMRIVData m_helmBcoIrreg;
459
464
468 std::map<EddingtonSP1DomainBc::DomainSide, EddingtonSP1DomainBc::BcFunction> m_domainBcFunctions;
469
473 std::pair<EBBCType, Real> m_ebbc;
474
478 virtual void
479 setupSolver();
480
484 virtual void
486
496 virtual void
497 setHelmholtzCoefficientsBox(EBCellFAB& a_helmAco,
498 EBFluxFAB& a_helmBco,
499 BaseIVFAB<Real>& a_helmBcoIrreg,
500 const int a_lvl,
501 const DataIndex& a_dit);
502
506 virtual void
508
512 virtual void
514
522 virtual std::string
523 makeBcString(const int a_dir, const Side::LoHiSide a_side) const;
524
532 parseBcString(const std::string& a_str) const;
533
537 virtual void
539
543 virtual void
544 parseEBBC();
545
549 virtual void
551
555 virtual void
557
561 virtual void
563
567 virtual void
569
573 virtual void
575
579 virtual void
581
585 virtual void
587};
588
589#include <CD_NamespaceFooter.H>
590
591#endif
Declaration of a factory class for making Poisson operators for multigrid.
Simple data holder for holding domain boundary condition types for EddingtonSP1.
Declaration of outer Krylov solves (GMRES/BiCGStab) preconditioned by an AMR-multigrid cycle.
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:33
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:48
BcType
Boundary condition type.
Definition CD_EddingtonSP1DomainBc.H:39
Radiative transfer equation solver in the SP1 (diffusion) approximation.
Definition CD_EddingtonSP1.H:38
virtual void setupSolver()
Set up geometric multigrid.
Definition CD_EddingtonSP1.cpp:910
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:1252
EBAMRCellData m_resid
Multigrid residue.
Definition CD_EddingtonSP1.H:443
RefCountedPtr< EBHelmholtzOpFactory > m_helmholtzOpFactory
Operator factory.
Definition CD_EddingtonSP1.H:413
GMRESSolver< LevelData< EBCellFAB > > m_gmres
GMRES solver.
Definition CD_EddingtonSP1.H:408
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:597
MultigridType m_multigridType
GMG multigrid type.
Definition CD_EddingtonSP1.H:290
int m_multigridBcWeight
Multigrid EBBC weight (only relevant for Dirichlet)
Definition CD_EddingtonSP1.H:350
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:790
EllipticSolverChain::FallbackPolicy m_fallbackPolicy
Fallback-chain latch policy (persists across regrids; re-probes GMG every krylov_retry_interval solve...
Definition CD_EddingtonSP1.H:428
virtual void parseReflection()
Parse reflection coefficients for Robin bcs.
Definition CD_EddingtonSP1.cpp:512
EBHelmholtzOp::Smoother m_multigridRelaxMethod
Relaxation type for gmg.
Definition CD_EddingtonSP1.H:268
BottomSolverType m_bottomSolverType
Bottom solver type.
Definition CD_EddingtonSP1.H:355
EBAMRFluxData m_helmBco
b-coefficient
Definition CD_EddingtonSP1.H:453
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:1336
bool m_multigridRefluxFree
Use reflux-free AMR operator in GMG.
Definition CD_EddingtonSP1.H:300
virtual void setupMultigrid()
Set the GMG solver.
Definition CD_EddingtonSP1.cpp:1158
EddingtonSP1 & operator=(const EddingtonSP1 &a_other)=delete
Disallowed copy assignment.
virtual void writePlotFile() override
Write plot file.
Definition CD_EddingtonSP1.cpp:1378
int m_multigridPreSmooth
Number of smoothings before averaging.
Definition CD_EddingtonSP1.H:320
virtual void setupHelmholtzFactory()
Set the operator factory.
Definition CD_EddingtonSP1.cpp:1071
virtual void setHelmholtzCoefficients()
Set multigrid coefficients.
Definition CD_EddingtonSP1.cpp:925
Real m_reflectCoefTwo
Reflection coefficient.
Definition CD_EddingtonSP1.H:393
Real m_multigridExitHang
Multigrid exit hang.
Definition CD_EddingtonSP1.H:383
virtual void setDefaultDomainBcFunctions()
Set default domain BC functions.
Definition CD_EddingtonSP1.cpp:94
virtual void deallocate() override
Deallocate internal storage.
Definition CD_EddingtonSP1.cpp:581
virtual ~EddingtonSP1()
Destructor.
int m_minCellsBottom
Set bottom drop depth.
Definition CD_EddingtonSP1.H:365
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:650
virtual void parsePlotVariables()
Parse plot variables.
Definition CD_EddingtonSP1.cpp:329
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:335
EllipticSolverChain::Settings m_krylovSettings
Outer-Krylov settings (selects gmg/gmres/bicgstab and the krylov_* parameters)
Definition CD_EddingtonSP1.H:423
virtual void preRegrid(const int a_base, const int a_oldFinestLevel) override
Cache state.
Definition CD_EddingtonSP1.cpp:542
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:374
EddingtonSP1(const EddingtonSP1 &&a_other)=delete
Disallowed move construction.
virtual void parseEBBC()
Parse domain BC settings.
Definition CD_EddingtonSP1.cpp:273
std::pair< EBBCType, Real > m_ebbc
Associated boundary condition on the embedded boundary.
Definition CD_EddingtonSP1.H:473
int m_numSmoothingsForSimpleSolver
Number of smoothing for bottom solver.
Definition CD_EddingtonSP1.H:360
EBSimpleSolver m_simpleSolver
multi-fluid simple solver
Definition CD_EddingtonSP1.H:418
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:305
static constexpr Real m_beta
Beta-coefficient for Helmholtz operator.
Definition CD_EddingtonSP1.H:234
EBAMRIVData m_helmBcoIrreg
b-coefficient
Definition CD_EddingtonSP1.H:458
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:1269
bool m_isSolverSetup
Needs setup.
Definition CD_EddingtonSP1.H:295
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:438
Real m_reflectCoefOne
Reflection coefficient.
Definition CD_EddingtonSP1.H:388
RefCountedPtr< AMRMultiGrid< LevelData< EBCellFAB > > > m_multigridSolver
Geometric multigrid solver.
Definition CD_EddingtonSP1.H:398
virtual void computeDensity(EBAMRCellData &a_isotropic, const EBAMRCellData &a_phi) override
Get isotropic part.
Definition CD_EddingtonSP1.cpp:1365
EllipticSolverChain::KrylovSolver< EBCellFAB > m_krylov
Outer-Krylov driver (V-cycle-preconditioned BiCGStab/GMRES with persistent work vectors)
Definition CD_EddingtonSP1.H:433
EddingtonSP1DomainBc m_domainBc
Wrapper class.
Definition CD_EddingtonSP1.H:463
BiCGStabSolver< LevelData< EBCellFAB > > m_bicgstab
Conjugate gradient solver bottom MG level.
Definition CD_EddingtonSP1.H:403
int m_multigridBcOrder
Multigrid EBBC order (only relevant for Dirichlet)
Definition CD_EddingtonSP1.H:345
int m_multigridVerbosity
Verbosity for geometric multigrid.
Definition CD_EddingtonSP1.H:315
Real m_multigridChebyEigRatio
Chebyshev eigenvalue ratio lambda_max/lambda_min (only used when m_multigridRelaxMethod is Smoother::...
Definition CD_EddingtonSP1.H:279
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:448
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:954
int m_multigridMinIterations
Minimum number of iterations.
Definition CD_EddingtonSP1.H:340
virtual void parseKappaScale()
Parse kappa-scaling or not.
Definition CD_EddingtonSP1.cpp:355
static constexpr Real m_alpha
Write checkpoint data into HDF5 file.
Definition CD_EddingtonSP1.H:229
int m_multigridRasInnerSweeps
Number of inner frozen-ghost sweeps per restricted-additive-Schwarz iteration (only used when m_multi...
Definition CD_EddingtonSP1.H:285
BottomSolverType
Enum class for supported bottom solvers in multigrid.
Definition CD_EddingtonSP1.H:240
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:559
EBBCType
Enum for boundary condition types on EBs.
Definition CD_EddingtonSP1.H:259
virtual void registerOperators() override
Register operators.
Definition CD_EddingtonSP1.cpp:628
bool m_regridSlopes
Use slopes when regridding (or not)
Definition CD_EddingtonSP1.H:310
std::map< EddingtonSP1DomainBc::DomainSide, EddingtonSP1DomainBc::BcFunction > m_domainBcFunctions
Actual functions on domain edges (faces).
Definition CD_EddingtonSP1.H:468
virtual void parseStationary()
Parse whether or not this is a stationary solver.
Definition CD_EddingtonSP1.cpp:316
int m_multigridBottomSmooth
Number of smoothing before bottom solver.
Definition CD_EddingtonSP1.H:330
MultigridType
Enum for multigrid cycle types.
Definition CD_EddingtonSP1.H:250
int m_multigridPostSmooth
Number of smoothings before averaging.
Definition CD_EddingtonSP1.H:325
virtual void parseMultigridSettings()
Parse multigrid settings.
Definition CD_EddingtonSP1.cpp:363
int m_multigridChebyOrder
Chebyshev polynomial degree (only used when m_multigridRelaxMethod is Smoother::Chebyshev)
Definition CD_EddingtonSP1.H:273
virtual void parseRegridSlopes()
Parse whether or not to use slopes when regridding.
Definition CD_EddingtonSP1.cpp:529
Stateful owner of the outer-Krylov solver path.
Definition CD_EllipticSolverChain.H:312
Abstract RTE solver class for doing various kinds of radiative transfer equations....
Definition CD_RtSolver.H:31
Stateful policy for the solver fallback chain.
Definition CD_EllipticSolverChain.H:130
Outer-Krylov configuration. Defaults reproduce stand-alone multigrid (solvers == {GMG}).
Definition CD_EllipticSolverChain.H:64