diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py
index 940a8a36f..4a85f2121 100755
--- a/ccpp/config/ccpp_prebuild_config.py
+++ b/ccpp/config/ccpp_prebuild_config.py
@@ -186,6 +186,7 @@
'ccpp/physics/physics/lsm_noah.f' ,
'ccpp/physics/physics/noahmpdrv.F90' ,
'ccpp/physics/physics/flake_driver.F90' ,
+ 'ccpp/physics/physics/clm_lake.f90' ,
'ccpp/physics/physics/sfc_nst_pre.f' ,
'ccpp/physics/physics/sfc_nst.f' ,
'ccpp/physics/physics/sfc_nst_post.f' ,
diff --git a/ccpp/physics b/ccpp/physics
index d8a5b1fe1..92c8a9e69 160000
--- a/ccpp/physics
+++ b/ccpp/physics
@@ -1 +1 @@
-Subproject commit d8a5b1fe1046c818f5e50180f8c1d22d8bff69eb
+Subproject commit 92c8a9e6906a017b1d526d9b5a3ee095ea652662
diff --git a/ccpp/suites/suite_SCM_HRRR.xml b/ccpp/suites/suite_SCM_HRRR.xml
index 074e7ef13..bb0d28ceb 100644
--- a/ccpp/suites/suite_SCM_HRRR.xml
+++ b/ccpp/suites/suite_SCM_HRRR.xml
@@ -46,6 +46,7 @@
sfc_nst
sfc_nst_post
lsm_ruc
+ clm_lake
GFS_surface_loop_control_part2
diff --git a/scm/src/CCPP_typedefs.F90 b/scm/src/CCPP_typedefs.F90
index 2dd3ae706..65bf1239d 100644
--- a/scm/src/CCPP_typedefs.F90
+++ b/scm/src/CCPP_typedefs.F90
@@ -181,7 +181,6 @@ module CCPP_typedefs
integer, pointer :: idxday(:) => null() !<
logical, pointer :: icy(:) => null() !<
logical, pointer :: lake(:) => null() !<
- logical, pointer :: use_flake(:) => null() !<
logical, pointer :: ocean(:) => null() !<
integer :: ipr !<
integer, pointer :: islmsk(:) => null() !<
@@ -576,7 +575,6 @@ subroutine gfs_interstitial_create (Interstitial, IM, Model)
allocate (Interstitial%idxday (IM))
allocate (Interstitial%icy (IM))
allocate (Interstitial%lake (IM))
- allocate (Interstitial%use_flake (IM))
allocate (Interstitial%ocean (IM))
allocate (Interstitial%islmsk (IM))
allocate (Interstitial%islmsk_cice (IM))
@@ -1255,7 +1253,6 @@ subroutine gfs_interstitial_phys_reset (Interstitial, Model)
Interstitial%dry = .false.
Interstitial%icy = .false.
Interstitial%lake = .false.
- Interstitial%use_flake = .false.
Interstitial%ocean = .false.
Interstitial%islmsk = 0
Interstitial%islmsk_cice = 0
diff --git a/scm/src/CCPP_typedefs.meta b/scm/src/CCPP_typedefs.meta
index b99e76943..cca5a83b7 100644
--- a/scm/src/CCPP_typedefs.meta
+++ b/scm/src/CCPP_typedefs.meta
@@ -1238,12 +1238,6 @@
units = flag
dimensions = (horizontal_loop_extent)
type = logical
-[use_flake]
- standard_name = flag_for_using_flake
- long_name = flag indicating lake points using flake model
- units = flag
- dimensions = (horizontal_loop_extent)
- type = logical
[ocean]
standard_name = flag_nonzero_ocean_surface_fraction
long_name = flag indicating presence of some ocean surface area fraction
diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90
index 3b038ff86..2049455da 100644
--- a/scm/src/GFS_typedefs.F90
+++ b/scm/src/GFS_typedefs.F90
@@ -201,8 +201,26 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: slmsk (:) => null() !< sea/land mask array (sea:0,land:1,sea-ice:2)
real (kind=kind_phys), pointer :: oceanfrac(:) => null() !< ocean fraction [0:1]
real (kind=kind_phys), pointer :: landfrac(:) => null() !< land fraction [0:1]
+
+!--- In (lakes)
real (kind=kind_phys), pointer :: lakefrac(:) => null() !< lake fraction [0:1]
real (kind=kind_phys), pointer :: lakedepth(:) => null() !< lake depth [ m ]
+ real (kind=kind_phys), pointer :: clm_lakedepth(:) => null() !< clm internal lake depth [ m ]
+ integer, pointer :: use_lake_model(:) => null()!1=run lake, 2=run lake&nsst, 0=no lake
+ real (kind=kind_phys), pointer :: lake_t2m (:) => null() !< 2 meter temperature from CLM Lake model
+ real (kind=kind_phys), pointer :: lake_q2m (:) => null() !< 2 meter humidity from CLM Lake model
+
+ real (kind=kind_phys), pointer :: h_ML(:) => null() !Mixed Layer depth of lakes [m]
+ real (kind=kind_phys), pointer :: t_ML(:) => null() !Mixing layer temperature in K
+ real (kind=kind_phys), pointer :: t_mnw(:) => null() !Mean temperature of the water column [K]
+ real (kind=kind_phys), pointer :: h_talb(:) => null() !the thermally active layer depth of the bottom sediments [m]
+ real (kind=kind_phys), pointer :: t_talb(:) => null() !Temperature at the bottom of the sediment upper layer [K]
+ real (kind=kind_phys), pointer :: t_bot1(:) => null() !Temperature at the water-bottom sediment interface [K]
+ real (kind=kind_phys), pointer :: t_bot2(:) => null() !Temperature for bottom layer of water [K]
+ real (kind=kind_phys), pointer :: c_t(:) => null() !Shape factor of water temperature vertical profile
+ real (kind=kind_phys), pointer :: T_snow(:) => null() !temperature of snow on a lake [K]
+ real (kind=kind_phys), pointer :: T_ice(:) => null() !temperature of ice on a lake [K]
+
real (kind=kind_phys), pointer :: tsfc (:) => null() !< surface air temperature in K
real (kind=kind_phys), pointer :: vegtype_frac (:,:) => null() !< fractions [0:1] of veg. categories
real (kind=kind_phys), pointer :: soiltype_frac(:,:) => null() !< fractions [0:1] of soil categories
@@ -401,6 +419,36 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: dsnowprv (:) => null() !< snow precipitation rate from previous timestep
real (kind=kind_phys), pointer :: dgraupelprv(:) => null() !< graupel precipitation rate from previous timestep
+ ! CLM Lake model internal variables:
+ real (kind=kind_phys), pointer :: lake_albedo(:) => null() !
+ real (kind=kind_phys), pointer :: lake_z3d(:,:) => null() !
+ real (kind=kind_phys), pointer :: lake_dz3d(:,:) => null() !
+ real (kind=kind_phys), pointer :: lake_soil_watsat3d(:,:) => null() !
+ real (kind=kind_phys), pointer :: lake_csol3d(:,:) => null() !
+ real (kind=kind_phys), pointer :: lake_soil_tkmg3d(:,:) => null() !
+ real (kind=kind_phys), pointer :: lake_soil_tkdry3d(:,:) => null() !
+ real (kind=kind_phys), pointer :: lake_soil_tksatu3d(:,:) => null() !
+ real (kind=kind_phys), pointer :: lake_h2osno2d(:) => null() !
+ real (kind=kind_phys), pointer :: lake_sndpth2d(:) => null() !
+ real (kind=kind_phys), pointer :: lake_snl2d(:) => null() !
+ real (kind=kind_phys), pointer :: lake_snow_z3d(:,:) => null() !
+ real (kind=kind_phys), pointer :: lake_snow_dz3d(:,:) => null() !
+ real (kind=kind_phys), pointer :: lake_snow_zi3d(:,:) => null() !
+ real (kind=kind_phys), pointer :: lake_h2osoi_vol3d(:,:) => null() !
+ real (kind=kind_phys), pointer :: lake_h2osoi_liq3d(:,:) => null() !
+ real (kind=kind_phys), pointer :: lake_h2osoi_ice3d(:,:) => null() !
+ real (kind=kind_phys), pointer :: lake_tsfc(:) => null() !
+ real (kind=kind_phys), pointer :: lake_t_soisno3d(:,:) => null() !
+ real (kind=kind_phys), pointer :: lake_t_lake3d(:,:) => null() !
+ real (kind=kind_phys), pointer :: lake_savedtke12d(:)=> null() !
+ real (kind=kind_phys), pointer :: lake_icefrac3d(:,:)=> null()
+ real (kind=kind_phys), pointer :: lake_rho0(:)=> null()
+ real (kind=kind_phys), pointer :: lake_ht(:)=> null()
+ real (kind=kind_phys), pointer :: lake_clay3d(:,:) => null()
+ real (kind=kind_phys), pointer :: lake_sand3d(:,:) => null()
+ integer, pointer :: lake_is_salty(:) => null()
+ integer, pointer :: lake_cannot_freeze(:) => null()
+ real (kind=kind_phys), pointer :: clm_lake_initialized(:) => null() !< lakeini was called
!--- aerosol surface emissions for Thompson microphysics & smoke dust
real (kind=kind_phys), pointer :: emdust (:) => null() !< instantaneous dust emission
real (kind=kind_phys), pointer :: emseas (:) => null() !< instantaneous sea salt emission
@@ -1004,8 +1052,24 @@ module GFS_typedefs
integer :: ntsflg !< flag for updating skin temperature in the GFDL surface layer scheme
real(kind=kind_phys) :: sfenth !< enthalpy flux factor 0 zot via charnock ..>0 zot enhanced>15m/s
-!--- flake model parameters
- integer :: lkm !< flag for flake model
+!--- lake model parameters
+ integer :: lkm !< =0 no lake, =1 lake, =2 lake&nsst
+ integer :: iopt_lake !< =1 flake, =2 clm lake
+ integer :: iopt_lake_flake = 1
+ integer :: iopt_lake_clm = 2
+ real(kind_phys) :: lakedepth_threshold !< lakedepth must be GREATER than this value to enable a lake model
+ real(kind_phys) :: lakefrac_threshold !< lakefrac must be GREATER than this value to enable a lake model
+ logical :: use_lake2m !< use 2m T & Q calculated by the lake model
+
+!--- clm lake model parameters
+ integer :: nlevlake_clm_lake !< Number of lake levels for clm lake model
+ integer :: nlevsoil_clm_lake !< Number of soil levels for clm lake model
+ integer :: nlevsnow_clm_lake !< Number of snow levels for clm lake model
+ integer :: nlevsnowsoil_clm_lake !< -nlevsnow:nlevsoil dimensioned variables
+ integer :: nlevsnowsoil1_clm_lake !< -nlevsnow+1:nlevsoil dimensioned variables
+ real(kind_phys) :: clm_lake_depth_default !< minimum lake elevation in clm lake model
+ logical :: clm_lake_use_lakedepth !< initialize lake from lakedepth
+ logical :: clm_lake_debug !< verbose debugging in clm_lake
!--- tuning parameters for physical parameterizations
logical :: ras !< flag for ras convection scheme
@@ -1200,6 +1264,7 @@ module GFS_typedefs
!< nstf_name(5) : zsea2 in mm
!--- fractional grid
logical :: frac_grid !< flag for fractional grid
+ logical :: frac_ice !< flag for fractional ice when fractional grid is not in use
logical :: ignore_lake !< flag for ignoring lakes
real(kind=kind_phys) :: min_lakeice !< minimum lake ice value
real(kind=kind_phys) :: min_seaice !< minimum sea ice value
@@ -2148,6 +2213,26 @@ subroutine sfcprop_create (Sfcprop, IM, Model)
allocate (Sfcprop%soiltype_frac(IM,Model%nsoilcat))
allocate (Sfcprop%lakefrac (IM))
allocate (Sfcprop%lakedepth(IM))
+
+ allocate (Sfcprop%use_lake_model(IM))
+
+ if(Model%lkm > 0) then
+ if(Model%iopt_lake==Model%iopt_lake_clm) then
+ allocate (Sfcprop%clm_lakedepth(IM))
+ else if(Model%iopt_lake==Model%iopt_lake_flake) then
+ allocate (Sfcprop%h_ML (IM))
+ allocate (Sfcprop%t_ML (IM))
+ allocate (Sfcprop%t_mnw (IM))
+ allocate (Sfcprop%h_talb (IM))
+ allocate (Sfcprop%t_talb (IM))
+ allocate (Sfcprop%t_bot1 (IM))
+ allocate (Sfcprop%t_bot2 (IM))
+ allocate (Sfcprop%c_t (IM))
+ endif
+ allocate (Sfcprop%T_snow (IM))
+ allocate (Sfcprop%T_ice (IM))
+ endif
+
allocate (Sfcprop%tsfc (IM))
allocate (Sfcprop%tsfco (IM))
allocate (Sfcprop%tsfcl (IM))
@@ -2185,6 +2270,25 @@ subroutine sfcprop_create (Sfcprop, IM, Model)
Sfcprop%soiltype_frac = clear_val
Sfcprop%lakefrac = clear_val
Sfcprop%lakedepth = clear_val
+
+ Sfcprop%use_lake_model = zero
+ if(Model%lkm > 0) then
+ if(Model%iopt_lake==Model%iopt_lake_clm) then
+ Sfcprop%clm_lakedepth = clear_val
+ else if(Model%iopt_lake==Model%iopt_lake_flake) then
+ Sfcprop%h_ML = clear_val
+ Sfcprop%t_ML = clear_val
+ Sfcprop%t_mnw = clear_val
+ Sfcprop%h_talb = clear_val
+ Sfcprop%t_talb = clear_val
+ Sfcprop%t_bot1 = clear_val
+ Sfcprop%t_bot2 = clear_val
+ Sfcprop%c_t = clear_val
+ endif
+ Sfcprop%T_snow = clear_val
+ Sfcprop%T_ice = clear_val
+ endif
+
Sfcprop%tsfc = clear_val
Sfcprop%tsfco = clear_val
Sfcprop%tsfcl = clear_val
@@ -2376,18 +2480,21 @@ subroutine sfcprop_create (Sfcprop, IM, Model)
Sfcprop%xlaixy = clear_val
Sfcprop%rca = clear_val
end if
- if (Model%lsm == Model%lsm_ruc .or. Model%lsm == Model%lsm_noahmp) then
- allocate(Sfcprop%raincprv (IM))
- allocate(Sfcprop%rainncprv (IM))
+ if (Model%lsm == Model%lsm_ruc .or. Model%lsm == Model%lsm_noahmp .or. &
+ (Model%lkm>0 .and. Model%iopt_lake==Model%iopt_lake_clm)) then
+ allocate(Sfcprop%raincprv (IM))
+ allocate(Sfcprop%rainncprv (IM))
+ Sfcprop%raincprv = clear_val
+ Sfcprop%rainncprv = clear_val
+ if (Model%lsm == Model%lsm_ruc .or. Model%lsm == Model%lsm_noahmp) then
allocate(Sfcprop%iceprv (IM))
allocate(Sfcprop%snowprv (IM))
allocate(Sfcprop%graupelprv(IM))
- Sfcprop%raincprv = clear_val
- Sfcprop%rainncprv = clear_val
Sfcprop%iceprv = clear_val
Sfcprop%snowprv = clear_val
Sfcprop%graupelprv = clear_val
+ end if
end if
! Noah MP allocate and init when used
!
@@ -2563,6 +2670,73 @@ subroutine sfcprop_create (Sfcprop, IM, Model)
Sfcprop%conv_act_m = zero
end if
+ ! CLM Lake Model variables
+ if (Model%lkm/=0 .and. Model%iopt_lake==Model%iopt_lake_clm) then
+ allocate(Sfcprop%lake_t2m(IM))
+ allocate(Sfcprop%lake_q2m(IM))
+ allocate(Sfcprop%lake_albedo(IM))
+ allocate(Sfcprop%lake_z3d(IM,Model%nlevlake_clm_lake))
+ allocate(Sfcprop%lake_dz3d(IM,Model%nlevlake_clm_lake))
+ allocate(Sfcprop%lake_soil_watsat3d(IM,Model%nlevlake_clm_lake))
+ allocate(Sfcprop%lake_csol3d(IM,Model%nlevlake_clm_lake))
+ allocate(Sfcprop%lake_soil_tkmg3d(IM,Model%nlevlake_clm_lake))
+ allocate(Sfcprop%lake_soil_tkdry3d(IM,Model%nlevlake_clm_lake))
+ allocate(Sfcprop%lake_soil_tksatu3d(IM,Model%nlevlake_clm_lake))
+ allocate(Sfcprop%lake_h2osno2d(IM))
+ allocate(Sfcprop%lake_sndpth2d(IM))
+ allocate(Sfcprop%lake_snl2d(IM))
+ allocate(Sfcprop%lake_snow_z3d(IM,Model%nlevsnowsoil1_clm_lake))
+ allocate(Sfcprop%lake_snow_dz3d(IM,Model%nlevsnowsoil1_clm_lake))
+ allocate(Sfcprop%lake_snow_zi3d(IM,Model%nlevsnowsoil_clm_lake))
+ allocate(Sfcprop%lake_h2osoi_vol3d(IM,Model%nlevsnowsoil1_clm_lake))
+ allocate(Sfcprop%lake_h2osoi_liq3d(IM,Model%nlevsnowsoil1_clm_lake))
+ allocate(Sfcprop%lake_h2osoi_ice3d(IM,Model%nlevsnowsoil1_clm_lake))
+ allocate(Sfcprop%lake_tsfc(IM))
+ allocate(Sfcprop%lake_t_soisno3d(IM,Model%nlevsnowsoil1_clm_lake))
+ allocate(Sfcprop%lake_t_lake3d(IM,Model%nlevlake_clm_lake))
+ allocate(Sfcprop%lake_savedtke12d(IM))
+ allocate(Sfcprop%lake_icefrac3d(IM,Model%nlevlake_clm_lake))
+ allocate(Sfcprop%lake_rho0(IM))
+ allocate(Sfcprop%lake_ht(IM))
+ allocate(Sfcprop%lake_clay3d(IM,Model%nlevsoil_clm_lake))
+ allocate(Sfcprop%lake_sand3d(IM,Model%nlevsoil_clm_lake))
+ allocate(Sfcprop%lake_is_salty(IM))
+ allocate(Sfcprop%lake_cannot_freeze(IM))
+ allocate(Sfcprop%clm_lake_initialized(IM))
+
+ Sfcprop%lake_t2m = clear_val
+ Sfcprop%lake_q2m = clear_val
+ Sfcprop%lake_albedo = clear_val
+ Sfcprop%lake_z3d = clear_val
+ Sfcprop%lake_dz3d = clear_val
+ Sfcprop%lake_soil_watsat3d = clear_val
+ Sfcprop%lake_csol3d = clear_val
+ Sfcprop%lake_soil_tkmg3d = clear_val
+ Sfcprop%lake_soil_tkdry3d = clear_val
+ Sfcprop%lake_soil_tksatu3d = clear_val
+ Sfcprop%lake_h2osno2d = clear_val
+ Sfcprop%lake_sndpth2d = clear_val
+ Sfcprop%lake_snl2d = clear_val
+ Sfcprop%lake_snow_z3d = clear_val
+ Sfcprop%lake_snow_dz3d = clear_val
+ Sfcprop%lake_snow_zi3d = clear_val
+ Sfcprop%lake_h2osoi_vol3d = clear_val
+ Sfcprop%lake_h2osoi_liq3d = clear_val
+ Sfcprop%lake_h2osoi_ice3d = clear_val
+ Sfcprop%lake_tsfc = clear_val
+ Sfcprop%lake_t_soisno3d = clear_val
+ Sfcprop%lake_t_lake3d = clear_val
+ Sfcprop%lake_savedtke12d = clear_val
+ Sfcprop%lake_icefrac3d = clear_val
+ Sfcprop%lake_rho0 = -111
+ Sfcprop%lake_ht = -111
+ Sfcprop%lake_clay3d = clear_val
+ Sfcprop%lake_sand3d = clear_val
+ Sfcprop%lake_is_salty = zero
+ Sfcprop%lake_cannot_freeze = zero
+ Sfcprop%clm_lake_initialized = zero
+ endif
+
if(Model%rrfs_sd) then
!--- needed for smoke aerosol option
allocate (Sfcprop%emdust (IM))
@@ -3240,6 +3414,18 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
!--- Thompson,GFDL microphysical parameter
logical :: lrefres = .false. !< flag for radar reflectivity in restart file
+ !--- CLM Lake Model parameters (MUST match clm_lake.F90)
+ integer, parameter :: nlevlake_clm_lake = 10 !< number of lake levels
+ integer, parameter :: nlevsoil_clm_lake = 10 !< number of soil levels
+ integer, parameter :: nlevsnow_clm_lake = 5 !< number of snow levels
+ integer, parameter :: nlevsnowsoil_clm_lake = nlevsnow_clm_lake+nlevsoil_clm_lake+1 !< -nlevsno:nlevsoil dimensioned variables
+ integer, parameter :: nlevsnowsoil1_clm_lake = nlevsnow_clm_lake+nlevsoil_clm_lake !< -nlevsno+1:nlevsoil dimensioned variables
+
+ !--- CLM Lake configurables
+ real(kind_phys) :: clm_lake_depth_default = 50 !< default lake depth in clm lake model
+ logical :: clm_lake_use_lakedepth = .true. !< initialize depth from lakedepth
+ logical :: clm_lake_debug = .false. !< verbose debugging in clm_lake
+
!--- land/surface model parameters
integer :: lsm = 1 !< flag for land surface model to use =0 for osu lsm; =1 for noah lsm; =2 for noah mp lsm; =3 for RUC lsm
integer :: lsoil = 4 !< number of soil layers
@@ -3293,7 +3479,11 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
real(kind=kind_phys) :: sfenth = 0.0 !< enthalpy flux factor 0 zot via charnock ..>0 zot enhanced>15m/s
!--- flake model parameters
- integer :: lkm = 0 !< flag for flake model - default no flake
+ integer :: lkm = 0 !< =1 run lake, =2 run lake&nsst =0 no lake
+ integer :: iopt_lake = 2 !< =1 flake, =2 clm lake (default)
+ real(kind_phys) :: lakedepth_threshold = 1.0 !< lakedepth must be GREATER than this value to enable a lake model
+ real(kind_phys) :: lakefrac_threshold = 0.0 !< lakefrac must be GREATER than this value to enable a lake model
+ logical :: use_lake2m = .false. !< use 2m T & Q from clm lake model
!--- tuning parameters for physical parameterizations
logical :: ras = .false. !< flag for ras convection scheme
@@ -3479,6 +3669,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
!< nstf_name(5) : zsea2 in mm
!--- fractional grid
logical :: frac_grid = .false. !< flag for fractional grid
+ logical :: frac_ice = .false. !< flag for fractional ice when fractional grid is not in use
logical :: ignore_lake = .true. !< flag for ignoring lakes
real(kind=kind_phys) :: min_lakeice = 0.15d0 !< minimum lake ice value
real(kind=kind_phys) :: min_seaice = 1.0d-11 !< minimum sea ice value
@@ -3681,7 +3872,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
! GFDL surface layer options
lcurr_sf, pert_cd, ntsflg, sfenth, &
!--- lake model control
- lkm, &
+ lkm, iopt_lake, lakedepth_threshold, lakefrac_threshold, &
+ clm_lake_depth_default, clm_lake_use_lakedepth, &
+ clm_lake_debug, use_lake2m, &
!--- physical parameterizations
ras, trans_trac, old_monin, cnvgwd, mstrat, moist_adj, &
cscnv, cal_pre, do_aw, do_shoc, shocaftcnv, shoc_cld, &
@@ -3724,7 +3917,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
!--- near surface sea temperature model
nst_anl, lsea, nstf_name, &
frac_grid, min_lakeice, min_seaice, min_lake_height, &
- ignore_lake, &
+ ignore_lake, frac_ice, &
!--- surface layer
sfc_z0_type, &
!--- switch beteeen local and standard potential temperature
@@ -4409,8 +4602,22 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
Model%ntsflg = ntsflg
Model%sfenth = sfenth
-!--- flake model parameters
+!--- lake model parameters
Model%lkm = lkm
+ Model%iopt_lake = iopt_lake
+ Model%use_lake2m = use_lake2m
+ Model%lakedepth_threshold = lakedepth_threshold
+ Model%lakefrac_threshold = lakefrac_threshold
+
+!--- clm lake model parameters
+ Model%nlevlake_clm_lake = nlevlake_clm_lake
+ Model%nlevsoil_clm_lake = nlevsoil_clm_lake
+ Model%nlevsnow_clm_lake = nlevsnow_clm_lake
+ Model%nlevsnowsoil_clm_lake = nlevsnowsoil_clm_lake
+ Model%nlevsnowsoil1_clm_lake = nlevsnowsoil1_clm_lake
+ Model%clm_lake_depth_default = clm_lake_depth_default
+ Model%clm_lake_use_lakedepth = clm_lake_use_lakedepth
+ Model%clm_lake_debug = clm_lake_debug
! Noah MP options from namelist
!
@@ -4615,6 +4822,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
!--- fractional grid
Model%frac_grid = frac_grid
+ Model%frac_ice = frac_ice
Model%ignore_lake = ignore_lake
Model%min_lakeice = min_lakeice
Model%min_seaice = min_seaice
@@ -4843,6 +5051,18 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
Model%ntocl = get_tracer_index(Model%tracer_names, 'oc2', Model%me, Model%master, Model%debug)
end if
+ ! Lake & fractional grid safety checks
+ if(Model%me==Model%master) then
+ if(Model%lkm>0 .and. Model%frac_grid) then
+ write(0,*) 'WARNING: Lake fractional grid support is experimental. Use at your own risk!'
+ else if(Model%lkm>0 .and. Model%iopt_lake==Model%iopt_lake_clm .and. .not. Model%frac_ice) then
+ write(0,*) 'WARNING: CLM Lake Model will not work without frac_ice=.true.'
+ endif
+ if(Model%lkm==2) then
+ write(0,*) 'WARNING: Running both lake and nsst on lake points is experimental. Use at your own risk!'
+ endif
+ endif
+
if(ldiag3d) then
! Flags used to turn on or off tracer "causes"
have_pbl_edmf = Model%hybedmf .or. Model%satmedmf .or. Model%do_mynnedmf
@@ -5373,12 +5593,27 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
! endif
print *,' nst_anl=',Model%nst_anl,' use_ufo=',Model%use_ufo,' frac_grid=',Model%frac_grid,&
- ' ignore_lake=',ignore_lake
+ ' ignore_lake=',ignore_lake,' frac_ice=',Model%frac_ice
print *,' min_lakeice=',Model%min_lakeice,' min_seaice=',Model%min_seaice, &
'min_lake_height=',Model%min_lake_height
- print *, 'flake model parameters'
- print *, 'lkm : ', Model%lkm
+ print *, 'lake model parameters'
+ print *, ' lake master flag lkm : ', Model%lkm
+ if(Model%lkm>0) then
+ print *, ' lake model selection : ', Model%iopt_lake
+ if(Model%iopt_lake==Model%iopt_lake_clm) then
+ print *,' CLM Lake model configuration'
+ print *,' use_lake2m = ',Model%use_lake2m
+ print *,' clm_lake_use_lakedepth = ',Model%clm_lake_use_lakedepth
+ print *,' clm_lake_depth_default = ',Model%clm_lake_depth_default
+ print *,' clm_lake_debug = ',Model%clm_lake_debug
+ print *,' nlevlake_clm_lake = ',Model%nlevlake_clm_lake
+ print *,' nlevsoil_clm_lake = ',Model%nlevsoil_clm_lake
+ print *,' nlevsnow_clm_lake = ',Model%nlevsnow_clm_lake
+ print *,' nlevsnowsoil_clm_lake = ',Model%nlevsnowsoil_clm_lake
+ print *,' nlevsnowsoil1_clm_lake = ',Model%nlevsnowsoil1_clm_lake
+ endif
+ endif
if (Model%nstf_name(1) > 0 ) then
print *,' NSSTM is active '
diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta
index 0d589dc75..9e89646c2 100644
--- a/scm/src/GFS_typedefs.meta
+++ b/scm/src/GFS_typedefs.meta
@@ -641,6 +641,108 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
+[clm_lakedepth]
+ standard_name = clm_lake_depth
+ long_name = clm internal copy of lake depth with 10.0 replaced by default lake depth
+ units = m
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_execution_method > 0 .and. control_for_lake_model_selection == 2)
+[use_lake_model]
+ standard_name = flag_for_using_lake_model
+ long_name = flag indicating lake points using a lake model
+ units = flag
+ dimensions = (horizontal_loop_extent)
+ type = integer
+[lake_t2m]
+ standard_name = temperature_at_2m_from_clm_lake
+ long_name = temperature at 2m from clm lake
+ units = K
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_execution_method > 0 .and. control_for_lake_model_selection == 2)
+[lake_q2m]
+ standard_name = specific_humidity_at_2m_from_clm_lake
+ long_name = specific humidity at 2m from clm lake
+ units = frac
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_execution_method > 0 .and. control_for_lake_model_selection == 2)
+[h_ML]
+ standard_name = mixed_layer_depth_of_lakes
+ long_name = depth of lake mixing layer
+ units = m
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0)
+[t_ML]
+ standard_name = lake_mixed_layer_temperature
+ long_name = temperature of lake mixing layer
+ units = K
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0)
+[t_mnw]
+ standard_name = mean_temperature_of_the_water_column
+ long_name = thee mean temperature of the water column
+ units = K
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0)
+[h_talb]
+ standard_name = the_thermally_active_layer_depth_of_the_bottom_sediment
+ long_name = the depth of the thermally active layer of the bottom sediment
+ units = m
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0)
+[t_talb]
+ standard_name = temperature_at_the_bottom_of_the_sediment_upper_layer
+ long_name = the temperature at the bottom of the sediment upper layer
+ units = K
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0)
+[t_bot1]
+ standard_name = lake_bottom_temperature
+ long_name = the temperature at the water-bottom sediment interface
+ units = K
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0)
+[t_bot2]
+ standard_name = temperature_for_bottom_layer_of_water
+ long_name = the temperature at the lake bottom layer water
+ units = K
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0)
+[c_t]
+ standard_name = shape_factor_of_water_temperature_vertical_profile
+ long_name = the shape factor of water temperature vertical profile
+ units = none
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 1 .and. control_for_lake_model_execution_method > 0)
+[T_snow]
+ standard_name = temperature_of_snow_on_lake
+ long_name = temperature of snow on a lake
+ units = K
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_execution_method > 0)
[tsfc]
standard_name = surface_skin_temperature
long_name = surface skin temperature
@@ -1825,7 +1927,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme)
+ active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme .or. ( control_for_lake_model_execution_method > 0 .and. control_for_lake_model_selection == 2) )
[rainncprv]
standard_name = lwe_thickness_of_explicit_precipitation_amount_on_previous_timestep
long_name = explicit rainfall from previous timestep
@@ -1833,7 +1935,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme)
+ active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme .or. ( control_for_lake_model_execution_method > 0 .and. control_for_lake_model_selection == 2) )
[iceprv]
standard_name = lwe_thickness_of_ice_precipitation_amount_on_previous_timestep
long_name = ice amount from previous timestep
@@ -1926,6 +2028,226 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
+[lake_albedo]
+ standard_name = mid_day_surface_albedo_over_lake
+ long_name = mid day surface albedo over lake
+ units = fraction
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_z3d]
+ standard_name = depth_of_lake_interface_layers
+ long_name = depth of lake interface layers
+ units = fraction
+ dimensions = (horizontal_loop_extent, lake_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_dz3d]
+ standard_name = thickness_of_lake_layers
+ long_name = thickness of lake layers
+ units = fraction
+ dimensions = (horizontal_loop_extent, lake_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_soil_watsat3d]
+ standard_name = saturated_volumetric_soil_water_in_lake_model
+ long_name = saturated volumetric soil water in lake model
+ units = m
+ dimensions = (horizontal_loop_extent, lake_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_csol3d]
+ standard_name = soil_heat_capacity_in_lake_model
+ long_name = soil heat capacity in lake model
+ units = m
+ dimensions = (horizontal_loop_extent, lake_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_soil_tkmg3d]
+ standard_name = soil_mineral_thermal_conductivity_in_lake_model
+ long_name = soil mineral thermal conductivity in lake model
+ units = m
+ dimensions = (horizontal_loop_extent, lake_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_soil_tkdry3d]
+ standard_name = dry_soil_thermal_conductivity_in_lake_model
+ long_name = dry soil thermal conductivity in lake model
+ units = m
+ dimensions = (horizontal_loop_extent, lake_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_soil_tksatu3d]
+ standard_name = saturated_soil_thermal_conductivity_in_lake_model
+ long_name = saturated soil thermal conductivity in lake model
+ units = m
+ dimensions = (horizontal_loop_extent, lake_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_h2osno2d]
+ standard_name = water_equivalent_accumulated_snow_depth_in_clm_lake_model
+ long_name = water equiv of acc snow depth over lake in clm lake model
+ units = mm
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_sndpth2d]
+ standard_name = actual_snow_depth_in_clm_lake_model
+ long_name = actual acc snow depth over lake in clm lake model
+ units = m
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_snl2d]
+ standard_name = snow_layers_in_clm_lake_model
+ long_name = snow layers in clm lake model (treated as integer)
+ units = count
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_snow_z3d]
+ standard_name = snow_level_depth_in_clm_lake_model
+ long_name = snow level depth in clm lake model
+ units = m
+ dimensions = (horizontal_loop_extent,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_snow_dz3d]
+ standard_name = snow_level_thickness_in_clm_lake_model
+ long_name = snow level thickness in clm lake model
+ units = m
+ dimensions = (horizontal_loop_extent,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_snow_zi3d]
+ standard_name = snow_interface_depth_in_clm_lake_model
+ long_name = snow interface_depth in clm lake model
+ units = m
+ dimensions = (horizontal_loop_extent,snow_plus_soil_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_h2osoi_vol3d]
+ standard_name = volumetric_soil_water_in_clm_lake_model
+ long_name = volumetric soil water in clm lake model
+ units = m3 m-3
+ dimensions = (horizontal_loop_extent,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_h2osoi_liq3d]
+ standard_name = soil_liquid_water_content_in_clm_lake_model
+ long_name = soil liquid water content in clm lake model
+ units = kg m-3
+ dimensions = (horizontal_loop_extent,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_h2osoi_ice3d]
+ standard_name = soil_ice_water_content_in_clm_lake_model
+ long_name = soil ice water content in clm lake model
+ units = kg m-3
+ dimensions = (horizontal_loop_extent,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_tsfc]
+ standard_name = skin_temperature_from_lake_model
+ long_name = skin temperature from lake model
+ units = K
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_t_soisno3d]
+ standard_name = soil_or_snow_layer_temperature_from_clm_lake_model
+ long_name = soil or snow layer temperature from clm lake model
+ units = K
+ dimensions = (horizontal_loop_extent,snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_t_lake3d]
+ standard_name = lake_layer_temperature_from_clm_lake_model
+ long_name = lake layer temperature from clm lake model
+ units = K
+ dimensions = (horizontal_loop_extent,lake_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_savedtke12d]
+ standard_name = top_level_eddy_conductivity_from_previous_timestep_in_clm_lake_model
+ long_name = top level eddy conductivity from previous timestep in clm lake model
+ units = kg m-3
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_icefrac3d]
+ standard_name = lake_fractional_ice_cover_on_clm_lake_levels
+ long_name = lake fractional ice cover on clm lake levels
+ units = kg m-3
+ dimensions = (horizontal_loop_extent,lake_vertical_dimension_for_clm_lake_model)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_ht]
+ standard_name = test_lake_ht
+ long_name = test_lake_ht
+ dimensions = (horizontal_loop_extent)
+ units = unitless
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[clm_lake_initialized]
+ standard_name = flag_for_clm_lake_initialization
+ long_name = set to true in clm_lake_run after likeini is called for that gridpoint
+ units = flag
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_clay3d]
+ standard_name = clm_lake_percent_clay
+ long_name = percent clay in clm lake model
+ units = percent
+ dimensions = (horizontal_loop_extent,soil_vertical_dimension_for_clm_lake_model)
+ type = integer
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_sand3d]
+ standard_name = clm_lake_percent_sand
+ long_name = percent sand in clm lake model
+ units = percent
+ dimensions = (horizontal_loop_extent,soil_vertical_dimension_for_clm_lake_model)
+ type = integer
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_is_salty]
+ standard_name = clm_lake_is_salty
+ long_name = lake at this point is salty (1) or not (0)
+ units = 1
+ dimensions = (horizontal_loop_extent)
+ type = integer
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
+[lake_cannot_freeze]
+ standard_name = clm_lake_cannot_freeze
+ long_name = lake at this point is so salty it cannot freeze
+ units = 1
+ dimensions = (horizontal_loop_extent)
+ type = integer
+ active = (control_for_lake_model_selection == 2 .and. control_for_lake_model_execution_method > 0)
[emdust]
standard_name = emission_of_dust_for_smoke
long_name = emission of dust for smoke
@@ -4346,6 +4668,41 @@
units = count
dimensions = ()
type = integer
+[nlevlake_clm_lake]
+ standard_name = lake_vertical_dimension_for_clm_lake_model
+ long_name = lake vertical dimension for clm lake model
+ units = count
+ dimensions = ()
+ type = integer
+ active = (control_for_lake_surface_scheme == 2)
+[nlevsoil_clm_lake]
+ standard_name = soil_vertical_dimension_for_clm_lake_model
+ long_name = soil vertical dimension for clm lake model
+ units = count
+ dimensions = ()
+ type = integer
+ active = (control_for_lake_surface_scheme == 2)
+[nlevsnow_clm_lake]
+ standard_name = snow_vertical_dimension_for_clm_lake_model
+ long_name = snow vertical dimension for clm lake model
+ units = count
+ dimensions = ()
+ type = integer
+ active = (control_for_lake_surface_scheme == 2)
+[nlevsnowsoil_clm_lake]
+ standard_name = snow_plus_soil_vertical_dimension_for_clm_lake_model
+ long_name = snow plus soil vertical dimension for clm lake model
+ units = count
+ dimensions = ()
+ type = integer
+ active = (control_for_lake_surface_scheme == 2)
+[nlevsnowsoil1_clm_lake]
+ standard_name = snow_plus_soil_minus_one_vertical_dimension_for_clm_lake_model
+ long_name = snow plus soil minus one vertical dimension for clm lake model
+ units = count
+ dimensions = ()
+ type = integer
+ active = (control_for_lake_surface_scheme == 2)
[lsoil]
standard_name = vertical_dimension_of_soil
long_name = number of soil layers
@@ -4593,9 +4950,47 @@
dimensions = ()
type = real
kind = kind_phys
+[lakefrac_threshold]
+ standard_name = lakefrac_threshold_for_enabling_lake_model
+ long_name = fraction of horizontal grid area occupied by lake must be greater than this value to enable a lake model
+ units = frac
+ dimensions = ()
+ type = real
+ kind = kind_phys
+[lakedepth_threshold]
+ standard_name = lake_depth_threshold_for_enabling_lake_model
+ long_name = lake depth must be greater than this value to enable a lake model
+ units = m
+ dimensions = ()
+ type = real
+ kind = kind_phys
+[iopt_lake]
+ standard_name = control_for_lake_model_selection
+ long_name = control for lake model selection
+ units = 1
+ dimensions = ()
+ type = integer
+[iopt_lake_flake]
+ standard_name = flake_model_control_selection_value
+ long_name = value that indicates flake model in the control for lake model selection
+ units = 1
+ dimensions = ()
+ type = integer
+[iopt_lake_clm]
+ standard_name = clm_lake_model_control_selection_value
+ long_name = value that indicates clm lake model in the control for lake model selection
+ units = 1
+ dimensions = ()
+ type = integer
+[use_lake2m]
+ standard_name = use_2m_diagnostics_calculated_by_lake_model
+ long_name = model 2m diagnostics use the temperature and humidity calculated by the lake model
+ units = flag
+ dimensions = ()
+ type = integer
[lkm]
- standard_name = control_for_lake_surface_scheme
- long_name = flag for lake surface model
+ standard_name = control_for_lake_model_execution_method
+ long_name = control for lake model execution: 0=no lake, 1=lake, 2=lake+nsst
units = flag
dimensions = ()
type = integer
@@ -5167,6 +5562,12 @@
units = flag
dimensions = ()
type = logical
+[frac_ice]
+ standard_name = flag_for_fractional_ice_when_fractional_landmask_is_disabled
+ long_name = flag for fractional ice when fractional landmask is disabled
+ units = flag
+ dimensions = ()
+ type = logical
[min_lakeice]
standard_name = min_lake_ice_area_fraction
long_name = minimum lake ice value
@@ -6705,6 +7106,25 @@
units = flag
dimensions = ()
type = logical
+[clm_lake_depth_default]
+ standard_name = default_lake_depth_in_clm_lake_model
+ long_name = default lake depth in clm lake model
+ units = m
+ dimensions = ()
+ type = real
+ kind = kind_phys
+[clm_lake_use_lakedepth]
+ standard_name = flag_for_initializing_clm_lake_depth_from_lake_depth
+ long_name = flag for initializing clm lake depth from lake depth
+ units = flag
+ dimensions = ()
+ type = logical
+[clm_lake_debug]
+ standard_name = flag_for_verbose_debugging_in_clm_lake_model
+ long_name = flag for verbose debugging in clm lake model
+ units = flag
+ dimensions = ()
+ type = logical
[fire_aux_data_levels]
standard_name = fire_auxiliary_data_extent
long_name = number of levels of fire auxiliary data
diff --git a/scm/src/scm_physical_constants.F90 b/scm/src/scm_physical_constants.F90
index da616bc82..93ac7cc91 100644
--- a/scm/src/scm_physical_constants.F90
+++ b/scm/src/scm_physical_constants.F90
@@ -48,6 +48,8 @@ module scm_physical_constants
real(kind=dp),parameter:: con_tice =2.7120e+2
real(kind=dp),parameter:: rhowater =1000._dp
+ real(kind=dp),parameter:: rholakeice = 0.917e3_dp !< density of ice on lake (kg/m^3)
+
real(kind=dp),parameter:: con_c = 2.99792458e+8_dp !< speed of light (\f$m/s\f$)
real(kind=dp),parameter:: con_plnk = 6.6260693e-34_dp !< planck constant (\f$J/s\f$)
diff --git a/scm/src/scm_physical_constants.meta b/scm/src/scm_physical_constants.meta
index ae86677af..a2642e51b 100644
--- a/scm/src/scm_physical_constants.meta
+++ b/scm/src/scm_physical_constants.meta
@@ -216,6 +216,13 @@
dimensions = ()
type = real
kind = kind_phys
+[rholakeice]
+ standard_name = density_of_ice_on_lake
+ long_name = density of ice on a lake
+ units = kg m-3
+ dimensions = ()
+ type = real
+ kind = kind_phys
[con_omega]
standard_name = angular_velocity_of_earth
long_name = angular velocity of earth