4 #ifndef ERF_TERRAIN_POISSON_H_
5 #define ERF_TERRAIN_POISSON_H_
7 #include <AMReX_Geometry.H>
8 #include <AMReX_MultiFab.H>
9 #include <AMReX_BCRec.H>
14 #include <AMReX_FFT_Poisson.H>
40 TerrainPoisson (amrex::Geometry
const& geom, amrex::Geometry
const& lev_geom,
41 amrex::BoxArray
const& ba,
42 amrex::DistributionMapping
const& dm,
43 amrex::Array<std::string,2*AMREX_SPACEDIM>& domain_bcs_type,
44 amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_lev_d,
45 const amrex::MultiFab& ax,
const amrex::MultiFab& ay,
46 const amrex::MultiFab& az,
const amrex::MultiFab& dJ,
47 amrex::MultiFab
const* z_phys_nd,
56 void apply (amrex::MultiFab& lhs, amrex::MultiFab
const& rhs);
70 void usePrecond (
bool precond_flag);
78 [[nodiscard]]
int zeroFluxFaces ()
const {
return m_zero_flux_faces; }
86 void getFluxes (amrex::MultiFab& phi, amrex::Array<amrex::MultiFab,AMREX_SPACEDIM>& fluxes);
94 void assign (amrex::MultiFab& lhs, amrex::MultiFab
const& rhs);
102 void scale (amrex::MultiFab& lhs,
amrex::Real fac);
111 amrex::Real dotProduct (amrex::MultiFab
const& v1, amrex::MultiFab
const& v2);
120 void increment (amrex::MultiFab& lhs, amrex::MultiFab
const& rhs,
amrex::Real a);
131 void linComb (amrex::MultiFab& lhs,
amrex::Real a, amrex::MultiFab
const& rhs_a,
139 amrex::MultiFab makeVecRHS ();
146 amrex::MultiFab makeVecLHS ();
162 void precond (amrex::MultiFab& lhs, amrex::MultiFab
const& rhs);
169 void setToZero (amrex::MultiFab& v);
172 bool m_use_precond =
false;
173 amrex::Geometry m_geom;
174 amrex::BoxArray m_grids;
175 amrex::DistributionMapping m_dmap;
176 amrex::Array<std::string,2*AMREX_SPACEDIM> m_domain_bcs_type;
177 amrex::Gpu::DeviceVector<amrex::Real> m_stretched_dz_d;
178 const amrex::MultiFab& m_ax;
179 const amrex::MultiFab& m_ay;
180 const amrex::MultiFab& m_az;
181 const amrex::MultiFab& m_dJ;
182 const amrex::MultiFab* m_zphys;
184 std::unique_ptr<amrex::FFT::PoissonHybrid<amrex::MultiFab>> m_2D_fft_precond;
185 amrex::Array<std::pair<amrex::FFT::Boundary,amrex::FFT::Boundary>,AMREX_SPACEDIM> bc_fft;
188 int m_zero_flux_faces = 0;
amrex::Real Real
Definition: ERF_ShocInterface.H:19
auto apply_bcs
Definition: ERF_TI_utils.H:34
void apply(const amrex::Box &bx, const amrex::Box &domain, const int quantity, const int flux_comp, const amrex::Array4< const amrex::Real > &state, const amrex::Array4< const amrex::Real > &prim, const amrex::Array4< const amrex::Real > &base_state, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &w, const amrex::Array4< amrex::Real > &rhs, const amrex::Array4< amrex::Real > &xflux, const amrex::Array4< amrex::Real > &yflux, const amrex::Array4< amrex::Real > &zflux, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dx_inv, const erf_wall_thermodynamics::Boundary &walls, const amrex::Real alpha_T, const amrex::Real alpha_C, const amrex::Real rdOcp, const bool cloudy=false)
Definition: ERF_CloudChamberWallFlux.H:1037