1#ifndef AMREX_MLEBNODEFDLAPLACIAN_H_
2#define AMREX_MLEBNODEFDLAPLACIAN_H_
3#include <AMReX_Config.H>
59 void setRZ (
bool flag);
78 [[nodiscard]] std::unique_ptr<FabFactory<FArrayBox> >
makeFactory (
int amrlev,
int mglev)
const final;
89 [[nodiscard]] std::string
name ()
const override {
return std::string(
"MLEBNodeFDLaplacian"); }
106 [[nodiscard]]
bool isSingular (
int) const final {
return false; }
112#if defined(AMREX_USE_HYPRE) && (AMREX_SPACEDIM > 1)
113 void fillIJMatrix (
MFIter const& mfi,
118 Real* mat)
const override;
120 void fillRHS (
MFIter const& mfi,
130 Vector<Vector<std::unique_ptr<MultiFab>>> m_sigma_mf;
131 bool m_has_sigma_mf =
false;
132 bool m_needs_update =
true;
133 Real m_s_phi_eb = std::numeric_limits<Real>::lowest();
134 Vector<MultiFab> m_phi_eb;
136 Real m_rz_alpha = 0._rt;
138 void update_sigma ();
154 if (m_phi_eb[amrlev].empty()) {
157 m_phi_eb[amrlev].setVal(0.0);
159 auto const& flags = factory->getMultiEBCellFlagFab();
160 auto const& levset = factory->getLevelSet();
162#pragma omp parallel if (Gpu::notInLaunchRegion())
166 const Box& ndbx = mfi.growntilebox();
167 const auto& flag = flags[mfi];
173 if (lstarr(i,j,k) >=
Real(0.0)) {
175 problo[1]+j*cellsize[1],
176 problo[2]+k*cellsize[2]));
#define AMREX_HOST_DEVICE_FOR_3D(...)
Definition AMReX_GpuLaunchMacrosC.nolint.H:106
Array4< Real > fine
Definition AMReX_InterpFaceRegister.cpp:90
Array4< Real const > crse
Definition AMReX_InterpFaceRegister.cpp:92
#define AMREX_D_DECL(a, b, c)
Definition AMReX_SPACE.H:171
GpuArray< Real, 3 > CellSizeArray() const noexcept
Definition AMReX_CoordSys.H:76
Definition AMReX_EBFabFactory.H:25
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:74
GpuArray< Real, 3 > ProbLoArray() const noexcept
Definition AMReX_Geometry.H:187
HYPRE_Int Int
Definition AMReX_HypreNodeLap.H:36
Iterator for looping ever tiles and boxes of amrex::FabArray based containers.
Definition AMReX_MFIter.H:85
bool isValid() const noexcept
Is the iterator valid i.e. is it associated with a FAB?
Definition AMReX_MFIter.H:169
Definition AMReX_MLEBNodeFDLaplacian.H:30
void restriction(int amrlev, int cmglev, MultiFab &crse, MultiFab &fine) const final
Definition AMReX_MLEBNodeFDLaplacian.cpp:168
std::string name() const override
Definition AMReX_MLEBNodeFDLaplacian.H:89
bool isBottomSingular() const final
Is the bottom of MG singular?
Definition AMReX_MLEBNodeFDLaplacian.H:107
MLEBNodeFDLaplacian & operator=(const MLEBNodeFDLaplacian &)=delete
bool needsUpdate() const override
Does it need update if it's reused?
Definition AMReX_MLEBNodeFDLaplacian.H:94
void compGrad(int amrlev, const Array< MultiFab *, 3 > &grad, MultiFab &sol, Location) const override
Definition AMReX_MLEBNodeFDLaplacian.cpp:604
void Fsmooth(int amrlev, int mglev, MultiFab &sol, const MultiFab &rhs) const final
Definition AMReX_MLEBNodeFDLaplacian.cpp:487
void interpolation(int amrlev, int fmglev, MultiFab &fine, const MultiFab &crse) const final
Definition AMReX_MLEBNodeFDLaplacian.cpp:215
void setAlpha(Real a_alpha)
Definition AMReX_MLEBNodeFDLaplacian.cpp:68
void setEBDirichlet(Real a_phi_eb)
Definition AMReX_MLEBNodeFDLaplacian.cpp:80
MLEBNodeFDLaplacian(const MLEBNodeFDLaplacian &)=delete
bool scaleRHS(int amrlev, MultiFab *rhs) const final
Definition AMReX_MLEBNodeFDLaplacian.cpp:328
MLEBNodeFDLaplacian()=default
void setRZ(bool flag)
Definition AMReX_MLEBNodeFDLaplacian.cpp:58
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)
Definition AMReX_MLEBNodeFDLaplacian.cpp:86
void Fapply(int amrlev, int mglev, MultiFab &out, const MultiFab &in) const final
Definition AMReX_MLEBNodeFDLaplacian.cpp:364
void normalize(int amrlev, int mglev, MultiFab &mf) const final
Definition AMReX_MLEBNodeFDLaplacian.cpp:592
void setSigma(Array< Real, 3 > const &a_sigma) noexcept
Definition AMReX_MLEBNodeFDLaplacian.cpp:36
void update() override
Update for reuse.
Definition AMReX_MLEBNodeFDLaplacian.cpp:757
MLEBNodeFDLaplacian(MLEBNodeFDLaplacian &&)=delete
void prepareForSolve() final
Definition AMReX_MLEBNodeFDLaplacian.cpp:259
std::unique_ptr< FabFactory< FArrayBox > > makeFactory(int amrlev, int mglev) const final
Definition AMReX_MLEBNodeFDLaplacian.cpp:154
~MLEBNodeFDLaplacian() override=default
void fixUpResidualMask(int amrlev, iMultiFab &resmsk) final
Definition AMReX_MLEBNodeFDLaplacian.cpp:598
void postSolve(Vector< MultiFab * > const &sol) const override
Definition AMReX_MLEBNodeFDLaplacian.cpp:720
bool isSingular(int) const final
Is it singular on given AMR level?
Definition AMReX_MLEBNodeFDLaplacian.H:106
Vector< Vector< std::unique_ptr< FabFactory< FAB > > > > m_factory
Definition AMReX_MLLinOp.H:618
virtual bool needsUpdate() const
Does it need update if it's reused?
Definition AMReX_MLLinOp.H:271
Vector< Vector< BoxArray > > m_grids
Definition AMReX_MLLinOp.H:616
Vector< Vector< DistributionMapping > > m_dmap
Definition AMReX_MLLinOp.H:617
Vector< Vector< Geometry > > m_geom
first Vector is for amr level and second is mg level
Definition AMReX_MLLinOp.H:615
LinOpEnumType::Location Location
Definition AMReX_MLLinOp.H:118
int m_num_amr_levels
Definition AMReX_MLLinOp.H:600
Definition AMReX_MLNodeLinOp.H:17
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
A Collection of IArrayBoxes.
Definition AMReX_iMultiFab.H:34
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
__host__ __device__ BoxND< dim > convert(const BoxND< dim > &b, const IntVectND< dim > &typ) noexcept
Return a BoxND with different type.
Definition AMReX_Box.H:1558
IntVectND< 3 > IntVect
IntVect is an alias for amrex::IntVectND instantiated with AMREX_SPACEDIM.
Definition AMReX_BaseFwd.H:33
bool TilingIfNotGPU() noexcept
Definition AMReX_MFIter.H:12
A multidimensional array accessor.
Definition AMReX_Array4.H:224
Fixed-size array that can be used on GPU.
Definition AMReX_Array.H:41
Test if a given type T is callable with arguments of type Args...
Definition AMReX_TypeTraits.H:219
Definition AMReX_MLLinOp.H:36