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

#include <AMReX_MLEBTensorOp.H>

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

Public Member Functions

 MLEBTensorOp ()
 
 MLEBTensorOp (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)
 
 ~MLEBTensorOp () override
 
 MLEBTensorOp (const MLEBTensorOp &)=delete
 
 MLEBTensorOp (MLEBTensorOp &&)=delete
 
MLEBTensorOpoperator= (const MLEBTensorOp &)=delete
 
MLEBTensorOpoperator= (MLEBTensorOp &&)=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)
 
void setShearViscosity (int amrlev, const Array< MultiFab const *, AMREX_SPACEDIM > &eta, Location a_beta_loc)
 
void setShearViscosity (int amrlev, Real eta)
 
void setBulkViscosity (int amrlev, const Array< MultiFab const *, AMREX_SPACEDIM > &kappa)
 
void setBulkViscosity (int amrlev, Real kappa)
 
void setEBShearViscosity (int amrlev, MultiFab const &eta)
 
void setEBShearViscosity (int amrlev, Real eta)
 
void setEBShearViscosityWithInflow (int amrlev, MultiFab const &eta, MultiFab const &eb_vel)
 
void setEBBulkViscosity (int amrlev, MultiFab const &kappa)
 
void setEBBulkViscosity (int amrlev, Real kappa)
 
int getNComp () const final
 Return number of components. More...
 
bool isCrossStencil () const final
 
bool isTensorOp () const final
 
bool needsUpdate () const final
 Does it need update if it's reused? More...
 
void update () final
 Update for reuse. More...
 
void prepareForSolve () final
 
bool isSingular (int) const final
 Is it singular on given AMR level? More...
 
bool isBottomSingular () const final
 Is the bottom of MG singular? More...
 
void apply (int amrlev, int mglev, MultiFab &out, MultiFab &in, BCMode bc_mode, StateMode s_mode, const MLMGBndry *bndry=nullptr) const final
 
void compFlux (int amrlev, const Array< MultiFab *, AMREX_SPACEDIM > &fluxes, MultiFab &sol, Location loc) const override
 
void compVelGrad (int amrlev, const Array< MultiFab *, AMREX_SPACEDIM > &grads, MultiFab &sol, Location loc) const
 
void setBCoeffs (int amrlev, const Array< MultiFab const *, AMREX_SPACEDIM > &beta, Location a_beta_loc)=delete
 
void setEBDirichlet (int amrlev, const MultiFab &phi, const MultiFab &beta)=delete
 
void setEBHomogDirichlet (int amrlev, const MultiFab &beta)=delete
 
void applyBCTensor (int amrlev, int mglev, MultiFab &vel, BCMode bc_mode, StateMode s_mode, const MLMGBndry *bndry) const
 
void compCrossTerms (int amrlev, int mglev, MultiFab const &mf, const MLMGBndry *bndry) const
 
- Public Member Functions inherited from amrex::MLEBABecLap
 MLEBABecLap ()=default
 
 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)
 
 ~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)
 
void setPhiOnCentroid ()
 
void setScalars (Real a, Real b)
 
void setACoeffs (int amrlev, const MultiFab &alpha)
 
void setACoeffs (int amrlev, Real alpha)
 
void setBCoeffs (int amrlev, const Array< MultiFab const *, AMREX_SPACEDIM > &beta, Location a_beta_loc)
 
void setBCoeffs (int amrlev, const Array< MultiFab const *, AMREX_SPACEDIM > &beta)
 
void setBCoeffs (int amrlev, Real beta)
 
void setBCoeffs (int amrlev, Vector< Real > const &beta)
 
void setEBDirichlet (int amrlev, const MultiFab &phi, const MultiFab &beta)
 
void setEBDirichlet (int amrlev, const MultiFab &phi, Real beta)
 
void setEBDirichlet (int amrlev, const MultiFab &phi, Vector< Real > const &beta)
 
void setEBHomogDirichlet (int amrlev, const MultiFab &beta)
 
void setEBHomogDirichlet (int amrlev, Real beta)
 
void setEBHomogDirichlet (int amrlev, Vector< Real > const &beta)
 
std::unique_ptr< FabFactory< FArrayBox > > makeFactory (int amrlev, int mglev) const final
 
void applyBC (int amrlev, int mglev, MultiFab &in, BCMode bc_mode, StateMode s_mode, const MLMGBndry *bndry=nullptr, bool skip_fillboundary=false) const final
 
void apply (int amrlev, int mglev, MultiFab &out, MultiFab &in, BCMode bc_mode, StateMode s_mode, const MLMGBndry *bndry=nullptr) const override
 
void compGrad (int amrlev, const Array< MultiFab *, AMREX_SPACEDIM > &grad, MultiFab &sol, Location loc) const final
 
void Fapply (int amrlev, int mglev, MultiFab &out, const MultiFab &in) const final
 
void Fsmooth (int amrlev, int mglev, MultiFab &sol, const MultiFab &rhs, int redblack) const final
 
void FFlux (int amrlev, const MFIter &mfi, const Array< FArrayBox *, AMREX_SPACEDIM > &flux, const FArrayBox &sol, Location loc, int face_only=0) const final
 
void normalize (int amrlev, int mglev, MultiFab &mf) const final
 
Real getAScalar () const final
 
Real getBScalar () const final
 
MultiFab const * getACoeffs (int amrlev, int mglev) const final
 
Array< MultiFab const *, AMREX_SPACEDIM > getBCoeffs (int amrlev, int mglev) const final
 
std::unique_ptr< MLLinOpmakeNLinOp (int) const final
 
void restriction (int, int, MultiFab &crse, MultiFab &fine) const final
 
void interpolation (int amrlev, int fmglev, MultiFab &fine, const MultiFab &crse) const final
 
void averageDownSolutionRHS (int camrlev, MultiFab &crse_sol, MultiFab &crse_rhs, const MultiFab &fine_sol, const MultiFab &fine_rhs) final
 
void getEBFluxes (const Vector< MultiFab * > &a_flux, const Vector< MultiFab * > &a_sol) const override
 
void applyRobinBCTermsCoeffs ()
 
- 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={})
 
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={})
 
iMultiFab const * getOversetMask (int amrlev, int mglev) const
 
void setDirichletNodesToZero (int amrlev, int mglev, MF &mf) const override
 
void getFluxes (const Vector< Array< MF *, AMREX_SPACEDIM > > &a_flux, const Vector< MF * > &a_sol, Location a_loc) const final
 
void getFluxes (const Vector< MF * > &, const Vector< MF * > &) const final
 
void applyInhomogNeumannTerm (int amrlev, MF &rhs) const final
 Extra terms introduced when we treat inhomogeneous Nuemann BC as homogeneous. More...
 
void addInhomogNeumannFlux (int amrlev, const Array< MF *, AMREX_SPACEDIM > &grad, MF const &sol, bool mult_bcoef) const final
 
void applyOverset (int amrlev, MF &rhs) const override
 for overset solver only More...
 
- 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={})
 
void setLevelBC (int amrlev, const MF *levelbcdata, const MF *robinbc_a=nullptr, const MF *robinbc_b=nullptr, const MF *robinbc_f=nullptr) final
 Set boundary conditions for given level. For cell-centered solves only. More...
 
void setGaussSeidel (bool flag) noexcept
 
void updateSolBC (int amrlev, const MF &crse_bcdata) const
 
void updateCorBC (int amrlev, const MF &crse_bcdata) const
 
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
 
BoxArray makeNGrids (int grid_size) const
 
void restriction (int, int, MF &crse, MF &fine) const override
 Restriction onto coarse MG level. More...
 
void interpolation (int amrlev, int fmglev, MF &fine, const MF &crse) const override
 Add interpolated coarse MG level data to fine MG level data. More...
 
void interpAssign (int amrlev, int fmglev, MF &fine, MF &crse) const override
 Overwrite fine MG level data with interpolated coarse data. More...
 
void interpolationAmr (int famrlev, MF &fine, const MF &crse, IntVect const &nghost) const override
 Interpolation between AMR levels. More...
 
void averageDownSolutionRHS (int camrlev, MF &crse_sol, MF &crse_rhs, const MF &fine_sol, const MF &fine_rhs) override
 Average-down data from fine AMR level to coarse AMR level. More...
 
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, out = L(in) More...
 
void smooth (int amrlev, int mglev, MF &sol, const MF &rhs, bool skip_fillboundary=false) const final
 Smooth. More...
 
void solutionResidual (int amrlev, MF &resid, MF &x, const MF &b, const MF *crse_bcdata=nullptr) override
 Compute residual for solution. More...
 
void prepareForFluxes (int amrlev, 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) final
 Compute residual for the residual-correction form, resid = b - L(x) More...
 
void reflux (int crse_amrlev, MF &res, const MF &crse_sol, const MF &, MF &, MF &fine_sol, const MF &) const final
 Reflux at AMR coarse/fine boundary. More...
 
void compFlux (int amrlev, const Array< MF *, AMREX_SPACEDIM > &fluxes, MF &sol, Location loc) const override
 Compute fluxes. More...
 
void compGrad (int amrlev, const Array< MF *, AMREX_SPACEDIM > &grad, MF &sol, Location loc) const override
 Compute gradients of the solution. More...
 
void applyMetricTerm (int amrlev, int mglev, MF &rhs) const final
 apply metric terms if there are any More...
 
void unapplyMetricTerm (int amrlev, int mglev, MF &rhs) const final
 unapply metric terms if there are any More...
 
Vector< RTgetSolvabilityOffset (int amrlev, int mglev, MF const &rhs) const override
 get offset for fixing solvability More...
 
void fixSolvabilityByOffset (int amrlev, int mglev, MF &rhs, Vector< RT > const &offset) const override
 
RT xdoty (int amrlev, int mglev, const MF &x, const MF &y, bool local) const final
 x dot y, used by the bottom solver More...
 
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 *, AMREX_SPACEDIM > &flux, const FAB &sol, Location loc, int face_only=0) const =0
 
RT normInf (int amrlev, MF const &mf, bool local) const override
 
void averageDownAndSync (Vector< MF > &sol) const override
 
void avgDownResAmr (int clev, MF &cres, MF const &fres) const override
 
- 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)
 
virtual std::string name () const
 
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 MF *crse, int crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept
 Set coarse/fine boundary conditions. For cell-centered solves only. More...
 
void setCoarseFineBC (const MF *crse, IntVect const &crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept
 
template<typename AMF , std::enable_if_t<!std::is_same_v< MF, AMF >, int > = 0>
void setCoarseFineBC (const AMF *crse, int crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept
 
template<typename AMF , std::enable_if_t<!std::is_same_v< MF, AMF >, int > = 0>
void setCoarseFineBC (const AMF *crse, IntVect const &crse_ratio, LinOpBCType bc_type=LinOpBCType::Dirichlet) noexcept
 
template<typename AMF , std::enable_if_t<!std::is_same_v< MF, AMF >, int > = 0>
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 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 bicgstab. More...
 
virtual void unimposeNeumannBC (int, MF &) const
 This is needed for our nodal projection solver. More...
 
virtual void scaleRHS (int, MF &) const
 scale RHS to fix solvability More...
 
virtual void fixSolvabilityByOffset (int, int, MF &, Vector< RT > const &) const
 fix solvability by subtracting offset from RHS More...
 
virtual void prepareForGMRES ()
 
virtual bool supportNSolve () const
 
virtual void copyNSolveSolution (MF &, MF const &) const
 
virtual void postSolve (Vector< MF > &) const
 
virtual void avgDownResMG (int clev, MF &cres, MF 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
 

Protected Attributes

bool m_needs_update = true
 
bool m_has_kappa = false
 
bool m_has_eb_kappa = false
 
Vector< Vector< Array< MultiFab, AMREX_SPACEDIM > > > m_kappa
 
Vector< Vector< MultiFab > > m_eb_kappa
 
Vector< Vector< Array< MultiFab, AMREX_SPACEDIM > > > m_tauflux
 
- Protected Attributes inherited from amrex::MLEBABecLap
int m_ncomp = 1
 
bool m_needs_update = true
 
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
 
- 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< Vector< std::unique_ptr< BndryCondLoc > > > m_bcondloc
 
Vector< Vector< BndryRegisterT< MF > > > m_undrrelxr
 
Vector< Vector< Array< MultiMask, 2 *AMREX_SPACEDIM > > > 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 More...
 
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< CommContainerm_raii_comm
 
Array< Real, AMREX_SPACEDIM > m_domain_bloc_lo {{AMREX_D_DECL(0._rt,0._rt,0._rt)}}
 
Array< Real, AMREX_SPACEDIM > m_domain_bloc_hi {{AMREX_D_DECL(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
 

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 MF::fab_type
 
using RT = typename 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 Attributes inherited from amrex::MLEBABecLap
Real m_a_scalar = std::numeric_limits<Real>::quiet_NaN()
 
Real m_b_scalar = std::numeric_limits<Real>::quiet_NaN()
 
Vector< Vector< MultiFab > > m_a_coeffs
 
Vector< Vector< Array< MultiFab, AMREX_SPACEDIM > > > 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, 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 Types inherited from amrex::MLCellLinOpT< MF >
using RealTuple = Array< RT, 2 *BL_SPACEDIM >
 
using BCTuple = Array< BoundCond, 2 *BL_SPACEDIM >
 
- Protected Member Functions inherited from amrex::MLEBABecLap
bool isEBDirichlet () const noexcept
 
void averageDownCoeffsSameAmrLevel (int amrlev, Vector< MultiFab > &a, Vector< Array< MultiFab, AMREX_SPACEDIM > > &b, const Vector< MultiFab * > &b_eb)
 
void averageDownCoeffs ()
 
void averageDownCoeffsToCoarseAmrLevel (int flev)
 
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. 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
 
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
 
virtual MF makeCoarseAmr (int famrlev, IntVect const &ng) const
 
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
 
- Static Protected Attributes inherited from amrex::MLLinOpT< MF >
static constexpr int mg_coarsen_ratio = 2
 
static constexpr int mg_box_min_width = 2
 

Constructor & Destructor Documentation

◆ MLEBTensorOp() [1/4]

amrex::MLEBTensorOp::MLEBTensorOp ( )

◆ MLEBTensorOp() [2/4]

amrex::MLEBTensorOp::MLEBTensorOp ( 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 
)

◆ ~MLEBTensorOp()

amrex::MLEBTensorOp::~MLEBTensorOp ( )
overridedefault

◆ MLEBTensorOp() [3/4]

amrex::MLEBTensorOp::MLEBTensorOp ( const MLEBTensorOp )
delete

◆ MLEBTensorOp() [4/4]

amrex::MLEBTensorOp::MLEBTensorOp ( MLEBTensorOp &&  )
delete

Member Function Documentation

◆ apply()

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

◆ applyBCTensor()

void amrex::MLEBTensorOp::applyBCTensor ( int  amrlev,
int  mglev,
MultiFab vel,
BCMode  bc_mode,
StateMode  s_mode,
const MLMGBndry bndry 
) const

◆ compCrossTerms()

void amrex::MLEBTensorOp::compCrossTerms ( int  amrlev,
int  mglev,
MultiFab const &  mf,
const MLMGBndry bndry 
) const

◆ compFlux()

void amrex::MLEBTensorOp::compFlux ( int  amrlev,
const Array< MultiFab *, AMREX_SPACEDIM > &  fluxes,
MultiFab sol,
Location  loc 
) const
override

◆ compVelGrad()

void amrex::MLEBTensorOp::compVelGrad ( int  amrlev,
const Array< MultiFab *, AMREX_SPACEDIM > &  grads,
MultiFab sol,
Location  loc 
) const

◆ define()

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

◆ getNComp()

int amrex::MLEBTensorOp::getNComp ( ) const
inlinefinalvirtual

Return number of components.

Reimplemented from amrex::MLEBABecLap.

◆ isBottomSingular()

bool amrex::MLEBTensorOp::isBottomSingular ( ) const
inlinefinalvirtual

Is the bottom of MG singular?

Reimplemented from amrex::MLEBABecLap.

◆ isCrossStencil()

bool amrex::MLEBTensorOp::isCrossStencil ( ) const
inlinefinalvirtual

Reimplemented from amrex::MLEBABecLap.

◆ isSingular()

bool amrex::MLEBTensorOp::isSingular ( int  amrlev) const
inlinefinalvirtual

Is it singular on given AMR level?

Reimplemented from amrex::MLEBABecLap.

◆ isTensorOp()

bool amrex::MLEBTensorOp::isTensorOp ( ) const
inlinefinalvirtual

Reimplemented from amrex::MLCellLinOpT< MF >.

◆ needsUpdate()

bool amrex::MLEBTensorOp::needsUpdate ( ) const
inlinefinalvirtual

Does it need update if it's reused?

Reimplemented from amrex::MLEBABecLap.

◆ operator=() [1/2]

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

◆ operator=() [2/2]

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

◆ prepareForSolve()

void amrex::MLEBTensorOp::prepareForSolve ( )
finalvirtual

Reimplemented from amrex::MLEBABecLap.

◆ setBCoeffs()

void amrex::MLEBTensorOp::setBCoeffs ( int  amrlev,
const Array< MultiFab const *, AMREX_SPACEDIM > &  beta,
Location  a_beta_loc 
)
delete

◆ setBulkViscosity() [1/2]

void amrex::MLEBTensorOp::setBulkViscosity ( int  amrlev,
const Array< MultiFab const *, AMREX_SPACEDIM > &  kappa 
)

◆ setBulkViscosity() [2/2]

void amrex::MLEBTensorOp::setBulkViscosity ( int  amrlev,
Real  kappa 
)

◆ setEBBulkViscosity() [1/2]

void amrex::MLEBTensorOp::setEBBulkViscosity ( int  amrlev,
MultiFab const &  kappa 
)

◆ setEBBulkViscosity() [2/2]

void amrex::MLEBTensorOp::setEBBulkViscosity ( int  amrlev,
Real  kappa 
)

◆ setEBDirichlet()

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

◆ setEBHomogDirichlet()

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

◆ setEBShearViscosity() [1/2]

void amrex::MLEBTensorOp::setEBShearViscosity ( int  amrlev,
MultiFab const &  eta 
)

◆ setEBShearViscosity() [2/2]

void amrex::MLEBTensorOp::setEBShearViscosity ( int  amrlev,
Real  eta 
)

◆ setEBShearViscosityWithInflow()

void amrex::MLEBTensorOp::setEBShearViscosityWithInflow ( int  amrlev,
MultiFab const &  eta,
MultiFab const &  eb_vel 
)

◆ setShearViscosity() [1/2]

void amrex::MLEBTensorOp::setShearViscosity ( int  amrlev,
const Array< MultiFab const *, AMREX_SPACEDIM > &  eta,
Location  a_beta_loc 
)

◆ setShearViscosity() [2/2]

void amrex::MLEBTensorOp::setShearViscosity ( int  amrlev,
Real  eta 
)

◆ update()

void amrex::MLEBTensorOp::update ( )
inlinefinalvirtual

Update for reuse.

Reimplemented from amrex::MLEBABecLap.

Member Data Documentation

◆ m_eb_kappa

Vector<Vector<MultiFab> > amrex::MLEBTensorOp::m_eb_kappa
protected

◆ m_has_eb_kappa

bool amrex::MLEBTensorOp::m_has_eb_kappa = false
protected

◆ m_has_kappa

bool amrex::MLEBTensorOp::m_has_kappa = false
protected

◆ m_kappa

Vector<Vector<Array<MultiFab,AMREX_SPACEDIM> > > amrex::MLEBTensorOp::m_kappa
protected

◆ m_needs_update

bool amrex::MLEBTensorOp::m_needs_update = true
protected

◆ m_tauflux

Vector<Vector<Array<MultiFab,AMREX_SPACEDIM> > > amrex::MLEBTensorOp::m_tauflux
mutableprotected

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