diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index dad8494ea..f46a79689 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -20,6 +20,7 @@ 'physics/physics/h2o_def.f', 'physics/physics/ozne_def.f', 'physics/physics/radlw_param.f', + 'physics/physics/radiation_surface.f', 'data/CCPP_typedefs.F90', 'data/GFS_typedefs.F90', 'data/CCPP_data.F90', @@ -102,6 +103,7 @@ 'physics/physics/GFS_debug.F90', 'physics/physics/GFS_phys_time_vary.fv3.F90', 'physics/physics/GFS_rad_time_vary.fv3.F90', + 'physics/physics/GFS_radiation_surface.F90', 'physics/physics/GFS_rrtmg_post.F90', 'physics/physics/GFS_rrtmg_pre.F90', 'physics/physics/GFS_rrtmg_setup.F90', diff --git a/ccpp/data/CCPP_typedefs.F90 b/ccpp/data/CCPP_typedefs.F90 index 4685d856d..7cd287b5d 100644 --- a/ccpp/data/CCPP_typedefs.F90 +++ b/ccpp/data/CCPP_typedefs.F90 @@ -226,11 +226,11 @@ subroutine interstitial_create (Interstitial, is, ie, isd, ied, js, je, jsd, jed else Interstitial%ngas = 1 end if - allocate(Interstitial%rilist(0:Interstitial%ngas)) - allocate(Interstitial%cpilist(0:Interstitial%ngas)) + allocate(Interstitial%rilist(1:Interstitial%ngas)) + allocate(Interstitial%cpilist(1:Interstitial%ngas)) if (present(rilist)) then - Interstitial%rilist = rilist - Interstitial%cpilist = cpilist + Interstitial%rilist = rilist(1:Interstitial%ngas) + Interstitial%cpilist = cpilist(1:Interstitial%ngas) else Interstitial%rilist = 0.0 Interstitial%cpilist = 0.0 diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index b937c3ede..6f2099bab 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -241,6 +241,11 @@ module GFS_typedefs real (kind=kind_phys), pointer :: hprime (:,:) => null() !< orographic metrics real (kind=kind_phys), pointer :: z0base (:) => null() !< background or baseline surface roughness length in m real (kind=kind_phys), pointer :: semisbase(:) => null() !< background surface emissivity + real (kind=kind_phys), pointer :: sfalb_lnd (:) => null() !< surface albedo over land for LSM + real (kind=kind_phys), pointer :: sfalb_ice (:) => null() !< surface albedo over ice for LSM + real (kind=kind_phys), pointer :: emis_lnd (:) => null() !< surface emissivity over land for LSM + real (kind=kind_phys), pointer :: emis_ice (:) => null() !< surface emissivity over ice for LSM + real (kind=kind_phys), pointer :: sfalb_lnd_bck (:) => null() !< snow-free albedo over land !--- In (radiation only) real (kind=kind_phys), pointer :: sncovr (:) => null() !< snow cover in fraction over land @@ -318,11 +323,14 @@ module GFS_typedefs real (kind=kind_phys), pointer :: smcwtdxy(:) => null() !< real (kind=kind_phys), pointer :: deeprechxy(:)=> null() !< real (kind=kind_phys), pointer :: rechxy (:) => null() !< - real (kind=kind_phys), pointer :: albdvis (:) => null() !< - real (kind=kind_phys), pointer :: albdnir (:) => null() !< - real (kind=kind_phys), pointer :: albivis (:) => null() !< - real (kind=kind_phys), pointer :: albinir (:) => null() !< - real (kind=kind_phys), pointer :: emiss (:) => null() !< + real (kind=kind_phys), pointer :: albdvis_lnd (:) => null() !< + real (kind=kind_phys), pointer :: albdnir_lnd (:) => null() !< + real (kind=kind_phys), pointer :: albivis_lnd (:) => null() !< + real (kind=kind_phys), pointer :: albinir_lnd (:) => null() !< + real (kind=kind_phys), pointer :: albdvis_ice (:) => null() !< + real (kind=kind_phys), pointer :: albdnir_ice (:) => null() !< + real (kind=kind_phys), pointer :: albivis_ice (:) => null() !< + real (kind=kind_phys), pointer :: albinir_ice (:) => null() !< real (kind=kind_phys), pointer :: snicexy (:,:) => null() !< real (kind=kind_phys), pointer :: snliqxy (:,:) => null() !< @@ -635,7 +643,9 @@ module GFS_typedefs integer :: ico2 !< prescribed global mean value (old opernl) integer :: ialb !< use climatology alb, based on sfc type !< 1 => use modis based alb - integer :: iems !< use fixed value of 1.0 + !< 2 => use LSM alb + integer :: iems !< 1 => use fixed value of 1.0 + !< 2 => use LSM emiss integer :: iaer !< default aerosol effect in sw only integer :: icliq_sw !< sw optical property for liquid clouds integer :: icice_sw !< sw optical property for ice clouds @@ -891,7 +901,6 @@ module GFS_typedefs logical :: lheatstrg !< flag for canopy heat storage parameterization logical :: cnvcld logical :: random_clds !< flag controls whether clouds are random - logical :: shal_cnv !< flag for calling shallow convection logical :: do_deep !< whether to do deep convection integer :: imfshalcnv !< flag for mass-flux shallow convection scheme @@ -1036,6 +1045,9 @@ module GFS_typedefs !< 6=areodynamical roughness over water with input 10-m wind !< 7=slightly decrease Cd for higher wind speed compare to 6 +!--- potential temperature definition in surface layer physics + logical :: thsfc_loc !< flag for local vs. standard potential temperature + !--- vertical diffusion real(kind=kind_phys) :: xkzm_m !< [in] bkgd_vdif_m background vertical diffusion for momentum real(kind=kind_phys) :: xkzm_h !< [in] bkgd_vdif_h background vertical diffusion for heat q @@ -1547,7 +1559,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: skebv_wts(:,:) => null() !< 10 meter v wind speed real (kind=kind_phys), pointer :: sppt_wts(:,:) => null() !< real (kind=kind_phys), pointer :: shum_wts(:,:) => null() !< - real (kind=kind_phys), pointer :: sfc_wts(:,:) => null() !< + real (kind=kind_phys), pointer :: sfc_wts(:,:) => null() !< real (kind=kind_phys), pointer :: zmtnblck(:) => null() ! null() !< u momentum change due to physics real (kind=kind_phys), pointer :: dv3dt (:,:,:) => null() !< v momentum change due to physics @@ -1992,7 +2004,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tsfc_land_save(:) => null() !< real (kind=kind_phys), pointer :: tsfc_water(:) => null() !< real (kind=kind_phys), pointer :: tsfg(:) => null() !< - real (kind=kind_phys), pointer :: tsurf(:) => null() !< real (kind=kind_phys), pointer :: tsurf_ice(:) => null() !< real (kind=kind_phys), pointer :: tsurf_land(:) => null() !< real (kind=kind_phys), pointer :: tsurf_water(:) => null() !< @@ -2020,6 +2031,9 @@ module GFS_typedefs real (kind=kind_phys), pointer :: xmu(:) => null() !< real (kind=kind_phys), pointer :: z01d(:) => null() !< real (kind=kind_phys), pointer :: zt1d(:) => null() !< + real (kind=kind_phys), pointer :: ztmax_ice(:) => null() !< + real (kind=kind_phys), pointer :: ztmax_land(:) => null() !< + real (kind=kind_phys), pointer :: ztmax_water(:) => null() !< !================================================================================================== ! UGWP - five mechnanisms of momentum deposition due to various types of GWs ! (oss, ofd, obl, ogw) + ngw = sum( sso + ngw) @@ -2284,6 +2298,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%fice (IM)) ! allocate (Sfcprop%hprim (IM)) allocate (Sfcprop%hprime (IM,Model%nmtvr)) + allocate (Sfcprop%emis_lnd (IM)) Sfcprop%slmsk = clear_val Sfcprop%oceanfrac = clear_val @@ -2304,6 +2319,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%fice = clear_val ! Sfcprop%hprim = clear_val Sfcprop%hprime = clear_val + Sfcprop%emis_lnd = clear_val !--- In (radiation only) allocate (Sfcprop%snoalb (IM)) @@ -2360,6 +2376,14 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%sncovr (IM)) if (Model%lsm == Model%lsm_ruc) then allocate (Sfcprop%sncovr_ice (IM)) + allocate (Sfcprop%emis_ice (IM)) + allocate (Sfcprop%albdvis_ice (IM)) + allocate (Sfcprop%albdnir_ice (IM)) + allocate (Sfcprop%albivis_ice (IM)) + allocate (Sfcprop%albinir_ice (IM)) + allocate (Sfcprop%sfalb_lnd (IM)) + allocate (Sfcprop%sfalb_ice (IM)) + allocate (Sfcprop%sfalb_lnd_bck (IM)) end if allocate (Sfcprop%canopy (IM)) allocate (Sfcprop%ffmm (IM)) @@ -2375,7 +2399,15 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%weasd = clear_val Sfcprop%sncovr = clear_val if (Model%lsm == Model%lsm_ruc) then - Sfcprop%sncovr_ice = clear_val + Sfcprop%sncovr_ice = clear_val + Sfcprop%emis_ice = clear_val + Sfcprop%albdvis_ice = clear_val + Sfcprop%albdnir_ice = clear_val + Sfcprop%albivis_ice = clear_val + Sfcprop%albinir_ice = clear_val + Sfcprop%sfalb_lnd = clear_val + Sfcprop%sfalb_ice = clear_val + Sfcprop%sfalb_lnd_bck = clear_val end if Sfcprop%canopy = clear_val Sfcprop%ffmm = clear_val @@ -2441,11 +2473,20 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate(Sfcprop%iceprv (IM)) allocate(Sfcprop%snowprv (IM)) allocate(Sfcprop%graupelprv(IM)) + allocate(Sfcprop%albdvis_lnd (IM)) + allocate(Sfcprop%albdnir_lnd (IM)) + allocate(Sfcprop%albivis_lnd (IM)) + allocate(Sfcprop%albinir_lnd (IM)) + Sfcprop%raincprv = clear_val Sfcprop%rainncprv = clear_val Sfcprop%iceprv = clear_val Sfcprop%snowprv = clear_val Sfcprop%graupelprv = clear_val + Sfcprop%albdvis_lnd = clear_val + Sfcprop%albdnir_lnd = clear_val + Sfcprop%albivis_lnd = clear_val + Sfcprop%albinir_lnd = clear_val end if ! Noah MP allocate and init when used ! @@ -2479,12 +2520,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%taussxy (IM)) allocate (Sfcprop%smcwtdxy (IM)) allocate (Sfcprop%deeprechxy (IM)) - allocate (Sfcprop%rechxy (IM)) - allocate (Sfcprop%albdvis (IM)) - allocate (Sfcprop%albdnir (IM)) - allocate (Sfcprop%albivis (IM)) - allocate (Sfcprop%albinir (IM)) - allocate (Sfcprop%emiss (IM)) + allocate (Sfcprop%rechxy (IM)) allocate (Sfcprop%snicexy (IM, Model%lsnow_lsm_lbound:Model%lsnow_lsm_ubound)) allocate (Sfcprop%snliqxy (IM, Model%lsnow_lsm_lbound:Model%lsnow_lsm_ubound)) allocate (Sfcprop%tsnoxy (IM, Model%lsnow_lsm_lbound:Model%lsnow_lsm_ubound)) @@ -2520,11 +2556,6 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%smcwtdxy = clear_val Sfcprop%deeprechxy = clear_val Sfcprop%rechxy = clear_val - Sfcprop%albdvis = clear_val - Sfcprop%albdnir = clear_val - Sfcprop%albivis = clear_val - Sfcprop%albinir = clear_val - Sfcprop%emiss = clear_val Sfcprop%snicexy = clear_val Sfcprop%snliqxy = clear_val @@ -2557,10 +2588,10 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate(Sfcprop%z0base(IM)) Sfcprop%z0base = clear_val end if - if (Model%lsm == Model%lsm_noah_wrfv4) then + !if (Model%lsm == Model%lsm_noah_wrfv4 .or. Model%lsm == Model%lsm_ruc) then allocate(Sfcprop%semisbase(IM)) Sfcprop%semisbase = clear_val - end if + !end if if (Model%lsm == Model%lsm_ruc) then ! For land surface models with different numbers of levels than the four NOAH levels @@ -2999,8 +3030,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: isol = 0 !< use prescribed solar constant integer :: ico2 = 0 !< prescribed global mean value (old opernl) integer :: ialb = 0 !< use climatology alb, based on sfc type - !< 1 => use modis based alb - integer :: iems = 0 !< use fixed value of 1.0 + !< 1 => use modis based alb (RUC lsm) + !< 2 => use LSM albedo (Noah MP lsm) + integer :: iems = 0 !< 1.0 => Noah lsm + !< 2.0 => Noah MP and RUC lsms integer :: iaer = 1 !< default aerosol effect in sw only integer :: icliq_sw = 1 !< sw optical property for liquid clouds integer :: icice_sw = 3 !< sw optical property for ice clouds @@ -3347,6 +3380,13 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !< 7=slightly decrease Cd for higher wind speed compare to 6 !< negative when cplwav2atm=.true. - i.e. two way wave coupling +!--- potential temperature definition in surface layer physics + logical :: thsfc_loc = .true. !< flag for local vs. standard potential temperature + !<.true. means use local (gridpoint) surface pressure to define potential temperature + !< this is the current GFS physics approach + !<.false. means use reference pressure of 1000 hPa to define potential temperature + !< this is the alternative method proposed by GSL + !--- vertical diffusion real(kind=kind_phys) :: xkzm_m = 1.0d0 !< [in] bkgd_vdif_m background vertical diffusion for momentum real(kind=kind_phys) :: xkzm_h = 1.0d0 !< [in] bkgd_vdif_h background vertical diffusion for heat q @@ -3504,6 +3544,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ignore_lake, & !--- surface layer sfc_z0_type, & + !--- switch beteeen local and standard potential temperature + thsfc_loc, & ! vertical diffusion xkzm_m, xkzm_h, xkzm_s, xkzminv, moninq_fac, dspfac, & bl_upfr, bl_dnfr, & @@ -4184,6 +4226,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%sfc_z0_type = sfc_z0_type if (Model%cplwav2atm) Model%sfc_z0_type = -1 +!--- potential temperature reference in sfc layer + Model%thsfc_loc = thsfc_loc + !--- vertical diffusion Model%xkzm_m = xkzm_m Model%xkzm_h = xkzm_h @@ -5756,17 +5801,17 @@ subroutine diag_create (Diag, IM, Model) if (.not. Model%lsm == Model%lsm_ruc) then allocate (Diag%wet1 (IM)) end if - allocate (Diag%sr (IM)) - allocate (Diag%tdomr (IM)) - allocate (Diag%tdomzr (IM)) - allocate (Diag%tdomip (IM)) - allocate (Diag%tdoms (IM)) + allocate (Diag%sr (IM)) + allocate (Diag%tdomr (IM)) + allocate (Diag%tdomzr (IM)) + allocate (Diag%tdomip (IM)) + allocate (Diag%tdoms (IM)) allocate (Diag%skebu_wts(IM,Model%levs)) allocate (Diag%skebv_wts(IM,Model%levs)) - allocate (Diag%sppt_wts(IM,Model%levs)) - allocate (Diag%shum_wts(IM,Model%levs)) - allocate (Diag%sfc_wts(IM,Model%n_var_lndp)) - allocate (Diag%zmtnblck(IM)) + allocate (Diag%sppt_wts (IM,Model%levs)) + allocate (Diag%shum_wts (IM,Model%levs)) + allocate (Diag%sfc_wts (IM,Model%n_var_lndp)) + allocate (Diag%zmtnblck (IM)) allocate (Diag%ca1 (IM)) allocate (Diag%ca2 (IM)) allocate (Diag%ca3 (IM)) @@ -5862,7 +5907,7 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%dv_ofdcol (IM) ) else allocate (Diag%dudt_ogw (IM,Model%levs)) - end if + endif !--- 3D diagnostics for Thompson MP / GFDL MP allocate (Diag%refl_10cm(IM,Model%levs)) @@ -6042,6 +6087,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%skebv_wts = zero Diag%sppt_wts = zero Diag%shum_wts = zero + Diag%sfc_wts = zero Diag%zmtnblck = zero if (Model%imp_physics == Model%imp_physics_fer_hires) then @@ -6505,7 +6551,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%tsfc_land (IM)) allocate (Interstitial%tsfc_water (IM)) allocate (Interstitial%tsfg (IM)) - allocate (Interstitial%tsurf (IM)) allocate (Interstitial%tsurf_ice (IM)) allocate (Interstitial%tsurf_land (IM)) allocate (Interstitial%tsurf_water (IM)) @@ -6529,6 +6574,9 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%xmu (IM)) allocate (Interstitial%z01d (IM)) allocate (Interstitial%zt1d (IM)) + allocate (Interstitial%ztmax_ice (IM)) + allocate (Interstitial%ztmax_land (IM)) + allocate (Interstitial%ztmax_water (IM)) ! RRTMGP if (Model%do_RRTMGP) then @@ -7246,7 +7294,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%tsfc_ice = huge Interstitial%tsfc_land = huge Interstitial%tsfc_water = huge - Interstitial%tsurf = clear_val Interstitial%tsurf_ice = huge Interstitial%tsurf_land = huge Interstitial%tsurf_water = huge @@ -7271,6 +7318,9 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%xmu = clear_val Interstitial%z01d = clear_val Interstitial%zt1d = clear_val + Interstitial%ztmax_ice = clear_val + Interstitial%ztmax_land = clear_val + Interstitial%ztmax_water = clear_val ! UGWP common Interstitial%tau_mtb = clear_val @@ -7278,6 +7328,8 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%tau_tofd = clear_val Interstitial%tau_ngw = clear_val Interstitial%tau_oss = clear_val + Interstitial%dudt_mtb = clear_val + Interstitial%dudt_tms = clear_val Interstitial%zmtb = clear_val Interstitial%zlwb = clear_val Interstitial%zogw = clear_val @@ -7628,7 +7680,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%tsfc_land ) = ', sum(Interstitial%tsfc_land ) write (0,*) 'sum(Interstitial%tsfc_water ) = ', sum(Interstitial%tsfc_water ) write (0,*) 'sum(Interstitial%tsfg ) = ', sum(Interstitial%tsfg ) - write (0,*) 'sum(Interstitial%tsurf ) = ', sum(Interstitial%tsurf ) write (0,*) 'sum(Interstitial%tsurf_ice ) = ', sum(Interstitial%tsurf_ice ) write (0,*) 'sum(Interstitial%tsurf_land ) = ', sum(Interstitial%tsurf_land ) write (0,*) 'sum(Interstitial%tsurf_water ) = ', sum(Interstitial%tsurf_water ) diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index fc64ff295..976005b7e 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -628,6 +628,46 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys +[emis_lnd] + standard_name = surface_longwave_emissivity_over_land + long_name = surface lw emissivity in fraction over land + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[emis_ice] + standard_name = surface_longwave_emissivity_over_ice + long_name = surface lw emissivity in fraction over ice + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[sfalb_lnd] + standard_name = surface_diffused_shortwave_albedo_over_land + long_name = mean surface diffused sw albedo over land + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + optional = F + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[sfalb_ice] + standard_name = surface_diffused_shortwave_albedo_over_ice + long_name = mean surface diffused sw albedo over ice + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[sfalb_lnd_bck] + standard_name = surface_snow_free_albedo_over_land + long_name = surface snow-free albedo over ice + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [alvwf] standard_name = mean_vis_albedo_with_weak_cosz_dependency long_name = mean vis albedo with weak cosz dependency @@ -1242,46 +1282,70 @@ type = real kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_noah_wrfv4_land_surface_scheme) -[albdvis] - standard_name = surface_albedo_direct_visible - long_name = direct surface albedo visible band +[albdvis_lnd] + standard_name = surface_albedo_direct_visible_over_land + long_name = direct surface albedo visible band over land units = frac dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) -[albdnir] - standard_name = surface_albedo_direct_NIR - long_name = direct surface albedo NIR band + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme .or. flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[albdnir_lnd] + standard_name = surface_albedo_direct_NIR_over_land + long_name = direct surface albedo NIR band over land units = frac dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) -[albivis] - standard_name = surface_albedo_diffuse_visible - long_name = diffuse surface albedo visible band + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme .or. flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[albivis_lnd] + standard_name = surface_albedo_diffuse_visible_over_land + long_name = diffuse surface albedo visible band over land units = frac dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) -[albinir] - standard_name = surface_albedo_diffuse_NIR - long_name = diffuse surface albedo NIR band + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme .or. flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[albinir_lnd] + standard_name = surface_albedo_diffuse_NIR_over_land + long_name = diffuse surface albedo NIR band over land units = frac dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) -[emiss] - standard_name = surface_emissivity_lsm - long_name = surface emissivity from lsm + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme .or. flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[albdvis_ice] + standard_name = surface_albedo_direct_visible_over_ice + long_name = direct surface albedo visible band over ice units = frac dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[albdnir_ice] + standard_name = surface_albedo_direct_NIR_over_ice + long_name = direct surface albedo NIR band over ice + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[albivis_ice] + standard_name = surface_albedo_diffuse_visible_over_ice + long_name = diffuse surface albedo visible band over ice + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[albinir_ice] + standard_name = surface_albedo_diffuse_NIR_over_ice + long_name = diffuse surface albedo NIR band over ice + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = ( flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [wetness] standard_name = normalized_soil_wetness_for_land_surface_model long_name = normalized soil wetness for lsm @@ -3746,6 +3810,12 @@ units = flag dimensions = () type = logical +[thsfc_loc] + standard_name = flag_for_reference_pressure_theta + long_name = flag for reference pressure in theta calculation + units = flag + dimensions = () + type = logical [hybedmf] standard_name = flag_for_hedmf long_name = flag for hybrid edmf pbl scheme (moninedmf) @@ -9472,6 +9542,13 @@ units = W m-2 dimensions = (horizontal_loop_extent) type = cmpfsw_type +[sfcalb] + standard_name = surface_albedo_components + long_name = surface albedo IR/UV/VIS components + units = frac + dimensions = (horizontal_loop_extent,number_of_components_for_surface_albedo) + type = real + kind = kind_phys [sfcalb(:,1)] standard_name = surface_albedo_due_to_near_IR_direct long_name = surface albedo due to near IR direct beam @@ -9852,13 +9929,6 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys -[tsurf] - standard_name = surface_skin_temperature_after_iteration - long_name = surface skin temperature after iteration - units = K - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys [tsurf_water] standard_name = surface_skin_temperature_after_iteration_over_water long_name = surface skin temperature after iteration over water @@ -10041,6 +10111,27 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys +[ztmax_water] + standard_name = bounded_surface_roughness_length_for_heat_over_water + long_name = bounded surface roughness length for heat over water + units = m + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[ztmax_land] + standard_name = bounded_surface_roughness_length_for_heat_over_land + long_name = bounded surface roughness length for heat over land + units = m + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[ztmax_ice] + standard_name = bounded_surface_roughness_length_for_heat_over_ice + long_name = bounded surface roughness length for heat over ice + units = m + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys [zt1d] standard_name = perturbation_of_heat_to_momentum_roughness_length_ratio long_name = perturbation of heat to momentum roughness length ratio diff --git a/ccpp/framework b/ccpp/framework index 7f8edebdc..54b158f91 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit 7f8edebdc9dc593db082d9a991473229f3cd9c58 +Subproject commit 54b158f91fb0abf58ab099d4ae80a57d7f1ee0b8 diff --git a/ccpp/physics b/ccpp/physics index 1fd62ea05..24cc09ed0 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 1fd62ea05ebfd18d2e6875271be856670cfed08f +Subproject commit 24cc09ed037c80659992cd3a9ef0900ed2d76785 diff --git a/ccpp/suites/suite_FV3_CPT_v0.xml b/ccpp/suites/suite_FV3_CPT_v0.xml index 0aa9e316d..27ee83bfd 100644 --- a/ccpp/suites/suite_FV3_CPT_v0.xml +++ b/ccpp/suites/suite_FV3_CPT_v0.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017.xml b/ccpp/suites/suite_FV3_GFS_2017.xml index a9c82812f..6d4fd9dbd 100644 --- a/ccpp/suites/suite_FV3_GFS_2017.xml +++ b/ccpp/suites/suite_FV3_GFS_2017.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_coupled.xml b/ccpp/suites/suite_FV3_GFS_2017_coupled.xml index e819383c6..baaa424f4 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_coupled.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_coupled.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_couplednsst.xml b/ccpp/suites/suite_FV3_GFS_2017_couplednsst.xml index 85a9335e1..4ef773980 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_couplednsst.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_couplednsst.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_csawmg.xml b/ccpp/suites/suite_FV3_GFS_2017_csawmg.xml index 7ae828ec0..d7cbe3c5d 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_csawmg.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_csawmg.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml b/ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml index f90c8471e..9999d076e 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_csawmgshoc.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_fv3wam.xml b/ccpp/suites/suite_FV3_GFS_2017_fv3wam.xml index e0e40e2cc..a9e8a7a95 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_fv3wam.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_fv3wam.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml index a6f4c4ab3..d5e0f0d43 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml index 8dc0f01f5..34f5b0462 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_noahmp.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml index e7e9f9789..8d50b9a40 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml index d73878b31..2e4e48b07 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_gfdlmp_regional_c768.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml b/ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml index f06794ef5..fdb6133e1 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_h2ophys.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_myj.xml b/ccpp/suites/suite_FV3_GFS_2017_myj.xml index 8684e2bea..bc94c9db1 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_myj.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_myj.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml b/ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml index 9fa9d320a..df76bc6e3 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_ntiedtke.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml b/ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml index 469b3ed99..01a17f4d8 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_ozphys_2015.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_sas.xml b/ccpp/suites/suite_FV3_GFS_2017_sas.xml index 32fd8f10a..7b05d6483 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_sas.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_sas.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml b/ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml index 9132cce62..865ccb9e3 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_satmedmf.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_satmedmf_coupled.xml b/ccpp/suites/suite_FV3_GFS_2017_satmedmf_coupled.xml index ea3774505..77a3fb47e 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_satmedmf_coupled.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_satmedmf_coupled.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_satmedmfq.xml b/ccpp/suites/suite_FV3_GFS_2017_satmedmfq.xml index 950a4f3a4..1224d7a12 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_satmedmfq.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_satmedmfq.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_shinhong.xml b/ccpp/suites/suite_FV3_GFS_2017_shinhong.xml index c98c66491..84783c62b 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_shinhong.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_shinhong.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_stretched.xml b/ccpp/suites/suite_FV3_GFS_2017_stretched.xml index cfe8e5841..bc147d0f9 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_stretched.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_stretched.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_2017_ysu.xml b/ccpp/suites/suite_FV3_GFS_2017_ysu.xml index 8fa09fbe5..dd9c90cc2 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_ysu.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_ysu.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_cpld_rasmgshoc.xml b/ccpp/suites/suite_FV3_GFS_cpld_rasmgshoc.xml index 7f4532fd8..4d782c5bf 100644 --- a/ccpp/suites/suite_FV3_GFS_cpld_rasmgshoc.xml +++ b/ccpp/suites/suite_FV3_GFS_cpld_rasmgshoc.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_cpld_rasmgshocnsst.xml b/ccpp/suites/suite_FV3_GFS_cpld_rasmgshocnsst.xml index e10379552..530ebc98c 100644 --- a/ccpp/suites/suite_FV3_GFS_cpld_rasmgshocnsst.xml +++ b/ccpp/suites/suite_FV3_GFS_cpld_rasmgshocnsst.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_cpldnst_rasmgshoc.xml b/ccpp/suites/suite_FV3_GFS_cpldnst_rasmgshoc.xml index 0527a5675..210dc6f0e 100644 --- a/ccpp/suites/suite_FV3_GFS_cpldnst_rasmgshoc.xml +++ b/ccpp/suites/suite_FV3_GFS_cpldnst_rasmgshoc.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_rasmgshoc.xml b/ccpp/suites/suite_FV3_GFS_rasmgshoc.xml index b3d21d014..351e86e8a 100644 --- a/ccpp/suites/suite_FV3_GFS_rasmgshoc.xml +++ b/ccpp/suites/suite_FV3_GFS_rasmgshoc.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v15.xml b/ccpp/suites/suite_FV3_GFS_v15.xml index eac7d728d..6daf8592c 100644 --- a/ccpp/suites/suite_FV3_GFS_v15.xml +++ b/ccpp/suites/suite_FV3_GFS_v15.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v15_gf.xml b/ccpp/suites/suite_FV3_GFS_v15_gf.xml index cdb00e747..5e1e17116 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_gf.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_gf.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml b/ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml index 6e59e47bf..a83390627 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_gf_thompson.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v15_mynn.xml b/ccpp/suites/suite_FV3_GFS_v15_mynn.xml index 9cfc40f2b..969369020 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_mynn.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_mynn.xml @@ -20,6 +20,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v15_ras.xml b/ccpp/suites/suite_FV3_GFS_v15_ras.xml index d182e78e0..601c419ca 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_ras.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_ras.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v15_rasmgshoc.xml b/ccpp/suites/suite_FV3_GFS_v15_rasmgshoc.xml index 9411ef974..e423d4154 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_rasmgshoc.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_rasmgshoc.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v15_thompson.xml b/ccpp/suites/suite_FV3_GFS_v15_thompson.xml index 3afab2d83..a8358d870 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_thompson.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_thompson.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml b/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml index bfe0763cd..f5dcc39f1 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn.xml @@ -15,6 +15,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn_lam3km.xml b/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn_lam3km.xml index 0ab350693..109434b56 100644 --- a/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn_lam3km.xml +++ b/ccpp/suites/suite_FV3_GFS_v15_thompson_mynn_lam3km.xml @@ -15,6 +15,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post @@ -65,7 +66,6 @@ get_phi_fv3 GFS_suite_interstitial_3 GFS_suite_interstitial_4 - cnvc90 GFS_MP_generic_pre mp_thompson_pre mp_thompson diff --git a/ccpp/suites/suite_FV3_GFS_v15p2.xml b/ccpp/suites/suite_FV3_GFS_v15p2.xml index 8026c1e90..cfca30b26 100644 --- a/ccpp/suites/suite_FV3_GFS_v15p2.xml +++ b/ccpp/suites/suite_FV3_GFS_v15p2.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v15p2_RRTMGP.xml b/ccpp/suites/suite_FV3_GFS_v15p2_RRTMGP.xml index 983b7b2e7..3436148b2 100644 --- a/ccpp/suites/suite_FV3_GFS_v15p2_RRTMGP.xml +++ b/ccpp/suites/suite_FV3_GFS_v15p2_RRTMGP.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmgp_pre + GFS_radiation_surface GFS_rrtmgp_gfdlmp_pre GFS_rrtmgp_cloud_overlap_pre GFS_cloud_diagnostics diff --git a/ccpp/suites/suite_FV3_GFS_v15p2_coupled.xml b/ccpp/suites/suite_FV3_GFS_v15p2_coupled.xml index faac2160d..64b6b3800 100644 --- a/ccpp/suites/suite_FV3_GFS_v15p2_coupled.xml +++ b/ccpp/suites/suite_FV3_GFS_v15p2_coupled.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v15p2_couplednsst.xml b/ccpp/suites/suite_FV3_GFS_v15p2_couplednsst.xml index c37277dee..39ba0e44c 100644 --- a/ccpp/suites/suite_FV3_GFS_v15p2_couplednsst.xml +++ b/ccpp/suites/suite_FV3_GFS_v15p2_couplednsst.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v15p2_no_nsst.xml b/ccpp/suites/suite_FV3_GFS_v15p2_no_nsst.xml index 790a17783..562e00aaf 100644 --- a/ccpp/suites/suite_FV3_GFS_v15p2_no_nsst.xml +++ b/ccpp/suites/suite_FV3_GFS_v15p2_no_nsst.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v15plus.xml b/ccpp/suites/suite_FV3_GFS_v15plus.xml index ef0d53b02..61f3c1e50 100644 --- a/ccpp/suites/suite_FV3_GFS_v15plus.xml +++ b/ccpp/suites/suite_FV3_GFS_v15plus.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v15plusras.xml b/ccpp/suites/suite_FV3_GFS_v15plusras.xml index 49b422bc6..d058093ae 100644 --- a/ccpp/suites/suite_FV3_GFS_v15plusras.xml +++ b/ccpp/suites/suite_FV3_GFS_v15plusras.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v16.xml b/ccpp/suites/suite_FV3_GFS_v16.xml index a7aab3689..a7c90a3ae 100644 --- a/ccpp/suites/suite_FV3_GFS_v16.xml +++ b/ccpp/suites/suite_FV3_GFS_v16.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v16_RRTMGP.xml b/ccpp/suites/suite_FV3_GFS_v16_RRTMGP.xml index 92d040f6b..60d77fb0e 100644 --- a/ccpp/suites/suite_FV3_GFS_v16_RRTMGP.xml +++ b/ccpp/suites/suite_FV3_GFS_v16_RRTMGP.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmgp_pre + GFS_radiation_surface GFS_rrtmgp_gfdlmp_pre GFS_rrtmgp_cloud_overlap_pre GFS_cloud_diagnostics diff --git a/ccpp/suites/suite_FV3_GFS_v16_coupled.xml b/ccpp/suites/suite_FV3_GFS_v16_coupled.xml index bb0fb859b..1a0625b0d 100644 --- a/ccpp/suites/suite_FV3_GFS_v16_coupled.xml +++ b/ccpp/suites/suite_FV3_GFS_v16_coupled.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v16_couplednsst.xml b/ccpp/suites/suite_FV3_GFS_v16_couplednsst.xml index f569ea2af..abda9cad6 100644 --- a/ccpp/suites/suite_FV3_GFS_v16_couplednsst.xml +++ b/ccpp/suites/suite_FV3_GFS_v16_couplednsst.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v16_csawmg.xml b/ccpp/suites/suite_FV3_GFS_v16_csawmg.xml index 98074d95d..0137150bd 100644 --- a/ccpp/suites/suite_FV3_GFS_v16_csawmg.xml +++ b/ccpp/suites/suite_FV3_GFS_v16_csawmg.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v16_flake.xml b/ccpp/suites/suite_FV3_GFS_v16_flake.xml index faf1a3f26..f2a111000 100644 --- a/ccpp/suites/suite_FV3_GFS_v16_flake.xml +++ b/ccpp/suites/suite_FV3_GFS_v16_flake.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v16_no_nsst.xml b/ccpp/suites/suite_FV3_GFS_v16_no_nsst.xml index 52ff83969..7241a0ddd 100644 --- a/ccpp/suites/suite_FV3_GFS_v16_no_nsst.xml +++ b/ccpp/suites/suite_FV3_GFS_v16_no_nsst.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v16_noahmp.xml b/ccpp/suites/suite_FV3_GFS_v16_noahmp.xml index a99c93e95..367b8f55b 100644 --- a/ccpp/suites/suite_FV3_GFS_v16_noahmp.xml +++ b/ccpp/suites/suite_FV3_GFS_v16_noahmp.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v16_ras.xml b/ccpp/suites/suite_FV3_GFS_v16_ras.xml index 4a7fc2b27..5b19a8ae3 100644 --- a/ccpp/suites/suite_FV3_GFS_v16_ras.xml +++ b/ccpp/suites/suite_FV3_GFS_v16_ras.xml @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v16_thompson.xml b/ccpp/suites/suite_FV3_GFS_v16_thompson.xml index 67e552d46..9d02b3f35 100644 --- a/ccpp/suites/suite_FV3_GFS_v16_thompson.xml +++ b/ccpp/suites/suite_FV3_GFS_v16_thompson.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GFS_v16b_ugwpv1.xml b/ccpp/suites/suite_FV3_GFS_v16_ugwpv1.xml similarity index 97% rename from ccpp/suites/suite_FV3_GFS_v16b_ugwpv1.xml rename to ccpp/suites/suite_FV3_GFS_v16_ugwpv1.xml index 7a2f7b38d..3f573bc21 100644 --- a/ccpp/suites/suite_FV3_GFS_v16b_ugwpv1.xml +++ b/ccpp/suites/suite_FV3_GFS_v16_ugwpv1.xml @@ -1,6 +1,6 @@ - + @@ -19,6 +19,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GSD_SAR.xml b/ccpp/suites/suite_FV3_GSD_SAR.xml index 29f6d3707..dc2eaeb3f 100644 --- a/ccpp/suites/suite_FV3_GSD_SAR.xml +++ b/ccpp/suites/suite_FV3_GSD_SAR.xml @@ -15,6 +15,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GSD_noah.xml b/ccpp/suites/suite_FV3_GSD_noah.xml index 42d55a5e4..2c7412221 100644 --- a/ccpp/suites/suite_FV3_GSD_noah.xml +++ b/ccpp/suites/suite_FV3_GSD_noah.xml @@ -15,6 +15,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml b/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml index 7ac1ebb40..7c6909b0d 100644 --- a/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml +++ b/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml @@ -15,6 +15,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GSD_v0.xml b/ccpp/suites/suite_FV3_GSD_v0.xml index 0d6531d19..b73a9840e 100644 --- a/ccpp/suites/suite_FV3_GSD_v0.xml +++ b/ccpp/suites/suite_FV3_GSD_v0.xml @@ -15,6 +15,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GSD_v0_RRTMGP.xml b/ccpp/suites/suite_FV3_GSD_v0_RRTMGP.xml index 76f22cfed..c183db711 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_RRTMGP.xml +++ b/ccpp/suites/suite_FV3_GSD_v0_RRTMGP.xml @@ -15,6 +15,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmgp_pre + GFS_radiation_surface GFS_rrtmgp_thompsonmp_pre GFS_rrtmgp_cloud_overlap_pre GFS_cloud_diagnostics diff --git a/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml b/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml index 21d45de21..b2145cc14 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml +++ b/ccpp/suites/suite_FV3_GSD_v0_drag_suite.xml @@ -15,6 +15,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml b/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml index d19d991f2..211f02093 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml +++ b/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml @@ -15,6 +15,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite.xml b/ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite.xml index 8a8d69b88..cb3b554f0 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite.xml +++ b/ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite.xml @@ -15,6 +15,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite_noah.xml b/ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite_noah.xml index a97b03ec7..21058ba66 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite_noah.xml +++ b/ccpp/suites/suite_FV3_GSD_v0_unified_ugwp_suite_noah.xml @@ -15,6 +15,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_HRRR.xml b/ccpp/suites/suite_FV3_HRRR.xml index c74fe17f8..95c1d963a 100644 --- a/ccpp/suites/suite_FV3_HRRR.xml +++ b/ccpp/suites/suite_FV3_HRRR.xml @@ -15,6 +15,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_RAP.xml b/ccpp/suites/suite_FV3_RAP.xml index da3fe46bf..7362a9ee4 100644 --- a/ccpp/suites/suite_FV3_RAP.xml +++ b/ccpp/suites/suite_FV3_RAP.xml @@ -15,6 +15,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_FV3_RRFS_v1beta.xml b/ccpp/suites/suite_FV3_RRFS_v1beta.xml index 2691dedd4..e1d4088cc 100644 --- a/ccpp/suites/suite_FV3_RRFS_v1beta.xml +++ b/ccpp/suites/suite_FV3_RRFS_v1beta.xml @@ -15,6 +15,7 @@ GFS_suite_interstitial_rad_reset sgscloud_radpre GFS_rrtmg_pre + GFS_radiation_surface rrtmg_sw_pre rrtmg_sw rrtmg_sw_post diff --git a/ccpp/suites/suite_HAFS_v0_hwrf.xml b/ccpp/suites/suite_HAFS_v0_hwrf.xml index 0e4bcbe53..2caf4b074 100644 --- a/ccpp/suites/suite_HAFS_v0_hwrf.xml +++ b/ccpp/suites/suite_HAFS_v0_hwrf.xml @@ -14,6 +14,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_lw_pre rrtmg_lw rrtmg_lw_post diff --git a/ccpp/suites/suite_HAFS_v0_hwrf_thompson.xml b/ccpp/suites/suite_HAFS_v0_hwrf_thompson.xml index 76d9aed57..2738906b8 100644 --- a/ccpp/suites/suite_HAFS_v0_hwrf_thompson.xml +++ b/ccpp/suites/suite_HAFS_v0_hwrf_thompson.xml @@ -15,6 +15,7 @@ GFS_suite_interstitial_rad_reset GFS_rrtmg_pre + GFS_radiation_surface rrtmg_lw_pre rrtmg_lw rrtmg_lw_post diff --git a/io/FV3GFS_io.F90 b/io/FV3GFS_io.F90 index 7050ca2d5..364f38efd 100644 --- a/io/FV3GFS_io.F90 +++ b/io/FV3GFS_io.F90 @@ -170,8 +170,13 @@ subroutine FV3GFS_GFS_checksum (Model, GFS_Data, Atm_block) ntr = size(GFS_Data(1)%Statein%qgrs,3) - if(Model%lsm == Model%lsm_noahmp) then - nsfcprop2d = 156 + if (Model%lsm == Model%lsm_noahmp) then + nsfcprop2d = 156 + elseif (Model%lsm == Model%lsm_ruc) then + nsfcprop2d = 125 + if (Model%rdlai) then + nsfcprop2d = nsfcprop2d + 1 + endif else nsfcprop2d = 102 endif @@ -301,16 +306,16 @@ subroutine FV3GFS_GFS_checksum (Model, GFS_Data, Atm_block) idx_opt = 87 if (Model%lsm == Model%lsm_noahmp) then - temp2d(i,j,idx_opt) = GFS_Data(nb)%Sfcprop%snowxy(ix) - temp2d(i,j,idx_opt+1) = GFS_Data(nb)%Sfcprop%tvxy(ix) - temp2d(i,j,idx_opt+2) = GFS_Data(nb)%Sfcprop%tgxy(ix) - temp2d(i,j,idx_opt+3) = GFS_Data(nb)%Sfcprop%canicexy(ix) - temp2d(i,j,idx_opt+4) = GFS_Data(nb)%Sfcprop%canliqxy(ix) - temp2d(i,j,idx_opt+5) = GFS_Data(nb)%Sfcprop%eahxy(ix) - temp2d(i,j,idx_opt+6) = GFS_Data(nb)%Sfcprop%tahxy(ix) - temp2d(i,j,idx_opt+7) = GFS_Data(nb)%Sfcprop%cmxy(ix) - temp2d(i,j,idx_opt+8) = GFS_Data(nb)%Sfcprop%chxy(ix) - temp2d(i,j,idx_opt+9) = GFS_Data(nb)%Sfcprop%fwetxy(ix) + temp2d(i,j,idx_opt) = GFS_Data(nb)%Sfcprop%snowxy(ix) + temp2d(i,j,idx_opt+1) = GFS_Data(nb)%Sfcprop%tvxy(ix) + temp2d(i,j,idx_opt+2) = GFS_Data(nb)%Sfcprop%tgxy(ix) + temp2d(i,j,idx_opt+3) = GFS_Data(nb)%Sfcprop%canicexy(ix) + temp2d(i,j,idx_opt+4) = GFS_Data(nb)%Sfcprop%canliqxy(ix) + temp2d(i,j,idx_opt+5) = GFS_Data(nb)%Sfcprop%eahxy(ix) + temp2d(i,j,idx_opt+6) = GFS_Data(nb)%Sfcprop%tahxy(ix) + temp2d(i,j,idx_opt+7) = GFS_Data(nb)%Sfcprop%cmxy(ix) + temp2d(i,j,idx_opt+8) = GFS_Data(nb)%Sfcprop%chxy(ix) + temp2d(i,j,idx_opt+9) = GFS_Data(nb)%Sfcprop%fwetxy(ix) temp2d(i,j,idx_opt+10) = GFS_Data(nb)%Sfcprop%sneqvoxy(ix) temp2d(i,j,idx_opt+11) = GFS_Data(nb)%Sfcprop%alboldxy(ix) temp2d(i,j,idx_opt+12) = GFS_Data(nb)%Sfcprop%qsnowxy(ix) @@ -351,12 +356,41 @@ subroutine FV3GFS_GFS_checksum (Model, GFS_Data, Atm_block) temp2d(i,j,idx_opt+46) = GFS_Data(nb)%Sfcprop%zsnsoxy(ix,2) temp2d(i,j,idx_opt+47) = GFS_Data(nb)%Sfcprop%zsnsoxy(ix,3) temp2d(i,j,idx_opt+48) = GFS_Data(nb)%Sfcprop%zsnsoxy(ix,4) - temp2d(i,j,idx_opt+49) = GFS_Data(nb)%Sfcprop%albdvis(ix) - temp2d(i,j,idx_opt+50) = GFS_Data(nb)%Sfcprop%albdnir(ix) - temp2d(i,j,idx_opt+51) = GFS_Data(nb)%Sfcprop%albivis(ix) - temp2d(i,j,idx_opt+52) = GFS_Data(nb)%Sfcprop%albinir(ix) - temp2d(i,j,idx_opt+53) = GFS_Data(nb)%Sfcprop%emiss(ix) + temp2d(i,j,idx_opt+49) = GFS_Data(nb)%Sfcprop%albdvis_lnd(ix) + temp2d(i,j,idx_opt+50) = GFS_Data(nb)%Sfcprop%albdnir_lnd(ix) + temp2d(i,j,idx_opt+51) = GFS_Data(nb)%Sfcprop%albivis_lnd(ix) + temp2d(i,j,idx_opt+52) = GFS_Data(nb)%Sfcprop%albinir_lnd(ix) + temp2d(i,j,idx_opt+53) = GFS_Data(nb)%Sfcprop%emis_lnd(ix) idx_opt = 141 + elseif (Model%lsm == Model%lsm_ruc) then + temp2d(i,j,idx_opt) = GFS_Data(nb)%Sfcprop%wetness(ix) + temp2d(i,j,idx_opt+1) = GFS_Data(nb)%Sfcprop%clw_surf_land(ix) + temp2d(i,j,idx_opt+2) = GFS_Data(nb)%Sfcprop%clw_surf_ice(ix) + temp2d(i,j,idx_opt+3) = GFS_Data(nb)%Sfcprop%qwv_surf_land(ix) + temp2d(i,j,idx_opt+4) = GFS_Data(nb)%Sfcprop%qwv_surf_ice(ix) + temp2d(i,j,idx_opt+5) = GFS_Data(nb)%Sfcprop%tsnow_land(ix) + 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%albdvis_lnd(ix) + temp2d(i,j,idx_opt+11) = GFS_Data(nb)%Sfcprop%albdnir_lnd(ix) + temp2d(i,j,idx_opt+12) = GFS_Data(nb)%Sfcprop%albivis_lnd(ix) + temp2d(i,j,idx_opt+13) = GFS_Data(nb)%Sfcprop%albinir_lnd(ix) + temp2d(i,j,idx_opt+14) = GFS_Data(nb)%Sfcprop%sfalb_lnd(ix) + temp2d(i,j,idx_opt+15) = GFS_Data(nb)%Sfcprop%sfalb_lnd_bck(ix) + temp2d(i,j,idx_opt+16) = GFS_Data(nb)%Sfcprop%albdvis_ice(ix) + temp2d(i,j,idx_opt+17) = GFS_Data(nb)%Sfcprop%albdnir_ice(ix) + temp2d(i,j,idx_opt+18) = GFS_Data(nb)%Sfcprop%albivis_ice(ix) + temp2d(i,j,idx_opt+19) = GFS_Data(nb)%Sfcprop%albinir_ice(ix) + temp2d(i,j,idx_opt+20) = GFS_Data(nb)%Sfcprop%sfalb_ice(ix) + temp2d(i,j,idx_opt+21) = GFS_Data(nb)%Sfcprop%emis_lnd(ix) + temp2d(i,j,idx_opt+22) = GFS_Data(nb)%Sfcprop%emis_ice(ix) + idx_opt = 110 + if (Model%rdlai) then + temp2d(i,j,idx_opt+23) = GFS_Data(nb)%Sfcprop%xlaixy(ix) + idx_opt = idx_opt + 1 + endif endif if (Model%nstf_name(1) > 0) then @@ -483,9 +517,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 = 11 + nvar_s2r = 24 else - nvar_s2r = 10 + nvar_s2r = 23 end if nvar_s3 = 5 else @@ -594,7 +628,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta enddo ! if (Model%frac_grid) then ! needs more variables - nvar_s2m = 35 + nvar_s2m = 37 ! else ! nvar_s2m = 32 ! endif @@ -752,6 +786,8 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta sfc_name2(33) = 'tsfcl' !temp on land portion of a cell sfc_name2(34) = 'zorll' !zorl on land portion of a cell sfc_name2(35) = 'zorli' !zorl on land portion of a cell + sfc_name2(36) = 'tsfc' !tsfc composite + sfc_name2(37) = 'zorl' !zorl composite ! endif if(Model%cplwav) then sfc_name2(nvar_s2m) = 'zorlwav' !zorl on land portion of a cell @@ -809,11 +845,11 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta sfc_name2(nvar_s2m+45) = 'smcwtdxy' sfc_name2(nvar_s2m+46) = 'deeprechxy' sfc_name2(nvar_s2m+47) = 'rechxy' - sfc_name2(nvar_s2m+48) = 'albdvis' - sfc_name2(nvar_s2m+49) = 'albdnir' - sfc_name2(nvar_s2m+50) = 'albivis' - sfc_name2(nvar_s2m+51) = 'albinir' - sfc_name2(nvar_s2m+52) = 'emiss' + sfc_name2(nvar_s2m+48) = 'albdvis_lnd' + sfc_name2(nvar_s2m+49) = 'albdnir_lnd' + sfc_name2(nvar_s2m+50) = 'albivis_lnd' + sfc_name2(nvar_s2m+51) = 'albinir_lnd' + sfc_name2(nvar_s2m+52) = 'emis_lnd' else if (Model%lsm == Model%lsm_ruc .and. warm_start) then sfc_name2(nvar_s2m+19) = 'wetness' sfc_name2(nvar_s2m+20) = 'clw_surf_land' @@ -825,8 +861,21 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta 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) = 'albdvis_lnd' + sfc_name2(nvar_s2m+30) = 'albdnir_lnd' + sfc_name2(nvar_s2m+31) = 'albivis_lnd' + sfc_name2(nvar_s2m+32) = 'albinir_lnd' + sfc_name2(nvar_s2m+33) = 'sfalb_lnd' + sfc_name2(nvar_s2m+34) = 'sfalb_lnd_bck' + sfc_name2(nvar_s2m+35) = 'albdvis_ice' + sfc_name2(nvar_s2m+36) = 'albdnir_ice' + sfc_name2(nvar_s2m+37) = 'albivis_ice' + sfc_name2(nvar_s2m+38) = 'albinir_ice' + sfc_name2(nvar_s2m+39) = 'sfalb_ice' + sfc_name2(nvar_s2m+40) = 'emis_lnd' + sfc_name2(nvar_s2m+41) = 'emis_ice' if (Model%rdlai) then - sfc_name2(nvar_s2m+29) = 'lai' + sfc_name2(nvar_s2m+42) = 'lai' endif else if (Model%lsm == Model%lsm_ruc .and. Model%rdlai) then sfc_name2(nvar_s2m+19) = 'lai' @@ -836,7 +885,8 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta do num = 1,nvar_s2m var2_p => sfc_var2(:,:,num) 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') then + .or. trim(sfc_name2(num)) == 'zorli' .or. trim(sfc_name2(num)) == 'zorlwav' & + .or. trim(sfc_name2(num)) == 'tsfc' .or. trim(sfc_name2(num)) == 'zorl') then id_restart = register_restart_field(Sfc_restart, fn_srf, sfc_name2(num), var2_p, domain=fv_domain, mandatory=.false.) else id_restart = register_restart_field(Sfc_restart, fn_srf, sfc_name2(num), var2_p, domain=fv_domain) @@ -987,6 +1037,8 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta Sfcprop(nb)%tsfcl(ix) = sfc_var2(i,j,33) !--- sfcl (temp on land portion of a cell) Sfcprop(nb)%zorll(ix) = sfc_var2(i,j,34) !--- zorll (zorl on land portion of a cell) Sfcprop(nb)%zorli(ix) = sfc_var2(i,j,35) !--- zorll (zorl on ice portion of a cell) + Sfcprop(nb)%tsfc(ix) = sfc_var2(i,j,36) !--- tsfc composite + Sfcprop(nb)%zorl(ix) = sfc_var2(i,j,37) !--- zorl composite ! else ! Sfcprop(nb)%tsfcl(ix) = Sfcprop(nb)%tsfco(ix) ! Sfcprop(nb)%zorll(ix) = Sfcprop(nb)%zorlw(ix) @@ -1094,8 +1146,21 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta 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)%albdvis_lnd(ix) = sfc_var2(i,j,nvar_s2m+29) + Sfcprop(nb)%albdnir_lnd(ix) = sfc_var2(i,j,nvar_s2m+30) + Sfcprop(nb)%albivis_lnd(ix) = sfc_var2(i,j,nvar_s2m+31) + Sfcprop(nb)%albinir_lnd(ix) = sfc_var2(i,j,nvar_s2m+32) + Sfcprop(nb)%sfalb_lnd(ix) = sfc_var2(i,j,nvar_s2m+33) + Sfcprop(nb)%sfalb_lnd_bck(ix) = sfc_var2(i,j,nvar_s2m+34) + Sfcprop(nb)%albdvis_ice(ix) = sfc_var2(i,j,nvar_s2m+35) + Sfcprop(nb)%albdnir_ice(ix) = sfc_var2(i,j,nvar_s2m+36) + Sfcprop(nb)%albivis_ice(ix) = sfc_var2(i,j,nvar_s2m+37) + Sfcprop(nb)%albinir_ice(ix) = sfc_var2(i,j,nvar_s2m+38) + Sfcprop(nb)%sfalb_ice(ix) = sfc_var2(i,j,nvar_s2m+39) + Sfcprop(nb)%emis_lnd(ix) = sfc_var2(i,j,nvar_s2m+40) + Sfcprop(nb)%emis_ice(ix) = sfc_var2(i,j,nvar_s2m+41) if (Model%rdlai) then - Sfcprop(nb)%xlaixy(ix) = sfc_var2(i,j,nvar_s2m+29) + Sfcprop(nb)%xlaixy(ix) = sfc_var2(i,j,nvar_s2m+42) endif else if (Model%lsm == Model%lsm_ruc) then ! Initialize RUC snow cover on ice from snow cover @@ -1134,11 +1199,11 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta Sfcprop(nb)%smcwtdxy(ix) = sfc_var2(i,j,nvar_s2m+45) Sfcprop(nb)%deeprechxy(ix) = sfc_var2(i,j,nvar_s2m+46) Sfcprop(nb)%rechxy(ix) = sfc_var2(i,j,nvar_s2m+47) - Sfcprop(nb)%albdvis(ix) = sfc_var2(i,j,nvar_s2m+48) - Sfcprop(nb)%albdnir(ix) = sfc_var2(i,j,nvar_s2m+49) - Sfcprop(nb)%albivis(ix) = sfc_var2(i,j,nvar_s2m+50) - Sfcprop(nb)%albinir(ix) = sfc_var2(i,j,nvar_s2m+51) - Sfcprop(nb)%emiss(ix) = sfc_var2(i,j,nvar_s2m+52) + Sfcprop(nb)%albdvis_lnd(ix)= sfc_var2(i,j,nvar_s2m+48) + Sfcprop(nb)%albdnir_lnd(ix)= sfc_var2(i,j,nvar_s2m+49) + Sfcprop(nb)%albivis_lnd(ix)= sfc_var2(i,j,nvar_s2m+50) + Sfcprop(nb)%albinir_lnd(ix)= sfc_var2(i,j,nvar_s2m+51) + Sfcprop(nb)%emis_lnd(ix) = sfc_var2(i,j,nvar_s2m+52) endif if (Model%lsm == Model%lsm_noah .or. Model%lsm == Model%lsm_noahmp .or. Model%lsm == Model%lsm_noah_wrfv4 .or. (.not.warm_start)) then @@ -1231,75 +1296,54 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain, warm_sta enddo endif - if (sfc_var2(i,j,nvar_s2m) < -9990.0_r8) then - if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing zorlwav') + ! Fill in composite tsfc and zorl for coldstart runs + compute_tsfc_zorl_for_colstart: if (.not. warm_start) then + if(Model%frac_grid) then ! 3-way composite + if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing composite tsfc and zorl') !$omp parallel do default(shared) private(nb, ix) - do nb = 1, Atm_block%nblks - do ix = 1, Atm_block%blksz(nb) - Sfcprop(nb)%zorlwav(ix) = Sfcprop(nb)%zorlw(ix) !--- compute zorlwav from existing variables + do nb = 1, Atm_block%nblks + do ix = 1, Atm_block%blksz(nb) + Sfcprop(nb)%tsfco(ix) = max(con_tice, Sfcprop(nb)%tsfco(ix)) ! this may break restart reproducibility + tem1 = one - Sfcprop(nb)%landfrac(ix) + tem = tem1 * Sfcprop(nb)%fice(ix) ! tem = ice fraction wrt whole cell + Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorll(ix) * Sfcprop(nb)%landfrac(ix) & + + Sfcprop(nb)%zorli(ix) * tem & + + Sfcprop(nb)%zorlw(ix) * (tem1-tem) + + Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfcl(ix) * Sfcprop(nb)%landfrac(ix) & + + Sfcprop(nb)%tisfc(ix) * tem & + + Sfcprop(nb)%tsfco(ix) * (tem1-tem) + enddo enddo - enddo - endif - - if(Model%frac_grid) then ! 3-way composite -!$omp parallel do default(shared) private(nb, ix, tem, tem1) - do nb = 1, Atm_block%nblks - do ix = 1, Atm_block%blksz(nb) - if( Model%phour < 1.e-7) Sfcprop(nb)%tsfco(ix) = max(con_tice, Sfcprop(nb)%tsfco(ix)) ! this may break restart reproducibility - tem1 = one - Sfcprop(nb)%landfrac(ix) - tem = tem1 * Sfcprop(nb)%fice(ix) ! tem = ice fraction wrt whole cell - Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorll(ix) * Sfcprop(nb)%landfrac(ix) & - + Sfcprop(nb)%zorli(ix) * tem & - + Sfcprop(nb)%zorlw(ix) * (tem1-tem) - - Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfcl(ix) * Sfcprop(nb)%landfrac(ix) & - + Sfcprop(nb)%tisfc(ix) * tem & - + Sfcprop(nb)%tsfco(ix) * (tem1-tem) - enddo - enddo - else - if( Model%phour < 1.e-7) then + else !$omp parallel do default(shared) private(nb, ix, tem) - do nb = 1, Atm_block%nblks - do ix = 1, Atm_block%blksz(nb) - !--- specify tsfcl/zorll/zorli from existing variable tsfco/zorlw -! Sfcprop(nb)%tsfcl(ix) = Sfcprop(nb)%tsfco(ix) -! Sfcprop(nb)%zorll(ix) = Sfcprop(nb)%zorlw(ix) -! Sfcprop(nb)%zorli(ix) = Sfcprop(nb)%zorlw(ix) -! Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorlw(ix) - if (Sfcprop(nb)%slmsk(ix) == 1) then - Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorll(ix) - Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfcl(ix) - else - tem = one - Sfcprop(nb)%fice(ix) - Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorli(ix) * Sfcprop(nb)%fice(ix) & - + Sfcprop(nb)%zorlw(ix) * tem - Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tisfc(ix) * Sfcprop(nb)%fice(ix) & - + Sfcprop(nb)%tsfco(ix) * tem - endif + do nb = 1, Atm_block%nblks + do ix = 1, Atm_block%blksz(nb) + !--- specify tsfcl/zorll/zorli from existing variable tsfco/zorlw + if (Sfcprop(nb)%slmsk(ix) == 1) then + Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorll(ix) + Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfcl(ix) + else + tem = one - Sfcprop(nb)%fice(ix) + Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorli(ix) * Sfcprop(nb)%fice(ix) & + + Sfcprop(nb)%zorlw(ix) * tem + Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tisfc(ix) * Sfcprop(nb)%fice(ix) & + + Sfcprop(nb)%tsfco(ix) * tem + endif + enddo enddo - enddo - else -!$omp parallel do default(shared) private(nb, ix, tem) + endif + endif compute_tsfc_zorl_for_colstart + + if (sfc_var2(i,j,nvar_s2m) < -9990.0_r8) then + if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing zorlwav') +!$omp parallel do default(shared) private(nb, ix) do nb = 1, Atm_block%nblks do ix = 1, Atm_block%blksz(nb) - !--- specify tsfcl/zorll/zorli from existing variable tsfco/zorlw - Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfco(ix) - if (Sfcprop(nb)%slmsk(ix) == 1) then - Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorll(ix) - Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfcl(ix) - else - tem = one - Sfcprop(nb)%fice(ix) - Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorli(ix) * Sfcprop(nb)%fice(ix) & - + Sfcprop(nb)%zorlw(ix) * tem - if (Sfcprop(nb)%fice(ix) > min(Model%min_seaice,Model%min_lakeice)) then - Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfcl(ix) - endif - endif + Sfcprop(nb)%zorlwav(ix) = Sfcprop(nb)%zorlw(ix) !--- compute zorlwav from existing variables enddo enddo endif - endif ! if (Model%frac_grid) if (nint(sfc_var3ice(1,1,1)) == -9999) then if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - computing tiice') @@ -1346,7 +1390,7 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta real(kind=kind_phys), pointer, dimension(:,:,:) :: var3_p3 => NULL() ! if (Model%frac_grid) then ! needs more variables - nvar2m = 35 + nvar2m = 37 ! else ! nvar2m = 32 ! endif @@ -1354,9 +1398,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 = 11 + nvar2r = 24 else - nvar2r = 10 + nvar2r = 23 endif nvar3 = 5 else @@ -1455,6 +1499,8 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta sfc_name2(33) = 'tsfcl' !temp on land portion of a cell sfc_name2(34) = 'zorll' !zorl on land portion of a cell sfc_name2(35) = 'zorli' !zorl on land portion of a cell + sfc_name2(36) = 'tsfc' !tsfc composite + sfc_name2(37) = 'zorl' !zorl composite ! endif if (Model%cplwav) then sfc_name2(nvar2m) = 'zorlwav' !zorl on land portion of a cell @@ -1489,8 +1535,21 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta sfc_name2(nvar2m+26) = 'snowfall_acc_land' sfc_name2(nvar2m+27) = 'snowfall_acc_ice' sfc_name2(nvar2m+28) = 'sncovr_ice' + sfc_name2(nvar2m+29) = 'albdvis_lnd' + sfc_name2(nvar2m+30) = 'albdnir_lnd' + sfc_name2(nvar2m+31) = 'albivis_lnd' + sfc_name2(nvar2m+32) = 'albinir_lnd' + sfc_name2(nvar2m+33) = 'sfalb_lnd' + sfc_name2(nvar2m+34) = 'sfalb_lnd_bck' + sfc_name2(nvar2m+35) = 'albdvis_ice' + sfc_name2(nvar2m+36) = 'albdnir_ice' + sfc_name2(nvar2m+37) = 'albivis_ice' + sfc_name2(nvar2m+38) = 'albinir_ice' + sfc_name2(nvar2m+39) = 'sfalb_ice' + sfc_name2(nvar2m+40) = 'emis_lnd' + sfc_name2(nvar2m+41) = 'emis_ice' if (Model%rdlai) then - sfc_name2(nvar2m+29) = 'lai' + sfc_name2(nvar2m+42) = 'lai' endif else if(Model%lsm == Model%lsm_noahmp) then ! Only needed when Noah MP LSM is used - 29 2D @@ -1660,6 +1719,8 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta sfc_var2(i,j,33) = Sfcprop(nb)%tsfcl(ix) !--- tsfcl (temp on land) sfc_var2(i,j,34) = Sfcprop(nb)%zorll(ix) !--- zorll (zorl on land) sfc_var2(i,j,35) = Sfcprop(nb)%zorli(ix) !--- zorli (zorl on ice) + sfc_var2(i,j,36) = Sfcprop(nb)%tsfc(ix) !--- tsfc composite + sfc_var2(i,j,37) = Sfcprop(nb)%zorl(ix) !--- zorl composite ! endif if (Model%cplwav) then sfc_var2(i,j,nvar2m) = Sfcprop(nb)%zorlwav(ix) !--- zorlwav (zorl from wav) @@ -1698,8 +1759,21 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta 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)%albdvis_lnd(ix) + sfc_var2(i,j,nvar2m+30) = Sfcprop(nb)%albdnir_lnd(ix) + sfc_var2(i,j,nvar2m+31) = Sfcprop(nb)%albivis_lnd(ix) + sfc_var2(i,j,nvar2m+32) = Sfcprop(nb)%albinir_lnd(ix) + sfc_var2(i,j,nvar2m+33) = Sfcprop(nb)%sfalb_lnd(ix) + sfc_var2(i,j,nvar2m+34) = Sfcprop(nb)%sfalb_lnd_bck(ix) + sfc_var2(i,j,nvar2m+35) = Sfcprop(nb)%albdvis_ice(ix) + sfc_var2(i,j,nvar2m+36) = Sfcprop(nb)%albdnir_ice(ix) + sfc_var2(i,j,nvar2m+37) = Sfcprop(nb)%albivis_ice(ix) + sfc_var2(i,j,nvar2m+38) = Sfcprop(nb)%albinir_ice(ix) + sfc_var2(i,j,nvar2m+39) = Sfcprop(nb)%sfalb_ice(ix) + sfc_var2(i,j,nvar2m+40) = Sfcprop(nb)%emis_lnd(ix) + sfc_var2(i,j,nvar2m+41) = Sfcprop(nb)%emis_ice(ix) if (Model%rdlai) then - sfc_var2(i,j,nvar2m+29) = Sfcprop(nb)%xlaixy(ix) + sfc_var2(i,j,nvar2m+42) = Sfcprop(nb)%xlaixy(ix) endif else if (Model%lsm == Model%lsm_noahmp) then !--- Extra Noah MP variables