ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_TI_fast_headers.H
Go to the documentation of this file.
1 #ifndef ERF_FAST_INTEGRATION_H_
2 #define ERF_FAST_INTEGRATION_H_
3 
4 #include <AMReX_MultiFab.H>
5 #include <AMReX_BCRec.H>
6 #include <AMReX_YAFluxRegister.H>
7 #include <AMReX_EBMultiFabUtil.H>
8 
9 #include "ERF_DataStruct.H"
10 #include "ERF_IndexDefines.H"
11 #include <ERF_TerrainMetrics.H>
12 #include <ERF_TileNoZ.H>
13 #include <ERF_ProbCommon.H>
14 
15 /**
16  * Function for computing the fast RHS with no terrain but constant or stretched vertical resolution
17  *
18  */
19 void erf_substep_NS (int step, int nrk, int level, int finest_level,
20  amrex::Vector<amrex::MultiFab >& S_slow_rhs,
21  const amrex::Vector<amrex::MultiFab >& S_prev,
22  amrex::Vector<amrex::MultiFab >& S_stage_data,
23  const amrex::MultiFab& S_stage_prim,
24  const amrex::MultiFab& qt,
25  const amrex::MultiFab& pi_stage,
26  const amrex::MultiFab& fast_coeffs,
27  amrex::Vector<amrex::MultiFab >& S_data,
28  amrex::MultiFab& lagged_delta_rt,
29  amrex::MultiFab& avg_xmom,
30  amrex::MultiFab& avg_ymom,
31  amrex::MultiFab& avg_zmom,
32  const amrex::MultiFab& cc_src,
33  const amrex::MultiFab& xmom_src,
34  const amrex::MultiFab& ymom_src,
35  const amrex::MultiFab& zmom_src,
36  const amrex::Geometry geom,
37  const amrex::Real gravity,
38  amrex::Gpu::DeviceVector<amrex::Real>& stretched_dz_d,
39  const amrex::Real dtau, const amrex::Real beta_s,
40  const amrex::Real facinv,
41  amrex::Vector<std::unique_ptr<amrex::MultiFab>>& mapfac,
42  amrex::YAFluxRegister* fr_as_crse,
43  amrex::YAFluxRegister* fr_as_fine,
44  bool l_use_moisture, bool l_reflux,
45  const amrex::Real* sinesq_at_lev_d,
46  const amrex::Real l_damp_coef);
47 
48 /**
49  * Function for computing the fast RHS with fixed-in-time terrain
50  *
51  */
52 void erf_substep_T (int step, int nrk, int level, int finest_level,
53  amrex::Vector<amrex::MultiFab >& S_slow_rhs,
54  const amrex::Vector<amrex::MultiFab >& S_prev,
55  amrex::Vector<amrex::MultiFab >& S_stage_data,
56  const amrex::MultiFab& S_stage_prim,
57  const amrex::MultiFab& qt,
58  const amrex::MultiFab& pi_stage,
59  const amrex::MultiFab& fast_coeffs,
60  amrex::Vector<amrex::MultiFab >& S_data,
61  amrex::MultiFab& lagged_delta_rt,
62  amrex::MultiFab& avg_xmom,
63  amrex::MultiFab& avg_ymom,
64  amrex::MultiFab& avg_zmom,
65  const amrex::MultiFab& cc_src,
66  const amrex::MultiFab& xmom_src,
67  const amrex::MultiFab& ymom_src,
68  const amrex::MultiFab& zmom_src,
69  const amrex::Geometry geom,
70  const amrex::Real gravity,
71  std::unique_ptr<amrex::MultiFab>& z_phys_nd,
72  std::unique_ptr<amrex::MultiFab>& detJ_cc,
73  const amrex::Real dtau, const amrex::Real beta_s,
74  const amrex::Real facinv,
75  amrex::Vector<std::unique_ptr<amrex::MultiFab>>& mapfac,
76  amrex::YAFluxRegister* fr_as_crse,
77  amrex::YAFluxRegister* fr_as_fine,
78  bool l_use_moisture, bool l_reflux,
79  const amrex::Real* sinesq_at_lev_d,
80  const amrex::Real l_damp_coef);
81 
82 /**
83  * Function for computing the fast RHS with moving terrain
84  *
85  */
86 void erf_substep_MT (int step, int nrk, int level, int finest_level,
87  amrex::Vector<amrex::MultiFab >& S_slow_rhs,
88  const amrex::Vector<amrex::MultiFab >& S_prev,
89  amrex::Vector<amrex::MultiFab >& S_stg_data,
90  const amrex::MultiFab& S_stg_prim,
91  const amrex::MultiFab& qt,
92  const amrex::MultiFab& pi_stage,
93  const amrex::MultiFab& fast_coeffs,
94  amrex::Vector<amrex::MultiFab >& S_data,
95  amrex::MultiFab& lagged_delta_rt,
96  amrex::MultiFab& avg_xmom,
97  amrex::MultiFab& avg_ymom,
98  amrex::MultiFab& avg_zmom,
99  const amrex::MultiFab& cc_src,
100  const amrex::MultiFab& xmom_src,
101  const amrex::MultiFab& ymom_src,
102  const amrex::MultiFab& zmom_src,
103  const amrex::Geometry geom,
104  const amrex::Real gravity,
105  const bool use_lagged_delta_rt,
106  std::unique_ptr<amrex::MultiFab>& z_t_rk,
107  const amrex::MultiFab* z_t_pert,
108  std::unique_ptr<amrex::MultiFab>& z_phys_nd_old,
109  std::unique_ptr<amrex::MultiFab>& z_phys_nd_new,
110  std::unique_ptr<amrex::MultiFab>& z_phys_nd_stg,
111  std::unique_ptr<amrex::MultiFab>& detJ_cc_old,
112  std::unique_ptr<amrex::MultiFab>& detJ_cc_new,
113  std::unique_ptr<amrex::MultiFab>& detJ_cc_stg,
114  const amrex::Real dtau, const amrex::Real beta_s,
115  const amrex::Real facinv,
116  amrex::Vector<std::unique_ptr<amrex::MultiFab>>& mapfac,
117  amrex::YAFluxRegister* fr_as_crse,
118  amrex::YAFluxRegister* fr_as_fine,
119  bool l_use_moisture, bool l_reflux);
120 
121 /**
122  * Function for computing the coefficients for the tridiagonal solver used in the fast
123  * integrator (the acoustic substepping).
124  */
125 void make_fast_coeffs (int level,
126  amrex::MultiFab& fast_coeffs,
127  amrex::Vector<amrex::MultiFab >& S_stage_data,
128  const amrex::MultiFab& S_stage_prim,
129  const amrex::MultiFab& pi_stage,
130  const amrex::Geometry geom,
131  const bool use_moisture,
132  const MeshType mesh_type,
133  const amrex::Real gravity,
134  const amrex::Real c_p,
135  std::unique_ptr<amrex::MultiFab>& detJ_cc,
136  const amrex::MultiFab* r0,
137  const amrex::MultiFab* pi0,
138  const amrex::Real dtau,
139  const amrex::Real beta_s,
140  amrex::GpuArray<ERF_BC, AMREX_SPACEDIM*2> &phys_bc_type);
141 
142 #endif
amrex::Real Real
Definition: ERF_ShocInterface.H:19
void erf_substep_MT(int step, int nrk, int level, int finest_level, amrex::Vector< amrex::MultiFab > &S_slow_rhs, const amrex::Vector< amrex::MultiFab > &S_prev, amrex::Vector< amrex::MultiFab > &S_stg_data, const amrex::MultiFab &S_stg_prim, const amrex::MultiFab &qt, const amrex::MultiFab &pi_stage, const amrex::MultiFab &fast_coeffs, amrex::Vector< amrex::MultiFab > &S_data, amrex::MultiFab &lagged_delta_rt, amrex::MultiFab &avg_xmom, amrex::MultiFab &avg_ymom, amrex::MultiFab &avg_zmom, const amrex::MultiFab &cc_src, const amrex::MultiFab &xmom_src, const amrex::MultiFab &ymom_src, const amrex::MultiFab &zmom_src, const amrex::Geometry geom, const amrex::Real gravity, const bool use_lagged_delta_rt, std::unique_ptr< amrex::MultiFab > &z_t_rk, const amrex::MultiFab *z_t_pert, std::unique_ptr< amrex::MultiFab > &z_phys_nd_old, std::unique_ptr< amrex::MultiFab > &z_phys_nd_new, std::unique_ptr< amrex::MultiFab > &z_phys_nd_stg, std::unique_ptr< amrex::MultiFab > &detJ_cc_old, std::unique_ptr< amrex::MultiFab > &detJ_cc_new, std::unique_ptr< amrex::MultiFab > &detJ_cc_stg, const amrex::Real dtau, const amrex::Real beta_s, const amrex::Real facinv, amrex::Vector< std::unique_ptr< amrex::MultiFab >> &mapfac, amrex::YAFluxRegister *fr_as_crse, amrex::YAFluxRegister *fr_as_fine, bool l_use_moisture, bool l_reflux)
void erf_substep_T(int step, int nrk, int level, int finest_level, amrex::Vector< amrex::MultiFab > &S_slow_rhs, const amrex::Vector< amrex::MultiFab > &S_prev, amrex::Vector< amrex::MultiFab > &S_stage_data, const amrex::MultiFab &S_stage_prim, const amrex::MultiFab &qt, const amrex::MultiFab &pi_stage, const amrex::MultiFab &fast_coeffs, amrex::Vector< amrex::MultiFab > &S_data, amrex::MultiFab &lagged_delta_rt, amrex::MultiFab &avg_xmom, amrex::MultiFab &avg_ymom, amrex::MultiFab &avg_zmom, const amrex::MultiFab &cc_src, const amrex::MultiFab &xmom_src, const amrex::MultiFab &ymom_src, const amrex::MultiFab &zmom_src, const amrex::Geometry geom, const amrex::Real gravity, std::unique_ptr< amrex::MultiFab > &z_phys_nd, std::unique_ptr< amrex::MultiFab > &detJ_cc, const amrex::Real dtau, const amrex::Real beta_s, const amrex::Real facinv, amrex::Vector< std::unique_ptr< amrex::MultiFab >> &mapfac, amrex::YAFluxRegister *fr_as_crse, amrex::YAFluxRegister *fr_as_fine, bool l_use_moisture, bool l_reflux, const amrex::Real *sinesq_at_lev_d, const amrex::Real l_damp_coef)
void make_fast_coeffs(int level, amrex::MultiFab &fast_coeffs, amrex::Vector< amrex::MultiFab > &S_stage_data, const amrex::MultiFab &S_stage_prim, const amrex::MultiFab &pi_stage, const amrex::Geometry geom, const bool use_moisture, const MeshType mesh_type, const amrex::Real gravity, const amrex::Real c_p, std::unique_ptr< amrex::MultiFab > &detJ_cc, const amrex::MultiFab *r0, const amrex::MultiFab *pi0, const amrex::Real dtau, const amrex::Real beta_s, amrex::GpuArray< ERF_BC, AMREX_SPACEDIM *2 > &phys_bc_type)
void erf_substep_NS(int step, int nrk, int level, int finest_level, amrex::Vector< amrex::MultiFab > &S_slow_rhs, const amrex::Vector< amrex::MultiFab > &S_prev, amrex::Vector< amrex::MultiFab > &S_stage_data, const amrex::MultiFab &S_stage_prim, const amrex::MultiFab &qt, const amrex::MultiFab &pi_stage, const amrex::MultiFab &fast_coeffs, amrex::Vector< amrex::MultiFab > &S_data, amrex::MultiFab &lagged_delta_rt, amrex::MultiFab &avg_xmom, amrex::MultiFab &avg_ymom, amrex::MultiFab &avg_zmom, const amrex::MultiFab &cc_src, const amrex::MultiFab &xmom_src, const amrex::MultiFab &ymom_src, const amrex::MultiFab &zmom_src, const amrex::Geometry geom, const amrex::Real gravity, amrex::Gpu::DeviceVector< amrex::Real > &stretched_dz_d, const amrex::Real dtau, const amrex::Real beta_s, const amrex::Real facinv, amrex::Vector< std::unique_ptr< amrex::MultiFab >> &mapfac, amrex::YAFluxRegister *fr_as_crse, amrex::YAFluxRegister *fr_as_fine, bool l_use_moisture, bool l_reflux, const amrex::Real *sinesq_at_lev_d, const amrex::Real l_damp_coef)
@ qt
Definition: ERF_Kessler.H:27