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 void getFluxes(amrex::MultiFab& phi, amrex::Array<amrex::MultiFab,AMREX_SPACEDIM>& fluxes);
86 void assign(amrex::MultiFab& lhs, amrex::MultiFab
const& rhs);
103 amrex::Real dotProduct(amrex::MultiFab
const& v1, amrex::MultiFab
const& v2);
112 void increment(amrex::MultiFab& lhs, amrex::MultiFab
const& rhs,
amrex::Real a);
123 void linComb(amrex::MultiFab& lhs,
amrex::Real a, amrex::MultiFab
const& rhs_a,
131 amrex::MultiFab makeVecRHS();
138 amrex::MultiFab makeVecLHS();
154 void precond(amrex::MultiFab& lhs, amrex::MultiFab
const& rhs);
161 void setToZero(amrex::MultiFab& v);
164 bool m_use_precond =
false;
165 amrex::Geometry m_geom;
166 amrex::BoxArray m_grids;
167 amrex::DistributionMapping m_dmap;
168 amrex::Array<std::string,2*AMREX_SPACEDIM> m_domain_bcs_type;
169 amrex::Gpu::DeviceVector<amrex::Real> m_stretched_dz_d;
170 const amrex::MultiFab& m_ax;
171 const amrex::MultiFab& m_ay;
172 const amrex::MultiFab& m_az;
173 const amrex::MultiFab& m_dJ;
174 const amrex::MultiFab* m_zphys;
176 std::unique_ptr<amrex::FFT::PoissonHybrid<amrex::MultiFab>> m_2D_fft_precond;
177 amrex::Array<std::pair<amrex::FFT::Boundary,amrex::FFT::Boundary>,AMREX_SPACEDIM> bc_fft;
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< 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)
Definition: ERF_ResolvedWallFlux.H:112