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>
168 using SLMParameterTable = std::unordered_map<std::string, amrex::Vector<std::pair<std::string, amrex::Vector<amrex::Real>>>>;
187 using FabPtr = std::shared_ptr<amrex::MultiFab>;
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.");
221 amrex::Print() <<
" SLM is initializing from "
222 << ((sc.
init_type == InitType::WRFInput) ?
"WRFInput" :
"metgrid")
223 <<
" data!" << std::endl;
233 const amrex::MultiFab& cons_in,
234 const amrex::MultiFab& u_in,
235 const amrex::MultiFab& v_in,
236 const amrex::Geometry& geom,
237 const amrex::Geometry& geom0,
238 amrex::Vector<amrex::BCRec>& domain_bcs_type,
239 amrex::IntVect& refRatio,
241 std::unique_ptr<amrex::MultiFab>& z_phys_nd_in,
242 amrex::Vector<amrex::Vector<std::string>>& nc_init_file)
override;
249 const amrex::MultiFab& cons_in,
250 const amrex::MultiFab& u_in,
251 const amrex::MultiFab& v_in,
252 const amrex::Geometry& geom,
253 const amrex::Geometry& geom0,
254 amrex::Vector<amrex::BCRec>& domain_bcs_type,
255 amrex::IntVect& refRatio,
257 std::unique_ptr<amrex::MultiFab>& z_phys_nd_in,
258 amrex::Vector<amrex::Vector<std::string>>& nc_init_file,
259 const amrex::Geometry& source_geom,
260 const amrex::Geometry& source_lsm_geom,
261 const amrex::IntVect& source_ref_ratio,
262 const bool has_source)
override;
336 amrex::MultiFab* source_data_ptr)
override
350 amrex::MultiFab* source_flux_ptr)
override
380 amrex::MultiFab* source_data_ptr)
override
409 const amrex::Geometry& source_lsm_geom,
410 const amrex::IntVect& ref_ratio,
433 std::string lc_varname = amrex::toLower(varname);
439 AMREX_ASSERT(varIdx != -1);
455 std::string lc_varname = amrex::toLower(varname);
465 std::unordered_map<std::string, std::string>&
471 Copy_State_to_Lsm (
const amrex::MultiFab& cons_in,
const amrex::MultiFab& u_in,
const amrex::MultiFab& v_in)
override;
477 Update_Lsm_Vars (amrex::MultiFab& cons_in, amrex::MultiFab& u_in, amrex::MultiFab& v_in)
override
508 const amrex::Vector<std::unique_ptr<amrex::iMultiFab>>& lmask_in)
override;
515 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);
560 void UpdateLAI (
const amrex::MFIter &mfi);
579 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
589 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
595 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
602 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
609 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
634 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
638 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
643 #ifdef ERF_USE_NETCDF
644 void writeSLM_NetCDF (
const amrex::MultiFab& mf,
const amrex::Vector<std::string>& varnames,
645 const amrex::Real cur_time,
const std::string plot_prefix,
const int level_step);
647 void writeNCHeader (
ncutils::NCFile &nc_file,
const amrex::Geometry &geom);
650 const std::string
name,
amrex::Real cur_time,
bool write_ghost =
false);
653 const amrex::Vector<const amrex::MultiFab*> &mf_vec,
654 const amrex::Vector<std::string> &mf_names,
655 const amrex::Geometry& geom)
const;
678 void WriteCheckpoint (
const int &lev,
const std::string &checkpointname)
const override;
680 void ReadCheckpoint (
const int &lev,
const std::string &checkpointname)
override;
756 amrex::Vector<amrex::Real>
sw0;
757 amrex::Vector<amrex::Real>
st0;
896 std::unordered_map<std::string, std::unique_ptr<amrex::Gpu::DeviceVector<amrex::Real>>>
d_soil_params;
897 std::unordered_map<std::string, std::unique_ptr<amrex::Gpu::DeviceVector<amrex::Real>>>
d_veg_params;
898 std::unordered_map<std::string, std::unique_ptr<amrex::Gpu::DeviceVector<amrex::Real>>>
d_rad_params;
985 inline static std::unordered_map<std::string, std::string>
wrfinput_map = {
986 {
"DZS",
"soil_thickness"},
991 {
"IVGTYP",
"vegtype"},
992 {
"ISLTYP",
"soiltype"},
994 {
"VEGFRA",
"veg_frac"},
995 {
"SHDMIN",
"veg_frac_min"},
996 {
"SHDMAX",
"veg_frac_max"},
1002 {
"cos_zenith_angle",
"cos_zenith"},
1004 {
"sw_flux_dn_dir_vis",
"SW_dw_dir_vis"},
1005 {
"sw_flux_dn_dir_nir",
"SW_dw_dir_nir"},
1006 {
"sw_flux_dn_dif_vis",
"SW_dw_dif_vis"},
1007 {
"sw_flux_dn_dif_nir",
"SW_dw_dif_nir"},
1008 {
"lw_flux_dn",
"LW_dw"}
1071 "tsurf",
"ustar",
"tstar",
"qstar",
"ref_t",
"ref_q",
"ref_p",
"ref_d",
"ref_u",
"ref_v",
"ref_precip",
1072 "SW_dw_dir_vis",
"SW_dw_dir_nir",
"SW_dw_dif_vis",
"SW_dw_dif_nir",
"LW_dw",
"zenith",
1073 "tveg",
"mv",
"tsoil",
"wsoil",
"sand",
"clay",
"soil_thickness",
"node_z",
"interface_z",
1074 "soilw_nudge",
"soilt_nudge",
"sw_over_sat",
"soil_relax_hgt",
"soilt_obs",
"soilw_obs",
"soil_transp_frac",
"w_s_FC",
"w_s_WP",
1075 "sst_capa",
"sst_cond",
"poro_soil",
"theta_FC",
"theta_WP",
"m_pot_sat",
"Bconst",
"ks",
"lai",
"vegtype",
"soiltype",
1076 "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"
1092 #ifdef ERF_USE_NETCDF
1094 inline static const std::unordered_set<int> const_vars = {
1116 inline static const std::vector<std::string> soilt_var_names = {
1124 inline static const std::vector<std::string> soilw_var_names = {
1133 amrex::MultiFab rad_input_data;
1134 int num_rad_times = 0;
1135 amrex::Vector<amrex::Real> rad_times;
1136 inline static const std::vector<std::string> rad_names = {
1137 "S_SWVIS",
"S_SWNIR",
"S_SWVISD",
"S_SWNIRD",
"S_COSZRS",
"S_LWDS"};
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)
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int idx(int i, int j, int k, int nx, int ny)
Definition: ERF_InitForEnsemble.cpp:404
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:116
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:818
amrex::MultiFab mw
Definition: ERF_SLM.H:792
amrex::Vector< amrex::Real > sand0
Definition: ERF_SLM.H:755
amrex::MultiFab t_canop
Definition: ERF_SLM.H:791
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:5091
amrex::Real start_time
Definition: ERF_SLM.H:881
void Define(SolverChoice &sc) override
Definition: ERF_SLM.H:200
amrex::MultiFab evp_air
Definition: ERF_SLM.H:860
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:1280
amrex::Real snow_emis_rad
Definition: ERF_SLM.H:943
amrex::Geometry m_geom0
Definition: ERF_SLM.H:711
amrex::MultiFab * Lsm_Flux_Ptr(const int &varIdx) override
Definition: ERF_SLM.H:313
SLM()
Definition: ERF_SLM.H:193
amrex::MultiFab q_gr
Definition: ERF_SLM.H:801
amrex::Real bats_cosz_rad
Definition: ERF_SLM.H:933
amrex::Gpu::DeviceVector< amrex::Real > d_sai_next
Definition: ERF_SLM.H:906
static const std::unordered_set< int > surf_vars
Definition: ERF_SLM.H:1032
void load_builtin_radiation_parameters()
Definition: ERF_SLM.cpp:902
void init_slm_vars()
Definition: ERF_SLM.cpp:2093
std::unordered_map< std::string, std::string > & Lsm_WRFInputNames() override
Definition: ERF_SLM.H:466
amrex::Real bats_vis_dir_rad
Definition: ERF_SLM.H:938
std::unordered_map< std::string, std::unique_ptr< amrex::Gpu::DeviceVector< amrex::Real > > > d_veg_params
Definition: ERF_SLM.H:897
amrex::iMultiFab landmask
Definition: ERF_SLM.H:805
amrex::MultiFab mw_mx
Definition: ERF_SLM.H:832
amrex::Vector< std::string > param_soil_categories
Definition: ERF_SLM.H:894
static constexpr amrex::Real epsv
Definition: ERF_SLM.H:774
bool use_terrain
Definition: ERF_SLM.H:764
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:1397
int Lsm_DataIndex(const std::string &varname) override
Definition: ERF_SLM.H:430
amrex::MultiFab shf_air
Definition: ERF_SLM.H:852
amrex::Real tabs_s
Definition: ERF_SLM.H:760
int khi_lsm
Definition: ERF_SLM.H:728
amrex::MultiFab net_rad
Definition: ERF_SLM.H:876
void init_soil_vars()
Definition: ERF_SLM.cpp:2021
bool use_param_file
Definition: ERF_SLM.H:908
amrex::Real tau0_rad
Definition: ERF_SLM.H:928
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_SLM.H:720
const amrex::Vector< const amrex::MultiFab * > & export_to_RRTMGP()
Definition: ERF_SLM.H:662
amrex::MultiFab evp_canop
Definition: ERF_SLM.H:858
int m_lsm_flux_size
Definition: ERF_SLM.H:697
amrex::MultiFab shf_soil
Definition: ERF_SLM.H:851
void radiation_noahmp(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:5786
int Lsm_Unmapped_Size() override
Definition: ERF_SLM.H:363
amrex::Vector< amrex::MultiFab * > source_data
Definition: ERF_SLM.H:739
void init_from_inputs()
Definition: ERF_SLM.cpp:515
amrex::MultiFab mw_inc
Definition: ERF_SLM.H:843
bool Lsm_Has_Atmos_State() override
Definition: ERF_SLM.H:393
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:5005
void initialize_surface_outputs()
Definition: ERF_SLM.cpp:2163
amrex::Vector< amrex::Real > sw0
Definition: ERF_SLM.H:756
amrex::MultiFab cbiom
Definition: ERF_SLM.H:816
void init_from_params()
Definition: ERF_SLM.cpp:2674
amrex::Real bats_vis_age_rad
Definition: ERF_SLM.H:936
amrex::Real T_opt
Definition: ERF_SLM.H:783
amrex::MultiFab Khai_L
Definition: ERF_SLM.H:819
int landtype0
Definition: ERF_SLM.H:751
bool dosoiltnudging
Definition: ERF_SLM.H:767
amrex::Geometry m_lsm_geom0
Definition: ERF_SLM.H:717
amrex::MultiFab phi_2
Definition: ERF_SLM.H:821
amrex::Real mws_mx0
Definition: ERF_SLM.H:772
amrex::MultiFab evp_soil
Definition: ERF_SLM.H:859
void init_soil_tw()
Definition: ERF_SLM.cpp:1802
void soil_temperature(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:4605
amrex::MultiFab LAI
Definition: ERF_SLM.H:808
const std::vector< amrex::Real > & get_soil_dz() const
Definition: ERF_SLM.H:672
amrex::Real bats_vis_new_rad
Definition: ERF_SLM.H:934
amrex::MultiFab wet_canop
Definition: ERF_SLM.H:877
amrex::Vector< std::string > LsmFluxName
Definition: ERF_SLM.H:705
static constexpr amrex::Real cp_water
Definition: ERF_SLM.H:777
amrex::Real m_dt
Definition: ERF_SLM.H:725
amrex::Real tausoil
Definition: ERF_SLM.H:768
static void GotoNextLine(std::istream &is)
Definition: ERF_SLM_IO.cpp:382
amrex::MultiFab IR_emis_grnd
Definition: ERF_SLM.H:824
static std::unordered_map< std::string, std::string > wrfinput_map
Definition: ERF_SLM.H:985
void WriteCheckpoint(const int &lev, const std::string &checkpointname) const override
Definition: ERF_SLM_IO.cpp:388
std::vector< amrex::Real > m_dz_lsm
Definition: ERF_SLM.H:747
amrex::iMultiFab nroot
Definition: ERF_SLM.H:807
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:5429
bool use_wrf_lai
Definition: ERF_SLM.H:910
InitType m_init_type
Definition: ERF_SLM.H:1013
static constexpr amrex::Real t_canop_max
Definition: ERF_SLM.H:762
amrex::MultiFab q_sfc
Definition: ERF_SLM.H:797
std::string rad_input_file
Definition: ERF_SLM.H:748
amrex::MultiFab t_sfc
Definition: ERF_SLM.H:796
amrex::Real betads_rad
Definition: ERF_SLM.H:924
amrex::MultiFab t_cas
Definition: ERF_SLM.H:798
void soil_nudging(const amrex::MFIter &mfi3d)
Definition: ERF_SLM.cpp:4768
bool wrfinput_initialized
Definition: ERF_SLM.H:1014
amrex::MultiFab ztop
Definition: ERF_SLM.H:825
amrex::MultiFab albedovis_s
Definition: ERF_SLM.H:864
void Advance(const amrex::Real &dt, const amrex::Real &t_new, const amrex::Real &t_start) override
Definition: ERF_SLM.H:272
SLMParameterTable ReadParameterFile(const std::string &filename, amrex::Vector< std::string > &veg_categories, amrex::Vector< std::string > &soil_categories)
Definition: ERF_SLM.cpp:2360
int klo_lsm
Definition: ERF_SLM.H:730
amrex::Gpu::DeviceVector< amrex::Real > d_lai_next
Definition: ERF_SLM.H:904
amrex::MultiFab vege_YES
Definition: ERF_SLM.H:814
int m_orbital_mon
Definition: ERF_SLM.H:972
void Advance(const double &dt) override
Definition: ERF_SLM.H:266
amrex::MultiFab shf_canop
Definition: ERF_SLM.H:850
void fluxes_canopy(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:3885
std::string veg_dataset
Definition: ERF_SLM.H:886
static constexpr amrex::Real IR_emis_urban
Definition: ERF_SLM.H:787
void validate_parameter_tables()
Definition: ERF_SLM.cpp:2461
amrex::Real dirt_soot_rad
Definition: ERF_SLM.H:931
amrex::Real swemx_rad
Definition: ERF_SLM.H:940
static const std::vector< std::string > diag_names
Definition: ERF_SLM.H:1081
amrex::MultiFab slm_diag
Definition: ERF_SLM.H:979
amrex::Array< FabPtr, LsmVar_SLM::NumVars > lsm_fab_vars
Definition: ERF_SLM.H:733
static constexpr amrex::Real cp
Definition: ERF_SLM.H:776
SLMParameterTable full_params
Definition: ERF_SLM.H:892
amrex::MultiFab precip_extinc
Definition: ERF_SLM.H:830
amrex::Real bats_nir_new_rad
Definition: ERF_SLM.H:935
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:4837
void Lsm_Set_Source_Unmapped_Ptr(const int &varIdx, amrex::MultiFab *source_data_ptr) override
Definition: ERF_SLM.H:379
amrex::MultiFab precip_sfc
Definition: ERF_SLM.H:831
static constexpr const char * LsmVarName_Full[]
Definition: ERF_SLM.H:1070
static constexpr amrex::Real tfriz
Definition: ERF_SLM.H:771
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:5666
amrex::MultiFab t_skin
Definition: ERF_SLM.H:794
amrex::Vector< std::string > param_veg_categories
Definition: ERF_SLM.H:893
int opt_rad
Definition: ERF_SLM.H:914
void resistances(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:3595
amrex::Vector< amrex::Real > clay0
Definition: ERF_SLM.H:754
amrex::MultiFab albedonir_s
Definition: ERF_SLM.H:864
bool init_from_atmos_pending
Definition: ERF_SLM.H:1024
int Lsm_FluxIndex(const std::string &varname) override
Definition: ERF_SLM.H:452
amrex::Geometry m_geom
Definition: ERF_SLM.H:708
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:5259
amrex::Real bats_nir_dir_rad
Definition: ERF_SLM.H:939
amrex::MultiFab albold_noahmp
Definition: ERF_SLM.H:964
int num_soil_params
Definition: ERF_SLM.H:890
void slm_init()
Definition: ERF_SLM.cpp:939
int Lsm_Flux_Size() override
Definition: ERF_SLM.H:419
amrex::Real Rc_max
Definition: ERF_SLM.H:782
amrex::Geometry Lsm_Geom() override
Definition: ERF_SLM.H:323
amrex::Vector< amrex::MultiFab * > source_flux
Definition: ERF_SLM.H:740
amrex::MultiFab * Lsm_Data_Ptr(const int &varIdx) override
Definition: ERF_SLM.H:303
amrex::Real m_calday
Definition: ERF_SLM.H:970
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:4825
std::string parameter_file
Definition: ERF_SLM.H:885
amrex::MultiFab mws
Definition: ERF_SLM.H:793
amrex::MultiFab Rgl
Definition: ERF_SLM.H:827
amrex::MultiFab IR_emis_vege
Definition: ERF_SLM.H:822
bool dosoilwnudging
Definition: ERF_SLM.H:766
amrex::Real time
Definition: ERF_SLM.H:879
amrex::MultiFab sstxy
Definition: ERF_SLM.H:810
bool interpolate_lai
Definition: ERF_SLM.H:909
amrex::MultiFab IMPERV
Definition: ERF_SLM.H:835
amrex::MultiFab r_d
Definition: ERF_SLM.H:871
int m_lsm_data_size
Definition: ERF_SLM.H:694
void init_layer_depths()
Definition: ERF_SLM.cpp:1976
void ReadCheckpoint(const int &lev, const std::string &checkpointname) override
Definition: ERF_SLM_IO.cpp:690
amrex::iMultiFab landtype
Definition: ERF_SLM.H:806
amrex::MultiFab r_c
Definition: ERF_SLM.H:870
void Lsm_Set_Source_Flux_Ptr(const int &varIdx, amrex::MultiFab *source_flux_ptr) override
Definition: ERF_SLM.H:349
int Lsm_Type() override
Definition: ERF_SLM.H:510
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:4817
std::string Lsm_DataName(const int &varIdx) override
Definition: ERF_SLM.H:423
std::vector< std::vector< amrex::Real > > sai_table
Definition: ERF_SLM.H:900
void transfer_coeff(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:3362
amrex::Vector< amrex::Real > st0
Definition: ERF_SLM.H:757
static constexpr amrex::Real r_litter
Definition: ERF_SLM.H:873
amrex::Vector< amrex::MultiFab * > source_unmapped
Definition: ERF_SLM.H:741
void soil_water(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:4329
void set_precip_input(const amrex::MultiFab *precip_in) override
Definition: ERF_SLM.cpp:4976
void Update_Lsm_Vars(amrex::MultiFab &cons_in, amrex::MultiFab &u_in, amrex::MultiFab &v_in) override
Definition: ERF_SLM.H:477
amrex::TableData< amrex::Real, 2 > d_param_table
Definition: ERF_SLM.H:968
void solve_ground_skin_temperature(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:4042
amrex::Real extra_growth_rad
Definition: ERF_SLM.H:930
amrex::Vector< std::string > LsmDataName
Definition: ERF_SLM.H:704
void init_wrfinput_vars()
Definition: ERF_SLM.cpp:1061
void set_dt(const amrex::Real &dt)
Definition: ERF_SLM.H:658
amrex::BoxArray ba_lsm_2d
Definition: ERF_SLM.H:722
amrex::MultiFab evapo_dry
Definition: ERF_SLM.H:846
amrex::MultiFab r_a
Definition: ERF_SLM.H:868
std::shared_ptr< amrex::MultiFab > FabPtr
Definition: ERF_SLM.H:187
amrex::MultiFab t_ground_skin
Definition: ERF_SLM.H:795
bool first_step
Definition: ERF_SLM.H:882
bool has_atmos_state
Definition: ERF_SLM.H:1019
amrex::Gpu::DeviceVector< amrex::Real > d_sai_curr
Definition: ERF_SLM.H:905
void AdvanceSLM()
Definition: ERF_SLM.cpp:3043
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:869
std::string Lsm_FluxName(const int &varIdx) override
Definition: ERF_SLM.H:445
amrex::Geometry m_lsm_geom
Definition: ERF_SLM.H:714
void Lsm_Set_Source_Data_Ptr(const int &varIdx, amrex::MultiFab *source_data_ptr) override
Definition: ERF_SLM.H:335
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:1197
int m_nz_lsm
Definition: ERF_SLM.H:744
int m_orbital_sec
Definition: ERF_SLM.H:974
amrex::MultiFab * Lsm_Unmapped_Ptr(const int &varIdx) override
Definition: ERF_SLM.H:369
amrex::MultiFab BAI
Definition: ERF_SLM.H:834
int m_orbital_year
Definition: ERF_SLM.H:971
void Lsm_Set_Source_Has_Atmos_State(bool source_has_atmos) override
Definition: ERF_SLM.H:399
amrex::Real zref
Definition: ERF_SLM.H:784
amrex::MultiFab lhf_soil
Definition: ERF_SLM.H:856
amrex::Real grain_growth_rad
Definition: ERF_SLM.H:929
int Lsm_Data_Size() override
Definition: ERF_SLM.H:415
amrex::Gpu::DeviceVector< amrex::Real > d_lai_curr
Definition: ERF_SLM.H:903
int num_landtypes
Definition: ERF_SLM.H:888
void Copy_Lsm_to_State(amrex::MultiFab &cons_in) override
Definition: ERF_SLM.cpp:5069
std::vector< std::vector< amrex::Real > > lai_table
Definition: ERF_SLM.H:901
amrex::MultiFab * z_phys_nd
Definition: ERF_SLM.H:976
bool Get_Update_Status() override
Definition: ERF_SLM.H:495
void init_landtype()
Definition: ERF_SLM.cpp:1483
void UpdateLAI(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:2858
amrex::MultiFab phi_1
Definition: ERF_SLM.H:820
amrex::MultiFab q_cas
Definition: ERF_SLM.H:799
amrex::Real eg_lake_rad
Definition: ERF_SLM.H:945
amrex::Vector< int > LsmDataMap
Definition: ERF_SLM.H:700
amrex::Real bats_nir_age_rad
Definition: ERF_SLM.H:937
bool params_updated
Definition: ERF_SLM.H:911
amrex::MultiFab sdew
Definition: ERF_SLM.H:802
amrex::Real betais_rad
Definition: ERF_SLM.H:925
amrex::MultiFab albedonir_v
Definition: ERF_SLM.H:863
amrex::MultiFab dleaf
Definition: ERF_SLM.H:817
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:5312
amrex::Geometry Lsm_Atmos_Geom() override
Definition: ERF_SLM.H:329
amrex::Vector< int > unmapped_fields
Definition: ERF_SLM.H:1027
amrex::MultiFab cp_vege
Definition: ERF_SLM.H:815
amrex::Vector< amrex::Real > relax_hgt
Definition: ERF_SLM.H:758
std::unordered_map< std::string, std::unique_ptr< amrex::Gpu::DeviceVector< amrex::Real > > > d_rad_params
Definition: ERF_SLM.H:898
std::unordered_map< std::string, std::string > & get_rad_output_map()
Definition: ERF_SLM.H:667
void Update_State_Vars(amrex::MultiFab &cons_in) override
Definition: ERF_SLM.H:498
amrex::MultiFab lhf_air
Definition: ERF_SLM.H:857
amrex::Vector< const amrex::MultiFab * > slm_to_rad_vars
Definition: ERF_SLM.H:981
amrex::MultiFab lhf_canop
Definition: ERF_SLM.H:855
void initialize_zrefxy()
Definition: ERF_SLM.cpp:1369
bool use_wrfinput
Definition: ERF_SLM.H:1012
amrex::Real eg_soil_rad
Definition: ERF_SLM.H:944
amrex::MultiFab mws_mx
Definition: ERF_SLM.H:833
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:5367
amrex::Real z0_soil
Definition: ERF_SLM.H:770
amrex::MultiFab disp_hgt
Definition: ERF_SLM.H:826
amrex::MultiFab albedovis_v
Definition: ERF_SLM.H:863
int opt_alb
Definition: ERF_SLM.H:915
amrex::MultiFab tauss_noahmp
Definition: ERF_SLM.H:965
amrex::MultiFab r_soil
Definition: ERF_SLM.H:872
std::vector< std::vector< amrex::Real > > param_table
Definition: ERF_SLM.H:967
amrex::Real rsurf_exp
Definition: ERF_SLM.H:932
amrex::MultiFab soilt_vars
Definition: ERF_SLM.H:840
int m_orbital_day
Definition: ERF_SLM.H:973
amrex::MultiFab hs_rc
Definition: ERF_SLM.H:829
amrex::Real t00
Definition: ERF_SLM.H:761
amrex::MultiFab soilw_vars
Definition: ERF_SLM.H:841
amrex::Real LAI0
Definition: ERF_SLM.H:753
amrex::MultiFab Rc_min
Definition: ERF_SLM.H:828
amrex::iMultiFab vegetype
Definition: ERF_SLM.H:813
amrex::Vector< int > LsmFluxMap
Definition: ERF_SLM.H:701
amrex::MultiFab evapo_wet
Definition: ERF_SLM.H:847
std::string soil_dataset
Definition: ERF_SLM.H:887
bool m_updated
Definition: ERF_SLM.H:883
std::unordered_map< std::string, std::unique_ptr< amrex::Gpu::DeviceVector< amrex::Real > > > d_soil_params
Definition: ERF_SLM.H:896
amrex::MultiFab zrefxy
Definition: ERF_SLM.H:785
static std::unordered_map< std::string, std::string > rad_output_map
Definition: ERF_SLM.H:1001
bool source_has_atmos_state
Definition: ERF_SLM.H:1020
amrex::Array< FabPtr, LsmFlux_SLM::NumVars > lsm_fab_flux
Definition: ERF_SLM.H:736
amrex::MultiFab SAI
Definition: ERF_SLM.H:809
void UpdateLAIParameters(const amrex::MFIter &mfi)
Definition: ERF_SLM.cpp:3005
static constexpr amrex::Real sigma
Definition: ERF_SLM.H:779
int num_veg_params
Definition: ERF_SLM.H:889
void rebuild_restart_fields()
Definition: ERF_SLM.cpp:2257
amrex::MultiFab IR_emis_soil
Definition: ERF_SLM.H:823
Definition: ERF_NCInterface.H:351
@ SLM
Definition: ERF_LSM_Types.H:8
@ None
Definition: ERF_LSM_Types.H:6
@ 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
@ 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:345
@ t
Definition: ERF_WSM6.H:293
real(c_double), parameter t0
Definition: ERF_module_model_constants.F90:39
Definition: ERF_DataStruct.H:715
static InitType init_type
Initial-condition source selected for the run.
Definition: ERF_DataStruct.H:2583
MoistureType moisture_type
Moisture or microphysics model.
Definition: ERF_DataStruct.H:2942
static TerrainType terrain_type
Terrain or immersed-boundary representation.
Definition: ERF_DataStruct.H:2589