13#ifndef CD_CDRMULTIGRID_H
14#define CD_CDRMULTIGRID_H
22#include <AMRMultiGrid.H>
23#include <BiCGStabSolver.H>
24#include <EBSimpleSolver.H>
25#include <GMRESSolver.H>
31#include <CD_NamespaceHeader.H>
100 preRegrid(
const int a_lbase,
const int a_oldFinestLevel)
override;
116 EBAMRCellData& a_phi,
117 const Real a_extrapDt,
118 const bool a_conservativeOnly,
120 const bool a_domainFlux)
override final;
138 EBAMRCellData& a_phi,
139 const Real a_extrapDt,
140 const bool a_conservativeOnly,
142 const bool a_domainFlux)
override final;
157 EBAMRCellData& a_phi,
158 const bool a_conservativeOnly,
160 const bool a_domainFlux)
override final;
173 const EBAMRCellData& a_oldPhi,
174 const EBAMRCellData& a_source,
175 const Real a_dt)
override final;
188 const EBAMRCellData& a_oldPhi,
189 const EBAMRCellData& a_source,
190 const Real a_dt)
override final;
341 advectToFaces(EBAMRFluxData& a_facePhi,
const EBAMRCellData& a_phi,
const Real a_extrapDt)
override = 0;
392#include <CD_NamespaceFooter.H>
Declaration of an abstract class for solving scalar convection-diffusion-reaction problems.
Declaration of a factory class for making Poisson operators for multigrid.
Declaration of outer Krylov solves (GMRES/BiCGStab) preconditioned by an AMR-multigrid cycle.
Extension class of CdrSolver that uses multigrid for diffusion part. Can also solve for stochastic di...
Definition CD_CdrMultigrid.H:37
virtual void registerOperators() override
Register operator.
Definition CD_CdrMultigrid.cpp:37
MultigridType
Enum for multigrid cycle types.
Definition CD_CdrMultigrid.H:53
virtual void setMultigridSolverCoefficients()
Set the multigrid solver coefficients.
Definition CD_CdrMultigrid.cpp:95
virtual void advanceEuler(EBAMRCellData &a_newPhi, const EBAMRCellData &a_oldPhi, const EBAMRCellData &a_source, const Real a_dt) override final
Implicit diffusion Euler advance with source term.
Definition CD_CdrMultigrid.cpp:164
CdrMultigrid()
Constructor.
Definition CD_CdrMultigrid.cpp:25
EBSimpleSolver m_simpleSolver
Simple solver.
Definition CD_CdrMultigrid.H:237
bool m_multigridRefluxFree
Use reflux-free AMR operator in GMG.
Definition CD_CdrMultigrid.H:267
MultigridType m_multigridType
GMG multigrid type.
Definition CD_CdrMultigrid.H:217
RefCountedPtr< AMRMultiGrid< LevelData< EBCellFAB > > > m_multigridSolver
Geometric multigrid solver.
Definition CD_CdrMultigrid.H:222
virtual void computeDivD(EBAMRCellData &a_divD, EBAMRCellData &a_phi, const bool a_conservativeOnly, const bool a_ebFlux, const bool a_domainFlux) override final
Compute div(D*grad(phi)) explicitly.
Definition CD_CdrMultigrid.cpp:766
bool m_hasMultigridSolver
Is multigrid solver defined or not?
Definition CD_CdrMultigrid.H:262
BottomSolverType
Enum class for supported bottom solvers in multigrid.
Definition CD_CdrMultigrid.H:43
int m_multigridVerbosity
Verbosity for geometric multigrid.
Definition CD_CdrMultigrid.H:282
EllipticSolverChain::KrylovSolver< EBCellFAB > m_krylov
Outer-Krylov driver (V-cycle-preconditioned BiCGStab/GMRES with persistent work vectors)
Definition CD_CdrMultigrid.H:257
int m_numSmoothingsForSimpleSolver
Number of smoothing for bottom solver.
Definition CD_CdrMultigrid.H:317
virtual void computeKappaLphi(EBAMRCellData &a_kappaLphi, const EBAMRCellData &a_phi)
Compute kappa * L(phi) using the multigrid operator. This is different from computeDivD.
Definition CD_CdrMultigrid.cpp:140
int m_rasInnerSweeps
Number of inner frozen-ghost sweeps per restricted-additive-Schwarz iteration (only used when m_smoot...
Definition CD_CdrMultigrid.H:212
virtual void parseMultigridSettings()
Parse solver settings for geometric multigrid.
Definition CD_CdrMultigrid.cpp:807
EBAMRCellData m_residual
Storage for multigrid residual.
Definition CD_CdrMultigrid.H:277
int m_chebyOrder
Chebyshev polynomial degree (only used when m_smoother is Smoother::Chebyshev)
Definition CD_CdrMultigrid.H:201
int m_multigridBottomSmooth
Number of smoothing before bottom solver.
Definition CD_CdrMultigrid.H:297
int m_minCellsBottom
Set bottom drop depth.
Definition CD_CdrMultigrid.H:322
EBAMRCellData m_helmAcoef
Storage for Helmholtz a-coefficient. Always 1.
Definition CD_CdrMultigrid.H:272
EllipticSolverChain::Settings m_krylovSettings
Outer-Krylov settings (selects gmg/gmres/bicgstab and the krylov_* parameters)
Definition CD_CdrMultigrid.H:247
virtual void preRegrid(const int a_lbase, const int a_oldFinestLevel) override
Perform pre-regrid operations.
Definition CD_CdrMultigrid.cpp:63
Real m_multigridExitHang
Multigrid hand.
Definition CD_CdrMultigrid.H:332
BiCGStabSolver< LevelData< EBCellFAB > > m_bicgstab
Conjugate gradient solver bottom MG level.
Definition CD_CdrMultigrid.H:232
virtual void parseRuntimeOptions() override=0
Parse class options.
virtual void resetAlphaAndBeta(const Real a_alpha, const Real a_beta)
Reset alpha and beta-coefficients in the multigrid solvers.
Definition CD_CdrMultigrid.cpp:76
virtual void setupMultigrid()
Setup multigrid.
Definition CD_CdrMultigrid.cpp:543
BottomSolverType m_bottomSolverType
Bottom solver type.
Definition CD_CdrMultigrid.H:312
virtual void allocate() override
Allocate internal storage.
Definition CD_CdrMultigrid.cpp:52
int m_multigridPreSmooth
Number of smoothings before averaging.
Definition CD_CdrMultigrid.H:287
Real m_chebyEigRatio
Chebyshev eigenvalue ratio lambda_max/lambda_min (only used when m_smoother is Smoother::Chebyshev)
Definition CD_CdrMultigrid.H:206
GMRESSolver< LevelData< EBCellFAB > > m_gmres
GMRES solver.
Definition CD_CdrMultigrid.H:242
virtual void setupDiffusionSolver()
Set up diffusion solver.
Definition CD_CdrMultigrid.cpp:445
virtual void setupHelmholtzFactory()
Setup the operator factory.
Definition CD_CdrMultigrid.cpp:470
virtual void computeDivF(EBAMRCellData &a_divF, EBAMRCellData &a_phi, const Real a_extrapDt, const bool a_conservativeOnly, const bool a_ebFlux, const bool a_domainFlux) override final
Compute div(v*phi) explicitly.
Definition CD_CdrMultigrid.cpp:720
int m_multigridPostSmooth
Number of smoothings before averaging.
Definition CD_CdrMultigrid.H:292
EBHelmholtzOp::Smoother m_smoother
Relaxation type for gmg.
Definition CD_CdrMultigrid.H:196
virtual void computeDivJ(EBAMRCellData &a_divJ, EBAMRCellData &a_phi, const Real a_extrapDt, const bool a_conservativeOnly, const bool a_ebFlux, const bool a_domainFlux) override final
Compute div(J) explicitly, where J = nV - D*grad(n).
Definition CD_CdrMultigrid.cpp:657
virtual void advectToFaces(EBAMRFluxData &a_facePhi, const EBAMRCellData &a_phi, const Real a_extrapDt) override=0
Advection-only extrapolation to faces.
RefCountedPtr< EBHelmholtzOpFactory > m_helmholtzOpFactory
Operator factory.
Definition CD_CdrMultigrid.H:227
virtual void parseOptions() override=0
Parse class options.
Real m_multigridExitTolerance
Multigrid tolerance.
Definition CD_CdrMultigrid.H:327
int m_multigridMinIterations
Minimum number of iterations.
Definition CD_CdrMultigrid.H:307
int m_multigridMaxIterations
Maximum number of iterations.
Definition CD_CdrMultigrid.H:302
EllipticSolverChain::FallbackPolicy m_fallbackPolicy
Fallback-chain latch policy (persists across regrids; re-probes GMG every krylov_retry_interval solve...
Definition CD_CdrMultigrid.H:252
virtual ~CdrMultigrid()
Destructor.
virtual void advanceCrankNicholson(EBAMRCellData &a_newPhi, const EBAMRCellData &a_oldPhi, const EBAMRCellData &a_source, const Real a_dt) override final
Implicit diffusion Crank-Nicholson advance with source term.
Definition CD_CdrMultigrid.cpp:295
Base class for solving convection-diffusion-reaction equations.
Definition CD_CdrSolver.H:36
Smoother
Relaxation method for the operators.
Definition CD_EBHelmholtzOp.H:48
Stateful owner of the outer-Krylov solver path.
Definition CD_EllipticSolverChain.H:312
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