1#ifndef AMREX_ML_TERRAIN_POISSON_H_
2#define AMREX_ML_TERRAIN_POISSON_H_
3#include <AMReX_Config.H>
6#include <AMReX_MLTerrainPoisson_K.H>
117 [[nodiscard]] std::string
name ()
const override {
return std::string(
"MLTerrainPoisson"); }
124 Box const& cdomain =
m_geom[0].back().Domain();
125 bool const few_columns = cdomain.
length(0) <= 5 && cdomain.
length(1) <= 5;
135 [[nodiscard]]
bool isSingular (
int amrlev)
const override {
return m_is_singular[amrlev]; }
145 bool skip_fillboundary=
false)
const override;
151 int redblack)
const override;
153 const FAB& sol,
Location loc,
int face_only=0)
const override;
167 [[nodiscard]] mlterrain::BCInfo
bcInfo (
int mglev)
const;
176 void defineLineSolvers ();
177 bool m_needs_update =
true;
#define AMREX_FORCE_INLINE
Definition AMReX_Extension.H:124
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
Array4< Real > fine
Definition AMReX_InterpFaceRegister.cpp:90
Array4< Real const > crse
Definition AMReX_InterpFaceRegister.cpp:92
__host__ __device__ IntVectND< dim > length() const noexcept
Return the length of the BoxND.
Definition AMReX_Box.H:167
A Fortran Array of REALs.
Definition AMReX_FArrayBox.H:237
Iterator for looping ever tiles and boxes of amrex::FabArray based containers.
Definition AMReX_MFIter.H:88
Definition AMReX_MLCellLinOp.H:31
typename MLLinOpT< MF >::BCMode BCMode
Definition AMReX_MLCellLinOp.H:38
typename MLLinOpT< MF >::Location Location
Definition AMReX_MLCellLinOp.H:40
typename MLLinOpT< MF >::StateMode StateMode
Definition AMReX_MLCellLinOp.H:39
bool needsUpdate() const override
Does it need update if it's reused?
Definition AMReX_MLCellLinOp.H:93
Vector< int > m_domain_covered
Definition AMReX_MLLinOp.H:960
Vector< Vector< Geometry > > m_geom
first Vector is for amr level and second is mg level
Definition AMReX_MLLinOp.H:956
Boundary helper for MLMG that manages coarse/fine and physical BC metadata.
Definition AMReX_MLMGBndry.H:20
Cell-centered Poisson operator on a terrain-following mesh.
Definition AMReX_MLTerrainPoisson.H:46
MLTerrainPoisson()=default
bool scaleRHS(int amrlev, MultiFab *rhs) const override
Definition AMReX_MLTerrainPoisson.cpp:506
bool needsUpdate() const override
Does it need update if it's reused?
Definition AMReX_MLTerrainPoisson.H:131
bool isCrossStencil() const override
Whether the stencil is the cross shape.
Definition AMReX_MLTerrainPoisson.H:119
FArrayBox FAB
Definition AMReX_MLTerrainPoisson.H:51
std::string name() const override
Definition AMReX_MLTerrainPoisson.H:117
MLTerrainPoisson(MLTerrainPoisson &&)=delete
void update() override
Update for reuse.
Definition AMReX_MLTerrainPoisson.cpp:331
void updateCoefs()
Definition AMReX_MLTerrainPoisson.cpp:338
MLCellLinOpT< MF >::StateMode StateMode
Definition AMReX_MLTerrainPoisson.H:53
void setAreas(int amrlev, Array< MultiFab const *, 3 > const &area)
Set the face area factors (required).
Definition AMReX_MLTerrainPoisson.cpp:206
Real RT
Definition AMReX_MLTerrainPoisson.H:50
void FFlux(int amrlev, const MFIter &mfi, const Array< FAB *, 3 > &flux, const FAB &sol, Location loc, int face_only=0) const override
Definition AMReX_MLTerrainPoisson.cpp:1096
void setZSplitSolver(ZSplitSolver a_solver)
Choose the solver used when boxes are split in z: Spike (the default) or Column.
Definition AMReX_MLTerrainPoisson.cpp:80
ZSplitSolver
Line solver for levels whose boxes do not span z.
Definition AMReX_MLTerrainPoisson.H:109
bool isSingular(int amrlev) const override
Is it singular on AMR level amrlev?
Definition AMReX_MLTerrainPoisson.H:135
mlterrain::BCInfo bcInfo(int mglev) const
Definition AMReX_MLTerrainPoisson.cpp:225
void fillZPhysGhost(MultiFab &zp, int mglev) const
Definition AMReX_MLTerrainPoisson.cpp:260
void setDirichletNodesToZero(int, int, MultiFab &) const override
No-op: cell-centered unknowns are never on a Dirichlet boundary.
Definition AMReX_MLTerrainPoisson.H:141
void define(const Vector< Geometry > &a_geom, const Vector< BoxArray > &a_grids, const Vector< DistributionMapping > &a_dmap, const LPInfo &a_info=LPInfo())
Define the operator.
Definition AMReX_MLTerrainPoisson.cpp:19
void setDetJ(int amrlev, MultiFab const &detJ)
Set the cell volume factor J. If not set, J = 1.
Definition AMReX_MLTerrainPoisson.cpp:217
MLTerrainPoisson(const MLTerrainPoisson &)=delete
IntVect coarsenRatio(int mglev) const
Definition AMReX_MLTerrainPoisson.cpp:252
void interpolation(int amrlev, int fmglev, MultiFab &fine, const MultiFab &crse) const override
Definition AMReX_MLTerrainPoisson.cpp:613
MLCellLinOpT< MF >::BCMode BCMode
Definition AMReX_MLTerrainPoisson.H:52
BottomSolver getDefaultBottomSolver() const override
Definition AMReX_MLTerrainPoisson.H:123
void setZPhys(int amrlev, MultiFab const &z_phys_nd)
Set the physical height of the cell corners.
Definition AMReX_MLTerrainPoisson.cpp:197
void compGrad(int amrlev, const Array< MultiFab *, 3 > &grad, MultiFab &sol, Location loc) const override
Compute the terrain-following gradient, i.e., the negative of the flux.
Definition AMReX_MLTerrainPoisson.cpp:1130
void Fapply(int amrlev, int mglev, MultiFab &out, const MultiFab &in) const override
Definition AMReX_MLTerrainPoisson.cpp:587
void prepareForSolve() override
Prepare multilevel metadata before MLMG iterates (coefficients, BC caches, etc.).
Definition AMReX_MLTerrainPoisson.cpp:312
bool isBottomSingular() const override
Is the bottom of the multigrid hierarchy singular?
Definition AMReX_MLTerrainPoisson.H:136
MLCellLinOpT< MF >::Location Location
Definition AMReX_MLTerrainPoisson.H:54
void Fsmooth(int amrlev, int mglev, MultiFab &sol, const MultiFab &rhs, int redblack) const override
Definition AMReX_MLTerrainPoisson.cpp:667
MLTerrainPoisson & operator=(const MLTerrainPoisson &)=delete
void applyBC(int amrlev, int mglev, MultiFab &in, BCMode bc_mode, StateMode s_mode, const MLMGBndryT< MultiFab > *bndry=nullptr, bool skip_fillboundary=false) const override
Definition AMReX_MLTerrainPoisson.cpp:518
~MLTerrainPoisson() override=default
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:29
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:80
std::array< T, N > Array
Definition AMReX_Array.H:31
Definition AMReX_Amr.cpp:50
BottomSolver
Definition AMReX_MLLinOp.H:42
Configuration knobs for multilevel linear operators (grid agglomeration, metrics, etc....
Definition AMReX_MLLinOp.H:53
Definition AMReX_MLTerrainPoisson.H:159
__host__ __device__ Box const & box() const noexcept
Definition AMReX_MLTerrainPoisson.H:164
Box bx
Definition AMReX_MLTerrainPoisson.H:160
int local_index
Definition AMReX_MLTerrainPoisson.H:161