1#ifndef AMREX_MLEBABECLAP_H_
2#define AMREX_MLEBABECLAP_H_
3#include <AMReX_Config.H>
54 {
setBCoeffs (amrlev, beta, Location::FaceCenter);}
76 std::unique_ptr<FabFactory<FArrayBox> >
makeFactory (
int amrlev,
int mglev)
const final;
81 const MLMGBndry* bndry=
nullptr,
bool skip_fillboundary=
false) const final;
95 int face_only=0) const final;
107 amrex::Abort(
"MLABecLaplacian::makeNLinOp: Not implemented");
108 return std::unique_ptr<MLLinOp>{};
123#if defined(AMREX_USE_HYPRE) && (AMREX_SPACEDIM > 1)
127#if defined(AMREX_USE_PETSC) && (AMREX_SPACEDIM > 1)
128 [[nodiscard]] std::unique_ptr<PETScABecLap> makePETSc ()
const override;
191 amrex::Box const& box()
const noexcept {
return bx; }
#define AMREX_FORCE_INLINE
Definition AMReX_Extension.H:119
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
Array4< Real > fine
Definition AMReX_InterpFaceRegister.cpp:90
Array4< int const > mask
Definition AMReX_InterpFaceRegister.cpp:93
Array4< Real const > crse
Definition AMReX_InterpFaceRegister.cpp:92
Maintain an identifier for boundary condition types.
Definition AMReX_BoundCond.H:20
A Fortran Array of REALs.
Definition AMReX_FArrayBox.H:231
Interface
Definition AMReX_Hypre.H:21
Iterator for looping ever tiles and boxes of amrex::FabArray based containers.
Definition AMReX_MFIter.H:85
Definition AMReX_MLCellABecLap.H:14
bool needsUpdate() const override
Does it need update if it's reused?
Definition AMReX_MLCellABecLap.H:47
typename MLLinOpT< MF >::Location Location
Definition AMReX_MLCellABecLap.H:20
typename MLLinOpT< MF >::BCMode BCMode
Definition AMReX_MLCellLinOp.H:31
typename MLLinOpT< MF >::StateMode StateMode
Definition AMReX_MLCellLinOp.H:32
Definition AMReX_MLEBABecLap.H:20
bool isCrossStencil() const override
Definition AMReX_MLEBABecLap.H:78
MLEBABecLap(MLEBABecLap &&)=delete
void prepareForSolve() override
Definition AMReX_MLEBABecLap.cpp:687
int m_is_eb_inhomog
Definition AMReX_MLEBABecLap.H:155
MLEBABecLap(const MLEBABecLap &)=delete
bool m_acoef_set
Definition AMReX_MLEBABecLap.H:137
Vector< Vector< std::unique_ptr< MultiFab > > > m_eb_b_coeffs
Definition AMReX_MLEBABecLap.H:151
void setPhiOnCentroid()
Definition AMReX_MLEBABecLap.cpp:104
Real getBScalar() const final
Definition AMReX_MLEBABecLap.H:100
Real m_b_scalar
Definition AMReX_MLEBABecLap.H:132
std::unique_ptr< MLLinOp > makeNLinOp(int) const final
Definition AMReX_MLEBABecLap.H:106
Vector< std::unique_ptr< MultiFab > > m_eb_phi
Definition AMReX_MLEBABecLap.H:150
bool supportRobinBC() const noexcept override
Definition AMReX_MLEBABecLap.H:168
void Fapply(int amrlev, int mglev, MultiFab &out, const MultiFab &in) const final
Definition AMReX_MLEBABecLap_F.cpp:12
void setBCoeffs(int amrlev, const Array< MultiFab const *, 3 > &beta, Location a_beta_loc)
Definition AMReX_MLEBABecLap.cpp:142
void restriction(int, int, MultiFab &crse, MultiFab &fine) const final
Definition AMReX_MLEBABecLap.cpp:951
void FFlux(int amrlev, const MFIter &mfi, const Array< FArrayBox *, 3 > &flux, const FArrayBox &sol, Location loc, int face_only=0) const final
Definition AMReX_MLEBABecLap_F.cpp:304
void applyRobinBCTermsCoeffs()
Definition AMReX_MLEBABecLap.cpp:1442
void setACoeffs(int amrlev, const MultiFab &alpha)
Definition AMReX_MLEBABecLap.cpp:126
MultiFab const * getACoeffs(int amrlev, int mglev) const final
Definition AMReX_MLEBABecLap.H:101
void normalize(int amrlev, int mglev, MultiFab &mf) const final
Definition AMReX_MLEBABecLap.cpp:858
Vector< Vector< MultiFab > > m_a_coeffs
Definition AMReX_MLEBABecLap.H:133
void averageDownSolutionRHS(int camrlev, MultiFab &crse_sol, MultiFab &crse_rhs, const MultiFab &fine_sol, const MultiFab &fine_rhs) final
Definition AMReX_MLEBABecLap.cpp:1006
void interpolation(int amrlev, int fmglev, MultiFab &fine, const MultiFab &crse) const final
Definition AMReX_MLEBABecLap.cpp:959
void applyBC(int amrlev, int mglev, MultiFab &in, BCMode bc_mode, StateMode s_mode, const MLMGBndry *bndry=nullptr, bool skip_fillboundary=false) const final
Definition AMReX_MLEBABecLap.cpp:1016
void averageDownCoeffs()
Definition AMReX_MLEBABecLap.cpp:608
bool isEBDirichlet() const noexcept
Definition AMReX_MLEBABecLap.H:160
void Fsmooth(int amrlev, int mglev, MultiFab &sol, const MultiFab &rhs, int redblack) const final
Definition AMReX_MLEBABecLap_F.cpp:157
void getEBFluxes(const Vector< MultiFab * > &a_flux, const Vector< MultiFab * > &a_sol) const override
Definition AMReX_MLEBABecLap.cpp:1369
MLEBABecLap & operator=(const MLEBABecLap &)=delete
Vector< int > m_is_singular
Definition AMReX_MLEBABecLap.H:153
std::unique_ptr< FabFactory< FArrayBox > > makeFactory(int amrlev, int mglev) const final
Definition AMReX_MLEBABecLap.cpp:33
void setEBDirichlet(int amrlev, const MultiFab &phi, const MultiFab &beta)
Definition AMReX_MLEBABecLap.cpp:191
Vector< Vector< iMultiFab > > m_cc_mask
Definition AMReX_MLEBABecLap.H:148
int m_ncomp
Definition AMReX_MLEBABecLap.H:141
void apply(int amrlev, int mglev, MultiFab &out, MultiFab &in, BCMode bc_mode, StateMode s_mode, const MLMGBndry *bndry=nullptr) const override
Definition AMReX_MLEBABecLap.cpp:1324
void averageDownCoeffsToCoarseAmrLevel(int flev)
Definition AMReX_MLEBABecLap.cpp:664
bool needsUpdate() const override
Does it need update if it's reused?
Definition AMReX_MLEBABecLap.H:71
void setEBHomogDirichlet(int amrlev, const MultiFab &beta)
Definition AMReX_MLEBABecLap.cpp:401
void compGrad(int amrlev, const Array< MultiFab *, 3 > &grad, MultiFab &sol, Location loc) const final
Definition AMReX_MLEBABecLap.cpp:732
bool m_needs_update
Definition AMReX_MLEBABecLap.H:143
Real getAScalar() const final
Definition AMReX_MLEBABecLap.H:99
Real m_a_scalar
Definition AMReX_MLEBABecLap.H:131
Vector< Vector< TagVector< MLMGABCEBTag< RT > > > > m_eb_bc_tags
Definition AMReX_MLEBABecLap.H:170
int getNComp() const override
Return number of components.
Definition AMReX_MLEBABecLap.H:69
bool isSingular(int amrlev) const override
Is it singular on given AMR level?
Definition AMReX_MLEBABecLap.H:88
void setScalars(Real a, Real b)
Definition AMReX_MLEBABecLap.cpp:110
void update() override
Update for reuse.
Definition AMReX_MLEBABecLap.cpp:1333
void averageDownCoeffsSameAmrLevel(int amrlev, Vector< MultiFab > &a, Vector< Array< MultiFab, 3 > > &b, const Vector< MultiFab * > &b_eb)
Definition AMReX_MLEBABecLap.cpp:633
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)
Definition AMReX_MLEBABecLap.cpp:43
bool isBottomSingular() const override
Is the bottom of MG singular?
Definition AMReX_MLEBABecLap.H:89
Location m_phi_loc
Definition AMReX_MLEBABecLap.H:146
void setBCoeffs(int amrlev, const Array< MultiFab const *, 3 > &beta)
Definition AMReX_MLEBABecLap.H:53
Array< MultiFab const *, 3 > getBCoeffs(int amrlev, int mglev) const final
Definition AMReX_MLEBABecLap.H:103
bool m_scalars_set
Definition AMReX_MLEBABecLap.H:136
Vector< Vector< Array< MultiFab, 3 > > > m_b_coeffs
Definition AMReX_MLEBABecLap.H:134
Location m_beta_loc
Definition AMReX_MLEBABecLap.H:145
Definition AMReX_MLMGBndry.H:12
A collection (stored as an array) of FArrayBox objects.
Definition AMReX_MultiFab.H:40
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:28
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
std::array< T, N > Array
Definition AMReX_Array.H:26
Definition AMReX_Amr.cpp:49
std::array< T const *, 3 > GetArrOfConstPtrs(const std::array< T, 3 > &a) noexcept
Definition AMReX_Array.H:1017
void Abort(const std::string &msg)
Print out message to cerr and exit via abort().
Definition AMReX.cpp:230
std::unique_ptr< Hypre > makeHypre(const BoxArray &grids, const DistributionMapping &dmap, const Geometry &geom, MPI_Comm comm_, Hypre::Interface interface, const iMultiFab *overset_mask)
Definition AMReX_Hypre.cpp:12
A multidimensional array accessor.
Definition AMReX_Array4.H:224
Definition AMReX_MLLinOp.H:36
Definition AMReX_MLEBABecLap.H:13