ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_SLM.H
Go to the documentation of this file.
1 #ifndef ERF_SLM_H
2 #define ERF_SLM_H
3 
4 #include <string>
5 #include <vector>
6 #include <memory>
7 #include <ctime>
8 
9 #include <AMReX_FArrayBox.H>
10 #include <AMReX_Geometry.H>
11 #include <AMReX_MultiFabUtil.H>
12 #include <AMReX_iMultiFab.H>
13 #include <AMReX_TableData.H>
14 #include <AMReX_ParmParse.H>
15 
16 #include <ERF_NullSurf.H>
17 #include <ERF_IndexDefines.H>
18 #include <ERF_DataStruct.H>
19 #include <ERF_TerrainMetrics.H>
20 #include <ERF_LSM_Types.H>
21 
22 #include <ERF_NCInterface.H>
23 
24 namespace LsmVar_SLM {
25  enum {
26  // independent variables
27  tsurf = 0, // surface temperature
28  ustar, // ustar for MOST
29  tstar, // tstar for MOST
30  qstar, // qstar for MOST
31  // inputs from ERF
32  tref, // temperature at reference level
33  qref, // specific humidity at ref
34  pref, // pressure at reference level
35  dref, // density at reference level
36  uref, // zonal wind speed at ref
37  vref, // meridional wind speed at ref
38  precipref, // precipitation rate at ref
39  swdsvisxyref, // downwelling SW radiation, direct visible flux
40  swdsnirxyref, // downwelling SW radiation, direct near-IR flux
41  swdsvisdxyref, // downwelling SW radiation, diffuse visible flux
42  swdsnirdxyref, // downwelling SW radiation, diffuse near-IR flux
43  lwref, // downwelling LW radiation
44  coszrsxy, // zenith angle
45  // model variables
46  tv, // vegetation temperature
47  mv, // vegetation moisture storage
48  soilt, // soil temperature
49  soilw, // soil wetness
50  // soil parameters
51  sand, // sand percentage
52  clay, // clay percentage
53  s_depth, // thickness of each soil layer in meters
54  node_z, // depth of the center of each soil layer
55  interface_z, // depth of the soil layer interface
56  soilw_nudge, // nudging of soilw
57  soilt_nudge, // nudging of soilt
58  sw_over_sat, // soilw over saturation
59  soil_relax_hgt, // depth dependent soil relaxation function
62  // vegetation
63  soil_transp_frac,// normalized fraction of transpiration extracted from each soil layer
64  w_s_FC, // wetness at field capacity
65  w_s_WP, // wetness at wilting point
66  // soil parameters calculated from sand/clay
67  sst_capa, // heat capacity for soil solids
68  sst_cond, // heat conductivity of soil solids
69  poro_soil, // saturation moisture content, porosity
70  theta_FC, // volumetric moisture content at field capacity
71  theta_WP, // volumetric moisture content at wilting point
72  m_pot_sat, // moisture potential at saturation
73  Bconst, // B constant
74  ks, // hydraulic conductivity at saturation [m/s]
75  // 2D inputs populated from WRFInput
76  lai, // leaf area index (2D)
77  vegtype, // vegetation type (2D)
78  soiltype, // soil type (2D)
79  veg_frac, // vegetation fraction
80  veg_frac_min, // yearly min vegetation fraction
81  veg_frac_max, // yearly max vegetation fraction
82  // model outputs
83  flbu, // surface u-momentum
84  flbv, // surface v-momentum
85  flbq, // surface vapor flux (latent heat flux)
86  flbt, // surface heat flux
87  prsfc, // precipitation rate reaching soil
88  emis_sfc, // IR emissivity of surface (veg+soil)
89  alb_nir_sfc, // NIR albedo of surface (veg+soil)
90  alb_vis_sfc, // VIS albedo of surface (veg+soil)
91  alb_nir_sfc_diff,// NIR albedo of surface (veg+soil), diffuse beam
92  alb_vis_sfc_diff,// VIS albedo of surface (veg+soil), diffuse beam
93  NumVars
94  };
95 }
96 
97 namespace LsmFlux_SLM {
98  enum {
99  // 2D SurfaceLayer flux vars
100  t_flux = 0,
104  olen, // Obukhov length for MOST/PBL
105  NumVars
106  };
107 }
108 
109 namespace SLM_NetRad {
110  enum {
127  NumVars
128  };
129 }
130 
131 namespace SLM_Diag {
132  enum {
133  precip = 0,
135  precip_sfc, // saved in prsfc too, but 3D
141  NumVars
142  };
143 }
144 
145 // refers to device variables used in soil temperature and moisture update
146 namespace SLM_DST {
147  enum {
153  NumVars
154  };
155 }
156 namespace SLM_DSW {
157  enum {
164  NumVars
165  };
166 }
167 
168 using SLMParameterTable = std::unordered_map<std::string, amrex::Vector<std::pair<std::string, amrex::Vector<amrex::Real>>>>;
169 
170 /**
171  * The Simplified Land-surface Model (SLM) supplies lower-boundary
172  * sensible-heat, latent-heat, and momentum fluxes for land cells.
173  *
174  * The original formulation and evaluation of SLM are documented in Lee and
175  * Khairoutdinov (2015), "A Simplified Land Model (SLM) for use in
176  * cloud-resolving models: Formulation and evaluation," Journal of Advances
177  * in Modeling Earth Systems, 7, 1368--1392,
178  * https://doi.org/10.1002/2014MS000419.
179  *
180  * SLM includes selected formulations adapted from NoahMP, updates inherited
181  * from gSAM-SLM, and SLM-specific corrections to the surface energy and water
182  * budgets. It remains a simplified land model and is not a complete
183  * implementation of NoahMP.
184  */
185 class SLM : public NullSurf {
186 
187  using FabPtr = std::shared_ptr<amrex::MultiFab>;
188 
189 public:
190  using NullSurf::Init;
191 
192  // Constructor
193  SLM () {}
194 
195  // Destructor
196  virtual ~SLM () = default;
197 
198  // Set thermo and grid properties
199  void
200  Define (SolverChoice& sc) override
201  {
202  // SLM exchanges water vapor with the atmosphere unconditionally: Copy_State_to_Lsm
203  // reads RhoQ1_comp out of the state and Copy_Lsm_to_State writes it back. Without a
204  // moisture model that component is not part of the state, so those accesses run off
205  // the end of the conserved-variable FAB.
208  "The SLM land surface model requires a moisture model: it exchanges water vapor "
209  "with the atmospheric state, which has no RhoQ1 component when "
210  "erf.moisture_model = None. Set erf.moisture_model, "
211  "or choose a different erf.land_surface_model.");
212 
214 
215  // Check if initializing from WRFInput
216  if (sc.init_type == InitType::WRFInput) {
217  amrex::Print() << " SLM is initializing from WRFInput!" << std::endl;
218  use_wrfinput = true;
219  } else {
220  use_wrfinput = false;
221  }
222  }
223 
224  // Initialize data structures
225  void
226  Init (const int& /*lev*/,
227  const amrex::MultiFab& cons_in,
228  const amrex::MultiFab& u_in,
229  const amrex::MultiFab& v_in,
230  const amrex::Geometry& geom,
231  const amrex::Geometry& geom0,
232  amrex::Vector<amrex::BCRec>& domain_bcs_type,
233  amrex::IntVect& refRatio,
234  const amrex::Real& dt,
235  std::unique_ptr<amrex::MultiFab>& z_phys_nd_in,
236  amrex::Vector<amrex::Vector<std::string>>& nc_init_file) override;
237 
238  /**
239  * Rebuilds SLM arrays on a remade atmospheric grid and transfers state.
240  */
241  void
242  Lsm_Regrid_Level (const int& lev,
243  const amrex::MultiFab& cons_in,
244  const amrex::MultiFab& u_in,
245  const amrex::MultiFab& v_in,
246  const amrex::Geometry& geom,
247  const amrex::Geometry& geom0,
248  amrex::Vector<amrex::BCRec>& domain_bcs_type,
249  amrex::IntVect& refRatio,
250  const amrex::Real& dt,
251  std::unique_ptr<amrex::MultiFab>& z_phys_nd_in,
252  amrex::Vector<amrex::Vector<std::string>>& nc_init_file,
253  const amrex::Geometry& source_geom,
254  const amrex::Geometry& source_lsm_geom,
255  const amrex::IntVect& source_ref_ratio,
256  const bool has_source) override;
257 
258  // Wrapper to do all the updating
259  void
260  Advance (const double& dt) override
261  {
262  Advance(static_cast<amrex::Real>(dt), time + static_cast<amrex::Real>(dt), start_time);
263  }
264 
265  void
266  Advance (const amrex::Real& dt,
267  const amrex::Real& t_new,
268  const amrex::Real& t_start) override
269  {
270  m_updated = false;
271  m_dt = dt;
272  time = t_new;
273  start_time = t_start;
274 
275  if (first_step)
276  {
277  first_step = false;
278 
280  this->init_wrfinput_vars();
281  }
282 
284  }
285 
286  this->AdvanceSLM();
287  m_updated = true;
288 
289  }
290 
291  // Advance the lsm state vars
292  void
293  AdvanceSLM ();
294 
295  // Get state vars from lsm class
296  amrex::MultiFab*
297  Lsm_Data_Ptr (const int& varIdx) override
298  {
299  AMREX_ALWAYS_ASSERT(varIdx < SLM::m_lsm_data_size && varIdx >= 0);
300  int lsmIdx = LsmDataMap[varIdx];
301  AMREX_ALWAYS_ASSERT(lsmIdx < LsmVar_SLM::NumVars && lsmIdx>=0);
302  return lsm_fab_vars[lsmIdx].get();
303  }
304 
305  // Get flux vars from lsm class
306  amrex::MultiFab*
307  Lsm_Flux_Ptr (const int& varIdx) override
308  {
309  AMREX_ALWAYS_ASSERT(varIdx < SLM::m_lsm_flux_size && varIdx >= 0);
310  int lsmIdx = LsmFluxMap[varIdx];
311  AMREX_ALWAYS_ASSERT(lsmIdx < LsmFlux_SLM::NumVars && lsmIdx>=0);
312  return lsm_fab_flux[lsmIdx].get();
313  }
314 
315  // Get lsm geometry
316  amrex::Geometry
317  Lsm_Geom ( ) override { return m_lsm_geom; }
318 
319  /**
320  * Returns the atmospheric geometry used by SLM coupling fields.
321  */
322  amrex::Geometry
323  Lsm_Atmos_Geom () override { return m_geom; }
324 
325  /**
326  * Registers an exposed source data field.
327  */
328  void
329  Lsm_Set_Source_Data_Ptr (const int& varIdx,
330  amrex::MultiFab* source_data_ptr) override
331  {
332  AMREX_ALWAYS_ASSERT(varIdx >= 0 && varIdx < m_lsm_data_size);
333  if (static_cast<int>(source_data.size()) != m_lsm_data_size) {
334  source_data.resize(m_lsm_data_size, nullptr);
335  }
336  source_data[varIdx] = source_data_ptr;
337  }
338 
339  /**
340  * Registers an exposed source flux field.
341  */
342  void
343  Lsm_Set_Source_Flux_Ptr (const int& varIdx,
344  amrex::MultiFab* source_flux_ptr) override
345  {
346  AMREX_ALWAYS_ASSERT(varIdx >= 0 && varIdx < m_lsm_flux_size);
347  if (static_cast<int>(source_flux.size()) != m_lsm_flux_size) {
348  source_flux.resize(m_lsm_flux_size, nullptr);
349  }
350  source_flux[varIdx] = source_flux_ptr;
351  }
352 
353  /**
354  * Returns the number of private SLM state fields.
355  */
356  int
357  Lsm_Unmapped_Size () override { return static_cast<int>(unmapped_fields.size()); }
358 
359  /**
360  * Returns a private SLM state field.
361  */
362  amrex::MultiFab*
363  Lsm_Unmapped_Ptr (const int& varIdx) override
364  {
365  AMREX_ALWAYS_ASSERT(varIdx >= 0 && varIdx < static_cast<int>(unmapped_fields.size()));
366  return lsm_fab_vars[unmapped_fields[varIdx]].get();
367  }
368 
369  /**
370  * Registers a private source SLM state field.
371  */
372  void
373  Lsm_Set_Source_Unmapped_Ptr (const int& varIdx,
374  amrex::MultiFab* source_data_ptr) override
375  {
376  AMREX_ALWAYS_ASSERT(varIdx >= 0 && varIdx < static_cast<int>(unmapped_fields.size()));
377  if (source_unmapped.size() != unmapped_fields.size()) {
378  source_unmapped.resize(unmapped_fields.size(), nullptr);
379  }
380  source_unmapped[varIdx] = source_data_ptr;
381  }
382 
383  /**
384  * Transfers exposed state from a source AMR level.
385  */
386  void
387  Lsm_Interpolate_From_Source (const amrex::Geometry& source_geom,
388  const amrex::Geometry& source_lsm_geom,
389  const amrex::IntVect& ref_ratio,
390  LSMTransferMode mode) override;
391 
392  // Get number of vars lsm class contains
393  int
394  Lsm_Data_Size () override { return SLM::m_lsm_data_size; }
395 
396  // Get number of vars lsm class contains
397  int
398  Lsm_Flux_Size () override { return SLM::m_lsm_flux_size; }
399 
400  // Get variable names
401  std::string
402  Lsm_DataName (const int& varIdx) override
403  {
404  AMREX_ALWAYS_ASSERT(varIdx < SLM::m_lsm_data_size && varIdx >= 0);
405  return LsmDataName[varIdx];
406  }
407 
408  int
409  Lsm_DataIndex (const std::string &varname) override
410  {
411  int varIdx = -1;
412  std::string lc_varname = amrex::toLower(varname);
413  for (int idx(0); idx<SLM::m_lsm_data_size; ++idx) {
414  if (lc_varname == amrex::toLower(Lsm_DataName(idx))) {
415  varIdx = idx;
416  }
417  }
418  AMREX_ASSERT(varIdx != -1); // no name found
419  return varIdx;
420  }
421 
422  // Get flux variable names
423  std::string
424  Lsm_FluxName (const int& varIdx) override
425  {
426  AMREX_ALWAYS_ASSERT(varIdx < SLM::m_lsm_flux_size && varIdx >= 0);
427  return LsmFluxName[varIdx];
428  }
429 
430  int
431  Lsm_FluxIndex (const std::string &varname) override
432  {
433  int varIdx = -1;
434  std::string lc_varname = amrex::toLower(varname);
435  for (int idx(0); idx<SLM::m_lsm_flux_size; ++idx) {
436  if (lc_varname == amrex::toLower(Lsm_FluxName(idx))) {
437  varIdx = idx;
438  }
439  }
440  AMREX_ALWAYS_ASSERT(varIdx != -1); // no name found
441  return varIdx;
442  }
443 
444  std::unordered_map<std::string, std::string>&
445  Lsm_WRFInputNames () override {
446  return SLM::wrfinput_map;
447  }
448 
449  void
450  Copy_State_to_Lsm (const amrex::MultiFab& cons_in, const amrex::MultiFab& u_in, const amrex::MultiFab& v_in) override;
451 
452  void
453  Copy_Lsm_to_State (amrex::MultiFab& cons_in) override;
454 
455  void
456  Update_Lsm_Vars (amrex::MultiFab& cons_in, amrex::MultiFab& u_in, amrex::MultiFab& v_in) override
457  {
458  this->Copy_State_to_Lsm(cons_in, u_in, v_in);
459  if (first_step) {
461  this->init_wrfinput_vars();
462  } else if (!use_wrfinput) {
463  this->init_slm_vars();
464  }
465  }
466  }
467 
468  bool Get_Update_Status () override { return m_updated; }
469 
470  void
471  Update_State_Vars (amrex::MultiFab& cons_in) override
472  {
473  this->Copy_Lsm_to_State(cons_in);
474  }
475 
476  void
477  set_precip_input (const amrex::MultiFab* precip_in) override;
478 
479  void
480  set_terrain_inputs (const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& sst_in,
481  const amrex::Vector<std::unique_ptr<amrex::iMultiFab>>& lmask_in) override;
482 
483  int Lsm_Type () override
484  {
485  return LSM_Type::SLM;
486  }
487 
488  void writeSLM_Data (const PlotFileType plotfile_type, const amrex::Real cur_time, const std::string plot_prefix, const int level_step, const int lev, const int finest_lev, amrex::MultiFab &fab, amrex::Geometry &geom, amrex::Vector<std::string> &varnames);
489 
490  void init_from_inputs ();
491 
492  void slm_init ();
493 
494  void init_layer_depths ();
495 
496  void init_soil_vars ();
497 
498  void init_landtype ();
499 
500  void init_soil_tw ();
501 
502  void init_slm_vars ();
503 
504  /**
505  * Initializes local SLM fields from WRFInput data.
506  */
507  void init_wrfinput_vars ();
508 
509  /**
510  * Initializes diagnostics and radiation coupling fields from the SLM state.
511  */
513 
514  /**
515  * Rebuilds restart fields that can be derived from the checkpoint state.
516  */
517  void rebuild_restart_fields ();
518 
519  SLMParameterTable ReadParameterFile (const std::string &filename, amrex::Vector<std::string> &veg_categories, amrex::Vector<std::string> &soil_categories);
520 
521  /**
522  * Validates the selected Noah-MP parameter blocks before copying them to the device.
523  */
525 
526  void init_from_params ();
527 
528  /**
529  * Loads built-in Noah-MP radiation lookup values for idealized SLM cases.
530  */
532 
533  void UpdateLAI (const amrex::MFIter &mfi);
534 
535  void UpdateLAIParameters (const amrex::MFIter &mfi);
536 
537  // NOAHMP radiation functions
538  void radiation_noahmp (const amrex::MFIter &mfi);
539 
540  void albedo_noahmp (const amrex::MFIter &mfi, int i, int j,
541  amrex::Real dt, amrex::Real cosz, amrex::Real snowh, amrex::Real fsno,
542  amrex::Real fwet, amrex::Real sneqvo, amrex::Real sneqv, amrex::Real qsnow,
544  const amrex::Real* smc, int nsoil, amrex::Real fveg,
545  amrex::Real& albold, amrex::Real& tauss,
546  amrex::Real* albgrd, amrex::Real* albgri, amrex::Real* albd, amrex::Real* albi,
547  amrex::Real* fabd, amrex::Real* fabi, amrex::Real* ftdd, amrex::Real* ftid, amrex::Real* ftii,
548  amrex::Real& fsun, amrex::Real* frevd, amrex::Real* frevi,
549  amrex::Real* fregd, amrex::Real* fregi, amrex::Real& bgap, amrex::Real& wgap,
550  amrex::Real* albsnd, amrex::Real* albsni);
551 
552  AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
553  static void surrad_noahmp (amrex::Real mpe, amrex::Real fsun, amrex::Real fsha, amrex::Real elai, amrex::Real vai,
554  amrex::Real laisun, amrex::Real laisha, const amrex::Real* solad, const amrex::Real* solai,
555  const amrex::Real* fabd, const amrex::Real* fabi, const amrex::Real* ftdd,
556  const amrex::Real* ftid, const amrex::Real* ftii, const amrex::Real* albgrd,
557  const amrex::Real* albgri, const amrex::Real* albd, const amrex::Real* albi,
558  const amrex::Real* frevd, const amrex::Real* frevi, const amrex::Real* fregd, const amrex::Real* fregi,
559  amrex::Real& parsun, amrex::Real& parsha, amrex::Real& sav, amrex::Real& sag,
560  amrex::Real& fsa, amrex::Real& fsr, amrex::Real& fsrv, amrex::Real& fsrg);
561 
562  AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
563  static void snow_age_noahmp (amrex::Real dt, amrex::Real tg, amrex::Real sneqvo, amrex::Real sneqv,
564  amrex::Real tau0, amrex::Real grain_growth, amrex::Real extra_growth,
565  amrex::Real dirt_soot, amrex::Real swemx,
566  amrex::Real& tauss, amrex::Real& fage);
567 
568  AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
569  static void snowalb_bats_noahmp (int nband, amrex::Real fsno, amrex::Real cosz, amrex::Real fage,
570  amrex::Real bats_cosz, amrex::Real bats_vis_new, amrex::Real bats_nir_new,
571  amrex::Real bats_vis_age, amrex::Real bats_nir_age,
572  amrex::Real bats_vis_dir, amrex::Real bats_nir_dir,
573  amrex::Real* albsnd, amrex::Real* albsni);
574 
575  AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
576  static void groundalb_noahmp (int nsoil, int nband, int ice, int ist, amrex::Real fsno,
577  const amrex::Real* smc, const amrex::Real* albsnd, const amrex::Real* albsni,
578  amrex::Real cosz, amrex::Real tg,
579  const amrex::Real* albsat, const amrex::Real* albdry, const amrex::Real* alblak,
580  amrex::Real* albgrd, amrex::Real* albgri);
581 
582  AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
583  static void twostream_noahmp (int ib, int ic, int vegtyp, amrex::Real cosz, amrex::Real vai,
584  amrex::Real fwet, amrex::Real t, const amrex::Real* albgrd, const amrex::Real* albgri,
585  const amrex::Real* rho, const amrex::Real* tau, amrex::Real fveg, int ist,
586  amrex::Real xl, amrex::Real omegas_param, amrex::Real betads, amrex::Real betais,
588  amrex::Real* fab, amrex::Real* fre, amrex::Real* ftd, amrex::Real* fti,
589  amrex::Real& gdir, amrex::Real* frev, amrex::Real* freg,
590  amrex::Real& bgap, amrex::Real& wgap,
591  amrex::Real& xl_out, amrex::Real& chil_out, amrex::Real& phi1_out, amrex::Real& phi2_out);
592 
593  void transfer_coeff (const amrex::MFIter &mfi);
594 
595  void resistances (const amrex::MFIter &mfi);
596 
597  void fluxes_canopy (const amrex::MFIter &mfi);
598 
599  void solve_ground_skin_temperature (const amrex::MFIter &mfi);
600 
601  void soil_water (const amrex::MFIter &mfi);
602 
603  void soil_temperature (const amrex::MFIter &mfi);
604 
605  void soil_nudging (const amrex::MFIter &mfi3d);
606 
607  AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
608  static amrex::Real fh_calc (const amrex::Real &t, const amrex::Real &mps,
609  const amrex::Real &sw, const amrex::Real &B);
610 
611  AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
612  static amrex::Real linear_interp (const amrex::Real t0, const amrex::Real t1,
613  const amrex::Real t, const amrex::Real x,
614  const amrex::Real y);
615 
616 #ifdef ERF_USE_NETCDF
617  void writeSLM_NetCDF (const amrex::MultiFab& mf, const amrex::Vector<std::string>& varnames,
618  const amrex::Real cur_time, const std::string plot_prefix, const int level_step);
619 
620  void writeNCHeader (ncutils::NCFile &nc_file, const amrex::Geometry &geom);
621 
622  void writeMFtoNC (ncutils::NCFile &nc_file, const amrex::MultiFab* mf,
623  const std::string name, amrex::Real cur_time, bool write_ghost = false);
624 
625  void writeMFVecToNC (ncutils::NCFile &nc_file,
626  const amrex::Vector<const amrex::MultiFab*> &mf_vec,
627  const amrex::Vector<std::string> &mf_names,
628  const amrex::Geometry& geom) const;
629 #endif
630 
631  void set_dt (const amrex::Real &dt) {
632  m_dt = dt;
633  }
634 
635  const amrex::Vector<const amrex::MultiFab*> &export_to_RRTMGP ()
636  {
637  return slm_to_rad_vars;
638  }
639 
640  std::unordered_map<std::string, std::string>& get_rad_output_map ()
641  {
642  return rad_output_map;
643  }
644 
645  // utility to skip to next line in Header
646  // -- taken from ERF_Checkpoint
647  static void GotoNextLine (std::istream& is);
648 
649  void WriteCheckpoint (const int &lev, const std::string &checkpointname) const override;
650 
651  void ReadCheckpoint (const int &lev, const std::string &checkpointname) override;
652 
653  /**
654  * Initializes the canopy-adjusted reference height on the current grid.
655  */
656  void initialize_zrefxy ();
657 
658  /**
659  * Rebuilds SLM-local fields after transferring an evolved state.
660  */
661  void initialize_processed_state (const bool preserve_checkpoint_fields = false);
662 
663 private:
664  // number of lsm variables (theta)
665  int m_lsm_data_size = 44;
666 
667  // number of flux variables (qflux, tflux, uflux, vflux)
669 
670  // LsmVar map (state indices -> LsmVar enum)
671  amrex::Vector<int> LsmDataMap;
672  amrex::Vector<int> LsmFluxMap;
673 
674  // Lsm varnames
675  amrex::Vector<std::string> LsmDataName;
676  amrex::Vector<std::string> LsmFluxName;
677 
678  // geometry for atmosphere
679  amrex::Geometry m_geom;
680 
681  // geometry for atmospheric level 0
682  amrex::Geometry m_geom0;
683 
684  // geometry for lsm
685  amrex::Geometry m_lsm_geom;
686 
687  // geometry for the level-0 soil grid
688  amrex::Geometry m_lsm_geom0;
689 
690  // domain boundary conditions used by interpolation
691  amrex::Vector<amrex::BCRec> m_domain_bcs_type;
692 
693  amrex::BoxArray ba_lsm_2d;
694 
695  // timestep
697 
698  // domain klo-1 or lsm khi
699  int khi_lsm;
700 
701  int klo_lsm;
702 
703  // independent variables
704  amrex::Array<FabPtr, LsmVar_SLM::NumVars> lsm_fab_vars;
705 
706  // flux array for conjugate transfer
707  amrex::Array<FabPtr, LsmFlux_SLM::NumVars> lsm_fab_flux;
708 
709  // Source fields used to transfer SLM state between AMR levels.
710  amrex::Vector<amrex::MultiFab*> source_data;
711  amrex::Vector<amrex::MultiFab*> source_flux;
712  amrex::Vector<amrex::MultiFab*> source_unmapped;
713 
714  // Number of grid points in z
715  int m_nz_lsm = 7;
716 
717  // Size of grid spacing in z
718  std::vector<amrex::Real> m_dz_lsm;
719  std::string rad_input_file;
720 
721  // Input variables
722  int landtype0 = 16; // landtype over whole domain
723 
724  amrex::Real LAI0 = zero; // default leaf area index
725  amrex::Vector<amrex::Real> clay0; // uniform clay content (%)
726  amrex::Vector<amrex::Real> sand0; // uniform sand content (%)
727  amrex::Vector<amrex::Real> sw0; // uniform soil wetness (fraction)
728  amrex::Vector<amrex::Real> st0; // uniform soil temperature (K)
729  amrex::Vector<amrex::Real> relax_hgt; // depth dependent soil relaxation function
730 
731  amrex::Real tabs_s = zero; // surface temperature (K)
732  amrex::Real t00 = 300.0; // constant offset for sstxy
733  static constexpr amrex::Real t_canop_max = 343.; // maximum plant temperature
734 
735  bool use_terrain = false;
736 
737  bool dosoilwnudging = false;
738  bool dosoiltnudging = false;
739  amrex::Real tausoil = 86400.0;
740 
741  amrex::Real z0_soil = 0.01; // baresoil roughness length (m)
742  static constexpr amrex::Real tfriz = 273.15;
743  amrex::Real mws_mx0 = 50.0; // maximum puddle water storage (mm)
744 
745  static constexpr amrex::Real epsv = 0.61;
746 
747  static constexpr amrex::Real cp = 1004.0; // specific heat of air [J/kg/K]
748  static constexpr amrex::Real cp_water = 4.1796e6; // heat capacity of water [J/m^3K]
749 
750  static constexpr amrex::Real sigma = 5.67e-8; // Stefen-Boltzmann constant [W/m^2/K^4]
751 
752  // parameters for stomatal resistance
753  amrex::Real Rc_max = 5000.0; // maximum stomatal resistance
754  amrex::Real T_opt = 298.0; // optimum temperature for transpiration
755  amrex::Real zref = myhalf; // height of reference level (m), used in transfer coef
756  amrex::MultiFab zrefxy;
757 
758  static constexpr amrex::Real IR_emis_urban = 0.9;
759 
760  // Model variables
761  // NOTE: these MultiFabs are defined over the grid only in X and Y (no Z component)
762  amrex::MultiFab t_canop; // canopy leaf temperature
763  amrex::MultiFab mw; // water storage on leaves, kg/m^2 = mm of water
764  amrex::MultiFab mws; // water storage in puddle, kg/m^2 = mm of water
765  amrex::MultiFab t_skin; // skin temperature, surface level viewed from atmosphere
766  amrex::MultiFab t_ground_skin; // massless ground-atmosphere interface temperature
767  amrex::MultiFab t_sfc; // 'surface' level temperature. for vegetated, t_sfc = t_cas, for non-vegetated = t_sfc=top soil t
768  amrex::MultiFab q_sfc; // 'surface' level specific humidity, for vegetated, q_sfc = q_cas, for non-vegetated = top soil specific humidity
769  amrex::MultiFab t_cas; // canopy air space temperature
770  amrex::MultiFab q_cas; // canopy air space specific humidity
771 
772  amrex::MultiFab q_gr; // soil pore space specific humidity
773  amrex::MultiFab sdew; // soil dew condition
774 
775  // TODO: placeholder landmask array - should probably use the one defined by ERF
776  amrex::iMultiFab landmask;
777  amrex::iMultiFab landtype; // IGBP landtype (1 to 16)
778  amrex::iMultiFab nroot; // number of rooted soil layers used by the Noah BTR=1 stress factor
779  amrex::MultiFab LAI; // leaf area index
780  amrex::MultiFab SAI; // stem area index
781  amrex::MultiFab sstxy;
782 
783  // Vegetation parameter lists
784  amrex::iMultiFab vegetype; // vegetation type (0 - baresoil, non-zero for vegetated)
785  amrex::MultiFab vege_YES; // 0-baresoil, 1-vegetated
786  amrex::MultiFab cp_vege; // dry heat capacity of vegetation [J/m2/K]
787  amrex::MultiFab cbiom; // NoahMP canopy biomass heat capacity parameter [m]
788  amrex::MultiFab dleaf; // NoahMP characteristic leaf dimension [m]
789  amrex::MultiFab z0_sfc; // surface level roughness: for vegetated z0_sfc=z0_vege, for non-vegetated, z0_sfc=z0_soil
790  amrex::MultiFab Khai_L; // leaf distribution factor (called XL in NOAHMP radiation)
791  amrex::MultiFab phi_1;
792  amrex::MultiFab phi_2;
793  amrex::MultiFab IR_emis_vege; // vegetation emissivity for infrared radiation
794  amrex::MultiFab IR_emis_soil; // soil emissivity for infrared radiation
795  amrex::MultiFab IR_emis_grnd; // ground emissivity for infrared radiation
796  amrex::MultiFab ztop; // height of vegetation (called HVT in NOAHMP radiation)
797  amrex::MultiFab disp_hgt; // displacement height
798  amrex::MultiFab Rgl; // parameter for stomatal resistance
799  amrex::MultiFab Rc_min; // minimum stomatal resistance
800  amrex::MultiFab hs_rc; // parameter for stomatal resistance
801  amrex::MultiFab precip_extinc; // precipitation extinction coef
802  amrex::MultiFab precip_sfc; // precipitation reaching to soil top through canopy
803  amrex::MultiFab mw_mx; // max of mw
804  amrex::MultiFab mws_mx; // max of mws
805  amrex::MultiFab BAI; // Basal area index, sq.feet/acre
806  amrex::MultiFab IMPERV;
807 
808  // Packed MF containing 1D arrays of variables used in soil temperature and soil water
809  // soilt: st_cond, st_capa, st_eff_cond, alpha, beta
810  // soilw: st_wgt, sh_eff_cond, sh_eff_vel, alpha, beta, sdepth_mm
811  amrex::MultiFab soilt_vars;
812  amrex::MultiFab soilw_vars;
813 
814  amrex::MultiFab mw_inc;
815 
816  // Soil hydrology variables
817  amrex::MultiFab evapo_dry;
818  amrex::MultiFab evapo_wet;
819 
820  // Sensible heat fluxes
821  amrex::MultiFab shf_canop; // flux transfer between canopy and air space [W/m^2]
822  amrex::MultiFab shf_soil; // flux transfer between soil surface and air space [W/m^2]
823  amrex::MultiFab shf_air; // flux transfer between air space and the reference level [W/m^2]
824 
825  // Latent heat fluxes
826  amrex::MultiFab lhf_canop;
827  amrex::MultiFab lhf_soil;
828  amrex::MultiFab lhf_air;
829  amrex::MultiFab evp_canop;
830  amrex::MultiFab evp_soil;
831  amrex::MultiFab evp_air;
832 
833  // Albedos
834  amrex::MultiFab albedovis_v, albedonir_v; // visible and NIR albedos for vegetation
835  amrex::MultiFab albedovis_s, albedonir_s; // visible and NIR albedos for soil
836 
837 
838  // Resistances
839  amrex::MultiFab r_a; // aerodynamic resistance between surface and ref level
840  amrex::MultiFab r_b; // leaf boundary layer resistance
841  amrex::MultiFab r_c; // leaf-level stomatal resistance
842  amrex::MultiFab r_d; // undercanopy aerodynamic resistance
843  amrex::MultiFab r_soil;
844  static constexpr amrex::Real r_litter = zero; // litter resistance [s/m]
845 
846 
847  amrex::MultiFab net_rad;
848  amrex::MultiFab wet_canop; // wetted portion of canopy
849 
851 
853  bool first_step = true;
854  bool m_updated = false;
855 
856  std::string parameter_file = "NoahmpTable.TBL";
857  std::string veg_dataset = "modis"; // modis or usgs
858  std::string soil_dataset = "stas"; // stas or stas_ruc
859  int num_landtypes = -1; // Number of land types in sai/lai, parameter tables
860  int num_veg_params = -1;
861  int num_soil_params = -1;
862 
864  amrex::Vector<std::string> param_veg_categories;
865  amrex::Vector<std::string> param_soil_categories;
866 
867  std::unordered_map<std::string, std::unique_ptr<amrex::Gpu::DeviceVector<amrex::Real>>> d_soil_params;
868  std::unordered_map<std::string, std::unique_ptr<amrex::Gpu::DeviceVector<amrex::Real>>> d_veg_params;
869  std::unordered_map<std::string, std::unique_ptr<amrex::Gpu::DeviceVector<amrex::Real>>> d_rad_params;
870 
871  std::vector<std::vector<amrex::Real>> sai_table; // table containing monthly SAI values for each land type
872  std::vector<std::vector<amrex::Real>> lai_table; // table containing monthly LAI values for each land type
873 
874  amrex::Gpu::DeviceVector<amrex::Real> d_lai_curr; // GPU LAI values for current month only
875  amrex::Gpu::DeviceVector<amrex::Real> d_lai_next; // GPU LAI values for next month
876  amrex::Gpu::DeviceVector<amrex::Real> d_sai_curr; // GPU SAI values for current month only
877  amrex::Gpu::DeviceVector<amrex::Real> d_sai_next; // GPU SAI values for next month
878 
879  bool use_param_file = false; // whether to initialize using parameters from file
880  bool interpolate_lai = false; // whether to interpolate LAI+SAI between monthly values for each landtype (Noah-MP style, dynamic veg=4)
881  bool use_wrf_lai = false; // whether to use WRF-Noah style LAI (interpolate between min and max lai)
882  bool params_updated = false; // whether soil/vegetation parameters have been updated from file to recompute
883 
884  // NOAHMP radiation parameters
885  int opt_rad = 1; // Radiation option: 1=modified two-stream (default), 2=two-stream, 3=gap=f(veg)
886  int opt_alb = 1; // Snow albedo option: 1=BATS, 2=CLASS
887 
888  // NOAHMP radiation parameters from NoahmpTable.TBL
889  // ALBSAT_VIS: saturated soil albedos VIS (20 soil color classes)
890  // ALBSAT_NIR: saturated soil albedos NIR (20 soil color classes)
891  // ALBDRY_VIS: dry soil albedos VIS (20 soil color classes)
892  // ALBDRY_NIR: dry soil albedos NIR (20 soil color classes)
893  // ALBLAK: albedo frozen lakes: 1=vis, 2=nir
894  // OMEGAS: two-stream parameter omega for snow: 1=vis, 2=nir
895  amrex::Real betads_rad = myhalf; // two-stream parameter betad for snow
896  amrex::Real betais_rad = myhalf; // two-stream parameter betai for snow
897 
898  // Snow albedo parameters (from &noahmp_global_parameters)
899  amrex::Real tau0_rad = 1.0e6; // tau0 from yang97 eqn. 10a
900  amrex::Real grain_growth_rad = 5000.; // growth from vapor diffusion yang97 eqn. 10b
901  amrex::Real extra_growth_rad = 10.; // extra growth near freezing yang97 eqn. 10c
902  amrex::Real dirt_soot_rad = 0.3; // dirt and soot term yang97 eqn. 10d
903  amrex::Real rsurf_exp = 5.0; // NoahMP option-1 soil resistance exponent
904  amrex::Real bats_cosz_rad = two; // zenith angle snow albedo adjustment; b in yang97 eqn. 15
905  amrex::Real bats_vis_new_rad = 0.95; // new snow visible albedo
906  amrex::Real bats_nir_new_rad = 0.65; // new snow nir albedo
907  amrex::Real bats_vis_age_rad = 0.2; // age factor for diffuse visible snow albedo yang97 eqn. 17
908  amrex::Real bats_nir_age_rad = myhalf; // age factor for diffuse nir snow albedo yang97 eqn. 18
909  amrex::Real bats_vis_dir_rad = 0.4; // cosz factor for direct visible snow albedo yang97 eqn. 15
910  amrex::Real bats_nir_dir_rad = 0.4; // cosz factor for direct nir snow albedo yang97 eqn. 16
911  amrex::Real swemx_rad = one; // new snow mass to fully cover old snow (mm)
912 
913  // NOAHMP emissivity parameters for longwave radiation from NoahmpTable.TBL
914  amrex::Real snow_emis_rad = 0.95; // snow emissivity
915  amrex::Real eg_soil_rad = 0.97; // ground emissivity for soil (IST=1)
916  amrex::Real eg_lake_rad = 0.98; // ground emissivity for lake (IST=2)
917 
918  // NOAHMP vegetation radiation parameters are stored in d_veg_params:
919  // RHOL_VIS: leaf reflectance: visible
920  // RHOL_NIR: leaf reflectance: NIR
921  // RHOS_VIS: stem reflectance: visible
922  // RHOS_NIR: stem reflectance: NIR
923  // TAUL_VIS: leaf transmittance: visible
924  // TAUL_NIR: leaf transmittance: NIR
925  // TAUS_VIS: stem transmittance: visible
926  // TAUS_NIR: stem transmittance: NIR
927  // RC: crown radius (m)
928  // HVB: bottom of canopy (m) - NOAHMP name: HVB
929  // DEN: tree density (no. of trunks per m2) - NOAHMP name: DEN
930  // CWPVT: canopy wind extinction parameter - NOAHMP name: CWPVT
931  // NOTE: NOAHMP parameter "xl" (leaf/stem orientation index) uses existing Khai_L from init_landtype()
932  // NOTE: NOAHMP parameter "hvt" (top of canopy height) uses existing ztop from init_landtype()
933 
934  // MultiFabs to store NOAHMP radiation state variables
935  amrex::MultiFab albold_noahmp; // snow albedo at last time step (for CLASS option)
936  amrex::MultiFab tauss_noahmp; // non-dimensional snow age
937 
938  std::vector<std::vector<amrex::Real>> param_table;
939  amrex::TableData<amrex::Real, 2> d_param_table;
940 
942  int m_orbital_year = -1;
943  int m_orbital_mon = -1;
944  int m_orbital_day = -1;
945  int m_orbital_sec = -1;
946 
947  amrex::MultiFab *z_phys_nd; // input z_phys_nd from ERF
948 
949  // Extra MFs for output:
950  amrex::MultiFab slm_diag;
951 
952  amrex::Vector<const amrex::MultiFab*> slm_to_rad_vars;
953 
954  // Defines the WRFInput names and corresponding SLM name used to
955  // fill variables at initialization
956  inline static std::unordered_map<std::string, std::string> wrfinput_map = {
957  {"DZS", "soil_thickness"},
958  {"ZS", "node_z"},
959  {"TSLB", "tsoil"},
960  {"SMOIS", "wsoil"},
961  {"LAI", "lai"},
962  {"IVGTYP", "vegtype"},
963  {"ISLTYP", "soiltype"},
964  {"TSK", "tsurf"},
965  {"VEGFRA", "veg_frac"},
966  {"SHDMIN", "veg_frac_min"},
967  {"SHDMAX", "veg_frac_max"},
968  //{"TMN", "soilt_obs"}
969  };
970 
971  // map RRTMGP names to SLM names for radiation data
972  inline static std::unordered_map<std::string, std::string> rad_output_map = {
973  {"cos_zenith_angle", "cos_zenith"},
974  {"sw_flux_dn", ""},
975  {"sw_flux_dn_dir_vis", "SW_dw_dir_vis"},
976  {"sw_flux_dn_dir_nir", "SW_dw_dir_nir"},
977  {"sw_flux_dn_dif_vis", "SW_dw_dif_vis"},
978  {"sw_flux_dn_dif_nir", "SW_dw_dif_nir"},
979  {"lw_flux_dn", "LW_dw"}
980  };
981 
982  // whether to initialize SLM from inputs file or from wrfinput
983  bool use_wrfinput = false;
984  bool wrfinput_initialized = false;
985 
986  // list of extra MFs in lsm_fab_vars that are not checkpointed by ERF
987  amrex::Vector<int> unmapped_fields;
988 
989  // List of 2D output variables that are declared as 3D
990  // These will only be saved at k = 0 (surface level) to save space
991  // TODO: these variables should be redefined to be 2D
992  inline static const std::unordered_set<int> surf_vars = {
1028  };
1029 
1030  static constexpr const char* LsmVarName_Full[] = {
1031  "tsurf", "ustar", "tstar", "qstar", "ref_t", "ref_q", "ref_p", "ref_d", "ref_u", "ref_v", "ref_precip",
1032  "SW_dw_dir_vis", "SW_dw_dir_nir", "SW_dw_dif_vis", "SW_dw_dif_nir", "LW_dw", "zenith",
1033  "tveg", "mv", "tsoil", "wsoil", "sand", "clay", "soil_thickness", "node_z", "interface_z",
1034  "soilw_nudge", "soilt_nudge", "sw_over_sat", "soil_relax_hgt", "soilt_obs", "soilw_obs", "soil_transp_frac", "w_s_FC", "w_s_WP",
1035  "sst_capa", "sst_cond", "poro_soil", "theta_FC", "theta_WP", "m_pot_sat", "Bconst", "ks","lai","vegtype","soiltype",
1036  "veg_frac", "veg_frac_min", "veg_frac_max", "surface_u", "surface_v", "surface_vapor", "surface_heat", "precip_soil", "emis_sfc", "alb_nir_sfc", "alb_vis_sfc", "alb_nir_sfc_diff", "alb_vis_sfc_diff"
1037  };
1038 
1039  static_assert(sizeof(LsmVarName_Full)/sizeof(*LsmVarName_Full) == LsmVar_SLM::NumVars);
1040 
1041  inline static const std::vector<std::string> diag_names = {
1042  "precip",
1043  "precip_in",
1044  "precip_sfc",
1045  "runoff_sfc",
1046  "drain",
1047  "drain_flux",
1048  "evapo_wet",
1049  "grflux"
1050  };
1051 
1052 #ifdef ERF_USE_NETCDF
1053  // List of output variables that are constant in time
1054  inline static const std::unordered_set<int> const_vars = {
1074  };
1075 
1076  inline static const std::vector<std::string> soilt_var_names = {
1077  "st_cond",
1078  "st_capa",
1079  "st_eff_cond",
1080  "st_alpha",
1081  "st_beta"
1082  };
1083 
1084  inline static const std::vector<std::string> soilw_var_names = {
1085  "sw_wgt",
1086  "sw_sh_eff_cond",
1087  "sw_sh_eff_vel",
1088  "sw_alpha",
1089  "sw_beta",
1090  "sw_sdepth_mm"
1091  };
1092 
1093  amrex::MultiFab rad_input_data;
1094  int num_rad_times = 0;
1095  amrex::Vector<amrex::Real> rad_times;
1096  inline static const std::vector<std::string> rad_names = {
1097  "S_SWVIS", "S_SWNIR", "S_SWVISD", "S_SWNIRD", "S_COSZRS", "S_LWDS"};
1098 
1099 #endif
1100 };
1101 #endif
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(m_cloud_chamber_config.active, "Cloud Chamber: initializer reached without a parsed configuration")
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int idx(int i, int j, int k, int nx, int ny)
Definition: ERF_InitForEnsemble.cpp:396
LSMTransferMode
Definition: ERF_NullSurf.H:10
constexpr amrex::Real two
Definition: ERF_NumericalConstants.H:38
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
std::string name
Definition: ERF_Plotfile2DCatalog.cpp:105
std::unordered_map< std::string, amrex::Vector< std::pair< std::string, amrex::Vector< amrex::Real > >> > SLMParameterTable
Definition: ERF_SLM.H:168
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_NullSurf.H:15
virtual void Init(const int &, const amrex::MultiFab &, const amrex::Geometry &, const amrex::Geometry &, amrex::Vector< amrex::BCRec > &, amrex::IntVect &, const amrex::Real &, amrex::Vector< amrex::Vector< std::string >> &)
Definition: ERF_NullSurf.H:27
Definition: ERF_SLM.H:185
amrex::MultiFab z0_sfc
Definition: ERF_SLM.H:789
amrex::MultiFab mw
Definition: ERF_SLM.H:763
amrex::Vector< amrex::Real > sand0
Definition: ERF_SLM.H:726
amrex::MultiFab t_canop
Definition: ERF_SLM.H:762
void writeSLM_Data(const PlotFileType plotfile_type, const amrex::Real cur_time, const std::string plot_prefix, const int level_step, const int lev, const int finest_lev, amrex::MultiFab &fab, amrex::Geometry &geom, amrex::Vector< std::string > &varnames)
Definition: ERF_SLM.cpp:4933
amrex::Real start_time
Definition: ERF_SLM.H:852
void Define(SolverChoice &sc) override
Definition: ERF_SLM.H:200
amrex::MultiFab evp_air
Definition: ERF_SLM.H:831
void Lsm_Interpolate_From_Source(const amrex::Geometry &source_geom, const amrex::Geometry &source_lsm_geom, const amrex::IntVect &ref_ratio, LSMTransferMode mode) override
Definition: ERF_SLM.cpp:1172
amrex::Real snow_emis_rad
Definition: ERF_SLM.H:914
amrex::Geometry m_geom0
Definition: ERF_SLM.H:682
amrex::MultiFab * Lsm_Flux_Ptr(const int &varIdx) override
Definition: ERF_SLM.H:307
SLM()
Definition: ERF_SLM.H:193
amrex::MultiFab q_gr
Definition: ERF_SLM.H:772
amrex::Real bats_cosz_rad
Definition: ERF_SLM.H:904
amrex::Gpu::DeviceVector< amrex::Real > d_sai_next
Definition: ERF_SLM.H:877
static const std::unordered_set< int > surf_vars
Definition: ERF_SLM.H:992
void load_builtin_radiation_parameters()
Definition: ERF_SLM.cpp:795
void init_slm_vars()
Definition: ERF_SLM.cpp:1949
std::unordered_map< std::string, std::string > & Lsm_WRFInputNames() override
Definition: ERF_SLM.H:445
amrex::Real bats_vis_dir_rad
Definition: ERF_SLM.H:909
std::unordered_map< std::string, std::unique_ptr< amrex::Gpu::DeviceVector< amrex::Real > > > d_veg_params
Definition: ERF_SLM.H:868
amrex::iMultiFab landmask
Definition: ERF_SLM.H:776
amrex::MultiFab mw_mx
Definition: ERF_SLM.H:803
amrex::Vector< std::string > param_soil_categories
Definition: ERF_SLM.H:865
static constexpr amrex::Real epsv
Definition: ERF_SLM.H:745
bool use_terrain
Definition: ERF_SLM.H:735
virtual void Init(const int &, const amrex::MultiFab &, const amrex::Geometry &, const amrex::Geometry &, amrex::Vector< amrex::BCRec > &, amrex::IntVect &, const amrex::Real &, amrex::Vector< amrex::Vector< std::string >> &)
Definition: ERF_NullSurf.H:27
void initialize_processed_state(const bool preserve_checkpoint_fields=false)
Definition: ERF_SLM.cpp:1253
int Lsm_DataIndex(const std::string &varname) override
Definition: ERF_SLM.H:409
amrex::MultiFab shf_air
Definition: ERF_SLM.H:823
amrex::Real tabs_s
Definition: ERF_SLM.H:731
int khi_lsm
Definition: ERF_SLM.H:699
amrex::MultiFab net_rad
Definition: ERF_SLM.H:847
void init_soil_vars()
Definition: ERF_SLM.cpp:1877
bool use_param_file
Definition: ERF_SLM.H:879
amrex::Real tau0_rad
Definition: ERF_SLM.H:899
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_SLM.H:691
const amrex::Vector< const amrex::MultiFab * > & export_to_RRTMGP()
Definition: ERF_SLM.H:635
amrex::MultiFab evp_canop
Definition: ERF_SLM.H:829
int m_lsm_flux_size
Definition: ERF_SLM.H:668
amrex::MultiFab shf_soil
Definition: ERF_SLM.H:822
void radiation_noahmp(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:5628
int Lsm_Unmapped_Size() override
Definition: ERF_SLM.H:357
amrex::Vector< amrex::MultiFab * > source_data
Definition: ERF_SLM.H:710
void init_from_inputs()
Definition: ERF_SLM.cpp:408
amrex::MultiFab mw_inc
Definition: ERF_SLM.H:814
virtual ~SLM()=default
void set_terrain_inputs(const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &sst_in, const amrex::Vector< std::unique_ptr< amrex::iMultiFab >> &lmask_in) override
Definition: ERF_SLM.cpp:4847
void initialize_surface_outputs()
Definition: ERF_SLM.cpp:2019
amrex::Vector< amrex::Real > sw0
Definition: ERF_SLM.H:727
amrex::MultiFab cbiom
Definition: ERF_SLM.H:787
void init_from_params()
Definition: ERF_SLM.cpp:2530
amrex::Real bats_vis_age_rad
Definition: ERF_SLM.H:907
amrex::Real T_opt
Definition: ERF_SLM.H:754
amrex::MultiFab Khai_L
Definition: ERF_SLM.H:790
int landtype0
Definition: ERF_SLM.H:722
bool dosoiltnudging
Definition: ERF_SLM.H:738
amrex::Geometry m_lsm_geom0
Definition: ERF_SLM.H:688
amrex::MultiFab phi_2
Definition: ERF_SLM.H:792
amrex::Real mws_mx0
Definition: ERF_SLM.H:743
amrex::MultiFab evp_soil
Definition: ERF_SLM.H:830
void init_soil_tw()
Definition: ERF_SLM.cpp:1658
void soil_temperature(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:4448
amrex::MultiFab LAI
Definition: ERF_SLM.H:779
amrex::Real bats_vis_new_rad
Definition: ERF_SLM.H:905
amrex::MultiFab wet_canop
Definition: ERF_SLM.H:848
amrex::Vector< std::string > LsmFluxName
Definition: ERF_SLM.H:676
static constexpr amrex::Real cp_water
Definition: ERF_SLM.H:748
amrex::Real m_dt
Definition: ERF_SLM.H:696
amrex::Real tausoil
Definition: ERF_SLM.H:739
static void GotoNextLine(std::istream &is)
Definition: ERF_SLM_IO.cpp:375
amrex::MultiFab IR_emis_grnd
Definition: ERF_SLM.H:795
static std::unordered_map< std::string, std::string > wrfinput_map
Definition: ERF_SLM.H:956
void WriteCheckpoint(const int &lev, const std::string &checkpointname) const override
Definition: ERF_SLM_IO.cpp:381
std::vector< amrex::Real > m_dz_lsm
Definition: ERF_SLM.H:718
amrex::iMultiFab nroot
Definition: ERF_SLM.H:778
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE void twostream_noahmp(int ib, int ic, int vegtyp, amrex::Real cosz, amrex::Real vai, amrex::Real fwet, amrex::Real t, const amrex::Real *albgrd, const amrex::Real *albgri, const amrex::Real *rho, const amrex::Real *tau, amrex::Real fveg, int ist, amrex::Real xl, amrex::Real omegas_param, amrex::Real betads, amrex::Real betais, int opt_rad, amrex::Real rc, amrex::Real hvt, amrex::Real hvb, amrex::Real den, amrex::Real *fab, amrex::Real *fre, amrex::Real *ftd, amrex::Real *fti, amrex::Real &gdir, amrex::Real *frev, amrex::Real *freg, amrex::Real &bgap, amrex::Real &wgap, amrex::Real &xl_out, amrex::Real &chil_out, amrex::Real &phi1_out, amrex::Real &phi2_out)
Definition: ERF_SLM.cpp:5271
bool use_wrf_lai
Definition: ERF_SLM.H:881
static constexpr amrex::Real t_canop_max
Definition: ERF_SLM.H:733
amrex::MultiFab q_sfc
Definition: ERF_SLM.H:768
std::string rad_input_file
Definition: ERF_SLM.H:719
amrex::MultiFab t_sfc
Definition: ERF_SLM.H:767
amrex::Real betads_rad
Definition: ERF_SLM.H:895
amrex::MultiFab t_cas
Definition: ERF_SLM.H:769
void soil_nudging(const amrex::MFIter &mfi3d)
Definition: ERF_SLM.cpp:4611
bool wrfinput_initialized
Definition: ERF_SLM.H:984
amrex::MultiFab ztop
Definition: ERF_SLM.H:796
amrex::MultiFab albedovis_s
Definition: ERF_SLM.H:835
void Advance(const amrex::Real &dt, const amrex::Real &t_new, const amrex::Real &t_start) override
Definition: ERF_SLM.H:266
SLMParameterTable ReadParameterFile(const std::string &filename, amrex::Vector< std::string > &veg_categories, amrex::Vector< std::string > &soil_categories)
Definition: ERF_SLM.cpp:2216
int klo_lsm
Definition: ERF_SLM.H:701
amrex::Gpu::DeviceVector< amrex::Real > d_lai_next
Definition: ERF_SLM.H:875
amrex::MultiFab vege_YES
Definition: ERF_SLM.H:785
int m_orbital_mon
Definition: ERF_SLM.H:943
void Advance(const double &dt) override
Definition: ERF_SLM.H:260
amrex::MultiFab shf_canop
Definition: ERF_SLM.H:821
void fluxes_canopy(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:3728
std::string veg_dataset
Definition: ERF_SLM.H:857
static constexpr amrex::Real IR_emis_urban
Definition: ERF_SLM.H:758
void validate_parameter_tables()
Definition: ERF_SLM.cpp:2317
amrex::Real dirt_soot_rad
Definition: ERF_SLM.H:902
amrex::Real swemx_rad
Definition: ERF_SLM.H:911
static const std::vector< std::string > diag_names
Definition: ERF_SLM.H:1041
amrex::MultiFab slm_diag
Definition: ERF_SLM.H:950
amrex::Array< FabPtr, LsmVar_SLM::NumVars > lsm_fab_vars
Definition: ERF_SLM.H:704
static constexpr amrex::Real cp
Definition: ERF_SLM.H:747
SLMParameterTable full_params
Definition: ERF_SLM.H:863
amrex::MultiFab precip_extinc
Definition: ERF_SLM.H:801
amrex::Real bats_nir_new_rad
Definition: ERF_SLM.H:906
void Copy_State_to_Lsm(const amrex::MultiFab &cons_in, const amrex::MultiFab &u_in, const amrex::MultiFab &v_in) override
Definition: ERF_SLM.cpp:4680
void Lsm_Set_Source_Unmapped_Ptr(const int &varIdx, amrex::MultiFab *source_data_ptr) override
Definition: ERF_SLM.H:373
amrex::MultiFab precip_sfc
Definition: ERF_SLM.H:802
static constexpr const char * LsmVarName_Full[]
Definition: ERF_SLM.H:1030
static constexpr amrex::Real tfriz
Definition: ERF_SLM.H:742
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE void surrad_noahmp(amrex::Real mpe, amrex::Real fsun, amrex::Real fsha, amrex::Real elai, amrex::Real vai, amrex::Real laisun, amrex::Real laisha, const amrex::Real *solad, const amrex::Real *solai, const amrex::Real *fabd, const amrex::Real *fabi, const amrex::Real *ftdd, const amrex::Real *ftid, const amrex::Real *ftii, const amrex::Real *albgrd, const amrex::Real *albgri, const amrex::Real *albd, const amrex::Real *albi, const amrex::Real *frevd, const amrex::Real *frevi, const amrex::Real *fregd, const amrex::Real *fregi, amrex::Real &parsun, amrex::Real &parsha, amrex::Real &sav, amrex::Real &sag, amrex::Real &fsa, amrex::Real &fsr, amrex::Real &fsrv, amrex::Real &fsrg)
Definition: ERF_SLM.cpp:5508
amrex::MultiFab t_skin
Definition: ERF_SLM.H:765
amrex::Vector< std::string > param_veg_categories
Definition: ERF_SLM.H:864
int opt_rad
Definition: ERF_SLM.H:885
void resistances(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:3438
amrex::Vector< amrex::Real > clay0
Definition: ERF_SLM.H:725
amrex::MultiFab albedonir_s
Definition: ERF_SLM.H:835
int Lsm_FluxIndex(const std::string &varname) override
Definition: ERF_SLM.H:431
amrex::Geometry m_geom
Definition: ERF_SLM.H:679
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE void snow_age_noahmp(amrex::Real dt, amrex::Real tg, amrex::Real sneqvo, amrex::Real sneqv, amrex::Real tau0, amrex::Real grain_growth, amrex::Real extra_growth, amrex::Real dirt_soot, amrex::Real swemx, amrex::Real &tauss, amrex::Real &fage)
Definition: ERF_SLM.cpp:5101
amrex::Real bats_nir_dir_rad
Definition: ERF_SLM.H:910
amrex::MultiFab albold_noahmp
Definition: ERF_SLM.H:935
int num_soil_params
Definition: ERF_SLM.H:861
void slm_init()
Definition: ERF_SLM.cpp:832
int Lsm_Flux_Size() override
Definition: ERF_SLM.H:398
amrex::Real Rc_max
Definition: ERF_SLM.H:753
amrex::Geometry Lsm_Geom() override
Definition: ERF_SLM.H:317
amrex::Vector< amrex::MultiFab * > source_flux
Definition: ERF_SLM.H:711
amrex::MultiFab * Lsm_Data_Ptr(const int &varIdx) override
Definition: ERF_SLM.H:297
amrex::Real m_calday
Definition: ERF_SLM.H:941
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real linear_interp(const amrex::Real t0, const amrex::Real t1, const amrex::Real t, const amrex::Real x, const amrex::Real y)
Definition: ERF_SLM.cpp:4668
std::string parameter_file
Definition: ERF_SLM.H:856
amrex::MultiFab mws
Definition: ERF_SLM.H:764
amrex::MultiFab Rgl
Definition: ERF_SLM.H:798
amrex::MultiFab IR_emis_vege
Definition: ERF_SLM.H:793
bool dosoilwnudging
Definition: ERF_SLM.H:737
amrex::Real time
Definition: ERF_SLM.H:850
amrex::MultiFab sstxy
Definition: ERF_SLM.H:781
bool interpolate_lai
Definition: ERF_SLM.H:880
amrex::MultiFab IMPERV
Definition: ERF_SLM.H:806
amrex::MultiFab r_d
Definition: ERF_SLM.H:842
int m_lsm_data_size
Definition: ERF_SLM.H:665
void init_layer_depths()
Definition: ERF_SLM.cpp:1832
void ReadCheckpoint(const int &lev, const std::string &checkpointname) override
Definition: ERF_SLM_IO.cpp:683
amrex::iMultiFab landtype
Definition: ERF_SLM.H:777
amrex::MultiFab r_c
Definition: ERF_SLM.H:841
void Lsm_Set_Source_Flux_Ptr(const int &varIdx, amrex::MultiFab *source_flux_ptr) override
Definition: ERF_SLM.H:343
int Lsm_Type() override
Definition: ERF_SLM.H:483
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real fh_calc(const amrex::Real &t, const amrex::Real &mps, const amrex::Real &sw, const amrex::Real &B)
Definition: ERF_SLM.cpp:4660
std::string Lsm_DataName(const int &varIdx) override
Definition: ERF_SLM.H:402
std::vector< std::vector< amrex::Real > > sai_table
Definition: ERF_SLM.H:871
void transfer_coeff(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:3214
amrex::Vector< amrex::Real > st0
Definition: ERF_SLM.H:728
static constexpr amrex::Real r_litter
Definition: ERF_SLM.H:844
amrex::Vector< amrex::MultiFab * > source_unmapped
Definition: ERF_SLM.H:712
void soil_water(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:4172
void set_precip_input(const amrex::MultiFab *precip_in) override
Definition: ERF_SLM.cpp:4818
void Update_Lsm_Vars(amrex::MultiFab &cons_in, amrex::MultiFab &u_in, amrex::MultiFab &v_in) override
Definition: ERF_SLM.H:456
amrex::TableData< amrex::Real, 2 > d_param_table
Definition: ERF_SLM.H:939
void solve_ground_skin_temperature(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:3885
amrex::Real extra_growth_rad
Definition: ERF_SLM.H:901
amrex::Vector< std::string > LsmDataName
Definition: ERF_SLM.H:675
void init_wrfinput_vars()
Definition: ERF_SLM.cpp:954
void set_dt(const amrex::Real &dt)
Definition: ERF_SLM.H:631
amrex::BoxArray ba_lsm_2d
Definition: ERF_SLM.H:693
amrex::MultiFab evapo_dry
Definition: ERF_SLM.H:817
amrex::MultiFab r_a
Definition: ERF_SLM.H:839
std::shared_ptr< amrex::MultiFab > FabPtr
Definition: ERF_SLM.H:187
amrex::MultiFab t_ground_skin
Definition: ERF_SLM.H:766
bool first_step
Definition: ERF_SLM.H:853
amrex::Gpu::DeviceVector< amrex::Real > d_sai_curr
Definition: ERF_SLM.H:876
void AdvanceSLM()
Definition: ERF_SLM.cpp:2895
void albedo_noahmp(const amrex::MFIter &mfi, int i, int j, amrex::Real dt, amrex::Real cosz, amrex::Real snowh, amrex::Real fsno, amrex::Real fwet, amrex::Real sneqvo, amrex::Real sneqv, amrex::Real qsnow, amrex::Real tg, amrex::Real tv, amrex::Real elai, amrex::Real esai, const amrex::Real *smc, int nsoil, amrex::Real fveg, amrex::Real &albold, amrex::Real &tauss, amrex::Real *albgrd, amrex::Real *albgri, amrex::Real *albd, amrex::Real *albi, amrex::Real *fabd, amrex::Real *fabi, amrex::Real *ftdd, amrex::Real *ftid, amrex::Real *ftii, amrex::Real &fsun, amrex::Real *frevd, amrex::Real *frevi, amrex::Real *fregd, amrex::Real *fregi, amrex::Real &bgap, amrex::Real &wgap, amrex::Real *albsnd, amrex::Real *albsni)
amrex::MultiFab r_b
Definition: ERF_SLM.H:840
std::string Lsm_FluxName(const int &varIdx) override
Definition: ERF_SLM.H:424
amrex::Geometry m_lsm_geom
Definition: ERF_SLM.H:685
void Lsm_Set_Source_Data_Ptr(const int &varIdx, amrex::MultiFab *source_data_ptr) override
Definition: ERF_SLM.H:329
void Lsm_Regrid_Level(const int &lev, const amrex::MultiFab &cons_in, const amrex::MultiFab &u_in, const amrex::MultiFab &v_in, const amrex::Geometry &geom, const amrex::Geometry &geom0, amrex::Vector< amrex::BCRec > &domain_bcs_type, amrex::IntVect &refRatio, const amrex::Real &dt, std::unique_ptr< amrex::MultiFab > &z_phys_nd_in, amrex::Vector< amrex::Vector< std::string >> &nc_init_file, const amrex::Geometry &source_geom, const amrex::Geometry &source_lsm_geom, const amrex::IntVect &source_ref_ratio, const bool has_source) override
Definition: ERF_SLM.cpp:1090
int m_nz_lsm
Definition: ERF_SLM.H:715
int m_orbital_sec
Definition: ERF_SLM.H:945
amrex::MultiFab * Lsm_Unmapped_Ptr(const int &varIdx) override
Definition: ERF_SLM.H:363
amrex::MultiFab BAI
Definition: ERF_SLM.H:805
int m_orbital_year
Definition: ERF_SLM.H:942
amrex::Real zref
Definition: ERF_SLM.H:755
amrex::MultiFab lhf_soil
Definition: ERF_SLM.H:827
amrex::Real grain_growth_rad
Definition: ERF_SLM.H:900
int Lsm_Data_Size() override
Definition: ERF_SLM.H:394
amrex::Gpu::DeviceVector< amrex::Real > d_lai_curr
Definition: ERF_SLM.H:874
int num_landtypes
Definition: ERF_SLM.H:859
void Copy_Lsm_to_State(amrex::MultiFab &cons_in) override
Definition: ERF_SLM.cpp:4911
std::vector< std::vector< amrex::Real > > lai_table
Definition: ERF_SLM.H:872
amrex::MultiFab * z_phys_nd
Definition: ERF_SLM.H:947
bool Get_Update_Status() override
Definition: ERF_SLM.H:468
void init_landtype()
Definition: ERF_SLM.cpp:1339
void UpdateLAI(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:2714
amrex::MultiFab phi_1
Definition: ERF_SLM.H:791
amrex::MultiFab q_cas
Definition: ERF_SLM.H:770
amrex::Real eg_lake_rad
Definition: ERF_SLM.H:916
amrex::Vector< int > LsmDataMap
Definition: ERF_SLM.H:671
amrex::Real bats_nir_age_rad
Definition: ERF_SLM.H:908
bool params_updated
Definition: ERF_SLM.H:882
amrex::MultiFab sdew
Definition: ERF_SLM.H:773
amrex::Real betais_rad
Definition: ERF_SLM.H:896
amrex::MultiFab albedonir_v
Definition: ERF_SLM.H:834
amrex::MultiFab dleaf
Definition: ERF_SLM.H:788
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE void snowalb_bats_noahmp(int nband, amrex::Real fsno, amrex::Real cosz, amrex::Real fage, amrex::Real bats_cosz, amrex::Real bats_vis_new, amrex::Real bats_nir_new, amrex::Real bats_vis_age, amrex::Real bats_nir_age, amrex::Real bats_vis_dir, amrex::Real bats_nir_dir, amrex::Real *albsnd, amrex::Real *albsni)
Definition: ERF_SLM.cpp:5154
amrex::Geometry Lsm_Atmos_Geom() override
Definition: ERF_SLM.H:323
amrex::Vector< int > unmapped_fields
Definition: ERF_SLM.H:987
amrex::MultiFab cp_vege
Definition: ERF_SLM.H:786
amrex::Vector< amrex::Real > relax_hgt
Definition: ERF_SLM.H:729
std::unordered_map< std::string, std::unique_ptr< amrex::Gpu::DeviceVector< amrex::Real > > > d_rad_params
Definition: ERF_SLM.H:869
std::unordered_map< std::string, std::string > & get_rad_output_map()
Definition: ERF_SLM.H:640
void Update_State_Vars(amrex::MultiFab &cons_in) override
Definition: ERF_SLM.H:471
amrex::MultiFab lhf_air
Definition: ERF_SLM.H:828
amrex::Vector< const amrex::MultiFab * > slm_to_rad_vars
Definition: ERF_SLM.H:952
amrex::MultiFab lhf_canop
Definition: ERF_SLM.H:826
void initialize_zrefxy()
Definition: ERF_SLM.cpp:1227
bool use_wrfinput
Definition: ERF_SLM.H:983
amrex::Real eg_soil_rad
Definition: ERF_SLM.H:915
amrex::MultiFab mws_mx
Definition: ERF_SLM.H:804
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE void groundalb_noahmp(int nsoil, int nband, int ice, int ist, amrex::Real fsno, const amrex::Real *smc, const amrex::Real *albsnd, const amrex::Real *albsni, amrex::Real cosz, amrex::Real tg, const amrex::Real *albsat, const amrex::Real *albdry, const amrex::Real *alblak, amrex::Real *albgrd, amrex::Real *albgri)
Definition: ERF_SLM.cpp:5209
amrex::Real z0_soil
Definition: ERF_SLM.H:741
amrex::MultiFab disp_hgt
Definition: ERF_SLM.H:797
amrex::MultiFab albedovis_v
Definition: ERF_SLM.H:834
int opt_alb
Definition: ERF_SLM.H:886
amrex::MultiFab tauss_noahmp
Definition: ERF_SLM.H:936
amrex::MultiFab r_soil
Definition: ERF_SLM.H:843
std::vector< std::vector< amrex::Real > > param_table
Definition: ERF_SLM.H:938
amrex::Real rsurf_exp
Definition: ERF_SLM.H:903
amrex::MultiFab soilt_vars
Definition: ERF_SLM.H:811
int m_orbital_day
Definition: ERF_SLM.H:944
amrex::MultiFab hs_rc
Definition: ERF_SLM.H:800
amrex::Real t00
Definition: ERF_SLM.H:732
amrex::MultiFab soilw_vars
Definition: ERF_SLM.H:812
amrex::Real LAI0
Definition: ERF_SLM.H:724
amrex::MultiFab Rc_min
Definition: ERF_SLM.H:799
amrex::iMultiFab vegetype
Definition: ERF_SLM.H:784
amrex::Vector< int > LsmFluxMap
Definition: ERF_SLM.H:672
amrex::MultiFab evapo_wet
Definition: ERF_SLM.H:818
std::string soil_dataset
Definition: ERF_SLM.H:858
bool m_updated
Definition: ERF_SLM.H:854
std::unordered_map< std::string, std::unique_ptr< amrex::Gpu::DeviceVector< amrex::Real > > > d_soil_params
Definition: ERF_SLM.H:867
amrex::MultiFab zrefxy
Definition: ERF_SLM.H:756
static std::unordered_map< std::string, std::string > rad_output_map
Definition: ERF_SLM.H:972
amrex::Array< FabPtr, LsmFlux_SLM::NumVars > lsm_fab_flux
Definition: ERF_SLM.H:707
amrex::MultiFab SAI
Definition: ERF_SLM.H:780
void UpdateLAIParameters(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:2857
static constexpr amrex::Real sigma
Definition: ERF_SLM.H:750
int num_veg_params
Definition: ERF_SLM.H:860
void rebuild_restart_fields()
Definition: ERF_SLM.cpp:2113
amrex::MultiFab IR_emis_soil
Definition: ERF_SLM.H:794
Definition: ERF_NCInterface.H:344
@ SLM
Definition: ERF_LSM_Types.H:8
@ None
Definition: ERF_LSM_Types.H:6
Definition: ERF_SLM.H:97
@ NumVars
Definition: ERF_SLM.H:105
@ t_flux
Definition: ERF_SLM.H:100
@ tau23
Definition: ERF_SLM.H:103
@ tau13
Definition: ERF_SLM.H:102
@ q_flux
Definition: ERF_SLM.H:101
@ olen
Definition: ERF_SLM.H:104
Definition: ERF_SLM.H:24
@ mv
Definition: ERF_SLM.H:47
@ theta_FC
Definition: ERF_SLM.H:70
@ pref
Definition: ERF_SLM.H:34
@ uref
Definition: ERF_SLM.H:36
@ swdsvisxyref
Definition: ERF_SLM.H:39
@ ustar
Definition: ERF_SLM.H:28
@ alb_nir_sfc_diff
Definition: ERF_SLM.H:91
@ ks
Definition: ERF_SLM.H:74
@ sst_cond
Definition: ERF_SLM.H:68
@ flbu
Definition: ERF_SLM.H:83
@ vref
Definition: ERF_SLM.H:37
@ soilt_obs
Definition: ERF_SLM.H:60
@ emis_sfc
Definition: ERF_SLM.H:88
@ NumVars
Definition: ERF_SLM.H:93
@ theta_WP
Definition: ERF_SLM.H:71
@ flbv
Definition: ERF_SLM.H:84
@ qref
Definition: ERF_SLM.H:33
@ soilw
Definition: ERF_SLM.H:49
@ clay
Definition: ERF_SLM.H:52
@ sw_over_sat
Definition: ERF_SLM.H:58
@ swdsnirxyref
Definition: ERF_SLM.H:40
@ vegtype
Definition: ERF_SLM.H:77
@ soiltype
Definition: ERF_SLM.H:78
@ soilw_nudge
Definition: ERF_SLM.H:56
@ m_pot_sat
Definition: ERF_SLM.H:72
@ interface_z
Definition: ERF_SLM.H:55
@ soilt_nudge
Definition: ERF_SLM.H:57
@ poro_soil
Definition: ERF_SLM.H:69
@ tref
Definition: ERF_SLM.H:32
@ s_depth
Definition: ERF_SLM.H:53
@ w_s_WP
Definition: ERF_SLM.H:65
@ sst_capa
Definition: ERF_SLM.H:67
@ flbq
Definition: ERF_SLM.H:85
@ alb_vis_sfc_diff
Definition: ERF_SLM.H:92
@ swdsvisdxyref
Definition: ERF_SLM.H:41
@ Bconst
Definition: ERF_SLM.H:73
@ node_z
Definition: ERF_SLM.H:54
@ coszrsxy
Definition: ERF_SLM.H:44
@ flbt
Definition: ERF_SLM.H:86
@ veg_frac
Definition: ERF_SLM.H:79
@ dref
Definition: ERF_SLM.H:35
@ veg_frac_max
Definition: ERF_SLM.H:81
@ alb_vis_sfc
Definition: ERF_SLM.H:90
@ soil_relax_hgt
Definition: ERF_SLM.H:59
@ tv
Definition: ERF_SLM.H:46
@ qstar
Definition: ERF_SLM.H:30
@ tsurf
Definition: ERF_SLM.H:27
@ swdsnirdxyref
Definition: ERF_SLM.H:42
@ prsfc
Definition: ERF_SLM.H:87
@ veg_frac_min
Definition: ERF_SLM.H:80
@ lai
Definition: ERF_SLM.H:76
@ alb_nir_sfc
Definition: ERF_SLM.H:89
@ soilt
Definition: ERF_SLM.H:48
@ soilw_obs
Definition: ERF_SLM.H:61
@ sand
Definition: ERF_SLM.H:51
@ soil_transp_frac
Definition: ERF_SLM.H:63
@ lwref
Definition: ERF_SLM.H:43
@ precipref
Definition: ERF_SLM.H:38
@ w_s_FC
Definition: ERF_SLM.H:64
@ tstar
Definition: ERF_SLM.H:29
@ rho
Definition: ERF_Kessler.H:25
constexpr std::array< amrex::Real, num_veg_params > den
Definition: ERF_SLM_DefaultParams.H:16
constexpr std::array< amrex::Real, num_veg_params > rc
Definition: ERF_SLM_DefaultParams.H:22
constexpr std::array< amrex::Real, num_veg_params > hvb
Definition: ERF_SLM_DefaultParams.H:19
constexpr std::array< amrex::Real, 2 > alblak
Definition: ERF_SLM_DefaultParams.H:58
Definition: ERF_SLM.H:146
@ st_eff_cond
Definition: ERF_SLM.H:150
@ beta
Definition: ERF_SLM.H:152
@ alpha
Definition: ERF_SLM.H:151
@ NumVars
Definition: ERF_SLM.H:153
@ st_capa
Definition: ERF_SLM.H:149
@ st_cond
Definition: ERF_SLM.H:148
Definition: ERF_SLM.H:156
@ sw_wgt
Definition: ERF_SLM.H:158
@ sh_eff_cond
Definition: ERF_SLM.H:159
@ NumVars
Definition: ERF_SLM.H:164
@ beta
Definition: ERF_SLM.H:162
@ alpha
Definition: ERF_SLM.H:161
@ sh_eff_vel
Definition: ERF_SLM.H:160
@ sdepth_mm
Definition: ERF_SLM.H:163
Definition: ERF_SLM.H:131
@ evapo_wet
Definition: ERF_SLM.H:139
@ precip_sfc
Definition: ERF_SLM.H:135
@ grflux
Definition: ERF_SLM.H:140
@ NumVars
Definition: ERF_SLM.H:141
@ drain
Definition: ERF_SLM.H:137
@ precip_in
Definition: ERF_SLM.H:134
@ precip
Definition: ERF_SLM.H:133
@ drain_flux
Definition: ERF_SLM.H:138
@ run_off_sfc
Definition: ERF_SLM.H:136
Definition: ERF_SLM.H:109
@ net_lwdn1
Definition: ERF_SLM.H:121
@ net_swdn1
Definition: ERF_SLM.H:113
@ NumVars
Definition: ERF_SLM.H:127
@ net_sw1
Definition: ERF_SLM.H:115
@ net_lw2
Definition: ERF_SLM.H:124
@ net_rad2
Definition: ERF_SLM.H:126
@ net_swdn2
Definition: ERF_SLM.H:114
@ tir2
Definition: ERF_SLM.H:118
@ net_sw2
Definition: ERF_SLM.H:116
@ net_lwdn2
Definition: ERF_SLM.H:122
@ net_lwup1
Definition: ERF_SLM.H:119
@ net_lw1
Definition: ERF_SLM.H:123
@ net_swup1
Definition: ERF_SLM.H:111
@ tir1
Definition: ERF_SLM.H:117
@ net_swup2
Definition: ERF_SLM.H:112
@ net_rad1
Definition: ERF_SLM.H:125
@ net_lwup2
Definition: ERF_SLM.H:120
@ xl
Definition: ERF_WSM6.H:324
@ t
Definition: ERF_WSM6.H:272
real(c_double), parameter t0
Definition: ERF_module_model_constants.F90:39
Definition: ERF_DataStruct.H:685
static InitType init_type
Initial-condition source selected for the run.
Definition: ERF_DataStruct.H:2218
MoistureType moisture_type
Moisture or microphysics model.
Definition: ERF_DataStruct.H:2524
static TerrainType terrain_type
Terrain or immersed-boundary representation.
Definition: ERF_DataStruct.H:2224