ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
MoistureComponentIndices Struct Reference

The moisture data carried by the active microphysics scheme. More...

#include <ERF_DataStruct.H>

Collaboration diagram for MoistureComponentIndices:

Classes

struct  CompList
 An ordered list of conserved-state components forming an aggregate moisture output variable (qt, qn, qp, moist_density). More...
 
struct  VarAvailability
 Whether this map decides a variable's availability, and if so whether the variable is available. More...
 

Public Member Functions

 MoistureComponentIndices (int qv_comp, int qc_comp, int qi_comp=absent, int qr_comp=absent, int qs_comp=absent, int qg_comp=absent, int nc_comp=absent, int ni_comp=absent, int nr_comp=absent, int ns_comp=absent, int ng_comp=absent, int nn_comp=absent)
 Construct the conserved-state component map. More...
 
 MoistureComponentIndices ()=default
 Construct an empty map, i.e. a dry run. More...
 
CompList total_water_comps () const
 Components summed for total water, "qt": every mass mixing ratio. More...
 
CompList nonprecipitating_comps () const
 Components summed for non-precipitating water, "qn": vapor plus the suspended condensate. Also the moist part of "moist_density". More...
 
CompList precipitating_comps () const
 Components summed for precipitating water, "qp": the falling species. More...
 
bool has_comp (int comp) const
 Test whether a conserved-state component holds one of the moisture variables this scheme carries. More...
 
bool has_reflectivity_species () const
 Test whether the active scheme carries rain, snow and graupel in the RhoQ4/RhoQ5/RhoQ6 slots assumed by erf_derreflectivity and erf_dermaxreflectivity. More...
 
bool has_moisture () const
 Test whether the active scheme carries any moisture at all. More...
 
int comp_for_var (const std::string &name) const
 The conserved-state component behind a single-species output name, or absent if the name is not a single species or the scheme does not carry it. More...
 
int qmoist_index_for_var (const std::string &name) const
 The qmoist slot behind a moist diagnostic output name. More...
 
VarAvailability query_var (const std::string &name) const
 Classify an output variable name against this index map. More...
 
bool has_derived_var (const std::string &name) const
 Test whether the moist species behind a derived/plot variable name is carried by the active scheme. More...
 

Static Public Member Functions

static MoistureComponentIndices from_moisture_model (const MoistureType moisture_type)
 Build the complete index map – conserved-state components and qmoist diagnostic slots – for a moisture model. More...
 

Public Attributes

int qv = absent
 water vapor More...
 
int qc = absent
 cloud liquid water More...
 
int qi = absent
 cloud ice More...
 
int qr = absent
 rain More...
 
int qs = absent
 snow More...
 
int qg = absent
 graupel More...
 
int nc = absent
 cloud liquid water number More...
 
int ni = absent
 cloud ice number More...
 
int nr = absent
 rain number More...
 
int ns = absent
 snow number More...
 
int ng = absent
 graupel number More...
 
int nn = absent
 CCN / total aerosol number. More...
 
int rain_accum = absent
 accumulated surface rain More...
 
int snow_accum = absent
 accumulated surface snow More...
 
int graup_accum = absent
 accumulated surface graupel More...
 
int rel_hum = absent
 relative humidity More...
 
int cond_rate = absent
 condensation rate More...
 

Static Public Attributes

static constexpr int absent = -1
 not carried by the active scheme More...
 
static constexpr int computed_from_state = -2
 

Detailed Description

The moisture data carried by the active microphysics scheme.

This struct is the single source of truth for the question "which moisture quantities does this run actually have?". Everything downstream of the microphysics – source terms, turbulence closures, and every output path (3D plotfiles, 2D plotfiles, subvolumes) – answers that question by querying this struct instead of enumerating MoistureType values, so a newly added scheme only has to declare its layout once, in from_moisture_model() below.

Two kinds of index live here:

  1. Conserved-state components (qv ... nn). Absolute component indices into the conserved state array, i.e. one of RhoQ1_comp ... RhoQ11_comp. They name the rho-weighted species: state(i,j,k,qv) is rho*qv, so an output path must divide by Rho_comp to recover the mixing ratio.
  2. qmoist diagnostic slots (rain_accum ... cond_rate). Indices into the per-level qmoist vector that is filled from Microphysics::Get_Qmoist_Ptr(lev,idx). Each scheme chooses that layout independently, so the slot numbers differ between schemes and are recorded per scheme below.

In both cases the value is absent when the active scheme does not carry the quantity, so index >= 0 is the criterion for "this exists and is meaningful to write". That is deliberately not the same test as "the storage is allocated": several schemes allocate a wider state than they integrate (the Morrison class always allocates eleven moist components, so Morrison_NoIce owns ice slots it never fills), and writing those slots to a plotfile would publish untouched memory as if it were data.

Constructor & Destructor Documentation

◆ MoistureComponentIndices() [1/2]

MoistureComponentIndices::MoistureComponentIndices ( int  qv_comp,
int  qc_comp,
int  qi_comp = absent,
int  qr_comp = absent,
int  qs_comp = absent,
int  qg_comp = absent,
int  nc_comp = absent,
int  ni_comp = absent,
int  nr_comp = absent,
int  ns_comp = absent,
int  ng_comp = absent,
int  nn_comp = absent 
)
inline

Construct the conserved-state component map.

Prefer from_moisture_model() for production code: it fills in the qmoist diagnostic slots as well. This constructor exists for the callers – unit tests and kernels exercised in isolation – that only need the state map.

Parameters
qv_compWater vapor component index.
qc_compCloud liquid water component index.
qi_compCloud ice component index.
qr_compRain component index.
qs_compSnow component index.
qg_compGraupel component index.
nc_compCloud liquid water number concentration component index.
ni_compCloud ice number concentration component index.
nr_compRain number concentration component index.
ns_compSnow number concentration component index.
ng_compGraupel number concentration component index.
nn_compCCN / total aerosol number concentration component index.
315  : qv(qv_comp), qc(qc_comp), qi(qi_comp), qr(qr_comp), qs(qs_comp), qg(qg_comp),
316  nc(nc_comp), ni(ni_comp), nr(nr_comp), ns(ns_comp), ng(ng_comp),
317  nn(nn_comp) {}
int nc
cloud liquid water number
Definition: ERF_DataStruct.H:259
int qs
snow
Definition: ERF_DataStruct.H:253
int nn
CCN / total aerosol number.
Definition: ERF_DataStruct.H:269
int qr
rain
Definition: ERF_DataStruct.H:252
int qi
cloud ice
Definition: ERF_DataStruct.H:251
int ni
cloud ice number
Definition: ERF_DataStruct.H:260
int qv
water vapor
Definition: ERF_DataStruct.H:249
int nr
rain number
Definition: ERF_DataStruct.H:261
int qc
cloud liquid water
Definition: ERF_DataStruct.H:250
int ng
graupel number
Definition: ERF_DataStruct.H:263
int qg
graupel
Definition: ERF_DataStruct.H:254
int ns
snow number
Definition: ERF_DataStruct.H:262

◆ MoistureComponentIndices() [2/2]

MoistureComponentIndices::MoistureComponentIndices ( )
default

Construct an empty map, i.e. a dry run.

Member Function Documentation

◆ comp_for_var()

int MoistureComponentIndices::comp_for_var ( const std::string &  name) const
inline

The conserved-state component behind a single-species output name, or absent if the name is not a single species or the scheme does not carry it.

An output path can use this to copy a species without repeating the name-to-component mapping.

Parameters
nameDerived or plot variable name.
576  {
577  if (name == "qv") { return qv; }
578  if (name == "qc") { return qc; }
579  if (name == "qi") { return qi; }
580  if (name == "qrain") { return qr; }
581  if (name == "qsnow") { return qs; }
582  if (name == "qgraup") { return qg; }
583  if (name == "nc") { return nc; }
584  if (name == "ni") { return ni; }
585  if (name == "nr") { return nr; }
586  if (name == "ns") { return ns; }
587  if (name == "ng") { return ng; }
588  if (name == "nn") { return nn; }
589  return absent;
590  }
std::string name
Definition: ERF_Plotfile2DCatalog.cpp:105
static constexpr int absent
not carried by the active scheme
Definition: ERF_DataStruct.H:241

Referenced by ERF::FillPlot3DVars(), and query_var().

Here is the caller graph for this function:

◆ from_moisture_model()

static MoistureComponentIndices MoistureComponentIndices::from_moisture_model ( const MoistureType  moisture_type)
inlinestatic

Build the complete index map – conserved-state components and qmoist diagnostic slots – for a moisture model.

This is the one place a scheme declares what it carries. The conserved layout must match the component the scheme reads and writes in its Copy_State_to_Micro / Copy_Micro_to_State pair, and the qmoist slots must match the order the scheme installs in its MicVarMap. A slot that a scheme allocates but never fills is left absent on purpose: see the class comment for why allocation is not the criterion here.

Parameters
moisture_typeActive moisture/microphysics model.
339  {
341 
342  switch (moisture_type) {
343 
344  case MoistureType::None:
345  // Dry: no moisture data of any kind.
346  break;
347 
348  case MoistureType::MoistNoCondensation:
349  case MoistureType::SAM_NoPrecip_NoIce:
350  case MoistureType::Kessler_NoRain:
351  // Vapor plus suspended cloud water, no precipitation and no
352  // accumulation diagnostics.
353  mi.qv = RhoQ1_comp;
354  mi.qc = RhoQ2_comp;
355  break;
356 
357  case MoistureType::SatAdj:
358  // As above, but relative humidity is recovered from the state at
359  // output time rather than stored: SatAdj publishes no qmoist arrays.
360  mi.qv = RhoQ1_comp;
361  mi.qc = RhoQ2_comp;
363  break;
364 
365  case MoistureType::Kessler:
366  // Warm rain in three moist components; qmoist is {rain_accum}.
367  mi.qv = RhoQ1_comp;
368  mi.qc = RhoQ2_comp;
369  mi.qr = RhoQ3_comp;
370  mi.rain_accum = 0;
371  break;
372 
373  case MoistureType::SBM:
374  // SBM stores the distribution in an auxiliary state. These two
375  // compact liquid lanes are projections for host compatibility.
376  mi.qv = RhoQ1_comp;
377  mi.qc = RhoQ2_comp;
378  mi.qr = RhoQ3_comp;
379  break;
380 
381  case MoistureType::SAM_NoIce:
382  // The SAM class always allocates six moist components, so rain sits
383  // in the fourth slot even with the ice species switched off.
384  mi.qv = RhoQ1_comp;
385  mi.qc = RhoQ2_comp;
386  mi.qr = RhoQ4_comp;
387  mi.rain_accum = 0;
388  break;
389 
390  case MoistureType::SAM:
391  case MoistureType::WSM6:
392  // Single-moment mixed phase; qmoist is
393  // {rain_accum, snow_accum, graup_accum}.
394  mi.qv = RhoQ1_comp;
395  mi.qc = RhoQ2_comp;
396  mi.qi = RhoQ3_comp;
397  mi.qr = RhoQ4_comp;
398  mi.qs = RhoQ5_comp;
399  mi.qg = RhoQ6_comp;
400  mi.rain_accum = 0;
401  mi.snow_accum = 1;
402  mi.graup_accum = 2;
403  break;
404 
405  case MoistureType::Morrison:
406  // Two-moment mixed phase: six mass species followed by five number
407  // concentrations.
408  mi.qv = RhoQ1_comp;
409  mi.qc = RhoQ2_comp;
410  mi.qi = RhoQ3_comp;
411  mi.qr = RhoQ4_comp;
412  mi.qs = RhoQ5_comp;
413  mi.qg = RhoQ6_comp;
414  mi.nc = RhoQ7_comp;
415  mi.ni = RhoQ8_comp;
416  mi.nr = RhoQ9_comp;
417  mi.ns = RhoQ10_comp;
418  mi.ng = RhoQ11_comp;
419  mi.rain_accum = 0;
420  mi.snow_accum = 1;
421  mi.graup_accum = 2;
422  break;
423 
424  case MoistureType::Morrison_NoIce:
425  // Liquid-only Morrison: the class still allocates all eleven moist
426  // components, but only vapor, cloud water and rain -- and the cloud
427  // and rain numbers -- are integrated, so the frozen species and
428  // their numbers stay absent here.
429  mi.qv = RhoQ1_comp;
430  mi.qc = RhoQ2_comp;
431  mi.qr = RhoQ4_comp;
432  mi.nc = RhoQ7_comp;
433  mi.nr = RhoQ9_comp;
434  mi.rain_accum = 0;
435  break;
436 
437  case MoistureType::WDM6:
438  // Double-moment warm phase on top of single-moment ice: nn is the
439  // aerosol reservoir and takes the slot Morrison uses for ice number,
440  // and there are no snow or graupel numbers.
441  mi.qv = RhoQ1_comp;
442  mi.qc = RhoQ2_comp;
443  mi.qi = RhoQ3_comp;
444  mi.qr = RhoQ4_comp;
445  mi.qs = RhoQ5_comp;
446  mi.qg = RhoQ6_comp;
447  mi.nc = RhoQ7_comp;
448  mi.nn = RhoQ8_comp;
449  mi.nr = RhoQ9_comp;
450  mi.rain_accum = 0;
451  mi.snow_accum = 1;
452  mi.graup_accum = 2;
453  break;
454 
455  case MoistureType::SuperDroplets:
456  // Lagrangian microphysics that still carries the six Eulerian mass
457  // species. Its qmoist layout is its own (see the MicVarMap in
458  // SuperDropletsMoist::Init): the graupel accumulation slot exists
459  // but is never filled, so it stays absent.
460  mi.qv = RhoQ1_comp;
461  mi.qc = RhoQ2_comp;
462  mi.qi = RhoQ3_comp;
463  mi.qr = RhoQ4_comp;
464  mi.qs = RhoQ5_comp;
465  mi.qg = RhoQ6_comp;
466  mi.cond_rate = 3;
467  mi.rel_hum = 7;
468  mi.rain_accum = 8;
469  mi.snow_accum = 10;
470  break;
471 
472  default:
473  amrex::Abort("Unknown MoistureType in MoistureComponentIndices::from_moisture_model");
474  }
475 
476  return mi;
477  }
#define RhoQ4_comp
Definition: ERF_IndexDefines.H:51
#define RhoQ2_comp
Definition: ERF_IndexDefines.H:49
#define RhoQ3_comp
Definition: ERF_IndexDefines.H:50
#define RhoQ11_comp
Definition: ERF_IndexDefines.H:58
#define RhoQ9_comp
Definition: ERF_IndexDefines.H:56
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:48
#define RhoQ6_comp
Definition: ERF_IndexDefines.H:53
#define RhoQ8_comp
Definition: ERF_IndexDefines.H:55
#define RhoQ5_comp
Definition: ERF_IndexDefines.H:52
#define RhoQ7_comp
Definition: ERF_IndexDefines.H:54
#define RhoQ10_comp
Definition: ERF_IndexDefines.H:57
@ None
Definition: ERF_LSM_Types.H:6
The moisture data carried by the active microphysics scheme.
Definition: ERF_DataStruct.H:238
int cond_rate
condensation rate
Definition: ERF_DataStruct.H:282
int graup_accum
accumulated surface graupel
Definition: ERF_DataStruct.H:280
int rel_hum
relative humidity
Definition: ERF_DataStruct.H:281
static constexpr int computed_from_state
Definition: ERF_DataStruct.H:242
int rain_accum
accumulated surface rain
Definition: ERF_DataStruct.H:278
int snow_accum
accumulated surface snow
Definition: ERF_DataStruct.H:279

Referenced by SolverChoice::init_params().

Here is the caller graph for this function:

◆ has_comp()

bool MoistureComponentIndices::has_comp ( int  comp) const
inline

Test whether a conserved-state component holds one of the moisture variables this scheme carries.

Use this rather than enumerating moisture models when deciding whether a "rhoQn" state component is meaningful for the active scheme.

Parameters
compAbsolute component index into the conserved state array.
538  {
539  return ( (comp >= 0) &&
540  ( (comp == qv) || (comp == qc) || (comp == qi) ||
541  (comp == qr) || (comp == qs) || (comp == qg) ||
542  (comp == nc) || (comp == ni) || (comp == nr) ||
543  (comp == ns) || (comp == ng) || (comp == nn) ) );
544  }

Referenced by erf_plotfile::plot3d_fixed_variable_available().

Here is the caller graph for this function:

◆ has_derived_var()

bool MoistureComponentIndices::has_derived_var ( const std::string &  name) const
inline

Test whether the moist species behind a derived/plot variable name is carried by the active scheme.

Names this map does not govern return true, so this can be used directly as a filter over a mixed list of variable names. Use query_var() instead when the caller needs to distinguish "not a moisture variable" from "available".

Parameters
nameDerived or plot variable name.
675  {
676  const VarAvailability status = query_var(name);
677  return (!status.governed) || status.available;
678  }
VarAvailability query_var(const std::string &name) const
Classify an output variable name against this index map.
Definition: ERF_DataStruct.H:630

Referenced by ERF::setSubVolVariables().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ has_moisture()

bool MoistureComponentIndices::has_moisture ( ) const
inline

Test whether the active scheme carries any moisture at all.

Every moist scheme allocates water vapor, so this is equivalent to testing moisture_type != MoistureType::None without needing the enum.

564 { return (qv >= 0); }

Referenced by ERF::FillPlot3DVars(), query_var(), ERF::setSubVolVariables(), and ERF::WriteSubvolume().

Here is the caller graph for this function:

◆ has_reflectivity_species()

bool MoistureComponentIndices::has_reflectivity_species ( ) const
inline

Test whether the active scheme carries rain, snow and graupel in the RhoQ4/RhoQ5/RhoQ6 slots assumed by erf_derreflectivity and erf_dermaxreflectivity.

Those kernels read the precipitating species by hardcoded component, so this checks the layout and not just the presence of the species.

554  {
555  return ( (qr == RhoQ4_comp) && (qs == RhoQ5_comp) && (qg == RhoQ6_comp) );
556  }

◆ nonprecipitating_comps()

CompList MoistureComponentIndices::nonprecipitating_comps ( ) const
inline

Components summed for non-precipitating water, "qn": vapor plus the suspended condensate. Also the moist part of "moist_density".

514  {
515  CompList list;
516  list.append(qv); list.append(qc); list.append(qi);
517  return list;
518  }

Referenced by ERF::FillPlot3DVars().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ precipitating_comps()

CompList MoistureComponentIndices::precipitating_comps ( ) const
inline

Components summed for precipitating water, "qp": the falling species.

523  {
524  CompList list;
525  list.append(qr); list.append(qs); list.append(qg);
526  return list;
527  }

Referenced by ERF::FillPlot3DVars(), and query_var().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ qmoist_index_for_var()

int MoistureComponentIndices::qmoist_index_for_var ( const std::string &  name) const
inline

The qmoist slot behind a moist diagnostic output name.

Returns absent when the scheme does not provide the diagnostic, and computed_from_state when it does provide it but not through a qmoist array – in that case the caller must derive it from the conserved state.

Parameters
nameDerived or plot variable name.
601  {
602  if (name == "rain_accum") { return rain_accum; }
603  if (name == "snow_accum") { return snow_accum; }
604  if (name == "graup_accum") { return graup_accum; }
605  if (name == "rel_humidity") { return rel_hum; }
606  if (name == "condensation_rate") { return cond_rate; }
607  return absent;
608  }

Referenced by ERF::FillPlot3DVars(), and query_var().

Here is the caller graph for this function:

◆ query_var()

VarAvailability MoistureComponentIndices::query_var ( const std::string &  name) const
inline

Classify an output variable name against this index map.

This is the one table pairing output names with the data behind them. It is driven off the scheme's index map rather than an enumerated list of moisture models, so it stays correct as schemes are added. Names with no moisture dependence come back not-governed, which lets a caller walk a mixed list of variable names and only defer to this map where it applies.

Parameters
nameDerived or plot variable name.
630  {
631 
632  // Single species, taken straight from the conserved state
633  if ( (name == "qv") || (name == "qc") || (name == "qi") ||
634  (name == "qrain") || (name == "qsnow") || (name == "qgraup") ||
635  (name == "nc") || (name == "ni") || (name == "nr") ||
636  (name == "ns") || (name == "ng") || (name == "nn") ) {
637  return {true, comp_for_var(name) >= 0};
638  }
639 
640  // Moist diagnostics, either from a qmoist array or derived at output time
641  if ( (name == "rain_accum") || (name == "snow_accum") ||
642  (name == "graup_accum") || (name == "rel_humidity") ||
643  (name == "condensation_rate") ) {
644  return {true, qmoist_index_for_var(name) != absent};
645  }
646 
647  // Aggregates over several species
648  if (name == "qt") { return {true, !total_water_comps().empty()}; }
649  if (name == "qp") { return {true, !precipitating_comps().empty()}; }
650 
651  // Non-precipitating water is vapor plus the suspended condensate, and
652  // moist density adds that same sum to the dry density
653  if ( (name == "qn") || (name == "moist_density") ) {
654  return {true, (qv >= 0) && (qc >= 0)};
655  }
656 
657  // Column and thermodynamic diagnostics that read vapor only
658  if ( (name == "qsat") || (name == "precipitable") ) {
659  return {true, has_moisture()};
660  }
661 
662  return {false, false};
663  }
bool empty() const
Definition: ERF_DataStruct.H:495
int comp_for_var(const std::string &name) const
The conserved-state component behind a single-species output name, or absent if the name is not a sin...
Definition: ERF_DataStruct.H:576
CompList total_water_comps() const
Components summed for total water, "qt": every mass mixing ratio.
Definition: ERF_DataStruct.H:503
CompList precipitating_comps() const
Components summed for precipitating water, "qp": the falling species.
Definition: ERF_DataStruct.H:523
bool has_moisture() const
Test whether the active scheme carries any moisture at all.
Definition: ERF_DataStruct.H:564
int qmoist_index_for_var(const std::string &name) const
The qmoist slot behind a moist diagnostic output name.
Definition: ERF_DataStruct.H:601

Referenced by has_derived_var(), and erf_plotfile::plot3d_fixed_variable_available().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ total_water_comps()

CompList MoistureComponentIndices::total_water_comps ( ) const
inline

Components summed for total water, "qt": every mass mixing ratio.

Number concentrations are excluded – they are counts, not masses.

503  {
504  CompList list;
505  list.append(qv); list.append(qc); list.append(qi);
506  list.append(qr); list.append(qs); list.append(qg);
507  return list;
508  }

Referenced by ERF::FillPlot3DVars(), and query_var().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ absent

constexpr int MoistureComponentIndices::absent = -1
staticconstexpr

not carried by the active scheme

Referenced by comp_for_var(), qmoist_index_for_var(), and query_var().

◆ computed_from_state

constexpr int MoistureComponentIndices::computed_from_state = -2
staticconstexpr

carried, but derived at output time from the conserved state rather than read from a qmoist slot

Referenced by ERF::FillPlot3DVars(), and from_moisture_model().

◆ cond_rate

int MoistureComponentIndices::cond_rate = absent

condensation rate

Referenced by from_moisture_model(), and qmoist_index_for_var().

◆ graup_accum

int MoistureComponentIndices::graup_accum = absent

accumulated surface graupel

Referenced by from_moisture_model(), and qmoist_index_for_var().

◆ nc

int MoistureComponentIndices::nc = absent

cloud liquid water number

Referenced by comp_for_var(), from_moisture_model(), and has_comp().

◆ ng

int MoistureComponentIndices::ng = absent

graupel number

Referenced by comp_for_var(), from_moisture_model(), and has_comp().

◆ ni

int MoistureComponentIndices::ni = absent

cloud ice number

Referenced by comp_for_var(), from_moisture_model(), and has_comp().

◆ nn

int MoistureComponentIndices::nn = absent

CCN / total aerosol number.

Referenced by comp_for_var(), from_moisture_model(), and has_comp().

◆ nr

int MoistureComponentIndices::nr = absent

rain number

Referenced by comp_for_var(), from_moisture_model(), and has_comp().

◆ ns

int MoistureComponentIndices::ns = absent

snow number

Referenced by comp_for_var(), from_moisture_model(), and has_comp().

◆ qc

◆ qg

◆ qi

◆ qr

◆ qs

◆ qv

◆ rain_accum

int MoistureComponentIndices::rain_accum = absent

accumulated surface rain

Referenced by from_moisture_model(), and qmoist_index_for_var().

◆ rel_hum

int MoistureComponentIndices::rel_hum = absent

relative humidity

Referenced by ERF::FillPlot3DVars(), from_moisture_model(), and qmoist_index_for_var().

◆ snow_accum

int MoistureComponentIndices::snow_accum = absent

accumulated surface snow

Referenced by from_moisture_model(), and qmoist_index_for_var().


The documentation for this struct was generated from the following file: