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