1 #ifndef ERF_TERRAIN_POISSON_H_
2 #define ERF_TERRAIN_POISSON_H_
4 #include <AMReX_Geometry.H>
5 #include <AMReX_MultiFab.H>
6 #include <AMReX_BCRec.H>
11 #include <AMReX_FFT_Poisson.H>
19 TerrainPoisson (amrex::Geometry
const& geom, amrex::BoxArray
const& ba,
20 amrex::DistributionMapping
const& dm,
21 amrex::Array<std::string,2*AMREX_SPACEDIM>& domain_bcs_type,
22 amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_lev_d,
23 const amrex::MultiFab& ax,
const amrex::MultiFab& ay,
24 const amrex::MultiFab& az,
const amrex::MultiFab& dJ,
25 amrex::MultiFab
const* z_phys_nd,
28 void apply(amrex::MultiFab& lhs, amrex::MultiFab
const& rhs);
32 void usePrecond(
bool precond_flag);
34 void getFluxes(amrex::MultiFab& phi, amrex::Array<amrex::MultiFab,AMREX_SPACEDIM>& fluxes);
36 void assign(amrex::MultiFab& lhs, amrex::MultiFab
const& rhs);
40 amrex::Real dotProduct(amrex::MultiFab
const& v1, amrex::MultiFab
const& v2);
42 void increment(amrex::MultiFab& lhs, amrex::MultiFab
const& rhs,
amrex::Real a);
44 void linComb(amrex::MultiFab& lhs,
amrex::Real a, amrex::MultiFab
const& rhs_a,
47 amrex::MultiFab makeVecRHS();
49 amrex::MultiFab makeVecLHS();
53 void precond(amrex::MultiFab& lhs, amrex::MultiFab
const& rhs);
55 void setToZero(amrex::MultiFab& v);
58 bool m_use_precond =
false;
59 amrex::Geometry m_geom;
60 amrex::BoxArray m_grids;
61 amrex::DistributionMapping m_dmap;
62 amrex::Array<std::string,2*AMREX_SPACEDIM> m_domain_bcs_type;
63 amrex::Gpu::DeviceVector<amrex::Real> m_stretched_dz_d;
64 const amrex::MultiFab& m_ax;
65 const amrex::MultiFab& m_ay;
66 const amrex::MultiFab& m_az;
67 const amrex::MultiFab& m_dJ;
68 const amrex::MultiFab* m_zphys;
70 std::unique_ptr<amrex::FFT::PoissonHybrid<amrex::MultiFab>> m_2D_fft_precond;
71 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:73