Block-Structured AMR Software Framework
amrex::MLCurlCurl Class Reference

curl (alpha curl E) + beta E = rhs More...

#include <AMReX_MLCurlCurl.H>

Inheritance diagram for amrex::MLCurlCurl:
amrex::MLLinOpT< Array< MultiFab, 3 > >

Public Types

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

Public Member Functions

 MLCurlCurl ()=default
 
 MLCurlCurl (const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info=LPInfo())
 
void define (const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info=LPInfo())
 
void setScalars (RT a_alpha, RT a_beta) noexcept
 
void setBeta (const Vector< Array< MultiFab const *, 3 >> &a_bcoefs)
 This is needed only if there is variable beta coefficient. More...
 
void prepareRHS (Vector< MF * > const &rhs) const
 
void setDirichletNodesToZero (int amrlev, int mglev, MF &a_mf) const override
 
std::string name () const override
 
bool setUsePCG (bool flag)
 
void setLevelBC (int amrlev, const MF *levelbcdata, const MF *robinbc_a=nullptr, const MF *robinbc_b=nullptr, const MF *robinbc_f=nullptr) override
 
void restriction (int amrlev, int cmglev, MF &crse, MF &fine) const override
 
void interpolation (int amrlev, int fmglev, MF &fine, const MF &crse) const override
 
void apply (int amrlev, int mglev, MF &out, MF &in, BCMode bc_mode, StateMode s_mode, const MLMGBndryT< MF > *bndry=nullptr) const override
 
void smooth (int amrlev, int mglev, MF &sol, const MF &rhs, bool skip_fillboundary=false) const override
 
void solutionResidual (int amrlev, MF &resid, MF &x, const MF &b, const MF *crse_bcdata=nullptr) override
 
void correctionResidual (int amrlev, int mglev, MF &resid, MF &x, const MF &b, BCMode bc_mode, const MF *crse_bcdata=nullptr) override
 
void prepareForSolve () override
 
bool isSingular (int) const override
 Is it singular on given AMR level? More...
 
bool isBottomSingular () const override
 Is the bottom of MG singular? More...
 
RT xdoty (int amrlev, int mglev, const MF &x, const MF &y, bool local) const override
 
RT normInf (int amrlev, MF const &mf, bool local) const override
 
void averageDownAndSync (Vector< MF > &sol) const override
 
IntVect getNGrowVectRestriction () const override
 
void make (Vector< Vector< MF > > &mf, IntVect const &ng) const override
 
MF make (int amrlev, int mglev, IntVect const &ng) const override
 
MF makeAlias (MF const &mf) const override
 
MF makeCoarseMG (int amrlev, int mglev, IntVect const &ng) const override
 
MF makeCoarseAmr (int famrlev, IntVect const &ng) const override
 
void smooth1D (int amrlev, int mglev, MF &sol, MF const &rhs, int color) const
 
void compresid (int amrlev, int mglev, MF &resid, MF const &b) const
 
void applyPhysBC (int amrlev, int mglev, MultiFab &mf, CurlCurlStateType type) const
 
- Public Member Functions inherited from amrex::MLLinOpT< Array< MultiFab, 3 > >
 MLLinOpT ()=default
 
 MLLinOpT (const MLLinOpT< Array< MultiFab, 3 > > &)=delete
 
 MLLinOpT (MLLinOpT< Array< MultiFab, 3 > > &&)=delete
 
virtual ~MLLinOpT ()=default
 
MLLinOpT< Array< MultiFab, 3 > > & operator= (const MLLinOpT< Array< MultiFab, 3 > > &)=delete
 
MLLinOpT< Array< MultiFab, 3 > > & operator= (MLLinOpT< Array< MultiFab, 3 > > &&)=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)
 
void setDomainBC (const Array< BCType, AMREX_SPACEDIM > &lobc, const Array< BCType, AMREX_SPACEDIM > &hibc) noexcept
 Boundary of the whole domain. More...
 
void setDomainBC (const Vector< Array< BCType, AMREX_SPACEDIM > > &lobc, const Vector< Array< BCType, AMREX_SPACEDIM > > &hibc) noexcept
 Boundary of the whole domain. More...
 
void setDomainBCLoc (const Array< Real, AMREX_SPACEDIM > &lo_bcloc, const Array< Real, AMREX_SPACEDIM > &hi_bcloc) noexcept
 Set location of domain boundaries. More...
 
bool needsCoarseDataForBC () const noexcept
 Needs coarse data for bc? More...
 
void setCoarseFineBC (const Array< MultiFab, 3 > *crse, int crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept
 Set coarse/fine boundary conditions. For cell-centered solves only. More...
 
void setCoarseFineBC (const Array< MultiFab, 3 > *crse, IntVect const &crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept
 
void setCoarseFineBC (const AMF *crse, int crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept
 
void setCoarseFineBC (const AMF *crse, IntVect const &crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept
 
virtual void setLevelBC (int, const Array< MultiFab, 3 > *, const Array< MultiFab, 3 > *=nullptr, const Array< MultiFab, 3 > *=nullptr, const Array< MultiFab, 3 > *=nullptr)=0
 Set boundary conditions for given level. For cell-centered solves only. More...
 
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. More...
 
void setMaxOrder (int o) noexcept
 Set order of interpolation at coarse/fine boundary. More...
 
int getMaxOrder () const noexcept
 Get order of interpolation at coarse/fine boundary. More...
 
void setEnforceSingularSolvable (bool o) noexcept
 
bool getEnforceSingularSolvable () const noexcept
 
virtual BottomSolver getDefaultBottomSolver () const
 
virtual int getNComp () const
 Return number of components. More...
 
virtual int getNGrow (int=0, int=0) const
 
virtual bool needsUpdate () const
 Does it need update if it's reused? More...
 
virtual void update ()
 Update for reuse. More...
 
virtual void restriction (int amrlev, int cmglev, Array< MultiFab, 3 > &crse, Array< MultiFab, 3 > &fine) const=0
 Restriction onto coarse MG level. More...
 
virtual void interpolation (int amrlev, int fmglev, Array< MultiFab, 3 > &fine, const Array< MultiFab, 3 > &crse) const=0
 Add interpolated coarse MG level data to fine MG level data. More...
 
virtual void interpAssign (int amrlev, int fmglev, Array< MultiFab, 3 > &fine, Array< MultiFab, 3 > &crse) const
 Overwrite fine MG level data with interpolated coarse data. More...
 
virtual void interpolationAmr (int famrlev, Array< MultiFab, 3 > &fine, const Array< MultiFab, 3 > &crse, IntVect const &nghost) const
 Interpolation between AMR levels. More...
 
virtual void averageDownSolutionRHS (int camrlev, Array< MultiFab, 3 > &crse_sol, Array< MultiFab, 3 > &crse_rhs, const Array< MultiFab, 3 > &fine_sol, const Array< MultiFab, 3 > &fine_rhs)
 Average-down data from fine AMR level to coarse AMR level. More...
 
virtual void apply (int amrlev, int mglev, Array< MultiFab, 3 > &out, Array< MultiFab, 3 > &in, BCMode bc_mode, StateMode s_mode, const MLMGBndryT< Array< MultiFab, 3 > > *bndry=nullptr) const=0
 Apply the linear operator, out = L(in) More...
 
virtual void smooth (int amrlev, int mglev, Array< MultiFab, 3 > &sol, const Array< MultiFab, 3 > &rhs, bool skip_fillboundary=false) const=0
 Smooth. More...
 
virtual void normalize (int amrlev, int mglev, Array< MultiFab, 3 > &mf) const
 Divide mf by the diagonal component of the operator. Used by bicgstab. More...
 
virtual void solutionResidual (int amrlev, Array< MultiFab, 3 > &resid, Array< MultiFab, 3 > &x, const Array< MultiFab, 3 > &b, const Array< MultiFab, 3 > *crse_bcdata=nullptr)=0
 Compute residual for solution. More...
 
virtual void prepareForFluxes (int, const Array< MultiFab, 3 > *=nullptr)
 
virtual void correctionResidual (int amrlev, int mglev, Array< MultiFab, 3 > &resid, Array< MultiFab, 3 > &x, const Array< MultiFab, 3 > &b, BCMode bc_mode, const Array< MultiFab, 3 > *crse_bcdata=nullptr)=0
 Compute residual for the residual-correction form, resid = b - L(x) More...
 
virtual void reflux (int crse_amrlev, Array< MultiFab, 3 > &res, const Array< MultiFab, 3 > &crse_sol, const Array< MultiFab, 3 > &crse_rhs, Array< MultiFab, 3 > &fine_res, Array< MultiFab, 3 > &fine_sol, const Array< MultiFab, 3 > &fine_rhs) const
 Reflux at AMR coarse/fine boundary. More...
 
virtual void compFlux (int, const Array< Array< MultiFab, 3 > *, AMREX_SPACEDIM > &, Array< MultiFab, 3 > &, Location) const
 Compute fluxes. More...
 
virtual void compGrad (int, const Array< Array< MultiFab, 3 > *, AMREX_SPACEDIM > &, Array< MultiFab, 3 > &, Location) const
 Compute gradients of the solution. More...
 
virtual void applyMetricTerm (int, int, Array< MultiFab, 3 > &) const
 apply metric terms if there are any More...
 
virtual void unapplyMetricTerm (int, int, Array< MultiFab, 3 > &) const
 unapply metric terms if there are any More...
 
virtual void unimposeNeumannBC (int, Array< MultiFab, 3 > &) const
 This is needed for our nodal projection solver. More...
 
virtual void applyInhomogNeumannTerm (int, Array< MultiFab, 3 > &) const
 Extra terms introduced when we treat inhomogeneous Nuemann BC as homogeneous. More...
 
virtual void applyOverset (int, Array< MultiFab, 3 > &) const
 for overset solver only More...
 
virtual void scaleRHS (int, Array< MultiFab, 3 > &) const
 scale RHS to fix solvability More...
 
virtual Vector< RTgetSolvabilityOffset (int, int, Array< MultiFab, 3 > const &) const
 get offset for fixing solvability More...
 
virtual void fixSolvabilityByOffset (int, int, Array< MultiFab, 3 > &, Vector< RT > const &) const
 fix solvability by subtracting offset from RHS More...
 
virtual void prepareForGMRES ()
 
virtual void setDirichletNodesToZero (int, int, Array< MultiFab, 3 > &) const
 
virtual RT xdoty (int amrlev, int mglev, const Array< MultiFab, 3 > &x, const Array< MultiFab, 3 > &y, bool local) const=0
 x dot y, used by the bottom solver More...
 
virtual std::unique_ptr< MLLinOpT< Array< MultiFab, 3 > > > makeNLinOp (int) const
 
virtual void getFluxes (const Vector< Array< Array< MultiFab, 3 > *, AMREX_SPACEDIM > > &, const Vector< Array< MultiFab, 3 > * > &, Location) const
 
virtual void getFluxes (const Vector< Array< MultiFab, 3 > * > &, const Vector< Array< MultiFab, 3 > * > &) const
 
virtual bool supportNSolve () const
 
virtual void copyNSolveSolution (Array< MultiFab, 3 > &, Array< MultiFab, 3 > const &) const
 
virtual void postSolve (Vector< Array< MultiFab, 3 > > &) const
 
virtual RT normInf (int amrlev, Array< MultiFab, 3 > const &mf, bool local) const=0
 
virtual void averageDownAndSync (Vector< Array< MultiFab, 3 > > &sol) const=0
 
virtual void avgDownResAmr (int clev, Array< MultiFab, 3 > &cres, Array< MultiFab, 3 > const &fres) const
 
virtual void avgDownResMG (int clev, Array< MultiFab, 3 > &cres, Array< MultiFab, 3 > const &fres) const
 
bool isMFIterSafe (int amrlev, int mglev1, int mglev2) const
 
int NAMRLevels () const noexcept
 Return the number of AMR levels. More...
 
int NMGLevels (int amrlev) const noexcept
 Return the number of MG levels at given AMR level. More...
 
const GeometryGeom (int amr_lev, int mglev=0) const noexcept
 

Private Member Functions

void applyBC (int amrlev, int mglev, MF &in, CurlCurlStateType type) const
 
iMultiFab const & getDotMask (int amrlev, int mglev, int idim) const
 
CurlCurlDirichletInfo getDirichletInfo (int amrlev, int mglev) const
 
CurlCurlSymmetryInfo getSymmetryInfo (int amrlev, int mglev) const
 

Private Attributes

RT m_alpha = std::numeric_limits<RT>::lowest()
 
RT m_beta = std::numeric_limits<RT>::lowest()
 
Array< IntVect, 3 > m_etype {IntVect(0), IntVect(1), IntVect(1)}
 
Vector< Vector< Array< std::unique_ptr< iMultiFab >, 3 > > > m_dotmask
 
Vector< Vector< std::unique_ptr< Gpu::DeviceScalar< LUSolver< AMREX_SPACEDIM *2, RT > > > > > m_lusolver
 
Vector< Vector< Array< std::unique_ptr< MultiFab >, 3 > > > m_bcoefs
 
bool m_use_pcg = false
 

Static Private Attributes

static constexpr int m_ncomp = 1
 

Additional Inherited Members

- Public Attributes inherited from amrex::MLLinOpT< Array< MultiFab, 3 > >
Vector< Array< BCType, AMREX_SPACEDIM > > m_lobc
 
Vector< Array< BCType, AMREX_SPACEDIM > > m_hibc
 
Vector< Array< BCType, AMREX_SPACEDIM > > m_lobc_orig
 
Vector< Array< BCType, AMREX_SPACEDIM > > m_hibc_orig
 
- Protected Member Functions inherited from amrex::MLLinOpT< Array< MultiFab, 3 > >
const Vector< int > & AMRRefRatio () const noexcept
 Return AMR refinement ratios. More...
 
int AMRRefRatio (int amr_lev) const noexcept
 Return AMR refinement ratio at given AMR level. More...
 
FabFactory< FAB > const * Factory (int amr_lev, int mglev=0) const noexcept
 
GpuArray< BCType, AMREX_SPACEDIM > LoBC (int icomp=0) const noexcept
 
GpuArray< BCType, AMREX_SPACEDIM > 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
 
virtual bool supportInhomogNeumannBC () 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 void make (Vector< Vector< Array< MultiFab, 3 > > > &mf, IntVect const &ng) const
 
virtual Array< MultiFab, 3 > makeAlias (Array< MultiFab, 3 > const &mf) const
 
virtual std::unique_ptr< FabFactory< FAB > > makeFactory (int, int) const
 
virtual void resizeMultiGrid (int new_size)
 
bool hasHiddenDimension () const noexcept
 
int hiddenDirection () const noexcept
 
Box compactify (Box const &b) const noexcept
 
Array4< T > compactify (Array4< T > const &a) const noexcept
 
get_d0 (T const &dx, T const &dy, T const &) const noexcept
 
get_d1 (T const &, T const &dy, T const &dz) const noexcept
 
- Protected Attributes inherited from amrex::MLLinOpT< Array< MultiFab, 3 > >
int mg_domain_min_width
 
LPInfo info
 
int verbose
 
int maxorder
 
bool enforceSingularSolvable
 
int m_num_amr_levels
 
Vector< int > m_amr_ref_ratio
 
Vector< int > m_num_mg_levels
 
const MLLinOpT< Array< MultiFab, 3 > > * m_parent
 
IntVect m_ixtype
 
bool m_do_agglomeration
 
bool m_do_consolidation
 
bool m_do_semicoarsening
 
Vector< IntVectmg_coarsen_ratio_vec
 
Vector< Vector< Geometry > > m_geom
 first Vector is for amr level and second is mg level More...
 
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 m_bottom_comm
 
std::unique_ptr< CommContainer > m_raii_comm
 
Array< Real, AMREX_SPACEDIM > m_domain_bloc_lo
 
Array< Real, AMREX_SPACEDIM > m_domain_bloc_hi
 
bool m_needs_coarse_data_for_bc
 
LinOpBCType m_coarse_fine_bc_type
 
IntVect m_coarse_data_crse_ratio
 
RealVect m_coarse_bc_loc
 
const Array< MultiFab, 3 > * m_coarse_data_for_bc
 
Array< MultiFab, 3 > m_coarse_data_for_bc_raii
 
- Static Protected Attributes inherited from amrex::MLLinOpT< Array< MultiFab, 3 > >
static constexpr int mg_coarsen_ratio
 
static constexpr int mg_box_min_width
 

Detailed Description

curl (alpha curl E) + beta E = rhs

Here E is an Array of 3 MultiFabs on staggered grid, alpha is a positive scalar, and beta is either a non-negative scalar or a MultiFab.

It's the caller's responsibility to make sure rhs has consistent nodal data. If needed, one could call prepareRHS for this.

The smoother is based on the 4-color Gauss-Seidel smoother of Li et. al. 2020. "An Efficient Preconditioner for 3-D Finite Difference Modeling of the Electromagnetic Diffusion Process in the Frequency Domain", IEEE Transactions on Geoscience and Remote Sensing, 58, 500-509.

Member Typedef Documentation

◆ BCMode

◆ BCType

◆ Location

◆ MF

◆ RT

using amrex::MLCurlCurl::RT = typename MLLinOpT<MF>::RT

◆ StateMode

Constructor & Destructor Documentation

◆ MLCurlCurl() [1/2]

amrex::MLCurlCurl::MLCurlCurl ( )
default

◆ MLCurlCurl() [2/2]

amrex::MLCurlCurl::MLCurlCurl ( const Vector< Geometry > &  a_geom,
const Vector< BoxArray > &  a_grids,
const Vector< DistributionMapping > &  a_dmap,
const LPInfo a_info = LPInfo() 
)

Member Function Documentation

◆ apply()

void amrex::MLCurlCurl::apply ( int  amrlev,
int  mglev,
MF out,
MF in,
BCMode  bc_mode,
StateMode  s_mode,
const MLMGBndryT< MF > *  bndry = nullptr 
) const
override

◆ applyBC()

void amrex::MLCurlCurl::applyBC ( int  amrlev,
int  mglev,
MF in,
CurlCurlStateType  type 
) const
private

◆ applyPhysBC()

void amrex::MLCurlCurl::applyPhysBC ( int  amrlev,
int  mglev,
MultiFab mf,
CurlCurlStateType  type 
) const

◆ averageDownAndSync()

void amrex::MLCurlCurl::averageDownAndSync ( Vector< MF > &  sol) const
override

◆ compresid()

void amrex::MLCurlCurl::compresid ( int  amrlev,
int  mglev,
MF resid,
MF const &  b 
) const

◆ correctionResidual()

void amrex::MLCurlCurl::correctionResidual ( int  amrlev,
int  mglev,
MF resid,
MF x,
const MF b,
BCMode  bc_mode,
const MF crse_bcdata = nullptr 
)
override

◆ define()

void amrex::MLCurlCurl::define ( const Vector< Geometry > &  a_geom,
const Vector< BoxArray > &  a_grids,
const Vector< DistributionMapping > &  a_dmap,
const LPInfo a_info = LPInfo() 
)

◆ getDirichletInfo()

CurlCurlDirichletInfo amrex::MLCurlCurl::getDirichletInfo ( int  amrlev,
int  mglev 
) const
private

◆ getDotMask()

iMultiFab const & amrex::MLCurlCurl::getDotMask ( int  amrlev,
int  mglev,
int  idim 
) const
private

◆ getNGrowVectRestriction()

IntVect amrex::MLCurlCurl::getNGrowVectRestriction ( ) const
inlineoverridevirtual

◆ getSymmetryInfo()

CurlCurlSymmetryInfo amrex::MLCurlCurl::getSymmetryInfo ( int  amrlev,
int  mglev 
) const
private

◆ interpolation()

void amrex::MLCurlCurl::interpolation ( int  amrlev,
int  fmglev,
MF fine,
const MF crse 
) const
override

◆ isBottomSingular()

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

Is the bottom of MG singular?

Implements amrex::MLLinOpT< Array< MultiFab, 3 > >.

◆ isSingular()

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

Is it singular on given AMR level?

Implements amrex::MLLinOpT< Array< MultiFab, 3 > >.

◆ make() [1/2]

Array< MultiFab, 3 > amrex::MLCurlCurl::make ( int  amrlev,
int  mglev,
IntVect const &  ng 
) const
overridevirtual

◆ make() [2/2]

void amrex::MLCurlCurl::make ( Vector< Vector< MF > > &  mf,
IntVect const &  ng 
) const
override

◆ makeAlias()

Array< MultiFab, 3 > amrex::MLCurlCurl::makeAlias ( MF const &  mf) const
override

◆ makeCoarseAmr()

Array< MultiFab, 3 > amrex::MLCurlCurl::makeCoarseAmr ( int  famrlev,
IntVect const &  ng 
) const
overridevirtual

◆ makeCoarseMG()

Array< MultiFab, 3 > amrex::MLCurlCurl::makeCoarseMG ( int  amrlev,
int  mglev,
IntVect const &  ng 
) const
overridevirtual

◆ name()

std::string amrex::MLCurlCurl::name ( ) const
inlineoverridevirtual

◆ normInf()

Real amrex::MLCurlCurl::normInf ( int  amrlev,
MF const &  mf,
bool  local 
) const
override

◆ prepareForSolve()

void amrex::MLCurlCurl::prepareForSolve ( )
overridevirtual

◆ prepareRHS()

void amrex::MLCurlCurl::prepareRHS ( Vector< MF * > const &  rhs) const

Synchronize RHS on nodal points. If the user can guarantee it, this function does not need to be called.

◆ restriction()

void amrex::MLCurlCurl::restriction ( int  amrlev,
int  cmglev,
MF crse,
MF fine 
) const
override

◆ setBeta()

void amrex::MLCurlCurl::setBeta ( const Vector< Array< MultiFab const *, 3 >> &  a_bcoefs)

This is needed only if there is variable beta coefficient.

◆ setDirichletNodesToZero()

void amrex::MLCurlCurl::setDirichletNodesToZero ( int  amrlev,
int  mglev,
MF a_mf 
) const
override

◆ setLevelBC()

void amrex::MLCurlCurl::setLevelBC ( int  amrlev,
const MF levelbcdata,
const MF robinbc_a = nullptr,
const MF robinbc_b = nullptr,
const MF robinbc_f = nullptr 
)
override

◆ setScalars()

void amrex::MLCurlCurl::setScalars ( RT  a_alpha,
RT  a_beta 
)
noexcept

◆ setUsePCG()

bool amrex::MLCurlCurl::setUsePCG ( bool  flag)
inline

◆ smooth()

void amrex::MLCurlCurl::smooth ( int  amrlev,
int  mglev,
MF sol,
const MF rhs,
bool  skip_fillboundary = false 
) const
override

◆ smooth1D()

void amrex::MLCurlCurl::smooth1D ( int  amrlev,
int  mglev,
MF sol,
MF const &  rhs,
int  color 
) const

◆ solutionResidual()

void amrex::MLCurlCurl::solutionResidual ( int  amrlev,
MF resid,
MF x,
const MF b,
const MF crse_bcdata = nullptr 
)
override

◆ xdoty()

Real amrex::MLCurlCurl::xdoty ( int  amrlev,
int  mglev,
const MF x,
const MF y,
bool  local 
) const
override

Member Data Documentation

◆ m_alpha

RT amrex::MLCurlCurl::m_alpha = std::numeric_limits<RT>::lowest()
private

◆ m_bcoefs

Vector<Vector<Array<std::unique_ptr<MultiFab>,3> > > amrex::MLCurlCurl::m_bcoefs
private

◆ m_beta

RT amrex::MLCurlCurl::m_beta = std::numeric_limits<RT>::lowest()
private

◆ m_dotmask

Vector<Vector<Array<std::unique_ptr<iMultiFab>,3> > > amrex::MLCurlCurl::m_dotmask
mutableprivate

◆ m_etype

Array<IntVect,3> amrex::MLCurlCurl::m_etype {IntVect(0), IntVect(1), IntVect(1)}
private

◆ m_lusolver

Vector<Vector<std::unique_ptr<Gpu::DeviceScalar <LUSolver<AMREX_SPACEDIM*2,RT> > > > > amrex::MLCurlCurl::m_lusolver
private

◆ m_ncomp

constexpr int amrex::MLCurlCurl::m_ncomp = 1
staticconstexprprivate

◆ m_use_pcg

bool amrex::MLCurlCurl::m_use_pcg = false
private

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