chombo-discharge
Loading...
Searching...
No Matches
CD_CdrMultigrid.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_CDRMULTIGRID_H
14#define CD_CDRMULTIGRID_H
15
16// Std includes
17#include <random>
18#include <time.h>
19#include <chrono>
20
21// Chombo includes
22#include <AMRMultiGrid.H>
23#include <BiCGStabSolver.H>
24#include <EBSimpleSolver.H>
25#include <GMRESSolver.H>
26
27// Our includes
29#include <CD_CdrSolver.H>
30#include <CD_NamespaceHeader.H>
31
35class CdrMultigrid : public CdrSolver
36{
37protected:
42 {
43 Simple,
44 BiCGStab,
45 GMRES
46 };
47
51 enum class MultigridType
52 {
53 VCycle,
54 WCycle,
55 };
56
57public:
62
66 virtual ~CdrMultigrid();
67
71 virtual void
72 parseOptions() override = 0;
73
77 virtual void
78 parseRuntimeOptions() override = 0;
79
83 virtual void
84 registerOperators() override;
85
89 virtual void
90 allocate() override;
91
98 virtual void
99 preRegrid(const int a_lbase, const int a_oldFinestLevel) override;
100
111 virtual void
114 const Real a_extrapDt,
115 const bool a_conservativeOnly,
116 const bool a_ebFlux,
117 const bool a_domainFlux) override final;
118
129 virtual void
132 const Real a_extrapDt,
133 const bool a_conservativeOnly,
134 const bool a_ebFlux,
135 const bool a_domainFlux) override final;
136
146 virtual void
149 const bool a_conservativeOnly,
150 const bool a_ebFlux,
151 const bool a_domainFlux) override final;
152
162 virtual void
164 const EBAMRCellData& a_oldPhi,
165 const EBAMRCellData& a_source,
166 const Real a_dt) override final;
167
177 virtual void
179 const EBAMRCellData& a_oldPhi,
180 const EBAMRCellData& a_source,
181 const Real a_dt) override final;
182
183protected:
188
193
198
203
208
213
218
223
228
233
238
243
248
253
258
263
268
273
278
283
288
295 virtual void
297
301 virtual void
303
307 virtual void
309
313 virtual void
315
320 virtual void
322
328 virtual void
330
337 virtual void
339
343 virtual void
345};
346
347#include <CD_NamespaceFooter.H>
348
349#endif
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