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>
30#include <CD_NamespaceHeader.H>
347#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.
Extension class of CdrSolver that uses multigrid for diffusion part. Can also solve for stochastic di...
Definition CD_CdrMultigrid.H:36
virtual void registerOperators() override
Register operator.
Definition CD_CdrMultigrid.cpp:37
MultigridType
Enum for multigrid cycle types.
Definition CD_CdrMultigrid.H:52
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:163
CdrMultigrid()
Constructor.
Definition CD_CdrMultigrid.cpp:25
EBSimpleSolver m_simpleSolver
Simple solver.
Definition CD_CdrMultigrid.H:212
MultigridType m_multigridType
GMG multigrid type.
Definition CD_CdrMultigrid.H:192
RefCountedPtr< AMRMultiGrid< LevelData< EBCellFAB > > > m_multigridSolver
Geometric multigrid solver.
Definition CD_CdrMultigrid.H:197
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:639
bool m_hasMultigridSolver
Is multigrid solver defined or not?
Definition CD_CdrMultigrid.H:222
BottomSolverType
Enum class for supported bottom solvers in multigrid.
Definition CD_CdrMultigrid.H:42
int m_multigridVerbosity
Verbosity for geometric multigrid.
Definition CD_CdrMultigrid.H:237
int m_numSmoothingsForSimpleSolver
Number of smoothing for bottom solver.
Definition CD_CdrMultigrid.H:272
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
virtual void parseMultigridSettings()
Parse solver settings for geometric multigrid.
Definition CD_CdrMultigrid.cpp:680
EBAMRCellData m_residual
Storage for multigrid residual.
Definition CD_CdrMultigrid.H:232
int m_multigridBottomSmooth
Number of smoothing before bottom solver.
Definition CD_CdrMultigrid.H:252
int m_minCellsBottom
Set bottom drop depth.
Definition CD_CdrMultigrid.H:277
EBAMRCellData m_helmAcoef
Storage for Helmholtz a-coefficient. Always 1.
Definition CD_CdrMultigrid.H:227
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:287
BiCGStabSolver< LevelData< EBCellFAB > > m_bicgstab
Conjugate gradient solver bottom MG level.
Definition CD_CdrMultigrid.H:207
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:436
BottomSolverType m_bottomSolverType
Bottom solver type.
Definition CD_CdrMultigrid.H:267
virtual void allocate() override
Allocate internal storage.
Definition CD_CdrMultigrid.cpp:52
int m_multigridPreSmooth
Number of smoothings before averaging.
Definition CD_CdrMultigrid.H:242
GMRESSolver< LevelData< EBCellFAB > > m_gmres
GMRES solver.
Definition CD_CdrMultigrid.H:217
virtual void setupDiffusionSolver()
Set up diffusion solver.
Definition CD_CdrMultigrid.cpp:342
virtual void setupHelmholtzFactory()
Setup the operator factory.
Definition CD_CdrMultigrid.cpp:367
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:593
int m_multigridPostSmooth
Number of smoothings before averaging.
Definition CD_CdrMultigrid.H:247
EBHelmholtzOp::Smoother m_smoother
Relaxation type for gmg.
Definition CD_CdrMultigrid.H:187
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:530
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:202
virtual void parseOptions() override=0
Parse class options.
Real m_multigridExitTolerance
Multigrid tolerance.
Definition CD_CdrMultigrid.H:282
int m_multigridMinIterations
Minimum number of iterations.
Definition CD_CdrMultigrid.H:262
int m_multigridMaxIterations
Maximum number of iterations.
Definition CD_CdrMultigrid.H:257
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:243
Base class for solving convection-diffusion-reaction equations.
Definition CD_CdrSolver.H:35
Smoother
Relaxation method for the operators.
Definition CD_EBHelmholtzOp.H:48
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:38