diff --git a/physics/GFS_phys_time_vary.fv3.F90 b/physics/GFS_phys_time_vary.fv3.F90
index a10c10d1b..4100bdf6e 100644
--- a/physics/GFS_phys_time_vary.fv3.F90
+++ b/physics/GFS_phys_time_vary.fv3.F90
@@ -61,6 +61,22 @@ module GFS_phys_time_vary
contains
+ subroutine copy_error(myerrmsg, myerrflg, errmsg, errflg)
+ implicit none
+ character(*), intent(in) :: myerrmsg
+ integer, intent(in) :: myerrflg
+ character(*), intent(out) :: errmsg
+ integer, intent(inout) :: errflg
+ if(myerrflg /= 0 .and. errflg == 0) then
+ !$OMP CRITICAL
+ if(errflg == 0) then
+ errmsg = myerrmsg
+ errflg = myerrflg
+ endif
+ !$OMP END CRITICAL
+ endif
+ end subroutine copy_error
+
!> \section arg_table_GFS_phys_time_vary_init Argument Table
!! \htmlinclude GFS_phys_time_vary_init.html
!!
@@ -192,6 +208,9 @@ subroutine GFS_phys_time_vary_init (
real(kind=kind_phys), dimension(:), allocatable :: dzsno
real(kind=kind_phys), dimension(:), allocatable :: dzsnso
+ integer :: myerrflg
+ character(len=255) :: myerrmsg
+
! Initialize CCPP error handling variables
errmsg = ''
errflg = 0
@@ -207,7 +226,7 @@ subroutine GFS_phys_time_vary_init (
!$OMP shared (xlat_d,xlon_d,imap,jmap,errmsg,errflg) &
!$OMP shared (levozp,oz_coeff,oz_pres,ozpl) &
!$OMP shared (levh2o,h2o_coeff,h2o_pres,h2opl) &
-!$OMP shared (iamin, iamax, jamin, jamax) &
+!$OMP shared (iamin, iamax, jamin, jamax, lsm_noahmp) &
!$OMP shared (iaerclm,iaermdl,ntrcaer,aer_nm,iflip,iccn) &
!$OMP shared (jindx1_o3,jindx2_o3,ddy_o3,jindx1_h,jindx2_h,ddy_h) &
!$OMP shared (jindx1_aer,jindx2_aer,ddy_aer,iindx1_aer,iindx2_aer,ddx_aer) &
@@ -215,56 +234,67 @@ subroutine GFS_phys_time_vary_init (
!$OMP shared (do_ugwp_v1,jindx1_tau,jindx2_tau,ddy_j1tau,ddy_j2tau) &
!$OMP shared (isot,ivegsrc,nlunit,sncovr,sncovr_ice,lsm,lsm_ruc) &
!$OMP shared (min_seaice,fice,landfrac,vtype,weasd,snupx,salp_data) &
-!$OMP private (ix,i,j,rsnow,vegtyp)
+!$OMP private (ix,i,j,rsnow,vegtyp,myerrmsg,myerrflg)
!$OMP sections
!$OMP section
!> - Call read_o3data() to read ozone data
+ need_o3data: if(ntoz > 0) then
call read_o3data (ntoz, me, master)
! Consistency check that the hardcoded values for levozp and
! oz_coeff in GFS_typedefs.F90 match what is set by read_o3data
! in GFS_typedefs.F90: allocate (Tbd%ozpl (IM,levozp,oz_coeff))
if (size(ozpl, dim=2).ne.levozp) then
- write(errmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", &
+ myerrflg = 1
+ write(myerrmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", &
"levozp from read_o3data does not match value in GFS_typedefs.F90: ", &
levozp, " /= ", size(ozpl, dim=2)
- errflg = 1
+ call copy_error(myerrmsg, myerrflg, errmsg, errflg)
end if
if (size(ozpl, dim=3).ne.oz_coeff) then
- write(errmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", &
+ myerrflg = 1
+ write(myerrmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", &
"oz_coeff from read_o3data does not match value in GFS_typedefs.F90: ", &
oz_coeff, " /= ", size(ozpl, dim=3)
- errflg = 1
+ call copy_error(myerrmsg, myerrflg, errmsg, errflg)
end if
+ endif need_o3data
!$OMP section
!> - Call read_h2odata() to read stratospheric water vapor data
+ need_h2odata: if(h2o_phys) then
call read_h2odata (h2o_phys, me, master)
! Consistency check that the hardcoded values for levh2o and
! h2o_coeff in GFS_typedefs.F90 match what is set by read_o3data
! in GFS_typedefs.F90: allocate (Tbd%h2opl (IM,levh2o,h2o_coeff))
if (size(h2opl, dim=2).ne.levh2o) then
- write(errmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", &
+ write(myerrmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", &
"levh2o from read_h2odata does not match value in GFS_typedefs.F90: ", &
levh2o, " /= ", size(h2opl, dim=2)
- errflg = 1
+ myerrflg = 1
+ call copy_error(myerrmsg, myerrflg, errmsg, errflg)
end if
if (size(h2opl, dim=3).ne.h2o_coeff) then
- write(errmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", &
+ write(myerrmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", &
"h2o_coeff from read_h2odata does not match value in GFS_typedefs.F90: ", &
h2o_coeff, " /= ", size(h2opl, dim=3)
- errflg = 1
+ myerrflg = 1
+ call copy_error(myerrmsg, myerrflg, errmsg, errflg)
end if
+ endif need_h2odata
!$OMP section
!> - Call read_aerdata() to read aerosol climatology, Anning added coupled
!> added coupled gocart and radiation option to initializing aer_nm
if (iaerclm) then
ntrcaer = ntrcaerm
- call read_aerdata (me,master,iflip,idate,errmsg,errflg)
+ myerrflg = 0
+ myerrmsg = 'read_aerdata failed without a message'
+ call read_aerdata (me,master,iflip,idate,myerrmsg,myerrflg)
+ call copy_error(myerrmsg, myerrflg, errmsg, errflg)
else if(iaermdl ==2 ) then
do ix=1,ntrcaerm
do j=1,levs
@@ -289,16 +319,27 @@ subroutine GFS_phys_time_vary_init (
!$OMP section
!> - Call tau_amf dats for ugwp_v1
if (do_ugwp_v1) then
- call read_tau_amf(me, master, errmsg, errflg)
+ myerrflg = 0
+ myerrmsg = 'read_tau_amf failed without a message'
+ call read_tau_amf(me, master, myerrmsg, myerrflg)
+ call copy_error(myerrmsg, myerrflg, errmsg, errflg)
endif
!$OMP section
!> - Initialize soil vegetation (needed for sncovr calculation further down)
- call set_soilveg(me, isot, ivegsrc, nlunit, errmsg, errflg)
+ myerrflg = 0
+ myerrmsg = 'set_soilveg failed without a message'
+ call set_soilveg(me, isot, ivegsrc, nlunit, myerrmsg, myerrflg)
+ call copy_error(myerrmsg, myerrflg, errmsg, errflg)
!$OMP section
!> - read in NoahMP table (needed for NoahMP init)
- call read_mp_table_parameters(errmsg, errflg)
+ if(lsm == lsm_noahmp) then
+ myerrflg = 0
+ myerrmsg = 'read_mp_table_parameters failed without a message'
+ call read_mp_table_parameters(myerrmsg, myerrflg)
+ call copy_error(myerrmsg, myerrflg, errmsg, errflg)
+ endif
!$OMP end sections
@@ -393,7 +434,9 @@ subroutine GFS_phys_time_vary_init (
if (errflg/=0) return
if (iaerclm) then
+ ! This call is outside the OpenMP section, so it should access errmsg & errflg directly.
call read_aerdataf (me, master, iflip, idate, fhour, errmsg, errflg)
+ ! If it is moved to an OpenMP section, it must use myerrmsg, myerrflg, and copy_error.
if (errflg/=0) return
end if
@@ -479,7 +522,8 @@ subroutine GFS_phys_time_vary_init (
!$omp shared(dwsat_table,dksat_table,psisat_table,smoiseq) &
!$OMP shared(smcwtdxy,deeprechxy,rechxy,errmsg,errflg) &
!$OMP private(vegtyp,masslai,masssai,snd,dzsno,dzsnso,isnow) &
-!$OMP private(soiltyp,bexp,smcmax,smcwlt,dwsat,dksat,psisat,ddz)
+!$OMP private(soiltyp,bexp,smcmax,smcwlt,dwsat,dksat,psisat) &
+!$OMP private(myerrmsg,myerrflg,ddz)
do ix=1,im
if (landfrac(ix) >= drythresh) then
tvxy(ix) = tsfcl(ix)
@@ -594,8 +638,9 @@ subroutine GFS_phys_time_vary_init (
dzsno(-1) = 0.20_kind_phys
dzsno(0) = snd - 0.05_kind_phys - 0.20_kind_phys
else
- errmsg = 'Error in GFS_phys_time_vary.fv3.F90: Problem with the logic assigning snow layers in Noah MP initialization'
- errflg = 1
+ myerrmsg = 'Error in GFS_phys_time_vary.fv3.F90: Problem with the logic assigning snow layers in Noah MP initialization'
+ myerrflg = 1
+ call copy_error(myerrmsg, myerrflg, errmsg, errflg)
endif
! Now we have the snowxy field
diff --git a/physics/GFS_rrtmg_pre.F90 b/physics/GFS_rrtmg_pre.F90
index 4f4de181a..fff4ae0b9 100644
--- a/physics/GFS_rrtmg_pre.F90
+++ b/physics/GFS_rrtmg_pre.F90
@@ -976,7 +976,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, lextop,&
& imp_physics_mg, iovr, iovr_rand, iovr_maxrand, iovr_max, &
& iovr_dcorr, iovr_exp, iovr_exprand, idcor, idcor_con, &
& idcor_hogan, idcor_oreopoulos, lcrick, lcnorm, &
- & imfdeepcnv, imfdeepcnv_gf, imfdeepcnv_gf, do_mynnedmf, &
+ & imfdeepcnv, imfdeepcnv_gf, imfdeepcnv_c3, do_mynnedmf, &
& lgfdlmprad, &
& uni_cld, lmfshal, lmfdeep2, cldcov, clouds1, &
& effrl, effri, effrr, effrs, effr_in, &
diff --git a/physics/GFS_surface_generic_post.F90 b/physics/GFS_surface_generic_post.F90
index 9faebc8cf..7e8cfa753 100644
--- a/physics/GFS_surface_generic_post.F90
+++ b/physics/GFS_surface_generic_post.F90
@@ -130,6 +130,8 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, cpl
if (cplflx .or. cpllnd) then
do i=1,im
+ dlwsfci_cpl (i) = adjsfcdlw(i)
+ dswsfci_cpl (i) = adjsfcdsw(i)
dlwsfc_cpl (i) = dlwsfc_cpl(i) + adjsfcdlw(i)*dtf
dswsfc_cpl (i) = dswsfc_cpl(i) + adjsfcdsw(i)*dtf
psurfi_cpl (i) = pgr(i)
@@ -138,8 +140,6 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, cpl
if (cplflx) then
do i=1,im
- dlwsfci_cpl (i) = adjsfcdlw(i)
- dswsfci_cpl (i) = adjsfcdsw(i)
dnirbmi_cpl (i) = adjnirbmd(i)
dnirdfi_cpl (i) = adjnirdfd(i)
dvisbmi_cpl (i) = adjvisbmd(i)
@@ -242,7 +242,7 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, cpl
tedir(i) = tedir(i) + edir(i) * dtf
if (lsm == lsm_noahmp) then
paha(i) = paha(i) + pah(i) * dtf
- twa(i) = waxy(i)
+ twa(i) = waxy(i)
endif
enddo
endif
@@ -252,7 +252,7 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, cpl
! heat torage parameterization the kinematic sensible heat flux
! (hflx) as surface boundary forcing to the pbl scheme is
! reduced in a factor of hffac given as a function of surface roughness &
-! green vegetation fraction (zvfun)
+! green vegetation fraction (zvfun)
!
do i=1,im
hflxq(i) = hflx(i)
diff --git a/physics/clm_lake.f90 b/physics/clm_lake.f90
index 4fc4112ce..620f79a96 100644
--- a/physics/clm_lake.f90
+++ b/physics/clm_lake.f90
@@ -1,4 +1,4 @@
-!> \file clm_lake.F90
+!> \file clm_lake.f90
!! Contains code related to the CLM lake model
!!
!! This lake scheme was taken from module_sf_lake in WRF 4.3.1, and
@@ -7,7 +7,7 @@
!! The original documentation said:
!!
!! The lake scheme was retrieved from the Community Land Model version 4.5
-!! (Oleson et al. 2013) with some modifications by Gu et al. (2013). It is a
+!! (Oleson et al. (2013) \cite Oleson2013) with some modifications by Gu et al. (2015) \cite Gu2015. It is a
!! one-dimensional mass and energy balance scheme with 20-25 model layers,
!! including up to 5 snow layers on the lake ice, 10 water layers, and 10 soil
!! layers on the lake bottom. The lake scheme is used with actual lake points and
@@ -15,15 +15,8 @@
!! lake points and lake depth in WRF (lake_min_elev and lakedepth_default).
!! The lake scheme is independent of a land surface scheme and therefore
!! can be used with any land surface scheme embedded in WRF. The lake scheme
-!! developments and evaluations were included in Subin et al. (2012) and Gu et al. (2013)
-!!
-!! Subin et al. 2012: Improved lake model for climate simulations, J. Adv. Model.
-!!
-!! Earth Syst., 4, M02001. DOI:10.1029/2011MS000072;
-!!
-!! Gu et al. 2013: Calibration and validation of lake surface temperature simulations
-!!
-!! with the coupled WRF-Lake model. Climatic Change, 1-13, 10.1007/s10584-013-0978-y.
+!! developments and evaluations were included in Subin et al. (2012) \cite Subin_2012
+!! and Gu et al. (2015) \cite Gu2015 .
MODULE clm_lake
@@ -42,30 +35,31 @@ MODULE clm_lake
integer, parameter, public :: kind_lake = kind_dbl_prec
logical :: LAKEDEBUG = .false. ! Enable lots of checks and debug prints and errors
+ logical :: DEBUG_PRINT = .false. ! Enable lots of checks and debug prints and errors
logical, parameter :: PERGRO = .false.
logical, parameter :: USE_ETALAKE = .false.
- real(kind_lake), parameter :: ETALAKE = 1.1925*50**(-0.424) ! Set this to your desired value if USE_ETALAKE=.true.
+ real(kind_lake), parameter :: ETALAKE = 1.1925*50**(-0.424) !< Set this to your desired value if USE_ETALAKE=.true.
! Level counts must be consistent with model (GFS_typedefs.F90)
- integer, parameter :: nlevsoil = 10 ! number of soil layers
- integer, parameter :: nlevlake = 10 ! number of lake layers
- integer, parameter :: nlevsnow = 5 ! maximum number of snow layers
- real(kind_lake), parameter :: scalez = 0.025_kind_lake ! Soil layer thickness discretization (m)
+ integer, parameter :: nlevsoil = 10 !< number of soil layers
+ integer, parameter :: nlevlake = 10 !< number of lake layers
+ integer, parameter :: nlevsnow = 5 !< maximum number of snow layers
+ real(kind_lake), parameter :: scalez = 0.025_kind_lake !< Soil layer thickness discretization (m)
- integer,parameter :: lbp = 1 ! pft-index bounds
+ integer,parameter :: lbp = 1 !< pft-index bounds
integer,parameter :: ubp = 1
- integer,parameter :: lbc = 1 ! column-index bounds
+ integer,parameter :: lbc = 1 !< column-index bounds
integer,parameter :: ubc = 1
- integer,parameter :: num_shlakec = 1 ! number of columns in lake filter
- integer,parameter :: filter_shlakec(1) = 1 ! lake filter (columns)
- integer,parameter :: num_shlakep = 1 ! number of pfts in lake filter
- integer,parameter :: filter_shlakep(1) = 1 ! lake filter (pfts)
+ integer,parameter :: num_shlakec = 1 !< number of columns in lake filter
+ integer,parameter :: filter_shlakec(1) = 1 !< lake filter (columns)
+ integer,parameter :: num_shlakep = 1 !< number of pfts in lake filter
+ integer,parameter :: filter_shlakep(1) = 1 !< lake filter (pfts)
integer,parameter :: pcolumn(1) = 1
integer,parameter :: pgridcell(1) = 1
- integer,parameter :: cgridcell(1) = 1 ! gridcell index of column
- integer,parameter :: clandunit(1) = 1 ! landunit index of column
+ integer,parameter :: cgridcell(1) = 1 !< gridcell index of column
+ integer,parameter :: clandunit(1) = 1 !< landunit index of column
integer,parameter :: begg = 1
integer,parameter :: endg = 1
@@ -80,44 +74,44 @@ MODULE clm_lake
logical,parameter :: lakpoi(1) = .true.
!Initialize physical constants not available from model:
- real(kind_lake), parameter :: tcrit = 2.5 !critical temperature to determine rain or snow
- real(kind_lake), parameter :: tkwat = 0.6 !thermal conductivity of water [W/m/k]
- real(kind_lake), parameter :: tkice = 2.290 !thermal conductivity of ice [W/m/k]
- real(kind_lake), parameter :: tkairc = 0.023 !thermal conductivity of air [W/m/k]
- real(kind_lake), parameter :: snow_bd = 250 !constant snow bulk density (only used in special case here) [kg/m^3]
+ real(kind_lake), parameter :: tcrit = 2.5 !< critical temperature to determine rain or snow
+ real(kind_lake), parameter :: tkwat = 0.6 !< thermal conductivity of water [W/m/k]
+ real(kind_lake), parameter :: tkice = 2.290 !< thermal conductivity of ice [W/m/k]
+ real(kind_lake), parameter :: tkairc = 0.023 !< thermal conductivity of air [W/m/k]
+ real(kind_lake), parameter :: snow_bd = 250 !< constant snow bulk density (only used in special case here) [kg/m^3]
! Constants that are copied from model values by clm_lake_init:
- real(kind_lake) :: pi !ratio of the circumference of a circle to its diameter
- real(kind_lake) :: vkc !von Karman constant [-]
- real(kind_lake) :: grav !gravity constant [m/s2]
- real(kind_lake) :: sb !stefan-boltzmann constant [W/m2/K4]
- real(kind_lake) :: tfrz !freezing temperature [K]
- real(kind_lake) :: denh2o !density of liquid water [kg/m3]
- real(kind_lake) :: denice !density of ice [kg/m3]
- real(kind_lake) :: cpice !Specific heat of ice [J/kg-K]
- real(kind_lake) :: cpliq !Specific heat of water [J/kg-K]
- real(kind_lake) :: hfus !Latent heat of fusion for ice [J/kg]
- real(kind_lake) :: hvap !Latent heat of evap for water [J/kg]
- real(kind_lake) :: hsub !Latent heat of sublimation [J/kg]
- real(kind_lake) :: invhvap !1/hvap [kg/J]
- real(kind_lake) :: invhsub !1/hsub [kg/J]
- real(kind_lake) :: rair !gas constant for dry air [J/kg/K]
- real(kind_lake) :: cpair !specific heat of dry air [J/kg/K]
- real(kind_lake) :: con_eps !ratio of gas constants of air and water vapor [unitless]
- real(kind_lake) :: one_minus_con_eps !1 - con_eps [unitless]
- real(kind_lake) :: con_fvirt !1/con_eps - 1 [unitless]
+ real(kind_lake) :: pi !< ratio of the circumference of a circle to its diameter
+ real(kind_lake) :: vkc !< von Karman constant [-]
+ real(kind_lake) :: grav !< gravity constant [m/s2]
+ real(kind_lake) :: sb !< stefan-boltzmann constant [W/m2/K4]
+ real(kind_lake) :: tfrz !< freezing temperature [K]
+ real(kind_lake) :: denh2o !< density of liquid water [kg/m3]
+ real(kind_lake) :: denice !< density of ice [kg/m3]
+ real(kind_lake) :: cpice !< Specific heat of ice [J/kg-K]
+ real(kind_lake) :: cpliq !< Specific heat of water [J/kg-K]
+ real(kind_lake) :: hfus !< Latent heat of fusion for ice [J/kg]
+ real(kind_lake) :: hvap !< Latent heat of evap for water [J/kg]
+ real(kind_lake) :: hsub !< Latent heat of sublimation [J/kg]
+ real(kind_lake) :: invhvap !< 1/hvap [kg/J]
+ real(kind_lake) :: invhsub !< 1/hsub [kg/J]
+ real(kind_lake) :: rair !< gas constant for dry air [J/kg/K]
+ real(kind_lake) :: cpair !< specific heat of dry air [J/kg/K]
+ real(kind_lake) :: con_eps !< ratio of gas constants of air and water vapor [unitless]
+ real(kind_lake) :: one_minus_con_eps !< 1 - con_eps [unitless]
+ real(kind_lake) :: con_fvirt !< 1/con_eps - 1 [unitless]
- real(kind_lake), public, parameter :: spval = 1.e36 !special value for missing data (ocean)
- real(kind_lake), parameter :: depth_c = 50. !below the level t_lake3d will be 277.0 !mchen
- real(kind_lake), parameter :: zero_h2o = 1e-12 !lower mixing ratio is is treated as zero
+ real(kind_lake), public, parameter :: spval = 1.e36 !< special value for missing data (ocean)
+ real(kind_lake), parameter :: depth_c = 50. !< below the level t_lake3d will be 277.0 !mchen
+ real(kind_lake), parameter :: zero_h2o = 1e-12 !< lower mixing ratio is is treated as zero
! These are tunable constants
- real(kind_lake), parameter :: wimp = 0.05 !Water impermeable if porosity less than wimp
- real(kind_lake), parameter :: ssi = 0.033 !Irreducible water saturation of snow
- real(kind_lake), parameter :: cnfac = 0.5 !Crank Nicholson factor between 0 and 1
+ real(kind_lake), parameter :: wimp = 0.05 !< Water impermeable if porosity less than wimp
+ real(kind_lake), parameter :: ssi = 0.033 !< Irreducible water saturation of snow
+ real(kind_lake), parameter :: cnfac = 0.5 !< Crank Nicholson factor between 0 and 1
! Initialize water type constants
- integer,parameter :: istsoil = 1 !soil "water" type
+ integer,parameter :: istsoil = 1 !tgs - 7nov19 - salinity effect on freezing point (Tanya, Stan, Trevor).
+ !! The Great Salt Lake (GSL), Utah lat/long (39.5-42.0,-111.5- -117.7).
+ !! The GSL's salinity is 270 ppt above ~41.22 N with freezing point of -24 C,
+ !! and 150 ppt south of ~41.22 N with freezing point -10 C (info from Trevor Alcott).
+ !! The fresh-water Willard Bay should be excluded from the box around the Great Salt
+ !! Lake: lat/long 41.3539, -112.102, HRRR i,j = 494,667 (info from Stan and Trevor).
+ !!
+ !! 1jun2020: reset the GSL freezing point to be -5 C,
+ !! and add a check (after call to LakeMain) to keep the lake ice free for the whole year.
if ((xlon_d.gt.-117.7 .and. xlon_d.lt.-111.5) .and. &
! excludes Willard Bay
.not. (xlon_d.gt.-112.104 .and. xlon_d.lt.-112.100))then
if(xlat_d.gt.39.5 .and. xlat_d.lt.41.22) then
- if(lakedebug) then
+ if(debug_print) then
print *,'The Great Salt Lake south of 41.22 N, lat,lon',xlat_d,xlon_d
endif
limit_temperature_by_climatology = .true.
@@ -175,7 +169,7 @@ logical function limit_temperature_by_climatology(xlat_d,xlon_positive)
elseif(( xlat_d.ge.41.22 .and. xlat_d.lt.42.) .and. .not. &
! excludes Willard Bay
(xlat_d.gt.41.352 .and. xlat_d.lt.41.354)) then
- if(lakedebug) then
+ if(debug_print) then
print *,'The Great Salt Lake north of 41.22 N xlat_d,xlon_d ',xlat_d,xlon_d
endif
!print *,'Ice fraction on the GSL ', i,j,lake_icefrac3d(i,:,j)
@@ -200,30 +194,31 @@ subroutine is_salty(xlat_d,xlon_positive, cannot_freeze, salty)
xlon_d = xlon_positive
if(xlon_d>180) xlon_d = xlon_d - 360
+ ! for the Great Salt Lake
cannot_freeze = limit_temperature_by_climatology(xlat_d,xlon_d)
salty = cannot_freeze
- other_locations: if(include_all_salty_locations) then
! --- The Mono Lake in California, salinity is 75 ppt with freezing point at
! --- -4.2 C (Stan). The Mono Lake lat/long (37.9-38.2, -119.3 - 118.8)
if (xlon_d.gt.-119.3.and. xlon_d.lt.-118.8) then
if(xlat_d.gt.37.9 .and. xlat_d.lt.38.2) then
salty = .true.
- if(lakedebug) then
+ if(debug_print) then
print *,'Salty Mono Lake, i,j',xlat_d,xlon_d
endif
endif ! xlat_d
endif ! xlon_d
+ other_locations: if(include_all_salty_locations) then
! --- Caspian Sea and Dead Sea are salty too (Sam, Tanya)
if ( xlat_d>36.5_kind_phys .and. xlat_d<47.1_kind_phys .and. xlon_d>46.8_kind_phys .and. xlon_d<55.0_kind_phys ) then
- if(lakedebug) then
+ if(debug_print) then
print *,'Salty Caspian Sea ',xlat_d,xlon_d
endif
salty = .true.
end if
if ( xlon_d>35.3 .and. xlon_d<35.6 .and. xlat_d>31.3 .and. xlat_d<31.8) then
- if(lakedebug) then
+ if(debug_print) then
print *,'Salty Dead Sea ',xlat_d,xlon_d
endif
salty = .true.
@@ -234,12 +229,37 @@ end subroutine is_salty
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ subroutine calculate_z_dz_lake(i,input_lakedepth,clm_lakedepth,z_lake,dz_lake)
+ implicit none
+ integer, intent(in) :: i
+ real(kind_phys), intent(inout) :: clm_lakedepth(:) ! lake depth used by clm
+ real(kind_phys), intent(in) :: input_lakedepth(:) ! lake depth before correction (m)
+ real(kind_lake) :: z_lake(nlevlake) ! layer depth for lake (m)
+ real(kind_lake) :: dz_lake(nlevlake) ! layer thickness for lake (m)
+ real(kind_lake) :: depthratio
+
+ if (input_lakedepth(i) == spval) then
+ clm_lakedepth(i) = zlak(nlevlake) + 0.5_kind_lake*dzlak(nlevlake)
+ z_lake(1:nlevlake) = zlak(1:nlevlake)
+ dz_lake(1:nlevlake) = dzlak(1:nlevlake)
+ else
+ depthratio = input_lakedepth(i) / (zlak(nlevlake) + 0.5_kind_lake*dzlak(nlevlake))
+ z_lake(1) = zlak(1)
+ dz_lake(1) = dzlak(1)
+ dz_lake(2:nlevlake) = dzlak(2:nlevlake)*depthratio
+ z_lake(2:nlevlake) = zlak(2:nlevlake)*depthratio + dz_lake(1)*(1._kind_lake - depthratio)
+ end if
+
+ end subroutine calculate_z_dz_lake
+
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
!> \section arg_table_clm_lake_run Argument Table
!! \htmlinclude clm_lake_run.html
!!
SUBROUTINE clm_lake_run( &
! Model time and metadata:
- im, km, me, master, fhour, IDATE, kdt, &
+ flag_restart, im, km, me, master, fhour, IDATE, kdt, &
! Configuration and initialization:
iopt_lake, iopt_lake_clm, min_lakeice, lakedepth_default, use_lakedepth, &
@@ -263,8 +283,8 @@ SUBROUTINE clm_lake_run( &
salty, savedtke12d, snowdp2d, h2osno2d, snl2d, t_grnd2d, t_lake3d, &
lake_icefrac3d, t_soisno3d, h2osoi_ice3d, h2osoi_liq3d, h2osoi_vol3d, &
- z3d, dz3d, zi3d, z_lake3d, dz_lake3d, watsat3d, csol3d, sand3d, clay3d, &
- tkmg3d, tkdry3d, tksatu3d, clm_lakedepth, cannot_freeze, &
+ z3d, dz3d, zi3d, &
+ input_lakedepth, clm_lakedepth, cannot_freeze, &
! Error reporting:
errflg, errmsg)
@@ -280,6 +300,7 @@ SUBROUTINE clm_lake_run( &
!
! Model time and metadata:
!
+ LOGICAL , INTENT (IN) :: flag_restart
INTEGER , INTENT (IN) :: im,km,me,master
INTEGER, INTENT(IN) :: IDATE(4), kdt
REAL(KIND_PHYS), INTENT(IN) :: fhour
@@ -300,7 +321,7 @@ SUBROUTINE clm_lake_run( &
!
REAL(KIND_PHYS), DIMENSION(:), INTENT(IN):: &
tg3, pgr, zlvl, qvcurr, xlat_d, xlon_d, ch, cm, &
- dlwsfci, dswsfci, oro_lakedepth, wind, rho0, tsfc, &
+ dlwsfci, dswsfci, oro_lakedepth, wind, rho0, &
rainncprv, raincprv
REAL(KIND_PHYS), DIMENSION(:,:), INTENT(in) :: gu0, gv0, prsi, gt0, phii
LOGICAL, DIMENSION(:), INTENT(IN) :: flag_iter
@@ -311,7 +332,7 @@ SUBROUTINE clm_lake_run( &
!
REAL(KIND_PHYS), DIMENSION(:), INTENT(INOUT) :: &
evap_wat, evap_ice, hflx_wat, hflx_ice, gflx_wat, gflx_ice, &
- ep1d_water, ep1d_ice, tsurf_water, tsurf_ice, tsfc_wat, tisfc, &
+ ep1d_water, ep1d_ice, tsurf_water, tsurf_ice, tsfc_wat, tisfc, tsfc, &
weasdi, snodi, hice, qss_water, qss_ice, &
cmm_water, cmm_ice, chh_water, chh_ice, &
uustar_water, uustar_ice, lake_t_snow, albedo, zorlw, &
@@ -340,14 +361,8 @@ SUBROUTINE clm_lake_run( &
dz3d
real(kind_phys), dimension( :,-nlevsnow+0: ) ,INTENT(inout) :: zi3d
- REAL(KIND_PHYS), DIMENSION( :,: ),INTENT(INOUT) :: z_lake3d
- REAL(KIND_PHYS), DIMENSION( :,: ),INTENT(INOUT) :: dz_lake3d
- REAL(KIND_PHYS), DIMENSION( :,: ),INTENT(INOUT) :: watsat3d
- REAL(KIND_PHYS), DIMENSION( :,: ),INTENT(INOUT) :: csol3d, sand3d, clay3d
- REAL(KIND_PHYS), DIMENSION( :,: ),INTENT(INOUT) :: tkmg3d
- REAL(KIND_PHYS), DIMENSION( :,: ),INTENT(INOUT) :: tkdry3d
- REAL(KIND_PHYS), DIMENSION( :,: ),INTENT(INOUT) :: tksatu3d
REAL(KIND_PHYS), DIMENSION( : ) ,INTENT(INOUT) :: clm_lakedepth
+ REAL(KIND_PHYS), DIMENSION( : ) ,INTENT(INOUT) :: input_lakedepth
!
! Error reporting:
@@ -434,10 +449,10 @@ SUBROUTINE clm_lake_run( &
character*255 :: message
logical, parameter :: feedback_to_atmosphere = .true. ! FIXME: REMOVE
- real(kind_lake) :: to_radians, lat_d, lon_d, qss
+ real(kind_lake) :: to_radians, lat_d, lon_d, qss, tkm, bd
- integer :: month,num1,num2,day_of_month
- real(kind_lake) :: wght1,wght2,Tclim
+ integer :: month,num1,num2,day_of_month,isl
+ real(kind_lake) :: wght1,wght2,Tclim,depthratio
logical salty_flag, cannot_freeze_flag
@@ -455,31 +470,19 @@ SUBROUTINE clm_lake_run( &
lakedepth_default=lakedepth_default, fhour=fhour, &
oro_lakedepth=oro_lakedepth, savedtke12d=savedtke12d, snowdp2d=snowdp2d, &
h2osno2d=h2osno2d, snl2d=snl2d, t_grnd2d=t_grnd2d, t_lake3d=t_lake3d, &
- lake_icefrac3d=lake_icefrac3d, z_lake3d=z_lake3d, dz_lake3d=dz_lake3d, &
+ lake_icefrac3d=lake_icefrac3d, &
t_soisno3d=t_soisno3d, h2osoi_ice3d=h2osoi_ice3d, h2osoi_liq3d=h2osoi_liq3d, &
- h2osoi_vol3d=h2osoi_vol3d, z3d=z3d, dz3d=dz3d, zi3d=zi3d, watsat3d=watsat3d, &
- csol3d=csol3d, tkmg3d=tkmg3d, fice=fice, min_lakeice=min_lakeice, &
+ h2osoi_vol3d=h2osoi_vol3d, z3d=z3d, dz3d=dz3d, zi3d=zi3d, &
+ fice=fice, hice=hice, min_lakeice=min_lakeice, &
tsfc=tsfc, &
- use_lake_model=use_lake_model, use_lakedepth=use_lakedepth, tkdry3d=tkdry3d, &
- tksatu3d=tksatu3d, im=im, prsi=prsi, xlat_d=xlat_d, xlon_d=xlon_d, &
- clm_lake_initialized=clm_lake_initialized, sand3d=sand3d, clay3d=clay3d, &
+ use_lake_model=use_lake_model, use_lakedepth=use_lakedepth, &
+ im=im, prsi=prsi, xlat_d=xlat_d, xlon_d=xlon_d, &
+ clm_lake_initialized=clm_lake_initialized, input_lakedepth=input_lakedepth, &
tg3=tg3, clm_lakedepth=clm_lakedepth, km=km, me=me, master=master, &
errmsg=errmsg, errflg=errflg)
if(errflg/=0) then
return
endif
- if(any(clay3d>0 .and. clay3d<1)) then
- write(message,*) 'Invalid clay3d. Abort.'
- errmsg=trim(message)
- errflg=1
- return
- endif
- if(any(dz_lake3d>0 .and. dz_lake3d<.1)) then
- write(message,*) 'Invalid dz_lake3d. Abort.'
- errmsg=trim(message)
- errflg=1
- return
- endif
lake_points=0
snow_points=0
@@ -498,14 +501,14 @@ SUBROUTINE clm_lake_run( &
wght2 = day_of_month/month_length(month)
if(wght2<0 .or. wght2>1) then
- if(lakedebug) then
+ if(debug_print) then
write(0,*) 'Warning: wght2 is not 0..1: ',wght2
endif
wght2 = max(0.0_kind_lake,min(1.0_kind_lake,wght2))
endif
wght1 = 1.0_kind_lake - wght2
- if(LAKEDEBUG .and. me==0) then
+ if(debug_print ) then
print *,'month,num1,num2,wght1,wght2',month,num1,num2,wght1,wght2
endif
@@ -516,13 +519,13 @@ SUBROUTINE clm_lake_run( &
call is_salty(xlat_d(i),xlon_d(i),salty_flag,cannot_freeze_flag)
if(salty_flag) then
- salty(i) = 1
+ salty(i) = 1 ! The Great Salt Lake and Mono Lake
else
salty(i) = 0
endif
if(cannot_freeze_flag) then
- cannot_freeze(i) = 1
+ cannot_freeze(i) = 1 ! only the Great Salt Lake
else
cannot_freeze(i) = 0
endif
@@ -544,6 +547,26 @@ SUBROUTINE clm_lake_run( &
lake_points = lake_points+1
+ call calculate_z_dz_lake(i,input_lakedepth,clm_lakedepth,z_lake(1,:),dz_lake(1,:))
+
+ do c = 2,column
+ z_lake(c,:) = z_lake(1,:)
+ dz_lake(c,:) = dz_lake(1,:)
+ enddo
+
+ ! Soil hydraulic and thermal properties
+ isl = ISLTYP(i)
+ if (isl == 0 ) isl = 14
+ if (isl == 14 ) isl = isl + 1
+
+ watsat = 0.489_kind_lake - 0.00126_kind_lake*sand(isl)
+ csol = (2.128_kind_lake*sand(isl)+2.385_kind_lake*clay(isl)) / (sand(isl)+clay(isl))*1.e6_kind_lake ! J/(m3 K)
+ tkm = (8.80_kind_lake*sand(isl)+2.92_kind_lake*clay(isl))/(sand(isl)+clay(isl)) ! W/(m K)
+ bd = (1._kind_lake-watsat(1,1))*2.7e3_kind_lake
+ tkmg = tkm ** (1._kind_lake- watsat(1,1))
+ tkdry = (0.135_kind_lake*bd + 64.7_kind_lake) / (2.7e3_kind_lake - 0.947_kind_lake*bd)
+ tksatu = tkmg(1,1)*0.57_kind_lake**watsat(1,1)
+
do c = 1,column
forc_t(c) = SFCTMP ! [K]
@@ -570,15 +593,7 @@ SUBROUTINE clm_lake_run( &
t_grnd(c) = t_grnd2d(i)
do k = 1,nlevlake
t_lake(c,k) = t_lake3d(i,k)
- !-- If T of salty lakes is above the freezing point, keep them ice free
- if(salty(i)==1 .and. t_lake(c,k) > tfrz .and. lake_icefrac3d(i,k) > 0.) then
- lake_icefrac(c,k) = 0.
- else
- lake_icefrac(c,k) = lake_icefrac3d(i,k)
- endif
- !lake_icefrac(c,k) = lake_icefrac3d(i,k)
- z_lake(c,k) = z_lake3d(i,k)
- dz_lake(c,k) = dz_lake3d(i,k)
+ lake_icefrac(c,k) = lake_icefrac3d(i,k)
enddo
do k = -nlevsnow+1,nlevsoil
t_soisno(c,k) = t_soisno3d(i,k)
@@ -591,14 +606,6 @@ SUBROUTINE clm_lake_run( &
do k = -nlevsnow+0,nlevsoil
zi(c,k) = zi3d(i,k)
enddo
- do k = 1,nlevsoil
- watsat(c,k) = watsat3d(i,k)
- csol(c,k) = csol3d(i,k)
- tkmg(c,k) = tkmg3d(i,k)
- tkdry(c,k) = tkdry3d(i,k)
- tksatu(c,k) = tksatu3d(i,k)
- enddo
-
enddo
eflx_lwrad_net = -9999
@@ -633,23 +640,29 @@ SUBROUTINE clm_lake_run( &
do c = 1,column
if(cannot_freeze(i) == 1) then
- t_grnd(c) = max(274.5_kind_lake,t_grnd(c))
+ ! The Great Salt Lake
do k = 1,nlevlake
- t_lake(c,k) = max(274.5_kind_lake,t_lake(c,k))
- lake_icefrac(c,k) = 0.
+ lake_icefrac(c,k) = 0._kind_lake
enddo
- endif
-
- if(salty(i)/=0) then
- Tclim = tfrz + wght1*saltlk_T(num1) &
- + wght2*saltlk_T(num2)
- if(lakedebug) print *,'Tclim,tsfc,t_lake3d',i,Tclim,t_grnd(c),t_lake(c,:),t_soisno(c,:)
- t_grnd(c) = min(Tclim+3.0_kind_lake,(max(t_grnd(c),Tclim-3.0_kind_lake)))
- do k = 1,nlevlake
- t_lake(c,k) = min(Tclim+3.0_kind_lake,(max(t_lake(c,k),Tclim-3.0_kind_lake)))
- enddo
- t_soisno(c,1) = min(Tclim+3.0_kind_lake,(max(t_soisno(c,1),Tclim-3.0_kind_lake)))
- if(lakedebug) print *,'After Tclim,tsfc,t_lake3d',i,Tclim,t_grnd(c),t_lake(c,:),t_soisno(c,:)
+ ! bound lake temperture with the climatology
+ Tclim = tfrz + wght1*saltlk_T(num1) &
+ + wght2*saltlk_T(num2)
+ if(debug_print) print *,'GSL - Tclim,tsfc,t_lake3d',i,Tclim,t_grnd(c),t_lake(c,:),t_soisno(c,:)
+ t_grnd(c) = min(Tclim+3.0_kind_lake,(max(t_grnd(c),Tclim-3.0_kind_lake)))
+ do k = 1,nlevlake
+ t_lake(c,k) = min(Tclim+3.0_kind_lake,(max(t_lake(c,k),Tclim-3.0_kind_lake)))
+ enddo
+ t_soisno(c,1) = min(Tclim+3.0_kind_lake,(max(t_soisno(c,1),Tclim-3.0_kind_lake)))
+ if(debug_print) print *,'GSL - after Tclim,tsfc,t_lake3d',i,Tclim,t_grnd(c),t_lake(c,:),t_soisno(c,:)
+ elseif(salty(i) == 1) then
+ ! Mono Lake never freezes, its temperature is above freezing point = -4.2 C
+ t_grnd(c) = max(tfrz-4.2_kind_lake,t_grnd(c))
+ do k = 1,nlevlake
+ lake_icefrac(c,k) = 0._kind_lake
+ t_lake(c,k) = max(tfrz-4.2_kind_lake,t_lake(c,k))
+ enddo
+ t_soisno(c,1) = max(tfrz-4.2_kind_lake,t_soisno(c,1))
+ if(debug_print) print *,'Mono - tsfc,t_lake3d',i,t_grnd(c),t_lake(c,:),t_soisno(c,:)
endif
savedtke12d(i) = savedtke1(c)
@@ -689,7 +702,10 @@ SUBROUTINE clm_lake_run( &
gflx_wat(I) = eflx_gnet(c) ![W/m/m] upward_heat_flux_in_soil_over_water
ep1d_water(i) = eflx_lh_tot(c) ![W/m/m] surface_upward_potential_latent_heat_flux_over_water
tsurf_water(I) = t_grnd(c) ![K] surface skin temperature after iteration over water
+ tsurf_ice(i) = t_grnd(c) ! surface_skin_temperature_after_iteration_over_ice
tsfc_wat(i) = t_grnd(c) ![K] surface skin temperature over water
+ tisfc(i) = t_grnd(c)
+ tsfc(i) = t_grnd(c)
lake_t2m(I) = t_ref2m(c) ![K] temperature_at_2m_from_clm_lake
lake_q2m(I) = q_ref2m(c) ! [frac] specific_humidity_at_2m_from_clm_lake
albedo(i) = ( 0.6 * lake_icefrac3d(i,1) ) + & ! mid_day_surface_albedo_over_lake
@@ -716,7 +732,9 @@ SUBROUTINE clm_lake_run( &
cmm_water(i) = cm(i)*wind(i) ! surface_drag_wind_speed_for_momentum_in_air_over_water
ice_point: if(fice(i)>=min_lakeice) then
+ ! Icy lake
! Most ice variables are identical to water variables.
+ if(debug_print) print *,'Icy xlat_d(i),xlon_d(i),frac_ice,frac_grid ',xlat_d(i),xlon_d(i),frac_ice,frac_grid
if(frac_ice .or. frac_grid) then
evap_ice(i) = evap_wat(i) ! kinematic_surface_upward_latent_heat_flux_over_ice
hflx_ice(i) = hflx_wat(i) ! kinematic_surface_upward_sensible_heat_flux_over_ice
@@ -728,11 +746,13 @@ SUBROUTINE clm_lake_run( &
! uustar_ice(i) = uustar_water(i) ! surface_friction_velocity_over_ice
endif
- tsurf_ice(i) = tsurf_water(i) ! surface_skin_temperature_after_iteration_over_ice
+ tsurf_ice(i) = t_grnd(c) ! surface_skin_temperature_after_iteration_over_ice
tisfc(i) = t_grnd(c) ! surface_skin_temperature_over_ice
+ tsfc(i) = t_grnd(c) ! surface_skin_temperature_over_ice
weasdi(i) = h2osno(c) ! water_equivalent_accumulated_snow_depth_over_ice
- snodi(i) = snowdp(c) ! surface_snow_thickness_water_equivalent_over_ice
- tsurf_ice(i) = t_grnd(c) ! surface_skin_temperature_after_iteration_over_ice
+ snodi(i) = snowdp(c)*1.e3 ! surface_snow_thickness_water_equivalent_over_ice
+ weasd(i) = weasdi(i)
+ snowd(i) = snodi(c) ! surface_snow_thickness_water_equivalent_over_ice
! Ice points are icy:
icy(i)=.true. ! flag_nonzero_sea_ice_surface_fraction
@@ -744,7 +764,7 @@ SUBROUTINE clm_lake_run( &
hice(I) = 0 ! sea_ice_thickness
do k=1,nlevlake
if(lake_icefrac3d(i,k)>0) then
- hice(i) = hice(i) + dz_lake3d(i,k)
+ hice(i) = hice(i) + dz_lake(c,k)
endif
end do
else ! Not an ice point
@@ -754,8 +774,11 @@ SUBROUTINE clm_lake_run( &
icy(i)=.false.
weasdi(i) = 0
snodi(i) = 0
+ weasd(i) = 0
+ snowd(i) = 0
tisfc(i) = t_grnd(c)
tsurf_ice(i) = tisfc(i)
+ tsfc(i) = t_grnd(c)
hice(i) = 0
fice(i) = 0
endif ice_point
@@ -774,7 +797,7 @@ SUBROUTINE clm_lake_run( &
endif if_lake_is_here
ENDDO lake_top_loop
- if(LAKEDEBUG .and. lake_points>0 .and. (kdt<3 .or. mod(kdt,30)==3)) then
+ if(debug_print .and. lake_points>0 .and. (kdt<3 .or. mod(kdt,30)==3)) then
3082 format('lake points processed in timestep ',I0,' by rank ',I0,' = ',I0,' snow=',I0,' ice=',I0)
print 3082,kdt,me,lake_points,snow_points,ice_points
endif
@@ -800,69 +823,69 @@ SUBROUTINE LakeMain(forc_t,forc_pbot,forc_psrf,forc_hgt,forc_hgt_q, & !I
integer, intent(inout) :: errflg
character(*), intent(inout) :: errmsg
- real(kind_lake),intent(in) :: dtime ! timestep
- real(kind_lake),intent(in) :: xlat_d, xlon_d ! grid location for debugging
- real(kind_lake),intent(in) :: forc_t(1) ! atmospheric temperature (Kelvin)
- real(kind_lake),intent(in) :: forc_pbot(1) ! atm bottom level pressure (Pa)
- real(kind_lake),intent(in) :: forc_psrf(1) ! atmospheric surface pressure (Pa)
- real(kind_lake),intent(in) :: forc_hgt(1) ! atmospheric reference height (m)
- real(kind_lake),intent(in) :: forc_hgt_q(1) ! observational height of humidity [m]
- real(kind_lake),intent(in) :: forc_hgt_t(1) ! observational height of temperature [m]
- real(kind_lake),intent(in) :: forc_hgt_u(1) ! observational height of wind [m]
- real(kind_lake),intent(in) :: forc_q(1) ! atmospheric specific humidity (kg/kg)
- real(kind_lake),intent(in) :: forc_u(1) ! atmospheric wind speed in east direction (m/s)
- real(kind_lake),intent(in) :: forc_v(1) ! atmospheric wind speed in north direction (m/s)
+ real(kind_lake),intent(in) :: dtime !< timestep
+ real(kind_lake),intent(in) :: xlat_d, xlon_d !< grid location for debugging
+ real(kind_lake),intent(in) :: forc_t(1) !< atmospheric temperature (Kelvin)
+ real(kind_lake),intent(in) :: forc_pbot(1) !< atm bottom level pressure (Pa)
+ real(kind_lake),intent(in) :: forc_psrf(1) !< atmospheric surface pressure (Pa)
+ real(kind_lake),intent(in) :: forc_hgt(1) !< atmospheric reference height (m)
+ real(kind_lake),intent(in) :: forc_hgt_q(1) !< observational height of humidity [m]
+ real(kind_lake),intent(in) :: forc_hgt_t(1) !< observational height of temperature [m]
+ real(kind_lake),intent(in) :: forc_hgt_u(1) !< observational height of wind [m]
+ real(kind_lake),intent(in) :: forc_q(1) !< atmospheric specific humidity (kg/kg)
+ real(kind_lake),intent(in) :: forc_u(1) !< atmospheric wind speed in east direction (m/s)
+ real(kind_lake),intent(in) :: forc_v(1) !< atmospheric wind speed in north direction (m/s)
! real(kind_lake),intent(in) :: forc_rho(1) ! density (kg/m**3)
- real(kind_lake),intent(in) :: forc_lwrad(1) ! downward infrared (longwave) radiation (W/m**2)
- real(kind_lake),intent(in) :: prec(1) ! snow or rain rate [mm/s]
- real(kind_lake),intent(in) :: sabg(1) ! solar radiation absorbed by ground (W/m**2)
- real(kind_lake),intent(in) :: lat(1) ! latitude (radians)
- real(kind_lake),intent(in) :: z_lake(1,nlevlake) ! layer depth for lake (m)
- real(kind_lake),intent(in) :: dz_lake(1,nlevlake) ! layer thickness for lake (m)
- real(kind_lake),intent(out) :: ustar_out(1) ! friction velocity [m/s]
- real(kind_lake), intent(in) :: lakedepth(1) ! column lake depth (m)
+ real(kind_lake),intent(in) :: forc_lwrad(1) !< downward infrared (longwave) radiation (W/m**2)
+ real(kind_lake),intent(in) :: prec(1) !< snow or rain rate [mm/s]
+ real(kind_lake),intent(in) :: sabg(1) !< solar radiation absorbed by ground (W/m**2)
+ real(kind_lake),intent(in) :: lat(1) !< latitude (radians)
+ real(kind_lake),intent(in) :: z_lake(1,nlevlake) !< layer depth for lake (m)
+ real(kind_lake),intent(in) :: dz_lake(1,nlevlake) !< layer thickness for lake (m)
+ real(kind_lake),intent(out) :: ustar_out(1) !< friction velocity [m/s]
+ real(kind_lake), intent(in) :: lakedepth(1) !< column lake depth (m)
!!!!!!!!!!!!!!!!tep(in),hydro(in)
! real(kind_lake), intent(in) :: watsat(1,1:nlevsoil) ! volumetric soil water at saturation (porosity)
!!!!!!!!!!!!!!!!hydro
- logical , intent(in) :: do_capsnow(1) ! true => do snow capping
- real(kind_lake), intent(in) :: watsat(1,nlevsoil) ! volumetric soil water at saturation (porosity)
- real(kind_lake), intent(in) :: tksatu(1,nlevsoil) ! thermal conductivity, saturated soil [W/m-K]
- real(kind_lake), intent(in) :: tkmg(1,nlevsoil) ! thermal conductivity, soil minerals [W/m-K]
- real(kind_lake), intent(in) :: tkdry(1,nlevsoil) ! thermal conductivity, dry soil (W/m/Kelvin)
- real(kind_lake), intent(in) :: csol(1,nlevsoil) ! heat capacity, soil solids (J/m**3/Kelvin)
+ logical , intent(in) :: do_capsnow(1) !< true => do snow capping
+ real(kind_lake), intent(in) :: watsat(1,nlevsoil) !< volumetric soil water at saturation (porosity)
+ real(kind_lake), intent(in) :: tksatu(1,nlevsoil) !< thermal conductivity, saturated soil [W/m-K]
+ real(kind_lake), intent(in) :: tkmg(1,nlevsoil) !< thermal conductivity, soil minerals [W/m-K]
+ real(kind_lake), intent(in) :: tkdry(1,nlevsoil) !< thermal conductivity, dry soil (W/m/Kelvin)
+ real(kind_lake), intent(in) :: csol(1,nlevsoil) !< heat capacity, soil solids (J/m**3/Kelvin)
!in&out
- real(kind_lake),intent(inout) :: h2osoi_vol(1,-nlevsnow+1:nlevsoil) ! volumetric soil water (0<=h2osoi_vol<=watsat)[m3/m3]
- real(kind_lake),intent(inout) :: t_grnd(1) ! ground temperature (Kelvin)
- real(kind_lake),intent(inout) :: h2osno(1) ! snow water (mm H2O)
- real(kind_lake),intent(inout) :: snowdp(1) ! snow height (m)
- real(kind_lake),intent(inout) :: z(1,-nlevsnow+1:nlevsoil) ! layer depth for snow & soil (m)
- real(kind_lake),intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) ! layer thickness for soil or snow (m)
- real(kind_lake),intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) ! soil (or snow) temperature (Kelvin)
- real(kind_lake),intent(inout) :: t_lake(1,nlevlake) ! lake temperature (Kelvin)
- integer ,intent(inout) :: snl(1) ! number of snow layers
- real(kind_lake),intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) ! liquid water (kg/m2)
- real(kind_lake),intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) ! ice lens (kg/m2)
- real(kind_lake),intent(inout) :: savedtke1(1) ! top level eddy conductivity from previous timestep (W/m.K)
- real(kind_lake),intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) ! interface level below a "z" level (m)
- real(kind_lake),intent(inout) :: lake_icefrac(1,nlevlake) ! mass fraction of lake layer that is frozen
+ real(kind_lake),intent(inout) :: h2osoi_vol(1,-nlevsnow+1:nlevsoil) !< volumetric soil water (0<=h2osoi_vol<=watsat)[m3/m3]
+ real(kind_lake),intent(inout) :: t_grnd(1) !< ground temperature (Kelvin)
+ real(kind_lake),intent(inout) :: h2osno(1) !< snow water (mm H2O)
+ real(kind_lake),intent(inout) :: snowdp(1) !< snow height (m)
+ real(kind_lake),intent(inout) :: z(1,-nlevsnow+1:nlevsoil) !< layer depth for snow & soil (m)
+ real(kind_lake),intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !< layer thickness for soil or snow (m)
+ real(kind_lake),intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil (or snow) temperature (Kelvin)
+ real(kind_lake),intent(inout) :: t_lake(1,nlevlake) !< lake temperature (Kelvin)
+ integer ,intent(inout) :: snl(1) !< number of snow layers
+ real(kind_lake),intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2)
+ real(kind_lake),intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2)
+ real(kind_lake),intent(inout) :: savedtke1(1) !< top level eddy conductivity from previous timestep (W/m.K)
+ real(kind_lake),intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) !< interface level below a "z" level (m)
+ real(kind_lake),intent(inout) :: lake_icefrac(1,nlevlake) !< mass fraction of lake layer that is frozen
!out:
- real(kind_lake),intent(out) :: eflx_gnet(1) !net heat flux into ground (W/m**2)
- real(kind_lake),intent(out) :: eflx_lwrad_net(1) ! net infrared (longwave) rad (W/m**2) [+ = to atm]
- real(kind_lake),intent(out) :: eflx_sh_tot(1) ! total sensible heat flux (W/m**2) [+ to atm]
- real(kind_lake),intent(out) :: eflx_lh_tot(1) ! total latent heat flux (W/m8*2) [+ to atm]
- real(kind_lake),intent(out) :: t_ref2m(1) ! 2 m height surface air temperature (Kelvin)
- real(kind_lake),intent(out) :: q_ref2m(1) ! 2 m height surface specific humidity (kg/kg)
- real(kind_lake),intent(out) :: taux(1) ! wind (shear) stress: e-w (kg/m/s**2)
- real(kind_lake),intent(out) :: tauy(1) ! wind (shear) stress: n-s (kg/m/s**2)
- real(kind_lake),intent(out) :: ram1(1) ! aerodynamical resistance (s/m)
- ! for calculation of decay of eddy diffusivity with depth
- ! Change the type variable to pass back to WRF.
- real(kind_lake),intent(out) :: z0mg(1) ! roughness length over ground, momentum (m(
+ real(kind_lake),intent(out) :: eflx_gnet(1) !< net heat flux into ground (W/m**2)
+ real(kind_lake),intent(out) :: eflx_lwrad_net(1) !< net infrared (longwave) rad (W/m**2) [+ = to atm]
+ real(kind_lake),intent(out) :: eflx_sh_tot(1) !< total sensible heat flux (W/m**2) [+ to atm]
+ real(kind_lake),intent(out) :: eflx_lh_tot(1) !< total latent heat flux (W/m8*2) [+ to atm]
+ real(kind_lake),intent(out) :: t_ref2m(1) !< 2 m height surface air temperature (Kelvin)
+ real(kind_lake),intent(out) :: q_ref2m(1) !< 2 m height surface specific humidity (kg/kg)
+ real(kind_lake),intent(out) :: taux(1) !< wind (shear) stress: e-w (kg/m/s**2)
+ real(kind_lake),intent(out) :: tauy(1) !< wind (shear) stress: n-s (kg/m/s**2)
+ real(kind_lake),intent(out) :: ram1(1) !< aerodynamical resistance (s/m)
+ !! for calculation of decay of eddy diffusivity with depth
+ !! Change the type variable to pass back to WRF.
+ real(kind_lake),intent(out) :: z0mg(1) !< roughness length over ground, momentum (m(
!local output
@@ -956,7 +979,7 @@ SUBROUTINE LakeMain(forc_t,forc_pbot,forc_psrf,forc_hgt,forc_hgt_q, & !I
t_lake,t_soisno,h2osoi_liq, &
h2osoi_ice,savedtke1, &
watsat, tksatu, tkmg, tkdry, csol, dtime, &
- frac_iceold,qflx_snomelt,imelt,errmsg,errflg)
+ frac_iceold,qflx_snomelt,imelt,errmsg,errflg,xlat_d,xlon_d)
if(errflg/=0) then
return ! State is invalid now, so pass error to caller.
endif
@@ -989,6 +1012,13 @@ SUBROUTINE LakeMain(forc_t,forc_pbot,forc_psrf,forc_hgt,forc_hgt_q, & !I
END SUBROUTINE LakeMain
+ ! DESCRIPTION:
+ !> Calculates lake temperatures and surface fluxes for shallow lakes.
+ !!
+ !! Shallow lakes have variable depth, possible snow layers above, freezing & thawing of lake water,
+ !! and soil layers with active temperature and gas diffusion below.
+ !!
+ !! WARNING: This subroutine assumes lake columns have one and only one pft.
SUBROUTINE ShalLakeFluxes(forc_t,forc_pbot,forc_psrf,forc_hgt,forc_hgt_q, & !i
forc_hgt_t,forc_hgt_u,forc_q, &
forc_u,forc_v,forc_lwrad,forc_snow, &
@@ -1001,18 +1031,10 @@ SUBROUTINE ShalLakeFluxes(forc_t,forc_pbot,forc_psrf,forc_hgt,forc_hgt_q,
eflx_lh_grnd,t_veg,t_ref2m,q_ref2m,taux,tauy, &
ram1,ws,ks,eflx_gnet,z0mg,ustar_out,errmsg,errflg,xlat_d,xlon_d)
!==============================================================================
- ! DESCRIPTION:
- ! Calculates lake temperatures and surface fluxes for shallow lakes.
- !
- ! Shallow lakes have variable depth, possible snow layers above, freezing & thawing of lake water,
- ! and soil layers with active temperature and gas diffusion below.
- !
- ! WARNING: This subroutine assumes lake columns have one and only one pft.
- !
! REVISION HISTORY:
- ! Created by Zack Subin, 2009
- ! Reedited by Hongping Gu, 2010
- ! Updated for CCPP by Sam Trahan, 2022
+ ! - Created by Zack Subin, 2009
+ ! - Reedited by Hongping Gu, 2010
+ ! - Updated for CCPP by Sam Trahan, 2022
!==============================================================================
! implicit none
@@ -1021,62 +1043,62 @@ SUBROUTINE ShalLakeFluxes(forc_t,forc_pbot,forc_psrf,forc_hgt,forc_hgt_q,
!in:
- integer, intent(inout) :: errflg
- character(len=*), intent(inout) :: errmsg
- real(kind_lake),intent(in) :: xlat_d,xlon_d
- real(kind_lake),intent(in) :: forc_t(1) ! atmospheric temperature (Kelvin)
- real(kind_lake),intent(in) :: forc_pbot(1) ! atmospheric pressure (Pa)
- real(kind_lake),intent(in) :: forc_psrf(1) ! atmospheric surface pressure (Pa)
- real(kind_lake),intent(in) :: forc_hgt(1) ! atmospheric reference height (m)
- real(kind_lake),intent(in) :: forc_hgt_q(1) ! observational height of humidity [m]
- real(kind_lake),intent(in) :: forc_hgt_t(1) ! observational height of temperature [m]
- real(kind_lake),intent(in) :: forc_hgt_u(1) ! observational height of wind [m]
- real(kind_lake),intent(in) :: forc_q(1) ! atmospheric specific humidity (kg/kg)
- real(kind_lake),intent(in) :: forc_u(1) ! atmospheric wind speed in east direction (m/s)
- real(kind_lake),intent(in) :: forc_v(1) ! atmospheric wind speed in north direction (m/s)
- real(kind_lake),intent(in) :: forc_lwrad(1) ! downward infrared (longwave) radiation (W/m**2)
+ integer, intent(inout) :: errflg !<
+ character(len=*), intent(inout) :: errmsg !<
+ real(kind_lake),intent(in) :: xlat_d,xlon_d !<
+ real(kind_lake),intent(in) :: forc_t(1) !< atmospheric temperature (Kelvin)
+ real(kind_lake),intent(in) :: forc_pbot(1) !< atmospheric pressure (Pa)
+ real(kind_lake),intent(in) :: forc_psrf(1) !< atmospheric surface pressure (Pa)
+ real(kind_lake),intent(in) :: forc_hgt(1) !< atmospheric reference height (m)
+ real(kind_lake),intent(in) :: forc_hgt_q(1) !< observational height of humidity [m]
+ real(kind_lake),intent(in) :: forc_hgt_t(1) !< observational height of temperature [m]
+ real(kind_lake),intent(in) :: forc_hgt_u(1) !< observational height of wind [m]
+ real(kind_lake),intent(in) :: forc_q(1) !< atmospheric specific humidity (kg/kg)
+ real(kind_lake),intent(in) :: forc_u(1) !< atmospheric wind speed in east direction (m/s)
+ real(kind_lake),intent(in) :: forc_v(1) !< atmospheric wind speed in north direction (m/s)
+ real(kind_lake),intent(in) :: forc_lwrad(1) !< downward infrared (longwave) radiation (W/m**2)
! real(kind_lake),intent(in) :: forc_rho(1) ! density (kg/m**3)
- real(kind_lake),intent(in) :: forc_snow(1) ! snow rate [mm/s]
- real(kind_lake),intent(in) :: forc_rain(1) ! rain rate [mm/s]
- real(kind_lake),intent(in) :: h2osno(1) ! snow water (mm H2O)
- real(kind_lake),intent(in) :: snowdp(1) ! snow height (m)
- real(kind_lake),intent(in) :: sabg(1) ! solar radiation absorbed by ground (W/m**2)
- real(kind_lake),intent(in) :: lat(1) ! latitude (radians)
- real(kind_lake),intent(in) :: dz(1,-nlevsnow+1:nlevsoil) ! layer thickness for soil or snow (m)
- real(kind_lake),intent(in) :: dz_lake(1,nlevlake) ! layer thickness for lake (m)
- real(kind_lake),intent(in) :: t_soisno(1,-nlevsnow+1:nlevsoil) ! soil (or snow) temperature (Kelvin)
- real(kind_lake),intent(in) :: t_lake(1,nlevlake) ! lake temperature (Kelvin)
- integer ,intent(in) :: snl(1) ! number of snow layers
- real(kind_lake),intent(in) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) ! liquid water (kg/m2)
- real(kind_lake),intent(in) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) ! ice lens (kg/m2)
- real(kind_lake),intent(in) :: savedtke1(1) ! top level eddy conductivity from previous timestep (W/m.K)
+ real(kind_lake),intent(in) :: forc_snow(1) !< snow rate [mm/s]
+ real(kind_lake),intent(in) :: forc_rain(1) !< rain rate [mm/s]
+ real(kind_lake),intent(in) :: h2osno(1) !< snow water (mm H2O)
+ real(kind_lake),intent(in) :: snowdp(1) !< snow height (m)
+ real(kind_lake),intent(in) :: sabg(1) !< solar radiation absorbed by ground (W/m**2)
+ real(kind_lake),intent(in) :: lat(1) !< latitude (radians)
+ real(kind_lake),intent(in) :: dz(1,-nlevsnow+1:nlevsoil) !< layer thickness for soil or snow (m)
+ real(kind_lake),intent(in) :: dz_lake(1,nlevlake) !< layer thickness for lake (m)
+ real(kind_lake),intent(in) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil (or snow) temperature (Kelvin)
+ real(kind_lake),intent(in) :: t_lake(1,nlevlake) !< lake temperature (Kelvin)
+ integer ,intent(in) :: snl(1) !< number of snow layers
+ real(kind_lake),intent(in) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2)
+ real(kind_lake),intent(in) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2)
+ real(kind_lake),intent(in) :: savedtke1(1) !< top level eddy conductivity from previous timestep (W/m.K)
!inout:
- real(kind_lake),intent(inout) :: t_grnd(1) ! ground temperature (Kelvin)
+ real(kind_lake),intent(inout) :: t_grnd(1) !< ground temperature (Kelvin)
!out:
- real(kind_lake),intent(out):: ustar_out(1) ! friction velocity [m/s]
- real(kind_lake),intent(out):: qflx_prec_grnd(1) ! water onto ground including canopy runoff [kg/(m2 s)]
- real(kind_lake),intent(out):: qflx_evap_soi(1) ! soil evaporation (mm H2O/s) (+ = to atm)
- real(kind_lake),intent(out):: qflx_evap_tot(1) ! qflx_evap_soi + qflx_evap_veg + qflx_tran_veg
- real(kind_lake),intent(out):: eflx_sh_grnd(1) ! sensible heat flux from ground (W/m**2) [+ to atm]
- real(kind_lake),intent(out):: eflx_lwrad_out(1) ! emitted infrared (longwave) radiation (W/m**2)
- real(kind_lake),intent(out):: eflx_lwrad_net(1) ! net infrared (longwave) rad (W/m**2) [+ = to atm]
- real(kind_lake),intent(out):: eflx_soil_grnd(1) ! soil heat flux (W/m**2) [+ = into soil]
- real(kind_lake),intent(out):: eflx_sh_tot(1) ! total sensible heat flux (W/m**2) [+ to atm]
- real(kind_lake),intent(out):: eflx_lh_tot(1) ! total latent heat flux (W/m8*2) [+ to atm]
- real(kind_lake),intent(out):: eflx_lh_grnd(1) ! ground evaporation heat flux (W/m**2) [+ to atm]
- real(kind_lake),intent(out):: t_veg(1) ! vegetation temperature (Kelvin)
- real(kind_lake),intent(out):: t_ref2m(1) ! 2 m height surface air temperature (Kelvin)
- real(kind_lake),intent(out):: q_ref2m(1) ! 2 m height surface specific humidity (kg/kg)
- real(kind_lake),intent(out):: taux(1) ! wind (shear) stress: e-w (kg/m/s**2)
- real(kind_lake),intent(out):: tauy(1) ! wind (shear) stress: n-s (kg/m/s**2)
- real(kind_lake),intent(out):: ram1(1) ! aerodynamical resistance (s/m)
- real(kind_lake),intent(out):: ws(1) ! surface friction velocity (m/s)
- real(kind_lake),intent(out):: ks(1) ! coefficient passed to ShalLakeTemperature
- ! for calculation of decay of eddy diffusivity with depth
- real(kind_lake),intent(out):: eflx_gnet(1) !net heat flux into ground (W/m**2)
- ! Change the type variable to pass back to WRF.
- real(kind_lake),intent(out):: z0mg(1) ! roughness length over ground, momentum (m(
+ real(kind_lake),intent(out):: ustar_out(1) !< friction velocity [m/s]
+ real(kind_lake),intent(out):: qflx_prec_grnd(1) !< water onto ground including canopy runoff [kg/(m2 s)]
+ real(kind_lake),intent(out):: qflx_evap_soi(1) !< soil evaporation (mm H2O/s) (+ = to atm)
+ real(kind_lake),intent(out):: qflx_evap_tot(1) !< qflx_evap_soi + qflx_evap_veg + qflx_tran_veg
+ real(kind_lake),intent(out):: eflx_sh_grnd(1) !< sensible heat flux from ground (W/m**2) [+ to atm]
+ real(kind_lake),intent(out):: eflx_lwrad_out(1) !< emitted infrared (longwave) radiation (W/m**2)
+ real(kind_lake),intent(out):: eflx_lwrad_net(1) !< net infrared (longwave) rad (W/m**2) [+ = to atm]
+ real(kind_lake),intent(out):: eflx_soil_grnd(1) !< soil heat flux (W/m**2) [+ = into soil]
+ real(kind_lake),intent(out):: eflx_sh_tot(1) !< total sensible heat flux (W/m**2) [+ to atm]
+ real(kind_lake),intent(out):: eflx_lh_tot(1) !< total latent heat flux (W/m8*2) [+ to atm]
+ real(kind_lake),intent(out):: eflx_lh_grnd(1) !< ground evaporation heat flux (W/m**2) [+ to atm]
+ real(kind_lake),intent(out):: t_veg(1) !< vegetation temperature (Kelvin)
+ real(kind_lake),intent(out):: t_ref2m(1) !< 2 m height surface air temperature (Kelvin)
+ real(kind_lake),intent(out):: q_ref2m(1) !< 2 m height surface specific humidity (kg/kg)
+ real(kind_lake),intent(out):: taux(1) !< wind (shear) stress: e-w (kg/m/s**2)
+ real(kind_lake),intent(out):: tauy(1) !< wind (shear) stress: n-s (kg/m/s**2)
+ real(kind_lake),intent(out):: ram1(1) !< aerodynamical resistance (s/m)
+ real(kind_lake),intent(out):: ws(1) !< surface friction velocity (m/s)
+ real(kind_lake),intent(out):: ks(1) !< coefficient passed to ShalLakeTemperature
+ !! for calculation of decay of eddy diffusivity with depth
+ real(kind_lake),intent(out):: eflx_gnet(1) !< net heat flux into ground (W/m**2)
+ !! Change the type variable to pass back to WRF.
+ real(kind_lake),intent(out):: z0mg(1) !< roughness length over ground, momentum (m(
@@ -1486,7 +1508,7 @@ SUBROUTINE ShalLakeFluxes(forc_t,forc_pbot,forc_psrf,forc_hgt,forc_hgt_q,
qflx_evap_tot(p) = qflx_evap_soi(p)
eflx_lh_tot(p) = htvp(c)*qflx_evap_soi(p)
eflx_lh_grnd(p) = htvp(c)*qflx_evap_soi(p)
- if(LAKEDEBUG) then
+ if(debug_print) then
1604 format('CLM_Lake ShalLakeFluxes: c=',I0,' sensible heat = ',F12.4,' latent heat =',F12.4, &
' ground temp = ', F12.4, ' h2osno = ', F12.4, ' at xlat_d=',F10.3,' xlon_d=',F10.3)
print 1604, c, eflx_sh_tot(p), eflx_lh_tot(p), t_grnd(c), h2osno(c),xlat_d,xlon_d
@@ -1564,24 +1586,24 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & !
t_lake,t_soisno,h2osoi_liq, &
h2osoi_ice,savedtke1, &
watsat, tksatu, tkmg, tkdry, csol, dtime, &
- frac_iceold,qflx_snomelt,imelt,errmsg,errflg)
+ frac_iceold,qflx_snomelt,imelt,errmsg,errflg,xlat_d,xlon_d)
!=======================================================================================================
- ! !DESCRIPTION:
- ! Calculates temperatures in the 20-25 layer column of (possible) snow,
- ! lake water, and soil beneath lake.
- ! Snow and soil temperatures are determined as in SoilTemperature, except
- ! for appropriate boundary conditions at the top of the snow (the flux is fixed
- ! to be the ground heat flux calculated in ShalLakeFluxes), the bottom of the snow
- ! (adjacent to top lake layer), and the top of the soil (adjacent to the bottom
- ! lake layer). Also, the soil is assumed to be always fully saturated (ShalLakeHydrology
- ! will have to insure this). The whole column is solved simultaneously as one tridiagonal matrix.
- ! Lake temperatures are determined from the Hostetler model as before, except now:
- ! i) Lake water layers can freeze by any fraction and release latent heat; thermal
- ! and mechanical properties are adjusted for ice fraction.
- ! ii) Convective mixing (though not eddy diffusion) still occurs for frozen lakes.
- ! iii) No sunlight is absorbed in the lake if there are snow layers.
- ! iv) Light is allowed to reach the top soil layer (where it is assumed to be completely absorbed).
- ! v) Lakes have variable depth, set ultimately in surface data set but now in initShalLakeMod.
+ ! DESCRIPTION:
+ !< Calculates temperatures in the 20-25 layer column of (possible) snow,
+ !! lake water, and soil beneath lake.
+ !! Snow and soil temperatures are determined as in SoilTemperature, except
+ !! for appropriate boundary conditions at the top of the snow (the flux is fixed
+ !! to be the ground heat flux calculated in ShalLakeFluxes), the bottom of the snow
+ !! (adjacent to top lake layer), and the top of the soil (adjacent to the bottom
+ !! lake layer). Also, the soil is assumed to be always fully saturated (ShalLakeHydrology
+ !! will have to insure this). The whole column is solved simultaneously as one tridiagonal matrix.
+ !! Lake temperatures are determined from the Hostetler model as before, except now:
+ !!\n i) Lake water layers can freeze by any fraction and release latent heat; thermal
+ !! and mechanical properties are adjusted for ice fraction.
+ !!\n ii) Convective mixing (though not eddy diffusion) still occurs for frozen lakes.
+ !!\n iii) No sunlight is absorbed in the lake if there are snow layers.
+ !!\n iv) Light is allowed to reach the top soil layer (where it is assumed to be completely absorbed).
+ !!\n v) Lakes have variable depth, set ultimately in surface data set but now in initShalLakeMod.
!
! Eddy + molecular diffusion:
! d ts d d ts 1 ds
@@ -1652,49 +1674,51 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & !
implicit none
!in:
- integer, intent(inout) :: errflg
- real(kind_lake), intent(in) :: watsat(1,nlevsoil) ! volumetric soil water at saturation (porosity)
- real(kind_lake), intent(in) :: tksatu(1,nlevsoil) ! thermal conductivity, saturated soil [W/m-K]
- real(kind_lake), intent(in) :: tkmg(1,nlevsoil) ! thermal conductivity, soil minerals [W/m-K]
- real(kind_lake), intent(in) :: tkdry(1,nlevsoil) ! thermal conductivity, dry soil (W/m/Kelvin)
- real(kind_lake), intent(in) :: csol(1,nlevsoil) ! heat capacity, soil solids (J/m**3/Kelvin)
- character(*), intent(inout) :: errmsg
- real(kind_lake), intent(in) :: t_grnd(1) ! ground temperature (Kelvin)
- real(kind_lake), intent(inout) :: h2osno(1) ! snow water (mm H2O)
- real(kind_lake), intent(in) :: sabg(1) ! solar radiation absorbed by ground (W/m**2)
- real(kind_lake), intent(in) :: dz(1,-nlevsnow + 1:nlevsoil) ! layer thickness for snow & soil (m)
- real(kind_lake), intent(in) :: dz_lake(1,nlevlake) ! layer thickness for lake (m)
- real(kind_lake), intent(in) :: z(1,-nlevsnow+1:nlevsoil) ! layer depth for snow & soil (m)
- real(kind_lake), intent(in) :: zi(1,-nlevsnow+0:nlevsoil) ! interface level below a "z" level (m)
- ! the other z and dz variables
- real(kind_lake), intent(in) :: z_lake(1,nlevlake) ! layer depth for lake (m)
- real(kind_lake), intent(in) :: ws(1) ! surface friction velocity (m/s)
- real(kind_lake), intent(in) :: ks(1) ! coefficient passed to ShalLakeTemperature
- ! for calculation of decay of eddy diffusivity with depth
- integer , intent(in) :: snl(1) ! negative of number of snow layers
- real(kind_lake), intent(inout) :: eflx_gnet(1) ! net heat flux into ground (W/m**2) at the surface interface
- real(kind_lake), intent(in) :: lakedepth(1) ! column lake depth (m)
+ real(kind_lake), intent(in) :: xlat_d !< latitude (degrees)
+ real(kind_lake), intent(in) :: xlon_d !< longitude (degrees)
+ integer, intent(inout) :: errflg !<
+ real(kind_lake), intent(in) :: watsat(1,nlevsoil) !< volumetric soil water at saturation (porosity)
+ real(kind_lake), intent(in) :: tksatu(1,nlevsoil) !< thermal conductivity, saturated soil [W/m-K]
+ real(kind_lake), intent(in) :: tkmg(1,nlevsoil) !< thermal conductivity, soil minerals [W/m-K]
+ real(kind_lake), intent(in) :: tkdry(1,nlevsoil) !< thermal conductivity, dry soil (W/m/Kelvin)
+ real(kind_lake), intent(in) :: csol(1,nlevsoil) !< heat capacity, soil solids (J/m**3/Kelvin)
+ character(*), intent(inout) :: errmsg !<
+ real(kind_lake), intent(in) :: t_grnd(1) !< ground temperature (Kelvin)
+ real(kind_lake), intent(inout) :: h2osno(1) !< snow water (mm H2O)
+ real(kind_lake), intent(in) :: sabg(1) !< solar radiation absorbed by ground (W/m**2)
+ real(kind_lake), intent(in) :: dz(1,-nlevsnow + 1:nlevsoil) !< layer thickness for snow & soil (m)
+ real(kind_lake), intent(in) :: dz_lake(1,nlevlake) !< layer thickness for lake (m)
+ real(kind_lake), intent(in) :: z(1,-nlevsnow+1:nlevsoil) !< layer depth for snow & soil (m)
+ real(kind_lake), intent(in) :: zi(1,-nlevsnow+0:nlevsoil) !< interface level below a "z" level (m)
+ !! the other z and dz variables
+ real(kind_lake), intent(in) :: z_lake(1,nlevlake) !< layer depth for lake (m)
+ real(kind_lake), intent(in) :: ws(1) !< surface friction velocity (m/s)
+ real(kind_lake), intent(in) :: ks(1) !< coefficient passed to ShalLakeTemperature
+ !! for calculation of decay of eddy diffusivity with depth
+ integer , intent(in) :: snl(1) !< negative of number of snow layers
+ real(kind_lake), intent(inout) :: eflx_gnet(1) !< net heat flux into ground (W/m**2) at the surface interface
+ real(kind_lake), intent(in) :: lakedepth(1) !< column lake depth (m)
! real(kind_lake), intent(in) :: watsat(1,nlevsoil) ! volumetric soil water at saturation (porosity)
- real(kind_lake), intent(inout) :: snowdp(1) !snow height (m)
- real(kind_lake), intent(in) :: dtime !timestep
+ real(kind_lake), intent(inout) :: snowdp(1) !< snow height (m)
+ real(kind_lake), intent(in) :: dtime !< timestep
!out:
- real(kind_lake), intent(out) :: eflx_sh_grnd(1) ! sensible heat flux from ground (W/m**2) [+ to atm]
- real(kind_lake), intent(out) :: eflx_sh_tot(1) ! total sensible heat flux (W/m**2) [+ to atm]
- real(kind_lake), intent(out) :: eflx_soil_grnd(1) ! heat flux into snow / lake (W/m**2) [+ = into soil]
- ! Here this includes the whole lake radiation absorbed.
- !real(kind_lake), intent(out) :: qmelt(1) ! snow melt [mm/s] [temporary]
+ real(kind_lake), intent(out) :: eflx_sh_grnd(1) !< sensible heat flux from ground (W/m**2) [+ to atm]
+ real(kind_lake), intent(out) :: eflx_sh_tot(1) !< total sensible heat flux (W/m**2) [+ to atm]
+ real(kind_lake), intent(out) :: eflx_soil_grnd(1) !< heat flux into snow / lake (W/m**2) [+ = into soil]
+ !! Here this includes the whole lake radiation absorbed.
+ !real(kind_lake), intent(out) :: qmelt(1) !< snow melt [mm/s] [temporary]
- real(kind_lake), intent(inout) :: t_lake(1,nlevlake) ! lake temperature (Kelvin)
- real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) ! soil (or snow) temperature (Kelvin)
- real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) ! liquid water (kg/m2) [for snow & soil layers]
- real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) ! ice lens (kg/m2) [for snow & soil layers]
- real(kind_lake), intent(inout) :: lake_icefrac(1,nlevlake) ! mass fraction of lake layer that is frozen
- real(kind_lake), intent(out) :: savedtke1(1) ! top level thermal conductivity (W/mK)
- real(kind_lake), intent(out) :: frac_iceold(1,-nlevsnow+1:nlevsoil) ! fraction of ice relative to the tot water
- real(kind_lake), intent(out) :: qflx_snomelt(1) !snow melt (mm H2O /s)
- integer, intent(out) :: imelt(1,-nlevsnow+1:nlevsoil) !flag for melting (=1), freezing (=2), Not=0 (new)
+ real(kind_lake), intent(inout) :: t_lake(1,nlevlake) !< lake temperature (Kelvin)
+ real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil (or snow) temperature (Kelvin)
+ real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2) [for snow & soil layers]
+ real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2) [for snow & soil layers]
+ real(kind_lake), intent(inout) :: lake_icefrac(1,nlevlake) !< mass fraction of lake layer that is frozen
+ real(kind_lake), intent(out) :: savedtke1(1) !< top level thermal conductivity (W/mK)
+ real(kind_lake), intent(out) :: frac_iceold(1,-nlevsnow+1:nlevsoil) !< fraction of ice relative to the tot water
+ real(kind_lake), intent(out) :: qflx_snomelt(1) !< snow melt (mm H2O /s)
+ integer, intent(out) :: imelt(1,-nlevsnow+1:nlevsoil) !< flag for melting (=1), freezing (=2), Not=0 (new)
! OTHER LOCAL VARIABLES:
@@ -2015,6 +2039,15 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & !
+ cfus*dz_lake(c,j)*(1._kind_lake-lake_icefrac(c,j)) !&
! + (cwat-cice_eff)*lake_icefrac(c)*tfrz*dz_lake(c,j) !enthalpy reconciliation term
t_lake_bef(c,j) = t_lake(c,j)
+ if(debug_print) then
+ if (abs(xlat_d-52.1152).lt.0.1 .and. &
+ abs(xlon_d-260.405).lt.0.1)then
+ print *,' ocvts(c) at xlat_d,xlon_d',xlat_d,xlon_d
+ print *,'j,dz_lake(c,j) ', j,dz_lake(c,j)
+ print*,'cv_lake(c,j),lake_icefrac(c,j),t_lake(c,j),cfus,ocvts(c)', &
+ cv_lake(c,j),lake_icefrac(c,j),t_lake(c,j),cfus,ocvts(c)
+ endif
+ endif
end do
end do
@@ -2030,6 +2063,15 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & !
ocvts(c) = ocvts(c) + cv(c,j)*(t_soisno(c,j)-tfrz) &
+ hfus*h2osoi_liq(c,j) !&
! + (cpliq-cpice)*h2osoi_ice(c,j)*tfrz !enthalpy reconciliation term
+ if(debug_print) then
+ if (abs(xlat_d-52.1152).lt.0.1 .and. &
+ abs(xlon_d-260.405).lt.0.1)then
+ print *,' ocvts(c) at xlat_d,xlon_d',xlat_d,xlon_d
+ print *,' j,jtop(c)',j,jtop(c),'h2osoi_liq(c,j) ',h2osoi_liq(c,j),'h2osoi_ice(c,j)',h2osoi_ice(c,j)
+ print *,' cv(c,j),t_soisno(c,j),hfus,ocvts(c)',c,j,cv(c,j),t_soisno(c,j),hfus,ocvts(c)
+ print *,' h2osno(c)',h2osno(c)
+ endif
+ endif
if (j == 1 .and. h2osno(c) > 0._kind_lake .and. j == jtop(c)) then
ocvts(c) = ocvts(c) - h2osno(c)*hfus
end if
@@ -2373,9 +2415,9 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & !
c = filter_shlakec(fc)
if (rhow(c,j) > rhow(c,j+1) .or. &
(lake_icefrac(c,j) < 1._kind_lake .and. lake_icefrac(c,j+1) > 0._kind_lake) ) then
- if(LAKEDEBUG) then
+ if(debug_print) then
if (i==1) then
- print *, 'Convective Mixing in column ', c, '.'
+ print *, 'Convective Ice Mixing in column ', c, 'lake_icefrac(c,j) ',lake_icefrac(c,j),lake_icefrac(c,j+1)
endif
endif
qav(c) = qav(c) + dz_lake(c,i)*(t_lake(c,i)-tfrz) * &
@@ -2447,6 +2489,8 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & !
rhow(c,i) = (1._kind_lake - lake_icefrac(c,i)) * &
1000._kind_lake*( 1.0_kind_lake - 1.9549e-05_kind_lake*(abs(t_lake(c,i)-277._kind_lake))**1.68_kind_lake ) &
+ lake_icefrac(c,i)*denice
+ if (debug_print .and. lake_icefrac(c,j) > 0.)print *,'rhow(c,i),lake_icefrac(c,i),t_lake(c,i)', &
+ i,rhow(c,i),lake_icefrac(c,i),t_lake(c,i),denice
end if
end do
end do
@@ -2462,7 +2506,7 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & !
c = filter_shlakec(fc)
cv_lake(c,j) = dz_lake(c,j) * (cwat*(1._kind_lake-lake_icefrac(c,j)) + cice_eff*lake_icefrac(c,j))
- if (LAKEDEBUG) then
+ if (debug_print .and. lake_icefrac(c,j) > 0.) then
print *,'Lake Ice Fraction, c, level:', c, j, lake_icefrac(c,j)
endif
end do
@@ -2485,6 +2529,15 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & !
+ cfus*dz_lake(c,j)*(1._kind_lake-lake_icefrac(c,j)) !&
! + (cwat-cice_eff)*lake_icefrac(c)*tfrz*dz_lake(c,j) !enthalpy reconciliation term
fin(c) = fin(c) + phi(c,j)
+ if(debug_print) then
+ if (abs(xlat_d-52.1152).lt.0.1 .and. &
+ abs(xlon_d-260.405).lt.0.1)then
+ print *,' ncvts(c) at xlat_d,xlon_d',xlat_d,xlon_d
+ print *,' new cv_lake(c,j),t_lake(c,j),cfus,lake_icefrac(c,j),ncvts(c),fin(c)', &
+ j,cv_lake(c,j),t_lake(c,j),cfus,lake_icefrac(c,j),ncvts(c),fin(c)
+ print *,' new dz_lake(c,j),fin(c),phi(c,j)',c,dz_lake(c,j),fin(c),phi(c,j)
+ endif
+ endif
end do
end do
@@ -2499,6 +2552,15 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & !
ncvts(c) = ncvts(c) + cv(c,j)*(t_soisno(c,j)-tfrz) &
+ hfus*h2osoi_liq(c,j) !&
! + (cpliq-cpice)*h2osoi_ice(c,j)*tfrz !enthalpy reconciliation term
+ if(debug_print) then
+ if (abs(xlat_d-52.1152).lt.0.1 .and. &
+ abs(xlon_d-260.405).lt.0.1)then
+ print *,' ncvts(c) at xlat_d,xlon_d',xlat_d,xlon_d
+ print *,'new j,jtop(c)',j,jtop(c),'h2osoi_liq(c,j) ',h2osoi_liq(c,j),'h2osoi_ice(c,j)',h2osoi_ice(c,j)
+ print *,'new cv(c,j),t_soisno(c,j),hfus,ncvts(c)',c,j,cv(c,j),t_soisno(c,j),hfus,ncvts(c)
+ print *,'new h2osno(c)',h2osno(c)
+ endif
+ endif
if (j == 1 .and. h2osno(c) > 0._kind_lake .and. j == jtop(c)) then
ncvts(c) = ncvts(c) - h2osno(c)*hfus
end if
@@ -2514,21 +2576,46 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & !
p = filter_shlakep(fp)
c = pcolumn(p)
errsoi(c) = (ncvts(c)-ocvts(c)) / dtime - fin(c)
- if( (LAKEDEBUG .and. abs(errsoi(c)) < 1._kind_lake) ) then
-! .or. (.not.LAKEDEBUG .and. abs(errsoi(c)) < 10._kind_lake)) then
+ if(debug_print) then
+ if (abs(xlat_d-52.1152).lt.0.1 .and. &
+ abs(xlon_d-260.405).lt.0.1)then
+ print *,'xlat_d,xlon_d',xlat_d,xlon_d
+ print *,'errsoi(c),fin(c),ncvts(c),ocvts(c),dtime,lake_icefrac(c,:),h2osno(c)', &
+ errsoi(c),fin(c),ncvts(c),ocvts(c),dtime,lake_icefrac(c,:),h2osno(c)
+ endif
+ endif
+ if( .not.LAKEDEBUG ) then
+ if (abs(errsoi(c)) < 10._kind_lake) then
+ eflx_sh_tot(p) = eflx_sh_tot(p) - errsoi(c)
+ eflx_sh_grnd(p) = eflx_sh_grnd(p) - errsoi(c)
+ eflx_soil_grnd(p) = eflx_soil_grnd(p) + errsoi(c)
+ eflx_gnet(p) = eflx_gnet(p) + errsoi(c)
+ if(debug_print) then
+ if (abs(errsoi(c)) > 1.e-1_kind_lake) then
+ print *,'errsoi incorporated at xlat_d,xlon_d',xlat_d,xlon_d
+ print *,'errsoi incorporated into sensible heat in ShalLakeTemperature: c, (W/m^2):', c, errsoi(c)
+ end if
+ endif
+ errsoi(c) = 0._kind_lake
+ endif
+ elseif ( LAKEDEBUG) then
+ if (abs(errsoi(c)) < 1._kind_lake) then
eflx_sh_tot(p) = eflx_sh_tot(p) - errsoi(c)
eflx_sh_grnd(p) = eflx_sh_grnd(p) - errsoi(c)
eflx_soil_grnd(p) = eflx_soil_grnd(p) + errsoi(c)
eflx_gnet(p) = eflx_gnet(p) + errsoi(c)
- ! if (abs(errsoi(c)) > 1.e-3_kind_lake) then
if (abs(errsoi(c)) > 1.e-1_kind_lake) then
print *,'errsoi incorporated into sensible heat in ShalLakeTemperature: c, (W/m^2):', c, errsoi(c)
end if
errsoi(c) = 0._kind_lake
- else if(LAKEDEBUG) then
+ else
print *,'Soil Energy Balance Error at column, ', c, 'G, fintotal, column E tendency = ', &
- eflx_gnet(p), fin(c), (ncvts(c)-ocvts(c)) / dtime
- end if
+ eflx_gnet(p), fin(c), (ncvts(c)-ocvts(c)) / dtime,'xlat_d,xlon_d',xlat_d,xlon_d
+ print *,'errsoi(c),ncvts(c),ocvts(c)',errsoi(c),ncvts(c),ocvts(c),'xlat_d,xlon_d',xlat_d,xlon_d
+ print *,'lake_icefrac(c,:),h2osno(c)', lake_icefrac(c,:),h2osno(c)
+ print *,'t_lake(c,:),t_soisno(c,:)',t_lake(c,:),t_soisno(c,:)
+ end if
+ end if ! LAKEDEBUG
end do
! This loop assumes only one point per column.
@@ -2540,52 +2627,48 @@ end subroutine ShalLakeTemperature
!
! ROUTINE: SoilThermProp_Lake
!
- ! !INTERFACE:
+ ! INTERFACE:
+ ! DESCRIPTION:
+ !> Calculation of thermal conductivities and heat capacities of
+ !! snow/soil layers
+ !!\n (1) The volumetric heat capacity is calculated as a linear combination
+ !! in terms of the volumetric fraction of the constituent phases.
+ !!
+ !!\n (2) The thermal conductivity of soil is computed from the algorithm of
+ !! Johansen (as reported by Farouki 1981), and of snow is from the
+ !! formulation used in SNTHERM (Jordan 1991).
+ !! The thermal conductivities at the interfaces between two neighboring
+ !! layers (j, j+1) are derived from an assumption that the flux across
+ !! the interface is equal to that from the node j to the interface and the
+ !! flux from the interface to the node j+1.
+ !!
+ !! For lakes, the proper soil layers (not snow) should always be saturated.
subroutine SoilThermProp_Lake (snl,dz,zi,z,t_soisno,h2osoi_liq,h2osoi_ice, &
watsat, tksatu, tkmg, tkdry, csol, tk, cv, tktopsoillay,errmsg,errflg)
- !
- ! !DESCRIPTION:
- ! Calculation of thermal conductivities and heat capacities of
- ! snow/soil layers
- ! (1) The volumetric heat capacity is calculated as a linear combination
- ! in terms of the volumetric fraction of the constituent phases.
- !
- ! (2) The thermal conductivity of soil is computed from the algorithm of
- ! Johansen (as reported by Farouki 1981), and of snow is from the
- ! formulation used in SNTHERM (Jordan 1991).
- ! The thermal conductivities at the interfaces between two neighboring
- ! layers (j, j+1) are derived from an assumption that the flux across
- ! the interface is equal to that from the node j to the interface and the
- ! flux from the interface to the node j+1.
- !
- ! For lakes, the proper soil layers (not snow) should always be saturated.
- !
- ! !USES:
-
implicit none
!in
- integer, intent(inout) :: errflg
- character(*), intent(inout) :: errmsg
- integer , intent(in) :: snl(1) ! number of snow layers
- ! real(kind_lake), intent(in) :: h2osno(1) ! snow water (mm H2O)
- real(kind_lake), intent(in) :: watsat(1,nlevsoil) ! volumetric soil water at saturation (porosity)
- real(kind_lake), intent(in) :: tksatu(1,nlevsoil) ! thermal conductivity, saturated soil [W/m-K]
- real(kind_lake), intent(in) :: tkmg(1,nlevsoil) ! thermal conductivity, soil minerals [W/m-K]
- real(kind_lake), intent(in) :: tkdry(1,nlevsoil) ! thermal conductivity, dry soil (W/m/Kelvin)
- real(kind_lake), intent(in) :: csol(1,nlevsoil) ! heat capacity, soil solids (J/m**3/Kelvin)
- real(kind_lake), intent(in) :: dz(1,-nlevsnow+1:nlevsoil) ! layer thickness (m)
- real(kind_lake), intent(in) :: zi(1,-nlevsnow+0:nlevsoil) ! interface level below a "z" level (m)
- real(kind_lake), intent(in) :: z(1,-nlevsnow+1:nlevsoil) ! layer depth (m)
- real(kind_lake), intent(in) :: t_soisno(1,-nlevsnow+1:nlevsoil) ! soil temperature (Kelvin)
- real(kind_lake), intent(in) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) ! liquid water (kg/m2)
- real(kind_lake), intent(in) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) ! ice lens (kg/m2)
+ integer, intent(inout) :: errflg
+ character(*), intent(inout) :: errmsg
+ integer , intent(in) :: snl(1) !< number of snow layers
+ ! real(kind_lake), intent(in) :: h2osno(1) !< snow water (mm H2O)
+ real(kind_lake), intent(in) :: watsat(1,nlevsoil) !< volumetric soil water at saturation (porosity)
+ real(kind_lake), intent(in) :: tksatu(1,nlevsoil) !< thermal conductivity, saturated soil [W/m-K]
+ real(kind_lake), intent(in) :: tkmg(1,nlevsoil) !< thermal conductivity, soil minerals [W/m-K]
+ real(kind_lake), intent(in) :: tkdry(1,nlevsoil) !< thermal conductivity, dry soil (W/m/Kelvin)
+ real(kind_lake), intent(in) :: csol(1,nlevsoil) !< heat capacity, soil solids (J/m**3/Kelvin)
+ real(kind_lake), intent(in) :: dz(1,-nlevsnow+1:nlevsoil) !< layer thickness (m)
+ real(kind_lake), intent(in) :: zi(1,-nlevsnow+0:nlevsoil) !< interface level below a "z" level (m)
+ real(kind_lake), intent(in) :: z(1,-nlevsnow+1:nlevsoil) !< layer depth (m)
+ real(kind_lake), intent(in) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil temperature (Kelvin)
+ real(kind_lake), intent(in) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2)
+ real(kind_lake), intent(in) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2)
!out
- real(kind_lake), intent(out) :: cv(lbc:ubc,-nlevsnow+1:nlevsoil) ! heat capacity [J/(m2 K)]
- real(kind_lake), intent(out) :: tk(lbc:ubc,-nlevsnow+1:nlevsoil) ! thermal conductivity [W/(m K)]
- real(kind_lake), intent(out) :: tktopsoillay(lbc:ubc) ! thermal conductivity [W/(m K)]
+ real(kind_lake), intent(out) :: cv(lbc:ubc,-nlevsnow+1:nlevsoil) !< heat capacity [J/(m2 K)]
+ real(kind_lake), intent(out) :: tk(lbc:ubc,-nlevsnow+1:nlevsoil) !< thermal conductivity [W/(m K)]
+ real(kind_lake), intent(out) :: tktopsoillay(lbc:ubc) !< thermal conductivity [W/(m K)]
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! !CALLED FROM:
! subroutine ShalLakeTemperature in this module.
@@ -2754,6 +2837,24 @@ end subroutine SoilThermProp_Lake
! ROUTINE: PhaseChange_Lake
!
! !INTERFACE:
+
+ ! DESCRIPTION:
+ !> Calculation of the phase change within snow, soil, & lake layers:
+ !!\n (1) Check the conditions for which the phase change may take place,
+ !! i.e., the layer temperature is greater than the freezing point
+ !! and the ice mass is not equal to zero (i.e. melting),
+ !! or the layer temperature is less than the freezing point
+ !! and the liquid water mass is greater than the allowable supercooled
+ !! (i.e. freezing).
+ !!\n (2) Assess the amount of phase change from the energy excess (or deficit)
+ !! after setting the layer temperature to freezing point, depending on
+ !! how much water or ice is available.
+ !!\n (3) Re-adjust the ice and liquid mass, and the layer temperature: either to
+ !! the freezing point if enough water or ice is available to fully compensate,
+ !! or to a remaining temperature.
+ !!
+ !! The specific heats are assumed constant. Potential cycling errors resulting from
+ !! this assumption will be trapped at the end of ShalLakeTemperature.
subroutine PhaseChange_Lake (snl,h2osno,dz,dz_lake, & !i
t_soisno,h2osoi_liq,h2osoi_ice, & !i&o
lake_icefrac,t_lake, snowdp, & !i&o
@@ -2761,28 +2862,12 @@ subroutine PhaseChange_Lake (snl,h2osno,dz,dz_lake, & !i
cv, cv_lake, & !i&o
lhabs) !o
!=============================================================================================
- ! !DESCRIPTION:
- ! Calculation of the phase change within snow, soil, & lake layers:
- ! (1) Check the conditions for which the phase change may take place,
- ! i.e., the layer temperature is great than the freezing point
- ! and the ice mass is not equal to zero (i.e. melting),
- ! or the layer temperature is less than the freezing point
- ! and the liquid water mass is greater than the allowable supercooled
- ! (i.e. freezing).
- ! (2) Assess the amount of phase change from the energy excess (or deficit)
- ! after setting the layer temperature to freezing point, depending on
- ! how much water or ice is available.
- ! (3) Re-adjust the ice and liquid mass, and the layer temperature: either to
- ! the freezing point if enough water or ice is available to fully compensate,
- ! or to a remaining temperature.
- ! The specific heats are assumed constant. Potential cycling errors resulting from
- ! this assumption will be trapped at the end of ShalLakeTemperature.
- ! !CALLED FROM:
+ !CALLED FROM:
! subroutine ShalLakeTemperature in this module
!
- ! !REVISION HISTORY:
- ! 04/2009 Zack Subin: Initial code
- ! June 2022 Sam Trahan: Modified for CCPP
+ !REVISION HISTORY:
+ ! - 04/2009 Zack Subin: Initial code
+ ! - June 2022 Sam Trahan: Modified for CCPP
!==============================================================================================
! !USES:
!
@@ -2790,29 +2875,29 @@ subroutine PhaseChange_Lake (snl,h2osno,dz,dz_lake, & !i
implicit none
!in:
- integer , intent(in) :: snl(1) !number of snow layers
- real(kind_lake), intent(inout) :: h2osno(1) !snow water (mm H2O)
- real(kind_lake), intent(in) :: dz(1,-nlevsnow+1:nlevsoil) !layer thickness (m)
- real(kind_lake), intent(in) :: dz_lake(1,nlevlake) !lake layer thickness (m)
+ integer , intent(in) :: snl(1) !< number of snow layers
+ real(kind_lake), intent(inout) :: h2osno(1) !< snow water (mm H2O)
+ real(kind_lake), intent(in) :: dz(1,-nlevsnow+1:nlevsoil) !< layer thickness (m)
+ real(kind_lake), intent(in) :: dz_lake(1,nlevlake) !< lake layer thickness (m)
! Needed in case snow height is less than critical value.
!inout:
- real(kind_lake), intent(inout) :: snowdp(1) !snow height (m)
- real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !soil temperature (Kelvin)
- real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !liquid water (kg/m2)
- real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !ice lens (kg/m2)
- real(kind_lake), intent(inout) :: lake_icefrac(1,nlevlake) ! mass fraction of lake layer that is frozen
- real(kind_lake), intent(inout) :: t_lake(1,nlevlake) ! lake temperature (Kelvin)
+ real(kind_lake), intent(inout) :: snowdp(1) !< snow height (m)
+ real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil temperature (Kelvin)
+ real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2)
+ real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2)
+ real(kind_lake), intent(inout) :: lake_icefrac(1,nlevlake) !< mass fraction of lake layer that is frozen
+ real(kind_lake), intent(inout) :: t_lake(1,nlevlake) !< lake temperature (Kelvin)
!out:
- real(kind_lake), intent(out) :: qflx_snomelt(1) !snow melt (mm H2O /s)
- real(kind_lake), intent(out) :: eflx_snomelt(1) !snow melt heat flux (W/m**2)
- integer, intent(out) :: imelt(1,-nlevsnow+1:nlevsoil) !flag for melting (=1), freezing (=2), Not=0 (new)
+ real(kind_lake), intent(out) :: qflx_snomelt(1) !< snow melt (mm H2O /s)
+ real(kind_lake), intent(out) :: eflx_snomelt(1) !< snow melt heat flux (W/m**2)
+ integer, intent(out) :: imelt(1,-nlevsnow+1:nlevsoil) !< flag for melting (=1), freezing (=2), Not=0 (new)
!What's the sign of this? Is it just output?
- real(kind_lake), intent(inout) :: cv(lbc:ubc,-nlevsnow+1:nlevsoil) ! heat capacity [J/(m2 K)]
- real(kind_lake), intent(inout) :: cv_lake (lbc:ubc,1:nlevlake) ! heat capacity [J/(m2 K)]
- real(kind_lake), intent(out):: lhabs(lbc:ubc) ! total per-column latent heat abs. (J/m^2)
+ real(kind_lake), intent(inout) :: cv(lbc:ubc,-nlevsnow+1:nlevsoil) !< heat capacity [J/(m2 K)]
+ real(kind_lake), intent(inout) :: cv_lake (lbc:ubc,1:nlevlake) !< heat capacity [J/(m2 K)]
+ real(kind_lake), intent(out):: lhabs(lbc:ubc) !< total per-column latent heat abs. (J/m^2)
! OTHER LOCAL VARIABLES:
@@ -2972,7 +3057,19 @@ subroutine PhaseChange_Lake (snl,h2osno,dz,dz_lake, & !i
end subroutine PhaseChange_Lake
-
+ ! DESCRIPTION:
+ !> Calculation of Shallow Lake Hydrology. Full hydrology of snow layers is
+ !! done. However, there is no infiltration, and the water budget is balanced with
+ !! qflx_qrgwl. Lake water mass is kept constant. The soil is simply maintained at
+ !! volumetric saturation if ice melting frees up pore space. Likewise, if the water
+ !! portion alone at some point exceeds pore capacity, it is reduced. This is consistent
+ !! with the possibility of initializing the soil layer with excess ice. The only
+ !! real error with that is that the thermal conductivity will ignore the excess ice
+ !! (and accompanying thickness change).
+ !!
+ !! If snow layers are present over an unfrozen lake, and the top layer of the lake
+ !! is capable of absorbing the latent heat without going below freezing,
+ !! the snow-water is runoff and the latent heat is subtracted from the lake.
subroutine ShalLakeHydrology(dz_lake,forc_rain,forc_snow, & !i
begwb,qflx_evap_tot,forc_t,do_capsnow, &
t_grnd,qflx_evap_soi, &
@@ -2991,19 +3088,6 @@ subroutine ShalLakeHydrology(dz_lake,forc_rain,forc_snow, &
dtime,errmsg,errflg)
!==================================================================================
- ! !DESCRIPTION:
- ! Calculation of Shallow Lake Hydrology. Full hydrology of snow layers is
- ! done. However, there is no infiltration, and the water budget is balanced with
- ! qflx_qrgwl. Lake water mass is kept constant. The soil is simply maintained at
- ! volumetric saturation if ice melting frees up pore space. Likewise, if the water
- ! portion alone at some point exceeds pore capacity, it is reduced. This is consistent
- ! with the possibility of initializing the soil layer with excess ice. The only
- ! real error with that is that the thermal conductivity will ignore the excess ice
- ! (and accompanying thickness change).
- !
- ! If snow layers are present over an unfrozen lake, and the top layer of the lake
- ! is capable of absorbing the latent heat without going below freezing,
- ! the snow-water is runoff and the latent heat is subtracted from the lake.
!
! WARNING: This subroutine assumes lake columns have one and only one pft.
!
@@ -3034,79 +3118,79 @@ subroutine ShalLakeHydrology(dz_lake,forc_rain,forc_snow, &
integer, intent(inout) :: errflg
character(*), intent(inout) :: errmsg
- real(kind_lake) :: watsat(1,nlevsoil) ! volumetric soil water at saturation (porosity)
- real(kind_lake) :: tksatu(1,nlevsoil) ! thermal conductivity, saturated soil [W/m-K]
- real(kind_lake) :: tkmg(1,nlevsoil) ! thermal conductivity, soil minerals [W/m-K]
- real(kind_lake) :: tkdry(1,nlevsoil) ! thermal conductivity, dry soil (W/m/Kelvin)
- real(kind_lake) :: csol(1,nlevsoil) ! heat capacity, soil solids (J/m**3/Kelvin)
-
- ! integer , intent(in) :: clandunit(1) ! column's landunit
- ! integer , intent(in) :: ityplun(1) ! landunit type
- real(kind_lake), intent(in) :: dtime ! timestep
- real(kind_lake), intent(in) :: dz_lake(1,nlevlake) ! layer thickness for lake (m)
- real(kind_lake), intent(in) :: forc_rain(1) ! rain rate [mm/s]
- real(kind_lake), intent(in) :: forc_snow(1) ! snow rate [mm/s]
- real(kind_lake), intent(in) :: qflx_evap_tot(1) ! qflx_evap_soi + qflx_evap_veg + qflx_tran_veg
- real(kind_lake), intent(in) :: forc_t(1) ! atmospheric temperature (Kelvin)
-
- !real(kind_lake), intent(in),optional :: flfall(1) ! fraction of liquid water within falling precipitation (unused)
-
- logical , intent(in) :: do_capsnow(1) ! true => do snow capping
- real(kind_lake), intent(in) :: t_grnd(1) ! ground temperature (Kelvin)
- real(kind_lake), intent(in) :: qflx_evap_soi(1) ! soil evaporation (mm H2O/s) (+ = to atm)
- real(kind_lake), intent(in) :: qflx_snomelt(1) !snow melt (mm H2O /s)
- integer, intent(in) :: imelt(1,-nlevsnow+1:nlevsoil) !flag for melting (=1), freezing (=2), Not=0
+ real(kind_lake) :: watsat(1,nlevsoil) !< volumetric soil water at saturation (porosity)
+ real(kind_lake) :: tksatu(1,nlevsoil) !< thermal conductivity, saturated soil [W/m-K]
+ real(kind_lake) :: tkmg(1,nlevsoil) !< thermal conductivity, soil minerals [W/m-K]
+ real(kind_lake) :: tkdry(1,nlevsoil) !< thermal conductivity, dry soil (W/m/Kelvin)
+ real(kind_lake) :: csol(1,nlevsoil) !< heat capacity, soil solids (J/m**3/Kelvin)
+
+ ! integer , intent(in) :: clandunit(1) !< column's landunit
+ ! integer , intent(in) :: ityplun(1) !< landunit type
+ real(kind_lake), intent(in) :: dtime !< timestep
+ real(kind_lake), intent(in) :: dz_lake(1,nlevlake) !< layer thickness for lake (m)
+ real(kind_lake), intent(in) :: forc_rain(1) !< rain rate [mm/s]
+ real(kind_lake), intent(in) :: forc_snow(1) !< snow rate [mm/s]
+ real(kind_lake), intent(in) :: qflx_evap_tot(1) !< qflx_evap_soi + qflx_evap_veg + qflx_tran_veg
+ real(kind_lake), intent(in) :: forc_t(1) !< atmospheric temperature (Kelvin)
+
+ !real(kind_lake), intent(in),optional :: flfall(1) !< fraction of liquid water within falling precipitation (unused)
+
+ logical , intent(in) :: do_capsnow(1) !< true => do snow capping
+ real(kind_lake), intent(in) :: t_grnd(1) !< ground temperature (Kelvin)
+ real(kind_lake), intent(in) :: qflx_evap_soi(1) !< soil evaporation (mm H2O/s) (+ = to atm)
+ real(kind_lake), intent(in) :: qflx_snomelt(1) !< snow melt (mm H2O /s)
+ integer, intent(in) :: imelt(1,-nlevsnow+1:nlevsoil) !< flag for melting (=1), freezing (=2), Not=0
!inout:
- real(kind_lake), intent(inout) :: begwb(1) ! water mass begining of the time step
+ real(kind_lake), intent(inout) :: begwb(1) !< water mass begining of the time step
! inout:
- real(kind_lake), intent(inout) :: z(1,-nlevsnow+1:nlevsoil) ! layer depth (m)
- real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) ! layer thickness depth (m)
- real(kind_lake), intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) ! interface depth (m)
- integer , intent(inout) :: snl(1) ! number of snow layers
- real(kind_lake), intent(inout) :: h2osno(1) ! snow water (mm H2O)
- real(kind_lake), intent(inout) :: snowdp(1) ! snow height (m)
- real(kind_lake), intent(inout) :: lake_icefrac(1,nlevlake) ! mass fraction of lake layer that is frozen
- real(kind_lake), intent(inout) :: t_lake(1,nlevlake) ! lake temperature (Kelvin)
-
- real(kind_lake), intent(inout) :: frac_iceold(1,-nlevsnow+1:nlevsoil) ! fraction of ice relative to the tot water
+ real(kind_lake), intent(inout) :: z(1,-nlevsnow+1:nlevsoil) !< layer depth (m)
+ real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !< layer thickness depth (m)
+ real(kind_lake), intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) !< interface depth (m)
+ integer , intent(inout) :: snl(1) !< number of snow layers
+ real(kind_lake), intent(inout) :: h2osno(1) !< snow water (mm H2O)
+ real(kind_lake), intent(inout) :: snowdp(1) !< snow height (m)
+ real(kind_lake), intent(inout) :: lake_icefrac(1,nlevlake) !< mass fraction of lake layer that is frozen
+ real(kind_lake), intent(inout) :: t_lake(1,nlevlake) !< lake temperature (Kelvin)
+
+ real(kind_lake), intent(inout) :: frac_iceold(1,-nlevsnow+1:nlevsoil) !< fraction of ice relative to the tot water
! out:
- real(kind_lake), intent(out) :: endwb(1) ! water mass end of the time step
- real(kind_lake), intent(out) :: snowage(1) ! non dimensional snow age [-]
- real(kind_lake), intent(out) :: snowice(1) ! average snow ice lens
- real(kind_lake), intent(out) :: snowliq(1) ! average snow liquid water
- real(kind_lake), intent(out) :: t_snow(1) ! vertically averaged snow temperature
- real(kind_lake), intent(out) :: t_soisno(1,-nlevsnow+1:nlevsoil) ! snow temperature (Kelvin)
- real(kind_lake), intent(out) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) ! ice lens (kg/m2)
- real(kind_lake), intent(out) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) ! liquid water (kg/m2)
- real(kind_lake), intent(out) :: h2osoi_vol(1,-nlevsnow+1:nlevsoil) ! volumetric soil water (0<=h2osoi_vol<=watsat)[m3/m3]
- real(kind_lake), intent(out) :: qflx_drain(1) ! sub-surface runoff (mm H2O /s)
- real(kind_lake), intent(out) :: qflx_surf(1) ! surface runoff (mm H2O /s)
- real(kind_lake), intent(out) :: qflx_infl(1) ! infiltration (mm H2O /s)
- real(kind_lake), intent(out) :: qflx_qrgwl(1) ! qflx_surf at glaciers, wetlands, lakes
- real(kind_lake), intent(out) :: qcharge(1) ! aquifer recharge rate (mm/s)
- real(kind_lake), intent(out) :: qflx_prec_grnd(1) ! water onto ground including canopy runoff [kg/(m2 s)]
- real(kind_lake), intent(out) :: qflx_snowcap(1) ! excess precipitation due to snow capping (mm H2O /s) [+]
- real(kind_lake), intent(out) :: qflx_snowcap_col(1) ! excess precipitation due to snow capping (mm H2O /s) [+]
- real(kind_lake), intent(out) :: qflx_snow_grnd_pft(1) ! snow on ground after interception (mm H2O/s) [+]
- real(kind_lake), intent(out) :: qflx_snow_grnd_col(1) ! snow on ground after interception (mm H2O/s) [+]
- real(kind_lake), intent(out) :: qflx_rain_grnd(1) ! rain on ground after interception (mm H2O/s) [+]
- real(kind_lake), intent(out) :: qflx_evap_tot_col(1) !pft quantity averaged to the column (assuming one pft)
- real(kind_lake) ,intent(out) :: soilalpha(1) !factor that reduces ground saturated specific humidity (-)
- real(kind_lake), intent(out) :: zwt(1) !water table depth
- real(kind_lake), intent(out) :: fcov(1) !fractional area with water table at surface
- real(kind_lake), intent(out) :: rootr_column(1,1:nlevsoil) !effective fraction of roots in each soil layer
- real(kind_lake), intent(out) :: qflx_evap_grnd(1) ! ground surface evaporation rate (mm H2O/s) [+]
- real(kind_lake), intent(out) :: qflx_sub_snow(1) ! sublimation rate from snow pack (mm H2O /s) [+]
- real(kind_lake), intent(out) :: qflx_dew_snow(1) ! surface dew added to snow pack (mm H2O /s) [+]
- real(kind_lake), intent(out) :: qflx_dew_grnd(1) ! ground surface dew formation (mm H2O /s) [+]
- real(kind_lake), intent(out) :: qflx_rain_grnd_col(1) !rain on ground after interception (mm H2O/s) [+]
+ real(kind_lake), intent(out) :: endwb(1) !< water mass end of the time step
+ real(kind_lake), intent(out) :: snowage(1) !< non dimensional snow age [-]
+ real(kind_lake), intent(out) :: snowice(1) !< average snow ice lens
+ real(kind_lake), intent(out) :: snowliq(1) !< average snow liquid water
+ real(kind_lake), intent(out) :: t_snow(1) !< vertically averaged snow temperature
+ real(kind_lake), intent(out) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< snow temperature (Kelvin)
+ real(kind_lake), intent(out) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2)
+ real(kind_lake), intent(out) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2)
+ real(kind_lake), intent(out) :: h2osoi_vol(1,-nlevsnow+1:nlevsoil) !< volumetric soil water (0<=h2osoi_vol<=watsat)[m3/m3]
+ real(kind_lake), intent(out) :: qflx_drain(1) !< sub-surface runoff (mm H2O /s)
+ real(kind_lake), intent(out) :: qflx_surf(1) !< surface runoff (mm H2O /s)
+ real(kind_lake), intent(out) :: qflx_infl(1) !< infiltration (mm H2O /s)
+ real(kind_lake), intent(out) :: qflx_qrgwl(1) !< qflx_surf at glaciers, wetlands, lakes
+ real(kind_lake), intent(out) :: qcharge(1) !< aquifer recharge rate (mm/s)
+ real(kind_lake), intent(out) :: qflx_prec_grnd(1) !< water onto ground including canopy runoff [kg/(m2 s)]
+ real(kind_lake), intent(out) :: qflx_snowcap(1) !< excess precipitation due to snow capping (mm H2O /s) [+]
+ real(kind_lake), intent(out) :: qflx_snowcap_col(1) !< excess precipitation due to snow capping (mm H2O /s) [+]
+ real(kind_lake), intent(out) :: qflx_snow_grnd_pft(1) !< snow on ground after interception (mm H2O/s) [+]
+ real(kind_lake), intent(out) :: qflx_snow_grnd_col(1) !< snow on ground after interception (mm H2O/s) [+]
+ real(kind_lake), intent(out) :: qflx_rain_grnd(1) !< rain on ground after interception (mm H2O/s) [+]
+ real(kind_lake), intent(out) :: qflx_evap_tot_col(1) !< pft quantity averaged to the column (assuming one pft)
+ real(kind_lake) ,intent(out) :: soilalpha(1) !< factor that reduces ground saturated specific humidity (-)
+ real(kind_lake), intent(out) :: zwt(1) !< water table depth
+ real(kind_lake), intent(out) :: fcov(1) !< fractional area with water table at surface
+ real(kind_lake), intent(out) :: rootr_column(1,1:nlevsoil) !< effective fraction of roots in each soil layer
+ real(kind_lake), intent(out) :: qflx_evap_grnd(1) !< ground surface evaporation rate (mm H2O/s) [+]
+ real(kind_lake), intent(out) :: qflx_sub_snow(1) !< sublimation rate from snow pack (mm H2O /s) [+]
+ real(kind_lake), intent(out) :: qflx_dew_snow(1) !< surface dew added to snow pack (mm H2O /s) [+]
+ real(kind_lake), intent(out) :: qflx_dew_grnd(1) !< ground surface dew formation (mm H2O /s) [+]
+ real(kind_lake), intent(out) :: qflx_rain_grnd_col(1) !< rain on ground after interception (mm H2O/s) [+]
! Block of biogeochem currently not used.
real(kind_lake), pointer :: sucsat(:,:) ! minimum soil suction (mm)
@@ -3483,7 +3567,7 @@ subroutine ShalLakeHydrology(dz_lake,forc_rain,forc_snow, &
h2osno(c) = 0._kind_lake
snl(c) = 0
! The rest of the bookkeeping for the removed snow will be done below.
- if (LAKEDEBUG) then
+ if (debug_print) then
print *,'Snow layers removed above unfrozen lake for column, snowice:', &
c, sumsnowice(c)
endif
@@ -3633,7 +3717,7 @@ subroutine ShalLakeHydrology(dz_lake,forc_rain,forc_snow, &
! Insure water balance using qflx_qrgwl
qflx_qrgwl(c) = forc_rain(g) + forc_snow(g) - qflx_evap_tot(p) - (endwb(c)-begwb(c))/dtime
- if (LAKEDEBUG) then
+ if (debug_print) then
print *,'c, rain, snow, evap, endwb, begwb, qflx_qrgwl:', &
c, forc_rain(g), forc_snow(g), qflx_evap_tot(p), endwb(c), begwb(c), qflx_qrgwl(c)
endif
@@ -3644,25 +3728,25 @@ subroutine ShalLakeHydrology(dz_lake,forc_rain,forc_snow, &
end subroutine ShalLakeHydrology
+! DESCRIPTION:
+!> Computes saturation mixing ratio and the change in saturation
+!! mixing ratio with respect to temperature.
subroutine QSat (T, p, es, esdT, qs, qsdT)
!
- ! !DESCRIPTION:
- ! Computes saturation mixing ratio and the change in saturation
- ! mixing ratio with respect to temperature.
! Reference: Polynomial approximations from:
! Piotr J. Flatau, et al.,1992: Polynomial fits to saturation
! vapor pressure. Journal of Applied Meteorology, 31, 1507-1513.
!
- ! !USES:
+ ! USES:
!
- ! !ARGUMENTS:
+ ! ARGUMENTS:
implicit none
- real(kind_lake), intent(in) :: T ! temperature (K)
- real(kind_lake), intent(in) :: p ! surface atmospheric pressure (pa)
- real(kind_lake), intent(out) :: es ! vapor pressure (pa)
- real(kind_lake), intent(out) :: esdT ! d(es)/d(T)
- real(kind_lake), intent(out) :: qs ! humidity (kg/kg)
- real(kind_lake), intent(out) :: qsdT ! d(qs)/d(T)
+ real(kind_lake), intent(in) :: T !< temperature (K)
+ real(kind_lake), intent(in) :: p !< surface atmospheric pressure (pa)
+ real(kind_lake), intent(out) :: es !< vapor pressure (pa)
+ real(kind_lake), intent(out) :: esdT !< d(es)/d(T)
+ real(kind_lake), intent(out) :: qs !< humidity (kg/kg)
+ real(kind_lake), intent(out) :: qsdT !< d(qs)/d(T)
!
! !CALLED FROM:
! subroutine Biogeophysics1 in module Biogeophysics1Mod
@@ -3762,21 +3846,21 @@ end subroutine QSat
subroutine Tridiagonal (lbc, ubc, lbj, ubj, jtop, numf, filter, &
a, b, c, r, u)
!
- ! !DESCRIPTION:
- ! Tridiagonal matrix solution
+ ! DESCRIPTION:
+ !< Tridiagonal matrix solution
!
- ! !ARGUMENTS:
+ ! ARGUMENTS:
implicit none
- integer , intent(in) :: lbc, ubc ! lbinning and ubing column indices
- integer , intent(in) :: lbj, ubj ! lbinning and ubing level indices
- integer , intent(in) :: jtop(lbc:ubc) ! top level for each column
- integer , intent(in) :: numf ! filter dimension
- integer , intent(in) :: filter(1:numf) ! filter
- real(kind_lake), intent(in) :: a(lbc:ubc, lbj:ubj) ! "a" left off diagonal of tridiagonal matrix
- real(kind_lake), intent(in) :: b(lbc:ubc, lbj:ubj) ! "b" diagonal column for tridiagonal matrix
- real(kind_lake), intent(in) :: c(lbc:ubc, lbj:ubj) ! "c" right off diagonal tridiagonal matrix
- real(kind_lake), intent(in) :: r(lbc:ubc, lbj:ubj) ! "r" forcing term of tridiagonal matrix
- real(kind_lake), intent(inout) :: u(lbc:ubc, lbj:ubj) ! solution
+ integer , intent(in) :: lbc, ubc !< lbinning and ubing column indices
+ integer , intent(in) :: lbj, ubj !< lbinning and ubing level indices
+ integer , intent(in) :: jtop(lbc:ubc) !< top level for each column
+ integer , intent(in) :: numf !< filter dimension
+ integer , intent(in) :: filter(1:numf) !< filter
+ real(kind_lake), intent(in) :: a(lbc:ubc, lbj:ubj) !< "a" left off diagonal of tridiagonal matrix
+ real(kind_lake), intent(in) :: b(lbc:ubc, lbj:ubj) !< "b" diagonal column for tridiagonal matrix
+ real(kind_lake), intent(in) :: c(lbc:ubc, lbj:ubj) !< "c" right off diagonal tridiagonal matrix
+ real(kind_lake), intent(in) :: r(lbc:ubc, lbj:ubj) !< "r" forcing term of tridiagonal matrix
+ real(kind_lake), intent(inout) :: u(lbc:ubc, lbj:ubj) !< solution
!
! !CALLED FROM:
! subroutine BiogeophysicsLake in module BiogeophysicsLakeMod
@@ -3841,6 +3925,17 @@ subroutine Tridiagonal (lbc, ubc, lbj, ubj, jtop, numf, filter, &
end subroutine Tridiagonal
+ ! DESCRIPTION:
+ !> Evaluate the change of snow mass and the snow water onto soil.
+ !! Water flow within snow is computed by an explicit and non-physical
+ !! based scheme, which permits a part of liquid water over the holding
+ !! capacity (a tentative value is used, i.e. equal to 0.033*porosity) to
+ !! percolate into the underlying layer. Except for cases where the
+ !! porosity of one of the two neighboring layers is less than 0.05, zero
+ !! flow is assumed. The water flow out of the bottom of the snow pack will
+ !! participate as the input of the soil water and runoff. This subroutine
+ !! uses a filter for columns containing snow which must be constructed prior
+ !! to being called.
subroutine SnowWater(lbc, ubc, num_snowc, filter_snowc, & !i
num_nosnowc, filter_nosnowc, & !i
snl,do_capsnow,qflx_snomelt,qflx_rain_grnd, & !i
@@ -3849,18 +3944,6 @@ subroutine SnowWater(lbc, ubc, num_snowc, filter_snowc, & !i
h2osoi_ice,h2osoi_liq, & !i&o
qflx_top_soil) !o
!===============================================================================
- ! !DESCRIPTION:
- ! Evaluate the change of snow mass and the snow water onto soil.
- ! Water flow within snow is computed by an explicit and non-physical
- ! based scheme, which permits a part of liquid water over the holding
- ! capacity (a tentative value is used, i.e. equal to 0.033*porosity) to
- ! percolate into the underlying layer. Except for cases where the
- ! porosity of one of the two neighboring layers is less than 0.05, zero
- ! flow is assumed. The water flow out of the bottom of the snow pack will
- ! participate as the input of the soil water and runoff. This subroutine
- ! uses a filter for columns containing snow which must be constructed prior
- ! to being called.
- !
! !REVISION HISTORY:
! 15 September 1999: Yongjiu Dai; Initial code
! 15 December 1999: Paul Houser and Jon Radakovich; F90 Revision
@@ -3873,32 +3956,32 @@ subroutine SnowWater(lbc, ubc, num_snowc, filter_snowc, & !i
implicit none
!in:
- integer, intent(in) :: lbc, ubc ! column bounds
- integer, intent(in) :: num_snowc ! number of snow points in column filter
- integer, intent(in) :: filter_snowc(ubc-lbc+1) ! column filter for snow points
- integer, intent(in) :: num_nosnowc ! number of non-snow points in column filter
- integer, intent(in) :: filter_nosnowc(ubc-lbc+1) ! column filter for non-snow points
-
- integer , intent(in) :: snl(1) !number of snow layers
- logical , intent(in) :: do_capsnow(1) !true => do snow capping
- real(kind_lake), intent(in) :: dtime !timestep
- real(kind_lake), intent(in) :: qflx_snomelt(1) !snow melt (mm H2O /s)
- real(kind_lake), intent(in) :: qflx_rain_grnd(1) !rain on ground after interception (mm H2O/s) [+]
- real(kind_lake), intent(in) :: qflx_sub_snow(1) !sublimation rate from snow pack (mm H2O /s) [+]
- real(kind_lake), intent(in) :: qflx_evap_grnd(1) !ground surface evaporation rate (mm H2O/s) [+]
- real(kind_lake), intent(in) :: qflx_dew_snow(1) !surface dew added to snow pack (mm H2O /s) [+]
- real(kind_lake), intent(in) :: qflx_dew_grnd(1) !ground surface dew formation (mm H2O /s) [+]
- real(kind_lake), intent(in) :: dz(1,-nlevsnow+1:nlevsoil) !layer depth (m)
+ integer, intent(in) :: lbc, ubc !< column bounds
+ integer, intent(in) :: num_snowc !< number of snow points in column filter
+ integer, intent(in) :: filter_snowc(ubc-lbc+1) !< column filter for snow points
+ integer, intent(in) :: num_nosnowc !< number of non-snow points in column filter
+ integer, intent(in) :: filter_nosnowc(ubc-lbc+1) !< column filter for non-snow points
+
+ integer , intent(in) :: snl(1) !< number of snow layers
+ logical , intent(in) :: do_capsnow(1) !< true => do snow capping
+ real(kind_lake), intent(in) :: dtime !< timestep
+ real(kind_lake), intent(in) :: qflx_snomelt(1) !< snow melt (mm H2O /s)
+ real(kind_lake), intent(in) :: qflx_rain_grnd(1) !< rain on ground after interception (mm H2O/s) [+]
+ real(kind_lake), intent(in) :: qflx_sub_snow(1) !< sublimation rate from snow pack (mm H2O /s) [+]
+ real(kind_lake), intent(in) :: qflx_evap_grnd(1) !< ground surface evaporation rate (mm H2O/s) [+]
+ real(kind_lake), intent(in) :: qflx_dew_snow(1) !< surface dew added to snow pack (mm H2O /s) [+]
+ real(kind_lake), intent(in) :: qflx_dew_grnd(1) !< ground surface dew formation (mm H2O /s) [+]
+ real(kind_lake), intent(in) :: dz(1,-nlevsnow+1:nlevsoil) !< layer depth (m)
!inout:
- real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !ice lens (kg/m2)
- real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !liquid water (kg/m2)
+ real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2)
+ real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2)
!out:
- real(kind_lake), intent(out) :: qflx_top_soil(1) !net water input into soil from top (mm/s)
+ real(kind_lake), intent(out) :: qflx_top_soil(1) !< net water input into soil from top (mm/s)
! OTHER LOCAL VARIABLES:
@@ -4006,6 +4089,13 @@ subroutine SnowWater(lbc, ubc, num_snowc, filter_snowc, & !i
end subroutine SnowWater
+!> Determine the change in snow layer thickness due to compaction and
+!! settling.
+!! Three metamorphisms of changing snow characteristics are implemented,
+!! i.e., destructive, overburden, and melt. The treatments of the former
+!! two are from SNTHERM.89 and SNTHERM.99 (1991, 1999). The contribution
+!! due to melt metamorphism is simply taken as a ratio of snow ice
+!! fraction after the melting versus before the melting.
subroutine SnowCompaction(lbc, ubc, num_snowc, filter_snowc, &!i
snl,imelt,frac_iceold,t_soisno, &!i
h2osoi_ice,h2osoi_liq,dtime, &!i
@@ -4013,15 +4103,6 @@ subroutine SnowCompaction(lbc, ubc, num_snowc, filter_snowc, &!i
!================================================================================
- ! !DESCRIPTION:
- ! Determine the change in snow layer thickness due to compaction and
- ! settling.
- ! Three metamorphisms of changing snow characteristics are implemented,
- ! i.e., destructive, overburden, and melt. The treatments of the former
- ! two are from SNTHERM.89 and SNTHERM.99 (1991, 1999). The contribution
- ! due to melt metamorphism is simply taken as a ratio of snow ice
- ! fraction after the melting versus before the melting.
- !
! CALLED FROM:
! subroutine Hydrology2 in module Hydrology2Mod
!
@@ -4037,20 +4118,20 @@ subroutine SnowCompaction(lbc, ubc, num_snowc, filter_snowc, &!i
implicit none
!in:
- integer, intent(in) :: lbc, ubc ! column bounds
- integer, intent(in) :: num_snowc ! number of column snow points in column filter
- integer, intent(in) :: filter_snowc(ubc-lbc+1) ! column filter for snow points
- integer, intent(in) :: snl(1) !number of snow layers
- integer, intent(in) :: imelt(1,-nlevsnow+1:nlevsoil) !flag for melting (=1), freezing (=2), Not=0
- real(kind_lake), intent(in) :: dtime
- real(kind_lake), intent(in) :: frac_iceold(1,-nlevsnow+1:nlevsoil) !fraction of ice relative to the tot water
- real(kind_lake), intent(in) :: t_soisno(1,-nlevsnow+1:nlevsoil) !soil temperature (Kelvin)
- real(kind_lake), intent(in) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !ice lens (kg/m2)
- real(kind_lake), intent(in) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !liquid water (kg/m2)
+ integer, intent(in) :: lbc, ubc !< column bounds
+ integer, intent(in) :: num_snowc !< number of column snow points in column filter
+ integer, intent(in) :: filter_snowc(ubc-lbc+1) !< column filter for snow points
+ integer, intent(in) :: snl(1) !< number of snow layers
+ integer, intent(in) :: imelt(1,-nlevsnow+1:nlevsoil) !< flag for melting (=1), freezing (=2), Not=0
+ real(kind_lake), intent(in) :: dtime !<
+ real(kind_lake), intent(in) :: frac_iceold(1,-nlevsnow+1:nlevsoil) !< fraction of ice relative to the tot water
+ real(kind_lake), intent(in) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil temperature (Kelvin)
+ real(kind_lake), intent(in) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2)
+ real(kind_lake), intent(in) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2)
!inout:
- real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !layer depth (m)
+ real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !< layer depth (m)
! OTHER LOCAL VARIABLES:
@@ -4137,21 +4218,24 @@ subroutine SnowCompaction(lbc, ubc, num_snowc, filter_snowc, &!i
end subroutine SnowCompaction
+!> Combine snow layers that are less than a minimum thickness or mass
+!! If the snow element thickness or mass is less than a prescribed minimum,
+!! then it is combined with a neighboring element.
subroutine CombineSnowLayers(lbc, ubc, & !i
num_snowc, filter_snowc, & !i&o
snl,h2osno,snowdp,dz,zi, & !i&o
t_soisno,h2osoi_ice,h2osoi_liq, & !i&o
z) !o
!==========================================================================
- ! !DESCRIPTION:
+ ! DESCRIPTION:
! Combine snow layers that are less than a minimum thickness or mass
! If the snow element thickness or mass is less than a prescribed minimum,
! then it is combined with a neighboring element. The subroutine
! clm\_combo.f90 then executes the combination of mass and energy.
- ! !CALLED FROM:
+ ! CALLED FROM:
! subroutine Hydrology2 in module Hydrology2Mod
!
- ! !REVISION HISTORY:
+ ! REVISION HISTORY:
! 15 September 1999: Yongjiu Dai; Initial code
! 15 December 1999: Paul Houser and Jon Radakovich; F90 Revision
! 2/28/02, Peter Thornton: Migrated to new data structures.
@@ -4162,25 +4246,25 @@ subroutine CombineSnowLayers(lbc, ubc, & !i
! !ARGUMENTS:
implicit none
!in:
- integer, intent(in) :: lbc, ubc ! column bounds
+ integer, intent(in) :: lbc, ubc !< column bounds
! integer, intent(in) :: clandunit(1) !landunit index for each column
! integer, intent(in) :: ityplun(1) !landunit type
!inout:
- integer, intent(inout) :: num_snowc ! number of column snow points in column filter
- integer, intent(inout) :: filter_snowc(ubc-lbc+1) ! column filter for snow points
- integer , intent(inout) :: snl(1) !number of snow layers
- real(kind_lake), intent(inout) :: h2osno(1) !snow water (mm H2O)
- real(kind_lake), intent(inout) :: snowdp(1) !snow height (m)
- real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !layer depth (m)
- real(kind_lake), intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) !interface level below a "z" level (m)
- real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !soil temperature (Kelvin)
- real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !ice lens (kg/m2)
- real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !liquid water (kg/m2)
+ integer, intent(inout) :: num_snowc !< number of column snow points in column filter
+ integer, intent(inout) :: filter_snowc(ubc-lbc+1) !< column filter for snow points
+ integer , intent(inout) :: snl(1) !< number of snow layers
+ real(kind_lake), intent(inout) :: h2osno(1) !< snow water (mm H2O)
+ real(kind_lake), intent(inout) :: snowdp(1) !< snow height (m)
+ real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !< layer depth (m)
+ real(kind_lake), intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) !< interface level below a "z" level (m)
+ real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil temperature (Kelvin)
+ real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2)
+ real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2)
!out:
- real(kind_lake), intent(out) :: z(1,-nlevsnow+1:nlevsoil) !layer thickness (m)
+ real(kind_lake), intent(out) :: z(1,-nlevsnow+1:nlevsoil) !< layer thickness (m)
!
!EOP
!
@@ -4359,6 +4443,8 @@ subroutine CombineSnowLayers(lbc, ubc, & !i
end subroutine CombineSnowLayers
+! DESCRIPTION:
+!> Subdivides snow layers if they exceed their prescribed maximum thickness.
subroutine DivideSnowLayers(lbc, ubc, & !i
num_snowc, filter_snowc, & !i&o
snl,dz,zi,t_soisno, & !i&o
@@ -4367,8 +4453,6 @@ subroutine DivideSnowLayers(lbc, ubc, & !i
!============================================================================
- ! !DESCRIPTION:
- ! Subdivides snow layers if they exceed their prescribed maximum thickness.
! !CALLED FROM:
! subroutine Hydrology2 in module Hydrology2Mod
!
@@ -4384,22 +4468,22 @@ subroutine DivideSnowLayers(lbc, ubc, & !i
implicit none
!in:
- integer, intent(in) :: lbc, ubc ! column bounds
+ integer, intent(in) :: lbc, ubc !< column bounds
!inout:
- integer, intent(inout) :: num_snowc ! number of column snow points in column filter
- integer, intent(inout) :: filter_snowc(ubc-lbc+1) ! column filter for snow points
- integer , intent(inout) :: snl(1) !number of snow layers
- real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !layer depth (m)
- real(kind_lake), intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) !interface level below a "z" level (m)
- real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !soil temperature (Kelvin)
- real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !ice lens (kg/m2)
- real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !liquid water (kg/m2)
+ integer, intent(inout) :: num_snowc !< number of column snow points in column filter
+ integer, intent(inout) :: filter_snowc(ubc-lbc+1) !< column filter for snow points
+ integer , intent(inout) :: snl(1) !< number of snow layers
+ real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !< layer depth (m)
+ real(kind_lake), intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) !< interface level below a "z" level (m)
+ real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil temperature (Kelvin)
+ real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2)
+ real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2)
!out:
- real(kind_lake), intent(out) :: z(1,-nlevsnow+1:nlevsoil) !layer thickness (m)
+ real(kind_lake), intent(out) :: z(1,-nlevsnow+1:nlevsoil) !< layer thickness (m)
@@ -4587,11 +4671,13 @@ subroutine DivideSnowLayers(lbc, ubc, & !i
end subroutine DivideSnowLayers
+!> Combines two elements and returns the following combined
+!! variables: dz, t, wliq, wice.
subroutine Combo(dz, wliq, wice, t, dz2, wliq2, wice2, t2)
!
- ! !DESCRIPTION:
- ! Combines two elements and returns the following combined
- ! variables: dz, t, wliq, wice.
+ ! DESCRIPTION:
+ !> Combines two elements and returns the following combined
+ !! variables: dz, t, wliq, wice.
! The combined temperature is based on the equation:
! the sum of the enthalpies of the two elements =
! that of the combined element.
@@ -4600,14 +4686,14 @@ subroutine Combo(dz, wliq, wice, t, dz2, wliq2, wice2, t2)
!
! !ARGUMENTS:
implicit none
- real(kind_lake), intent(in) :: dz2 ! nodal thickness of 2 elements being combined [m]
- real(kind_lake), intent(in) :: wliq2 ! liquid water of element 2 [kg/m2]
- real(kind_lake), intent(in) :: wice2 ! ice of element 2 [kg/m2]
- real(kind_lake), intent(in) :: t2 ! nodal temperature of element 2 [K]
- real(kind_lake), intent(inout) :: dz ! nodal thickness of 1 elements being combined [m]
- real(kind_lake), intent(inout) :: wliq ! liquid water of element 1
- real(kind_lake), intent(inout) :: wice ! ice of element 1 [kg/m2]
- real(kind_lake), intent(inout) :: t ! nodel temperature of elment 1 [K]
+ real(kind_lake), intent(in) :: dz2 !< nodal thickness of 2 elements being combined [m]
+ real(kind_lake), intent(in) :: wliq2 !< liquid water of element 2 [kg/m2]
+ real(kind_lake), intent(in) :: wice2 !< ice of element 2 [kg/m2]
+ real(kind_lake), intent(in) :: t2 !< nodal temperature of element 2 [K]
+ real(kind_lake), intent(inout) :: dz !< nodal thickness of 1 elements being combined [m]
+ real(kind_lake), intent(inout) :: wliq !< liquid water of element 1
+ real(kind_lake), intent(inout) :: wice !< ice of element 1 [kg/m2]
+ real(kind_lake), intent(inout) :: t !< nodel temperature of elment 1 [K]
!
! !CALLED FROM:
! subroutine CombineSnowLayers in this module
@@ -4653,26 +4739,27 @@ subroutine Combo(dz, wliq, wice, t, dz2, wliq2, wice2, t2)
end subroutine Combo
+!> Constructs snow filter for use in vectorized loops for snow hydrology.
subroutine BuildSnowFilter(lbc, ubc, num_nolakec, filter_nolakec,snl, & !i
num_snowc, filter_snowc, & !o
num_nosnowc, filter_nosnowc) !o
!
- ! !DESCRIPTION:
- ! Constructs snow filter for use in vectorized loops for snow hydrology.
+ ! DESCRIPTION:
+ !> Constructs snow filter for use in vectorized loops for snow hydrology.
!
! !USES:
! use clmtype
!
! !ARGUMENTS:
implicit none
- integer, intent(in) :: lbc, ubc ! column bounds
- integer, intent(in) :: num_nolakec ! number of column non-lake points in column filter
- integer, intent(in) :: filter_nolakec(ubc-lbc+1) ! column filter for non-lake points
- integer, intent(in) :: snl(1) ! number of snow layers
- integer, intent(out) :: num_snowc ! number of column snow points in column filter
- integer, intent(out) :: filter_snowc(ubc-lbc+1) ! column filter for snow points
- integer, intent(out) :: num_nosnowc ! number of column non-snow points in column filter
- integer, intent(out) :: filter_nosnowc(ubc-lbc+1) ! column filter for non-snow points
+ integer, intent(in) :: lbc, ubc !< column bounds
+ integer, intent(in) :: num_nolakec !< number of column non-lake points in column filter
+ integer, intent(in) :: filter_nolakec(ubc-lbc+1) !< column filter for non-lake points
+ integer, intent(in) :: snl(1) !< number of snow layers
+ integer, intent(out) :: num_snowc !< number of column snow points in column filter
+ integer, intent(out) :: filter_snowc(ubc-lbc+1) !< column filter for snow points
+ integer, intent(out) :: num_nosnowc !< number of column non-snow points in column filter
+ integer, intent(out) :: filter_nosnowc(ubc-lbc+1) !< column filter for non-snow points
!
! !CALLED FROM:
! subroutine Hydrology2 in Hydrology2Mod
@@ -4710,7 +4797,13 @@ subroutine BuildSnowFilter(lbc, ubc, num_nolakec, filter_nolakec,snl, & !i
end subroutine BuildSnowFilter
-
+ ! DESCRIPTION:
+ !> Calculation of the friction velocity, relation for potential
+ !! temperature and humidity profiles of surface boundary layer.
+ !! The scheme is based on the work of Zeng et al. (1998):
+ !! Intercomparison of bulk aerodynamic algorithms for the computation
+ !! of sea surface fluxes using TOGA CORE and TAO data. J. Climate,
+ !! Vol. 11, 2628-2644.
subroutine FrictionVelocity(pgridcell,forc_hgt,forc_hgt_u, & !i
forc_hgt_t,forc_hgt_q, & !i
lbp, ubp, fn, filterp, & !i
@@ -4721,15 +4814,7 @@ subroutine FrictionVelocity(pgridcell,forc_hgt,forc_hgt_u, & !i
fm) !i&o
!=============================================================================
- ! !DESCRIPTION:
- ! Calculation of the friction velocity, relation for potential
- ! temperature and humidity profiles of surface boundary layer.
- ! The scheme is based on the work of Zeng et al. (1998):
- ! Intercomparison of bulk aerodynamic algorithms for the computation
- ! of sea surface fluxes using TOGA CORE and TAO data. J. Climate,
- ! Vol. 11, 2628-2644.
- !
- ! !REVISION HISTORY:
+ ! REVISION HISTORY:
! 15 September 1999: Yongjiu Dai; Initial code
! 15 December 1999: Paul Houser and Jon Radakovich; F90 Revision
! 12/19/01, Peter Thornton
@@ -4746,35 +4831,35 @@ subroutine FrictionVelocity(pgridcell,forc_hgt,forc_hgt_u, & !i
!in:
- integer , intent(in) :: pgridcell(1) ! pft's gridcell index
- real(kind_lake), intent(in) :: forc_hgt(1) ! atmospheric reference height (m)
- real(kind_lake), intent(in) :: forc_hgt_u(1) ! observational height of wind [m]
- real(kind_lake), intent(in) :: forc_hgt_t(1) ! observational height of temperature [m]
- real(kind_lake), intent(in) :: forc_hgt_q(1) ! observational height of humidity [m]
- integer , intent(in) :: lbp, ubp ! pft array bounds
- integer , intent(in) :: fn ! number of filtered pft elements
- integer , intent(in) :: filterp(fn) ! pft filter
- real(kind_lake), intent(in) :: displa(lbp:ubp) ! displacement height (m)
- real(kind_lake), intent(in) :: z0m(lbp:ubp) ! roughness length over vegetation, momentum [m]
- real(kind_lake), intent(in) :: z0h(lbp:ubp) ! roughness length over vegetation, sensible heat [m]
- real(kind_lake), intent(in) :: z0q(lbp:ubp) ! roughness length over vegetation, latent heat [m]
- real(kind_lake), intent(in) :: obu(lbp:ubp) ! monin-obukhov length (m)
- integer, intent(in) :: iter ! iteration number
- real(kind_lake), intent(in) :: ur(lbp:ubp) ! wind speed at reference height [m/s]
- real(kind_lake), intent(in) :: um(lbp:ubp) ! wind speed including the stablity effect [m/s]
+ integer , intent(in) :: pgridcell(1) !< pft's gridcell index
+ real(kind_lake), intent(in) :: forc_hgt(1) !< atmospheric reference height (m)
+ real(kind_lake), intent(in) :: forc_hgt_u(1) !< observational height of wind [m]
+ real(kind_lake), intent(in) :: forc_hgt_t(1) !< observational height of temperature [m]
+ real(kind_lake), intent(in) :: forc_hgt_q(1) !< observational height of humidity [m]
+ integer , intent(in) :: lbp, ubp !< pft array bounds
+ integer , intent(in) :: fn !< number of filtered pft elements
+ integer , intent(in) :: filterp(fn) !< pft filter
+ real(kind_lake), intent(in) :: displa(lbp:ubp) !< displacement height (m)
+ real(kind_lake), intent(in) :: z0m(lbp:ubp) !< roughness length over vegetation, momentum [m]
+ real(kind_lake), intent(in) :: z0h(lbp:ubp) !< roughness length over vegetation, sensible heat [m]
+ real(kind_lake), intent(in) :: z0q(lbp:ubp) !< roughness length over vegetation, latent heat [m]
+ real(kind_lake), intent(in) :: obu(lbp:ubp) !< monin-obukhov length (m)
+ integer, intent(in) :: iter !< iteration number
+ real(kind_lake), intent(in) :: ur(lbp:ubp) !< wind speed at reference height [m/s]
+ real(kind_lake), intent(in) :: um(lbp:ubp) !< wind speed including the stablity effect [m/s]
!out:
- real(kind_lake), intent(out) :: ustar(lbp:ubp) ! friction velocity [m/s]
- real(kind_lake), intent(out) :: temp1(lbp:ubp) ! relation for potential temperature profile
- real(kind_lake), intent(out) :: temp12m(lbp:ubp) ! relation for potential temperature profile applied at 2-m
- real(kind_lake), intent(out) :: temp2(lbp:ubp) ! relation for specific humidity profile
- real(kind_lake), intent(out) :: temp22m(lbp:ubp) ! relation for specific humidity profile applied at 2-m
- real(kind_lake), intent(out) :: u10(1) ! 10-m wind (m/s) (for dust model)
- real(kind_lake), intent(out) :: fv(1) ! friction velocity (m/s) (for dust model)
+ real(kind_lake), intent(out) :: ustar(lbp:ubp) !< friction velocity [m/s]
+ real(kind_lake), intent(out) :: temp1(lbp:ubp) !< relation for potential temperature profile
+ real(kind_lake), intent(out) :: temp12m(lbp:ubp) !< relation for potential temperature profile applied at 2-m
+ real(kind_lake), intent(out) :: temp2(lbp:ubp) !< relation for specific humidity profile
+ real(kind_lake), intent(out) :: temp22m(lbp:ubp) !< relation for specific humidity profile applied at 2-m
+ real(kind_lake), intent(out) :: u10(1) !< 10-m wind (m/s) (for dust model)
+ real(kind_lake), intent(out) :: fv(1) !< friction velocity (m/s) (for dust model)
!inout:
- real(kind_lake), intent(inout) :: fm(lbp:ubp) ! needed for DGVM only to diagnose 10m wind
+ real(kind_lake), intent(inout) :: fm(lbp:ubp) !< needed for DGVM only to diagnose 10m wind
! OTHER LOCAL VARIABLES:
@@ -4990,8 +5075,8 @@ end subroutine FrictionVelocity
! !INTERFACE:
real(kind_lake) function StabilityFunc1(zeta)
!
- ! !DESCRIPTION:
- ! Stability function for rib < 0.
+ ! DESCRIPTION:
+ !> Stability function for rib < 0.
!
! !USES:
! use shr_const_mod, only: SHR_CONST_PI
@@ -4999,7 +5084,7 @@ real(kind_lake) function StabilityFunc1(zeta)
!
! !ARGUMENTS:
implicit none
- real(kind_lake), intent(in) :: zeta ! dimensionless height used in Monin-Obukhov theory
+ real(kind_lake), intent(in) :: zeta !< dimensionless height used in Monin-Obukhov theory
!
! !CALLED FROM:
! subroutine FrictionVelocity in this module
@@ -5033,7 +5118,7 @@ end function StabilityFunc1
real(kind_lake) function StabilityFunc2(zeta)
!
! !DESCRIPTION:
- ! Stability function for rib < 0.
+ !> Stability function for rib < 0.
!
! !USES:
!Removed by Zack Subin, 7/9/08
@@ -5041,7 +5126,7 @@ real(kind_lake) function StabilityFunc2(zeta)
!
! !ARGUMENTS:
implicit none
- real(kind_lake), intent(in) :: zeta ! dimensionless height used in Monin-Obukhov theory
+ real(kind_lake), intent(in) :: zeta !< dimensionless height used in Monin-Obukhov theory
!
! !CALLED FROM:
! subroutine FrictionVelocity in this module
@@ -5071,23 +5156,23 @@ end function StabilityFunc2
subroutine MoninObukIni (ur, thv, dthv, zldis, z0m, um, obu)
!
! !DESCRIPTION:
- ! Initialization of the Monin-Obukhov length.
- ! The scheme is based on the work of Zeng et al. (1998):
- ! Intercomparison of bulk aerodynamic algorithms for the computation
- ! of sea surface fluxes using TOGA CORE and TAO data. J. Climate,
- ! Vol. 11, 2628-2644.
+ !> Initialization of the Monin-Obukhov length.
+ !! The scheme is based on the work of Zeng et al. (1998):
+ !! Intercomparison of bulk aerodynamic algorithms for the computation
+ !! of sea surface fluxes using TOGA CORE and TAO data. J. Climate,
+ !! Vol. 11, 2628-2644.
!
! !USES:
!
! !ARGUMENTS:
implicit none
- real(kind_lake), intent(in) :: ur ! wind speed at reference height [m/s]
- real(kind_lake), intent(in) :: thv ! virtual potential temperature (kelvin)
- real(kind_lake), intent(in) :: dthv ! diff of vir. poten. temp. between ref. height and surface
- real(kind_lake), intent(in) :: zldis ! reference height "minus" zero displacement heght [m]
- real(kind_lake), intent(in) :: z0m ! roughness length, momentum [m]
- real(kind_lake), intent(out) :: um ! wind speed including the stability effect [m/s]
- real(kind_lake), intent(out) :: obu ! monin-obukhov length (m)
+ real(kind_lake), intent(in) :: ur !< wind speed at reference height [m/s]
+ real(kind_lake), intent(in) :: thv !< virtual potential temperature (kelvin)
+ real(kind_lake), intent(in) :: dthv !< diff of vir. poten. temp. between ref. height and surface
+ real(kind_lake), intent(in) :: zldis !< reference height "minus" zero displacement heght [m]
+ real(kind_lake), intent(in) :: z0m !< roughness length, momentum [m]
+ real(kind_lake), intent(out) :: um !< wind speed including the stability effect [m/s]
+ real(kind_lake), intent(out) :: obu !< monin-obukhov length (m)
!
! !CALLED FROM:
! subroutine BareGroundFluxes in module BareGroundFluxesMod.F90
@@ -5141,18 +5226,19 @@ end subroutine MoninObukIni
!!
subroutine clm_lake_init(con_pi,karman,con_g,con_sbc,con_t0c,rhowater,con_csol,con_cliq, &
con_hfus,con_hvap,con_rd,con_cp,rholakeice,clm_lake_debug, &
- con_eps_model,con_fvirt_model,errmsg,errflg)
+ clm_debug_print,con_eps_model,con_fvirt_model,errmsg,errflg)
implicit none
real(kind_phys), intent(in) :: con_pi,karman,con_g,con_sbc,con_t0c, &
rhowater,con_csol,con_cliq, con_hfus,con_hvap,con_rd,con_cp, &
rholakeice,con_eps_model,con_fvirt_model
INTEGER, INTENT(OUT) :: errflg
CHARACTER(*), INTENT(OUT) :: errmsg
- logical, intent(in) :: clm_lake_debug
+ logical, intent(in) :: clm_lake_debug,clm_debug_print
integer :: i, j
LAKEDEBUG = clm_lake_debug
- if(LAKEDEBUG) then
+ DEBUG_PRINT = clm_debug_print
+ if(debug_print) then
write(0,*) 'clm_lake_init'
endif
@@ -5246,22 +5332,22 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd,
weasd, lakedepth_default, fhour, &
oro_lakedepth, savedtke12d, snowdp2d, h2osno2d, & !o
snl2d, t_grnd2d, t_lake3d, lake_icefrac3d, &
- z_lake3d, dz_lake3d, t_soisno3d, h2osoi_ice3d, &
+ t_soisno3d, h2osoi_ice3d, &
h2osoi_liq3d, h2osoi_vol3d, z3d, dz3d, &
- zi3d, watsat3d, csol3d, tkmg3d, &
- fice, min_lakeice, tsfc, &
+ zi3d, &
+ fice, hice, min_lakeice, tsfc, &
use_lake_model, use_lakedepth, &
- tkdry3d, tksatu3d, im, prsi, &
+ im, prsi, &
xlat_d, xlon_d, clm_lake_initialized, &
- sand3d, clay3d, tg3, clm_lakedepth, &
+ input_lakedepth, tg3, clm_lakedepth, &
km, me, master, errmsg, errflg)
- ! Some fields in lakeini are not available during initialization,
- ! so clm_lake_init cannot complete the initialization. What is not
- ! in clm_lake_init, is initialized in lakeini on points where
- ! use_lake_model(i)>0. The clm_lake_initialized(i) guards against
- ! initializing a point twice. For that to work,
- ! clm_lake_initialized must be a restart variable.
+ !> Some fields in lakeini are not available during initialization,
+ !! so clm_lake_init cannot complete the initialization. What is not
+ !! in clm_lake_init, is initialized in lakeini on points where
+ !! use_lake_model(i)>0. The clm_lake_initialized(i) guards against
+ !! initializing a point twice. For that to work,
+ !! clm_lake_initialized must be a restart variable.
!==============================================================================
! This subroutine was first edited by Hongping Gu for coupling
@@ -5276,7 +5362,7 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd,
INTEGER , INTENT (IN) :: im, me, master, km, kdt
REAL(KIND_PHYS), INTENT(IN) :: min_lakeice, fhour
- REAL(KIND_PHYS), DIMENSION(IM), INTENT(INOUT):: FICE
+ REAL(KIND_PHYS), DIMENSION(IM), INTENT(INOUT):: FICE, hice
REAL(KIND_PHYS), DIMENSION(IM), INTENT(IN):: TG3, xlat_d, xlon_d
REAL(KIND_PHYS), DIMENSION(IM), INTENT(IN):: tsfc
REAL(KIND_PHYS), DIMENSION(IM) ,INTENT(INOUT) :: clm_lake_initialized
@@ -5291,6 +5377,7 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd,
real(kind_phys), intent(in) :: lakedepth_default
real(kind_phys), dimension(IM),intent(inout) :: clm_lakedepth
+ real(kind_phys), dimension(IM),intent(inout) :: input_lakedepth
real(kind_phys), dimension(IM),intent(in) :: oro_lakedepth
real(kind_phys), dimension(IM),intent(out) :: savedtke12d
real(kind_phys), dimension(IM),intent(out) :: snowdp2d, &
@@ -5299,43 +5386,24 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd,
t_grnd2d
real(kind_phys), dimension(IM,nlevlake),INTENT(out) :: t_lake3d, &
- lake_icefrac3d, &
- z_lake3d, &
- dz_lake3d
+ lake_icefrac3d
real(kind_phys), dimension(IM,-nlevsnow+1:nlevsoil ),INTENT(out) :: t_soisno3d, &
h2osoi_ice3d, &
h2osoi_liq3d, &
h2osoi_vol3d, &
z3d, &
dz3d
- real(kind_phys), dimension(IM,nlevsoil),INTENT(out) :: watsat3d, &
- csol3d, &
- tkmg3d, &
- tkdry3d, &
- tksatu3d
- real(kind_phys), dimension(IM,nlevsoil),INTENT(inout) :: clay3d, &
- sand3d
real(kind_phys), dimension( IM,-nlevsnow+0:nlevsoil ),INTENT(out) :: zi3d
!LOGICAL, DIMENSION( : ),intent(out) :: lake
!REAL(KIND_PHYS), OPTIONAL, DIMENSION( : ), INTENT(IN) :: lake_depth ! no separate variable for this in CCPP
- real(kind_lake), dimension( 1:im,1:nlevsoil ) :: bsw3d, &
- bsw23d, &
- psisat3d, &
- vwcsat3d, &
- watdry3d, &
- watopt3d, &
- hksat3d, &
- sucsat3d
integer :: n,i,j,k,ib,lev,bottom ! indices
real(kind_lake),dimension(1:im ) :: bd2d ! bulk density of dry soil material [kg/m^3]
real(kind_lake),dimension(1:im ) :: tkm2d ! mineral conductivity
real(kind_lake),dimension(1:im ) :: xksat2d ! maximum hydraulic conductivity of soil [mm/s]
real(kind_lake),dimension(1:im ) :: depthratio2d ! ratio of lake depth to standard deep lake depth
- real(kind_lake),dimension(1:im ) :: clay2d ! temporary
- real(kind_lake),dimension(1:im ) :: sand2d ! temporary
logical,parameter :: arbinit = .false.
real(kind_lake),parameter :: defval = -999.0
@@ -5343,15 +5411,20 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd,
integer :: numb_lak ! for debug
character*256 :: message
real(kind_lake) :: ht
+ real(kind_lake) :: rhosn
+ real(kind_lake) :: depth, lakedepth
logical :: climatology_limits
+ real(kind_lake) :: z_lake(nlevlake) ! layer depth for lake (m)
+ real(kind_lake) :: dz_lake(nlevlake) ! layer thickness for lake (m)
+
integer, parameter :: xcheck=38
integer, parameter :: ycheck=92
integer :: used_lakedepth_default, init_points, month, julday
integer :: mon, iday, num2, num1, juld, day2, day1, wght1, wght2
- real(kind_lake) :: Tclim
+ real(kind_lake) :: Tclim, watsat
used_lakedepth_default=0
@@ -5385,103 +5458,52 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd,
cycle
endif
- snowdp2d(i) = snowd(i)*1e-3 ! SNOW in kg/m^2 and snowdp in m
- h2osno2d(i) = weasd(i) ! mm
+ input_lakedepth=clm_lakedepth
snl2d(i) = defval
do k = -nlevsnow+1,nlevsoil
h2osoi_liq3d(i,k) = defval
h2osoi_ice3d(i,k) = defval
- t_soisno3d(i,k) = defval
+ h2osoi_vol3d(i,k) = defval
+ t_soisno3d(i,k) = defval
z3d(i,k) = defval
dz3d(i,k) = defval
enddo
do k = 1,nlevlake
- t_lake3d(i,k) = defval
+ t_lake3d(i,k) = defval
lake_icefrac3d(i,k) = defval
- z_lake3d(i,k) = defval
- dz_lake3d(i,k) = defval
enddo
- if(fice(i)>min_lakeice) then
- lake_icefrac3d(i,1) = fice(i)
- snowdp2d(i) = snowd(i)*1e-3 ! SNOW in kg/m^2 and snowdp in m
- h2osno2d(i) = weasd(i) ! mm
- else
- fice(i) = 0.
- snowd(i) = 0.
- weasd(i) = 0.
- snowdp2d(i) = 0.
- h2osno2d(i) = 0.
- endif
+ if (use_lake_model(i) == 1) then
+ ! for lake points only
+ z3d(i,:) = 0.0
+ dz3d(i,:) = 0.0
+ zi3d(i,:) = 0.0
+ h2osoi_liq3d(i,:) = 0.0
+ h2osoi_ice3d(i,:) = 0.0
+ lake_icefrac3d(i,:) = 0.0
+ h2osoi_vol3d(i,:) = 0.0
+ snl2d(i) = 0.0
+
+ if(fice(i)>min_lakeice) then
+ lake_icefrac3d(i,1) = fice(i)
+ snowdp2d(i) = snowd(i)*1e-3 ! SNOW in kg/m^2 and snowdp in m
+ h2osno2d(i) = weasd(i) ! mm
+ else
+ fice(i) = 0.
+ snowd(i) = 0.
+ weasd(i) = 0.
+ snowdp2d(i) = 0.
+ h2osno2d(i) = 0.
+ endif
- z3d(i,:) = 0.0
- dz3d(i,:) = 0.0
- zi3d(i,:) = 0.0
- h2osoi_liq3d(i,:) = 0.0
- h2osoi_ice3d(i,:) = 0.0
- lake_icefrac3d(i,:) = 0.0
- h2osoi_vol3d(i,:) = 0.0
- snl2d(i) = 0.0
-
! Soil hydraulic and thermal properties
isl = ISLTYP(i)
if (isl == 0 ) isl = 14
if (isl == 14 ) isl = isl + 1
- do k = 1,nlevsoil
- sand3d(i,k) = sand(isl)
- clay3d(i,k) = clay(isl)
-
- ! Cannot continue if either of these checks fail.
- if(clay3d(i,k)>0 .and. clay3d(i,k)<1) then
- write(message,*) 'bad clay3d ',clay3d(i,k)
- write(0,'(A)') trim(message)
- errmsg = trim(message)
- errflg = 1
- return
- endif
- if(sand3d(i,k)>0 .and. sand3d(i,k)<1) then
- write(message,*) 'bad sand3d ',sand3d(i,k)
- write(0,'(A)') trim(message)
- errmsg = trim(message)
- errflg = 1
- return
- endif
- enddo
- do k = 1,nlevsoil
- clay2d(i) = clay3d(i,k)
- sand2d(i) = sand3d(i,k)
- watsat3d(i,k) = 0.489_kind_lake - 0.00126_kind_lake*sand2d(i)
- bd2d(i) = (1._kind_lake-watsat3d(i,k))*2.7e3_kind_lake
- xksat2d(i) = 0.0070556_kind_lake *( 10._kind_lake**(-0.884_kind_lake+0.0153_kind_lake*sand2d(i)) ) ! mm/s
- tkm2d(i) = (8.80_kind_lake*sand2d(i)+2.92_kind_lake*clay2d(i))/(sand2d(i)+clay2d(i)) ! W/(m K)
-
- bsw3d(i,k) = 2.91_kind_lake + 0.159_kind_lake*clay2d(i)
- bsw23d(i,k) = -(3.10_kind_lake + 0.157_kind_lake*clay2d(i) - 0.003_kind_lake*sand2d(i))
- psisat3d(i,k) = -(exp((1.54_kind_lake - 0.0095_kind_lake*sand2d(i) + 0.0063_kind_lake*(100.0_kind_lake-sand2d(i) &
- -clay2d(i)))*log(10.0_kind_lake))*9.8e-5_kind_lake)
- vwcsat3d(i,k) = (50.5_kind_lake - 0.142_kind_lake*sand2d(i) - 0.037_kind_lake*clay2d(i))/100.0_kind_lake
- hksat3d(i,k) = xksat2d(i)
- sucsat3d(i,k) = 10._kind_lake * ( 10._kind_lake**(1.88_kind_lake-0.0131_kind_lake*sand2d(i)) )
- tkmg3d(i,k) = tkm2d(i) ** (1._kind_lake- watsat3d(i,k))
- tksatu3d(i,k) = tkmg3d(i,k)*0.57_kind_lake**watsat3d(i,k)
- tkdry3d(i,k) = (0.135_kind_lake*bd2d(i) + 64.7_kind_lake) / (2.7e3_kind_lake - 0.947_kind_lake*bd2d(i))
- csol3d(i,k) = (2.128_kind_lake*sand2d(i)+2.385_kind_lake*clay2d(i)) / (sand2d(i)+clay2d(i))*1.e6_kind_lake ! J/(m3 K)
- watdry3d(i,k) = watsat3d(i,k) * (316230._kind_lake/sucsat3d(i,k)) ** (-1._kind_lake/bsw3d(i,k))
- watopt3d(i,k) = watsat3d(i,k) * (158490._kind_lake/sucsat3d(i,k)) ** (-1._kind_lake/bsw3d(i,k))
- end do
- if (clm_lakedepth(i) == spval) then
- clm_lakedepth(i) = zlak(nlevlake) + 0.5_kind_lake*dzlak(nlevlake)
- z_lake3d(i,1:nlevlake) = zlak(1:nlevlake)
- dz_lake3d(i,1:nlevlake) = dzlak(1:nlevlake)
- else
- depthratio2d(i) = clm_lakedepth(i) / (zlak(nlevlake) + 0.5_kind_lake*dzlak(nlevlake))
- z_lake3d(i,1) = zlak(1)
- dz_lake3d(i,1) = dzlak(1)
- dz_lake3d(i,2:nlevlake) = dzlak(2:nlevlake)*depthratio2d(i)
- z_lake3d(i,2:nlevlake) = zlak(2:nlevlake)*depthratio2d(i) + dz_lake3d(i,1)*(1._kind_lake - depthratio2d(i))
- end if
+ call calculate_z_dz_lake(i,input_lakedepth,clm_lakedepth,z_lake,dz_lake)
+
z3d(i,1:nlevsoil) = zsoi(1:nlevsoil)
zi3d(i,0:nlevsoil) = zisoi(0:nlevsoil)
dz3d(i,1:nlevsoil) = dzsoi(1:nlevsoil)
@@ -5559,19 +5581,45 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd,
return
endif
+ if(lake_icefrac3d(i,1) > 0.) then
+ depth = 0.
+ do k=2,nlevlake
+ depth = depth + dz_lake(k)
+ if(hice(i) >= depth) then
+ lake_icefrac3d(i,k) = max(0.,lake_icefrac3d(i,1)+(0.-lake_icefrac3d(i,1))/z_lake(nlevlake)*depth)
+ else
+ lake_icefrac3d(i,k) = 0.
+ endif
+ end do
+ endif
t_lake3d(i,1) = tsfc(i)
t_grnd2d(i) = tsfc(i)
+ if (lake_icefrac3d(i,1) <= 0.) then
+ t_lake3d(i,1) = max(tfrz,tsfc(i))
+ t_grnd2d(i) = max(tfrz,tsfc(i))
+ endif
do k = 2, nlevlake
- if(z_lake3d(i,k).le.depth_c) then
- t_lake3d(i,k) = tsfc(i)+(277.0-tsfc(i))/depth_c*z_lake3d(i,k)
+ if(z_lake(k).le.depth_c) then
+ t_lake3d(i,k) = tsfc(i)+(277.2_kind_lake-tsfc(i))/depth_c*z_lake(k)
else
- t_lake3d(i,k) = 277.0
+ t_lake3d(i,k) = 277.2_kind_lake
end if
+ if (lake_icefrac3d(i,k) <= 0.) then
+ t_lake3d(i,k) = max(tfrz,t_lake3d(i,k))
+ endif
enddo
! initial t_soisno3d
- t_soisno3d(i,1) = t_lake3d(i,nlevlake)
+ ! in snow
+ if(snowdp2d(i) > 0.) then
+ do k = snl2d(i)+1, 0
+ t_soisno3d(i,k) =min(tfrz,tsfc(i))
+ enddo
+ endif
+
+ ! in soil
+ t_soisno3d(i,1) = t_lake3d(i,nlevlake)
t_soisno3d(i,nlevsoil) = tg3(i)
do k = 2, nlevsoil-1
t_soisno3d(i,k)=t_soisno3d(i,1)+(t_soisno3d(i,nlevsoil)-t_soisno3d(i,1))*dzsoi(k)
@@ -5587,7 +5635,8 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd,
do k = 1,nlevsoil
h2osoi_vol3d(i,k) = 1.0_kind_lake
- h2osoi_vol3d(i,k) = min(h2osoi_vol3d(i,k),watsat3d(i,k))
+ watsat = 0.489_kind_lake - 0.00126_kind_lake*sand(isl)
+ h2osoi_vol3d(i,k) = min(h2osoi_vol3d(i,k),watsat)
! soil layers
if (t_soisno3d(i,k) <= tfrz) then
@@ -5599,6 +5648,17 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd,
endif
enddo
+ !tgs - in RAP and HRRR applications with cycled snow depth and snow
+ !water equivalent, the actual snow density could be computed. This is
+ !not used for now for consistency with the main Lake subroutine, where
+ !constant snow density (250.) is used.
+ if(h2osno2d(i).gt.0. .and. snowdp2d(i).gt.0.) then
+ rhosn = h2osno2d(i)/snowdp2d(i)
+ else
+ rhosn = snow_bd ! bdsno=250.
+ endif
+
+
do k = -nlevsnow+1, 0
if (k > snl2d(i)) then
h2osoi_ice3d(i,k) = dz3d(i,k)*snow_bd
@@ -5607,10 +5667,12 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd,
end do
clm_lake_initialized(i) = 1
+
+ endif !if ( use_lakedepth ) then
ENDDO do_init
- if(LAKEDEBUG .and. init_points>0) then
+ if(debug_print .and. init_points>0) then
print *,'points initialized in clm_lake',init_points
end if
diff --git a/physics/clm_lake.meta b/physics/clm_lake.meta
index bbaaded16..11a44286a 100644
--- a/physics/clm_lake.meta
+++ b/physics/clm_lake.meta
@@ -7,6 +7,13 @@
[ccpp-arg-table]
name = clm_lake_run
type = scheme
+[flag_restart]
+ standard_name = flag_for_restart
+ long_name = flag for restart (warmstart) or coldstart
+ units = flag
+ dimensions = ()
+ type = logical
+ intent = in
[im]
standard_name = horizontal_loop_extent
long_name = horizontal loop extent
@@ -282,6 +289,14 @@
type = real
kind = kind_phys
intent = in
+[input_lakedepth]
+ standard_name = lake_depth_before_correction
+ long_name = lake depth_before_correction
+ units = m
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+ intent = inout
[wind]
standard_name = wind_speed_at_lowest_model_layer
long_name = wind speed at lowest model level
@@ -709,76 +724,6 @@
type = real
kind = kind_phys
intent = inout
-[z_lake3d]
- 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
- intent = inout
-[dz_lake3d]
- 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
- intent = inout
-[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
- intent = inout
-[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
- intent = inout
-[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
- intent = inout
-[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
- intent = inout
-[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
- intent = inout
-[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
- intent = inout
-[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
- intent = inout
[clm_lakedepth]
standard_name = clm_lake_depth
long_name = clm internal copy of lake depth with 10.0 replaced by default lake depth
@@ -935,6 +880,13 @@
type = logical
active = (control_for_lake_model_selection == 3)
intent = in
+[clm_debug_print]
+ standard_name = flag_for_printing_in_clm_lake_model
+ long_name = flag for printing in clm lake model
+ units = flag
+ dimensions = ()
+ type = logical
+ intent = in
[errmsg]
standard_name = ccpp_error_message
long_name = error message for error handling in CCPP
diff --git a/physics/cu_c3_deep.F90 b/physics/cu_c3_deep.F90
index c3a4b2c4e..7092840c3 100644
--- a/physics/cu_c3_deep.F90
+++ b/physics/cu_c3_deep.F90
@@ -159,12 +159,12 @@ subroutine cu_c3_deep_run( &
nranflag,itf,ktf,its,ite, kts,kte,ipr,imid
integer, intent (in ) :: &
ichoice
- real(kind=kind_phys), dimension (its:ite,4) &
+ real(kind=kind_phys), dimension (its:,:) &
,intent (in ) :: rand_clos
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (in ) :: rand_mom,rand_vmas
!$acc declare copyin(rand_clos,rand_mom,rand_vmas)
- real(kind=kind_phys), intent(in), dimension (its:ite) :: ca_deep(:)
+ real(kind=kind_phys), intent(in), dimension (its:) :: ca_deep(:)
integer, intent(in) :: do_capsuppress
real(kind=kind_phys), intent(in), dimension(:) :: cap_suppress_j
!$acc declare create(cap_suppress_j)
@@ -177,28 +177,28 @@ subroutine cu_c3_deep_run( &
! outq = output q tendency (per s)
! outqc = output qc tendency (per s)
! pre = output precip
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (inout ) :: &
cnvwt,outu,outv,outt,outq,outqc,cupclw
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (out ) :: &
frh_out,rainevap
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
tmf, qmicro, sigmain, forceqv_spechum
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (inout ) :: &
pre,xmb_out
!$acc declare copy(cnvwt,outu,outv,outt,outq,outqc,cupclw,frh_out,pre,xmb_out)
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (in ) :: &
hfx,qfx,xmbm_in,xmbs_in
!$acc declare copyin(hfx,qfx,xmbm_in,xmbs_in)
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (inout ) :: &
kbcon,ktop
!$acc declare copy(kbcon,ktop)
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (in ) :: &
kpbl,tropics
!$acc declare copyin(kpbl,tropics)
@@ -207,26 +207,26 @@ subroutine cu_c3_deep_run( &
! omega (omeg), windspeed (us,vs), and a flag (ierr) to turn off
! convection for this call only and at that particular gridpoint
!
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
dhdt,rho,t,po,us,vs,tn,delp
!$acc declare copyin(dhdt,rho,t,po,us,vs,tn)
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (inout ) :: &
omeg
!$acc declare copy(omeg)
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (inout) :: &
q,qo,zuo,zdo,zdm
!$acc declare sigmaout
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (out) :: &
sigmaout
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (in ) :: &
dx,z1,psur,xland
!$acc declare copyin(dx,z1,psur,xland)
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (inout ) :: &
mconv,ccn
!$acc declare copy(mconv,ccn)
@@ -372,8 +372,8 @@ subroutine cu_c3_deep_run( &
!$acc kzdown,kdet,k22,jmin,kstabi,kstabm,k22x,xland1, &
!$acc ktopdby,kbconx,ierr2,ierr3,kbmax)
- integer, dimension (its:ite), intent(inout) :: ierr
- integer, dimension (its:ite), intent(in) :: csum
+ integer, dimension (its:), intent(inout) :: ierr
+ integer, dimension (its:), intent(in) :: csum
logical, intent(in) :: do_ca, progsigma
logical, intent(in) :: flag_init, flag_restart
!$acc declare copy(ierr) copyin(csum)
@@ -421,7 +421,7 @@ subroutine cu_c3_deep_run( &
!$acc tn_bl, qo_bl, qeso_bl, heo_bl, heso_bl, &
!$acc qeso_cup_bl,qo_cup_bl, heo_cup_bl,heso_cup_bl, &
!$acc gammao_cup_bl,tn_cup_bl,hco_bl,dbyo_bl,xf_dicycle)
- real(kind=kind_phys), intent(inout), dimension(its:ite,10) :: forcing
+ real(kind=kind_phys), intent(inout), dimension(its:,:) :: forcing
!$acc declare copy(forcing)
integer :: turn,pmin_lev(its:ite),start_level(its:ite),ktopkeep(its:ite)
real(kind=kind_phys), dimension (its:ite,kts:kte) :: dtempdz
@@ -2078,10 +2078,6 @@ subroutine cu_c3_deep_run( &
!> - Call rain_evap_below_cloudbase() to calculate evaporation below cloud base
- call rain_evap_below_cloudbase(itf,ktf,its,ite, &
- kts,kte,ierr,kbcon,xmb,psur,xland,qo_cup, &
- po_cup,qes_cup,pwavo,edto,pwevo,pre,outt,outq) !,outbuoy)
-
k=1
!$acc kernels
do i=its,itf
@@ -2137,7 +2133,7 @@ subroutine cu_c3_deep_run( &
do k = ktop(i), 1, -1
rain = pwo(i,k) + edto(i) * pwdo(i,k)
rn(i) = rn(i) + rain * xmb(i) * .001 * dtime
- !if(po(i,k).gt.400.)then
+ if(k.gt.jmin(i))then
if(flg(i))then
q1=qo(i,k)+(outq(i,k))*dtime
t1=tn(i,k)+(outt(i,k))*dtime
@@ -2162,7 +2158,7 @@ subroutine cu_c3_deep_run( &
pre(i)=max(pre(i),0.)
delqev(i) = delqev(i) + .001*dp*qevap(i)/g
endif
- !endif ! 400mb
+ endif
endif
enddo
! pre(i)=1000.*rn(i)/dtime
@@ -2418,16 +2414,16 @@ subroutine rain_evap_below_cloudbase(itf,ktf, its,ite, kts,kte,ierr, &
integer ,intent(in) :: itf,ktf, its,ite, kts,kte
- integer, dimension(its:ite) ,intent(in) :: ierr,kbcon
- real(kind=kind_phys), dimension(its:ite) ,intent(in) ::psur,xland,pwavo,edto,pwevo,xmb
- real(kind=kind_phys), dimension(its:ite,kts:kte),intent(in) :: po_cup,qo_cup,qes_cup
- real(kind=kind_phys), dimension(its:ite) ,intent(inout) :: pre
- real(kind=kind_phys), dimension(its:ite,kts:kte),intent(inout) :: outt,outq !,outbuoy
+ integer, dimension(its:) ,intent(in) :: ierr,kbcon
+ real(kind=kind_phys), dimension(its:) ,intent(in) ::psur,xland,pwavo,edto,pwevo,xmb
+ real(kind=kind_phys), dimension(its:,kts:),intent(in) :: po_cup,qo_cup,qes_cup
+ real(kind=kind_phys), dimension(its:) ,intent(inout) :: pre
+ real(kind=kind_phys), dimension(its:,kts:),intent(inout) :: outt,outq !,outbuoy
!$acc declare copyin(ierr,kbcon,psur,xland,pwavo,edto,pwevo,xmb,po_cup,qo_cup,qes_cup)
!$acc declare copy(pre,outt,outq)
- !real, dimension(its:ite) ,intent(out) :: tot_evap_bcb
- !real, dimension(its:ite,kts:kte),intent(out) :: evap_bcb,net_prec_bcb
+ !real, dimension(its:) ,intent(out) :: tot_evap_bcb
+ !real, dimension(its:,kts:),intent(out) :: evap_bcb,net_prec_bcb
!-- locals
integer :: i,k
@@ -2511,30 +2507,30 @@ subroutine cup_dd_edt(ierr,us,vs,z,ktop,kbcon,edt,p,pwav, &
!
! ierr error value, maybe modified in this routine
!
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
rho,us,vs,z,p,pw
- real(kind=kind_phys), dimension (its:ite,1) &
+ real(kind=kind_phys), dimension (its:,: ) &
,intent (out ) :: &
edtc
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (out ) :: &
pefc
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (out ) :: &
edt
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (in ) :: &
pwav,pwev,psum2,psumh,edtmax,edtmin
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (in ) :: &
ktop,kbcon,xland1
real(kind=kind_phys), intent (in ) :: & !HCB
ccnclean
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (inout ) :: &
ccn
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (inout) :: &
ierr
!$acc declare copyin(rho,us,vs,z,p,pw,pwav,pwev,psum2,psumh,edtmax,edtmin,ktop,kbcon)
@@ -2671,7 +2667,7 @@ subroutine cup_dd_moisture(ierrc,zd,hcd,hes_cup,qcd,qes_cup, &
! pwev = total normalized integrated evaoprate (i2)
! entr= entrainment rate
!
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
zd,hes_cup,hcd,qes_cup,q_cup,z_cup, &
dd_massentr,dd_massdetr,gamma_cup,q,he,p_cup
@@ -2679,18 +2675,18 @@ subroutine cup_dd_moisture(ierrc,zd,hcd,hes_cup,qcd,qes_cup, &
integer &
,intent (in ) :: &
iloop
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (in ) :: &
jmin
!$acc declare copyin(jmin)
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (inout) :: &
ierr
!$acc declare copy(ierr)
- real(kind=kind_phys), dimension (its:ite,kts:kte)&
+ real(kind=kind_phys), dimension (its:,kts:)&
,intent (out ) :: &
qcd,qrcd,pwd
- real(kind=kind_phys), dimension (its:ite)&
+ real(kind=kind_phys), dimension (its:)&
,intent (out ) :: &
pwev,bu
!$acc declare copyout(qcd,qrcd,pwd,pwev,bu)
@@ -2812,23 +2808,23 @@ subroutine cup_env(z,qes,he,hes,t,q,p,z1, &
its,ite, kts,kte
!
!
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
p,t,q
!$acc declare copyin(p,t,q)
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (out ) :: &
hes,qes
!$acc declare copyout(hes,qes)
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (inout) :: &
he,z
!$acc declare copy(he,z)
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (in ) :: &
psur,z1
!$acc declare copyin(psur,z1)
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (inout) :: &
ierr
!$acc declare copy(ierr)
@@ -2966,19 +2962,19 @@ subroutine cup_env_clev(t,qes,q,he,hes,z,p,qes_cup,q_cup, &
itf,ktf, &
its,ite, kts,kte
!
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
qes,q,he,hes,z,p,t
!$acc declare copyin(qes,q,he,hes,z,p,t)
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (out ) :: &
qes_cup,q_cup,he_cup,hes_cup,z_cup,p_cup,gamma_cup,t_cup
!$acc declare copyout(qes_cup,q_cup,he_cup,hes_cup,z_cup,p_cup,gamma_cup,t_cup)
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (in ) :: &
psur,z1
!$acc declare copyin(psur,z1)
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (inout) :: &
ierr
!$acc declare copy(ierr)
@@ -3077,33 +3073,33 @@ subroutine cup_forcing_ens_3d(closure_n,xland,aa0,aa1,xaa0,mbdt,dtime,ierr,ierr2
! k22 = updraft originating level
! ichoice = flag if only want one closure (usually set to zero!)
!
- real(kind=kind_phys), dimension (its:ite,1:maxens3) &
+ real(kind=kind_phys), dimension (its:,1:) &
,intent (inout) :: &
pr_ens
- real(kind=kind_phys), dimension (its:ite,1:maxens3) &
+ real(kind=kind_phys), dimension (its:,1:) &
,intent (inout ) :: &
xf_ens
!$acc declare copy(pr_ens,xf_ens)
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
zd,zu,p_cup,zdm
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
omeg
- real(kind=kind_phys), dimension (its:ite,1) &
+ real(kind=kind_phys), dimension (its:,:) &
,intent (in ) :: &
xaa0
- real(kind=kind_phys), dimension (its:ite,4) &
+ real(kind=kind_phys), dimension (its:,:) &
,intent (in ) :: &
rand_clos
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (in ) :: &
aa1,edt,edtm,omegac,sigmab
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (in ) :: &
mconv,axx
!$acc declare copyin(zd,zu,p_cup,zdm,omeg,xaa0,rand_clos,aa1,edt,edtm,mconv,axx)
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (inout) :: &
aa0,closure_n
!$acc declare copy(aa0,closure_n)
@@ -3113,13 +3109,13 @@ subroutine cup_forcing_ens_3d(closure_n,xland,aa0,aa1,xaa0,mbdt,dtime,ierr,ierr2
real(kind=kind_phys) &
,intent (in ) :: &
dtime
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (inout ) :: &
k22,kbcon,ktop
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (in ) :: &
xland
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (inout) :: &
ierr,ierr2,ierr3
!$acc declare copy(k22,kbcon,ktop,ierr,ierr2,ierr3) copyin(xland)
@@ -3129,10 +3125,10 @@ subroutine cup_forcing_ens_3d(closure_n,xland,aa0,aa1,xaa0,mbdt,dtime,ierr,ierr2
integer, intent(in) :: dicycle
logical, intent (in) :: progsigma
- real(kind=kind_phys), intent(in) , dimension (its:ite) :: aa1_bl,tau_ecmwf
- real(kind=kind_phys), intent(inout), dimension (its:ite) :: xf_dicycle
- real(kind=kind_phys), intent(out), dimension (its:ite) :: xf_progsigma
- real(kind=kind_phys), intent(inout), dimension (its:ite,10) :: forcing
+ real(kind=kind_phys), intent(in) , dimension (its:) :: aa1_bl,tau_ecmwf
+ real(kind=kind_phys), intent(inout), dimension (its:) :: xf_dicycle
+ real(kind=kind_phys), intent(out), dimension (its:) :: xf_progsigma
+ real(kind=kind_phys), intent(inout), dimension (its:,:) :: forcing
!$acc declare copyin(aa1_bl,tau_ecmwf) copy(xf_dicycle,forcing)
!- local var
real(kind=kind_phys) :: xff_dicycle
@@ -3487,31 +3483,31 @@ subroutine cup_kbcon(ierrc,cap_inc,iloop_in,k22,kbcon,he_cup,hes_cup, &
!
! ierr error value, maybe modified in this routine
!
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
he_cup,hes_cup,p_cup
!$acc declare copyin(he_cup,hes_cup,p_cup)
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (in ) :: &
entr_rate,ztexec,zqexec,cap_inc,cap_max
!$acc declare copyin(entr_rate,ztexec,zqexec,cap_inc,cap_max)
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (inout ) :: &
hkb !,cap_max
!$acc declare copy(hkb)
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (in ) :: &
kbmax
!$acc declare copyin(kbmax)
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (inout) :: &
kbcon,k22,ierr
!$acc declare copy(kbcon,k22,ierr)
integer &
,intent (in ) :: &
iloop_in
- character*50 :: ierrc(its:ite)
- real(kind=kind_phys), dimension (its:ite,kts:kte),intent (in) :: z_cup,heo
+ character*50 :: ierrc(its:)
+ real(kind=kind_phys), dimension (its:,kts:),intent (in) :: z_cup,heo
!$acc declare copyin(z_cup,heo)
integer, dimension (its:ite) :: iloop,start_level
!$acc declare create(iloop,start_level)
@@ -3645,18 +3641,18 @@ subroutine cup_maximi(array,ks,ke,maxx,ierr, &
! x output array with return values
! kt output array of levels
! ks,kend check-range
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
array
!$acc declare copyin(array)
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (in ) :: &
ierr,ke
!$acc declare copyin(ierr,ke)
integer &
,intent (in ) :: &
ks
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (out ) :: &
maxx
!$acc declare copyout(maxx)
@@ -3708,15 +3704,15 @@ subroutine cup_minimi(array,ks,kend,kt,ierr, &
! x output array with return values
! kt output array of levels
! ks,kend check-range
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
array
!$acc declare copyin(array)
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (in ) :: &
ierr,ks,kend
!$acc declare copyin(ierr,ks,kend)
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (out ) :: &
kt
!$acc declare copyout(kt)
@@ -3771,10 +3767,10 @@ subroutine cup_up_aa0(aa0,z,zu,dby,gamma_cup,t_cup, &
! z = heights of model levels
! ierr error value, maybe modified in this routine
!
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
z,zu,gamma_cup,t_cup,dby
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (in ) :: &
kbcon,ktop
!$acc declare copyin(z,zu,gamma_cup,t_cup,dby,kbcon,ktop)
@@ -3783,11 +3779,11 @@ subroutine cup_up_aa0(aa0,z,zu,dby,gamma_cup,t_cup, &
!
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (inout) :: &
ierr
!$acc declare copy(ierr)
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (out ) :: &
aa0
!$acc declare copyout(aa0)
@@ -3830,15 +3826,15 @@ subroutine neg_check(name,j,dt,q,outq,outt,outu,outv, &
outqc,pret,its,ite,kts,kte,itf,ktf,ktop)
integer, intent(in ) :: j,its,ite,kts,kte,itf,ktf
- integer, dimension (its:ite ), intent(in ) :: ktop
+ integer, dimension (its: ), intent(in ) :: ktop
- real(kind=kind_phys), dimension (its:ite,kts:kte ) , &
+ real(kind=kind_phys), dimension (its:,kts: ) , &
intent(inout ) :: &
outq,outt,outqc,outu,outv
- real(kind=kind_phys), dimension (its:ite,kts:kte ) , &
+ real(kind=kind_phys), dimension (its:,kts: ) , &
intent(inout ) :: &
q
- real(kind=kind_phys), dimension (its:ite ) , &
+ real(kind=kind_phys), dimension (its: ) , &
intent(inout ) :: &
pret
!$acc declare copy(outq,outt,outqc,outu,outv,q,pret)
@@ -3979,38 +3975,38 @@ subroutine cup_output_ens_3d(xff_mid,xf_ens,ierr,dellat,dellaq,dellaqc, &
! pw = pw -epsilon*pd (ensemble dependent)
! ierr error value, maybe modified in this routine
!
- real(kind=kind_phys), dimension (its:ite,1:maxens3) &
+ real(kind=kind_phys), dimension (its:,:) &
,intent (inout) :: &
xf_ens,pr_ens
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (inout ) :: &
outtem,outq,outqc
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
zu,pwd,p_cup
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (in ) :: &
sig,xmbm_in,xmbs_in,edt,sigmab,dx
- real(kind=kind_phys), dimension (its:ite,2) &
+ real(kind=kind_phys), dimension (its:,:) &
,intent (in ) :: &
xff_mid
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (inout ) :: &
pre,xmb
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (inout ) :: &
closure_n
- real(kind=kind_phys), dimension (its:ite,kts:kte,1) &
+ real(kind=kind_phys), dimension (its:,kts:,:) &
,intent (in ) :: &
dellat,dellaqc,dellaq,pw
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (in ) :: &
ktop,xland1
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (inout) :: &
ierr,ierr2,ierr3
integer, intent(in) :: dicycle
- real(kind=kind_phys), intent(in), dimension (its:ite) :: xf_dicycle, xf_progsigma
+ real(kind=kind_phys), intent(in), dimension (its:) :: xf_dicycle, xf_progsigma
!$acc declare copyin(zu,pwd,p_cup,sig,xmbm_in,xmbs_in,edt,xff_mid,dellat,dellaqc,dellaq,pw,ktop,xland1,xf_dicycle)
!$acc declare copy(xf_ens,pr_ens,outtem,outq,outqc,pre,xmb,closure_n,ierr,ierr2,ierr3)
!
@@ -4248,15 +4244,15 @@ subroutine cup_up_moisture(name,ierr,z_cup,qc,qrc,pw,pwav, &
! zu = normalized updraft mass flux
! gamma_cup = gamma on model cloud levels
!
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
p_cup,rho,q,zu,gamma_cup,qe_cup, &
up_massentr,up_massdetr,dby,qes_cup,z_cup
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (in ) :: &
zqexec,c0
! entr= entrainment rate
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (in ) :: &
kbcon,ktop,k22,xland1
!$acc declare copyin(p_cup,rho,q,zu,gamma_cup,qe_cup,up_massentr,up_massdetr,dby,qes_cup,z_cup,zqexec,c0,kbcon,ktop,k22,xland1)
@@ -4268,7 +4264,7 @@ subroutine cup_up_moisture(name,ierr,z_cup,qc,qrc,pw,pwav, &
! ierr error value, maybe modified in this routine
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (inout) :: &
ierr
!$acc declare copy(ierr)
@@ -4281,11 +4277,11 @@ subroutine cup_up_moisture(name,ierr,z_cup,qc,qrc,pw,pwav, &
! pwav = totan normalized integrated condensate (i1)
! c0 = conversion rate (cloud to rain)
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (out ) :: &
qc,qrc,pw,clw_all
!$acc declare copy(qc,qrc,pw,clw_all)
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (inout) :: &
c1d
!$acc declare copy(c1d)
@@ -4295,11 +4291,11 @@ subroutine cup_up_moisture(name,ierr,z_cup,qc,qrc,pw,pwav, &
real(kind=kind_phys), dimension (its:ite) :: &
pwavh
!$acc declare create(pwavh)
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (out ) :: &
pwav,psum,psumh
!$acc declare copyout(pwav,psum,psumh)
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (in ) :: &
ccn
!$acc declare copyin(ccn)
@@ -4329,7 +4325,7 @@ subroutine cup_up_moisture(name,ierr,z_cup,qc,qrc,pw,pwav, &
is_deep = (name == 'deep')
!$acc kernels
- prop_b(kts:kte)=0
+ prop_b(kts:)=0
!$acc end kernels
iall=0
clwdet=0.1 !0.02
@@ -4429,7 +4425,7 @@ subroutine cup_up_moisture(name,ierr,z_cup,qc,qrc,pw,pwav, &
!
!now do the rest
!
- kklev(i)=maxloc(zu(i,:),1)
+ kklev(i)=maxloc(zu(i,2:ktop(i)),1)
!$acc loop seq
do k=kbcon(i)+1,ktop(i)
if(t(i,k) > 273.16) then
@@ -4489,6 +4485,8 @@ subroutine cup_up_moisture(name,ierr,z_cup,qc,qrc,pw,pwav, &
endif
if(k.gt.kbcon(i)+1)c1d(i,k)=clwdet*up_massdetr(i,k-1)
if(k.gt.kbcon(i)+1)c1d_b(i,k)=clwdet*up_massdetr(i,k-1)
+ c1d(i,k)=0.005
+ c1d_b(i,k)=0.005
if(autoconv.eq.2) then
!
@@ -4646,11 +4644,11 @@ subroutine rates_up_pdf(rand_vmas,ipr,name,ktop,ierr,p_cup,entr_rate_2d,hkbo,heo
implicit none
character *(*), intent (in) :: name
integer, intent(in) :: ipr,its,ite,itf,kts,kte,ktf
- real(kind=kind_phys), dimension (its:ite,kts:kte),intent (inout) :: entr_rate_2d,zuo
- real(kind=kind_phys), dimension (its:ite,kts:kte),intent (in) ::p_cup, heo,heso_cup,z_cup
- real(kind=kind_phys), dimension (its:ite),intent (in) :: hkbo,rand_vmas
- integer, dimension (its:ite),intent (in) :: kstabi,k22,kpbl,csum,xland,pmin_lev
- integer, dimension (its:ite),intent (inout) :: kbcon,ierr,ktop,ktopdby
+ real(kind=kind_phys), dimension (its:,kts:),intent (inout) :: entr_rate_2d,zuo
+ real(kind=kind_phys), dimension (its:,kts:),intent (in) ::p_cup, heo,heso_cup,z_cup
+ real(kind=kind_phys), dimension (its:),intent (in) :: hkbo,rand_vmas
+ integer, dimension (its:),intent (in) :: kstabi,k22,kpbl,csum,xland,pmin_lev
+ integer, dimension (its:),intent (inout) :: kbcon,ierr,ktop,ktopdby
!$acc declare copy(entr_rate_2d,zuo,kbcon,ierr,ktop,ktopdby) &
!$acc copyin(p_cup, heo,heso_cup,z_cup,hkbo,rand_vmas,kstabi,k22,kpbl,csum,xland,pmin_lev)
@@ -4737,7 +4735,7 @@ subroutine rates_up_pdf(rand_vmas,ipr,name,ktop,ierr,p_cup,entr_rate_2d,hkbo,heo
ktop(i)= 0
else
call get_zu_zd_pdf_fim(kklev,p_cup(i,:),rand_vmas(i),zubeg,ipr,xland(i),zuh2,1,ierr(i),k22(i), &
- kfinalzu+1,zuo(i,kts:kte),kts,kte,ktf,beta_u,kbcon(i),csum(i),pmin_lev(i))
+ kfinalzu+1,zuo(i,kts:),kts,kte,ktf,beta_u,kbcon(i),csum(i),pmin_lev(i))
endif
endif ! end deep
if ( is_mid ) then
@@ -4748,7 +4746,7 @@ subroutine rates_up_pdf(rand_vmas,ipr,name,ktop,ierr,p_cup,entr_rate_2d,hkbo,heo
kfinalzu=ktop(i)
ktopdby(i)=ktop(i)+1
call get_zu_zd_pdf_fim(kklev,p_cup(i,:),rand_vmas(i),zubeg,ipr,xland(i),zuh2,3, &
- ierr(i),k22(i),ktopdby(i)+1,zuo(i,kts:kte),kts,kte,ktf,beta_u,kbcon(i),csum(i),pmin_lev(i))
+ ierr(i),k22(i),ktopdby(i)+1,zuo(i,kts:),kts,kte,ktf,beta_u,kbcon(i),csum(i),pmin_lev(i))
endif
endif ! mid
if ( is_shallow ) then
@@ -4759,7 +4757,7 @@ subroutine rates_up_pdf(rand_vmas,ipr,name,ktop,ierr,p_cup,entr_rate_2d,hkbo,heo
kfinalzu=ktop(i)
ktopdby(i)=ktop(i)+1
call get_zu_zd_pdf_fim(kbcon(i),p_cup(i,:),rand_vmas(i),zubeg,ipr,xland(i),zuh2,2,ierr(i),k22(i), &
- ktopdby(i)+1,zuo(i,kts:kte),kts,kte,ktf,beta_u,kbcon(i),csum(i),pmin_lev(i))
+ ktopdby(i)+1,zuo(i,kts:),kts,kte,ktf,beta_u,kbcon(i),csum(i),pmin_lev(i))
endif
endif ! shal
@@ -4782,8 +4780,8 @@ subroutine get_zu_zd_pdf_fim(kklev,p,rand_vmas,zubeg,ipr,xland,zuh2,draft,ierr,k
real(kind=kind_phys), parameter :: beta_dd=4.0,g_beta_dd=6.
integer, intent(in) ::ipr,xland,kb,kklev,kt,kts,kte,ktf,kpbli,csum,pmin_lev
real(kind=kind_phys), intent(in) ::max_mass,zubeg
- real(kind=kind_phys), intent(inout) :: zu(kts:kte)
- real(kind=kind_phys), intent(in) :: p(kts:kte)
+ real(kind=kind_phys), intent(inout) :: zu(kts:)
+ real(kind=kind_phys), intent(in) :: p(kts:)
real(kind=kind_phys) :: trash,beta_deep,zuh(kts:kte),zuh2(1:40)
integer, intent(inout) :: ierr
integer, intent(in) ::draft
@@ -5057,20 +5055,20 @@ subroutine cup_up_aa1bl(aa0,t,tn,q,qo,dtime, &
! z = heights of model levels
! ierr error value, maybe modified in this routine
!
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
z_cup,zu,gamma_cup,t_cup,dby,t,tn,q,qo
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (in ) :: &
kbcon,ktop
real(kind=kind_phys), intent(in) :: dtime
!
! input and output
!
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (inout) :: &
ierr
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (out ) :: &
aa0
!
@@ -5107,14 +5105,14 @@ subroutine get_inversion_layers(ierr,p_cup,t_cup,z_cup,qo_cup,qeso_cup,k_inv_lay
implicit none
integer ,intent (in ) :: itf,ktf,its,ite,kts,kte
- integer, dimension (its:ite) ,intent (in ) :: ierr,kstart,kend
+ integer, dimension (its:) ,intent (in ) :: ierr,kstart,kend
!$acc declare copyin(ierr,kstart,kend)
integer, dimension (its:ite) :: kend_p3
!$acc declare create(kend_p3)
- real(kind=kind_phys), dimension (its:ite,kts:kte), intent (in ) :: p_cup,t_cup,z_cup,qo_cup,qeso_cup
- real(kind=kind_phys), dimension (its:ite,kts:kte), intent (out) :: dtempdz
- integer, dimension (its:ite,kts:kte), intent (out) :: k_inv_layers
+ real(kind=kind_phys), dimension (its:,kts:), intent (in ) :: p_cup,t_cup,z_cup,qo_cup,qeso_cup
+ real(kind=kind_phys), dimension (its:,kts:), intent (out) :: dtempdz
+ integer, dimension (its:,kts:), intent (out) :: k_inv_layers
!$acc declare copyin(p_cup,t_cup,z_cup,qo_cup,qeso_cup)
!$acc declare copyout(dtempdz,k_inv_layers)
!-local vars
@@ -5308,15 +5306,15 @@ subroutine get_lateral_massflux(itf,ktf, its,ite, kts,kte
implicit none
integer, intent (in) :: draft
integer, intent(in):: itf,ktf, its,ite, kts,kte
- integer, intent(in) , dimension(its:ite) :: ierr,ktop,kbcon,k22
+ integer, intent(in) , dimension(its:) :: ierr,ktop,kbcon,k22
!$acc declare copyin(ierr,ktop,kbcon,k22)
- !real(kind=kind_phys), intent(in), optional , dimension(its:ite):: lambau
- real(kind=kind_phys), intent(inout), optional , dimension(its:ite):: lambau
- real(kind=kind_phys), intent(in) , dimension(its:ite,kts:kte) :: zo_cup,zuo
- real(kind=kind_phys), intent(inout), dimension(its:ite,kts:kte) :: cd,entr_rate_2d
- real(kind=kind_phys), intent( out), dimension(its:ite,kts:kte) :: up_massentro, up_massdetro &
+ !real(kind=kind_phys), intent(in), optional , dimension(its:):: lambau
+ real(kind=kind_phys), intent(inout), optional , dimension(its:):: lambau
+ real(kind=kind_phys), intent(in) , dimension(its:,kts:) :: zo_cup,zuo
+ real(kind=kind_phys), intent(inout), dimension(its:,kts:) :: cd,entr_rate_2d
+ real(kind=kind_phys), intent( out), dimension(its:,kts:) :: up_massentro, up_massdetro &
,up_massentr, up_massdetr
- real(kind=kind_phys), intent( out), dimension(its:ite,kts:kte), optional :: &
+ real(kind=kind_phys), intent( out), dimension(its:,kts:), optional :: &
up_massentru,up_massdetru
!$acc declare copy(lambau,cd,entr_rate_2d) copyin(zo_cup,zuo) copyout(up_massentro, up_massdetro,up_massentr, up_massdetr)
!$acc declare copyout(up_massentro, up_massdetro,up_massentr, up_massdetr, up_massentru,up_massdetru)
@@ -5437,10 +5435,10 @@ subroutine get_partition_liq_ice(ierr,tn,po_cup, p_liq_ice,melting_layer
implicit none
character *(*), intent (in) :: cumulus
integer ,intent (in ) :: itf,ktf, its,ite, kts,kte
- real(kind=kind_phys), intent (in ), dimension(its:ite,kts:kte) :: tn,po_cup
- real(kind=kind_phys), intent (inout), dimension(its:ite,kts:kte) :: p_liq_ice,melting_layer
+ real(kind=kind_phys), intent (in ), dimension(its:,kts:) :: tn,po_cup
+ real(kind=kind_phys), intent (inout), dimension(its:,kts:) :: p_liq_ice,melting_layer
!$acc declare copyin(tn,po_cup) copy(p_liq_ice,melting_layer)
- integer , intent (in ), dimension(its:ite) :: ierr
+ integer , intent (in ), dimension(its:) :: ierr
!$acc declare copyin(ierr)
integer :: i,k
real(kind=kind_phys) :: dp
@@ -5539,11 +5537,11 @@ subroutine get_melting_profile(ierr,tn_cup,po_cup, p_liq_ice,melting_layer,qrco
implicit none
character *(*), intent (in) :: cumulus
integer ,intent (in ) :: itf,ktf, its,ite, kts,kte
- integer ,intent (in ), dimension(its:ite) :: ierr
- real(kind=kind_phys) ,intent (in ), dimension(its:ite) :: edto
- real(kind=kind_phys) ,intent (in ), dimension(its:ite,kts:kte) :: tn_cup,po_cup,qrco,pwo &
+ integer ,intent (in ), dimension(its:) :: ierr
+ real(kind=kind_phys) ,intent (in ), dimension(its:) :: edto
+ real(kind=kind_phys) ,intent (in ), dimension(its:,kts:) :: tn_cup,po_cup,qrco,pwo &
,pwdo,p_liq_ice,melting_layer
- real(kind=kind_phys) ,intent (inout), dimension(its:ite,kts:kte) :: melting
+ real(kind=kind_phys) ,intent (inout), dimension(its:,kts:) :: melting
!$acc declare copyin(ierr,edto,tn_cup,po_cup,qrco,pwo,pwdo,p_liq_ice,melting_layer,melting)
integer :: i,k
real(kind=kind_phys) :: dp
@@ -5615,13 +5613,13 @@ subroutine get_cloud_top(name,ktop,ierr,p_cup,entr_rate_2d,hkbo,heo,heso_cup,z_c
kstabi,k22,kbcon,its,ite,itf,kts,kte,ktf,zuo,kpbl,klcl,hcot)
implicit none
integer, intent(in) :: its,ite,itf,kts,kte,ktf
- real(kind=kind_phys), dimension (its:ite,kts:kte),intent (inout) :: entr_rate_2d,zuo
- real(kind=kind_phys), dimension (its:ite,kts:kte),intent (in) ::p_cup, heo,heso_cup,z_cup
- real(kind=kind_phys), dimension (its:ite),intent (in) :: hkbo
- integer, dimension (its:ite),intent (in) :: kstabi,k22,kbcon,kpbl,klcl
- integer, dimension (its:ite),intent (inout) :: ierr,ktop
+ real(kind=kind_phys), dimension (its:,kts:),intent (inout) :: entr_rate_2d,zuo
+ real(kind=kind_phys), dimension (its:,kts:),intent (in) ::p_cup, heo,heso_cup,z_cup
+ real(kind=kind_phys), dimension (its:),intent (in) :: hkbo
+ integer, dimension (its:),intent (in) :: kstabi,k22,kbcon,kpbl,klcl
+ integer, dimension (its:),intent (inout) :: ierr,ktop
!$acc declare copy(entr_rate_2d,zuo,ierr,ktop) copyin(p_cup, heo,heso_cup,z_cup,hkbo,kstabi,k22,kbcon,kpbl,klcl)
- real(kind=kind_phys), dimension (its:ite,kts:kte) :: hcot
+ real(kind=kind_phys), dimension (its:,kts:) :: hcot
!$acc declare create(hcot)
character *(*), intent (in) :: name
real(kind=kind_phys) :: dz,dh, dbythresh
@@ -5644,7 +5642,7 @@ subroutine get_cloud_top(name,ktop,ierr,p_cup,entr_rate_2d,hkbo,heo,heso_cup,z_c
kfinalzu=ktf-2
ktop(i)=kfinalzu
if(ierr(i).eq.0)then
- dby (kts:kte)=0.0
+ dby (kts:)=0.0
start_level(i)=kbcon(i)
!-- hcot below kbcon
@@ -5704,16 +5702,16 @@ subroutine calculate_updraft_velocity(its,itf,ktf,ite,kts,kte,ierr,progsigma,
implicit none
logical, intent(in) :: progsigma
integer, intent(in) :: itf,its,ktf,ite,kts,kte
- integer, dimension (its:ite), intent(inout) :: ierr
- real(kind=kind_phys), dimension (its:ite,kts:kte),intent (in) :: zo,entr_rate_2d, &
+ integer, dimension (its:), intent(inout) :: ierr
+ real(kind=kind_phys), dimension (its:,kts:),intent (in) :: zo,entr_rate_2d, &
cd,po,qeso,to,qo,dbyo,clw_all,qlk,delp,zu
- integer, dimension (its:ite),intent(in) :: k22,kbcon,ktcon
+ integer, dimension (its:),intent(in) :: k22,kbcon,ktcon
real(kind=kind_phys), dimension (its:ite) :: sumx
real(kind=kind_phys) ,intent (in) :: fv,rd,el2orc
real(kind=kind_phys), dimension (its:ite,kts:kte) :: drag, buo, zi, del
- real(kind=kind_phys), dimension (its:ite,kts:kte),intent (out) :: wu2,omega_u, &
+ real(kind=kind_phys), dimension (its:,kts:),intent (out) :: wu2,omega_u, &
zeta,zdqca
- real(kind=kind_phys), dimension (its:ite),intent(out) :: wc,omegac
+ real(kind=kind_phys), dimension (its:),intent(out) :: wc,omegac
real(kind=kind_phys) :: rho,bb1,bb2,dz,dp,ptem,tem1,ptem1,tem,rfact,gamma,val
integer :: i,k
diff --git a/physics/cu_c3_driver.F90 b/physics/cu_c3_driver.F90
index fd4d37b0b..8592e08f9 100644
--- a/physics/cu_c3_driver.F90
+++ b/physics/cu_c3_driver.F90
@@ -340,8 +340,8 @@ subroutine cu_c3_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,&
!
!> - Set tuning constants for radiation coupling
!
- tun_rad_shall(:)=.01
- tun_rad_mid(:)=.3 !.02
+ tun_rad_shall(:)=.012
+ tun_rad_mid(:)=.15 !.02
tun_rad_deep(:)=.3 !.065
edt(:)=0.
edtm(:)=0.
@@ -644,7 +644,6 @@ subroutine cu_c3_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,&
enddo
!$acc end kernels
if (dx(its)<6500.) then
- ichoice=10
imid_gf=0
endif
!
@@ -680,10 +679,6 @@ subroutine cu_c3_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,&
do i=its,itf
if(xmbs(i).gt.0.)then
cutens(i)=1.
- if (dx(i)<6500.) then
- ierrm(i)=555
- ierr (i)=555
- endif
endif
enddo
!$acc end kernels
@@ -954,38 +949,6 @@ subroutine cu_c3_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,&
!gdc(i,k,8)=(outq(i,k))*86400.*xlv/cp
gdc(i,k,8)=(outqm(i,k)+outqs(i,k)+outq(i,k))*86400.*xlv/cp
gdc(i,k,9)=gdc(i,k,2)+gdc(i,k,3)+gdc(i,k,4)
-!
-!> - Calculate subsidence effect on clw
-!
-! dsubclw=0.
-! dsubclwm=0.
-! dsubclws=0.
-! dp=100.*(p2d(i,k)-p2d(i,k+1))
-! if (clcw(i,k) .gt. -999.0 .and. clcw(i,k+1) .gt. -999.0 )then
-! clwtot = cliw(i,k) + clcw(i,k)
-! clwtot1= cliw(i,k+1) + clcw(i,k+1)
-! dsubclw=((-edt(i)*zd(i,k+1)+zu(i,k+1))*clwtot1 &
-! -(-edt(i)*zd(i,k) +zu(i,k)) *clwtot )*g/dp
-! dsubclwm=((-edtm(i)*zdm(i,k+1)+zum(i,k+1))*clwtot1 &
-! -(-edtm(i)*zdm(i,k) +zum(i,k)) *clwtot )*g/dp
-! dsubclws=(zus(i,k+1)*clwtot1-zus(i,k)*clwtot)*g/dp
-! dsubclw=dsubclw+(zu(i,k+1)*clwtot1-zu(i,k)*clwtot)*g/dp
-! dsubclwm=dsubclwm+(zum(i,k+1)*clwtot1-zum(i,k)*clwtot)*g/dp
-! dsubclws=dsubclws+(zus(i,k+1)*clwtot1-zus(i,k)*clwtot)*g/dp
-! endif
-! tem = dt*(outqcs(i,k)*cutens(i)+outqc(i,k)*cuten(i) &
-! +outqcm(i,k)*cutenm(i) &
-! +dsubclw*xmb(i)+dsubclws*xmbs(i)+dsubclwm*xmbm(i) &
-! )
-! tem1 = max(0.0, min(1.0, (tcr-t(i,k))*tcrf))
-! if (clcw(i,k) .gt. -999.0) then
-! cliw(i,k) = max(0.,cliw(i,k) + tem * tem1) ! ice
-! clcw(i,k) = max(0.,clcw(i,k) + tem *(1.0-tem1)) ! water
-! else
-! cliw(i,k) = max(0.,cliw(i,k) + tem)
-! endif
-!
-! enddo
!> - FCT treats subsidence effect to cloud ice/water (begin)
dp=100.*(p2d(i,k)-p2d(i,k+1))
@@ -1041,8 +1004,8 @@ subroutine cu_c3_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,&
gdc(i,16,10)=pret(i)*3600.
maxupmf(i)=0.
- if(forcing(i,6).gt.0.)then
- maxupmf(i)=maxval(xmb(i)*zu(i,kts:ktf)/forcing(i,6))
+ if(forcing2(i,6).gt.0.)then
+ maxupmf(i)=maxval(xmb(i)*zu(i,kts:ktf)/forcing2(i,6))
endif
if(ktop(i).gt.2 .and.pret(i).gt.0.)dt_mf(i,ktop(i)-1)=ud_mf(i,ktop(i))
diff --git a/physics/cu_c3_driver_post.F90 b/physics/cu_c3_driver_post.F90
index 74957a6b2..d5d2dee3b 100644
--- a/physics/cu_c3_driver_post.F90
+++ b/physics/cu_c3_driver_post.F90
@@ -66,20 +66,19 @@ subroutine cu_c3_driver_post_run (im, km, t, q, prevst, prevsq, cactiv, cactiv_m
conv_act_m(i)=0.0
endif
! reflectivity parameterization for parameterized convection (reference:Unipost MDLFLD.f)
- if(sqrt(garea(i)).lt.6500.)then
ze = 0.0
ze_conv = 0.0
dbz_sum = 0.0
- cuprate = raincv(i) * 3600.0 / dt ! cu precip rate (mm/h)
- ze_conv = 300.0 * cuprate**1.4
- if (maxupmf(i).gt.0.05) then
+ cuprate = 1.e3*raincv(i) * 3600.0 / dt ! cu precip rate (mm/h)
+ if(cuprate .lt. 0.05) cuprate=0.
+ ze_conv = 300.0 * cuprate**1.5
+ if (maxupmf(i).gt.0.1 .and. cuprate.gt.0.) then
do k = 1, km
ze = 10._kind_phys ** (0.1 * refl_10cm(i,k))
dbz_sum = max(dbzmin, 10.0 * log10(ze + ze_conv))
refl_10cm(i,k) = dbz_sum
enddo
endif
- endif
enddo
!$acc end kernels
diff --git a/physics/cu_c3_sh.F90 b/physics/cu_c3_sh.F90
index 0ea0f28ae..a79e1dfcf 100644
--- a/physics/cu_c3_sh.F90
+++ b/physics/cu_c3_sh.F90
@@ -6,12 +6,12 @@ module cu_c3_sh
use progsigma, only : progsigma_calc
!real(kind=kind_phys), parameter:: c1_shal=0.0015! .0005
- real(kind=kind_phys), parameter:: c1_shal=0. !0.005! .0005
real(kind=kind_phys), parameter:: g =9.81
real(kind=kind_phys), parameter:: cp =1004.
real(kind=kind_phys), parameter:: xlv=2.5e6
real(kind=kind_phys), parameter:: r_v=461.
- real(kind=kind_phys), parameter:: c0_shal=.001
+ real(kind=kind_phys) :: c0_shal=.004
+ real(kind=kind_phys) :: c1_shal=0. !0.005! .0005
real(kind=kind_phys), parameter:: fluxtune=1.5
contains
@@ -95,23 +95,23 @@ subroutine cu_c3_sh_run ( &
! outq = output q tendency (per s)
! outqc = output qc tendency (per s)
! pre = output precip
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (inout ) :: &
cnvwt,outt,outq,outqc,cupclw,zuo,outu,outv
!$acc declare copy(cnvwt,outt,outq,outqc,cupclw,zuo,outu,outv)
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
tmf, qmicro, sigmain, forceqv_spechum
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (out ) :: &
xmb_out
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (inout ) :: &
ierr
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (out ) :: &
kbcon,ktop,k22
- integer, dimension (its:ite) &
+ integer, dimension (its:) &
,intent (in ) :: &
kpbl,tropics
!$acc declare copyout(xmb_out,kbcon,ktop,k22) copyin(kpbl,tropics) copy(ierr)
@@ -119,13 +119,13 @@ subroutine cu_c3_sh_run ( &
! basic environmental input includes a flag (ierr) to turn off
! convection for this call only and at that particular gridpoint
!
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (in ) :: &
t,po,tn,dhdt,rho,us,vs,delp
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (inout) :: &
q,qo
- real(kind=kind_phys), dimension (its:ite) &
+ real(kind=kind_phys), dimension (its:) &
,intent (in ) :: &
xland,z1,psur,hfx,qfx,dx
@@ -133,7 +133,7 @@ subroutine cu_c3_sh_run ( &
,intent (in ) :: &
dtime,tcrit,fv,r_d
!$acc declare sigmaout
- real(kind=kind_phys), dimension (its:ite,kts:kte) &
+ real(kind=kind_phys), dimension (its:,kts:) &
,intent (out) :: &
sigmaout
@@ -245,7 +245,7 @@ subroutine cu_c3_sh_run ( &
real(kind=kind_phys) buo_flux,pgeoh,dp,entup,detup,totmas
real(kind=kind_phys) xff_shal(3),blqe,xkshal
- character*50 :: ierrc(its:ite)
+ character*50 :: ierrc(its:)
real(kind=kind_phys), dimension (its:ite,kts:kte) :: &
up_massentr,up_massdetr,up_massentro,up_massdetro,up_massentru,up_massdetru
!$acc declare create(up_massentr,up_massdetr,up_massentro,up_massdetro,up_massentru,up_massdetru)
@@ -274,6 +274,8 @@ subroutine cu_c3_sh_run ( &
ktopx(i)=0
if(xland(i).gt.1.5 .or. xland(i).lt.0.5)then
xland1(i)=0
+ c0_shal=.001
+ c1_shal=.001
! ierr(i)=100
endif
pre(i)=0.
@@ -669,11 +671,11 @@ subroutine cu_c3_sh_run ( &
if(qco(i,k)>=trash ) then
dz=z_cup(i,k)-z_cup(i,k-1)
! cloud liquid water
- c1d(i,k)=.02*up_massdetr(i,k-1)
+ c1d(i,k)=c1_shal! 0. !.02*up_massdetr(i,k-1)
qrco(i,k)= (qco(i,k)-trash)/(1.+(c0_shal+c1d(i,k))*dz)
if(qrco(i,k).lt.0.)then ! hli new test 02/12/19
qrco(i,k)=0.
- c1d(i,k)=0.
+ !c1d(i,k)=0.
endif
pwo(i,k)=c0_shal*dz*qrco(i,k)*zuo(i,k)
clw_all(i,k)=qco(i,k)-trash !LB total cloud before rain and detrain
diff --git a/physics/cu_gf_deep.F90 b/physics/cu_gf_deep.F90
index 67dd9bd3f..0d1fc68c7 100644
--- a/physics/cu_gf_deep.F90
+++ b/physics/cu_gf_deep.F90
@@ -28,6 +28,7 @@ module cu_gf_deep
integer, parameter :: autoconv=1 !2
integer, parameter :: aeroevap=1 !3
real(kind=kind_phys), parameter :: scav_factor = 0.5
+
real(kind=kind_phys), parameter :: dx_thresh = 6500.
!> still 16 ensembles for clousres
integer, parameter:: maxens3=16
@@ -4707,11 +4708,10 @@ subroutine get_zu_zd_pdf_fim(kklev,p,rand_vmas,zubeg,ipr,xland,zuh2,draft,ierr,k
if(draft == 1) then
lev_start=min(.9,.1+csum*.013)
kb_adj=max(kb,2)
- tunning=max(p(kklev+1),.5*(p(kpbli)+p(kt)))
- tunning=p(kklev)
-! tunning=p(kklev+1) !p(kpbli+1) !p(kklev) !p(kt)+(p(kpbli)-p(kt))*lev_start
-! tunning=.5*(p(kb_adj)+p(kt)) !p(kpbli+1) !p(kklev) !p(kt)+(p(kpbli)-p(kt))*lev_start
+! trash is the depth of the cloud
trash=-p(kt)+p(kb_adj)
+ tunning=p(kklev)
+ if(rand_vmas.ne.0.) tunning=p(kklev-1)+.1*rand_vmas*trash
beta_deep=1.3 +(1.-trash/1200.)
tunning =min(0.95, (tunning-p(kb_adj))/(p(kt)-p(kb_adj))) !=.6
tunning =max(0.02, tunning)
diff --git a/physics/cu_gf_driver.F90 b/physics/cu_gf_driver.F90
index f82569b99..d85b7ac52 100644
--- a/physics/cu_gf_driver.F90
+++ b/physics/cu_gf_driver.F90
@@ -67,6 +67,7 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,&
fhour,fh_dfi_radar,ix_dfi_radar,num_dfi_radar,cap_suppress, &
dfi_radar_max_intervals,ldiag3d,qci_conv,do_cap_suppress, &
maxupmf,maxMF,do_mynnedmf,ichoice_in,ichoicem_in,ichoice_s_in, &
+ spp_cu_deep,spp_wts_cu_deep, &
errmsg,errflg)
!-------------------------------------------------------------
implicit none
@@ -80,6 +81,10 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,&
integer :: ichoice=0 ! 0 2 5 13 8
integer :: ichoicem=13 ! 0 2 5 13
integer :: ichoice_s=3 ! 0 1 2 3
+ integer, intent(in) :: spp_cu_deep ! flag for using SPP perturbations
+ real(kind_phys), dimension(:,:), intent(in) :: &
+ & spp_wts_cu_deep
+ real(kind=kind_phys) :: spp_wts_cu_deep_tmp
logical, intent(in) :: do_cap_suppress
real(kind=kind_phys), parameter :: aodc0=0.14
@@ -313,9 +318,18 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,&
! these should be coming in from outside
!
! cactiv(:) = 0
- rand_mom(:) = 0.
- rand_vmas(:) = 0.
- rand_clos(:,:) = 0.
+ if (spp_cu_deep == 0) then
+ rand_mom(:) = 0.
+ rand_vmas(:) = 0.
+ rand_clos(:,:) = 0.
+ else
+ do i=1,im
+ spp_wts_cu_deep_tmp=min(max(-1.0_kind_phys, spp_wts_cu_deep(i,1)),1.0_kind_phys)
+ rand_mom(i) = spp_wts_cu_deep_tmp
+ rand_vmas(i) = spp_wts_cu_deep_tmp
+ rand_clos(i,:) = spp_wts_cu_deep_tmp
+ end do
+ end if
!$acc end kernels
!
its=1
@@ -630,7 +644,6 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,&
enddo
!$acc end kernels
if (dx(its)<6500.) then
- ichoice=10
imid_gf=0
endif
!
@@ -734,7 +747,7 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,&
,rand_mom & ! for stochastics mom, if temporal and spatial patterns exist
,rand_vmas & ! for stochastics vertmass, if temporal and spatial patterns exist
,rand_clos & ! for stochastics closures, if temporal and spatial patterns exist
- ,0 & ! flag to what you want perturbed
+ ,spp_cu_deep & ! flag to what you want perturbed
! 1 = momentum transport
! 2 = normalized vertical mass flux profile
! 3 = closures
@@ -816,7 +829,7 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,&
,rand_mom & ! for stochastics mom, if temporal and spatial patterns exist
,rand_vmas & ! for stochastics vertmass, if temporal and spatial patterns exist
,rand_clos & ! for stochastics closures, if temporal and spatial patterns exist
- ,0 & ! flag to what you want perturbed
+ ,spp_cu_deep & ! flag to what you want perturbed
! 1 = momentum transport
! 2 = normalized vertical mass flux profile
! 3 = closures
@@ -914,38 +927,6 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,&
!gdc(i,k,8)=(outq(i,k))*86400.*xlv/cp
gdc(i,k,8)=(outqm(i,k)+outqs(i,k)+outq(i,k))*86400.*xlv/cp
gdc(i,k,9)=gdc(i,k,2)+gdc(i,k,3)+gdc(i,k,4)
-!
-!> - Calculate subsidence effect on clw
-!
-! dsubclw=0.
-! dsubclwm=0.
-! dsubclws=0.
-! dp=100.*(p2d(i,k)-p2d(i,k+1))
-! if (clcw(i,k) .gt. -999.0 .and. clcw(i,k+1) .gt. -999.0 )then
-! clwtot = cliw(i,k) + clcw(i,k)
-! clwtot1= cliw(i,k+1) + clcw(i,k+1)
-! dsubclw=((-edt(i)*zd(i,k+1)+zu(i,k+1))*clwtot1 &
-! -(-edt(i)*zd(i,k) +zu(i,k)) *clwtot )*g/dp
-! dsubclwm=((-edtm(i)*zdm(i,k+1)+zum(i,k+1))*clwtot1 &
-! -(-edtm(i)*zdm(i,k) +zum(i,k)) *clwtot )*g/dp
-! dsubclws=(zus(i,k+1)*clwtot1-zus(i,k)*clwtot)*g/dp
-! dsubclw=dsubclw+(zu(i,k+1)*clwtot1-zu(i,k)*clwtot)*g/dp
-! dsubclwm=dsubclwm+(zum(i,k+1)*clwtot1-zum(i,k)*clwtot)*g/dp
-! dsubclws=dsubclws+(zus(i,k+1)*clwtot1-zus(i,k)*clwtot)*g/dp
-! endif
-! tem = dt*(outqcs(i,k)*cutens(i)+outqc(i,k)*cuten(i) &
-! +outqcm(i,k)*cutenm(i) &
-! +dsubclw*xmb(i)+dsubclws*xmbs(i)+dsubclwm*xmbm(i) &
-! )
-! tem1 = max(0.0, min(1.0, (tcr-t(i,k))*tcrf))
-! if (clcw(i,k) .gt. -999.0) then
-! cliw(i,k) = max(0.,cliw(i,k) + tem * tem1) ! ice
-! clcw(i,k) = max(0.,clcw(i,k) + tem *(1.0-tem1)) ! water
-! else
-! cliw(i,k) = max(0.,cliw(i,k) + tem)
-! endif
-!
-! enddo
!> - FCT treats subsidence effect to cloud ice/water (begin)
dp=100.*(p2d(i,k)-p2d(i,k+1))
@@ -1001,8 +982,8 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,&
gdc(i,16,10)=pret(i)*3600.
maxupmf(i)=0.
- if(forcing(i,6).gt.0.)then
- maxupmf(i)=maxval(xmb(i)*zu(i,kts:ktf)/forcing(i,6))
+ if(forcing2(i,6).gt.0.)then
+ maxupmf(i)=maxval(xmb(i)*zu(i,kts:ktf)/forcing2(i,6))
endif
if(ktop(i).gt.2 .and.pret(i).gt.0.)dt_mf(i,ktop(i)-1)=ud_mf(i,ktop(i))
diff --git a/physics/cu_gf_driver.meta b/physics/cu_gf_driver.meta
index 8b1a46e2d..08e9de201 100644
--- a/physics/cu_gf_driver.meta
+++ b/physics/cu_gf_driver.meta
@@ -597,6 +597,21 @@
dimensions = ()
type = integer
intent = in
+[spp_wts_cu_deep]
+ standard_name = spp_weights_for_cu_deep_scheme
+ long_name = spp weights for cu deep scheme
+ units = 1
+ dimensions = (horizontal_loop_extent,vertical_layer_dimension)
+ type = real
+ kind = kind_phys
+ intent = in
+[spp_cu_deep]
+ standard_name = control_for_deep_convection_spp_perturbations
+ long_name = control for deep convection spp perturbations
+ units = count
+ dimensions = ()
+ type = integer
+ intent = in
[errmsg]
standard_name = ccpp_error_message
long_name = error message for error handling in CCPP
diff --git a/physics/cu_gf_driver_post.F90 b/physics/cu_gf_driver_post.F90
index 56da0feba..5adf3ac42 100644
--- a/physics/cu_gf_driver_post.F90
+++ b/physics/cu_gf_driver_post.F90
@@ -66,20 +66,19 @@ subroutine cu_gf_driver_post_run (im, km, t, q, prevst, prevsq, cactiv, cactiv_m
conv_act_m(i)=0.0
endif
! reflectivity parameterization for parameterized convection (reference:Unipost MDLFLD.f)
- if(sqrt(garea(i)).lt.6500.)then
ze = 0.0
ze_conv = 0.0
dbz_sum = 0.0
- cuprate = raincv(i) * 3600.0 / dt ! cu precip rate (mm/h)
- ze_conv = 300.0 * cuprate**1.4
- if (maxupmf(i).gt.0.05) then
+ cuprate = 1.e3*raincv(i) * 3600.0 / dt ! cu precip rate (mm/h)
+ if(cuprate .lt. 0.05) cuprate=0.
+ ze_conv = 300.0 * cuprate**1.5
+ if (maxupmf(i).gt.0.1 .and. cuprate.gt.0.) then
do k = 1, km
ze = 10._kind_phys ** (0.1 * refl_10cm(i,k))
dbz_sum = max(dbzmin, 10.0 * log10(ze + ze_conv))
refl_10cm(i,k) = dbz_sum
enddo
endif
- endif
enddo
!$acc end kernels
diff --git a/physics/docs/ccpp_doxyfile b/physics/docs/ccpp_doxyfile
index 08dce3599..b4ca66424 100644
--- a/physics/docs/ccpp_doxyfile
+++ b/physics/docs/ccpp_doxyfile
@@ -115,7 +115,7 @@ WARN_LOGFILE =
#---------------------------------------------------------------------------
INPUT = pdftxt/mainpage.txt \
- pdftxt/all_shemes_list.txt \
+ pdftxt/all_schemes_list.txt \
pdftxt/GFS_v16_suite.txt \
pdftxt/GFS_v17_p8_suite.txt \
pdftxt/RAP_suite.txt \
diff --git a/physics/docs/ccppsrw_doxyfile b/physics/docs/ccppsrw_doxyfile
index 7edc44bad..9548d9c3a 100644
--- a/physics/docs/ccppsrw_doxyfile
+++ b/physics/docs/ccppsrw_doxyfile
@@ -1,8 +1,8 @@
# Doxyfile 1.9.3
DOXYFILE_ENCODING = UTF-8
-PROJECT_NAME = "CCPP Scidoc for SRW v2.1.0"
-PROJECT_NUMBER = "SRW v2.1.0"
+PROJECT_NAME = "CCPP SciDoc for UFS-SRW v3.0.0"
+PROJECT_NUMBER = "SRW v3.0.0"
PROJECT_BRIEF = "Common Community Physics Package Developed at DTC"
PROJECT_LOGO = img/dtc_logo.png
OUTPUT_DIRECTORY = doc
@@ -115,9 +115,10 @@ WARN_LOGFILE =
#---------------------------------------------------------------------------
INPUT = pdftxt/SRW_mainpage.txt \
- pdftxt/SRW_all_shemes_list.txt \
+ pdftxt/SRW_all_schemes_list.txt \
pdftxt/GFS_v16_suite.txt \
pdftxt/HRRR_suite.txt \
+ pdftxt/RAP_suite.txt \
pdftxt/RRFS_v1beta_suite.txt \
pdftxt/WoFS_v0_suite.txt \
pdftxt/RRFS_SGSCLOUD.txt \
@@ -144,6 +145,7 @@ INPUT = pdftxt/SRW_mainpage.txt \
pdftxt/RUCLSM.txt \
pdftxt/THOMPSON.txt \
pdftxt/suite_input.nml.txt \
+ pdftxt/CLM_LAKE.txt \
pdftxt/GFS_SPP.txt \
../fv_sat_adj.F90 \
../GFS_time_vary_pre.fv3.F90 \
@@ -206,6 +208,7 @@ INPUT = pdftxt/SRW_mainpage.txt \
../sfc_nst_pre.f \
../sfc_nst_post.f \
../sfc_ocean.F \
+ ../clm_lake.f90 \
../module_nst_model.f90 \
../module_nst_parameters.f90 \
../module_nst_water_prop.f90 \
@@ -283,7 +286,6 @@ INPUT = pdftxt/SRW_mainpage.txt \
../mp_nssl.F90 \
../module_mp_nssl_2mom.F90 \
../funcphys.f90 \
- ../physparam.f \
../physcons.F90 \
../radcons.f90 \
../mersenne_twister.f \
@@ -302,7 +304,7 @@ EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS =
-EXAMPLE_PATH = pdftxt/RE210 \
+EXAMPLE_PATH = pdftxt/RE300 \
doc/html
EXAMPLE_PATTERNS =
EXAMPLE_RECURSIVE = NO
@@ -539,7 +541,7 @@ DIRECTORY_GRAPH = YES
DIR_GRAPH_MAX_DEPTH = 1
DOT_IMAGE_FORMAT = SVG
INTERACTIVE_SVG = NO
-DOT_PATH =
+DOT_PATH =
DOTFILE_DIRS =
MSCFILE_DIRS =
DIAFILE_DIRS =
diff --git a/physics/docs/library.bib b/physics/docs/library.bib
index b6109b12c..34bb54e8f 100644
--- a/physics/docs/library.bib
+++ b/physics/docs/library.bib
@@ -1,13 +1,176 @@
%% This BibTeX bibliography file was created using BibDesk.
%% https://bibdesk.sourceforge.io/
-%% Created for Man Zhang at 2022-10-13 16:15:17 -0600
+%% Created for Man Zhang at 2023-06-28 14:13:48 -0600
%% Saved with string encoding Unicode (UTF-8)
+@article{Chen_2022,
+ author = {Xiaomin Chen and George H. Bryan and Andrew Hazelton and Frank D. Marks and Pat Fitzpatrick},
+ date-added = {2023-06-28 14:13:19 -0600},
+ date-modified = {2023-06-28 14:13:19 -0600},
+ doi = {10.1175/waf-d-21-0168.1},
+ journal = {Weather and Forecasting},
+ month = {jun},
+ number = {6},
+ pages = {935--951},
+ publisher = {American Meteorological Society},
+ title = {Evaluation and Improvement of a {TKE}-Based Eddy-Diffusivity Mass-Flux ({EDMF}) Planetary Boundary Layer Scheme in Hurricane Conditions},
+ url = {https://doi.org/10.1175%2Fwaf-d-21-0168.1},
+ volume = {37},
+ year = 2022,
+ bdsk-url-1 = {https://doi.org/10.1175%2Fwaf-d-21-0168.1},
+ bdsk-url-2 = {https://doi.org/10.1175/waf-d-21-0168.1}}
+
+@article{Lin_2022,
+ author = {Jialin Lin and Taotao Qian and Peter Bechtold and Georg Grell and Guang J. Zhang and Ping Zhu and Saulo R. Freitas and Hannah Barnes and Jongil Han},
+ date-added = {2023-06-07 10:16:46 -0600},
+ date-modified = {2023-06-07 10:16:46 -0600},
+ doi = {10.1080/07055900.2022.2082915},
+ journal = {Atmosphere-Ocean},
+ month = {jul},
+ number = {3-4},
+ pages = {422--476},
+ publisher = {Informa {UK} Limited},
+ title = {Atmospheric Convection},
+ url = {https://doi.org/10.1080%2F07055900.2022.2082915},
+ volume = {60},
+ year = 2022,
+ bdsk-url-1 = {https://doi.org/10.1080%2F07055900.2022.2082915},
+ bdsk-url-2 = {https://doi.org/10.1080/07055900.2022.2082915}}
+
+@techreport{He_2023,
+ author = {He, Cenlin and Valayamkunnath, Prasanth and Barlage, Michael and Chen, Fei and Gochis, David and Cabell, Ryan and Schneider, Tim and Rasmussen, Roy and Niu, Guo-Yue and Yang, Zong-Liang and Niyogi, Dev and Ek, Michael},
+ date-added = {2023-06-06 12:37:33 -0600},
+ date-modified = {2023-06-06 12:39:16 -0600},
+ doi = {10.5065/EW8G-YR95},
+ publisher = {NCAR/UCAR},
+ title = {The Community Noah-MP Land Surface Modeling System Technical Description Version 5.0},
+ url = {https://opensky.ucar.edu/islandora/object/technotes:599},
+ year = {2023},
+ bdsk-url-1 = {https://opensky.ucar.edu/islandora/object/technotes:599},
+ bdsk-url-2 = {https://doi.org/10.5065/EW8G-YR95}}
+
+@article{Niu_2007,
+ author = {Guo-Yue Niu and Zong-Liang Yang},
+ date-added = {2023-06-05 14:03:26 -0600},
+ date-modified = {2023-06-05 14:03:26 -0600},
+ doi = {10.1029/2007jd008674},
+ journal = {Journal of Geophysical Research},
+ month = {nov},
+ number = {D21},
+ publisher = {American Geophysical Union ({AGU})},
+ title = {An observation-based formulation of snow cover fraction and its evaluation over large North American river basins},
+ url = {https://doi.org/10.1029%2F2007jd008674},
+ volume = {112},
+ year = 2007,
+ bdsk-url-1 = {https://doi.org/10.1029%2F2007jd008674},
+ bdsk-url-2 = {https://doi.org/10.1029/2007jd008674}}
+
+@techreport{Oleson2013,
+ author = {Oleson, Keith and Lawrence, David and Bonan, Gordon and Drewniak, Beth and Huang, Maoyi and Koven, Charles and Levis, Samuel and Li, Fang and Riley, William and Subin, Zachary and Swenson, Sean and Thornton, Peter and Bozbiyik, Anil and Fisher, Rosie and Heald, Colette and Kluzek, Erik and Lamarque, Jean-Francois and Lawrence, Peter and Leung, L and Lipscomb, William and Muszala, Stefan and Ricciuto, Daniel and Sacks, William and Sun, Ying and Tang, Jinyun and Yang, Zong-Liang},
+ date-added = {2023-06-05 09:28:16 -0600},
+ date-modified = {2023-06-05 09:30:30 -0600},
+ doi = {10.5065/D6RR1W7M},
+ keywords = {Land surface model, Climate model, Biogeochemistry, Biogeophysics},
+ language = {en},
+ publisher = {UCAR/NCAR},
+ title = {Technical description of version 4.5 of the Community Land Model (CLM)},
+ url = {http://opensky.ucar.edu/islandora/object/technotes:515},
+ year = {2013},
+ bdsk-url-1 = {http://opensky.ucar.edu/islandora/object/technotes:515},
+ bdsk-url-2 = {https://doi.org/10.5065/D6RR1W7M}}
+
+@article{Kourzeneva_2012,
+ author = {Ekaterina Kourzeneva and Hermann Asensio and Eric Martin and Stephanie Faroux},
+ date-added = {2023-05-30 11:29:07 -0600},
+ date-modified = {2023-05-30 11:29:07 -0600},
+ doi = {10.3402/tellusa.v64i0.15640},
+ journal = {Tellus A: Dynamic Meteorology and Oceanography},
+ month = {dec},
+ number = {1},
+ pages = {15640},
+ publisher = {Stockholm University Press},
+ title = {Global gridded dataset of lake coverage and lake depth for use in numerical weather prediction and climate modelling},
+ url = {https://doi.org/10.3402%2Ftellusa.v64i0.15640},
+ volume = {64},
+ year = 2012,
+ bdsk-url-1 = {https://doi.org/10.3402%2Ftellusa.v64i0.15640},
+ bdsk-url-2 = {https://doi.org/10.3402/tellusa.v64i0.15640}}
+
+@article{Gu2015,
+ abstract = {A one-dimensional (1-D) physically based lake model was coupled to the Weather Research and Forecasting (WRF) model version 3.2 developed by the National Center for Atmospheric Research to dynamically simulate physical processes of lakes and their effects on weather and climate at local and regional scales. Our study area is focused on the Great Lakes. This coupled model realistically reproduces the lake surface temperature (LST) at a buoy station in a shallow lake (Lake Erie) while generating strong LST biases ranging from −20 to 20 {\textdegree}C at a buoy station in a deep lake (Lake Superior). Through many sensitivity tests, we find that the biases in the deep lake LST simulations result from the drastic underestimation of heat transfer between the lower and upper parts of the lake through unrealistic eddy diffusion. Additional tests were made to calibrate the eddy diffusivity in WRF-Lake. It is found that when this parameter is multiplied by a factor ranging from 102 to 105 for various lake depths deeper than 15 m, the LST simulations for the deep lake buoy station show good agreement with observations, and the bias range reduces to {\textpm}4 {\textdegree}C. Essentially, the enlarged eddy diffusivity strengthens heat transfer within the lake columns in the deep lake, which is significantly underestimated in the lake model without calibration. Validation simulations with the calibrated eddy diffusivity were carried out for the whole of Lake Superior and Lake Erie. The LST simulations still have a substantial bias reduction when compared with those produced with the original eddy diffusivity, indicating that the calibrated parameter is representative. In addition, the improved 1-D lake model with WRF reasonably reproduces the remotely sensed LST geographic distribution.},
+ author = {Gu, Hongping and Jin, Jiming and Wu, Yihua and Ek, Michael B. and Subin, Zachary M.},
+ date-added = {2023-05-24 14:45:55 -0600},
+ date-modified = {2023-05-24 14:45:55 -0600},
+ day = {01},
+ doi = {10.1007/s10584-013-0978-y},
+ issn = {1573-1480},
+ journal = {Climatic Change},
+ month = {Apr},
+ number = {3},
+ pages = {471--483},
+ title = {Calibration and validation of lake surface temperature simulations with the coupled WRF-lake model},
+ url = {https://link.springer.com/content/pdf/10.1007/s10584-013-0978-y.pdf},
+ volume = {129},
+ year = {2015},
+ bdsk-url-1 = {https://link.springer.com/content/pdf/10.1007/s10584-013-0978-y.pdf},
+ bdsk-url-2 = {https://doi.org/10.1007/s10584-013-0978-y}}
+
+@article{Subin_2012,
+ author = {Zachary M. Subin and William J. Riley and Dmitrii Mironov},
+ date-added = {2023-05-24 14:35:27 -0600},
+ date-modified = {2023-05-24 14:35:27 -0600},
+ doi = {10.1029/2011ms000072},
+ journal = {Journal of Advances in Modeling Earth Systems},
+ month = {feb},
+ publisher = {American Geophysical Union ({AGU})},
+ title = {An improved lake model for climate simulations: Model structure, evaluation, and sensitivity analyses in {CESM}1},
+ url = {https://doi.org/10.1029%2F2011ms000072},
+ volume = {4},
+ year = 2012,
+ bdsk-url-1 = {https://doi.org/10.1029%2F2011ms000072},
+ bdsk-url-2 = {https://doi.org/10.1029/2011ms000072}}
+
+@article{Lawrence_2019,
+ author = {David M. Lawrence and Rosie A. Fisher and Charles D. Koven and Keith W. Oleson and Sean C. Swenson and Gordon Bonan and Nathan Collier and Bardan Ghimire and Leo van Kampenhout and Daniel Kennedy and Erik Kluzek and Peter J. Lawrence and Fang Li and Hongyi Li and Danica Lombardozzi and William J. Riley and William J. Sacks and Mingjie Shi and Mariana Vertenstein and William R. Wieder and Chonggang Xu and Ashehad A. Ali and Andrew M. Badger and Gautam Bisht and Michiel van den Broeke and Michael A. Brunke and Sean P. Burns and Jonathan Buzan and Martyn Clark and Anthony Craig and Kyla Dahlin and Beth Drewniak and Joshua B. Fisher and Mark Flanner and Andrew M. Fox and Pierre Gentine and Forrest Hoffman and Gretchen Keppel-Aleks and Ryan Knox and Sanjiv Kumar and Jan Lenaerts and L. Ruby Leung and William H. Lipscomb and Yaqiong Lu and Ashutosh Pandey and Jon D. Pelletier and Justin Perket and James T. Randerson and Daniel M. Ricciuto and Benjamin M. Sanderson and Andrew Slater and Zachary M. Subin and Jinyun Tang and R. Quinn Thomas and Maria Val Martin and Xubin Zeng},
+ date-added = {2023-05-24 14:34:12 -0600},
+ date-modified = {2023-05-24 14:34:12 -0600},
+ doi = {10.1029/2018ms001583},
+ journal = {Journal of Advances in Modeling Earth Systems},
+ month = {dec},
+ number = {12},
+ pages = {4245--4287},
+ publisher = {American Geophysical Union ({AGU})},
+ title = {The Community Land Model Version 5: Description of New Features, Benchmarking, and Impact of Forcing Uncertainty},
+ url = {https://doi.org/10.1029%2F2018ms001583},
+ volume = {11},
+ year = 2019,
+ bdsk-url-1 = {https://doi.org/10.1029%2F2018ms001583},
+ bdsk-url-2 = {https://doi.org/10.1029/2018ms001583}}
+
+@article{cite-key,
+ date-added = {2023-05-24 11:18:09 -0600},
+ date-modified = {2023-05-24 11:18:09 -0600}}
+
+@article{gmd-15-6659-2022,
+ author = {Benjamin, S. G. and Smirnova, T. G. and James, E. P. and Anderson, E. J. and Fujisaki-Manome, A. and Kelley, J. G. W. and Mann, G. E. and Gronewold, A. D. and Chu, P. and Kelley, S. G. T.},
+ date-added = {2023-05-24 10:51:47 -0600},
+ date-modified = {2023-05-24 10:51:47 -0600},
+ doi = {10.5194/gmd-15-6659-2022},
+ journal = {Geoscientific Model Development},
+ number = {17},
+ pages = {6659--6676},
+ title = {Inland lake temperature initialization via coupled cycling with atmospheric data assimilation},
+ url = {https://gmd.copernicus.org/articles/15/6659/2022/},
+ volume = {15},
+ year = {2022},
+ bdsk-url-1 = {https://gmd.copernicus.org/articles/15/6659/2022/},
+ bdsk-url-2 = {https://doi.org/10.5194/gmd-15-6659-2022}}
+
@article{Chaboureau_2005,
author = {Jean-Pierre Chaboureau},
date-added = {2022-10-13 16:14:54 -0600},
@@ -3663,6 +3826,18 @@ @article{tsiringakis_et_al_2017
year = {2017},
bdsk-url-1 = {https://doi.org/10.1002/qj.3021}}
+@article{sturm_1997,
+ author = {Sturm, Matthew and Holmgren, Jon and K{\"o}nig, Max and Morris, Kim},
+ doi = {10.3189/S0022143000002781},
+ journal = {Journal of Glaciology},
+ number = {143},
+ pages = {26--41},
+ publisher = {Cambridge University Press},
+ title = {The thermal conductivity of seasonal snow},
+ volume = {43},
+ year = {1997},
+ bdsk-url-1 = {https://doi.org/10.3189/S0022143000002781}}
+
@comment{BibDesk Static Groups{
diff --git a/physics/docs/pdftxt/CLM_LAKE.txt b/physics/docs/pdftxt/CLM_LAKE.txt
new file mode 100644
index 000000000..498797511
--- /dev/null
+++ b/physics/docs/pdftxt/CLM_LAKE.txt
@@ -0,0 +1,60 @@
+/**
+\page CLM_LAKE_model CLM Lake Model
+\section des_clmlake Description
+
+The Community Land Model (CLM) lake model is a multi-level one-dimensional lake model that has been implemented within the operational 3-km HRRR and
+13-km RAP for small lakes (Benjamin et al. (2022) \cite gmd-15-6659-2022). This implementation is from the Community Land Model version 4.5 (Oleson et al. (2013) \cite Oleson2013).
+Subin et al. (2012) \cite Subin_2012 describe the 1-d CLM lake model as applied within the Community Earth System
+Model (CESM) as a component of the overall CESM CLM (Lawrence et al. (2019) \cite Lawrence_2019). Gu et al. (2015) \cite Gu2015
+describe the introduction of the CLM lake model into the WRF model and inital experiments using its 1-d solution for both
+lakes Superior (average depth of 147 m) and Erie (average depth of 19 m).
+
+The atmospheric inputs into the model are temperature, water vapor, horizontal wind components from the lowest atmospheric level
+and shortwave and longwave radiative fluxes. The CLM lake model then provides latent heat and sensible heat fluxes back to the
+atmosphere. It also computes 2-m temperature/moisture, skin temperature, lake temperature, ice fraction, ice thickness, snow water
+equivalent and snow depth. The CLM lake model divides the vertical lake profile into 10 layers driven by wind-driven eddies. The
+thickness of the top layer is fixed to 10-cm and the rest of the lake depth is divided evenly into the other 9 layers. Energy
+transfer (heat and kinetic energy) occurs between lake layers via eddy and molecular diffusion as a function of the vertical
+temperature gradient. The CLM lake model also uses a 10-layer soil model beneath the lake, a multi-layer ice formation model and
+up to 5-layer snow-on-ice model. Multiple layers in lake model have the potential to better represent vertical mixing processes
+in the lake.
+
+Testing of the CLM lake model within RAP/HRRR applications showed computational efficiency of the model with no change of even
+0.1% in run time. The lake/snow variables have to be continuously transfered within the CLM lake model from one forecast to another,
+constrained by the atmospheric data assimilation. The lake-cycling initialization in RAP/HRRR has been effective overall, owing to
+accurate hourly estimates of near-surface temperature, moisture and winds, and shortwave and longwave estimates provided to the 1-d CLM
+lake model every time step (Benjamin et al. (2022) \cite gmd-15-6659-2022). Cycling techniques showed improvements over initializing
+lake temperatures from the SST analysis, which is problematic for small water bodies. The improvements are particularly eminent during transition
+periods between cold and warm seasons, and in the regions with anomalous weather conditions. The CLM lake model has the potential
+to improve surface prediction in the vicinity of small lakes.
+
+The CLM lake model requires bathymetry for the lake points in the model domain. Grid points are assigned as lake points when the
+fraction of lake coverage in the grid cell exceeds 50% and when this point is disconnected from oceans. The lake water mask is
+therefore binary, set to either 1 or 0. This binary approach for models with higher horizontal resolution --- for example, 3-km resolution in
+in the UFS SRW App --- is capable of capturing the effect of lakes on regional heat and moisture fluxes.
+
+Lake depths for the RRFS lake configuration (Fig.1) are assigned from a global dataset provided by Kourzeneva et al.(2012) \cite Kourzeneva_2012,
+this dataset is referred to as GLOBv3 bathymetry in the UFS_UTL.
+
+@image html https://user-images.githubusercontent.com/12705538/250180794-76af93a2-a7ba-4e9a-9478-5657198862b8.png "Figure 1: Lake depths for lakes in the 3-km RRFS domain." width=600
+
+To cold-start the CLM lake model in regional configurations of the UFS:
+
+- Use the CLM option in the input.nml
+\n - lkm = 1
+\n - iopt_lake = 2
+- Lake temperature is initialized from interpolation between SST at the surface and \f$-4^oC\f$ at 50-m depth
+\n - A special case is for the Great Salt Lake, the temperature is limited with +/- 3 K from the bi-weekly climatology
+- Temperature for soil under the lake is initialized from bottom lake temperature at the top to the substrate soil temperature at the bottom of soil layer
+- Lake ice at the top level is initialized from the GFS ice concentration
+
+The differences of surface variables from the experimental RRFS 6-h forecast with/without CLM lake model are shown in Figure 2 for 2-m temperature and in Figure 3 for 2-m dewpoint.
+@image html https://user-images.githubusercontent.com/12705538/250180790-63159300-33f6-4b34-9e9c-b65885213c30.png "Figure 2: Differences of 2-m temperature between the RRFS coupled to the CLM model and the RRFS without CLM." width=600
+@image html https://user-images.githubusercontent.com/12705538/250180787-8fc9a820-5f80-4f06-b50a-88b2d20ebc53.png "Figure 3: Differences of 2-m dew point between the RRFS coupled to the CLM model and the RRFS without CLM." width=600
+
+
+
+\section intra_clmlake Intraphysics Communication
+- \ref arg_table_clm_lake_run
+
+*/
diff --git a/physics/docs/pdftxt/CU_GF_deep.txt b/physics/docs/pdftxt/CU_GF_deep.txt
index 92b8c3b7c..ca06666e5 100644
--- a/physics/docs/pdftxt/CU_GF_deep.txt
+++ b/physics/docs/pdftxt/CU_GF_deep.txt
@@ -3,44 +3,29 @@
\section gfcu_descrip Description
The Grell-Freitas (GF) scheme, as described in Grell and Freitas (2014) \cite grell_and_freitas_2014,
-Freitas et al. (2018) \cite freitas_et_al_2018, Freitas et al. (2021) \cite freitas_et_al_2021, and Lin et al. (2022)
-(under review) follows the mass flux approach published by Grell (1993) \cite grell_1993.
+Freitas et al. (2018) \cite freitas_et_al_2018, Freitas et al. (2021) \cite freitas_et_al_2021, and Lin et al. (2022) \cite Lin_2022
+follows the mass flux approach published by Grell (1993) \cite grell_1993.
Further developments by Grell and \f$D\acute{e}v\acute{e}nyi\f$ (2002) \cite Grell_2002 included implementing
-stochastics through allowing parameter perturbations. In GF1 scale awareness, and the aerosol dependence through rain generation (following
-Berry (1968) \cite berry_1968 and evaporation formulations (following Jiang et al. (2010) \cite Jiang_2010 ), depending on the
-cloud concentration nuclei at cloud base were added. FG included mixed phase physics impact, momentum transport (as in ECMWF),
- a diurnal cycle closure (Bechtold et al. (2014) \cite bechtold_et_al_2014 ), and a trimodal spectral size to simulate the interaction
-and transition from shallow, congestus and deep convection regimes. In order for this trimodal size spectrum to be
-accurately represented, GF's deep and shallow convective schemes must be run together.
-The vertical massflux distribution of shallow, congestus and
-deep convection regimes is characterized by Probability Density Functions (PDF's). The three PDF's are meant to represent the average
-statistical mass flux characteristic of deep, congestus, and shallow (respectively) plumes in the grid area. Each PDF therefore represents
-a spectrum of plumes within the grid box. Forcing is different for each characteristic type. Entrainment and detrainment are derived
-from the PDF's. The deep convection considers scale awareness (Arakawa et al. (2011) \cite Arakawa_2011 ), the congestus type convection
-as well as the shallow convection are not scale-aware. Aerosol dependence is implemented through dependence of rain generation and
-evaporation formulations depending on the cloud concentration nuclei at cloud base (Berry 1968 \cite berry_1968,
-Jiang et al.(2010) \cite Jiang_2010, and Lee and Feingold (2010) \cite lee_and_feingold_2010 ). Aerosol dependence is considered experimental and
-is turned off at this point. GF is able to transport tracers.
-
-A paper describing the latest changes and modifications is in process and will be submitted to GMD.
+stochastics through allowing parameter perturbations.
+The GF scheme includes mixed phase physics impact, momentum transport, a diurnal cycle closure (Bechtold et al. (2014) \cite bechtold_et_al_2014 ), and a trimodal spectral size to simulate the interaction and transition from shallow, congestus and deep convection regimes.
+The vertical mass flux distribution of shallow, congestus and deep convection regimes is characterized by Probability Density Functions (PDFs). The three PDFs are meant to represent the average statistical mass flux characteristic of deep, congestus, and shallow (respectively) plumes in the grid area. Each PDF therefore represents a spectrum of plumes within the grid box. Forcing is different for each characteristic type. Entrainment and detrainment are derived from the PDFs.
+The GF scheme takes into account aerosol dependence (considered experimental and not supported in this release), which is implemented through rain generation (following Berry (1968) \cite berry_1968 and evaporation formulations depending on the cloud concentration nuclei at cloud base (Jiang et al. (2010) \cite Jiang_2010), and Lee and Feingold (2010) \cite lee_and_feingold_2010). Wet scavenging is considered to add a memory impact. GF is able to transport tracers. Recently, GPU capabilities and cap suppressing (\p do_cap_suppress) based on radar data assimilation have been added, and they are used only for the RAP suite.
+
+The impacts of GF scheme in operational RAP/HRRR include: (a)uses mass-flux schemes, which are more physically realistic than (sounding) adjustment schemes;
+(b)takes parameterization uncertainty into account by allowing parameters from multiple convective schemes which can be perturbed
+internally or with temporal and spatial correlation patterns; (c)for higher resolutions (less than 10 km), in addition to scale awareness as in Arakawa et al. (2011) \cite Arakawa_2011 GF can transition as grid spacing decreases into a shallow convection scheme; (d)Coupled to the grid-scale precipitation and radiation schemes through passing of diagnosed cloud liquid and ice from simulated precipitating convective cloud and shallow convective clouds.
\section version_cugf_enh CCPP Physics Updates
-\version CCPP v6.0.0
-
-- GPU capabilities have been added
-- Cap suppressing (\p do_cap_suppress) based on radar data assimilation has been added. This is used only for the RAP suite
-- Some fixed parameters have been made scale-aware
-- Updated coupling between radiation and convection has been implemented
-
-\b Operational \b Impacts \b in \b RAP/HRRR
-
- - Uses mass-flux schemes, which are more physically realistic than (sounding) adjustment schemes
- - Takes parameterization uncertainty into account by allowing parameters from multiple convective schemes which can be perturbed
-internally or with temporal and spatial correlation patterns
- - For higher resolutions (less than 10 km), in addition to scale awareness as in Arakawa et al. (2011) \cite Arakawa_2011 GF can
-transition as grid spacing decreases into a shallow convection scheme
- - Coupled to the grid scale precipitation and radiation schemes through passing of diagnosed cloud liquid and ice from simulated
-precipitating convective cloud and shallow convective clouds
+
+\version UFS-SRW v3.0.0
+
+The Implementation of GF in RRFS prototypes
+- Updates for aerosol-awareness (experimental)
+- Scale-awareness is turned off when explicit microphysics is not active anywhere in the column
+- GF is completely turned off at grid points when MYNN produces shallow convection at that point
+- Radar reflectivity considers mass flux PDF as well as whether scale-awareness is turned on at the grid point in equation.
+
+The implementation of GF in HAFS is ongoing.
\section intra_rough_gf Intraphysics Communication
The GF scheme passes cloud hydrometeors to the grid-scale microphysics scheme (\ref THOMPSON ) through detrainment from each
diff --git a/physics/docs/pdftxt/GFS_NOAHMP.txt b/physics/docs/pdftxt/GFS_NOAHMP.txt
index bc2c58457..e48b7cafc 100644
--- a/physics/docs/pdftxt/GFS_NOAHMP.txt
+++ b/physics/docs/pdftxt/GFS_NOAHMP.txt
@@ -4,21 +4,15 @@
This implementation of the NoahMP Land Surface Model (LSM) is adapted from the version implemented in WRF v3.7 with additions by NOAA EMC staff to work with the UFS Atmosphere model. Authoritative documentation of the NoahMP scheme can be accessed at the following links:
-[University of Texas at Austin NoahMP Documentation](http://www.jsg.utexas.edu/noah-mp "University of Texas at Austin NoahMP Documentation")
+- Technical documentation freely available at He et al. (2023) \cite He_2023.
-[NCAR Research Application Laboratory NoahMP Documentation](https://ral.ucar.edu/solutions/products/noah-multiparameterization-land-surface-model-noah-mp-lsm "NCAR RAL NoahMP Documentation")
+- A primary reference for the NoahMP LSM is Niu et al. (2011) \cite niu_et_al_2011.
-A primary reference for the NoahMP LSM is Niu et al. (2011) \cite niu_et_al_2011.
-
-The CCPP interface to the NoahMP LSM is a driving software layer on top of the actual NoahMP LSM. During the run sequence, code organization is as follows:
-+ \ref noahmpdrv_run() calls
- + \ref transfer_mp_parameters()
- + \ref noahmp_options()
- + \ref noahmp_options_glacier() and noahmp_glacier() if over the ice vegetation type (glacier)
- + \ref noahmp_sflx() if over other vegetation types
- + \ref penman()
-
-Note that noahmp_glacer() and noahmp_sflx() are the actual NoahMP codes.
+\section noahmp_update CCPP Physics Updates
+\version UFS-SRW v3.0.0
+- As part of a larger-scale effort to unify how microphysics outputs (in particular snow) are used in the land models and outputs, an additional option for using the unified frozen precipitation fraction in NoahMP was added
+- Diagnostic 2-meter temperature and humidity are based on vegetation and bare-ground tiles
+- Bug fixes for GFS-based thermal roughness length scheme
\section intra_noahmp Intraphysics Communication
+ \ref arg_table_noahmpdrv_run
diff --git a/physics/docs/pdftxt/GFS_SAMFdeep.txt b/physics/docs/pdftxt/GFS_SAMFdeep.txt
index 346637b3b..1112cb05c 100644
--- a/physics/docs/pdftxt/GFS_SAMFdeep.txt
+++ b/physics/docs/pdftxt/GFS_SAMFdeep.txt
@@ -65,9 +65,6 @@
rain conversion rate, entrainment and detrainment rates, overshooting layers,
and maximum allowable cloudbase mass flux (as of June 2018).
-\section v6_enh CCPP Physics Updates
-\version CCPP v6.0.0
-
\subsection ca_page Cellular Automata Stochastic Convective Organization Scheme
\b Scientific \b Background
diff --git a/physics/docs/pdftxt/GFS_SATMEDMFVDIFQ.txt b/physics/docs/pdftxt/GFS_SATMEDMFVDIFQ.txt
index 4e00d7c3c..d5bc9489c 100644
--- a/physics/docs/pdftxt/GFS_SATMEDMFVDIFQ.txt
+++ b/physics/docs/pdftxt/GFS_SATMEDMFVDIFQ.txt
@@ -25,27 +25,34 @@ to take into account nonlocal transport by large eddies(mfpbltq.f)
- A new mass-flux paramterization for stratocumulus-top-induced turbulence mixing has been introduced (mfscuq.f; previously,
it was an eddy diffusion form)
- For local turbulence mixing, a TKE closure model is used.
-
-
-\section v6_pbl_enh CCPP Physics Updates
-\version CCPP v6.0.0
-
-- Wind shear effect in characteristic mixing length calculation is included, which
+- Wind shear effect in characteristic mixing length calculation is included, which
reduces the mixing length in a strong shear environment such as a hurricane.
-- To better predict surface inversion as well as capping inversion near the PBL top,
-background diffusivity in the inversion layers is reduced as a function of surface
+- To better predict surface inversion as well as capping inversion near the PBL top,
+background diffusivity in the inversion layers is reduced as a function of surface
roughness and green vegetation fraction.
-- To reduce the PBL overgrowth, the PBL updraft overshoot is not only limited by
-bulk Richardson number-based-PBL depth, but the virtual potential temperature at
-top of the surface layer rather than that at the model first layer is also used as
-the near-surface virtual potential temperature in the bulk-Richardson number
+- To reduce the PBL overgrowth, the PBL updraft overshoot is not only limited by
+bulk Richardson number-based PBL depth, but the virtual potential temperature at
+the top of the surface layer rather than that at the model first layer is also used as
+the near-surface virtual potential temperature in the bulk-Richardson number
computation. This helps to largely suppress the unrealistic widespread popcorn-like precipitation.
- Updraft entrainment rates for moisture, hydrometeors, and tracers are increased by about 30%.
-- A positive definite total variation diminishing (TVD) mass-flux transport scheme for moisture, hydrometeors,
+- A positive definite total variation diminishing (TVD) mass-flux transport scheme for moisture, hydrometeors,
and tracers and a method for removing negative tracer mixing ratio values have been implemented.
\sa NCEP Office Note 505 \cite https://doi.org/10.25923/cybh-w893 and 506 \cite https://doi.org/10.25923/5051-3r70
+
+\section v6_pbl_enh CCPP Physics Updates
+\version UFS-SRW v3.0.0
+- To reduce the negative hurricane intensity biases, a parameterization for environmental wind shear effect
+is included in the GFS TKE-EDMF PBL and cumulus schemes. In addition, the entrainment rates are enhanced
+proportional to the sub-cloud or PBL mean TKE (turbulent kinetic energy) when TKE is larger than a threshold
+value.
+
+- To enhance the underestimated CAPE forecasts in the GFS, the entrainment rate in the TKE-EDMF PBL scheme is
+increased as a function of vegetation fraction and surface roughness length.
+
+
\section intra_satmedmfvdifq Intraphysics Communication
- \ref arg_table_satmedmfvdifq_run
diff --git a/physics/docs/pdftxt/GFS_UGWPv0.txt b/physics/docs/pdftxt/GFS_UGWPv0.txt
index f2b3b143a..1b3f0166f 100644
--- a/physics/docs/pdftxt/GFS_UGWPv0.txt
+++ b/physics/docs/pdftxt/GFS_UGWPv0.txt
@@ -108,6 +108,52 @@ and dynamical instability of waves described by the linear
(Lindzen 1981 \cite lindzen_1981) and nonlinear
(Weinstock 1984 \cite weinstock_1984; Hines 1997 \cite hines_1997) saturation theories.
+\section ugwp_updates CCPP Physics Updates
+\version UFS-SRW v3.0.0
+
+We have added optional diagnostic outputs for the various tendencies supplied by the UGWP. They can be switched on by setting the two following input namelist variables equal to “.true.”: \p ldiag3d and \p ldiag_ugwp.
+
+The optional diagnostic outputs are:
+- \b dws3dt_ogw: time-averaged wind speed tendency due to mesoscale gravity wave drag
+- \b dws3dt_obl: time-averaged wind speed tendency due to blocking drag
+- \b dws3dt_oss: time-averaged wind speed tendency due to small-scale gravity wave drag
+- \b dws3dt_ofd: time-averaged wind speed tendency due to turbulent orographic form drag
+- \b ldu3dt_ogw: time-averaged x wind tendency due to mesoscale orographic gravity wave drag
+- \b ldu3dt_obl: time-averaged x wind tendency due to blocking drag
+- \b ldu3dt_oss: time-averaged x wind tendency due to small scale gravity wave drag
+- \b ldu3dt_ofd: time-averaged x wind tendency due to form drag
+- \b ldu3dt_ngw: time-averaged u momentum tendency due to non-stationary gravity wave drag
+- \b ldv3dt_ngw: time-averaged v momentum tendency due to non-stationary gravity wave drag
+- \b ldt3dt_ngw: time-averaged temperature tendency due to non-stationary gravity wave drag
+- \b dudt_ogw: instantaneous x wind tendency from mesoscale orographic gravity wave drag
+- \b dvdt_ogw: instantaneous y wind tendency from mesoscale orographic gravity wave drag
+- \b dudt_obl: instantaneous x wind tendency from blocking drag
+- \b dvdt_obl: instantaneous y wind tendency from blocking drag
+- \b dudt_oss: instantaneous x wind tendency from small scale GWD
+- \b dvdt_oss: instantaneous y wind tendency from small scale GWD
+- \b dudt_ofd: instantaneous x wind tendency from form drag
+- \b dvdt_ofd: instantaneous y wind tendency from form drag
+- \b du_ogwcol: instantaneous integrated x momentum flux from mesoscale orographic gravity wave drag
+- \b dv_ogwcol: instantaneous integrated y momentum flux from mesoscale orographic gravity wave drag
+- \b du_oblcol: instantaneous integrated x momentum flux from blocking drag
+- \b dv_oblcol: instantaneous integrated y momentum flux from blocking drag
+- \b du_osscol: instantaneous integrated x momentum flux from small scale gwd
+- \b dv_osscol: instantaneous integrated y momentum flux from small scale gwd
+- \b du_ofdcol: instantaneous integrated x momentum flux from form drag
+- \b dv_ofdcol: instantaneous integrated y momentum flux from form drag
+- \b du3_ogwcol: time-averaged surface x momentum flux from mesoscale orographic gravity wave drag
+- \b dv3_ogwcol: time-averaged surface y momentum flux from mesoscale orographic gravity wave drag
+- \b du3_oblcol: time-averaged surface x momentum flux from blocking drag
+- \b dv3_oblcol: time-averaged surface y momentum flux from blocking drag
+- \b du3_osscol: time-averaged surface x momentum flux from small scale gravity wave drag
+- \b dv3_osscol: time-averaged surface y momentum flux from small scale gravity wave drag
+- \b du3_ofdcol: time-averaged surface x momentum flux from form drag
+- \b dv3_ofdcol: time-averaged surface y momentum flux from form drag
+
+Note that the relevant diag_table entries for these variables are included in:
+ufs-weather-model/tests/parm/diag_table/diag_table_rap
+
+
\section intra_UGWPv0 Intraphysics Communication
- \ref arg_table_cires_ugwp_run
diff --git a/physics/docs/pdftxt/GFS_v16_suite.txt b/physics/docs/pdftxt/GFS_v16_suite.txt
index 11e997bf1..8966d6be8 100644
--- a/physics/docs/pdftxt/GFS_v16_suite.txt
+++ b/physics/docs/pdftxt/GFS_v16_suite.txt
@@ -25,9 +25,9 @@ National Centers for Environmental Prediction (NCEP) in 2021. The GFS_v16 suite
\section gfs16_nml_opt_des Namelist
\ref GFDL_cloud namelist options
-\snippet RE210/FV3_GFS_v16_input.nml GFDL_CLOUD_MP_NML
+\snippet RE300/FV3_GFS_v16_input.nml GFDL_CLOUD_MP_NML
Other namelist options
-\snippet RE210/FV3_GFS_v16_input.nml GFS_PHYSICS_NML
+\snippet RE300/FV3_GFS_v16_input.nml GFS_PHYSICS_NML
- nstf_name = \f$[2,0,0,0,0]^1 [2,1,0,0,0]^2\f$
- \f$^1\f$ NSST is on and coupled with spin up off
diff --git a/physics/docs/pdftxt/HRRR_suite.txt b/physics/docs/pdftxt/HRRR_suite.txt
index c08f50211..93601b62b 100644
--- a/physics/docs/pdftxt/HRRR_suite.txt
+++ b/physics/docs/pdftxt/HRRR_suite.txt
@@ -3,10 +3,10 @@
\section HRRR_suite_overview Overview
-The HRRR suite contains the parameterizations used in the NOAA operational
+The HRRR suite contains the evolving parameterizations used in the NOAA operational
High-Resolution Rapid Refresh (HRRR) model, which runs at 3-km resolution.
This suite is most applicable for runs at 3-km resolution since it does not
-parameterize deep convection.
+parameterize deep convection. It is one of the primary suite candidates for RRFS v1 operational implementation.
For additional information about the HRRR model, visit:
https://rapidrefresh.noaa.gov/hrrr/.
@@ -17,6 +17,7 @@ The HRRR suite uses the parameterizations in the following order:
- \ref SFC_MYNNSFL
- \ref GFS_NSST
- \ref RUCLSM
+ - \ref CLM_LAKE_model
- \ref MYNNEDMF
- \ref GFS_drag_suite
- \ref GFS_OZPHYS
@@ -28,6 +29,6 @@ The HRRR suite uses the parameterizations in the following order:
\include suite_FV3_HRRR.xml
\section hrrr_nml_option Namelist
-\snippet RE210/FV3_HRRR_input.nml GFS_PHYSICS_NML
+\snippet FV3_HRRR_input.nml GFS_PHYSICS_NML
*/
diff --git a/physics/docs/pdftxt/NoahMP.txt b/physics/docs/pdftxt/NoahMP.txt
deleted file mode 100644
index f42aaaa00..000000000
--- a/physics/docs/pdftxt/NoahMP.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
-\page NoahMP GFS NoahMP Land Surface Model
-\section des_noahmp Description
-
-This implementation of the NoahMP Land Surface Model (LSM) is adapted from the version implemented in WRF v3.7 with additions by NOAA EMC staff to work with the UFS Atmosphere model. Authoritative documentation of the NoahMP scheme can be accessed at the following links:
-
-[University of Texas at Austin NoahMP Documentation](http://www.jsg.utexas.edu/noah-mp "University of Texas at Austin NoahMP Documentation")
-
-[NCAR Research Application Laboratory NoahMP Documentation](https://ral.ucar.edu/solutions/products/noah-multiparameterization-land-surface-model-noah-mp-lsm "NCAR RAL NoahMP Documentation")
-
-A primary reference for the NoahMP LSM is Niu et al. (2011) \cite niu_et_al_2011.
-
-The CCPP interface to the NoahMP LSM is a driving software layer on top of the actual NoahMP LSM. During the run sequence, code organization is as follows:
-+ \ref noahmpdrv_run() calls
- + \ref transfer_mp_parameters()
- + \ref noahmp_options()
- + \ref noahmp_options_glacier() and noahmp_glacier() if over the ice vegetation type (glacier)
- + \ref noahmp_sflx() if over other vegetation types
- + \ref penman()
-
-Note that noahmp_glacer() and noahmp_sflx() are the actual NoahMP codes.
-
-\section Default NoahMP LSM Options used in UFS atmosphere
-+ Dynamic Vegetation (opt_dveg): 2 [On]
-+ Canopy Stomatal Resistance (opt_crs): 1 [Ball-Berry]
-+ Soil Moisture Factor for Stomatal Resistance (opt_btr): 1 [Noah soil moisture]
-+ Runoff and Groundwater (opt_run): 1 [topmodel with groundwater (Niu et al. 2007 \cite niu_et_al_2007)]
-+ Surface Layer Drag Coeff (opt_sfc): 1 [Monin-Obukhov]
-+ Supercooled Liquid Water or Ice Fraction (opt_frz): 1 [no iteration (Niu and Yang, 2006 \cite niu_and_yang_2006)]
-+ Frozen Soil Permeability (opt_inf): 1 [linear effects, more permeable (Niu and Yang, 2006, \cite niu_and_yang_2006)]
-+ Radiation Transfer (opt_rad): 1 [modified two-stream (gap = f(solar angle, 3d structure ...)<1-fveg)]
-+ Ground Snow Surface Albedo (opt_alb): 2 [class]
-+ Partitioning Precipitation into Rainfall & Snowfall (opt_snf): 4 [use microphysics output]
-+ Lower Boundary Condition of Soil Temperature (opt_tbot): 2 [tbot at zbot (8m) read from a file (original Noah)]
-+ Snow/Soil Temperature Time Scheme (only layer 1) (opt_stc): 1 [semi-implicit; flux top boundary condition]
-
-\section intra_noahmp Intraphysics Communication
- + GFS NoahMP LSM Driver (\ref arg_table_noahmpdrv_run)
-\section gen_al_noahmp General Algorithm of Driver
-+ \ref general_noahmpdrv
-*/
diff --git a/physics/docs/pdftxt/RAP_suite.txt b/physics/docs/pdftxt/RAP_suite.txt
index 3b16315e7..26b9d31f3 100644
--- a/physics/docs/pdftxt/RAP_suite.txt
+++ b/physics/docs/pdftxt/RAP_suite.txt
@@ -3,9 +3,9 @@
\section rap_suite_overview Overview
-The RAP suite contains the parameterizations used in the NOAA operational Rapid Refresh (RAP) model
-which runs at 13-km resolution. Currently, the RAP suite is supported in SCM only. For additional
-information about the RAP model, visit: https://rapidrefresh.noaa.gov.
+The RAP suite contains the evolving parameterizations used in the NOAA operational Rapid Refresh (RAP) model
+which runs at 13-km resolution. For additional
+information about the RAP model, visit: https://rapidrefresh.noaa.gov. It is one of the primary suite candidates for RRFS v1 operational implementation.
The RAP suite uses the parameterizations in the following order:
- \ref SGSCLOUD_page
@@ -23,9 +23,9 @@ The RAP suite uses the parameterizations in the following order:
- \ref THOMPSON
\section sdf_gsdsuite Suite Definition File
-\include suite_SCM_RAP.xml
+\include suite_FV3_RAP.xml
\section RAP_nml_option Namelist
-\snippet RE210/SCM_RAP_input.nml GFS_PHYSICS_NML
+\snippet FV3_RAP_input.nml GFS_PHYSICS_NML
*/
diff --git a/physics/docs/pdftxt/RE300/FV3_GFS_v16_input.nml b/physics/docs/pdftxt/RE300/FV3_GFS_v16_input.nml
new file mode 100644
index 000000000..6fd84ec22
--- /dev/null
+++ b/physics/docs/pdftxt/RE300/FV3_GFS_v16_input.nml
@@ -0,0 +1,335 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ blocksize = 40
+ ccpp_suite = 'FV3_GFS_v16'
+ chksum_debug = .false.
+ dycore_only = .false.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 27
+/
+
+&diag_manager_nml
+ max_output_fields = 450
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 65
+ nt_checker = 0
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 12000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .false.
+ bc_update_interval = 6
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.0
+ d4_bg = 0.12
+ d_con = 1.0
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.002
+ dnats = 1
+ do_sat_adj = .true.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 6
+ external_eta = .true.
+ external_ic = .true.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 450
+ gfs_phil = .false.
+ hord_dp = -5
+ hord_mt = 5
+ hord_tm = 5
+ hord_tr = 10
+ hord_vt = 5
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 6
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 5, 2
+ make_nh = .false.
+ mountain = .false.
+ n_split = 6
+ n_sponge = 10
+ n_zs_filter = 0
+ na_init = 0
+ ncep_ic = .false.
+ nggps_ic = .true.
+ no_dycore = .false.
+ nord = 3
+ npx = 220
+ npy = 132
+ npz = 64
+ nrows_blend = 10
+ ntiles = 1
+ nudge_dz = .false.
+ nudge_qv = .true.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = ''
+ reset_eta = .false.
+ rf_cutoff = 750.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 10.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .false.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+!> [GFDL_CLOUD_MP_NML]
+&gfdl_cloud_microphysics_nml
+ c_cracw = 0.8
+ c_paut = 0.5
+ c_pgacs = 0.01
+ c_psaci = 0.05
+ ccn_l = 300.0
+ ccn_o = 100.0
+ const_vg = .false.
+ const_vi = .false.
+ const_vr = .false.
+ const_vs = .false.
+ de_ice = .false.
+ do_qa = .true.
+ do_sedi_heat = .false.
+ dw_land = 0.16
+ dw_ocean = 0.1
+ fast_sat_adj = .true.
+ fix_negative = .true.
+ icloud_f = 1
+ mono_prof = .true.
+ mp_time = 150.0
+ prog_ccn = .false.
+ qi0_crt = 8e-05
+ qi_lim = 1.0
+ ql_gen = 0.001
+ ql_mlt = 0.001
+ qs0_crt = 0.001
+ rad_graupel = .true.
+ rad_rain = .true.
+ rad_snow = .true.
+ reiflag = 2
+ rh_inc = 0.3
+ rh_inr = 0.3
+ rh_ins = 0.3
+ rthresh = 1e-05
+ sedi_transport = .true.
+ tau_g2v = 900.0
+ tau_i2s = 1000.0
+ tau_l2v = 225.0
+ tau_v2l = 150.0
+ use_ccn = .true.
+ use_ppm = .false.
+ vg_max = 12.0
+ vi_max = 1.0
+ vr_max = 12.0
+ vs_max = 2.0
+ z_slope_ice = .true.
+ z_slope_liq = .true.
+/
+!! [GFDL_CLOUD_MP_NML]
+
+
+!>[GFS_PHYSICS_NML]
+&gfs_physics_nml
+ cal_pre = .false.
+ cdmbgwd = 4.0, 0.15, 1.0, 1.0
+ cnvcld = .true.
+ cnvgwd = .true.
+ debug = .false.
+ do_tofd = .true.
+ do_ugwp = .false.
+ dspheat = .true.
+ effr_in = .true.
+ fhcyc = 0.0
+ fhlwr = 3600.0
+ fhswr = 3600.0
+ fhzero = 1.0
+ h2o_phys = .true.
+ hybedmf = .false.
+ iaer = 5111
+ ialb = 1
+ iau_inc_files = ''
+ icliq_sw = 2
+ ico2 = 2
+ iems = 1
+ imfdeepcnv = 2
+ imfshalcnv = 2
+ imp_physics = 11
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 1
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iopt_trs = 2
+ iovr = 3
+ isatmedmf = 1
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .true.
+ lheatstrg = .true.
+ lsm = 1
+ lsoil = 4
+ lwhtr = .true.
+ nsfullradar_diag = 3600
+ nst_anl = .true.
+ nstf_name = 2, 1, 0, 0, 0
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ prautco = 0.00015, 0.00015
+ pre_rad = .false.
+ print_diff_pgr = .false.
+ prslrd0 = 0.0
+ psautco = 0.0008, 0.0005
+ random_clds = .false.
+ redrag = .true.
+ satmedmf = .true.
+ sfclay_compute_flux = .false.
+ shal_cnv = .true.
+ swhtr = .true.
+ trans_trac = .true.
+ use_ufo = .true.
+/
+!! [GFS_PHYSICS_NML]
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&mpp_io_nml
+ deflate_level = 1
+ shuffle = 1
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnacna = ''
+ fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb'
+ fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb'
+ fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb'
+ fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb'
+ fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb'
+ fnsnoa = ''
+ fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb'
+ fntsfa = ''
+ fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/RTGSST.1982.2012.monthly.clim.grb'
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ landice = .true.
+ ldebug = .false.
+/
+
+&namsfc_dict
+ fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc'
+ fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc'
+ fnalbc2 = '../fix_lam/C403.facsf.tileX.nc'
+ fnslpc = '../fix_lam/C403.slope_type.tileX.nc'
+ fnsotc = '../fix_lam/C403.soil_type.tileX.nc'
+ fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc'
+ fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc'
+ fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+/
+
+&surf_map_nml
+/
diff --git a/physics/docs/pdftxt/RE300/FV3_HRRR_input.nml b/physics/docs/pdftxt/RE300/FV3_HRRR_input.nml
new file mode 100644
index 000000000..9a89b9a1f
--- /dev/null
+++ b/physics/docs/pdftxt/RE300/FV3_HRRR_input.nml
@@ -0,0 +1,295 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ blocksize = 40
+ ccpp_suite = 'FV3_HRRR'
+ chksum_debug = .false.
+ dycore_only = .false.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 450
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 65
+ nt_checker = 0
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 12000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ bc_update_interval = 6
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 1.0
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2
+ external_eta = .true.
+ external_ic = .true.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = -5
+ hord_mt = 5
+ hord_tm = 5
+ hord_tr = 10
+ hord_vt = 5
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 5, 2
+ make_nh = .true.
+ mountain = .false.
+ n_split = 5
+ n_sponge = 24
+ n_zs_filter = 0
+ na_init = 1
+ ncep_ic = .false.
+ nggps_ic = .true.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 2
+ npx = 220
+ npy = 132
+ npz = 64
+ nrows_blend = 10
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .true.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .false.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+!>[GFS_PHYSICS_NML]
+&gfs_physics_nml
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ cnvcld = .false.
+ cnvgwd = .false.
+ cplflx = .false.
+ debug = .false.
+ do_deep = .false.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ dspheat = .true.
+ effr_in = .true.
+ fhcyc = 0.0
+ fhlwr = 1200.0
+ fhswr = 1200.0
+ fhzero = 1.0
+ gwd_opt = 3
+ h2o_phys = .true.
+ hybedmf = .false.
+ iaer = 5111
+ ialb = 1
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 1
+ imfdeepcnv = -1
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iopt_trs = 2
+ iovr = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ lheatstrg = .false.
+ lradar = .true.
+ lsm = 3
+ lsoil = 4
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ nsfullradar_diag = 3600
+ nst_anl = .true.
+ nstf_name = 2, 1, 0, 0, 0
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ pre_rad = .false.
+ print_diff_pgr = .false.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ satmedmf = .false.
+ sfclay_compute_flux = .true.
+ shal_cnv = .false.
+ swhtr = .true.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+/
+!![GFS_PHYSICS_NML]
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnacna = ''
+ fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb'
+ fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb'
+ fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb'
+ fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb'
+ fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb'
+ fnsnoa = ''
+ fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb'
+ fntsfa = ''
+ fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/RTGSST.1982.2012.monthly.clim.grb'
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&namsfc_dict
+ fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc'
+ fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc'
+ fnalbc2 = '../fix_lam/C403.facsf.tileX.nc'
+ fnslpc = '../fix_lam/C403.slope_type.tileX.nc'
+ fnsotc = '../fix_lam/C403.soil_type.tileX.nc'
+ fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc'
+ fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc'
+ fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/physics/docs/pdftxt/RE300/FV3_RAP_input.nml b/physics/docs/pdftxt/RE300/FV3_RAP_input.nml
new file mode 100644
index 000000000..aa80cac21
--- /dev/null
+++ b/physics/docs/pdftxt/RE300/FV3_RAP_input.nml
@@ -0,0 +1,302 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ blocksize = 40
+ ccpp_suite = 'FV3_RAP'
+ chksum_debug = .false.
+ dycore_only = .false.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 450
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 65
+ nt_checker = 0
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 12000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ bc_update_interval = 6
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 1.0
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2
+ external_eta = .true.
+ external_ic = .true.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = -5
+ hord_mt = 5
+ hord_tm = 5
+ hord_tr = 10
+ hord_vt = 5
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 5, 2
+ make_nh = .true.
+ mountain = .false.
+ n_split = 5
+ n_sponge = 24
+ n_zs_filter = 0
+ na_init = 1
+ ncep_ic = .false.
+ nggps_ic = .true.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 2
+ npx = 220
+ npy = 132
+ npz = 64
+ nrows_blend = 10
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .true.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .false.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+!>[GFS_PHYSICS_NML]
+&gfs_physics_nml
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ cnvcld = .false.
+ cnvgwd = .false.
+ cplflx = .false.
+ debug = .false.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_shum = .false.
+ do_skeb = .false.
+ do_spp = .false.
+ do_sppt = .false.
+ dspheat = .true.
+ effr_in = .true.
+ fhcyc = 0
+ fhlwr = 1200.0
+ fhswr = 1200.0
+ fhzero = 1.0
+ gwd_opt = 3
+ h2o_phys = .true.
+ hybedmf = .false.
+ iaer = 5111
+ ialb = 1
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 1
+ imfdeepcnv = 3
+ imfshalcnv = 3
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iopt_trs = 2
+ iovr = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ lheatstrg = .false.
+ lndp_type = 0
+ lradar = .true.
+ lsm = 3
+ lsoil = 4
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ n_var_lndp = 0
+ n_var_spp = 0
+ nsfullradar_diag = 3600
+ nst_anl = .true.
+ nstf_name = 2, 1, 0, 0, 0
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ pre_rad = .false.
+ print_diff_pgr = .false.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ satmedmf = .false.
+ sfclay_compute_flux = .false.
+ shal_cnv = .true.
+ swhtr = .true.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+/
+!![GFS_PHYSICS_NML]
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnacna = ''
+ fnaisc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb'
+ fnglac = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb'
+ fnmskh = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb'
+ fnmxic = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb'
+ fnsmcc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb'
+ fnsnoa = ''
+ fnsnoc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb'
+ fntsfa = ''
+ fntsfc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/RTGSST.1982.2012.monthly.clim.grb'
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&namsfc_dict
+ fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc'
+ fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc'
+ fnalbc2 = '../fix_lam/C403.facsf.tileX.nc'
+ fnslpc = '../fix_lam/C403.slope_type.tileX.nc'
+ fnsotc = '../fix_lam/C403.soil_type.tileX.nc'
+ fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc'
+ fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc'
+ fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/physics/docs/pdftxt/RE300/FV3_RRFS_v1beta_input.nml b/physics/docs/pdftxt/RE300/FV3_RRFS_v1beta_input.nml
new file mode 100644
index 000000000..aff1b47a5
--- /dev/null
+++ b/physics/docs/pdftxt/RE300/FV3_RRFS_v1beta_input.nml
@@ -0,0 +1,289 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ blocksize = 40
+ ccpp_suite = 'FV3_RRFS_v1beta'
+ chksum_debug = .false.
+ dycore_only = .false.
+/
+
+!>[CIRES_UGWP_NML]
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+!![CIRES_UGWP_NML]
+
+&diag_manager_nml
+ max_output_fields = 450
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 65
+ nt_checker = 0
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 12000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ bc_update_interval = 6
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 1.0
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2
+ external_eta = .true.
+ external_ic = .true.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 10
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 5, 2
+ make_nh = .true.
+ mountain = .false.
+ n_split = 5
+ n_sponge = 24
+ n_zs_filter = 0
+ na_init = 1
+ ncep_ic = .false.
+ nggps_ic = .true.
+ no_dycore = .false.
+ nord = 3
+ npx = 220
+ npy = 132
+ npz = 64
+ nrows_blend = 10
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .true.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .false.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+!>[GFS_PHYSICS_NML]
+&gfs_physics_nml
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 0.25
+ cnvcld = .false.
+ cnvgwd = .false.
+ cplflx = .false.
+ debug = .false.
+ do_deep = .false.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ dspheat = .true.
+ effr_in = .true.
+ fhcyc = 0.0
+ fhlwr = 1200.0
+ fhswr = 1200.0
+ fhzero = 1.0
+ h2o_phys = .true.
+ hybedmf = .false.
+ iaer = 111
+ ialb = 1
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ icloud_bl = 1
+ ico2 = 2
+ iems = 1
+ imfdeepcnv = -1
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iopt_trs = 2
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ ldiag3d = .false.
+ lheatstrg = .false.
+ lradar = .true.
+ lsm = 2
+ lsoil = 4
+ lsoil_lsm = 4
+ ltaerosol = .true.
+ lwhtr = .true.
+ nsfullradar_diag = 3600
+ nst_anl = .true.
+ nstf_name = 2, 1, 0, 0, 0
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ pre_rad = .false.
+ print_diff_pgr = .false.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ satmedmf = .false.
+ sfclay_compute_flux = .false.
+ shal_cnv = .false.
+ swhtr = .true.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+/
+!![GFS_PHYSICS_NML]
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnacna = ''
+ fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb'
+ fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb'
+ fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb'
+ fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb'
+ fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb'
+ fnsnoa = ''
+ fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb'
+ fntsfa = ''
+ fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/RTGSST.1982.2012.monthly.clim.grb'
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&namsfc_dict
+ fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc'
+ fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc'
+ fnalbc2 = '../fix_lam/C403.facsf.tileX.nc'
+ fnslpc = '../fix_lam/C403.slope_type.tileX.nc'
+ fnsotc = '../fix_lam/C403.soil_type.tileX.nc'
+ fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc'
+ fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc'
+ fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/physics/docs/pdftxt/RE300/FV3_WoFS_v0_input.nml b/physics/docs/pdftxt/RE300/FV3_WoFS_v0_input.nml
new file mode 100644
index 000000000..70206c335
--- /dev/null
+++ b/physics/docs/pdftxt/RE300/FV3_WoFS_v0_input.nml
@@ -0,0 +1,295 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ blocksize = 40
+ ccpp_suite = 'FV3_WoFS_v0'
+ chksum_debug = .false.
+ dycore_only = .false.
+/
+
+!>[CIRES_UGWP_NML]
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+!![CIRES_UGWP_NML]
+
+&diag_manager_nml
+ max_output_fields = 450
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 65
+ nt_checker = 0
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 12000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ bc_update_interval = 6
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 1.0
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2
+ external_eta = .true.
+ external_ic = .true.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 10
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 5, 2
+ make_nh = .true.
+ mountain = .false.
+ n_split = 5
+ n_sponge = 24
+ n_zs_filter = 0
+ na_init = 1
+ ncep_ic = .false.
+ nggps_ic = .true.
+ no_dycore = .false.
+ nord = 3
+ npx = 220
+ npy = 132
+ npz = 64
+ nrows_blend = 10
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 7
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .true.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .false.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+!>[GFS_PHYSICS_NML]
+&gfs_physics_nml
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 0.25
+ cnvcld = .false.
+ cnvgwd = .false.
+ cplflx = .false.
+ debug = .false.
+ do_deep = .false.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ dspheat = .true.
+ effr_in = .true.
+ fhcyc = 0.0
+ fhlwr = 1200.0
+ fhswr = 1200.0
+ fhzero = 1.0
+ h2o_phys = .true.
+ hybedmf = .false.
+ iaer = 111
+ ialb = 1
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ icloud_bl = 1
+ ico2 = 2
+ iems = 1
+ imfdeepcnv = -1
+ imfshalcnv = -1
+ imp_physics = 17
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ ldiag3d = .false.
+ lheatstrg = .false.
+ lradar = .true.
+ lsm = 1
+ lsoil = 4
+ lsoil_lsm = 4
+ ltaerosol = .true.
+ lwhtr = .true.
+ nsfullradar_diag = 3600
+ nssl_cccn = 600000000.0
+ nssl_ccn_on = .true.
+ nssl_hail_on = .true.
+ nst_anl = .true.
+ nstf_name = 2, 1, 0, 0, 0
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ pre_rad = .false.
+ print_diff_pgr = .false.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ satmedmf = .false.
+ sfclay_compute_flux = .false.
+ shal_cnv = .false.
+ swhtr = .true.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+/
+!![GFS_PHYSICS_NML]
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnacna = ''
+ fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb'
+ fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb'
+ fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb'
+ fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb'
+ fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb'
+ fnsnoa = ''
+ fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb'
+ fntsfa = ''
+ fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/RTGSST.1982.2012.monthly.clim.grb'
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&namsfc_dict
+ fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc'
+ fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc'
+ fnalbc2 = '../fix_lam/C403.facsf.tileX.nc'
+ fnslpc = '../fix_lam/C403.slope_type.tileX.nc'
+ fnsotc = '../fix_lam/C403.soil_type.tileX.nc'
+ fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc'
+ fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc'
+ fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_GFS_v16 b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_GFS_v16
new file mode 100644
index 000000000..6dac0ecaf
--- /dev/null
+++ b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_GFS_v16
@@ -0,0 +1,330 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ blocksize = 40
+ ccpp_suite = 'FV3_GFS_v16'
+ chksum_debug = .false.
+ dycore_only = .false.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 27
+/
+
+&diag_manager_nml
+ max_output_fields = 450
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 65
+ nt_checker = 0
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 12000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .false.
+ bc_update_interval = 6
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.0
+ d4_bg = 0.12
+ d_con = 1.0
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.002
+ dnats = 1
+ do_sat_adj = .true.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 6
+ external_eta = .true.
+ external_ic = .true.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 450
+ gfs_phil = .false.
+ hord_dp = -5
+ hord_mt = 5
+ hord_tm = 5
+ hord_tr = 10
+ hord_vt = 5
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 6
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 5, 2
+ make_nh = .false.
+ mountain = .false.
+ n_split = 6
+ n_sponge = 10
+ n_zs_filter = 0
+ na_init = 0
+ ncep_ic = .false.
+ nggps_ic = .true.
+ no_dycore = .false.
+ nord = 3
+ npx = 220
+ npy = 132
+ npz = 64
+ nrows_blend = 10
+ ntiles = 1
+ nudge_dz = .false.
+ nudge_qv = .true.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = ''
+ reset_eta = .false.
+ rf_cutoff = 750.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 10.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .false.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfdl_cloud_microphysics_nml
+ c_cracw = 0.8
+ c_paut = 0.5
+ c_pgacs = 0.01
+ c_psaci = 0.05
+ ccn_l = 300.0
+ ccn_o = 100.0
+ const_vg = .false.
+ const_vi = .false.
+ const_vr = .false.
+ const_vs = .false.
+ de_ice = .false.
+ do_qa = .true.
+ do_sedi_heat = .false.
+ dw_land = 0.16
+ dw_ocean = 0.1
+ fast_sat_adj = .true.
+ fix_negative = .true.
+ icloud_f = 1
+ mono_prof = .true.
+ mp_time = 150.0
+ prog_ccn = .false.
+ qi0_crt = 8e-05
+ qi_lim = 1.0
+ ql_gen = 0.001
+ ql_mlt = 0.001
+ qs0_crt = 0.001
+ rad_graupel = .true.
+ rad_rain = .true.
+ rad_snow = .true.
+ reiflag = 2
+ rh_inc = 0.3
+ rh_inr = 0.3
+ rh_ins = 0.3
+ rthresh = 1e-05
+ sedi_transport = .true.
+ tau_g2v = 900.0
+ tau_i2s = 1000.0
+ tau_l2v = 225.0
+ tau_v2l = 150.0
+ use_ccn = .true.
+ use_ppm = .false.
+ vg_max = 12.0
+ vi_max = 1.0
+ vr_max = 12.0
+ vs_max = 2.0
+ z_slope_ice = .true.
+ z_slope_liq = .true.
+/
+
+&gfs_physics_nml
+ cal_pre = .false.
+ cdmbgwd = 4.0, 0.15, 1.0, 1.0
+ cnvcld = .true.
+ cnvgwd = .true.
+ debug = .false.
+ do_tofd = .true.
+ do_ugwp = .false.
+ dspheat = .true.
+ effr_in = .true.
+ fhcyc = 0.0
+ fhlwr = 3600.0
+ fhswr = 3600.0
+ fhzero = 1.0
+ h2o_phys = .true.
+ hybedmf = .false.
+ iaer = 5111
+ ialb = 1
+ iau_inc_files = ''
+ icliq_sw = 2
+ ico2 = 2
+ iems = 1
+ imfdeepcnv = 2
+ imfshalcnv = 2
+ imp_physics = 11
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 1
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iopt_trs = 2
+ iovr = 3
+ isatmedmf = 1
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .true.
+ lheatstrg = .true.
+ lsm = 1
+ lsoil = 4
+ lwhtr = .true.
+ nsfullradar_diag = 3600
+ nst_anl = .true.
+ nstf_name = 2, 1, 0, 0, 0
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ prautco = 0.00015, 0.00015
+ pre_rad = .false.
+ print_diff_pgr = .false.
+ prslrd0 = 0.0
+ psautco = 0.0008, 0.0005
+ random_clds = .false.
+ redrag = .true.
+ satmedmf = .true.
+ sfclay_compute_flux = .false.
+ shal_cnv = .true.
+ swhtr = .true.
+ trans_trac = .true.
+ use_ufo = .true.
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&mpp_io_nml
+ deflate_level = 1
+ shuffle = 1
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnacna = ''
+ fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb'
+ fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb'
+ fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb'
+ fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb'
+ fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb'
+ fnsnoa = ''
+ fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb'
+ fntsfa = ''
+ fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/RTGSST.1982.2012.monthly.clim.grb'
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ landice = .true.
+ ldebug = .false.
+/
+
+&namsfc_dict
+ fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc'
+ fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc'
+ fnalbc2 = '../fix_lam/C403.facsf.tileX.nc'
+ fnslpc = '../fix_lam/C403.slope_type.tileX.nc'
+ fnsotc = '../fix_lam/C403.soil_type.tileX.nc'
+ fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc'
+ fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc'
+ fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+/
+
+&surf_map_nml
+/
diff --git a/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_HRRR b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_HRRR
new file mode 100644
index 000000000..e30bd44c6
--- /dev/null
+++ b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_HRRR
@@ -0,0 +1,298 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ blocksize = 40
+ ccpp_suite = 'FV3_HRRR'
+ chksum_debug = .false.
+ dycore_only = .false.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 450
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 65
+ nt_checker = 0
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 12000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ bc_update_interval = 6
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2
+ external_eta = .true.
+ external_ic = .true.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 5, 2
+ make_nh = .true.
+ mountain = .false.
+ n_split = 5
+ n_sponge = 9
+ n_zs_filter = 0
+ na_init = 1
+ ncep_ic = .false.
+ nggps_ic = .true.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 220
+ npy = 132
+ npz = 64
+ nrows_blend = 10
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .true.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .false.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ cnvcld = .false.
+ cnvgwd = .false.
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .false.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ dspheat = .true.
+ effr_in = .true.
+ fhcyc = 0.0
+ fhlwr = 1200.0
+ fhswr = 1200.0
+ fhzero = 1.0
+ gwd_opt = 3
+ h2o_phys = .true.
+ hybedmf = .false.
+ iaer = 5111
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = -1
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iopt_trs = 2
+ iovr = 3
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ kice = 9
+ ldiag3d = .false.
+ lheatstrg = .false.
+ lradar = .true.
+ lsm = 3
+ lsoil = 4
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ mosaic_lu = 0
+ mosaic_soil = 0
+ nsfullradar_diag = 3600
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ pre_rad = .false.
+ print_diff_pgr = .false.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ satmedmf = .false.
+ sfclay_compute_flux = .true.
+ shal_cnv = .false.
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnacna = ''
+ fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb'
+ fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb'
+ fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb'
+ fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb'
+ fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb'
+ fnsnoa = ''
+ fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb'
+ fntsfa = ''
+ fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/RTGSST.1982.2012.monthly.clim.grb'
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&namsfc_dict
+ fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc'
+ fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc'
+ fnalbc2 = '../fix_lam/C403.facsf.tileX.nc'
+ fnslpc = '../fix_lam/C403.slope_type.tileX.nc'
+ fnsotc = '../fix_lam/C403.soil_type.tileX.nc'
+ fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc'
+ fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc'
+ fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_RAP b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_RAP
new file mode 100644
index 000000000..ef3f44fc5
--- /dev/null
+++ b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_RAP
@@ -0,0 +1,300 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ blocksize = 40
+ ccpp_suite = 'FV3_RAP'
+ chksum_debug = .false.
+ dycore_only = .false.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 450
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 65
+ nt_checker = 0
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 12000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ bc_update_interval = 6
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 1.0
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2
+ external_eta = .true.
+ external_ic = .true.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = -5
+ hord_mt = 5
+ hord_tm = 5
+ hord_tr = 10
+ hord_vt = 5
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 5, 2
+ make_nh = .true.
+ mountain = .false.
+ n_split = 5
+ n_sponge = 24
+ n_zs_filter = 0
+ na_init = 1
+ ncep_ic = .false.
+ nggps_ic = .true.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 2
+ npx = 220
+ npy = 132
+ npz = 64
+ nrows_blend = 10
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .true.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .false.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ cnvcld = .false.
+ cnvgwd = .false.
+ cplflx = .false.
+ debug = .false.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_shum = .false.
+ do_skeb = .false.
+ do_spp = .false.
+ do_sppt = .false.
+ dspheat = .true.
+ effr_in = .true.
+ fhcyc = 0
+ fhlwr = 1200.0
+ fhswr = 1200.0
+ fhzero = 1.0
+ gwd_opt = 3
+ h2o_phys = .true.
+ hybedmf = .false.
+ iaer = 5111
+ ialb = 1
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 1
+ imfdeepcnv = 3
+ imfshalcnv = 3
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iopt_trs = 2
+ iovr = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ lheatstrg = .false.
+ lndp_type = 0
+ lradar = .true.
+ lsm = 3
+ lsoil = 4
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ n_var_lndp = 0
+ n_var_spp = 0
+ nsfullradar_diag = 3600
+ nst_anl = .true.
+ nstf_name = 2, 1, 0, 0, 0
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ pre_rad = .false.
+ print_diff_pgr = .false.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ satmedmf = .false.
+ sfclay_compute_flux = .false.
+ shal_cnv = .true.
+ swhtr = .true.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnacna = ''
+ fnaisc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb'
+ fnglac = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb'
+ fnmskh = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb'
+ fnmxic = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb'
+ fnsmcc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb'
+ fnsnoa = ''
+ fnsnoc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb'
+ fntsfa = ''
+ fntsfc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/RTGSST.1982.2012.monthly.clim.grb'
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&namsfc_dict
+ fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc'
+ fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc'
+ fnalbc2 = '../fix_lam/C403.facsf.tileX.nc'
+ fnslpc = '../fix_lam/C403.slope_type.tileX.nc'
+ fnsotc = '../fix_lam/C403.soil_type.tileX.nc'
+ fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc'
+ fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc'
+ fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_RRFS_v1beta b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_RRFS_v1beta
new file mode 100644
index 000000000..97a0f1216
--- /dev/null
+++ b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_RRFS_v1beta
@@ -0,0 +1,285 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ blocksize = 40
+ ccpp_suite = 'FV3_RRFS_v1beta'
+ chksum_debug = .false.
+ dycore_only = .false.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 450
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 65
+ nt_checker = 0
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 12000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ bc_update_interval = 6
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 1.0
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2
+ external_eta = .true.
+ external_ic = .true.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 10
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 5, 2
+ make_nh = .true.
+ mountain = .false.
+ n_split = 5
+ n_sponge = 24
+ n_zs_filter = 0
+ na_init = 1
+ ncep_ic = .false.
+ nggps_ic = .true.
+ no_dycore = .false.
+ nord = 3
+ npx = 220
+ npy = 132
+ npz = 64
+ nrows_blend = 10
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .true.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .false.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 0.25
+ cnvcld = .false.
+ cnvgwd = .false.
+ cplflx = .false.
+ debug = .false.
+ do_deep = .false.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ dspheat = .true.
+ effr_in = .true.
+ fhcyc = 0.0
+ fhlwr = 1200.0
+ fhswr = 1200.0
+ fhzero = 1.0
+ h2o_phys = .true.
+ hybedmf = .false.
+ iaer = 111
+ ialb = 1
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ icloud_bl = 1
+ ico2 = 2
+ iems = 1
+ imfdeepcnv = -1
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iopt_trs = 2
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ ldiag3d = .false.
+ lheatstrg = .false.
+ lradar = .true.
+ lsm = 2
+ lsoil = 4
+ lsoil_lsm = 4
+ ltaerosol = .true.
+ lwhtr = .true.
+ nsfullradar_diag = 3600
+ nst_anl = .true.
+ nstf_name = 2, 1, 0, 0, 0
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ pre_rad = .false.
+ print_diff_pgr = .false.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ satmedmf = .false.
+ sfclay_compute_flux = .false.
+ shal_cnv = .false.
+ swhtr = .true.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnacna = ''
+ fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb'
+ fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb'
+ fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb'
+ fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb'
+ fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb'
+ fnsnoa = ''
+ fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb'
+ fntsfa = ''
+ fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/RTGSST.1982.2012.monthly.clim.grb'
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&namsfc_dict
+ fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc'
+ fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc'
+ fnalbc2 = '../fix_lam/C403.facsf.tileX.nc'
+ fnslpc = '../fix_lam/C403.slope_type.tileX.nc'
+ fnsotc = '../fix_lam/C403.soil_type.tileX.nc'
+ fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc'
+ fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc'
+ fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_WoFS_v0 b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_WoFS_v0
new file mode 100644
index 000000000..1236cde3b
--- /dev/null
+++ b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_WoFS_v0
@@ -0,0 +1,291 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ blocksize = 40
+ ccpp_suite = 'FV3_WoFS_v0'
+ chksum_debug = .false.
+ dycore_only = .false.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 450
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 65
+ nt_checker = 0
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 12000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ bc_update_interval = 6
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 1.0
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2
+ external_eta = .true.
+ external_ic = .true.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 10
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 5, 2
+ make_nh = .true.
+ mountain = .false.
+ n_split = 5
+ n_sponge = 24
+ n_zs_filter = 0
+ na_init = 1
+ ncep_ic = .false.
+ nggps_ic = .true.
+ no_dycore = .false.
+ nord = 3
+ npx = 220
+ npy = 132
+ npz = 64
+ nrows_blend = 10
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 7
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .true.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .false.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 0.25
+ cnvcld = .false.
+ cnvgwd = .false.
+ cplflx = .false.
+ debug = .false.
+ do_deep = .false.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ dspheat = .true.
+ effr_in = .true.
+ fhcyc = 0.0
+ fhlwr = 1200.0
+ fhswr = 1200.0
+ fhzero = 1.0
+ h2o_phys = .true.
+ hybedmf = .false.
+ iaer = 111
+ ialb = 1
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ icloud_bl = 1
+ ico2 = 2
+ iems = 1
+ imfdeepcnv = -1
+ imfshalcnv = -1
+ imp_physics = 17
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ ldiag3d = .false.
+ lheatstrg = .false.
+ lradar = .true.
+ lsm = 1
+ lsoil = 4
+ lsoil_lsm = 4
+ ltaerosol = .true.
+ lwhtr = .true.
+ nsfullradar_diag = 3600
+ nssl_cccn = 600000000.0
+ nssl_ccn_on = .true.
+ nssl_hail_on = .true.
+ nst_anl = .true.
+ nstf_name = 2, 1, 0, 0, 0
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ pre_rad = .false.
+ print_diff_pgr = .false.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ satmedmf = .false.
+ sfclay_compute_flux = .false.
+ shal_cnv = .false.
+ swhtr = .true.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnacna = ''
+ fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb'
+ fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb'
+ fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb'
+ fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb'
+ fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb'
+ fnsnoa = ''
+ fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb'
+ fntsfa = ''
+ fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/RTGSST.1982.2012.monthly.clim.grb'
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&namsfc_dict
+ fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc'
+ fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc'
+ fnalbc2 = '../fix_lam/C403.facsf.tileX.nc'
+ fnslpc = '../fix_lam/C403.slope_type.tileX.nc'
+ fnsotc = '../fix_lam/C403.soil_type.tileX.nc'
+ fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc'
+ fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc'
+ fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+ fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc'
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/physics/docs/pdftxt/RE300/suite_FV3_GFS_v16.xml b/physics/docs/pdftxt/RE300/suite_FV3_GFS_v16.xml
new file mode 100644
index 000000000..122b937e1
--- /dev/null
+++ b/physics/docs/pdftxt/RE300/suite_FV3_GFS_v16.xml
@@ -0,0 +1,94 @@
+
+
+
All supported suites are a recent snapshot of
+the UFS fork for CCPP . In this regard, they may differ substantially from the suites used in operational models. For example, the GFS_v16 Suite is
+not the same code as in the operational GFS v16. While the suite is nominally the same, using the same schemes as the operational version, most
+of the individual physics schemes hosted in the CCPP repository have changed, including new development and bug fixes compared to the versions included
+in GFS version 16.0, which was released on 22 March 2021.
+This implication should be also applied to all other suites: RAP/HRRR suites in this release do not correspond directly to the
+the evolving version of the RAP/HRRR physics in operations.
*/
diff --git a/physics/docs/pdftxt/THOMPSON.txt b/physics/docs/pdftxt/THOMPSON.txt
index 60a873de9..914a95922 100644
--- a/physics/docs/pdftxt/THOMPSON.txt
+++ b/physics/docs/pdftxt/THOMPSON.txt
@@ -70,10 +70,8 @@ for the model to provide useful guidance for aircraft icing forecasts
- Can account for cloud phase changes and provides a sound physical basis for diagnosing precipitation type reaching the ground
-\section v6_enh_thompson CCPP Physics Updates
-\version CCPP v6.0.0
-Three mechanisms are available improve the stability of the scheme for weather forecast applications:
+Recently, three mechanisms have been implemented to improve the stability of the scheme for weather forecast applications:
\a inner \a loop, \a subcycle, and \a semi-Lagrangian \a sedimentation \a of \a rain \a and \a graupel.
The inner loop and the subcycle are similar in that the physics time step is subdivided and the scheme
is activated more often than others in the physics suite. However, they differ in implementation.
@@ -82,7 +80,17 @@ Conversely, the subcycle method is controlled by CCPP Framework through the "sub
The two methods should be used exclusively. The Semi-Lagrangian sedimentation of rain and graupel (based on Juang and Hong 2010 \cite Henry_Juang_2010 )
increases numerical stability by applying the subtime step only to sedimentation computation.
Two namelist variables control the usage of the semi-Lagrangian sedimentation, \p sedi_semi and \p decfl.
-\p sedi_semi is set to ‘true’ to activate the method. Decfl is a parameter that needs to avoid deformation of the arriving grids, currently, "10".
+\p sedi_semi is set to ‘true’ to activate the method. \p Decfl is a parameter that needs to avoid deformation of the arriving grids, currently, "10".
+
+\section v6_enh_thompson CCPP Physics Updates
+\version UFS-SRW v3.0.0
+
+- The ice generation supersaturation requirement for nonaerosol option is reduced from 0.25 to 0.15. The purpose is to generate more ice in
+the upper level and reduce the OLR bias.
+
+- For the non-aerosol option of the scheme, the cloud number concentration is divided into two parts (over land and others). The number
+concentration over the ocean is reduced to a smaller number (50/L) from its default (100/L). The purpose is to reduce the bias in surface
+downward shortwave radiative flux off the coastal region including the Southeast Pacific.
\section intra_thompson Intraphysics Communication
- \ref arg_table_mp_thompson_run
diff --git a/physics/docs/pdftxt/WoFS_v0_suite.txt b/physics/docs/pdftxt/WoFS_v0_suite.txt
index 8259ab770..bf868a461 100644
--- a/physics/docs/pdftxt/WoFS_v0_suite.txt
+++ b/physics/docs/pdftxt/WoFS_v0_suite.txt
@@ -4,8 +4,9 @@
\section wofs_v0_suite_overview Overview
The WoFS_v0 suite is targeted for use in the upcoming operational implementation
-of the NOAA's Warn-on-Forecast System (WoFS). This suite is most applicable for
-runs at 3-km resolution since it does not parameterize deep convection.
+of the NOAA's Warn-on-Forecast System (WoFS) and for the RRFS ensemble.
+This suite is most applicable for runs at <= 3-km resolution since it does
+not parameterize deep convection.
The WoFS suite uses the parameterizations in the following order:
- \ref SGSCLOUD_page
diff --git a/physics/docs/pdftxt/all_shemes_list.txt b/physics/docs/pdftxt/all_schemes_list.txt
similarity index 100%
rename from physics/docs/pdftxt/all_shemes_list.txt
rename to physics/docs/pdftxt/all_schemes_list.txt
diff --git a/physics/docs/pdftxt/suite_input.nml.txt b/physics/docs/pdftxt/suite_input.nml.txt
index be3785b74..e986fc322 100644
--- a/physics/docs/pdftxt/suite_input.nml.txt
+++ b/physics/docs/pdftxt/suite_input.nml.txt
@@ -50,9 +50,9 @@ show some variables in the namelist that must match the SDF.