Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
amrex::MLCellABecLapT< MF > Class Template Referenceabstract

Cell-centered operator that exposes ABec Laplacian helpers to derived classes. More...

#include <AMReX_MLCellABecLap.H>

Inheritance diagram for amrex::MLCellABecLapT< MF >:
amrex::MLCellLinOpT< MF > amrex::MLLinOpT< MF > amrex::MLABecLaplacianT< MF > amrex::MLALaplacianT< MF > amrex::MLPoissonT< MF >

Public Types

using FAB = typename MF::fab_type
using RT = typename MF::value_type
using Location = typename MLLinOpT<MF>::Location
Public Types inherited from amrex::MLCellLinOpT< MF >
using FAB = typename FabDataType<MF>::fab_type
using RT = typename FabDataType<MF>::value_type
using BCType = LinOpBCType
using BCMode = typename MLLinOpT<MF>::BCMode
using StateMode = typename MLLinOpT<MF>::StateMode
using Location = typename MLLinOpT<MF>::Location
Public Types inherited from amrex::MLLinOpT< MF >
using MFType = MF
using FAB = typename FabDataType<MF>::fab_type
using RT = typename FabDataType<MF>::value_type
using BCType = LinOpBCType
using BCMode = LinOpEnumType::BCMode
using StateMode = LinOpEnumType::StateMode
using Location = LinOpEnumType::Location

Public Member Functions

 MLCellABecLapT ()=default
 ~MLCellABecLapT () override=default
 MLCellABecLapT (const MLCellABecLapT< MF > &)=delete
 MLCellABecLapT (MLCellABecLapT< MF > &&)=delete
MLCellABecLapT< MF > & operator= (const MLCellABecLapT< MF > &)=delete
MLCellABecLapT< MF > & operator= (MLCellABecLapT< MF > &&)=delete
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< FAB > const * > &a_factory={})
 Describe the AMR hierarchy when overset masks are not required.
void define (const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const Vector< iMultiFab const * > &a_overset_mask, const LPInfo &a_info=LPInfo(), const Vector< FabFactory< FAB > const * > &a_factory={})
 Describe the AMR hierarchy when overset masks participate.
iMultiFab const * getOversetMask (int amrlev, int mglev) const
 Overset mask for (amrlev,mglev); returns nullptr when not defined.
bool needsUpdate () const override
 Does it need update if it's reused?
void update () override
 Average coefficients/metrics when marked dirty.
void prepareForSolve () override
 Standard hook called before MLMG iterates (fixes BC data, etc.).
void setDirichletNodesToZero (int amrlev, int mglev, MF &mf) const override
 Zero out Dirichlet nodes on (amrlev,mglev) so that GMRES can treat them as known.
void getFluxes (const Vector< Array< MF *, 3 > > &a_flux, const Vector< MF * > &a_sol, Location a_loc) const final
 Fill per-face fluxes using the supplied solution hierarchy.
void getFluxes (const Vector< MF * > &a_flux, const Vector< MF * > &a_sol) const final
 Guard overload that aborts if called (cell-centered flux extraction requires per-direction face arrays).
virtual RT getAScalar () const =0
 Scalar applied to a on the current operator.
virtual RT getBScalar () const =0
 Scalar applied to b on the current operator.
virtual MF const * getACoeffs (int amrlev, int mglev) const =0
 Cell-centered a coefficient MultiFab for AMR level amrlev and MG level mglev.
virtual Array< MF const *, 3 > getBCoeffs (int amrlev, int mglev) const =0
 Face-centered b coefficients for AMR level amrlev and MG level mglev.
void applyInhomogNeumannTerm (int amrlev, MF &rhs) const final
 Apply stored Neumann data to the RHS rhs on AMR level amrlev.
void addInhomogNeumannFlux (int amrlev, const Array< MF *, 3 > &grad, MF const &sol, bool mult_bcoef) const final
 Add inhomogeneous Neumann/Robin flux contributions into grad from sol (include b when mult_bcoef is true).
void applyOverset (int amrlev, MF &rhs) const override
 Zero RHS entries in rhs that are covered by overset masks on level amrlev.
virtual MF const * getEBBCoeffs (int, int) const
 EB Dirichlet b coefficient for the matrix assembly (nullptr without EB).
std::unique_ptr< MLAlgMG > makeAlgMG (int mglev) const override
 Build the algebraic system of MG level mglev of AMR level 0 for the AlgMG solver. Operators that hypre supports implement this.
bool supportsAlgMG () const override
 True if makeAlgMG is implemented for this operator.
Array< MF, 3 > makeDefaultBCoeffs (int mglev) const
Public Member Functions inherited from amrex::MLCellLinOpT< MF >
 MLCellLinOpT ()
 ~MLCellLinOpT () override=default
 MLCellLinOpT (const MLCellLinOpT< MF > &)=delete
 MLCellLinOpT (MLCellLinOpT< MF > &&)=delete
MLCellLinOpT< MF > & operator= (const MLCellLinOpT< MF > &)=delete
MLCellLinOpT< MF > & operator= (MLCellLinOpT< MF > &&)=delete
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< FAB > const * > &a_factory={})
 Bind the operator to an AMR hierarchy.
void setLevelBC (int amrlev, const MF *levelbcdata, const MF *robinbc_a=nullptr, const MF *robinbc_b=nullptr, const MF *robinbc_f=nullptr) final
 Provide per-level inhomogeneous boundary data.
template<MultiFabLike AMF>
requires (!std::same_as<MF,AMF>)
void setLevelBC (int amrlev, const AMF *levelbcdata, const AMF *robinbc_a=nullptr, const AMF *robinbc_b=nullptr, const AMF *robinbc_f=nullptr)
bool needsUpdate () const override
 Does it need update if it's reused?
void update () override
 Update for reuse.
void setGaussSeidel (bool flag) noexcept
 Toggle Gauss–Seidel smoothing in place of Jacobi relaxation.
virtual bool isCrossStencil () const
 Whether the stencil is the cross shape.
virtual bool isTensorOp () const
 Whether this operator is a tensor solve.
void updateSolBC (int amrlev, const MF &crse_bcdata) const
 Refresh stored solution BC data from coarse inputs.
void updateCorBC (int amrlev, const MF &crse_bcdata) const
 Refresh stored correction BC data from coarse inputs.
virtual void applyBC (int amrlev, int mglev, MF &in, BCMode bc_mode, StateMode s_mode, const MLMGBndryT< MF > *bndry=nullptr, bool skip_fillboundary=false) const
 Apply physical BCs (optionally skipping FillBoundary).
BoxArray makeNGrids (int grid_size) const
 Helper that builds a BoxArray for NSolve with boxes no larger than the requested grid_size.
void restriction (int amrlev, int cmglev, MF &crse, MF &fine) const override
 Restrict a fine-grid field onto its coarse counterpart.
void interpolation (int amrlev, int fmglev, MF &fine, const MF &crse) const override
 Add the prolongation of coarse data onto the fine grid (fine += prolong(crse)).
void interpAssign (int amrlev, int fmglev, MF &fine, MF &crse) const override
 Overwrite fine data with the prolongation of coarse data (fine = prolong(crse)).
void interpolationAmr (int famrlev, MF &fine, const MF &crse, IntVect const &nghost) const override
 Prolong AMR-level data during FMG initialization.
void averageDownSolutionRHS (int camrlev, MF &crse_sol, MF &crse_rhs, const MF &fine_sol, const MF &fine_rhs) override
 Average fine solution/RHS onto the next coarser AMR level.
void apply (int amrlev, int mglev, MF &out, MF &in, BCMode bc_mode, StateMode s_mode, const MLMGBndryT< MF > *bndry=nullptr) const override
 Apply the linear operator with boundary conditions.
void smooth (int amrlev, int mglev, MF &sol, const MF &rhs, bool skip_fillboundary, int niter) const override
 Perform niter smoothing iterations on the supplied residual equation.
void solutionResidual (int amrlev, MF &resid, MF &x, const MF &b, const MF *crse_bcdata=nullptr) override
 Compute the residual resid = b - A(x) using solution boundary data.
void prepareForFluxes (int amrlev, const MF *crse_bcdata=nullptr) override
 Ensure BC caches are ready for flux computations (e.g., getFluxes).
void correctionResidual (int amrlev, int mglev, MF &resid, MF &x, const MF &b, BCMode bc_mode, const MF *crse_bcdata=nullptr) final
 Compute the correction residual with optional coarse data.
void reflux (int crse_amrlev, MF &res, const MF &crse_sol, const MF &, MF &, MF &fine_sol, const MF &) const final
 Reflux fine-level fluxes into the coarse residual.
void compFlux (int amrlev, const Array< MF *, 3 > &fluxes, MF &sol, Location loc) const override
 Compute face-centered fluxes from the supplied solution.
void compGrad (int amrlev, const Array< MF *, 3 > &grad, MF &sol, Location loc) const override
 Compute directional gradients of the solution.
void applyMetricTerm (int amrlev, int mglev, MF &rhs) const final
 Multiply the RHS by metric terms appropriate for curvilinear coordinates.
void unapplyMetricTerm (int amrlev, int mglev, MF &rhs) const final
 Remove metric scaling previously applied to the RHS.
Vector< RT > getSolvabilityOffset (int amrlev, int mglev, MF const &rhs) const override
 Compute the average offset needed to enforce solvability constraints.
void fixSolvabilityByOffset (int amrlev, int mglev, MF &rhs, Vector< RT > const &offset) const override
 Apply solvability offsets to the RHS (subtracting the average).
void prepareForSolve () override
 Prepare multilevel metadata before MLMG iterates (coefficients, BC caches, etc.).
RT xdoty (int amrlev, int mglev, const MF &x, const MF &y, bool local) const final
 Dot product helper.
RT dotProductPrecond (Vector< MF const * > const &x, Vector< MF const * > const &y) const final
 Dot product over the composite AMR hierarchy, excluding cells covered by finer levels (used when the operator is a preconditioner).
RT norm2Precond (Vector< MF const * > const &x) const final
 L2 norm over the composite AMR hierarchy, excluding cells covered by finer levels (used when the operator is a preconditioner).
virtual void Fapply (int amrlev, int mglev, MF &out, const MF &in) const =0
virtual void Fsmooth (int amrlev, int mglev, MF &sol, const MF &rhs, int redblack) const =0
virtual void FFlux (int amrlev, const MFIter &mfi, const Array< FAB *, 3 > &flux, const FAB &sol, Location loc, int face_only=0) const =0
RT normInf (int amrlev, MF const &mf, bool local) const override
 Infinity norm helper used by solvers and diagnostics.
void averageDownAndSync (Vector< MF > &sol) const override
 Average the solution hierarchy down (fine-to-coarse) and sync.
void avgDownResAmr (int clev, MF &cres, MF const &fres) const override
 Average a residual from a fine AMR level to its coarse parent.
void beginPrecondBC () override
 Called when the operator starts being used as a preconditioner.
void endPrecondBC () override
 Called when the operator stops being used as a preconditioner.
void setInterpBndryHalfWidth (int w)
 Control how many cells the interpolation boundary stencil spans.
Public Member Functions inherited from amrex::MLLinOpT< MF >
 MLLinOpT ()=default
virtual ~MLLinOpT ()=default
 MLLinOpT (const MLLinOpT< MF > &)=delete
 MLLinOpT (MLLinOpT< MF > &&)=delete
MLLinOpT< MF > & operator= (const MLLinOpT< MF > &)=delete
MLLinOpT< MF > & operator= (MLLinOpT< MF > &&)=delete
void define (const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info, const Vector< FabFactory< FAB > const * > &a_factory, bool eb_limit_coarsening=true)
 Initialize the operator hierarchy on a set of AMR levels.
virtual std::string name () const
void setDomainBC (const Array< BCType, 3 > &lobc, const Array< BCType, 3 > &hibc) noexcept
 Boundary of the whole domain.
void setDomainBC (const Vector< Array< BCType, 3 > > &lobc, const Vector< Array< BCType, 3 > > &hibc)
 Boundary of the whole domain.
void setDomainBCLoc (const Array< Real, 3 > &lo_bcloc, const Array< Real, 3 > &hi_bcloc) noexcept
 Set location offsets for the physical domain boundaries.
bool needsCoarseDataForBC () const noexcept
 Needs coarse data for bc?
void setCoarseFineBC (const MF *crse, int crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept
 Set coarse/fine boundary conditions. For cell-centered solves only.
void setCoarseFineBC (const MF *crse, IntVect const &crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept
template<typename AMF>
requires (!std::same_as<MF,AMF>)
void setCoarseFineBC (const AMF *crse, int crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept
template<typename AMF>
requires (!std::same_as<MF,AMF>)
void setCoarseFineBC (const AMF *crse, IntVect const &crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept
template<MultiFabLike AMF>
requires (!std::same_as<MF,AMF>)
void setLevelBC (int amrlev, const AMF *levelbcdata, const AMF *robinbc_a=nullptr, const AMF *robinbc_b=nullptr, const AMF *robinbc_f=nullptr)
void setVerbose (int v) noexcept
 Set verbosity.
void setPrintIndentation (std::string s)
 Prefix printed messages (e.g., to indent per level).
void setMaxOrder (int o) noexcept
 Set order of interpolation at coarse/fine boundary.
int getMaxOrder () const noexcept
 Get order of interpolation at coarse/fine boundary.
void setEnforceSingularSolvable (bool o) noexcept
 Control whether the solver should try to make singular problems solvable.
bool getEnforceSingularSolvable () const noexcept
virtual BottomSolver getDefaultBottomSolver () const
virtual bool supportCustomBottomSolver () const
 Does this operator provide its own bottom solver (BottomSolver::custom)?
virtual void customBottomSolve (MLMGT< MF > *mlmg, MF &x, const MF &b, RT eps_rel, RT eps_abs, int maxiter)
 Bottom solve provided by the operator itself.
virtual int getNComp () const
 Return number of components.
virtual int getNGrow (int=0, int=0) const
virtual void interpCoarseFineSolution (int famrlev, MF &fine_sol, const MF &crse_sol) const
 Before a composite solve, set the solution at the nodes that fine AMR level famrlev takes from the coarse level (the coarse/fine nodes of MLNodeLaplacian) to the interpolated coarse solution. The solve only adds interpolated corrections there, so the result would otherwise depend on the initial guess. The default does nothing.
virtual void normalize (int amrlev, int mglev, MF &mf) const
 Divide mf by the diagonal component of the operator. Used by the bottom solvers.
virtual void unimposeNeumannBC (int amrlev, MF &rhs) const
 Undo Neumann contributions stored on the RHS.
virtual bool scaleRHS (int amrlev, MF *rhs) const
 Optionally scale the RHS to fix solvability.
virtual void preparePrecond ()
 Prepare auxiliary data used when the operator acts as a preconditioner.
virtual bool isSingular (int amrlev) const =0
 Is it singular on AMR level amrlev?
virtual bool isBottomSingular () const =0
 Is the bottom of the multigrid hierarchy singular?
virtual std::unique_ptr< MLLinOpT< MF > > makeNLinOp (int grid_size) const
 Create the NSolve counterpart of this operator with the requested grid size.
virtual void getEBFluxes (const Vector< MF * > &a_flux, const Vector< MF * > &a_sol) const
 Extract embedded-boundary fluxes.
virtual bool supportsAnisotropicCoarsening () const
 True if the operator supports MG levels coarsened in any subset of directions. Then MLMG coarsens stretched cells only in their short directions until they are nearly cubic.
virtual GpuArray< Real, 3 > anisotropicCoarseningCellSize (Geometry const &geom) const
 Cell size used to pick the directions to coarsen when supportsAnisotropicCoarsening() is true. A direction with weaker coupling counts as having longer cells.
virtual bool supportNSolve () const
 Whether this operator supports NSolve.
virtual void copyNSolveSolution (MF &dst, MF const &src) const
 Copy an NSolve solution from src to dst.
virtual void postSolve (Vector< MF * > const &sol) const
 Optional hook invoked after the main solve completes.
virtual void avgDownResMG (int clev, MF &cres, MF const &fres) const
 Average residuals from fine to coarse MG levels (FMG helper).
bool isMFIterSafe (int amrlev, int mglev1, int mglev2) const
 Check whether mixing MFIter loops for different MG levels is safe.
int NAMRLevels () const noexcept
 Return the number of AMR levels.
int NMGLevels (int amrlev) const noexcept
 Return the number of MG levels at given AMR level.
const Geometry & Geom (int amr_lev, int mglev=0) const noexcept
 Geometry accessor for (amr_lev,mglev).

Protected Member Functions

bool supportInhomogNeumannBC () const noexcept override
Protected Member Functions inherited from amrex::MLLinOpT< MF >
const Vector< int > & AMRRefRatio () const noexcept
 Return AMR refinement ratios.
int AMRRefRatio (int amr_lev) const noexcept
 Return AMR refinement ratio at given AMR level.
IntVect AMRRefRatioVect (int amr_lev) const noexcept
 Return AMR refinement ratio as IntVect (1 in hidden direction).
FabFactory< FAB > const * Factory (int amr_lev, int mglev=0) const noexcept
GpuArray< BCType, 3 > LoBC (int icomp=0) const noexcept
GpuArray< BCType, 3 > HiBC (int icomp=0) const noexcept
bool hasBC (BCType bct) const noexcept
bool hasInhomogNeumannBC () const noexcept
bool hasRobinBC () const noexcept
virtual bool supportRobinBC () const noexcept
bool isBottomActive () const noexcept
MPI_Comm BottomCommunicator () const noexcept
MPI_Comm Communicator () const noexcept
void setCoarseFineBCLocation (const RealVect &cloc) noexcept
bool doAgglomeration () const noexcept
bool doConsolidation () const noexcept
bool doSemicoarsening () const noexcept
bool isCellCentered () const noexcept
virtual IntVect getNGrowVectRestriction () const
virtual void make (Vector< Vector< MF > > &mf, IntVect const &ng) const
virtual MF make (int amrlev, int mglev, IntVect const &ng) const
virtual MF make (int amrlev, int mglev, IntVect const &ng, MFInfo const &mf_info) const
 As above, with caller-selected allocation metadata for temporary storage.
virtual MF makeAlias (MF const &mf) const
virtual MF makeCoarseMG (int amrlev, int mglev, IntVect const &ng) const
 Allocate an MF on the next coarser MG level (mglev+1) with grow cells ng.
virtual MF makeCoarseMG (int amrlev, int mglev, IntVect const &ng, MFInfo const &mf_info) const
 As above, with caller-selected allocation metadata for temporary storage.
virtual MF makeCoarseAmr (int famrlev, IntVect const &ng) const
 Allocate an MF on the next coarser AMR level (famrlev-1) with grow cells ng.
virtual MF makeCoarseAmr (int famrlev, IntVect const &ng, MFInfo const &mf_info) const
 As above, with caller-selected allocation metadata for temporary storage.
virtual std::unique_ptr< FabFactory< FAB > > makeFactory (int, int) const
virtual void resizeMultiGrid (int new_size)
void prepareMGHierarchy ()
 Build the deferred MG levels of AMR level 0 once. See supportsAnisotropicCoarsening.
virtual void buildMGHierarchy ()
 Build the MG levels of AMR level 0 below the finest one.
bool hasHiddenDimension () const noexcept
int hiddenDirection () const noexcept
Box compactify (Box const &b) const noexcept
template<typename T>
Array4< T > compactify (Array4< T > const &a) const noexcept
template<typename T>
T get_d0 (T const &dx, T const &dy, T const &) const noexcept
template<typename T>
T get_d1 (T const &, T const &dy, T const &dz) const noexcept

Protected Attributes

Vector< Vector< std::unique_ptr< iMultiFab > > > m_overset_mask
LPInfo m_lpinfo_arg
Protected Attributes inherited from amrex::MLCellLinOpT< MF >
bool m_has_metric_term = false
Vector< std::unique_ptr< MLMGBndryT< MF > > > m_bndry_sol
Vector< std::unique_ptr< BndryRegisterT< MF > > > m_crse_sol_br
Vector< std::unique_ptr< MLMGBndryT< MF > > > m_bndry_cor
Vector< std::unique_ptr< BndryRegisterT< MF > > > m_crse_cor_br
Vector< std::unique_ptr< MLMGBndryT< MF > > > m_bndry_sol_zero
Vector< Vector< std::unique_ptr< BndryCondLoc > > > m_bcondloc
Vector< Vector< BndryRegisterT< MF > > > m_undrrelxr
Vector< Vector< Array< MultiMask, 2 *3 > > > m_maskvals
Vector< std::unique_ptr< iMultiFab > > m_norm_fine_mask
Vector< YAFluxRegisterT< MF > > m_fluxreg
bool m_use_gauss_seidel = true
Protected Attributes inherited from amrex::MLLinOpT< MF >
int mg_box_min_width = 2
int mg_domain_min_width = 2
int mg_agg_no_split_direction = -1
bool mg_odd_coarsening = false
bool mg_independent_coarsening = false
LPInfo info
int verbose = 0
std::string print_ident
int maxorder = 3
bool enforceSingularSolvable = true
bool m_mg_deferred = false
 MG levels of AMR level 0 built at first solve.
bool m_mg_built = false
int m_num_amr_levels = 0
Vector< int > m_amr_ref_ratio
Vector< int > m_num_mg_levels
const MLLinOpT< MF > * m_parent = nullptr
IntVect m_ixtype
bool m_do_agglomeration = false
bool m_do_consolidation = false
bool m_do_semicoarsening = false
Vector< IntVect > mg_coarsen_ratio_vec
Vector< Vector< Geometry > > m_geom
 first Vector is for amr level and second is mg level
Vector< Vector< BoxArray > > m_grids
Vector< Vector< DistributionMapping > > m_dmap
Vector< Vector< std::unique_ptr< FabFactory< FAB > > > > m_factory
Vector< int > m_domain_covered
MPI_Comm m_default_comm = MPI_COMM_NULL
MPI_Comm m_bottom_comm = MPI_COMM_NULL
std::unique_ptr< CommContainer > m_raii_comm
Array< Real, 3 > m_domain_bloc_lo {{ 0._rt,0._rt,0._rt }}
Array< Real, 3 > m_domain_bloc_hi {{ 0._rt,0._rt,0._rt }}
bool m_needs_coarse_data_for_bc = false
LinOpBCType m_coarse_fine_bc_type = LinOpBCType::Dirichlet
IntVect m_coarse_data_crse_ratio = IntVect(-1)
RealVect m_coarse_bc_loc
const MF * m_coarse_data_for_bc = nullptr
MF m_coarse_data_for_bc_raii
bool m_precond_mode = false

Additional Inherited Members

Public Attributes inherited from amrex::MLCellLinOpT< MF >
Vector< std::unique_ptr< MF > > m_robin_bcval
Public Attributes inherited from amrex::MLLinOpT< MF >
Vector< Array< BCType, 3 > > m_lobc
Vector< Array< BCType, 3 > > m_hibc
Vector< Array< BCType, 3 > > m_lobc_orig
Vector< Array< BCType, 3 > > m_hibc_orig
Protected Types inherited from amrex::MLCellLinOpT< MF >
using RealTuple = Array<RT,2* 3 >
using BCTuple = Array<BoundCond,2* 3 >
Static Protected Attributes inherited from amrex::MLLinOpT< MF >
static constexpr int mg_coarsen_ratio = 2

Detailed Description

template<typename MF>
class amrex::MLCellABecLapT< MF >

Cell-centered operator that exposes ABec Laplacian helpers to derived classes.

Member Typedef Documentation

◆ FAB

template<typename MF>
using amrex::MLCellABecLapT< MF >::FAB = typename MF::fab_type

◆ Location

template<typename MF>
using amrex::MLCellABecLapT< MF >::Location = typename MLLinOpT<MF>::Location

◆ RT

template<typename MF>
using amrex::MLCellABecLapT< MF >::RT = typename MF::value_type

Constructor & Destructor Documentation

◆ MLCellABecLapT() [1/3]

template<typename MF>
amrex::MLCellABecLapT< MF >::MLCellABecLapT ( )
default

◆ ~MLCellABecLapT()

template<typename MF>
amrex::MLCellABecLapT< MF >::~MLCellABecLapT ( )
overridedefault

◆ MLCellABecLapT() [2/3]

template<typename MF>
amrex::MLCellABecLapT< MF >::MLCellABecLapT ( const MLCellABecLapT< MF > & )
delete

◆ MLCellABecLapT() [3/3]

template<typename MF>
amrex::MLCellABecLapT< MF >::MLCellABecLapT ( MLCellABecLapT< MF > && )
delete

Member Function Documentation

◆ addInhomogNeumannFlux()

template<typename MF>
void amrex::MLCellABecLapT< MF >::addInhomogNeumannFlux ( int amrlev,
const Array< MF *, 3 > & grad,
MF const & sol,
bool mult_bcoef ) const
finalvirtual

Add inhomogeneous Neumann/Robin flux contributions into grad from sol (include b when mult_bcoef is true).

Reimplemented from amrex::MLCellLinOpT< MF >.

◆ applyInhomogNeumannTerm()

template<typename MF>
void amrex::MLCellABecLapT< MF >::applyInhomogNeumannTerm ( int amrlev,
MF & rhs ) const
finalvirtual

Apply stored Neumann data to the RHS rhs on AMR level amrlev.

Reimplemented from amrex::MLLinOpT< MF >.

◆ applyOverset()

template<typename MF>
void amrex::MLCellABecLapT< MF >::applyOverset ( int amrlev,
MF & rhs ) const
overridevirtual

Zero RHS entries in rhs that are covered by overset masks on level amrlev.

Reimplemented from amrex::MLLinOpT< MF >.

◆ define() [1/2]

template<typename MF>
void amrex::MLCellABecLapT< MF >::define ( const Vector< Geometry > & a_geom,
const Vector< BoxArray > & a_grids,
const Vector< DistributionMapping > & a_dmap,
const LPInfo & a_info = LPInfo(),
const Vector< FabFactory< FAB > const * > & a_factory = {} )

Describe the AMR hierarchy when overset masks are not required.

Parameters
a_geomPer-level geometries (fine to coarse).
a_gridsPer-level grids.
a_dmapDistribution mappings.
a_infoOptional operator configuration overrides.
a_factoryOptional FAB factories (defaults to FArrayBox).

◆ define() [2/2]

template<typename MF>
void amrex::MLCellABecLapT< MF >::define ( const Vector< Geometry > & a_geom,
const Vector< BoxArray > & a_grids,
const Vector< DistributionMapping > & a_dmap,
const Vector< iMultiFab const * > & a_overset_mask,
const LPInfo & a_info = LPInfo(),
const Vector< FabFactory< FAB > const * > & a_factory = {} )

Describe the AMR hierarchy when overset masks participate.

Parameters
a_geomPer-level geometries (fine to coarse).
a_gridsPer-level grids.
a_dmapDistribution mappings.
a_overset_maskPer-level overset masks (1 unknown, 0 known).
a_infoOptional operator configuration overrides.
a_factoryOptional FAB factories (defaults to FArrayBox).

◆ getACoeffs()

template<typename MF>
virtual MF const * amrex::MLCellABecLapT< MF >::getACoeffs ( int amrlev,
int mglev ) const
pure virtual

◆ getAScalar()

template<typename MF>
virtual RT amrex::MLCellABecLapT< MF >::getAScalar ( ) const
pure virtual

◆ getBCoeffs()

template<typename MF>
virtual Array< MF const *, 3 > amrex::MLCellABecLapT< MF >::getBCoeffs ( int amrlev,
int mglev ) const
pure virtual

◆ getBScalar()

template<typename MF>
virtual RT amrex::MLCellABecLapT< MF >::getBScalar ( ) const
pure virtual

◆ getEBBCoeffs()

template<typename MF>
virtual MF const * amrex::MLCellABecLapT< MF >::getEBBCoeffs ( int ,
int  ) const
inlinenodiscardvirtual

EB Dirichlet b coefficient for the matrix assembly (nullptr without EB).

Reimplemented in amrex::MLEBABecLap.

◆ getFluxes() [1/2]

template<typename MF>
void amrex::MLCellABecLapT< MF >::getFluxes ( const Vector< Array< MF *, 3 > > & a_flux,
const Vector< MF * > & a_sol,
Location a_loc ) const
finalvirtual

Fill per-face fluxes using the supplied solution hierarchy.

Parameters
a_fluxFlux destinations per AMR level/direction.
a_solSolution pointers per AMR level.
a_locLocation (face center vs centroid).

Reimplemented from amrex::MLLinOpT< MF >.

◆ getFluxes() [2/2]

template<typename MF>
void amrex::MLCellABecLapT< MF >::getFluxes ( const Vector< MF * > & a_flux,
const Vector< MF * > & a_sol ) const
inlinefinalvirtual

Guard overload that aborts if called (cell-centered flux extraction requires per-direction face arrays).

Reimplemented from amrex::MLLinOpT< MF >.

◆ getOversetMask()

template<typename MF>
iMultiFab const * amrex::MLCellABecLapT< MF >::getOversetMask ( int amrlev,
int mglev ) const
inlinenodiscard

Overset mask for (amrlev,mglev); returns nullptr when not defined.

◆ makeAlgMG()

template<typename MF>
std::unique_ptr< MLAlgMG > amrex::MLCellABecLapT< MF >::makeAlgMG ( int mglev) const
nodiscardoverridevirtual

Build the algebraic system of MG level mglev of AMR level 0 for the AlgMG solver. Operators that hypre supports implement this.

Reimplemented from amrex::MLLinOpT< MF >.

◆ makeDefaultBCoeffs()

template<typename MF>
Array< MF, 3 > amrex::MLCellABecLapT< MF >::makeDefaultBCoeffs ( int mglev) const
nodiscard

Unit b coefficients with the metric factors (RZ, spherical) for the matrix assembly of operators without b coefficients.

◆ needsUpdate()

template<typename MF>
bool amrex::MLCellABecLapT< MF >::needsUpdate ( ) const
inlinenodiscardoverridevirtual

Does it need update if it's reused?

Reimplemented from amrex::MLLinOpT< MF >.

Reimplemented in amrex::MLEBABecLap, amrex::MLEBTensorOp, and amrex::MLTensorOp.

◆ operator=() [1/2]

template<typename MF>
MLCellABecLapT< MF > & amrex::MLCellABecLapT< MF >::operator= ( const MLCellABecLapT< MF > & )
delete

◆ operator=() [2/2]

template<typename MF>
MLCellABecLapT< MF > & amrex::MLCellABecLapT< MF >::operator= ( MLCellABecLapT< MF > && )
delete

◆ prepareForSolve()

template<typename MF>
void amrex::MLCellABecLapT< MF >::prepareForSolve ( )
overridevirtual

Standard hook called before MLMG iterates (fixes BC data, etc.).

Implements amrex::MLLinOpT< MF >.

Reimplemented in amrex::MLEBABecLap, amrex::MLEBTensorOp, amrex::MLPoissonT< MF >, amrex::MLPoissonT< MultiFab >, and amrex::MLTensorOp.

◆ setDirichletNodesToZero()

template<typename MF>
void amrex::MLCellABecLapT< MF >::setDirichletNodesToZero ( int amrlev,
int mglev,
MF & mf ) const
overridevirtual

Zero out Dirichlet nodes on (amrlev,mglev) so that GMRES can treat them as known.

Reimplemented from amrex::MLLinOpT< MF >.

◆ supportInhomogNeumannBC()

template<typename MF>
bool amrex::MLCellABecLapT< MF >::supportInhomogNeumannBC ( ) const
inlinenodiscardoverrideprotectedvirtualnoexcept

Reimplemented from amrex::MLLinOpT< MF >.

◆ supportsAlgMG()

template<typename MF>
bool amrex::MLCellABecLapT< MF >::supportsAlgMG ( ) const
inlinenodiscardoverridevirtual

True if makeAlgMG is implemented for this operator.

Reimplemented from amrex::MLLinOpT< MF >.

Reimplemented in amrex::MLEBABecLap.

◆ update()

template<typename MF>
void amrex::MLCellABecLapT< MF >::update ( )
overridevirtual

Average coefficients/metrics when marked dirty.

Reimplemented from amrex::MLLinOpT< MF >.

Reimplemented in amrex::MLEBABecLap, amrex::MLEBTensorOp, and amrex::MLTensorOp.

Member Data Documentation

◆ m_lpinfo_arg

template<typename MF>
LPInfo amrex::MLCellABecLapT< MF >::m_lpinfo_arg
protected

◆ m_overset_mask

template<typename MF>
Vector<Vector<std::unique_ptr<iMultiFab> > > amrex::MLCellABecLapT< MF >::m_overset_mask
protected

The documentation for this class was generated from the following file: