From 43c098216493289ab064a6707bbb7fb801dd5914 Mon Sep 17 00:00:00 2001
From: SMoorthi-emc <47667426+SMoorthi-emc@users.noreply.github.com>
Date: Fri, 22 Oct 2021 09:04:05 -0400
Subject: [PATCH] Remove interstitial variables for land and ice emissivity and
update the land and ice emissivity in the routine setemis in CCPP (#393)
---
atmos_model.F90 | 24 +-
ccpp/data/GFS_typedefs.F90 | 208 +++++++++---------
ccpp/data/GFS_typedefs.meta | 75 +++----
ccpp/physics | 2 +-
.../suite_FV3_GFSv17alp_cpldnsstrasnoahmp.xml | 95 ++++++++
...te_FV3_GFSv17alp_cpldnsstrasugwpnoahmp.xml | 95 ++++++++
...te_FV3_GFSv17alp_cpldnsstrasugwprrtmgp.xml | 105 +++++++++
...te_FV3_GFSv17alp_cpldnsstsasugwpnoahmp.xml | 95 ++++++++
...suite_FV3_GFSv17alpha_cpldnsstsas_ugwp.xml | 95 ++++++++
io/FV3GFS_io.F90 | 180 ++++++++-------
10 files changed, 730 insertions(+), 244 deletions(-)
create mode 100644 ccpp/suites/suite_FV3_GFSv17alp_cpldnsstrasnoahmp.xml
create mode 100644 ccpp/suites/suite_FV3_GFSv17alp_cpldnsstrasugwpnoahmp.xml
create mode 100644 ccpp/suites/suite_FV3_GFSv17alp_cpldnsstrasugwprrtmgp.xml
create mode 100644 ccpp/suites/suite_FV3_GFSv17alp_cpldnsstsasugwpnoahmp.xml
create mode 100644 ccpp/suites/suite_FV3_GFSv17alpha_cpldnsstsas_ugwp.xml
diff --git a/atmos_model.F90 b/atmos_model.F90
index f092da8c5..6f89625c9 100644
--- a/atmos_model.F90
+++ b/atmos_model.F90
@@ -423,9 +423,9 @@ subroutine atmos_timestep_diagnostics(Atmos)
if(.not. GFS_control%first_time_step) then
pmaxloc = 0.0d0
recvbuf = 0.0d0
- psum = 0.0d0
- pcount = 0.0d0
- maxabs = 0.0d0
+ psum = 0.0d0
+ pcount = 0.0d0
+ maxabs = 0.0d0
! Put pgr stats in pmaxloc, psum, and pcount:
pmaxloc(1) = GFS_Control%tile_num
@@ -434,11 +434,11 @@ subroutine atmos_timestep_diagnostics(Atmos)
do i=1,count
pdiff = GFS_data(nb)%Statein%pgr(i)-GFS_data(nb)%Intdiag%old_pgr(i)
adiff = abs(pdiff)
- psum = psum+adiff
+ psum = psum + adiff
if(adiff>=maxabs) then
maxabs=adiff
- pmaxloc(2:3)=(/ ATM_block%index(nb)%ii(i), ATM_block%index(nb)%jj(i) /)
- pmaxloc(4:7)=(/ pdiff, GFS_data(nb)%Statein%pgr(i), &
+ pmaxloc(2:3) = (/ ATM_block%index(nb)%ii(i), ATM_block%index(nb)%jj(i) /)
+ pmaxloc(4:7) = (/ pdiff, GFS_data(nb)%Statein%pgr(i), &
GFS_data(nb)%Grid%xlat(i), GFS_data(nb)%Grid%xlon(i) /)
endif
enddo
@@ -1642,6 +1642,7 @@ subroutine assign_importdata(jdat, rc)
! real(kind=GFS_kind_phys), parameter :: hsmax = 100.0 !< maximum snow depth (m) allowed
real(kind=GFS_kind_phys), parameter :: himax = 1.0e12 !< maximum ice thickness allowed
real(kind=GFS_kind_phys), parameter :: hsmax = 1.0e12 !< maximum snow depth (m) allowed
+ real(kind=GFS_kind_phys), parameter :: con_sbc = 5.670400e-8_GFS_kind_phys !< stefan-boltzmann
!
!------------------------------------------------------------------------------
!
@@ -2479,7 +2480,7 @@ subroutine assign_importdata(jdat, rc)
! update sea ice related fields:
if( lcpl_fice ) then
-!$omp parallel do default(shared) private(i,j,nb,ix)
+!$omp parallel do default(shared) private(i,j,nb,ix,tem)
do j=jsc,jec
do i=isc,iec
nb = Atm_block%blkno(i,j)
@@ -2490,6 +2491,15 @@ subroutine assign_importdata(jdat, rc)
GFS_data(nb)%Coupling%hsnoin_cpl(ix) = min(hsmax, GFS_data(nb)%Coupling%hsnoin_cpl(ix) &
/ (GFS_data(nb)%Sfcprop%fice(ix)*GFS_data(nb)%Sfcprop%oceanfrac(ix)))
GFS_data(nb)%Sfcprop%zorli(ix) = z0ice
+ tem = GFS_data(nb)%Sfcprop%tisfc(ix) * GFS_data(nb)%Sfcprop%tisfc(ix)
+ tem = con_sbc * tem * tem
+ if (GFS_data(nb)%Coupling%ulwsfcin_cpl(ix) > zero) then
+ GFS_data(nb)%Sfcprop%emis_ice(ix) = GFS_data(nb)%Coupling%ulwsfcin_cpl(ix) / tem
+ GFS_data(nb)%Sfcprop%emis_ice(ix) = max(0.9, min(one, GFS_data(nb)%Sfcprop%emis_ice(ix)))
+ else
+ GFS_data(nb)%Sfcprop%emis_ice(ix) = 0.96
+ endif
+ GFS_data(nb)%Coupling%ulwsfcin_cpl(ix) = tem * GFS_data(nb)%Sfcprop%emis_ice(ix)
else
GFS_data(nb)%Sfcprop%tisfc(ix) = GFS_data(nb)%Sfcprop%tsfco(ix)
GFS_data(nb)%Sfcprop%fice(ix) = zero
diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90
index 04004eeec..4d8bfed3b 100644
--- a/ccpp/data/GFS_typedefs.F90
+++ b/ccpp/data/GFS_typedefs.F90
@@ -58,7 +58,7 @@ module GFS_typedefs
!--- parameter constants used for default initializations
real(kind=kind_phys), parameter :: zero = 0.0_kind_phys
- real(kind=kind_phys), parameter :: huge = 9.9692099683868690E36 ! NetCDF float FillValue
+! real(kind=kind_phys), parameter :: huge = 9.9692099683868690E36 ! NetCDF float FillValue
real(kind=kind_phys), parameter :: clear_val = zero
!real(kind=kind_phys), parameter :: clear_val = -9.9999e80
real(kind=kind_phys), parameter :: rann_init = 0.6_kind_phys
@@ -241,6 +241,8 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: fice (:) => null() !< ice fraction over open water grid
real (kind=kind_phys), pointer :: snodl (:) => null() !< snow depth over land
real (kind=kind_phys), pointer :: weasdl (:) => null() !< weasd over land
+ real (kind=kind_phys), pointer :: snodi (:) => null() !< snow depth over ice
+ real (kind=kind_phys), pointer :: weasdi (:) => null() !< weasd over ice
! real (kind=kind_phys), pointer :: hprim (:) => null() !< topographic standard deviation in m
real (kind=kind_phys), pointer :: hprime (:,:) => null() !< orographic metrics
real (kind=kind_phys), pointer :: z0base (:) => null() !< background or baseline surface roughness length in m
@@ -633,7 +635,7 @@ module GFS_typedefs
!--- coupling parameters
logical :: cplflx !< default no cplflx collection
- logical :: cplice !< default yes cplice collection (used together with cplflx)
+ logical :: cplice !< default no cplice collection (used together with cplflx)
logical :: cplocn2atm !< default yes ocn->atm coupling
logical :: cplwav !< default no cplwav collection
logical :: cplwav2atm !< default no wav->atm coupling
@@ -1298,6 +1300,7 @@ module GFS_typedefs
real(kind=kind_phys) :: dxmax ! maximum scaling factor for critical relative humidity, replaces dxmax in physcons.F90
real(kind=kind_phys) :: dxmin ! minimum scaling factor for critical relative humidity, replaces dxmin in physcons.F90
real(kind=kind_phys) :: rhcmax ! maximum critical relative humidity, replaces rhc_max in physcons.F90
+ real(kind=kind_phys) :: huge !< huge fill value
contains
procedure :: init => control_initialize
@@ -2022,8 +2025,6 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: save_v(:,:) => null() !<
real (kind=kind_phys), pointer :: sbsno(:) => null() !<
type (cmpfsw_type), pointer :: scmpsw(:) => null() !<
- real (kind=kind_phys), pointer :: semis_ice(:) => null() !<
- real (kind=kind_phys), pointer :: semis_land(:) => null() !<
real (kind=kind_phys), pointer :: semis_water(:) => null() !<
real (kind=kind_phys), pointer :: sfcalb(:,:) => null() !<
real (kind=kind_phys), pointer :: sigma(:) => null() !<
@@ -2035,10 +2036,8 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: smcmax(:) => null() !<
real (kind=kind_phys), pointer :: smc_save(:,:) => null() !<
real (kind=kind_phys), pointer :: snowc(:) => null() !<
- real (kind=kind_phys), pointer :: snowd_ice(:) => null() !<
-! real (kind=kind_phys), pointer :: snowd_land(:) => null() !<
+! real (kind=kind_phys), pointer :: snowd_ice(:) => null() !<
real (kind=kind_phys), pointer :: snowd_land_save(:) => null() !<
-! real (kind=kind_phys), pointer :: snowd_water(:) => null() !<
real (kind=kind_phys), pointer :: snow_depth(:) => null() !<
real (kind=kind_phys), pointer :: snohf(:) => null() !<
real (kind=kind_phys), pointer :: snohf_snow(:) => null() !<
@@ -2068,7 +2067,7 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: trans(:) => null() !<
real (kind=kind_phys), pointer :: tseal(:) => null() !<
real (kind=kind_phys), pointer :: tsfa(:) => null() !<
- real (kind=kind_phys), pointer :: tsfc_ice(:) => null() !<
+! real (kind=kind_phys), pointer :: tsfc_ice(:) => null() !<
real (kind=kind_phys), pointer :: tsfc_land_save(:) => null() !<
real (kind=kind_phys), pointer :: tsfc_water(:) => null() !<
real (kind=kind_phys), pointer :: tsfg(:) => null() !<
@@ -2088,7 +2087,7 @@ module GFS_typedefs
! real (kind=kind_phys), pointer :: weasd_water(:) => null() !<
! real (kind=kind_phys), pointer :: weasd_land(:) => null() !<
real (kind=kind_phys), pointer :: weasd_land_save(:) => null() !<
- real (kind=kind_phys), pointer :: weasd_ice(:) => null() !<
+! real (kind=kind_phys), pointer :: weasd_ice(:) => null() !<
real (kind=kind_phys), pointer :: wind(:) => null() !<
real (kind=kind_phys), pointer :: work1(:) => null() !<
real (kind=kind_phys), pointer :: work2(:) => null() !<
@@ -2366,6 +2365,8 @@ subroutine sfcprop_create (Sfcprop, IM, Model)
allocate (Sfcprop%fice (IM))
allocate (Sfcprop%snodl (IM))
allocate (Sfcprop%weasdl (IM))
+ allocate (Sfcprop%snodi (IM))
+ allocate (Sfcprop%weasdi (IM))
! allocate (Sfcprop%hprim (IM))
allocate (Sfcprop%hprime (IM,Model%nmtvr))
allocate(Sfcprop%albdirvis_lnd (IM))
@@ -2373,6 +2374,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model)
allocate(Sfcprop%albdifvis_lnd (IM))
allocate(Sfcprop%albdifnir_lnd (IM))
allocate (Sfcprop%emis_lnd (IM))
+ allocate (Sfcprop%emis_ice (IM))
Sfcprop%slmsk = clear_val
Sfcprop%oceanfrac = clear_val
@@ -2393,6 +2395,8 @@ subroutine sfcprop_create (Sfcprop, IM, Model)
Sfcprop%fice = clear_val
Sfcprop%snodl = clear_val
Sfcprop%weasdl = clear_val
+ Sfcprop%snodi = clear_val
+ Sfcprop%weasdi = clear_val
! Sfcprop%hprim = clear_val
Sfcprop%hprime = clear_val
Sfcprop%albdirvis_lnd = clear_val
@@ -2400,6 +2404,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model)
Sfcprop%albdifvis_lnd = clear_val
Sfcprop%albdifnir_lnd = clear_val
Sfcprop%emis_lnd = clear_val
+ Sfcprop%emis_ice = clear_val
!--- In (radiation only)
allocate (Sfcprop%snoalb (IM))
@@ -2460,6 +2465,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model)
allocate (Sfcprop%hice (IM))
allocate (Sfcprop%weasd (IM))
allocate (Sfcprop%sncovr (IM))
+ allocate (Sfcprop%sncovr_ice (IM))
if (Model%use_cice_alb .or. Model%lsm == Model%lsm_ruc) then
allocate (Sfcprop%albdirvis_ice (IM))
allocate (Sfcprop%albdifvis_ice (IM))
@@ -2468,12 +2474,6 @@ subroutine sfcprop_create (Sfcprop, IM, Model)
! allocate (Sfcprop%sfalb_ice (IM))
endif
if (Model%lsm == Model%lsm_ruc) then
- allocate (Sfcprop%sncovr_ice (IM))
- allocate (Sfcprop%emis_ice (IM))
-! allocate (Sfcprop%albdirvis_ice (IM))
-! allocate (Sfcprop%albdirnir_ice (IM))
-! allocate (Sfcprop%albdifvis_ice (IM))
-! allocate (Sfcprop%albdifnir_ice (IM))
allocate (Sfcprop%sfalb_lnd (IM))
allocate (Sfcprop%sfalb_ice (IM))
allocate (Sfcprop%sfalb_lnd_bck (IM))
@@ -2491,6 +2491,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model)
Sfcprop%hice = clear_val
Sfcprop%weasd = clear_val
Sfcprop%sncovr = clear_val
+ Sfcprop%sncovr_ice = clear_val
if (Model%use_cice_alb .or. Model%lsm == Model%lsm_ruc) then
Sfcprop%albdirvis_ice = clear_val
Sfcprop%albdifvis_ice = clear_val
@@ -2499,14 +2500,8 @@ subroutine sfcprop_create (Sfcprop, IM, Model)
! Sfcprop%sfalb_ice = clear_val
endif
if (Model%lsm == Model%lsm_ruc) then
- Sfcprop%sncovr_ice = clear_val
- Sfcprop%emis_ice = clear_val
-! Sfcprop%albdirvis_ice = clear_val
-! Sfcprop%albdirnir_ice = clear_val
-! Sfcprop%albdifvis_ice = clear_val
-! Sfcprop%albdifnir_ice = clear_val
- Sfcprop%sfalb_lnd = clear_val
- Sfcprop%sfalb_ice = clear_val
+ Sfcprop%sfalb_lnd = clear_val
+ Sfcprop%sfalb_ice = clear_val
Sfcprop%sfalb_lnd_bck = clear_val
endif
Sfcprop%canopy = clear_val
@@ -3118,7 +3113,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
!--- coupling parameters
logical :: cplflx = .false. !< default no cplflx collection
- logical :: cplice = .true. !< default yes cplice collection (used together with cplflx)
+ logical :: cplice = .false. !< default no cplice collection (used together with cplflx)
logical :: cplocn2atm = .true. !< default yes cplocn2atm coupling (turn on the feedback from ocn to atm)
logical :: cplwav = .false. !< default no cplwav collection
logical :: cplwav2atm = .false. !< default no cplwav2atm coupling
@@ -3562,6 +3557,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
! max and min lon and lat for critical relative humidity
integer :: max_lon=5000, max_lat=2000, min_lon=192, min_lat=94
real(kind=kind_phys) :: rhcmax = 0.9999999 !< max critical rel. hum.
+ real(kind=kind_phys) :: huge = 9.9692099683868690E36 ! NetCDF float FillValue
+
!--- stochastic physics control parameters
logical :: do_sppt = .false.
@@ -3680,7 +3677,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
h0facu, h0facs, &
!--- cellular automata
nca, scells, tlives, nca_g, ncells_g, nlives_g, nfracseed, &
- nseed, nseed_g, rcell, do_ca, &
+ nseed, nseed_g, rcell, do_ca, &
ca_sgs, ca_global,iseed_ca,ca_smooth, &
nspinup,ca_amplitude,nsmooth,ca_closure,ca_entr,ca_trigger, &
!--- IAU
@@ -3689,7 +3686,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
!--- debug options
debug, pre_rad, print_diff_pgr, &
!--- parameter range for critical relative humidity
- max_lon, max_lat, min_lon, min_lat, rhcmax, &
+ max_lon, max_lat, min_lon, min_lat, rhcmax, huge, &
phys_version, &
!--- aerosol scavenging factors ('name:value' string array)
fscav_aero
@@ -3868,6 +3865,14 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
!--- coupling parameters
Model%cplflx = cplflx
Model%cplice = cplice
+ ! Consistency check, currently allowed combinations are
+ ! Model%cplflx == .false. and Model%cplice == .false. (uncoupled runs)
+ ! Model%cplflx == .true. and Model%cplice == .true. (coupled S2S runs)
+ ! Model%cplflx == .true. and Model%cplice == .false. (HAFS FV3ATM-HYCOM)
+ if (Model%cplice .and. .not. Model%cplflx) then
+ print *,' Logic error: Model%cplflx==.false. and Model%cplice==.true. is currently not supported - shutting down'
+ stop
+ endif
Model%cplocn2atm = cplocn2atm
Model%cplwav = cplwav
Model%cplwav2atm = cplwav2atm
@@ -4809,9 +4814,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
Model%dxmin = log(tem/(min_lon*min_lat))
Model%dxinv = 1.0d0 / (Model%dxmax-Model%dxmin)
Model%rhcmax = rhcmax
+ Model%huge = huge
if (Model%me == Model%master) write(*,*)' dxmax=',Model%dxmax,' dxmin=',Model%dxmin,' dxinv=',Model%dxinv, &
'max_lon=',max_lon,' max_lat=',max_lat,' min_lon=',min_lon,' min_lat=',min_lat, &
- ' rhc_max=',Model%rhcmax
+ ' rhc_max=',Model%rhcmax,' huge=',huge
!--- set nrcm
if (Model%ras) then
@@ -6715,7 +6721,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center)
Diag%sbsnoa = zero
Diag%snowca = zero
Diag%soilm = zero
- Diag%tmpmin = huge
+ Diag%tmpmin = Model%huge
Diag%tmpmax = zero
Diag%dusfc = zero
Diag%dvsfc = zero
@@ -6731,7 +6737,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center)
Diag%dugwd = zero
Diag%dvgwd = zero
Diag%psmean = zero
- Diag%spfhmin = huge
+ Diag%spfhmin = Model%huge
Diag%spfhmax = zero
Diag%u10mmax = zero
Diag%v10mmax = zero
@@ -7098,8 +7104,6 @@ subroutine interstitial_create (Interstitial, IM, Model)
allocate (Interstitial%save_v (IM,Model%levs))
allocate (Interstitial%sbsno (IM))
allocate (Interstitial%scmpsw (IM))
- allocate (Interstitial%semis_ice (IM))
- allocate (Interstitial%semis_land (IM))
allocate (Interstitial%semis_water (IM))
allocate (Interstitial%sfcalb (IM,NF_ALBD))
allocate (Interstitial%sigma (IM))
@@ -7107,9 +7111,7 @@ subroutine interstitial_create (Interstitial, IM, Model)
allocate (Interstitial%sigmafrac (IM,Model%levs))
allocate (Interstitial%sigmatot (IM,Model%levs))
allocate (Interstitial%snowc (IM))
- allocate (Interstitial%snowd_ice (IM))
-! allocate (Interstitial%snowd_land (IM))
-! allocate (Interstitial%snowd_water (IM))
+! allocate (Interstitial%snowd_ice (IM))
allocate (Interstitial%snohf (IM))
allocate (Interstitial%snowmt (IM))
allocate (Interstitial%stress (IM))
@@ -7125,7 +7127,7 @@ subroutine interstitial_create (Interstitial, IM, Model)
allocate (Interstitial%trans (IM))
allocate (Interstitial%tseal (IM))
allocate (Interstitial%tsfa (IM))
- allocate (Interstitial%tsfc_ice (IM))
+! allocate (Interstitial%tsfc_ice (IM))
allocate (Interstitial%tsfc_water (IM))
allocate (Interstitial%tsfg (IM))
allocate (Interstitial%tsurf_ice (IM))
@@ -7138,7 +7140,7 @@ subroutine interstitial_create (Interstitial, IM, Model)
allocate (Interstitial%vdftra (IM,Model%levs,Interstitial%nvdiff)) !GJF first dimension was set as 'IX' in GFS_physics_driver
allocate (Interstitial%vegf1d (IM))
allocate (Interstitial%wcbmax (IM))
- allocate (Interstitial%weasd_ice (IM))
+! allocate (Interstitial%weasd_ice (IM))
! allocate (Interstitial%weasd_land (IM))
! allocate (Interstitial%weasd_water (IM))
allocate (Interstitial%wind (IM))
@@ -7706,24 +7708,24 @@ subroutine interstitial_phys_reset (Interstitial, Model)
Interstitial%adjvisdfd = clear_val
Interstitial%bexp1d = clear_val
Interstitial%cd = clear_val
- Interstitial%cd_ice = huge
- Interstitial%cd_land = huge
- Interstitial%cd_water = huge
+ Interstitial%cd_ice = Model%huge
+ Interstitial%cd_land = Model%huge
+ Interstitial%cd_water = Model%huge
Interstitial%cdq = clear_val
- Interstitial%cdq_ice = huge
- Interstitial%cdq_land = huge
- Interstitial%cdq_water = huge
- Interstitial%chh_ice = huge
- Interstitial%chh_land = huge
- Interstitial%chh_water = huge
+ Interstitial%cdq_ice = Model%huge
+ Interstitial%cdq_land = Model%huge
+ Interstitial%cdq_water = Model%huge
+ Interstitial%chh_ice = Model%huge
+ Interstitial%chh_land = Model%huge
+ Interstitial%chh_water = Model%huge
Interstitial%cld1d = clear_val
Interstitial%cldf = clear_val
Interstitial%clw = clear_val
Interstitial%clw(:,:,2) = -999.9
Interstitial%clx = clear_val
- Interstitial%cmm_ice = huge
- Interstitial%cmm_land = huge
- Interstitial%cmm_water = huge
+ Interstitial%cmm_ice = Model%huge
+ Interstitial%cmm_land = Model%huge
+ Interstitial%cmm_water = Model%huge
Interstitial%cnvc = clear_val
Interstitial%cnvw = clear_val
Interstitial%ctei_r = clear_val
@@ -7749,31 +7751,31 @@ subroutine interstitial_phys_reset (Interstitial, Model)
Interstitial%dvsfc1 = clear_val
Interstitial%elvmax = clear_val
Interstitial%ep1d = clear_val
- Interstitial%ep1d_ice = huge
- Interstitial%ep1d_land = huge
- Interstitial%ep1d_water = huge
- Interstitial%evap_ice = huge
- Interstitial%evap_land = huge
- Interstitial%evap_water = huge
+ Interstitial%ep1d_ice = Model%huge
+ Interstitial%ep1d_land = Model%huge
+ Interstitial%ep1d_water = Model%huge
+ Interstitial%evap_ice = Model%huge
+ Interstitial%evap_land = Model%huge
+ Interstitial%evap_water = Model%huge
Interstitial%evbs = clear_val
Interstitial%evcw = clear_val
- Interstitial%ffhh_ice = huge
- Interstitial%ffhh_land = huge
- Interstitial%ffhh_water = huge
+ Interstitial%ffhh_ice = Model%huge
+ Interstitial%ffhh_land = Model%huge
+ Interstitial%ffhh_water = Model%huge
Interstitial%fh2 = clear_val
- Interstitial%fh2_ice = huge
- Interstitial%fh2_land = huge
- Interstitial%fh2_water = huge
+ Interstitial%fh2_ice = Model%huge
+ Interstitial%fh2_land = Model%huge
+ Interstitial%fh2_water = Model%huge
Interstitial%flag_cice = .false.
Interstitial%flag_guess = .false.
Interstitial%flag_iter = .true.
- Interstitial%ffmm_ice = huge
- Interstitial%ffmm_land = huge
- Interstitial%ffmm_water = huge
+ Interstitial%ffmm_ice = Model%huge
+ Interstitial%ffmm_land = Model%huge
+ Interstitial%ffmm_water = Model%huge
Interstitial%fm10 = clear_val
- Interstitial%fm10_ice = huge
- Interstitial%fm10_land = huge
- Interstitial%fm10_water = huge
+ Interstitial%fm10_ice = Model%huge
+ Interstitial%fm10_land = Model%huge
+ Interstitial%fm10_water = Model%huge
Interstitial%frland = clear_val
Interstitial%fscav = clear_val
Interstitial%fswtr = clear_val
@@ -7793,9 +7795,9 @@ subroutine interstitial_phys_reset (Interstitial, Model)
Interstitial%zvfun = clear_val
Interstitial%hffac = clear_val
Interstitial%hflxq = clear_val
- Interstitial%hflx_ice = huge
- Interstitial%hflx_land = huge
- Interstitial%hflx_water = huge
+ Interstitial%hflx_ice = Model%huge
+ Interstitial%hflx_land = Model%huge
+ Interstitial%hflx_water = Model%huge
Interstitial%dry = .false.
Interstitial%icy = .false.
Interstitial%lake = .false.
@@ -7813,17 +7815,17 @@ subroutine interstitial_phys_reset (Interstitial, Model)
Interstitial%oc = clear_val
Interstitial%prcpmp = clear_val
Interstitial%prnum = clear_val
- Interstitial%qss_ice = huge
- Interstitial%qss_land = huge
- Interstitial%qss_water = huge
+ Interstitial%qss_ice = Model%huge
+ Interstitial%qss_land = Model%huge
+ Interstitial%qss_water = Model%huge
Interstitial%raincd = clear_val
Interstitial%raincs = clear_val
Interstitial%rainmcadj = clear_val
Interstitial%rainp = clear_val
Interstitial%rb = clear_val
- Interstitial%rb_ice = huge
- Interstitial%rb_land = huge
- Interstitial%rb_water = huge
+ Interstitial%rb_ice = Model%huge
+ Interstitial%rb_land = Model%huge
+ Interstitial%rb_water = Model%huge
Interstitial%rhc = clear_val
Interstitial%runoff = clear_val
Interstitial%save_q = clear_val
@@ -7832,46 +7834,42 @@ subroutine interstitial_phys_reset (Interstitial, Model)
Interstitial%save_u = clear_val
Interstitial%save_v = clear_val
Interstitial%sbsno = clear_val
- Interstitial%semis_ice = clear_val
- Interstitial%semis_land = clear_val
Interstitial%semis_water = clear_val
Interstitial%sigma = clear_val
Interstitial%sigmaf = clear_val
Interstitial%sigmafrac = clear_val
Interstitial%sigmatot = clear_val
Interstitial%snowc = clear_val
- Interstitial%snowd_ice = huge
-! Interstitial%snowd_land = huge
-! Interstitial%snowd_water = huge
+! Interstitial%snowd_ice = Model%huge
Interstitial%snohf = clear_val
Interstitial%snowmt = clear_val
Interstitial%stress = clear_val
- Interstitial%stress_ice = huge
- Interstitial%stress_land = huge
- Interstitial%stress_water = huge
+ Interstitial%stress_ice = Model%huge
+ Interstitial%stress_land = Model%huge
+ Interstitial%stress_water = Model%huge
Interstitial%theta = clear_val
- Interstitial%tprcp_ice = huge
- Interstitial%tprcp_land = huge
- Interstitial%tprcp_water = huge
+ Interstitial%tprcp_ice = Model%huge
+ Interstitial%tprcp_land = Model%huge
+ Interstitial%tprcp_water = Model%huge
Interstitial%trans = clear_val
Interstitial%tseal = clear_val
- Interstitial%tsfc_ice = huge
- Interstitial%tsfc_water = huge
- Interstitial%tsurf_ice = huge
- Interstitial%tsurf_land = huge
- Interstitial%tsurf_water = huge
+! Interstitial%tsfc_ice = Model%huge
+ Interstitial%tsfc_water = Model%huge
+ Interstitial%tsurf_ice = Model%huge
+ Interstitial%tsurf_land = Model%huge
+ Interstitial%tsurf_water = Model%huge
Interstitial%ud_mf = clear_val
- Interstitial%uustar_ice = huge
- Interstitial%uustar_land = huge
- Interstitial%uustar_water = huge
+ Interstitial%uustar_ice = Model%huge
+ Interstitial%uustar_land = Model%huge
+ Interstitial%uustar_water = Model%huge
Interstitial%vdftra = clear_val
Interstitial%vegf1d = clear_val
Interstitial%lndp_vgf = clear_val
Interstitial%wcbmax = clear_val
- Interstitial%weasd_ice = huge
-! Interstitial%weasd_land = huge
-! Interstitial%weasd_water = huge
- Interstitial%wind = huge
+! Interstitial%weasd_ice = Model%huge
+! Interstitial%weasd_land = Model%huge
+! Interstitial%weasd_water = Model%huge
+ Interstitial%wind = Model%huge
Interstitial%work1 = clear_val
Interstitial%work2 = clear_val
Interstitial%work3 = clear_val
@@ -7959,20 +7957,20 @@ subroutine interstitial_phys_reset (Interstitial, Model)
end if
if (Model%lsm == Model%lsm_noah_wrfv4) then
Interstitial%canopy_save = clear_val
- Interstitial%chk_land = huge
+ Interstitial%chk_land = Model%huge
Interstitial%cmc = clear_val
Interstitial%dqsdt2 = clear_val
Interstitial%drain_in_m_sm1 = clear_val
Interstitial%flag_lsm = .false.
Interstitial%flag_lsm_glacier= .false.
- Interstitial%qs1 = huge
- Interstitial%qv1 = huge
+ Interstitial%qs1 = Model%huge
+ Interstitial%qv1 = Model%huge
Interstitial%rho1 = clear_val
Interstitial%runoff_in_m_sm1 = clear_val
Interstitial%slc_save = clear_val
Interstitial%smcmax = clear_val
Interstitial%smc_save = clear_val
- Interstitial%snowd_land_save = huge
+ Interstitial%snowd_land_save = Model%huge
Interstitial%snow_depth = clear_val
Interstitial%snohf_snow = clear_val
Interstitial%snohf_frzgra = clear_val
@@ -7980,9 +7978,9 @@ subroutine interstitial_phys_reset (Interstitial, Model)
Interstitial%soilm_in_m = clear_val
Interstitial%stc_save = clear_val
Interstitial%th1 = clear_val
- Interstitial%tprcp_rate_land = huge
- Interstitial%tsfc_land_save = huge
- Interstitial%weasd_land_save = huge
+ Interstitial%tprcp_rate_land = Model%huge
+ Interstitial%tsfc_land_save = Model%huge
+ Interstitial%weasd_land_save = Model%huge
end if
!
! Set flag for resetting maximum hourly output fields
diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta
index 47b124b3b..40ea9cb7f 100644
--- a/ccpp/data/GFS_typedefs.meta
+++ b/ccpp/data/GFS_typedefs.meta
@@ -516,8 +516,8 @@
type = real
kind = kind_phys
[tisfc]
- standard_name = sea_ice_temperature
- long_name = sea ice surface skin temperature
+ standard_name = surface_skin_temperature_over_ice
+ long_name = surface skin temperature over ice
units = K
dimensions = (horizontal_loop_extent)
type = real
@@ -592,6 +592,20 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
+[snodi]
+ standard_name = surface_snow_thickness_water_equivalent_over_ice
+ long_name = water equivalent snow depth over ice
+ units = mm
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
+[weasdi]
+ standard_name = water_equivalent_accumulated_snow_depth_over_ice
+ long_name = water equiv of acc snow depth over land
+ units = mm
+ dimensions = (horizontal_loop_extent)
+ type = real
+ kind = kind_phys
[hprime]
standard_name = statistical_measures_of_subgrid_orography_collection_array
long_name = orographic metrics
@@ -1346,7 +1360,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. flag_for_cice_albedo .eqv. .true.)
+ active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. flag_for_cice_albedo)
[albdifvis_ice]
standard_name = surface_albedo_diffuse_visible_over_ice
long_name = diffuse surface albedo visible band over ice
@@ -1354,7 +1368,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. flag_for_cice_albedo .eqv. .true.)
+ active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. flag_for_cice_albedo)
[albdirnir_ice]
standard_name = surface_albedo_direct_NIR_over_ice
long_name = direct surface albedo NIR band over ice
@@ -1362,7 +1376,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. flag_for_cice_albedo .eqv. .true.)
+ active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. flag_for_cice_albedo)
[albdifnir_ice]
standard_name = surface_albedo_diffuse_NIR_over_ice
long_name = diffuse surface albedo NIR band over ice
@@ -1370,7 +1384,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
- active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. flag_for_cice_albedo .eqv. .true.)
+ active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme .or. flag_for_cice_albedo)
[wetness]
standard_name = normalized_soil_wetness_for_land_surface_model
long_name = normalized soil wetness for lsm
@@ -5203,6 +5217,13 @@
dimensions = ()
type = real
kind = kind_phys
+[huge]
+ standard_name = netcdf_float_fillvalue
+ long_name = definition of NetCDF float FillValue
+ units = none
+ dimensions = ()
+ type = real
+ kind = kind_phys
[icloud]
standard_name = control_for_cloud_area_fraction_option
long_name = cloud effect to the optical depth and cloud fraction in radiation
@@ -8215,20 +8236,6 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
-[semis_land]
- standard_name = surface_longwave_emissivity_over_land_interstitial
- long_name = surface lw emissivity in fraction over land (temporary use as interstitial)
- units = frac
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
-[semis_ice]
- standard_name = surface_longwave_emissivity_over_ice_interstitial
- long_name = surface lw emissivity in fraction over ice (temporary use as interstitial)
- units = frac
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
[ep1d]
standard_name = surface_upward_potential_latent_heat_flux
long_name = surface upward potential latent heat flux
@@ -9537,13 +9544,6 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
-[snowd_ice]
- standard_name = surface_snow_thickness_water_equivalent_over_ice
- long_name = water equivalent snow depth over ice
- units = mm
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
[snowd_land_save]
standard_name = surface_snow_thickness_water_equivalent_over_land_save
long_name = water equivalent snow depth over land before entering a physics scheme
@@ -9770,13 +9770,6 @@
type = real
kind = kind_phys
active = (control_for_land_surface_scheme == identifier_for_noah_wrfv4_land_surface_scheme)
-[tsfc_ice]
- standard_name = surface_skin_temperature_over_ice
- long_name = surface skin temperature over ice
- units = K
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
[tsfg]
standard_name = surface_ground_temperature_for_radiation
long_name = surface ground temperature for radiation
@@ -9883,13 +9876,6 @@
type = real
kind = kind_phys
active = (control_for_land_surface_scheme == identifier_for_noah_wrfv4_land_surface_scheme)
-[weasd_ice]
- standard_name = water_equivalent_accumulated_snow_depth_over_ice
- long_name = water equiv of acc snow depth over ice
- units = mm
- dimensions = (horizontal_loop_extent)
- type = real
- kind = kind_phys
[wind]
standard_name = wind_speed_at_lowest_model_layer
long_name = wind speed at lowest model level
@@ -10666,13 +10652,6 @@
units = none
dimensions = ()
type = integer
-[huge]
- standard_name = netcdf_float_fillvalue
- long_name = definition of NetCDF float FillValue
- units = none
- dimensions = ()
- type = real
- kind = kind_phys
[con_cliq]
standard_name = specific_heat_of_liquid_water_at_constant_pressure
long_name = specific heat of liquid water at constant pressure
diff --git a/ccpp/physics b/ccpp/physics
index 3423a1370..b12e6c328 160000
--- a/ccpp/physics
+++ b/ccpp/physics
@@ -1 +1 @@
-Subproject commit 3423a13700f9b8d4a7329ac155f3923a45c392ec
+Subproject commit b12e6c3280804fe04e4256654c35602cc930d5cd
diff --git a/ccpp/suites/suite_FV3_GFSv17alp_cpldnsstrasnoahmp.xml b/ccpp/suites/suite_FV3_GFSv17alp_cpldnsstrasnoahmp.xml
new file mode 100644
index 000000000..0f9268de2
--- /dev/null
+++ b/ccpp/suites/suite_FV3_GFSv17alp_cpldnsstrasnoahmp.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+ fv_sat_adj
+
+
+
+
+ GFS_time_vary_pre
+ GFS_rrtmg_setup
+ GFS_rad_time_vary
+ GFS_phys_time_vary
+
+
+
+
+ GFS_suite_interstitial_rad_reset
+ GFS_rrtmg_pre
+ GFS_radiation_surface
+ rrtmg_sw_pre
+ rrtmg_sw
+ rrtmg_sw_post
+ rrtmg_lw_pre
+ rrtmg_lw
+ rrtmg_lw_post
+ GFS_rrtmg_post
+
+
+
+
+ GFS_suite_interstitial_phys_reset
+ GFS_suite_stateout_reset
+ get_prs_fv3
+ GFS_suite_interstitial_1
+ GFS_surface_generic_pre
+ GFS_surface_composites_pre
+ dcyc2t3
+ GFS_surface_composites_inter
+ GFS_suite_interstitial_2
+
+
+
+ sfc_diff
+ GFS_surface_loop_control_part1
+ sfc_nst_pre
+ sfc_nst
+ sfc_nst_post
+ noahmpdrv
+ sfc_cice
+ sfc_sice
+ GFS_surface_loop_control_part2
+
+
+
+ GFS_surface_composites_post
+ sfc_diag
+ sfc_diag_post
+ GFS_surface_generic_post
+ GFS_PBL_generic_pre
+ satmedmfvdifq
+ GFS_PBL_generic_post
+ GFS_GWD_generic_pre
+ cires_ugwp
+ cires_ugwp_post
+ GFS_GWD_generic_post
+ GFS_suite_stateout_update
+ ozphys_2015
+ h2ophys
+ get_phi_fv3
+ GFS_suite_interstitial_3
+ GFS_DCNV_generic_pre
+ rascnv
+ GFS_DCNV_generic_post
+ GFS_SCNV_generic_pre
+ samfshalcnv
+ GFS_SCNV_generic_post
+ GFS_suite_interstitial_4
+ cnvc90
+ GFS_MP_generic_pre
+ gfdl_cloud_microphys
+ GFS_MP_generic_post
+ maximum_hourly_diagnostics
+ phys_tend
+
+
+
+
+ GFS_stochastics
+
+
+
+
diff --git a/ccpp/suites/suite_FV3_GFSv17alp_cpldnsstrasugwpnoahmp.xml b/ccpp/suites/suite_FV3_GFSv17alp_cpldnsstrasugwpnoahmp.xml
new file mode 100644
index 000000000..8b1a37662
--- /dev/null
+++ b/ccpp/suites/suite_FV3_GFSv17alp_cpldnsstrasugwpnoahmp.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+ fv_sat_adj
+
+
+
+
+ GFS_time_vary_pre
+ GFS_rrtmg_setup
+ GFS_rad_time_vary
+ GFS_phys_time_vary
+
+
+
+
+ GFS_suite_interstitial_rad_reset
+ GFS_rrtmg_pre
+ GFS_radiation_surface
+ rrtmg_sw_pre
+ rrtmg_sw
+ rrtmg_sw_post
+ rrtmg_lw_pre
+ rrtmg_lw
+ rrtmg_lw_post
+ GFS_rrtmg_post
+
+
+
+
+ GFS_suite_interstitial_phys_reset
+ GFS_suite_stateout_reset
+ get_prs_fv3
+ GFS_suite_interstitial_1
+ GFS_surface_generic_pre
+ GFS_surface_composites_pre
+ dcyc2t3
+ GFS_surface_composites_inter
+ GFS_suite_interstitial_2
+
+
+
+ sfc_diff
+ GFS_surface_loop_control_part1
+ noahmpdrv
+ sfc_cice
+ sfc_sice
+ sfc_nst_pre
+ sfc_nst
+ sfc_nst_post
+ GFS_surface_loop_control_part2
+
+
+
+ GFS_surface_composites_post
+ sfc_diag
+ sfc_diag_post
+ GFS_surface_generic_post
+ GFS_PBL_generic_pre
+ satmedmfvdifq
+ GFS_PBL_generic_post
+ GFS_GWD_generic_pre
+ ugwpv1_gsldrag
+ ugwpv1_gsldrag_post
+ GFS_GWD_generic_post
+ GFS_suite_stateout_update
+ ozphys_2015
+ h2ophys
+ get_phi_fv3
+ GFS_suite_interstitial_3
+ GFS_DCNV_generic_pre
+ rascnv
+ GFS_DCNV_generic_post
+ GFS_SCNV_generic_pre
+ samfshalcnv
+ GFS_SCNV_generic_post
+ GFS_suite_interstitial_4
+ cnvc90
+ GFS_MP_generic_pre
+ gfdl_cloud_microphys
+ GFS_MP_generic_post
+ maximum_hourly_diagnostics
+ phys_tend
+
+
+
+
+ GFS_stochastics
+
+
+
+
diff --git a/ccpp/suites/suite_FV3_GFSv17alp_cpldnsstrasugwprrtmgp.xml b/ccpp/suites/suite_FV3_GFSv17alp_cpldnsstrasugwprrtmgp.xml
new file mode 100644
index 000000000..ab494c52a
--- /dev/null
+++ b/ccpp/suites/suite_FV3_GFSv17alp_cpldnsstrasugwprrtmgp.xml
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+ fv_sat_adj
+
+
+
+
+ GFS_time_vary_pre
+ GFS_rrtmgp_setup
+ GFS_rad_time_vary
+ GFS_phys_time_vary
+
+
+
+
+ GFS_suite_interstitial_rad_reset
+ GFS_rrtmgp_pre
+ GFS_radiation_surface
+ GFS_rrtmgp_gfdlmp_pre
+ GFS_rrtmgp_cloud_overlap_pre
+ GFS_cloud_diagnostics
+ GFS_rrtmgp_sw_pre
+ rrtmgp_sw_gas_optics
+ rrtmgp_sw_aerosol_optics
+ rrtmgp_sw_cloud_optics
+ rrtmgp_sw_cloud_sampling
+ rrtmgp_sw_rte
+ GFS_rrtmgp_sw_post
+ rrtmgp_lw_pre
+ rrtmgp_lw_gas_optics
+ rrtmgp_lw_aerosol_optics
+ rrtmgp_lw_cloud_optics
+ rrtmgp_lw_cloud_sampling
+ rrtmgp_lw_rte
+ GFS_rrtmgp_lw_post
+
+
+
+
+ GFS_suite_interstitial_phys_reset
+ GFS_suite_stateout_reset
+ get_prs_fv3
+ GFS_suite_interstitial_1
+ GFS_surface_generic_pre
+ GFS_surface_composites_pre
+ dcyc2t3
+ GFS_surface_composites_inter
+ GFS_suite_interstitial_2
+
+
+
+ sfc_diff
+ GFS_surface_loop_control_part1
+ lsm_noah
+ sfc_cice
+ sfc_sice
+ sfc_nst_pre
+ sfc_nst
+ sfc_nst_post
+ GFS_surface_loop_control_part2
+
+
+
+ GFS_surface_composites_post
+ sfc_diag
+ sfc_diag_post
+ GFS_surface_generic_post
+ GFS_PBL_generic_pre
+ satmedmfvdifq
+ GFS_PBL_generic_post
+ GFS_GWD_generic_pre
+ ugwpv1_gsldrag
+ ugwpv1_gsldrag_post
+ GFS_GWD_generic_post
+ GFS_suite_stateout_update
+ ozphys_2015
+ h2ophys
+ get_phi_fv3
+ GFS_suite_interstitial_3
+ GFS_DCNV_generic_pre
+ rascnv
+ GFS_DCNV_generic_post
+ GFS_SCNV_generic_pre
+ samfshalcnv
+ GFS_SCNV_generic_post
+ GFS_suite_interstitial_4
+ cnvc90
+ GFS_MP_generic_pre
+ gfdl_cloud_microphys
+ GFS_MP_generic_post
+ maximum_hourly_diagnostics
+ phys_tend
+
+
+
+
+ GFS_stochastics
+
+
+
+
diff --git a/ccpp/suites/suite_FV3_GFSv17alp_cpldnsstsasugwpnoahmp.xml b/ccpp/suites/suite_FV3_GFSv17alp_cpldnsstsasugwpnoahmp.xml
new file mode 100644
index 000000000..10d0043aa
--- /dev/null
+++ b/ccpp/suites/suite_FV3_GFSv17alp_cpldnsstsasugwpnoahmp.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+ fv_sat_adj
+
+
+
+
+ GFS_time_vary_pre
+ GFS_rrtmg_setup
+ GFS_rad_time_vary
+ GFS_phys_time_vary
+
+
+
+
+ GFS_suite_interstitial_rad_reset
+ GFS_rrtmg_pre
+ GFS_radiation_surface
+ rrtmg_sw_pre
+ rrtmg_sw
+ rrtmg_sw_post
+ rrtmg_lw_pre
+ rrtmg_lw
+ rrtmg_lw_post
+ GFS_rrtmg_post
+
+
+
+
+ GFS_suite_interstitial_phys_reset
+ GFS_suite_stateout_reset
+ get_prs_fv3
+ GFS_suite_interstitial_1
+ GFS_surface_generic_pre
+ GFS_surface_composites_pre
+ dcyc2t3
+ GFS_surface_composites_inter
+ GFS_suite_interstitial_2
+
+
+
+ sfc_diff
+ GFS_surface_loop_control_part1
+ noahmpdrv
+ sfc_cice
+ sfc_sice
+ sfc_nst_pre
+ sfc_nst
+ sfc_nst_post
+ GFS_surface_loop_control_part2
+
+
+
+ GFS_surface_composites_post
+ sfc_diag
+ sfc_diag_post
+ GFS_surface_generic_post
+ GFS_PBL_generic_pre
+ satmedmfvdifq
+ GFS_PBL_generic_post
+ GFS_GWD_generic_pre
+ ugwpv1_gsldrag
+ ugwpv1_gsldrag_post
+ GFS_GWD_generic_post
+ GFS_suite_stateout_update
+ ozphys_2015
+ h2ophys
+ get_phi_fv3
+ GFS_suite_interstitial_3
+ GFS_DCNV_generic_pre
+ samfdeepcnv
+ GFS_DCNV_generic_post
+ GFS_SCNV_generic_pre
+ samfshalcnv
+ GFS_SCNV_generic_post
+ GFS_suite_interstitial_4
+ cnvc90
+ GFS_MP_generic_pre
+ gfdl_cloud_microphys
+ GFS_MP_generic_post
+ maximum_hourly_diagnostics
+ phys_tend
+
+
+
+
+ GFS_stochastics
+
+
+
+
diff --git a/ccpp/suites/suite_FV3_GFSv17alpha_cpldnsstsas_ugwp.xml b/ccpp/suites/suite_FV3_GFSv17alpha_cpldnsstsas_ugwp.xml
new file mode 100644
index 000000000..6b6dd9c2d
--- /dev/null
+++ b/ccpp/suites/suite_FV3_GFSv17alpha_cpldnsstsas_ugwp.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+ fv_sat_adj
+
+
+
+
+ GFS_time_vary_pre
+ GFS_rrtmg_setup
+ GFS_rad_time_vary
+ GFS_phys_time_vary
+
+
+
+
+ GFS_suite_interstitial_rad_reset
+ GFS_rrtmg_pre
+ GFS_radiation_surface
+ rrtmg_sw_pre
+ rrtmg_sw
+ rrtmg_sw_post
+ rrtmg_lw_pre
+ rrtmg_lw
+ rrtmg_lw_post
+ GFS_rrtmg_post
+
+
+
+
+ GFS_suite_interstitial_phys_reset
+ GFS_suite_stateout_reset
+ get_prs_fv3
+ GFS_suite_interstitial_1
+ GFS_surface_generic_pre
+ GFS_surface_composites_pre
+ dcyc2t3
+ GFS_surface_composites_inter
+ GFS_suite_interstitial_2
+
+
+
+ sfc_diff
+ GFS_surface_loop_control_part1
+ lsm_noah
+ sfc_nst_pre
+ sfc_nst
+ sfc_nst_post
+ sfc_cice
+ sfc_sice
+ GFS_surface_loop_control_part2
+
+
+
+ GFS_surface_composites_post
+ sfc_diag
+ sfc_diag_post
+ GFS_surface_generic_post
+ GFS_PBL_generic_pre
+ satmedmfvdifq
+ GFS_PBL_generic_post
+ GFS_GWD_generic_pre
+ ugwpv1_gsldrag
+ ugwpv1_gsldrag_post
+ GFS_GWD_generic_post
+ GFS_suite_stateout_update
+ ozphys_2015
+ h2ophys
+ get_phi_fv3
+ GFS_suite_interstitial_3
+ GFS_DCNV_generic_pre
+ samfdeepcnv
+ GFS_DCNV_generic_post
+ GFS_SCNV_generic_pre
+ samfshalcnv
+ GFS_SCNV_generic_post
+ GFS_suite_interstitial_4
+ cnvc90
+ GFS_MP_generic_pre
+ gfdl_cloud_microphys
+ GFS_MP_generic_post
+ maximum_hourly_diagnostics
+ phys_tend
+
+
+
+
+ GFS_stochastics
+
+
+
+
diff --git a/io/FV3GFS_io.F90 b/io/FV3GFS_io.F90
index 7d5a84f4e..f0f82d264 100644
--- a/io/FV3GFS_io.F90
+++ b/io/FV3GFS_io.F90
@@ -313,8 +313,10 @@ subroutine FV3GFS_GFS_checksum (Model, GFS_Data, Atm_block)
temp2d(i,j,89) = GFS_Data(nb)%Sfcprop%albdifvis_lnd(ix)
temp2d(i,j,90) = GFS_Data(nb)%Sfcprop%albdifnir_lnd(ix)
temp2d(i,j,91) = GFS_Data(nb)%Sfcprop%emis_lnd(ix)
+ temp2d(i,j,92) = GFS_Data(nb)%Sfcprop%emis_ice(ix)
+ temp2d(i,j,93) = GFS_Data(nb)%Sfcprop%sncovr_ice(ix)
- idx_opt = 92
+ idx_opt = 93
if (Model%use_cice_alb .or. Model%lsm == Model%lsm_ruc) then
temp2d(i,j,idx_opt+1) = GFS_Data(nb)%Sfcprop%albdirvis_ice(ix)
temp2d(i,j,idx_opt+2) = GFS_Data(nb)%Sfcprop%albdirnir_ice(ix)
@@ -385,18 +387,12 @@ subroutine FV3GFS_GFS_checksum (Model, GFS_Data, Atm_block)
temp2d(i,j,idx_opt+6) = GFS_Data(nb)%Sfcprop%tsnow_ice(ix)
temp2d(i,j,idx_opt+7) = GFS_Data(nb)%Sfcprop%snowfallac_land(ix)
temp2d(i,j,idx_opt+8) = GFS_Data(nb)%Sfcprop%snowfallac_ice(ix)
- temp2d(i,j,idx_opt+9) = GFS_Data(nb)%Sfcprop%sncovr_ice(ix)
- temp2d(i,j,idx_opt+10) = GFS_Data(nb)%Sfcprop%sfalb_lnd(ix)
- temp2d(i,j,idx_opt+11) = GFS_Data(nb)%Sfcprop%sfalb_lnd_bck(ix)
-! temp2d(i,j,idx_opt+16) = GFS_Data(nb)%Sfcprop%albdirvis_ice(ix)
-! temp2d(i,j,idx_opt+17) = GFS_Data(nb)%Sfcprop%albdirnir_ice(ix)
-! temp2d(i,j,idx_opt+18) = GFS_Data(nb)%Sfcprop%albdifvis_ice(ix)
-! temp2d(i,j,idx_opt+19) = GFS_Data(nb)%Sfcprop%albdifnir_ice(ix)
- temp2d(i,j,idx_opt+12) = GFS_Data(nb)%Sfcprop%sfalb_ice(ix)
- temp2d(i,j,idx_opt+13) = GFS_Data(nb)%Sfcprop%emis_ice(ix)
- idx_opt = idx_opt + 14
+ temp2d(i,j,idx_opt+9) = GFS_Data(nb)%Sfcprop%sfalb_lnd(ix)
+ temp2d(i,j,idx_opt+10) = GFS_Data(nb)%Sfcprop%sfalb_lnd_bck(ix)
+ temp2d(i,j,idx_opt+11) = GFS_Data(nb)%Sfcprop%sfalb_ice(ix)
+ idx_opt = idx_opt + 11
if (Model%rdlai) then
- temp2d(i,j,idx_opt+23) = GFS_Data(nb)%Sfcprop%xlaixy(ix)
+ temp2d(i,j,idx_opt+1) = GFS_Data(nb)%Sfcprop%xlaixy(ix)
idx_opt = idx_opt + 1
endif
endif
@@ -531,9 +527,9 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta
if (Model%lsm == Model%lsm_ruc .and. warm_start) then
if(Model%rdlai) then
- nvar_s2r = 15
+ nvar_s2r = 13
else
- nvar_s2r = 14
+ nvar_s2r = 12
end if
nvar_s3 = 5
else
@@ -657,7 +653,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta
enddo
enddo
- nvar_s2m = 44
+ nvar_s2m = 48
if (Model%use_cice_alb .or. Model%lsm == Model%lsm_ruc) then
nvar_s2m = nvar_s2m + 4
! nvar_s2m = nvar_s2m + 5
@@ -844,13 +840,17 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta
sfc_name2(42) = 'albdifvis_lnd'
sfc_name2(43) = 'albdifnir_lnd'
sfc_name2(44) = 'emis_lnd'
+ sfc_name2(45) = 'emis_ice'
+ sfc_name2(46) = 'sncovr_ice'
+ sfc_name2(47) = 'snodi' ! snowd on ice portion of a cell
+ sfc_name2(48) = 'weasdi'! weasd on ice portion of a cell
if (Model%use_cice_alb .or. Model%lsm == Model%lsm_ruc) then
- sfc_name2(45) = 'albdirvis_ice'
- sfc_name2(46) = 'albdifvis_ice'
- sfc_name2(47) = 'albdirnir_ice'
- sfc_name2(48) = 'albdifnir_ice'
-! sfc_name2(49) = 'sfalb_ice'
+ sfc_name2(49) = 'albdirvis_ice'
+ sfc_name2(50) = 'albdifvis_ice'
+ sfc_name2(51) = 'albdirnir_ice'
+ sfc_name2(52) = 'albdifnir_ice'
+! sfc_name2(53) = 'sfalb_ice'
endif
if(Model%cplwav) then
@@ -919,17 +919,11 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta
sfc_name2(nvar_s2m+25) = 'tsnow_ice'
sfc_name2(nvar_s2m+26) = 'snowfall_acc_land'
sfc_name2(nvar_s2m+27) = 'snowfall_acc_ice'
- sfc_name2(nvar_s2m+28) = 'sncovr_ice'
- sfc_name2(nvar_s2m+29) = 'sfalb_lnd'
- sfc_name2(nvar_s2m+30) = 'sfalb_lnd_bck'
-! sfc_name2(nvar_s2m+31) = 'albdirvis_ice'
-! sfc_name2(nvar_s2m+32) = 'albdirnir_ice'
-! sfc_name2(nvar_s2m+33) = 'albdifvis_ice'
-! sfc_name2(nvar_s2m+34) = 'albdifnir_ice'
- sfc_name2(nvar_s2m+31) = 'sfalb_ice'
- sfc_name2(nvar_s2m+32) = 'emis_ice'
+ sfc_name2(nvar_s2m+28) = 'sfalb_lnd'
+ sfc_name2(nvar_s2m+29) = 'sfalb_lnd_bck'
+ sfc_name2(nvar_s2m+30) = 'sfalb_ice'
if (Model%rdlai) then
- sfc_name2(nvar_s2m+33) = 'lai'
+ sfc_name2(nvar_s2m+31) = 'lai'
endif
else if (Model%lsm == Model%lsm_ruc .and. Model%rdlai) then
sfc_name2(nvar_s2m+19) = 'lai'
@@ -971,12 +965,14 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta
if (trim(sfc_name2(num)) == 'sncovr'.or. trim(sfc_name2(num)) == 'tsfcl' .or. trim(sfc_name2(num)) == 'zorll' &
.or. trim(sfc_name2(num)) == 'zorli' .or. trim(sfc_name2(num)) == 'zorlwav' &
.or. trim(sfc_name2(num)) == 'snodl' .or. trim(sfc_name2(num)) == 'weasdl' &
+ .or. trim(sfc_name2(num)) == 'snodi' .or. trim(sfc_name2(num)) == 'weasdi' &
.or. trim(sfc_name2(num)) == 'tsfc' .or. trim(sfc_name2(num)) == 'zorlw' &
.or. trim(sfc_name2(num)) == 'albdirvis_lnd' .or. trim(sfc_name2(num)) == 'albdirnir_lnd' &
.or. trim(sfc_name2(num)) == 'albdifvis_lnd' .or. trim(sfc_name2(num)) == 'albdifnir_lnd' &
.or. trim(sfc_name2(num)) == 'albdirvis_ice' .or. trim(sfc_name2(num)) == 'albdirnir_ice' &
.or. trim(sfc_name2(num)) == 'albdifvis_ice' .or. trim(sfc_name2(num)) == 'albdifnir_ice' &
- .or. trim(sfc_name2(num)) == 'emis_lnd' ) then
+ .or. trim(sfc_name2(num)) == 'emis_lnd' .or. trim(sfc_name2(num)) == 'emis_ice' &
+ .or. trim(sfc_name2(num)) == 'sncovr_ice') then
if(is_lsoil) then
call register_restart_field(Sfc_restart, sfc_name2(num), var2_p, dimensions=(/'lat','lon'/), is_optional=.true.)
else
@@ -1169,13 +1165,17 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta
Sfcprop(nb)%albdirnir_lnd(ix) = sfc_var2(i,j,41)
Sfcprop(nb)%albdifvis_lnd(ix) = sfc_var2(i,j,42)
Sfcprop(nb)%albdifnir_lnd(ix) = sfc_var2(i,j,43)
- Sfcprop(nb)%emis_lnd(ix) = sfc_var2(i,j,44)
+ Sfcprop(nb)%emis_lnd(ix) = sfc_var2(i,j,44)
+ Sfcprop(nb)%emis_ice(ix) = sfc_var2(i,j,45)
+ Sfcprop(nb)%sncovr_ice(ix) = sfc_var2(i,j,46)
+ Sfcprop(nb)%snodi(ix) = sfc_var2(i,j,47) !--- snodi (snowd on ice portion of a cell)
+ Sfcprop(nb)%weasdi(ix) = sfc_var2(i,j,48) !--- weasdi (weasd on ice portion of a cell)
if (Model%use_cice_alb .or. Model%lsm == Model%lsm_ruc) then
- Sfcprop(nb)%albdirvis_ice(ix) = sfc_var2(i,j,45)
- Sfcprop(nb)%albdifvis_ice(ix) = sfc_var2(i,j,46)
- Sfcprop(nb)%albdirnir_ice(ix) = sfc_var2(i,j,47)
- Sfcprop(nb)%albdifnir_ice(ix) = sfc_var2(i,j,48)
-! Sfcprop(nb)%sfalb_ice(ix) = sfc_var2(i,j,49)
+ Sfcprop(nb)%albdirvis_ice(ix) = sfc_var2(i,j,49)
+ Sfcprop(nb)%albdifvis_ice(ix) = sfc_var2(i,j,50)
+ Sfcprop(nb)%albdirnir_ice(ix) = sfc_var2(i,j,51)
+ Sfcprop(nb)%albdifnir_ice(ix) = sfc_var2(i,j,52)
+! Sfcprop(nb)%sfalb_ice(ix) = sfc_var2(i,j,53)
endif
if(Model%cplwav) then
Sfcprop(nb)%zorlwav(ix) = sfc_var2(i,j,nvar_s2m) !--- (zorl from wave model)
@@ -1280,7 +1280,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta
endif
endif
- if (warm_start) then
+ if (warm_start .and. Model%kdt > 1) then
Sfcprop(nb)%slmsk(ix) = sfc_var2(i,j,1) !--- slmsk
endif
@@ -1340,17 +1340,11 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta
Sfcprop(nb)%tsnow_ice(ix) = sfc_var2(i,j,nvar_s2m+25)
Sfcprop(nb)%snowfallac_land(ix) = sfc_var2(i,j,nvar_s2m+26)
Sfcprop(nb)%snowfallac_ice(ix) = sfc_var2(i,j,nvar_s2m+27)
- Sfcprop(nb)%sncovr_ice(ix) = sfc_var2(i,j,nvar_s2m+28)
- Sfcprop(nb)%sfalb_lnd(ix) = sfc_var2(i,j,nvar_s2m+29)
- Sfcprop(nb)%sfalb_lnd_bck(ix) = sfc_var2(i,j,nvar_s2m+30)
-! Sfcprop(nb)%albdirvis_ice(ix) = sfc_var2(i,j,nvar_s2m+31)
-! Sfcprop(nb)%albdirnir_ice(ix) = sfc_var2(i,j,nvar_s2m+32)
-! Sfcprop(nb)%albdifvis_ice(ix) = sfc_var2(i,j,nvar_s2m+33)
-! Sfcprop(nb)%albdifnir_ice(ix) = sfc_var2(i,j,nvar_s2m+34)
- Sfcprop(nb)%sfalb_ice(ix) = sfc_var2(i,j,nvar_s2m+31)
- Sfcprop(nb)%emis_ice(ix) = sfc_var2(i,j,nvar_s2m+32)
+ Sfcprop(nb)%sfalb_lnd(ix) = sfc_var2(i,j,nvar_s2m+28)
+ Sfcprop(nb)%sfalb_lnd_bck(ix) = sfc_var2(i,j,nvar_s2m+29)
+ Sfcprop(nb)%sfalb_ice(ix) = sfc_var2(i,j,nvar_s2m+30)
if (Model%rdlai) then
- Sfcprop(nb)%xlaixy(ix) = sfc_var2(i,j,nvar_s2m+33)
+ Sfcprop(nb)%xlaixy(ix) = sfc_var2(i,j,nvar_s2m+31)
endif
else if (Model%lsm == Model%lsm_ruc) then
! Initialize RUC snow cover on ice from snow cover
@@ -1518,8 +1512,29 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta
enddo
endif
+ if (sfc_var2(i,j,45) < -9990.0_r8) then
+ if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing emis_ice')
+!$omp parallel do default(shared) private(nb, ix)
+ do nb = 1, Atm_block%nblks
+ do ix = 1, Atm_block%blksz(nb)
+ Sfcprop(nb)%emis_ice(ix) = 0.96
+ enddo
+ enddo
+ endif
+
+ if (sfc_var2(i,j,46) < -9990.0_r8 .and. Model%lsm /= Model%lsm_ruc) then
+ if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing sncovr_ice')
+!$omp parallel do default(shared) private(nb, ix)
+ do nb = 1, Atm_block%nblks
+ do ix = 1, Atm_block%blksz(nb)
+! Sfcprop(nb)%sncovr_ice(ix) = Sfcprop(nb)%sncovr(ix)
+ Sfcprop(nb)%sncovr_ice(ix) = zero
+ enddo
+ enddo
+ endif
+
if (Model%use_cice_alb) then
- if (sfc_var2(i,j,45) < -9990.0_r8) then
+ if (sfc_var2(i,j,49) < -9990.0_r8) then
!$omp parallel do default(shared) private(nb, ix)
do nb = 1, Atm_block%nblks
do ix = 1, Atm_block%blksz(nb)
@@ -1629,7 +1644,7 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta
integer :: is, ie
integer, allocatable, dimension(:) :: buffer
- nvar2m = 44
+ nvar2m = 48
if (Model%use_cice_alb .or. Model%lsm == Model%lsm_ruc) then
nvar2m = nvar2m + 4
! nvar2m = nvar2m + 5
@@ -1638,9 +1653,9 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta
nvar2o = 18
if (Model%lsm == Model%lsm_ruc) then
if (Model%rdlai) then
- nvar2r = 15
+ nvar2r = 13
else
- nvar2r = 14
+ nvar2r = 12
endif
nvar3 = 5
else
@@ -1819,13 +1834,17 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta
sfc_name2(42) = 'albdifvis_lnd'
sfc_name2(43) = 'albdifnir_lnd'
sfc_name2(44) = 'emis_lnd'
+ sfc_name2(45) = 'emis_ice'
+ sfc_name2(46) = 'sncovr_ice'
+ sfc_name2(47) = 'snodi' !snowd on ice portion of a cell
+ sfc_name2(48) = 'weasdi'!weasd on ice portion of a cell
if (Model%use_cice_alb .or. Model%lsm == Model%lsm_ruc) then
- sfc_name2(45) = 'albdirvis_ice'
- sfc_name2(46) = 'albdifvis_ice'
- sfc_name2(47) = 'albdirnir_ice'
- sfc_name2(48) = 'albdifnir_ice'
-! sfc_name2(49) = 'sfalb_ice'
+ sfc_name2(49) = 'albdirvis_ice'
+ sfc_name2(50) = 'albdifvis_ice'
+ sfc_name2(51) = 'albdirnir_ice'
+ sfc_name2(52) = 'albdifnir_ice'
+! sfc_name2(53) = 'sfalb_ice'
endif
if (Model%cplwav) then
@@ -1860,17 +1879,11 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta
sfc_name2(nvar2m+25) = 'tsnow_ice'
sfc_name2(nvar2m+26) = 'snowfall_acc_land'
sfc_name2(nvar2m+27) = 'snowfall_acc_ice'
- sfc_name2(nvar2m+28) = 'sncovr_ice'
- sfc_name2(nvar2m+29) = 'sfalb_lnd'
- sfc_name2(nvar2m+30) = 'sfalb_lnd_bck'
-! sfc_name2(nvar2m+31) = 'albdirvis_ice'
-! sfc_name2(nvar2m+32) = 'albdirnir_ice'
-! sfc_name2(nvar2m+33) = 'albdifvis_ice'
-! sfc_name2(nvar2m+34) = 'albdifnir_ice'
- sfc_name2(nvar2m+31) = 'sfalb_ice'
- sfc_name2(nvar2m+32) = 'emis_ice'
+ sfc_name2(nvar2m+28) = 'sfalb_lnd'
+ sfc_name2(nvar2m+29) = 'sfalb_lnd_bck'
+ sfc_name2(nvar2m+30) = 'sfalb_ice'
if (Model%rdlai) then
- sfc_name2(nvar2m+33) = 'lai'
+ sfc_name2(nvar2m+31) = 'lai'
endif
else if(Model%lsm == Model%lsm_noahmp) then
! Only needed when Noah MP LSM is used - 29 2D
@@ -1912,12 +1925,14 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta
if (trim(sfc_name2(num)) == 'sncovr' .or. trim(sfc_name2(num)) == 'tsfcl' .or.trim(sfc_name2(num)) == 'zorll' &
.or. trim(sfc_name2(num)) == 'zorli' .or.trim(sfc_name2(num)) == 'zorlwav' &
.or. trim(sfc_name2(num)) == 'snodl' .or. trim(sfc_name2(num)) == 'weasdl' &
+ .or. trim(sfc_name2(num)) == 'snodi' .or. trim(sfc_name2(num)) == 'weasdi' &
.or. trim(sfc_name2(num)) == 'tsfc' .or. trim(sfc_name2(num)) == 'zorlw' &
.or. trim(sfc_name2(num)) == 'albdirvis_lnd' .or. trim(sfc_name2(num)) == 'albdirnir_lnd' &
.or. trim(sfc_name2(num)) == 'albdifvis_lnd' .or. trim(sfc_name2(num)) == 'albdifnir_lnd' &
.or. trim(sfc_name2(num)) == 'albdirvis_ice' .or. trim(sfc_name2(num)) == 'albdirnir_ice' &
.or. trim(sfc_name2(num)) == 'albdifvis_ice' .or. trim(sfc_name2(num)) == 'albdifnir_ice' &
- .or. trim(sfc_name2(num)) == 'emis_lnd' ) then
+ .or. trim(sfc_name2(num)) == 'emis_lnd' .or. trim(sfc_name2(num)) == 'emis_ice' &
+ .or. trim(sfc_name2(num)) == 'sncovr_ice' ) then
call register_restart_field(Sfc_restart, sfc_name2(num), var2_p, dimensions=(/'xaxis_1','yaxis_1','Time '/), is_optional=.true.)
else
call register_restart_field(Sfc_restart, sfc_name2(num), var2_p, dimensions=(/'xaxis_1', 'yaxis_1', 'Time '/) )
@@ -2062,12 +2077,16 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta
sfc_var2(i,j,42) = Sfcprop(nb)%albdifvis_lnd(ix)
sfc_var2(i,j,43) = Sfcprop(nb)%albdifnir_lnd(ix)
sfc_var2(i,j,44) = Sfcprop(nb)%emis_lnd(ix)
+ sfc_var2(i,j,45) = Sfcprop(nb)%emis_ice(ix)
+ sfc_var2(i,j,46) = Sfcprop(nb)%sncovr_ice(ix)
+ sfc_var2(i,j,47) = Sfcprop(nb)%snodi(ix) !--- snodi (snowd on ice)
+ sfc_var2(i,j,48) = Sfcprop(nb)%weasdi(ix) !--- weasdi (weasd on ice)
if (Model%use_cice_alb .or. Model%lsm == Model%lsm_ruc) then
- sfc_var2(i,j,45) = Sfcprop(nb)%albdirvis_ice(ix)
- sfc_var2(i,j,46) = Sfcprop(nb)%albdifvis_ice(ix)
- sfc_var2(i,j,47) = Sfcprop(nb)%albdirnir_ice(ix)
- sfc_var2(i,j,48) = Sfcprop(nb)%albdifnir_ice(ix)
-! sfc_var2(i,j,49) = Sfcprop(nb)%sfalb_ice(ix)
+ sfc_var2(i,j,49) = Sfcprop(nb)%albdirvis_ice(ix)
+ sfc_var2(i,j,50) = Sfcprop(nb)%albdifvis_ice(ix)
+ sfc_var2(i,j,51) = Sfcprop(nb)%albdirnir_ice(ix)
+ sfc_var2(i,j,52) = Sfcprop(nb)%albdifnir_ice(ix)
+! sfc_var2(i,j,53) = Sfcprop(nb)%sfalb_ice(ix)
endif
if (Model%cplwav) then
sfc_var2(i,j,nvar2m) = Sfcprop(nb)%zorlwav(ix) !--- zorlwav (zorl from wav)
@@ -2105,17 +2124,11 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta
sfc_var2(i,j,nvar2m+25) = Sfcprop(nb)%tsnow_ice(ix)
sfc_var2(i,j,nvar2m+26) = Sfcprop(nb)%snowfallac_land(ix)
sfc_var2(i,j,nvar2m+27) = Sfcprop(nb)%snowfallac_ice(ix)
- sfc_var2(i,j,nvar2m+28) = Sfcprop(nb)%sncovr_ice(ix)
- sfc_var2(i,j,nvar2m+29) = Sfcprop(nb)%sfalb_lnd(ix)
- sfc_var2(i,j,nvar2m+30) = Sfcprop(nb)%sfalb_lnd_bck(ix)
-! sfc_var2(i,j,nvar2m+31) = Sfcprop(nb)%albdirvis_ice(ix)
-! sfc_var2(i,j,nvar2m+32) = Sfcprop(nb)%albdirnir_ice(ix)
-! sfc_var2(i,j,nvar2m+33) = Sfcprop(nb)%albdifvis_ice(ix)
-! sfc_var2(i,j,nvar2m+34) = Sfcprop(nb)%albdifnir_ice(ix)
- sfc_var2(i,j,nvar2m+31) = Sfcprop(nb)%sfalb_ice(ix)
- sfc_var2(i,j,nvar2m+32) = Sfcprop(nb)%emis_ice(ix)
+ sfc_var2(i,j,nvar2m+28) = Sfcprop(nb)%sfalb_lnd(ix)
+ sfc_var2(i,j,nvar2m+29) = Sfcprop(nb)%sfalb_lnd_bck(ix)
+ sfc_var2(i,j,nvar2m+30) = Sfcprop(nb)%sfalb_ice(ix)
if (Model%rdlai) then
- sfc_var2(i,j,nvar2m+33) = Sfcprop(nb)%xlaixy(ix)
+ sfc_var2(i,j,nvar2m+31) = Sfcprop(nb)%xlaixy(ix)
endif
else if (Model%lsm == Model%lsm_noahmp) then
!--- Extra Noah MP variables
@@ -2152,6 +2165,7 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta
do k = 1,Model%kice
sfc_var3ice(i,j,k) = Sfcprop(nb)%tiice(ix,k) !--- internal ice temperature
+ if (sfc_var3ice(i,j,k) < one) sfc_var3ice(i,j,k) = zero
enddo
if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_wrfv4) then