chombo-discharge
Loading...
Searching...
No Matches
CD_FieldSolverGMG.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_FIELDSOLVERGMG_H
14#define CD_FIELDSOLVERGMG_H
15
16// Chombo includes
17#include <AMRMultiGrid.H>
18#include <BiCGStabSolver.H>
19#include <MFSimpleSolver.H>
20#include <GMRESSolver.H>
21
22// Our includes
23#include <CD_FieldSolver.H>
26#include <CD_NamespaceHeader.H>
27
36{
37public:
43
48 FieldSolverGMG(const FieldSolverGMG& a_other) = delete;
49
54 FieldSolverGMG(const FieldSolverGMG&& a_other) = delete;
55
61 operator=(const FieldSolverGMG& a_other) = delete;
62
68 operator=(const FieldSolverGMG&& a_other) = delete;
69
73 virtual ~FieldSolverGMG();
74
84 virtual bool
85 solve(MFAMRCellData& a_phi,
86 const MFAMRCellData& a_rho,
87 const EBAMRIVData& a_sigma,
88 const bool a_zeroPhi = false) override;
89
93 virtual void
94 parseOptions() override;
95
99 virtual void
100 parseRuntimeOptions() override;
101
107 virtual void
108 computeElectricField(MFAMRCellData& a_E, const MFAMRCellData& a_potential) const override;
109
115 virtual void
116 computeElectricField(MFAMRFluxData& a_E, const MFAMRCellData& a_potential) const override;
117
124 virtual void
125 computeElectricField(EBAMRCellData& a_E,
126 const phase::which_phase a_phase,
127 const MFAMRCellData& a_potential) const override;
128
135 virtual void
136 computeElectricField(EBAMRFluxData& a_E,
137 const phase::which_phase a_phase,
138 const MFAMRCellData& a_potential) const override;
139
145 virtual void
146 preRegrid(const int a_lbase, const int a_oldFinestLevel) override;
147
158 virtual void
159 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override;
160
164 virtual void
165 registerOperators() override;
166
170 virtual void
171 setupSolver() override;
172
179 virtual void
180 setSolverPermittivities(const MFAMRCellData& a_permittivityCell,
181 const MFAMRFluxData& a_permittivityFace,
182 const MFAMRIVData& a_permittivityEB) override;
183
191 virtual Vector<long long>
192 computeLoads(const DisjointBoxLayout& a_dbl, const int a_level) override;
193
194protected:
198 static constexpr Real m_alpha = 0.0;
199
203 static constexpr Real m_beta = -1.0;
204
209 {
210 Simple,
211 BiCGStab,
212 GMRES
213 };
214
218 enum class MultigridType
219 {
220 VCycle,
221 WCycle,
222 };
223
227 enum class JumpBCType
228 {
229 Natural,
230 SaturationCharge,
231 };
232
237
242
248
254
259
264
269
274
279
284
289
294
299
304
309
314
319
324
329
334
339
344
349
354
359
364
369
374
380
386
391
395 RefCountedPtr<MFHelmholtzOpFactory> m_helmholtzOpFactory;
396
400 RefCountedPtr<AMRMultiGrid<LevelData<MFCellFAB>>> m_multigridSolver;
401
405 BiCGStabSolver<LevelData<MFCellFAB>> m_bicgstab;
406
410 GMRESSolver<LevelData<MFCellFAB>> m_gmres;
411
415 MFSimpleSolver m_mfsolver;
416
421
426
431
435 virtual void
437
441 virtual void
443
447 virtual void
448 parseJumpBC();
449
455 virtual void
456 setPermittivities() override;
457
461 virtual void
463
467 virtual void
469};
470
471#include <CD_NamespaceFooter.H>
472
473#endif
Declaration of outer Krylov solves (GMRES/BiCGStab) preconditioned by an AMR-multigrid cycle.
Contains declaration of a base electrostatics solver class.
Declaration of a factory class for making multifluid Helmholtz operators for multigrid.
Stateful owner of the outer-Krylov solver path.
Definition CD_EllipticSolverChain.H:312
Implementation of FieldSolver which uses multigrid.
Definition CD_FieldSolverGMG.H:36
MFHelmholtzOp::Smoother m_multigridRelaxMethod
Relaxation type for gmg.
Definition CD_FieldSolverGMG.H:236
bool m_isSolverSetup
Needs setup.
Definition CD_FieldSolverGMG.H:278
BottomSolverType
Enum class for supported bottom solvers in multigrid.
Definition CD_FieldSolverGMG.H:209
int m_multigridRasInnerSweeps
Number of inner frozen-ghost sweeps per restricted-additive-Schwarz iteration (only used when m_multi...
Definition CD_FieldSolverGMG.H:253
int m_multigridBcWeight
Set bc weight (used for weighted least squares)
Definition CD_FieldSolverGMG.H:358
EllipticSolverChain::Settings m_krylovSettings
Outer-Krylov settings (selects gmg/gmres/bicgstab and the krylov_* parameters)
Definition CD_FieldSolverGMG.H:420
virtual void setPermittivities() override
Set the permittivities.
Definition CD_FieldSolverGMG.cpp:622
virtual ~FieldSolverGMG()
Constructor (does nothing)
Definition CD_FieldSolverGMG.cpp:41
MultigridType m_multigridType
GMG multigrid type.
Definition CD_FieldSolverGMG.H:258
FieldSolverGMG()
Weak constructor.
Definition CD_FieldSolverGMG.cpp:32
MultigridType
Enum for multigrid cycle types.
Definition CD_FieldSolverGMG.H:219
bool m_multigridUseDefaultSettings
Use default multigrid settings.
Definition CD_FieldSolverGMG.H:293
int m_multigridPreSmooth
Number of smoothings before averaging.
Definition CD_FieldSolverGMG.H:313
virtual void parseMultigridSettings()
Parse multigrid settings.
Definition CD_FieldSolverGMG.cpp:92
JumpBCType m_jumpBcType
JumpBC type.
Definition CD_FieldSolverGMG.H:268
virtual void registerOperators() override
Registers required operators for AMR for this class.
Definition CD_FieldSolverGMG.cpp:535
int m_domainDropOrder
Domain drop order.
Definition CD_FieldSolverGMG.H:348
FieldSolverGMG(const FieldSolverGMG &a_other)=delete
Disallowed copy constructor.
virtual void parseRuntimeOptions() override
Parse runtime options from command line or input script.
Definition CD_FieldSolverGMG.cpp:64
virtual bool solve(MFAMRCellData &a_phi, const MFAMRCellData &a_rho, const EBAMRIVData &a_sigma, const bool a_zeroPhi=false) override
Solves Poisson equation onto a_phi using a_rho and a_sigma as right-hand sides.
Definition CD_FieldSolverGMG.cpp:308
virtual void preRegrid(const int a_lbase, const int a_oldFinestLevel) override
Cache state before regridding.
Definition CD_FieldSolverGMG.cpp:508
int m_multigridMaxIterations
Maximum number of iterations.
Definition CD_FieldSolverGMG.H:328
int m_multigridSmooth
Number of smoothing for multigrid.
Definition CD_FieldSolverGMG.H:308
FieldSolverGMG(const FieldSolverGMG &&a_other)=delete
Disallowed move constructor.
bool m_multigridRefluxFree
Use reflux-free AMR operator in GMG.
Definition CD_FieldSolverGMG.H:288
int m_multigridJumpOrder
Set bc jump order.
Definition CD_FieldSolverGMG.H:363
virtual void setupSolver() override
Set up multigrid solver.
Definition CD_FieldSolverGMG.cpp:561
virtual void setupHelmholtzFactory()
Set up the multigrid operator factory.
Definition CD_FieldSolverGMG.cpp:705
virtual void parseOptions() override
Parse all class options from command-line or input script.
Definition CD_FieldSolverGMG.cpp:47
EllipticSolverChain::FallbackPolicy m_fallbackPolicy
Fallback-chain latch policy (persists across regrids; re-probes GMG every krylov_retry_interval solve...
Definition CD_FieldSolverGMG.H:425
virtual void setupMultigrid()
Set up AMRMultiGrid.
Definition CD_FieldSolverGMG.cpp:872
int m_multigridBottomSmooth
Number of smoothing before bottom solver.
Definition CD_FieldSolverGMG.H:323
GMRESSolver< LevelData< MFCellFAB > > m_gmres
GMRES solver.
Definition CD_FieldSolverGMG.H:410
MFSimpleSolver m_mfsolver
multi-fluid simple solver
Definition CD_FieldSolverGMG.H:415
int m_multigridBcOrder
Set bc order.
Definition CD_FieldSolverGMG.H:353
static constexpr Real m_beta
Beta-coefficient (for Helmholtz operator)
Definition CD_FieldSolverGMG.H:203
virtual Vector< long long > computeLoads(const DisjointBoxLayout &a_dbl, const int a_level) override
Compute grid loads.
Definition CD_FieldSolverGMG.cpp:997
virtual void parseJumpBC()
Parse JumpBC type.
Definition CD_FieldSolverGMG.cpp:281
Real m_multigridRelaxFactor
Multigrid relaxation factor.
Definition CD_FieldSolverGMG.H:390
RefCountedPtr< AMRMultiGrid< LevelData< MFCellFAB > > > m_multigridSolver
Geometric multigrid solver.
Definition CD_FieldSolverGMG.H:400
int m_multigridVerbosity
Verbosity for geometric multigrid.
Definition CD_FieldSolverGMG.H:298
EllipticSolverChain::KrylovSolver< MFCellFAB > m_krylov
Outer-Krylov driver (V-cycle-preconditioned BiCGStab/GMRES with persistent work vectors)
Definition CD_FieldSolverGMG.H:430
FieldSolverGMG & operator=(const FieldSolverGMG &a_other)=delete
Disallowed copy assignment operator.
int m_minCellsBottom
Set bottom drop depth.
Definition CD_FieldSolverGMG.H:343
int m_multigridBottomSolverVerbosity
Verbosity for bottom solver in GMG cycle.
Definition CD_FieldSolverGMG.H:303
RefCountedPtr< MFHelmholtzOpFactory > m_helmholtzOpFactory
Multigrid operator factory.
Definition CD_FieldSolverGMG.H:395
static constexpr Real m_alpha
alpha-coefficient (for Helmholtz operator)
Definition CD_FieldSolverGMG.H:198
Real m_multigridChebyEigRatio
Chebyshev eigenvalue ratio lambda_max/lambda_min (only used when m_multigridRelaxMethod is Smoother::...
Definition CD_FieldSolverGMG.H:247
int m_multigridPreCondSmooth
Multigrid smoothing steps for preconditioner.
Definition CD_FieldSolverGMG.H:373
FieldSolverGMG & operator=(const FieldSolverGMG &&a_other)=delete
Disallowed move assignment operator.
bool m_kappaSource
Scale by kappa or not.
Definition CD_FieldSolverGMG.H:273
int m_numSmoothingsForSimpleSolver
Number of smoothing for bottom solver.
Definition CD_FieldSolverGMG.H:338
BottomSolverType m_bottomSolverType
Bottom solver type.
Definition CD_FieldSolverGMG.H:263
virtual void setSolverPermittivities(const MFAMRCellData &a_permittivityCell, const MFAMRFluxData &a_permittivityFace, const MFAMRIVData &a_permittivityEB) override
Set new permittivities for the multigrid solver.
Definition CD_FieldSolverGMG.cpp:575
int m_multigridChebyOrder
Chebyshev polynomial degree (only used when m_multigridRelaxMethod is Smoother::Chebyshev)
Definition CD_FieldSolverGMG.H:241
Real m_multigridExitHang
Exit hang for multigrid.
Definition CD_FieldSolverGMG.H:385
int m_multigridJumpWeight
Set bc jump weight (used for weighted least squares)
Definition CD_FieldSolverGMG.H:368
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel) override
Regrid method.
Definition CD_FieldSolverGMG.cpp:522
Real m_multigridExitTolerance
Exit tolerance for multigrid.
Definition CD_FieldSolverGMG.H:379
BiCGStabSolver< LevelData< MFCellFAB > > m_bicgstab
Conjugate gradient solver bottom MG level.
Definition CD_FieldSolverGMG.H:405
virtual void parseKappaSource()
Parse m_kappaSource.
Definition CD_FieldSolverGMG.cpp:79
JumpBCType
Jump BC type.
Definition CD_FieldSolverGMG.H:228
bool m_multigridDropOrder
Drop order in coarsened grid cells.
Definition CD_FieldSolverGMG.H:283
int m_multigridMinIterations
Minimum number of iterations.
Definition CD_FieldSolverGMG.H:333
int m_multigridPostSmooth
Number of smoothings before averaging.
Definition CD_FieldSolverGMG.H:318
Base class for electrostatic solvers.
Definition CD_FieldSolver.H:37
virtual void computeElectricField()
Compute the cell-centered electric field.
Definition CD_FieldSolver.cpp:124
Smoother
Relaxation methods for this operator.
Definition CD_MFHelmholtzOp.H:50
which_phase
Enumeration of supported phases.
Definition CD_MultiFluidIndexSpace.H:38
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