ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_TerrainPoisson.H
Go to the documentation of this file.
1 #ifndef ERF_TERRAIN_POISSON_H_
2 #define ERF_TERRAIN_POISSON_H_
3 
4 #include <AMReX_Geometry.H>
5 #include <AMReX_MultiFab.H>
6 
7 #ifdef ERF_USE_FFT
8 
10 #include <AMReX_FFT_Poisson.H>
11 
12 class TerrainPoisson
13 {
14 public:
15 
16  using RT = amrex::Real;
17 
18  TerrainPoisson (amrex::Geometry const& geom, amrex::BoxArray const& ba,
19  amrex::DistributionMapping const& dm,
20  amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_lev_d,
21  amrex::MultiFab const* z_phys_nd,
22  amrex::Array<std::string,2*AMREX_SPACEDIM>& domain_bc_type);
23 
24  void apply(amrex::MultiFab& lhs, amrex::MultiFab const& rhs);
25 
26  void apply_bcs(amrex::MultiFab& phi);
27 
28  void usePrecond(bool precond_flag);
29 
30  void getFluxes(amrex::MultiFab& phi, amrex::Array<amrex::MultiFab,AMREX_SPACEDIM>& fluxes);
31 
32  void assign(amrex::MultiFab& lhs, amrex::MultiFab const& rhs);
33 
34  void scale(amrex::MultiFab& lhs, amrex::Real fac);
35 
36  amrex::Real dotProduct(amrex::MultiFab const& v1, amrex::MultiFab const& v2);
37 
38  void increment(amrex::MultiFab& lhs, amrex::MultiFab const& rhs, amrex::Real a);
39 
40  void linComb(amrex::MultiFab& lhs, amrex::Real a, amrex::MultiFab const& rhs_a,
41  amrex::Real b, amrex::MultiFab const& rhs_b);
42 
43  amrex::MultiFab makeVecRHS();
44 
45  amrex::MultiFab makeVecLHS();
46 
47  amrex::Real norm2(amrex::MultiFab const& v);
48 
49  void precond(amrex::MultiFab& lhs, amrex::MultiFab const& rhs);
50 
51  void setToZero(amrex::MultiFab& v);
52 
53 private:
54  bool m_use_precond = false;
55  amrex::Geometry m_geom;
56  amrex::BoxArray m_grids;
57  amrex::DistributionMapping m_dmap;
58  amrex::Gpu::DeviceVector<amrex::Real> m_stretched_dz_d;
59  const amrex::MultiFab* m_zphys;
60 
61  std::unique_ptr<amrex::FFT::PoissonHybrid<amrex::MultiFab>> m_2D_fft_precond;
62  amrex::Array<std::pair<amrex::FFT::Boundary,amrex::FFT::Boundary>,AMREX_SPACEDIM> bc_fft;
63 };
64 
65 #endif
66 #endif
auto apply_bcs
Definition: ERF_TI_utils.H:50