ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_SAM.H
Go to the documentation of this file.
1 /*
2  * Implementation 1-moment microphysics model
3  * NOTE: this model is based on the SAM code, and the Klemp's paper
4  * 1): Joseph, Klemp, the simulation of three-dimensional convective storm dynamics,
5  * Journal of the atmospheric sciences, vol35, p1070
6  * 2): Marat Khairoutdinov and David Randall, cloud resolving modeling of the ARM summer 1997 IOP:
7  * model formulation, results, uncertainties, and sensitivities, Journal of the atmospheric sciences, vol60, p607
8  */
9 #ifndef ERF_SAM_H
10 #define ERF_SAM_H
11 
12 #include <string>
13 #include <vector>
14 #include <memory>
15 
16 #include <AMReX_FArrayBox.H>
17 #include <AMReX_Geometry.H>
18 #include <AMReX_TableData.H>
19 #include <AMReX_MultiFabUtil.H>
20 
21 #include "ERF_Constants.H"
23 #include "ERF_MicrophysicsUtils.H"
24 #include "ERF_IndexDefines.H"
25 #include "ERF_DataStruct.H"
26 #include "ERF_NullMoist.H"
27 #include "ERF_SAMUtils.H"
29 
30 namespace MicVar {
31  enum {
32  // independent variables
33  rho=0, // density
34  theta, // liquid/ice water potential temperature
35  tabs, // temperature
36  pres, // pressure
37  // non-precipitating vars
38  qt, // total cloud
39  qn, // cloud condensate (liquid + ice)
40  qv, // cloud vapor
41  qcl, // cloud water
42  qci, // cloud ice
43  // precipitating vars
44  qp, // total precip
45  qpr, // precip rain
46  qps, // precip ice
47  qpg, // graupel
48  // derived vars
52  precip_accum, // everything that reached the ground, mm of liquid water
53  NumVars
54  };
55 }
56 
57 class SAM : public NullMoist {
58 
59  using FabPtr = std::shared_ptr<amrex::MultiFab>;
60 
61 public:
62  // constructor
63  SAM () {}
64 
65  // destructor
66  virtual ~SAM () = default;
67 
68  // cloud physics
69  void Cloud (const SolverChoice& sc);
70 
71  // ice physics
72  void IceFall (const SolverChoice& sc);
73 
74  // precip
75  void Precip (const SolverChoice& sc);
76 
77  // precip fall
78  void PrecipFall (const SolverChoice& sc);
79 
80  // Set up for first time
81  void
82  Define (SolverChoice& sc) override
83  {
85  m_fac_cond = lcond / sc.c_p;
86  m_fac_fus = lfus / sc.c_p;
87  m_fac_sub = lsub / sc.c_p;
88  m_axis = sc.ave_plane;
89  m_rdOcp = sc.rdOcp;
90  m_do_cond = (!sc.uses_shoc_family());
92  }
93 
94  // init
95  void
96  Init (const amrex::MultiFab& cons_in,
97  const amrex::BoxArray& grids,
98  const amrex::Geometry& geom,
99  const amrex::Real& dt_advance,
100  std::unique_ptr<amrex::MultiFab>& z_phys_nd,
101  std::unique_ptr<amrex::MultiFab>& detJ_cc) override;
102 
103  // Import minimum dz at this level
104  void
105  Set_dzmin (const amrex::Real dz_min) override
106  {
107  m_dzmin = dz_min;
108  }
109 
110  // Copy state into micro vars
111  void
112  Copy_State_to_Micro (const amrex::MultiFab& cons_in) override;
113 
114  void
115  Copy_State_to_Micro (const amrex::MultiFab& cons_in,
116  const amrex::MultiFab* base_state);
117 
118  void
119  Update_Micro_Vars (amrex::MultiFab& cons_in,
120  const amrex::MultiFab* base_state) override;
121 
122  // Copy state into micro vars
123  void
124  Copy_Micro_to_State (amrex::MultiFab& cons_in) override;
125 
126  void
127  Update_Micro_Vars (amrex::MultiFab& cons_in) override
128  {
129  this->Copy_State_to_Micro(cons_in);
131  }
132 
133  void
134  Update_State_Vars (amrex::MultiFab& cons_in,
135  const amrex::MultiFab& /*z_phys_nd*/) override
136  {
137  this->Copy_Micro_to_State(cons_in);
138  }
139 
140  // wrapper to do all the updating
141  void
142  Advance (const amrex::Real& dt_advance,
143  const SolverChoice& sc) override
144  {
145  dt = dt_advance;
146  m_sed.reset(dt_advance);
147 
148  this->Cloud(sc);
149  this->IceFall(sc);
150  this->Precip(sc);
151  this->PrecipFall(sc);
152  }
153 
154  const SedimentationFlux* Sed_Flux () const override { return &m_sed; }
155 
156  amrex::MultiFab*
157  Qmoist_Ptr (const int& varIdx) override
158  {
160  return mic_fab_vars[MicVarMap[varIdx]].get();
161  }
162 
163  const amrex::MultiFab*
164  Qmoist_Ptr (const int& varIdx) const
165  {
167  return mic_fab_vars[MicVarMap[varIdx]].get();
168  }
169 
170  void
171  Compute_Coefficients (bool use_anelastic_reference_pressure = false);
172 
174  CoefficientRowAt (int k) const;
175 
176  int
177  Qmoist_Size () override { return SAM::m_qmoist_size; }
178 
179  int
181 
182  int
184 
185  void
187  std::vector<int>& a_idx,
188  std::vector<std::string>& a_names) const override
189  {
190  a_idx.clear();
191  a_names.clear();
192 
193  // NOTE: These are the indices to access into qmoist (not mic_fab_vars)
194  a_idx.push_back(0); a_names.push_back("RainAccum");
195  a_idx.push_back(1); a_names.push_back("SnowAccum");
196  a_idx.push_back(2); a_names.push_back("GraupAccum");
197  a_idx.push_back(3); a_names.push_back("PrecipAccum");
198  }
199 
201  Get_Surface_Precip_Accumulation_Ptrs (const int&) const override
202  {
203  if (m_moisture_type == MoistureType::SAM_NoPrecip_NoIce) {
204  return {};
205  }
206 
208  // No total is offered: the land and fire couplings take the total where a
209  // scheme offers one and the rain otherwise, and SAM has always given them rain
210  sources.rain = {mic_fab_vars[MicVar::rain_accum].get(), rhor / amrex::Real(1000.0)};
211 
212  if (m_moisture_type == MoistureType::SAM) {
213  sources.snow = {mic_fab_vars[MicVar::snow_accum].get(), rhos / amrex::Real(1000.0)};
214  sources.graupel = {mic_fab_vars[MicVar::graupel_accum].get(), rhog / amrex::Real(1000.0)};
215  }
216 
217  return sources;
218  }
219 
220  AMREX_GPU_HOST_DEVICE
221  AMREX_FORCE_INLINE
222  static amrex::Real
223  NewtonIterSat (int& i, int& j, int& k,
224  const int& SAM_moisture_type,
225  const amrex::Real& fac_cond,
226  const amrex::Real& fac_fus,
227  const amrex::Real& /*fac_sub*/,
228  const amrex::Real& an,
229  const amrex::Real& bn,
230  const amrex::Array4<amrex::Real>& tabs_array,
231  const amrex::Array4<amrex::Real>& pres_array,
232  const amrex::Array4<amrex::Real>& qv_array,
233  const amrex::Array4<amrex::Real>& qc_array,
234  const amrex::Array4<amrex::Real>& qi_array,
235  const amrex::Array4<amrex::Real>& qn_array,
236  const amrex::Array4<amrex::Real>& qt_array)
237  {
238  // Solution tolerance
239 #ifdef AMREX_USE_FLOAT
240  constexpr amrex::Real tol = amrex::Real(1.e-4);
241 #else
242  constexpr amrex::Real tol = amrex::Real(1.e-8);
243 #endif
244  constexpr int max_iter = 20;
245 
246  // Saturation moisture fractions
247  amrex::Real omn, domn;
248  amrex::Real qsatm, dqsatm;
249  amrex::Real qsatw, dqsatw;
250  amrex::Real qsati, dqsati;
251  amrex::Real qn, qif, dqif;
252 
253  // Newton iteration vars
254  int niter = 0;
255  amrex::Real F, dFdT;
256 
257  //=======================================================================
258  // Mixed-phase Newton iteration to qv=qsat (cloud phase only)
259  //=======================================================================
260 
261  // Initial guess for temperature & pressure
262  amrex::Real tabs = tabs_array(i,j,k);
263  amrex::Real pres = pres_array(i,j,k);
264 
265  // Mixed saturation moisture fractions
268  omn = sam_cloud_liquid_fraction(SAM_moisture_type, tabs, an, bn);
269  qsatm = sam_mixed_qsat(omn, qsatw, qsati);
270 
271  // Saturation derivative WRT temperature
272  domn = zero;
273  if ( (SAM_moisture_type == 1) &&
274  (tabs < tbgmax) && (tabs > tbgmin) ) {
275  domn = an;
276  }
277  erf_dtqsatw(tabs, pres, dqsatw);
278  erf_dtqsati(tabs, pres, dqsati);
279  dqsatm = sam_mixed_dqsat_dT(omn, domn, qsatw, qsati, dqsatw, dqsati);
280 
281  // Enforce omega splitting
282  qn = (qt_array(i,j,k) - qsatm);
283  qif = qn * (one - omn);
284  dqif = sam_mixed_dqif_dT(omn, domn, qn, dqsatm);
285 
286  // Function for root finding (conserve latent proxy):
287  // 0 = -T_new + T_old + L_v/C_p * (qv,0 - qs,m) - L_f/C_p * (qi,0 - qi,f)
288  F = sam_newton_residual(tabs, tabs_array(i,j,k),
289  fac_cond, qv_array(i,j,k), qsatm,
290  fac_fus , qi_array(i,j,k), qif );
291  while (std::abs(F) > tol && niter < max_iter) {
292  // Derivative of function (T_new iterated on)
293  dFdT = sam_newton_residual_derivative(fac_cond, fac_fus, dqsatm, dqif);
294 
295  // Update the temperature
296  tabs -= F/dFdT;
297 
298  // Mixed saturation moisture fractions
301  omn = sam_cloud_liquid_fraction(SAM_moisture_type, tabs, an, bn);
302  qsatm = sam_mixed_qsat(omn, qsatw, qsati);
303 
304  // Saturation derivative WRT temperature
305  domn = zero;
306  if ( (SAM_moisture_type == 1) &&
307  (tabs < tbgmax) && (tabs > tbgmin) ) {
308  domn = an;
309  }
310  erf_dtqsatw(tabs, pres, dqsatw);
311  erf_dtqsati(tabs, pres, dqsati);
312  dqsatm = sam_mixed_dqsat_dT(omn, domn, qsatw, qsati, dqsatw, dqsati);
313 
314  // Enforce omega splitting
315  qn = (qt_array(i,j,k) - qsatm);
316  qif = qn * (one - omn);
317  dqif = sam_mixed_dqif_dT(omn, domn, qn, dqsatm);
318 
319  // Function for root finding (conserve latent proxy):
320  // 0 = -T_new + T_old + L_v/C_p * (qv,0 - qs,m) - L_f/C_p * (qi,0 - qi,f)
321  F = sam_newton_residual(tabs, tabs_array(i,j,k),
322  fac_cond, qv_array(i,j,k), qsatm,
323  fac_fus , qi_array(i,j,k), qif );
324 
325  // Update iteration
326  ++niter;
327  }
328 
329  // NOTE: the while loop already enforces the iteration limit, so the
330  // residual alone determines whether we found a valid root; testing
331  // niter < max_iter here would spuriously fail a solve that
332  // converged on exactly the last allowed iteration.
333  bool valid_solution = (std::abs(F) <= tol);
334  AMREX_ALWAYS_ASSERT_WITH_MESSAGE(valid_solution, "SAM mixed phase saturation adjustment failed to converge.");
335 
336  // Partition the change in non-precipitating q
337  qv_array(i,j,k) = qsatm;
338  qc_array(i,j,k) = qn * omn;
339  qi_array(i,j,k) = qn * (one - omn);
340  qn_array(i,j,k) = qn;
341  qt_array(i,j,k) = qv_array(i,j,k) + qn_array(i,j,k);
342 
343  // Return to temperature
344  return tabs;
345  }
346 
347 private:
348  // Number of qmoist variables (rain_accum, snow_accum, graupel_accum, precip_accum)
349  int m_qmoist_size = 4;
350 
351  // Number of qstate variables
353 
354  // Number of qstate variables that are number concentrations
356 
357  // CFL MAX for vertical advection
358  static constexpr amrex::Real CFL_MAX = myhalf;
359 
360  // MicVar map (Qmoist indices -> MicVar enum)
361  amrex::Vector<int> MicVarMap;
362 
363  // geometry
364  amrex::Geometry m_geom;
365 
366  // timestep
368 
369  // number of vertical levels
370  int nlev, zlo, zhi;
371 
372  // plane average axis
373  int m_axis;
374 
375  // constants
380  bool m_do_cond;
382 
383  // Minimum dz at this level
384  amrex::Real m_dzmin{0.0}; // set by Set_dzmin; the fall routines assert it is positive
385 
386  // Pointer to terrain data
387  amrex::MultiFab* m_z_phys_nd;
388  amrex::MultiFab* m_detJ_cc;
389 
390  // independent variables
391  amrex::Array<FabPtr, MicVar::NumVars> mic_fab_vars;
392 
393  // Sedimentation face fluxes of the most recent Advance: rain, snow and graupel
394  // (PrecipFall, rhoQ4-6) and cloud ice (IceFall, rhoQ3)
396 
397  // microphysics parameters/coefficients
398  amrex::TableData<amrex::Real, 1> accrrc;
399  amrex::TableData<amrex::Real, 1> accrsi;
400  amrex::TableData<amrex::Real, 1> accrsc;
401  amrex::TableData<amrex::Real, 1> coefice;
402  amrex::TableData<amrex::Real, 1> evaps1;
403  amrex::TableData<amrex::Real, 1> evaps2;
404  amrex::TableData<amrex::Real, 1> accrgi;
405  amrex::TableData<amrex::Real, 1> accrgc;
406  amrex::TableData<amrex::Real, 1> evapg1;
407  amrex::TableData<amrex::Real, 1> evapg2;
408  amrex::TableData<amrex::Real, 1> evapr1;
409  amrex::TableData<amrex::Real, 1> evapr2;
410 
411  // vertical plane average data
412  amrex::TableData<amrex::Real, 1> rho1d;
413  amrex::TableData<amrex::Real, 1> pres1d;
414  amrex::TableData<amrex::Real, 1> tabs1d;
415  amrex::TableData<amrex::Real, 1> qt1d;
416  amrex::TableData<amrex::Real, 1> qv1d;
417  amrex::TableData<amrex::Real, 1> qn1d;
418 };
419 #endif
constexpr amrex::Real RdoCp
Definition: ERF_Constants.H:57
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(axis >=0 &&axis< AMREX_SPACEDIM, "prob.axis must be 0, 1 or 2")
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 rhog
Definition: ERF_MicrophysicsConstants.H:41
constexpr amrex::Real lfus
Definition: ERF_MicrophysicsConstants.H:110
constexpr amrex::Real tbgmax
Definition: ERF_MicrophysicsConstants.H:49
constexpr amrex::Real lsub
Definition: ERF_MicrophysicsConstants.H:111
constexpr amrex::Real lcond
Definition: ERF_MicrophysicsConstants.H:109
constexpr amrex::Real tbgmin
Definition: ERF_MicrophysicsConstants.H:48
constexpr amrex::Real rhos
Definition: ERF_MicrophysicsConstants.H:40
constexpr amrex::Real rhor
Definition: ERF_MicrophysicsConstants.H:39
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_dtqsatw(amrex::Real t, amrex::Real p, amrex::Real &dtqsatw)
Definition: ERF_MicrophysicsUtils.H:280
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_dtqsati(amrex::Real t, amrex::Real p, amrex::Real &dtqsati)
Definition: ERF_MicrophysicsUtils.H:271
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_qsatw(amrex::Real t, amrex::Real p, amrex::Real &qsatw)
Definition: ERF_MicrophysicsUtils.H:264
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void erf_qsati(amrex::Real t, amrex::Real p, amrex::Real &qsati)
Definition: ERF_MicrophysicsUtils.H:254
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:37
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:36
constexpr amrex::Real myhalf
Definition: ERF_NumericalConstants.H:41
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_newton_residual(const amrex::Real &tabs_new, const amrex::Real &tabs_old, const amrex::Real fcond, const amrex::Real &qv, const amrex::Real &qsatm, const amrex::Real ffus, const amrex::Real &qi, const amrex::Real &qif) noexcept
Definition: ERF_SAMUtils.H:477
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_mixed_dqif_dT(const amrex::Real &omn, const amrex::Real &domn, const amrex::Real &qn, const amrex::Real &dqsatm) noexcept
Definition: ERF_SAMUtils.H:467
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_newton_residual_derivative(const amrex::Real fcond, const amrex::Real ffus, const amrex::Real &dqsatm, const amrex::Real &dqif) noexcept
Definition: ERF_SAMUtils.H:491
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_cloud_liquid_fraction(const int &SAM_moisture_type, const amrex::Real &tabs, const amrex::Real an, const amrex::Real bn) noexcept
Definition: ERF_SAMUtils.H:346
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_mixed_qsat(const amrex::Real &omn, const amrex::Real &qsatw, const amrex::Real &qsati) noexcept
Definition: ERF_SAMUtils.H:445
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real sam_mixed_dqsat_dT(const amrex::Real &omn, const amrex::Real &domn, const amrex::Real &qsatw, const amrex::Real &qsati, const amrex::Real &dqsatw, const amrex::Real &dqsati) noexcept
Definition: ERF_SAMUtils.H:454
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_NullMoist.H:11
void set_anelastic_reference_pressure_mode(const SolverChoice &sc)
Definition: ERF_NullMoist.H:171
bool m_use_anelastic_reference_pressure
Definition: ERF_NullMoist.H:191
Definition: ERF_SAM.H:57
void Copy_Micro_to_State(amrex::MultiFab &cons_in) override
Definition: ERF_UpdateSAM.cpp:15
void Advance(const amrex::Real &dt_advance, const SolverChoice &sc) override
Definition: ERF_SAM.H:142
int zlo
Definition: ERF_SAM.H:370
void Precip(const SolverChoice &sc)
Definition: ERF_Precip.cpp:12
amrex::TableData< amrex::Real, 1 > rho1d
Definition: ERF_SAM.H:412
amrex::TableData< amrex::Real, 1 > evapr2
Definition: ERF_SAM.H:409
SAM()
Definition: ERF_SAM.H:63
amrex::MultiFab * m_detJ_cc
Definition: ERF_SAM.H:388
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_SAM.H:154
void Copy_State_to_Micro(const amrex::MultiFab &cons_in) override
int n_qstate_moist_numconc_size
Definition: ERF_SAM.H:355
void Update_State_Vars(amrex::MultiFab &cons_in, const amrex::MultiFab &) override
Definition: ERF_SAM.H:134
amrex::TableData< amrex::Real, 1 > evapg1
Definition: ERF_SAM.H:406
SurfacePrecipAccumulationSources Get_Surface_Precip_Accumulation_Ptrs(const int &) const override
Definition: ERF_SAM.H:201
void Update_Micro_Vars(amrex::MultiFab &cons_in) override
Definition: ERF_SAM.H:127
amrex::TableData< amrex::Real, 1 > accrgi
Definition: ERF_SAM.H:404
std::shared_ptr< amrex::MultiFab > FabPtr
Definition: ERF_SAM.H:59
virtual ~SAM()=default
amrex::TableData< amrex::Real, 1 > evapg2
Definition: ERF_SAM.H:407
void IceFall(const SolverChoice &sc)
Definition: ERF_IceFall.cpp:13
amrex::Array< FabPtr, MicVar::NumVars > mic_fab_vars
Definition: ERF_SAM.H:391
int m_axis
Definition: ERF_SAM.H:373
void Compute_Coefficients(bool use_anelastic_reference_pressure=false)
Definition: ERF_InitSAM.cpp:157
amrex::Real m_rdOcp
Definition: ERF_SAM.H:379
MoistureType m_moisture_type
Definition: ERF_SAM.H:381
void Cloud(const SolverChoice &sc)
Definition: ERF_CloudSAM.cpp:14
int m_qmoist_size
Definition: ERF_SAM.H:349
amrex::MultiFab * m_z_phys_nd
Definition: ERF_SAM.H:387
amrex::Real m_fac_fus
Definition: ERF_SAM.H:377
amrex::TableData< amrex::Real, 1 > evaps1
Definition: ERF_SAM.H:402
void Update_Micro_Vars(amrex::MultiFab &cons_in, const amrex::MultiFab *base_state) override
amrex::Vector< int > MicVarMap
Definition: ERF_SAM.H:361
bool m_do_cond
Definition: ERF_SAM.H:380
amrex::TableData< amrex::Real, 1 > qv1d
Definition: ERF_SAM.H:416
amrex::Real m_fac_cond
Definition: ERF_SAM.H:376
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real NewtonIterSat(int &i, int &j, int &k, const int &SAM_moisture_type, const amrex::Real &fac_cond, const amrex::Real &fac_fus, const amrex::Real &, const amrex::Real &an, const amrex::Real &bn, const amrex::Array4< amrex::Real > &tabs_array, const amrex::Array4< amrex::Real > &pres_array, const amrex::Array4< amrex::Real > &qv_array, const amrex::Array4< amrex::Real > &qc_array, const amrex::Array4< amrex::Real > &qi_array, const amrex::Array4< amrex::Real > &qn_array, const amrex::Array4< amrex::Real > &qt_array)
Definition: ERF_SAM.H:223
const amrex::MultiFab * Qmoist_Ptr(const int &varIdx) const
Definition: ERF_SAM.H:164
amrex::TableData< amrex::Real, 1 > accrsi
Definition: ERF_SAM.H:399
amrex::TableData< amrex::Real, 1 > accrrc
Definition: ERF_SAM.H:398
amrex::TableData< amrex::Real, 1 > pres1d
Definition: ERF_SAM.H:413
int nlev
Definition: ERF_SAM.H:370
int Qstate_Moist_Size() override
Definition: ERF_SAM.H:180
amrex::Geometry m_geom
Definition: ERF_SAM.H:364
amrex::TableData< amrex::Real, 1 > evapr1
Definition: ERF_SAM.H:408
amrex::Real m_fac_sub
Definition: ERF_SAM.H:378
void Copy_State_to_Micro(const amrex::MultiFab &cons_in, const amrex::MultiFab *base_state)
SedimentationFlux m_sed
Definition: ERF_SAM.H:395
amrex::TableData< amrex::Real, 1 > evaps2
Definition: ERF_SAM.H:403
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_InitSAM.cpp:38
void Set_dzmin(const amrex::Real dz_min) override
Definition: ERF_SAM.H:105
amrex::TableData< amrex::Real, 1 > qn1d
Definition: ERF_SAM.H:417
amrex::TableData< amrex::Real, 1 > accrgc
Definition: ERF_SAM.H:405
amrex::TableData< amrex::Real, 1 > accrsc
Definition: ERF_SAM.H:400
int n_qstate_moist_size
Definition: ERF_SAM.H:352
amrex::TableData< amrex::Real, 1 > qt1d
Definition: ERF_SAM.H:415
amrex::TableData< amrex::Real, 1 > coefice
Definition: ERF_SAM.H:401
int zhi
Definition: ERF_SAM.H:370
static constexpr amrex::Real CFL_MAX
Definition: ERF_SAM.H:358
void Define(SolverChoice &sc) override
Definition: ERF_SAM.H:82
void Qmoist_Restart_Vars(const SolverChoice &, std::vector< int > &a_idx, std::vector< std::string > &a_names) const override
Definition: ERF_SAM.H:186
int Qmoist_Size() override
Definition: ERF_SAM.H:177
SAMCoefficientRow CoefficientRowAt(int k) const
Definition: ERF_InitSAM.cpp:275
void PrecipFall(const SolverChoice &sc)
Definition: ERF_PrecipFall.cpp:19
amrex::TableData< amrex::Real, 1 > tabs1d
Definition: ERF_SAM.H:414
amrex::MultiFab * Qmoist_Ptr(const int &varIdx) override
Definition: ERF_SAM.H:157
int Qstate_Moist_NumConc_Size() override
Definition: ERF_SAM.H:183
amrex::Real dt
Definition: ERF_SAM.H:367
amrex::Real m_dzmin
Definition: ERF_SAM.H:384
@ None
Definition: ERF_LSM_Types.H:6
Definition: ERF_SAM.H:30
@ NumVars
Definition: ERF_SAM.H:53
@ pres
Definition: ERF_SAM.H:36
@ qpr
Definition: ERF_SAM.H:45
@ qci
Definition: ERF_SAM.H:42
@ qv
Definition: ERF_SAM.H:40
@ rho
Definition: ERF_SAM.H:33
@ snow_accum
Definition: ERF_SAM.H:50
@ qpg
Definition: ERF_SAM.H:47
@ qt
Definition: ERF_SAM.H:38
@ precip_accum
Definition: ERF_SAM.H:52
@ qn
Definition: ERF_SAM.H:39
@ rain_accum
Definition: ERF_SAM.H:49
@ theta
Definition: ERF_SAM.H:34
@ qcl
Definition: ERF_SAM.H:41
@ tabs
Definition: ERF_SAM.H:35
@ graupel_accum
Definition: ERF_SAM.H:51
@ qps
Definition: ERF_SAM.H:46
@ qp
Definition: ERF_SAM.H:44
@ qsatw
Definition: ERF_WSM6.H:361
@ qsati
Definition: ERF_WSM6.H:361
Definition: ERF_SAMUtils.H:99
Definition: ERF_SedimentationFlux.H:38
void reset(amrex::Real a_dt)
Zero the fluxes at the start of an Advance of length a_dt.
Definition: ERF_SedimentationFlux.H:57
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
amrex::Real c_p
Specific heat at constant pressure for dry air [J/(kg-K)].
Definition: ERF_DataStruct.H:2737
Definition: ERF_SurfacePrecipitation.H:34
SurfacePrecipAccumulationSource rain
Definition: ERF_SurfacePrecipitation.H:36
SurfacePrecipAccumulationSource snow
Definition: ERF_SurfacePrecipitation.H:37
SurfacePrecipAccumulationSource graupel
Definition: ERF_SurfacePrecipitation.H:38