1#ifndef AMREX_MLNODEABECLAPLACIAN_H_
2#define AMREX_MLNODEABECLAPLACIAN_H_
3#include <AMReX_Config.H>
51 std::string
name ()
const override {
return std::string(
"MLNodeABecLaplacian"); }
116 void reflux (
int crse_amrlev,
123 [[nodiscard]]
bool needsUpdate () const final {
return m_needs_update; }
137 bool m_needs_update = true;
139 Real m_a_scalar = std::numeric_limits<
Real>::quiet_NaN();
140 Real m_b_scalar = std::numeric_limits<
Real>::quiet_NaN();
Array4< Real > fine
Definition AMReX_InterpFaceRegister.cpp:90
Array4< Real const > crse
Definition AMReX_InterpFaceRegister.cpp:92
Definition AMReX_FabFactory.H:50
Definition AMReX_MLNodeABecLaplacian.H:20
void setACoeffs(int amrlev, Real a_acoef)
Provide scalar nodal a coefficients for AMR level amrlev.
Definition AMReX_MLNodeABecLaplacian.cpp:55
void averageDownCoeffsSameAmrLevel(int amrlev)
Average coefficients across MG levels within the same AMR level.
Definition AMReX_MLNodeABecLaplacian.cpp:346
void Fapply(int amrlev, int mglev, MultiFab &out, const MultiFab &in) const final
Apply the nodal ABec operator on (amrlev,mglev) to in and store the result in out.
Definition AMReX_MLNodeABecLaplacian.cpp:85
void fixUpResidualMask(int amrlev, iMultiFab &resmsk) final
Enforce EB Dirichlet nodes by modifying the residual mask resmsk.
Definition AMReX_MLNodeABecLaplacian.cpp:279
std::string name() const override
Definition AMReX_MLNodeABecLaplacian.H:51
void define(const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info=LPInfo(), const Vector< FabFactory< FArrayBox > const * > &a_factory={})
Bind the nodal ABec Laplacian to the AMR hierarchy.
Definition AMReX_MLNodeABecLaplacian.cpp:17
MLNodeABecLaplacian()=default
bool isSingular(int) const final
Is it singular on AMR level amrlev?
Definition AMReX_MLNodeABecLaplacian.H:104
~MLNodeABecLaplacian() override=default
void setBCoeffs(int amrlev, Real a_bcoef)
Provide scalar cell-centered b coefficients.
Definition AMReX_MLNodeABecLaplacian.cpp:70
void update() final
Refresh coefficients (averages them down) and clear the dirty flag.
Definition AMReX_MLNodeABecLaplacian.cpp:271
void Fsmooth(int amrlev, int mglev, MultiFab &sol, const MultiFab &rhs) const final
Execute a smoothing sweep on (amrlev,mglev).
Definition AMReX_MLNodeABecLaplacian.cpp:118
bool isBottomSingular() const final
Is the bottom of the multigrid hierarchy singular?
Definition AMReX_MLNodeABecLaplacian.H:105
MLNodeABecLaplacian & operator=(const MLNodeABecLaplacian &)=delete
void averageDownCoeffsToCoarseAmrLevel(int flev)
Average coefficients from fine AMR level flev to coarse AMR level flev-1.
Definition AMReX_MLNodeABecLaplacian.cpp:331
MLNodeABecLaplacian(MLNodeABecLaplacian &&)=delete
void setScalars(Real a, Real b)
Set constant scalars a and b for the ABec operator.
Definition AMReX_MLNodeABecLaplacian.H:54
void prepareForSolve() final
Finalize coefficient averages and BC caches prior to solving.
Definition AMReX_MLNodeABecLaplacian.cpp:257
MLNodeABecLaplacian(const MLNodeABecLaplacian &)=delete
void averageDownSolutionRHS(int camrlev, MultiFab &crse_sol, MultiFab &crse_rhs, const MultiFab &fine_sol, const MultiFab &fine_rhs) final
Average solution/RHS pairs from fine AMR level to coarse storage.
Definition AMReX_MLNodeABecLaplacian.cpp:240
bool needsUpdate() const final
Does it need update if it's reused?
Definition AMReX_MLNodeABecLaplacian.H:123
void averageDownCoeffs()
Average a and b coefficients down across all AMR and MG levels.
Definition AMReX_MLNodeABecLaplacian.cpp:297
void reflux(int crse_amrlev, MultiFab &res, const MultiFab &crse_sol, const MultiFab &crse_rhs, MultiFab &fine_res, MultiFab &fine_sol, const MultiFab &fine_rhs) const final
Flux register reflux step coupling coarse and fine nodal solves.
Definition AMReX_MLNodeABecLaplacian.cpp:248
void interpolation(int amrlev, int fmglev, MultiFab &fine, const MultiFab &crse) const final
Add the prolongation of coarse data onto the fine grid (fine += prolong(crse)).
Definition AMReX_MLNodeABecLaplacian.cpp:210
void restriction(int amrlev, int cmglev, MultiFab &crse, MultiFab &fine) const final
Restrict nodal data from fine to coarse MG levels (AMR level amrlev, coarse MG index cmglev).
Definition AMReX_MLNodeABecLaplacian.cpp:177
Definition AMReX_MLNodeLinOp.H:23
A collection (stored as an array) of FArrayBox objects.
Definition AMReX_MultiFab.H:40
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:29
A Collection of IArrayBoxes.
Definition AMReX_iMultiFab.H:34
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
Definition AMReX_Amr.cpp:50
Configuration knobs for multilevel linear operators (grid agglomeration, metrics, etc....
Definition AMReX_MLLinOp.H:51