Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
amrex::MLEBABecLap Class Reference

Embedded-boundary ABec Laplacian (alpha a - beta div(b grad phi)). More...

#include <AMReX_MLEBABecLap.H>

Inheritance diagram for amrex::MLEBABecLap:
amrex::MLCellABecLapT< MF > amrex::MLCellLinOpT< MF > amrex::MLLinOpT< MF > amrex::MLEBTensorOp

Public Member Functions

 MLEBABecLap ()=default
 Construct an empty operator; call define() before use.
 
 MLEBABecLap (const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info, const Vector< EBFArrayBoxFactory const * > &a_factory, int a_ncomp=1)
 Convenience constructor that forwards to define().
 
 MLEBABecLap (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, const Vector< EBFArrayBoxFactory const * > &a_factory, int a_ncomp=1)
 
 ~MLEBABecLap () override
 
 MLEBABecLap (const MLEBABecLap &)=delete
 
 MLEBABecLap (MLEBABecLap &&)=delete
 
MLEBABecLapoperator= (const MLEBABecLap &)=delete
 
MLEBABecLapoperator= (MLEBABecLap &&)=delete
 
void define (const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info, const Vector< EBFArrayBoxFactory const * > &a_factory, int a_ncomp=1)
 Bind the EB operator to the AMR hierarchy.
 
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, const Vector< EBFArrayBoxFactory const * > &a_factory, int a_ncomp=1)
 
void setPhiOnCentroid ()
 Interprets phi on EB centroids instead of cell centers when set.
 
void setScalars (Real a, Real b)
 Set constant scalar coefficients (see MLCellABecLap semantics).
 
void setACoeffs (int amrlev, const MultiFab &alpha)
 Provide per-cell a coefficients for AMR level amrlev.
 
void setACoeffs (int amrlev, Real alpha)
 Provide a constant a coefficient.
 
void setBCoeffs (int amrlev, const Array< MultiFab const *, 3 > &beta, Location a_beta_loc)
 Provide spatially varying b coefficients and their location.
 
void setBCoeffs (int amrlev, const Array< MultiFab const *, 3 > &beta)
 
void setBCoeffs (int amrlev, Real beta)
 Provide constant scalar b coefficients.
 
void setBCoeffs (int amrlev, Vector< Real > const &beta)
 Provide component-specific constant b coefficients.
 
void setEBDirichlet (int amrlev, const MultiFab &phi, const MultiFab &beta)
 Specify Dirichlet values on EB faces using phi.
 
void setEBDirichlet (int amrlev, const MultiFab &phi, Real beta)
 Specify Dirichlet values on EB faces.
 
void setEBDirichlet (int amrlev, const MultiFab &phi, Vector< Real > const &beta)
 Specify Dirichlet values on EB faces.
 
void setEBHomogDirichlet (int amrlev, const MultiFab &beta)
 Mark EB faces as homogeneous Dirichlet (phi=0) with optional coefficients.
 
void setEBHomogDirichlet (int amrlev, Real beta)
 Mark EB faces as homogeneous Dirichlet (phi=0).
 
void setEBHomogDirichlet (int amrlev, Vector< Real > const &beta)
 Mark EB faces as homogeneous Dirichlet (phi=0).
 
int getNComp () const override
 Return number of components.
 
bool needsUpdate () const override
 Does it need update if it's reused?
 
void update () override
 Average coefficients/metrics when marked dirty.
 
std::unique_ptr< FabFactory< FArrayBox > > makeFactory (int amrlev, int mglev) const final
 EB-aware factory used when the solver needs auxiliary storage on (amrlev,mglev).
 
bool isCrossStencil () const override
 EB discretization uses a non-cross stencil.
 
void applyBC (int amrlev, int mglev, MultiFab &in, BCMode bc_mode, StateMode s_mode, const MLMGBndry *bndry=nullptr, bool skip_fillboundary=false) const final
 Apply physical BCs to in on (amrlev,mglev) using the supplied BC metadata.
 
void apply (int amrlev, int mglev, MultiFab &out, MultiFab &in, BCMode bc_mode, StateMode s_mode, const MLMGBndry *bndry=nullptr) const override
 Apply the discrete operator to in on (amrlev,mglev) and store the result in out.
 
void compGrad (int amrlev, const Array< MultiFab *, 3 > &grad, MultiFab &sol, Location loc) const final
 Compute gradients from the solution sol on level amrlev at location loc.
 
void prepareForSolve () override
 Finalize EB masks, averages, and singularity flags prior to solving.
 
bool isSingular (int amrlev) const override
 True if AMR level amrlev is singular.
 
bool isBottomSingular () const override
 True if the bottom level is singular.
 
void Fapply (int amrlev, int mglev, MultiFab &out, const MultiFab &in) const final
 Apply the operator on (amrlev,mglev) and write to out.
 
void Fsmooth (int amrlev, int mglev, MultiFab &sol, const MultiFab &rhs, int redblack) const final
 Execute a smoothing sweep on (amrlev,mglev). redblack selects the red (0) or black (1) half of the grid.
 
void FFlux (int amrlev, const MFIter &mfi, const Array< FArrayBox *, 3 > &flux, const FArrayBox &sol, Location loc, int face_only=0) const final
 Compute EB-aware fluxes for sol on the tilebox described by mfi, storing to flux at loc (respecting face_only).
 
void normalize (int amrlev, int mglev, MultiFab &mf) const final
 Divide mf by the diagonal of the operator (used by CG-family bottom solvers).
 
Real getAScalar () const final
 Scalar applied to the zeroth-order term.
 
Real getBScalar () const final
 Scalar applied to the diffusion term.
 
MultiFab const * getACoeffs (int amrlev, int mglev) const final
 Access the a coefficient MultiFab.
 
Array< MultiFab const *, 3 > getBCoeffs (int amrlev, int mglev) const final
 Access the b coefficients for (amrlev,mglev).
 
std::unique_ptr< MLLinOpmakeNLinOp (int) const final
 Create the NSolve counterpart of this operator with the requested grid size.
 
void averageDownCoeffsSameAmrLevel (int amrlev, Vector< MultiFab > &a, Vector< Array< MultiFab, 3 > > &b, const Vector< MultiFab * > &b_eb)
 
void restriction (int amrlev, int cmglev, MultiFab &crse, MultiFab &fine) const final
 Restrict fine-grid data onto coarse storage.
 
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)).
 
void averageDownSolutionRHS (int camrlev, MultiFab &crse_sol, MultiFab &crse_rhs, const MultiFab &fine_sol, const MultiFab &fine_rhs) final
 Average solution/RHS from fine AMR levels into (camrlev) storage.
 
void getEBFluxes (const Vector< MultiFab * > &a_flux, const Vector< MultiFab * > &a_sol) const override
 Extract EB face fluxes.
 
void applyRobinBCTermsCoeffs ()
 Apply Robin BC terms to the stored coefficients when requested.
 
- Public Member Functions inherited from amrex::MLCellABecLapT< MF >
 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.
 
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).
 
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.
 
- 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)
 
void setGaussSeidel (bool flag) noexcept
 Toggle Gauss–Seidel smoothing in place of Jacobi relaxation.
 
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 final
 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< RTgetSolvabilityOffset (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).
 
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 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 int getNGrow (int=0, int=0) const
 
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 void getEBFluxes (const Vector< MF * > &a_flux, const Vector< MF * > &a_sol) const
 Extract embedded-boundary fluxes.
 
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 GeometryGeom (int amr_lev, int mglev=0) const noexcept
 Geometry accessor for (amr_lev,mglev).
 

Public Attributes

Real m_a_scalar = std::numeric_limits<Real>::quiet_NaN()
 Scalar multiplier for the a term (set via setScalars()).
 
Real m_b_scalar = std::numeric_limits<Real>::quiet_NaN()
 
Vector< Vector< MultiFab > > m_a_coeffs
 
Vector< Vector< Array< MultiFab, 3 > > > m_b_coeffs
 
bool m_scalars_set = false
 
bool m_acoef_set = false
 
- 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 Member Functions

bool isEBDirichlet () const noexcept
 
void averageDownCoeffs ()
 Average coefficients down across all AMR and MG levels.
 
void averageDownCoeffsToCoarseAmrLevel (int flev)
 Average coefficients from fine AMR level flev to coarse AMR level flev-1.
 
bool supportRobinBC () const noexcept override
 
- Protected Member Functions inherited from amrex::MLCellABecLapT< MF >
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
 
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 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 makeCoarseAmr (int famrlev, IntVect const &ng) const
 Allocate an MF on the next coarser AMR level (famrlev-1) with grow cells ng.
 
virtual void resizeMultiGrid (int new_size)
 
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 >
get_d0 (T const &dx, T const &dy, T const &) const noexcept
 
template<typename T >
get_d1 (T const &, T const &dy, T const &dz) const noexcept
 

Protected Attributes

int m_ncomp = 1
 
Location m_beta_loc
 
Location m_phi_loc
 
Vector< Vector< iMultiFab > > m_cc_mask
 
Vector< std::unique_ptr< MultiFab > > m_eb_phi
 
Vector< Vector< std::unique_ptr< MultiFab > > > m_eb_b_coeffs
 
Vector< intm_is_singular
 
int m_is_eb_inhomog
 
Vector< Vector< TagVector< MLMGABCEBTag< RT > > > > m_eb_bc_tags
 
- Protected Attributes inherited from amrex::MLCellABecLapT< MF >
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_domain_min_width = 2
 
LPInfo info
 
int verbose = 0
 
int maxorder = 3
 
bool enforceSingularSolvable = true
 
int m_num_amr_levels = 0
 
Vector< intm_amr_ref_ratio
 
Vector< intm_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< IntVectmg_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< intm_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 Types inherited from amrex::MLCellABecLapT< MF >
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
 
- 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
 
static constexpr int mg_box_min_width = 2
 

Detailed Description

Embedded-boundary ABec Laplacian (alpha a - beta div(b grad phi)).

Constructor & Destructor Documentation

◆ MLEBABecLap() [1/5]

amrex::MLEBABecLap::MLEBABecLap ( )
default

Construct an empty operator; call define() before use.

◆ MLEBABecLap() [2/5]

amrex::MLEBABecLap::MLEBABecLap ( const Vector< Geometry > &  a_geom,
const Vector< BoxArray > &  a_grids,
const Vector< DistributionMapping > &  a_dmap,
const LPInfo a_info,
const Vector< EBFArrayBoxFactory const * > &  a_factory,
int  a_ncomp = 1 
)

Convenience constructor that forwards to define().

Parameters
a_geomPer-level geometries.
a_gridsPer-level grids.
a_dmapDistribution mappings.
a_infoLPInfo overrides (agglomeration, coarsening, etc.).
a_factoryEB factories per level.
a_ncompNumber of components handled.

◆ MLEBABecLap() [3/5]

amrex::MLEBABecLap::MLEBABecLap ( 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,
const Vector< EBFArrayBoxFactory const * > &  a_factory,
int  a_ncomp = 1 
)

◆ ~MLEBABecLap()

amrex::MLEBABecLap::~MLEBABecLap ( )
overridedefault

◆ MLEBABecLap() [4/5]

amrex::MLEBABecLap::MLEBABecLap ( const MLEBABecLap )
delete

◆ MLEBABecLap() [5/5]

amrex::MLEBABecLap::MLEBABecLap ( MLEBABecLap &&  )
delete

Member Function Documentation

◆ apply()

void amrex::MLEBABecLap::apply ( int  amrlev,
int  mglev,
MultiFab out,
MultiFab in,
BCMode  bc_mode,
StateMode  s_mode,
const MLMGBndry bndry = nullptr 
) const
override

Apply the discrete operator to in on (amrlev,mglev) and store the result in out.

◆ applyBC()

void amrex::MLEBABecLap::applyBC ( int  amrlev,
int  mglev,
MultiFab in,
BCMode  bc_mode,
StateMode  s_mode,
const MLMGBndry bndry = nullptr,
bool  skip_fillboundary = false 
) const
final

Apply physical BCs to in on (amrlev,mglev) using the supplied BC metadata.

◆ applyRobinBCTermsCoeffs()

void amrex::MLEBABecLap::applyRobinBCTermsCoeffs ( )

Apply Robin BC terms to the stored coefficients when requested.

◆ averageDownCoeffs()

void amrex::MLEBABecLap::averageDownCoeffs ( )
protected

Average coefficients down across all AMR and MG levels.

◆ averageDownCoeffsSameAmrLevel()

void amrex::MLEBABecLap::averageDownCoeffsSameAmrLevel ( int  amrlev,
Vector< MultiFab > &  a,
Vector< Array< MultiFab, 3 > > &  b,
const Vector< MultiFab * > &  b_eb 
)

◆ averageDownCoeffsToCoarseAmrLevel()

void amrex::MLEBABecLap::averageDownCoeffsToCoarseAmrLevel ( int  flev)
protected

Average coefficients from fine AMR level flev to coarse AMR level flev-1.

◆ averageDownSolutionRHS()

void amrex::MLEBABecLap::averageDownSolutionRHS ( int  camrlev,
MultiFab crse_sol,
MultiFab crse_rhs,
const MultiFab fine_sol,
const MultiFab fine_rhs 
)
final

Average solution/RHS from fine AMR levels into (camrlev) storage.

◆ compGrad()

void amrex::MLEBABecLap::compGrad ( int  amrlev,
const Array< MultiFab *, 3 > &  grad,
MultiFab sol,
Location  loc 
) const
final

Compute gradients from the solution sol on level amrlev at location loc.

◆ define() [1/2]

void amrex::MLEBABecLap::define ( const Vector< Geometry > &  a_geom,
const Vector< BoxArray > &  a_grids,
const Vector< DistributionMapping > &  a_dmap,
const LPInfo a_info,
const Vector< EBFArrayBoxFactory const * > &  a_factory,
int  a_ncomp = 1 
)

Bind the EB operator to the AMR hierarchy.

Parameters
a_geomPer-level geometries.
a_gridsPer-level grids.
a_dmapDistribution mappings.
a_infoLPInfo overrides.
a_factoryEB factories per level.
a_ncompNumber of components handled.

◆ define() [2/2]

void amrex::MLEBABecLap::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,
const Vector< EBFArrayBoxFactory const * > &  a_factory,
int  a_ncomp = 1 
)

◆ Fapply()

void amrex::MLEBABecLap::Fapply ( int  amrlev,
int  mglev,
MultiFab out,
const MultiFab in 
) const
final

Apply the operator on (amrlev,mglev) and write to out.

◆ FFlux()

void amrex::MLEBABecLap::FFlux ( int  amrlev,
const MFIter mfi,
const Array< FArrayBox *, 3 > &  flux,
const FArrayBox sol,
Location  loc,
int  face_only = 0 
) const
final

Compute EB-aware fluxes for sol on the tilebox described by mfi, storing to flux at loc (respecting face_only).

◆ Fsmooth()

void amrex::MLEBABecLap::Fsmooth ( int  amrlev,
int  mglev,
MultiFab sol,
const MultiFab rhs,
int  redblack 
) const
final

Execute a smoothing sweep on (amrlev,mglev). redblack selects the red (0) or black (1) half of the grid.

◆ getACoeffs()

MultiFab const * amrex::MLEBABecLap::getACoeffs ( int  amrlev,
int  mglev 
) const
inlinefinalvirtual

Access the a coefficient MultiFab.

Implements amrex::MLCellABecLapT< MF >.

◆ getAScalar()

Real amrex::MLEBABecLap::getAScalar ( ) const
inlinefinalvirtual

Scalar applied to the zeroth-order term.

Implements amrex::MLCellABecLapT< MF >.

◆ getBCoeffs()

Array< MultiFab const *, 3 > amrex::MLEBABecLap::getBCoeffs ( int  amrlev,
int  mglev 
) const
inlinefinalvirtual

Access the b coefficients for (amrlev,mglev).

Implements amrex::MLCellABecLapT< MF >.

◆ getBScalar()

Real amrex::MLEBABecLap::getBScalar ( ) const
inlinefinalvirtual

Scalar applied to the diffusion term.

Implements amrex::MLCellABecLapT< MF >.

◆ getEBFluxes()

void amrex::MLEBABecLap::getEBFluxes ( const Vector< MultiFab * > &  a_flux,
const Vector< MultiFab * > &  a_sol 
) const
override

Extract EB face fluxes.

Parameters
a_fluxDestination MultiFabs (one per level) that receive EB fluxes.
a_solSolution hierarchy sampled at EB faces.

◆ getNComp()

int amrex::MLEBABecLap::getNComp ( ) const
inlineoverridevirtual

Return number of components.

Reimplemented from amrex::MLLinOpT< MF >.

Reimplemented in amrex::MLEBTensorOp.

◆ interpolation()

void amrex::MLEBABecLap::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)).

Parameters
amrlevAMR level index.
fmglevFine MG level index.
fineDestination fine MultiFab (updated in place).
crseSource coarse MultiFab.

◆ isBottomSingular()

bool amrex::MLEBABecLap::isBottomSingular ( ) const
inlineoverridevirtual

True if the bottom level is singular.

Implements amrex::MLLinOpT< MF >.

Reimplemented in amrex::MLEBTensorOp.

◆ isCrossStencil()

bool amrex::MLEBABecLap::isCrossStencil ( ) const
inlineoverridevirtual

EB discretization uses a non-cross stencil.

Reimplemented from amrex::MLCellLinOpT< MF >.

Reimplemented in amrex::MLEBTensorOp.

◆ isEBDirichlet()

bool amrex::MLEBABecLap::isEBDirichlet ( ) const
inlineprotectednoexcept

◆ isSingular()

bool amrex::MLEBABecLap::isSingular ( int  amrlev) const
inlineoverridevirtual

True if AMR level amrlev is singular.

Implements amrex::MLLinOpT< MF >.

Reimplemented in amrex::MLEBTensorOp.

◆ makeFactory()

std::unique_ptr< FabFactory< FArrayBox > > amrex::MLEBABecLap::makeFactory ( int  amrlev,
int  mglev 
) const
finalvirtual

EB-aware factory used when the solver needs auxiliary storage on (amrlev,mglev).

Reimplemented from amrex::MLLinOpT< MF >.

◆ makeNLinOp()

std::unique_ptr< MLLinOp > amrex::MLEBABecLap::makeNLinOp ( int  grid_size) const
inlinefinalvirtual

Create the NSolve counterpart of this operator with the requested grid size.

Parameters
grid_sizeTarget maximum grid dimension for the nodal hierarchy.

Reimplemented from amrex::MLLinOpT< MF >.

◆ needsUpdate()

bool amrex::MLEBABecLap::needsUpdate ( ) const
inlineoverridevirtual

Does it need update if it's reused?

Reimplemented from amrex::MLCellABecLapT< MF >.

Reimplemented in amrex::MLEBTensorOp.

◆ normalize()

void amrex::MLEBABecLap::normalize ( int  amrlev,
int  mglev,
MultiFab mf 
) const
final

Divide mf by the diagonal of the operator (used by CG-family bottom solvers).

◆ operator=() [1/2]

MLEBABecLap & amrex::MLEBABecLap::operator= ( const MLEBABecLap )
delete

◆ operator=() [2/2]

MLEBABecLap & amrex::MLEBABecLap::operator= ( MLEBABecLap &&  )
delete

◆ prepareForSolve()

void amrex::MLEBABecLap::prepareForSolve ( )
overridevirtual

Finalize EB masks, averages, and singularity flags prior to solving.

Reimplemented from amrex::MLCellABecLapT< MF >.

Reimplemented in amrex::MLEBTensorOp.

◆ restriction()

void amrex::MLEBABecLap::restriction ( int  amrlev,
int  cmglev,
MultiFab crse,
MultiFab fine 
) const
final

Restrict fine-grid data onto coarse storage.

Parameters
amrlevAMR level index requested by the base interface.
cmglevMultigrid level index on that AMR level.
crseDestination coarse MultiFab.
fineSource fine MultiFab (modified if ghost fills are needed).

◆ setACoeffs() [1/2]

void amrex::MLEBABecLap::setACoeffs ( int  amrlev,
const MultiFab alpha 
)

Provide per-cell a coefficients for AMR level amrlev.

Parameters
amrlevAMR level index.
alphaCell-centered MultiFab containing a.

◆ setACoeffs() [2/2]

void amrex::MLEBABecLap::setACoeffs ( int  amrlev,
Real  alpha 
)

Provide a constant a coefficient.

Parameters
amrlevAMR level index.
alphaScalar value assigned everywhere.

◆ setBCoeffs() [1/4]

void amrex::MLEBABecLap::setBCoeffs ( int  amrlev,
const Array< MultiFab const *, 3 > &  beta 
)
inline

◆ setBCoeffs() [2/4]

void amrex::MLEBABecLap::setBCoeffs ( int  amrlev,
const Array< MultiFab const *, 3 > &  beta,
Location  a_beta_loc 
)

Provide spatially varying b coefficients and their location.

Parameters
amrlevAMR level index.
betaArray of face-centered MultiFabs.
a_beta_locLocation of the coefficients (face center/centroid).

◆ setBCoeffs() [3/4]

void amrex::MLEBABecLap::setBCoeffs ( int  amrlev,
Real  beta 
)

Provide constant scalar b coefficients.

Parameters
amrlevAMR level index.
betaScalar applied to every face.

◆ setBCoeffs() [4/4]

void amrex::MLEBABecLap::setBCoeffs ( int  amrlev,
Vector< Real > const &  beta 
)

Provide component-specific constant b coefficients.

Parameters
amrlevAMR level index.
betaVector of scalars (one per component).

◆ setEBDirichlet() [1/3]

void amrex::MLEBABecLap::setEBDirichlet ( int  amrlev,
const MultiFab phi,
const MultiFab beta 
)

Specify Dirichlet values on EB faces using phi.

Parameters
amrlevAMR level index.
phiPrescribed values at EB face centroids.
betaFace coefficients.

◆ setEBDirichlet() [2/3]

void amrex::MLEBABecLap::setEBDirichlet ( int  amrlev,
const MultiFab phi,
Real  beta 
)

Specify Dirichlet values on EB faces.

Parameters
amrlevAMR level index.
phiPrescribed values at EB face centroids.
betaSingle scalar coefficient applied to every EB face.

◆ setEBDirichlet() [3/3]

void amrex::MLEBABecLap::setEBDirichlet ( int  amrlev,
const MultiFab phi,
Vector< Real > const &  beta 
)

Specify Dirichlet values on EB faces.

Parameters
amrlevAMR level index.
phiPrescribed values at EB face centroids.
betaPer-component scalar coefficients.

◆ setEBHomogDirichlet() [1/3]

void amrex::MLEBABecLap::setEBHomogDirichlet ( int  amrlev,
const MultiFab beta 
)

Mark EB faces as homogeneous Dirichlet (phi=0) with optional coefficients.

Parameters
amrlevAMR level index.
betaCoefficients applied to EB faces.

◆ setEBHomogDirichlet() [2/3]

void amrex::MLEBABecLap::setEBHomogDirichlet ( int  amrlev,
Real  beta 
)

Mark EB faces as homogeneous Dirichlet (phi=0).

Parameters
amrlevAMR level index.
betaSingle scalar coefficient applied to every EB face.

◆ setEBHomogDirichlet() [3/3]

void amrex::MLEBABecLap::setEBHomogDirichlet ( int  amrlev,
Vector< Real > const &  beta 
)

Mark EB faces as homogeneous Dirichlet (phi=0).

Parameters
amrlevAMR level index.
betaPer-component scalar coefficients.

◆ setPhiOnCentroid()

void amrex::MLEBABecLap::setPhiOnCentroid ( )

Interprets phi on EB centroids instead of cell centers when set.

◆ setScalars()

void amrex::MLEBABecLap::setScalars ( Real  a,
Real  b 
)

Set constant scalar coefficients (see MLCellABecLap semantics).

Parameters
aScalar multiplying the zero-th order term.
bScalar multiplying the diffusion term.

◆ supportRobinBC()

bool amrex::MLEBABecLap::supportRobinBC ( ) const
inlineoverrideprotectedvirtualnoexcept

Reimplemented from amrex::MLLinOpT< MF >.

◆ update()

void amrex::MLEBABecLap::update ( )
overridevirtual

Average coefficients/metrics when marked dirty.

Reimplemented from amrex::MLCellABecLapT< MF >.

Reimplemented in amrex::MLEBTensorOp.

Member Data Documentation

◆ m_a_coeffs

Vector<Vector<MultiFab> > amrex::MLEBABecLap::m_a_coeffs

◆ m_a_scalar

Real amrex::MLEBABecLap::m_a_scalar = std::numeric_limits<Real>::quiet_NaN()

Scalar multiplier for the a term (set via setScalars()).

◆ m_acoef_set

bool amrex::MLEBABecLap::m_acoef_set = false

◆ m_b_coeffs

Vector<Vector<Array<MultiFab,3> > > amrex::MLEBABecLap::m_b_coeffs

◆ m_b_scalar

Real amrex::MLEBABecLap::m_b_scalar = std::numeric_limits<Real>::quiet_NaN()

◆ m_beta_loc

Location amrex::MLEBABecLap::m_beta_loc
protected

◆ m_cc_mask

Vector<Vector<iMultiFab> > amrex::MLEBABecLap::m_cc_mask
protected

◆ m_eb_b_coeffs

Vector<Vector<std::unique_ptr<MultiFab> > > amrex::MLEBABecLap::m_eb_b_coeffs
protected

◆ m_eb_bc_tags

Vector<Vector<TagVector<MLMGABCEBTag<RT> > > > amrex::MLEBABecLap::m_eb_bc_tags
mutableprotected

◆ m_eb_phi

Vector<std::unique_ptr<MultiFab> > amrex::MLEBABecLap::m_eb_phi
protected

◆ m_is_eb_inhomog

int amrex::MLEBABecLap::m_is_eb_inhomog
mutableprotected

◆ m_is_singular

Vector<int> amrex::MLEBABecLap::m_is_singular
protected

◆ m_ncomp

int amrex::MLEBABecLap::m_ncomp = 1
protected

◆ m_phi_loc

Location amrex::MLEBABecLap::m_phi_loc
protected

◆ m_scalars_set

bool amrex::MLEBABecLap::m_scalars_set = false

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