13#ifndef CD_FIELDSOLVERGMG_H
14#define CD_FIELDSOLVERGMG_H
17#include <AMRMultiGrid.H>
18#include <BiCGStabSolver.H>
19#include <MFSimpleSolver.H>
20#include <GMRESSolver.H>
26#include <CD_NamespaceHeader.H>
85 solve(MFAMRCellData& a_phi,
86 const MFAMRCellData& a_rho,
87 const EBAMRIVData& a_sigma,
88 const bool a_zeroPhi =
false)
override;
127 const MFAMRCellData& a_potential)
const override;
138 const MFAMRCellData& a_potential)
const override;
146 preRegrid(
const int a_lbase,
const int a_oldFinestLevel)
override;
159 regrid(
const int a_lmin,
const int a_oldFinestLevel,
const int a_newFinestLevel)
override;
181 const MFAMRFluxData& a_permittivityFace,
182 const MFAMRIVData& a_permittivityEB)
override;
191 virtual Vector<long long>
192 computeLoads(
const DisjointBoxLayout& a_dbl,
const int a_level)
override;
471#include <CD_NamespaceFooter.H>
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