ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_WDM6.H
Go to the documentation of this file.
1 #ifndef ERF_WDM6_H
2 #define ERF_WDM6_H
3 
4 #include <memory>
5 #include <string>
6 #include <vector>
7 
8 #include <AMReX_FArrayBox.H>
9 #include <AMReX_Geometry.H>
10 #include <AMReX_MultiFabUtil.H>
11 
12 #include "ERF_Constants.H"
14 #include "ERF_DataStruct.H"
15 #include "ERF_IndexDefines.H"
16 #include "ERF_MicrophysicsUtils.H"
17 #include "ERF_NullMoist.H"
19 
20 namespace MicVar_WDM6 {
21  enum {
22  rho = 0,
26  qv,
27  qc,
28  qi,
29  qr,
30  qs,
31  qg,
32  nn, // total aerosol number concentration
33  nc, // cloud droplet number concentration
34  nr, // rain drop number concentration
38  NumVars
39  };
40 }
41 
42 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
44  const amrex::Array4<const amrex::Real>& states,
45  const amrex::Array4<const amrex::Real>& base,
46  const amrex::Array4<amrex::Real>& rho,
47  const amrex::Array4<amrex::Real>& theta,
48  const amrex::Array4<amrex::Real>& tabs,
49  const amrex::Array4<amrex::Real>& pres,
50  const amrex::Array4<amrex::Real>& qv,
51  const amrex::Array4<amrex::Real>& qc,
52  const amrex::Array4<amrex::Real>& qi,
53  const amrex::Array4<amrex::Real>& qr,
54  const amrex::Array4<amrex::Real>& qs,
55  const amrex::Array4<amrex::Real>& qg,
56  const amrex::Real rdOcp,
57  const bool use_anelastic_reference_pressure,
58  const int i, const int j, const int k) noexcept
59 {
60  const amrex::Real rho_value = states(i,j,k,Rho_comp);
61  const amrex::Real rho_theta = states(i,j,k,RhoTheta_comp);
62  rho(i,j,k) = rho_value;
63  theta(i,j,k) = rho_theta / rho_value;
64  qv(i,j,k) = amrex::max(amrex::Real(0.0), states(i,j,k,RhoQ1_comp) / rho_value);
65  qc(i,j,k) = amrex::max(amrex::Real(0.0), states(i,j,k,RhoQ2_comp) / rho_value);
66  qi(i,j,k) = amrex::max(amrex::Real(0.0), states(i,j,k,RhoQ3_comp) / rho_value);
67  qr(i,j,k) = amrex::max(amrex::Real(0.0), states(i,j,k,RhoQ4_comp) / rho_value);
68  qs(i,j,k) = amrex::max(amrex::Real(0.0), states(i,j,k,RhoQ5_comp) / rho_value);
69  qg(i,j,k) = amrex::max(amrex::Real(0.0), states(i,j,k,RhoQ6_comp) / rho_value);
70 
71  const amrex::Real p0 = use_anelastic_reference_pressure
72  ? base(i,j,k,BaseState::p0_comp) : amrex::Real(0.0);
74  rho_value, rho_theta, qv(i,j,k), rdOcp,
75  use_anelastic_reference_pressure, p0);
76  tabs(i,j,k) = thermo.temperature;
77  pres(i,j,k) = thermo.pressure_pa;
78 }
79 
80 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
82  const amrex::Real temperature,
83  const amrex::Real pressure,
84  const amrex::Real configured_rdOcp,
85  const bool use_anelastic_reference_pressure) noexcept
86 {
87  const amrex::Real theta_rdOcp = use_anelastic_reference_pressure
88  ? configured_rdOcp : RdoCp;
89  return getThgivenTandP(temperature, pressure, theta_rdOcp);
90 }
91 
92 // Selects how the WDM6 parameter literals are interpreted. See the LITERAL
93 // PRECISION CONTRACT comment on the constant block below for the full
94 // rationale. Namespace scope, not a class member, because a constexpr member
95 // function cannot be used in a constant expression within its own class body.
96 constexpr amrex::Real wdm6_literal (double d)
97 {
98 #ifdef ERF_WDM6_F32_LITERALS
99  // Match the Fortran as compiled today: its literals carry no kind suffix,
100  // so they are evaluated in single precision and then widened.
101  return amrex::Real(static_cast<float>(d));
102 #else
103  // True doubles. Correct when the Fortran is built -fdefault-real-8.
104  return amrex::Real(d);
105 #endif
106 }
107 
108 class WDM6 : public NullMoist {
109  using FabPtr = std::shared_ptr<amrex::MultiFab>;
110 
111 public:
112  WDM6 () {}
113  virtual ~WDM6 () = default;
114 
115  void Define (SolverChoice& sc) override
116  {
118  m_rdOcp = sc.rdOcp;
120  m_axis = sc.ave_plane;
121  m_do_cond = (!sc.uses_shoc_family());
122  }
123 
124  // WDM6 module parameter constants (from WRF module_mp_wdm6.F)
125  //
126  // LITERAL PRECISION CONTRACT
127  // --------------------------
128  // Every constant below is initialised through wdm6_literal() rather than
129  // written directly, because the two implementations do not agree on what
130  // these literals mean.
131  //
132  // In ERF_module_mp_wdm6.F90 the parameters are declared
133  // real(kind=kind_phys), parameter :: dimax = 500.e-6
134  // with NO kind suffix on the literal. Fortran therefore evaluates the
135  // literal as a default (single-precision) real and only then widens it to
136  // kind_phys, so the stored value carries float32 rounding permanently.
137  // All 22 parameters in that module are written this way; none is suffixed.
138  // dimax for instance is +5.00000023748725652695E-04 in the Fortran, which
139  // is bit-for-bit float32(5e-4) widened, against a true double
140  // +5.00000000000000010408E-04 here.
141  //
142  // That single 2.37e-11 difference is the confirmed root cause of the first
143  // materially failing group in the tag-frontier retreat: it clamps
144  // diameter, which drives pidep in G13e, which amplifies into psaut in G13f
145  // and on into the Milestone A and B plotfile failures.
146  //
147  // ERF_WDM6_F32_LITERALS selects which side to match:
148  // defined reproduce the Fortran-as-compiled-today values bit-for-bit
149  // undefined use true doubles, which is correct when the Fortran side is
150  // built with -fdefault-real-8 so its literals are doubles too
151  //
152  // Four constants (actk, bvtr, bvts, satmax) previously carried a hand-added
153  // 'f' suffix. That was an undocumented partial fix covering 4 of 22 and it
154  // would have silently fought a -fdefault-real-8 build. Those suffixes are
155  // absorbed here so the choice is made in exactly one place.
156  //
157  // Note r0, peaut and alpha_wdm6 have no matching Fortran parameter of the
158  // same name and value, so their correspondence is unverified; they are
159  // routed through the same helper for uniformity, not because a match is
160  // established.
161  //
162  // wdm6_literal is defined at namespace scope above rather than as a member:
163  // a constexpr member function cannot be called in a constant expression
164  // inside its own class body, because the class is incomplete until the
165  // closing brace.
166  static constexpr amrex::Real dtcldcr = wdm6_literal(120.0);
167  static constexpr amrex::Real n0r = wdm6_literal(8.0e6);
168  static constexpr amrex::Real avtr = wdm6_literal(841.9);
169  static constexpr amrex::Real bvtr = wdm6_literal(0.8);
170  static constexpr amrex::Real r0 = wdm6_literal(0.8e-5);
171  static constexpr amrex::Real peaut = wdm6_literal(0.55);
172  static constexpr amrex::Real xncr = wdm6_literal(3.0e8);
173  static constexpr amrex::Real xncr0 = wdm6_literal(5.0e7);
174  static constexpr amrex::Real xncr1 = wdm6_literal(5.0e8);
175  static constexpr amrex::Real xmyu = wdm6_literal(1.718e-5);
176  static constexpr amrex::Real avts = wdm6_literal(11.72);
177  static constexpr amrex::Real bvts = wdm6_literal(0.41);
178  static constexpr amrex::Real lamdarmax = wdm6_literal(5.0e4);
179  static constexpr amrex::Real lamdarmin = wdm6_literal(2.0e3);
180  static constexpr amrex::Real lamdasmax = wdm6_literal(1.0e5);
181  static constexpr amrex::Real lamdacmax = wdm6_literal(5.0e5);
182  static constexpr amrex::Real lamdacmin = wdm6_literal(2.0e4);
183  static constexpr amrex::Real dicon = wdm6_literal(11.9);
184  static constexpr amrex::Real dimax = wdm6_literal(500.0e-6);
185  static constexpr amrex::Real pfrz1 = wdm6_literal(100.0);
186  static constexpr amrex::Real pfrz2 = wdm6_literal(0.66);
187  static constexpr amrex::Real qcrmin = wdm6_literal(1.0e-9);
188  static constexpr amrex::Real ncmin = wdm6_literal(1.0e1);
189  static constexpr amrex::Real nrmin = wdm6_literal(1.0e-2);
190  static constexpr amrex::Real eacrc = wdm6_literal(1.0);
191  static constexpr amrex::Real dens_snow = wdm6_literal(100.0);
192  static constexpr amrex::Real qs0 = wdm6_literal(6.0e-4);
193  static constexpr amrex::Real n0smax = wdm6_literal(1.0e11);
194  static constexpr amrex::Real n0s = wdm6_literal(2.0e6);
195  static constexpr amrex::Real alpha_wdm6 = wdm6_literal(0.12);
196  static constexpr amrex::Real satmax = wdm6_literal(1.0048);
197  static constexpr amrex::Real actk = wdm6_literal(0.6);
198  static constexpr amrex::Real actr = wdm6_literal(1.5);
199  static constexpr amrex::Real ncrk1 = wdm6_literal(3.03e3);
200  static constexpr amrex::Real ncrk2 = wdm6_literal(2.59e15);
201  static constexpr amrex::Real di100 = wdm6_literal(1.0e-4);
202  static constexpr amrex::Real di600 = wdm6_literal(6.0e-4);
203  static constexpr amrex::Real di2000 = wdm6_literal(2000.0e-6);
204  static constexpr amrex::Real di82 = wdm6_literal(82.0e-6);
205  static constexpr amrex::Real di15 = wdm6_literal(15.0e-6);
206 
207  void Init (const amrex::MultiFab& cons_in,
208  const amrex::BoxArray& grids,
209  const amrex::Geometry& geom,
210  const amrex::Real& dt_advance,
211  std::unique_ptr<amrex::MultiFab>& z_phys_nd,
212  std::unique_ptr<amrex::MultiFab>& detJ_cc) override;
213 
214  void Set_dzmin (const amrex::Real dz_min) override { m_dzmin = dz_min; }
215 
216  // Held by pointer so a retag of the mask after this call is visible. See
217  // the xland fill and the qcr selection in ERF_AdvanceWDM6.cpp for the
218  // ERF-lmask-to-WRF-xland encoding difference.
219  void Set_Lmask (amrex::iMultiFab* lmask) override { m_lmask = lmask; }
220 
221  void Copy_State_to_Micro (const amrex::MultiFab& cons_in) override;
222  void Copy_State_to_Micro (const amrex::MultiFab& cons_in,
223  const amrex::MultiFab* base_state);
224  void Copy_Micro_to_State (amrex::MultiFab& cons_in) override;
225 
226  void Update_Micro_Vars (amrex::MultiFab& cons_in,
227  const amrex::MultiFab* base_state) override;
228 
229  void Update_Micro_Vars (amrex::MultiFab& cons_in) override
230  {
231  Copy_State_to_Micro(cons_in);
232  }
233 
234  void Update_State_Vars (amrex::MultiFab& cons_in,
235  const amrex::MultiFab& /*z_phys_nd*/) override
236  {
237  Copy_Micro_to_State(cons_in);
238  }
239 
240  void Advance (const amrex::Real& dt_advance,
241  const SolverChoice& solverChoice) override;
242 
243  amrex::MultiFab* Qmoist_Ptr (const int& varIdx) override
244  {
246  return mic_fab_vars[MicVarMap[varIdx]].get();
247  }
248 
249  int Qmoist_Size () override { return m_qmoist_size; }
250  int Qstate_Moist_Size () override { return n_qstate_moist_size; }
252 
254  std::vector<int>& a_idx,
255  std::vector<std::string>& a_names) const override
256  {
257  a_idx = {0, 1, 2};
258  a_names = {"RainAccum", "SnowAccum", "GraupAccum"};
259  }
260 
262  Get_Surface_Precip_Accumulation_Ptrs (const int&) const override
263  {
265  sources.total = {mic_fab_vars[MicVar_WDM6::rain_accum].get(), rhoh2o / amrex::Real(1000.0)};
266  sources.snow = {mic_fab_vars[MicVar_WDM6::snow_accum].get(), rhoh2o / amrex::Real(1000.0)};
267  sources.graupel = {mic_fab_vars[MicVar_WDM6::graup_accum].get(), rhoh2o / amrex::Real(1000.0)};
268  return sources;
269  }
270 
271 private:
272  int m_qmoist_size = 3; // rain_accum, snow_accum, graup_accum
273  int n_qstate_moist_size = 9; // 6 mixing ratios + 3 number concentrations
274  int n_qstate_moist_numconc_size = 3; // nn, nc, nr
275 
276  amrex::Vector<int> MicVarMap;
277 
278  amrex::Geometry m_geom;
281  amrex::Real m_ccn0{100.0e6}; // background CCN concentration (m^-3)
282  int nlev{0}, zlo{0}, zhi{0};
283  int m_axis{2};
284  bool m_do_cond{true};
286  MoistureType m_moisture_type{MoistureType::None};
287 
288  amrex::MultiFab* m_z_phys_nd{nullptr};
289  amrex::MultiFab* m_detJ_cc{nullptr};
290  amrex::iMultiFab* m_lmask{nullptr}; // land/water mask from ERF::lmask_lev
291 
292  amrex::Array<FabPtr, MicVar_WDM6::NumVars> mic_fab_vars;
293 
294  // No nn-initialized flag: Copy_State_to_Micro decides per cell from RhoQ8,
295  // which is restart-correct and needs no cross-call bookkeeping.
296 
297  // WDM6 init coefficients (hail_opt-dependent)
298  bool m_hail_opt{false};
300 
301  void initialize_coeffs ();
302 
303  // Derived coefficients (computed in initialize_coeffs())
325 };
326 
327 #endif
constexpr amrex::Real RdoCp
Definition: ERF_Constants.H:41
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getThgivenTandP(const amrex::Real T, const amrex::Real P, const amrex::Real rdOcp)
Definition: ERF_EOS.H:18
#define Rho_comp
Definition: ERF_IndexDefines.H:39
#define RhoQ4_comp
Definition: ERF_IndexDefines.H:48
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:40
#define RhoQ2_comp
Definition: ERF_IndexDefines.H:46
#define RhoQ3_comp
Definition: ERF_IndexDefines.H:47
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:45
#define RhoQ6_comp
Definition: ERF_IndexDefines.H:50
#define RhoQ5_comp
Definition: ERF_IndexDefines.H:49
const Real rdOcp
Definition: ERF_InitCustomPert_ABL.H:72
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
Physical constants and tuning parameters used only by the moisture and cloud-physics code.
constexpr amrex::Real rhoh2o
Definition: ERF_MicrophysicsConstants.H:42
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE MicrophysicsThermoState diagnose_microphysics_thermo_state(const amrex::Real rho, const amrex::Real rho_theta, const amrex::Real qv, const amrex::Real rdOcp, const bool use_anelastic_reference_pressure, const amrex::Real p0) noexcept
Definition: ERF_MicrophysicsUtils.H:35
amrex::Real Real
Definition: ERF_ShocInterface.H:19
constexpr amrex::Real wdm6_literal(double d)
Definition: ERF_WDM6.H:96
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real wdm6_theta_from_temperature_and_pressure(const amrex::Real temperature, const amrex::Real pressure, const amrex::Real configured_rdOcp, const bool use_anelastic_reference_pressure) noexcept
Definition: ERF_WDM6.H:81
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void wdm6_copy_state_to_micro_cell(const amrex::Array4< const amrex::Real > &states, const amrex::Array4< const amrex::Real > &base, const amrex::Array4< amrex::Real > &rho, const amrex::Array4< amrex::Real > &theta, const amrex::Array4< amrex::Real > &tabs, const amrex::Array4< amrex::Real > &pres, const amrex::Array4< amrex::Real > &qv, const amrex::Array4< amrex::Real > &qc, const amrex::Array4< amrex::Real > &qi, const amrex::Array4< amrex::Real > &qr, const amrex::Array4< amrex::Real > &qs, const amrex::Array4< amrex::Real > &qg, const amrex::Real rdOcp, const bool use_anelastic_reference_pressure, const int i, const int j, const int k) noexcept
Definition: ERF_WDM6.H:43
Definition: ERF_NullMoist.H:10
void set_anelastic_reference_pressure_mode(const SolverChoice &sc)
Definition: ERF_NullMoist.H:155
Definition: ERF_WDM6.H:108
amrex::Real m_precs2
Definition: ERF_WDM6.H:315
static constexpr amrex::Real xncr
Definition: ERF_WDM6.H:172
static constexpr amrex::Real ncmin
Definition: ERF_WDM6.H:188
static constexpr amrex::Real qcrmin
Definition: ERF_WDM6.H:187
int nlev
Definition: ERF_WDM6.H:282
amrex::Real m_pidn0g
Definition: ERF_WDM6.H:319
amrex::Real m_precr2
Definition: ERF_WDM6.H:311
int m_axis
Definition: ERF_WDM6.H:283
amrex::Real m_g5pbro2
Definition: ERF_WDM6.H:309
bool m_hail_opt
Definition: ERF_WDM6.H:298
amrex::Real m_bvtg1
Definition: ERF_WDM6.H:317
static constexpr amrex::Real n0r
Definition: ERF_WDM6.H:167
amrex::iMultiFab * m_lmask
Definition: ERF_WDM6.H:290
static constexpr amrex::Real nrmin
Definition: ERF_WDM6.H:189
amrex::Real m_pvtrn
Definition: ERF_WDM6.H:310
amrex::Real m_bvtr3o5
Definition: ERF_WDM6.H:307
int n_qstate_moist_size
Definition: ERF_WDM6.H:273
void Copy_Micro_to_State(amrex::MultiFab &cons_in) override
Definition: ERF_UpdateWDM6.cpp:9
amrex::Real m_rslopecmax
Definition: ERF_WDM6.H:320
static constexpr amrex::Real lamdarmax
Definition: ERF_WDM6.H:178
amrex::Real m_pidn0s
Definition: ERF_WDM6.H:316
amrex::Real dt
Definition: ERF_WDM6.H:279
amrex::Real m_g5pbr
Definition: ERF_WDM6.H:308
amrex::Real m_g3pbs
Definition: ERF_WDM6.H:314
WDM6()
Definition: ERF_WDM6.H:112
amrex::Real m_pacrs
Definition: ERF_WDM6.H:315
amrex::Real m_qc1
Definition: ERF_WDM6.H:305
static constexpr amrex::Real di100
Definition: ERF_WDM6.H:201
int m_qmoist_size
Definition: ERF_WDM6.H:272
amrex::Real m_dzmin
Definition: ERF_WDM6.H:280
amrex::Real m_pvts
Definition: ERF_WDM6.H:315
std::shared_ptr< amrex::MultiFab > FabPtr
Definition: ERF_WDM6.H:109
static constexpr amrex::Real pfrz1
Definition: ERF_WDM6.H:185
amrex::Real m_rslopec3max
Definition: ERF_WDM6.H:320
static constexpr amrex::Real eacrc
Definition: ERF_WDM6.H:190
static constexpr amrex::Real dicon
Definition: ERF_WDM6.H:183
int Qstate_Moist_NumConc_Size() override
Definition: ERF_WDM6.H:251
amrex::Real m_bvtg4
Definition: ERF_WDM6.H:317
amrex::Vector< int > MicVarMap
Definition: ERF_WDM6.H:276
amrex::Real m_pvtr
Definition: ERF_WDM6.H:310
amrex::Real m_rslopegmax
Definition: ERF_WDM6.H:321
static constexpr amrex::Real bvtr
Definition: ERF_WDM6.H:169
amrex::Real m_bvtr7
Definition: ERF_WDM6.H:306
amrex::Real m_rslopesmax
Definition: ERF_WDM6.H:321
amrex::Real m_bvtr3
Definition: ERF_WDM6.H:306
amrex::Real m_pidn0r
Definition: ERF_WDM6.H:312
amrex::Real m_pvtg
Definition: ERF_WDM6.H:319
amrex::Array< FabPtr, MicVar_WDM6::NumVars > mic_fab_vars
Definition: ERF_WDM6.H:292
static constexpr amrex::Real lamdacmax
Definition: ERF_WDM6.H:181
static constexpr amrex::Real alpha_wdm6
Definition: ERF_WDM6.H:195
void Qmoist_Restart_Vars(const SolverChoice &, std::vector< int > &a_idx, std::vector< std::string > &a_names) const override
Definition: ERF_WDM6.H:253
SurfacePrecipAccumulationSources Get_Surface_Precip_Accumulation_Ptrs(const int &) const override
Definition: ERF_WDM6.H:262
amrex::Real m_pi_wdm6
Definition: ERF_WDM6.H:304
static constexpr amrex::Real dtcldcr
Definition: ERF_WDM6.H:166
amrex::Real m_rslopes2max
Definition: ERF_WDM6.H:323
void Set_Lmask(amrex::iMultiFab *lmask) override
Import ERF's land/water mask. Only schemes whose physics branches on land vs water need to override t...
Definition: ERF_WDM6.H:219
static constexpr amrex::Real avts
Definition: ERF_WDM6.H:176
static constexpr amrex::Real xmyu
Definition: ERF_WDM6.H:175
amrex::Real m_rslopegbmax
Definition: ERF_WDM6.H:322
amrex::Real m_bvtr1
Definition: ERF_WDM6.H:306
int n_qstate_moist_numconc_size
Definition: ERF_WDM6.H:274
amrex::Real m_rslopes3max
Definition: ERF_WDM6.H:324
void Copy_State_to_Micro(const amrex::MultiFab &cons_in) override
amrex::Real m_qck1
Definition: ERF_WDM6.H:305
amrex::Real m_rdOcp
Definition: ERF_WDM6.H:285
void Advance(const amrex::Real &dt_advance, const SolverChoice &solverChoice) override
Definition: ERF_AdvanceWDM6.cpp:652
amrex::Real m_g1pbs
Definition: ERF_WDM6.H:314
static constexpr amrex::Real qs0
Definition: ERF_WDM6.H:192
void Init(const amrex::MultiFab &cons_in, const amrex::BoxArray &grids, const amrex::Geometry &geom, const amrex::Real &dt_advance, std::unique_ptr< amrex::MultiFab > &z_phys_nd, std::unique_ptr< amrex::MultiFab > &detJ_cc) override
Definition: ERF_InitWDM6.cpp:11
amrex::Real m_rslopeg2max
Definition: ERF_WDM6.H:323
void Define(SolverChoice &sc) override
Definition: ERF_WDM6.H:115
static constexpr amrex::Real n0s
Definition: ERF_WDM6.H:194
amrex::Real m_bvtg3
Definition: ERF_WDM6.H:317
amrex::Real m_rslopesbmax
Definition: ERF_WDM6.H:322
amrex::Geometry m_geom
Definition: ERF_WDM6.H:278
static constexpr amrex::Real di2000
Definition: ERF_WDM6.H:203
amrex::Real m_bvtr2o5
Definition: ERF_WDM6.H:307
amrex::Real m_avtg
Definition: ERF_WDM6.H:299
amrex::Real m_precg1
Definition: ERF_WDM6.H:319
void Copy_State_to_Micro(const amrex::MultiFab &cons_in, const amrex::MultiFab *base_state)
MoistureType m_moisture_type
Definition: ERF_WDM6.H:286
amrex::Real m_rsloperbmax
Definition: ERF_WDM6.H:322
amrex::Real m_g3pbg
Definition: ERF_WDM6.H:318
void Set_dzmin(const amrex::Real dz_min) override
Definition: ERF_WDM6.H:214
amrex::Real m_precr1
Definition: ERF_WDM6.H:311
static constexpr amrex::Real di82
Definition: ERF_WDM6.H:204
amrex::Real m_g7pbr
Definition: ERF_WDM6.H:308
static constexpr amrex::Real actr
Definition: ERF_WDM6.H:198
static constexpr amrex::Real lamdarmin
Definition: ERF_WDM6.H:179
static constexpr amrex::Real lamdacmin
Definition: ERF_WDM6.H:182
amrex::Real m_bvts1
Definition: ERF_WDM6.H:313
amrex::Real m_ccn0
Definition: ERF_WDM6.H:281
amrex::Real m_pidnc
Definition: ERF_WDM6.H:305
amrex::Real m_qc0
Definition: ERF_WDM6.H:305
static constexpr amrex::Real dens_snow
Definition: ERF_WDM6.H:191
amrex::Real m_bvtg
Definition: ERF_WDM6.H:299
amrex::Real m_g1pbg
Definition: ERF_WDM6.H:318
amrex::Real m_rsloper3max
Definition: ERF_WDM6.H:324
amrex::Real m_rslopeg3max
Definition: ERF_WDM6.H:324
virtual ~WDM6()=default
amrex::Real m_pidnr
Definition: ERF_WDM6.H:312
amrex::Real m_g4pbr
Definition: ERF_WDM6.H:308
amrex::Real m_pacrr
Definition: ERF_WDM6.H:310
void Update_Micro_Vars(amrex::MultiFab &cons_in, const amrex::MultiFab *base_state) override
static constexpr amrex::Real bvts
Definition: ERF_WDM6.H:177
amrex::Real m_n0g
Definition: ERF_WDM6.H:299
static constexpr amrex::Real di600
Definition: ERF_WDM6.H:202
static constexpr amrex::Real r0
Definition: ERF_WDM6.H:170
amrex::Real m_g5pbgo2
Definition: ERF_WDM6.H:318
int Qstate_Moist_Size() override
Definition: ERF_WDM6.H:250
amrex::Real m_g4pbs
Definition: ERF_WDM6.H:314
amrex::Real m_g3pbr
Definition: ERF_WDM6.H:308
void Update_Micro_Vars(amrex::MultiFab &cons_in) override
Definition: ERF_WDM6.H:229
static constexpr amrex::Real lamdasmax
Definition: ERF_WDM6.H:180
amrex::Real m_bvtr2
Definition: ERF_WDM6.H:306
amrex::MultiFab * m_detJ_cc
Definition: ERF_WDM6.H:289
void Update_State_Vars(amrex::MultiFab &cons_in, const amrex::MultiFab &) override
Definition: ERF_WDM6.H:234
int zlo
Definition: ERF_WDM6.H:282
int zhi
Definition: ERF_WDM6.H:282
static constexpr amrex::Real xncr0
Definition: ERF_WDM6.H:173
amrex::Real m_precg2
Definition: ERF_WDM6.H:319
amrex::Real m_rslopermax
Definition: ERF_WDM6.H:321
amrex::MultiFab * m_z_phys_nd
Definition: ERF_WDM6.H:288
static constexpr amrex::Real peaut
Definition: ERF_WDM6.H:171
amrex::Real m_bvtr6
Definition: ERF_WDM6.H:306
static constexpr amrex::Real ncrk2
Definition: ERF_WDM6.H:200
amrex::Real m_g6pbr
Definition: ERF_WDM6.H:308
amrex::Real m_xlv1
Definition: ERF_WDM6.H:304
static constexpr amrex::Real xncr1
Definition: ERF_WDM6.H:174
amrex::Real m_bvts4
Definition: ERF_WDM6.H:313
amrex::Real m_pacrg
Definition: ERF_WDM6.H:319
static constexpr amrex::Real ncrk1
Definition: ERF_WDM6.H:199
amrex::Real m_lamdagmax
Definition: ERF_WDM6.H:299
static constexpr amrex::Real di15
Definition: ERF_WDM6.H:205
amrex::Real m_g1pbr
Definition: ERF_WDM6.H:308
void initialize_coeffs()
Definition: ERF_InitWDM6.cpp:170
amrex::Real m_g2pbr
Definition: ERF_WDM6.H:308
amrex::Real m_bvts3
Definition: ERF_WDM6.H:313
amrex::Real m_bvtr5
Definition: ERF_WDM6.H:306
amrex::Real m_xmmax
Definition: ERF_WDM6.H:311
amrex::Real m_bvtr4
Definition: ERF_WDM6.H:306
static constexpr amrex::Real avtr
Definition: ERF_WDM6.H:168
amrex::Real m_pacrc
Definition: ERF_WDM6.H:316
amrex::Real m_bvtg2
Definition: ERF_WDM6.H:317
amrex::Real m_roqimax
Definition: ERF_WDM6.H:311
amrex::Real m_g5pbso2
Definition: ERF_WDM6.H:314
amrex::Real m_g4pbg
Definition: ERF_WDM6.H:318
amrex::Real m_deng
Definition: ERF_WDM6.H:299
int Qmoist_Size() override
Definition: ERF_WDM6.H:249
bool m_do_cond
Definition: ERF_WDM6.H:284
amrex::Real m_eacrr
Definition: ERF_WDM6.H:310
static constexpr amrex::Real dimax
Definition: ERF_WDM6.H:184
amrex::Real m_g7pbro2
Definition: ERF_WDM6.H:309
amrex::MultiFab * Qmoist_Ptr(const int &varIdx) override
Definition: ERF_WDM6.H:243
static constexpr amrex::Real actk
Definition: ERF_WDM6.H:197
static constexpr amrex::Real pfrz2
Definition: ERF_WDM6.H:186
amrex::Real m_precs1
Definition: ERF_WDM6.H:315
static constexpr amrex::Real satmax
Definition: ERF_WDM6.H:196
static constexpr amrex::Real n0smax
Definition: ERF_WDM6.H:193
amrex::Real m_rsloper2max
Definition: ERF_WDM6.H:323
amrex::Real m_rslopec2max
Definition: ERF_WDM6.H:320
amrex::Real m_bvts2
Definition: ERF_WDM6.H:313
@ p0_comp
Definition: ERF_IndexDefines.H:77
Definition: ERF_WDM6.H:20
@ qr
Definition: ERF_WDM6.H:29
@ qv
Definition: ERF_WDM6.H:26
@ qc
Definition: ERF_WDM6.H:27
@ qi
Definition: ERF_WDM6.H:28
@ graup_accum
Definition: ERF_WDM6.H:37
@ rain_accum
Definition: ERF_WDM6.H:35
@ NumVars
Definition: ERF_WDM6.H:38
@ pres
Definition: ERF_WDM6.H:25
@ nr
Definition: ERF_WDM6.H:34
@ qg
Definition: ERF_WDM6.H:31
@ theta
Definition: ERF_WDM6.H:23
@ qs
Definition: ERF_WDM6.H:30
@ nc
Definition: ERF_WDM6.H:33
@ nn
Definition: ERF_WDM6.H:32
@ rho
Definition: ERF_WDM6.H:22
@ tabs
Definition: ERF_WDM6.H:24
@ snow_accum
Definition: ERF_WDM6.H:36
real(c_double), parameter p0
Definition: ERF_module_model_constants.F90:40
Definition: ERF_MicrophysicsUtils.H:22
amrex::Real pressure_pa
Definition: ERF_MicrophysicsUtils.H:23
amrex::Real temperature
Definition: ERF_MicrophysicsUtils.H:24
Definition: ERF_DataStruct.H:662
MoistureType moisture_type
Moisture or microphysics model.
Definition: ERF_DataStruct.H:2237
int ave_plane
Averaging plane index used by diagnostics.
Definition: ERF_DataStruct.H:2260
amrex::Real rdOcp
Ratio of dry-air gas constant to c_p.
Definition: ERF_DataStruct.H:2062
bool uses_shoc_family() const noexcept
Query whether any SHOC-family PBL scheme is active.
Definition: ERF_DataStruct.H:2177
Definition: ERF_SurfacePrecipitation.H:34
SurfacePrecipAccumulationSource snow
Definition: ERF_SurfacePrecipitation.H:37
SurfacePrecipAccumulationSource total
Definition: ERF_SurfacePrecipitation.H:35
SurfacePrecipAccumulationSource graupel
Definition: ERF_SurfacePrecipitation.H:38