diff --git a/.gitmodules b/.gitmodules index 2fdeca40a..e0e662abd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,5 +8,5 @@ branch = dtc/develop [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/NCAR/ccpp-physics - branch = dtc/develop + url = https://github.com/mzhangw/ccpp-physics + branch = emc_flake diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py old mode 100755 new mode 100644 index d30d8d1e7..b94b21225 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -162,6 +162,7 @@ 'FV3/ccpp/physics/physics/sfcsub.F', 'FV3/ccpp/physics/physics/sflx.f', 'FV3/ccpp/physics/physics/set_soilveg.f', + 'FV3/ccpp/physics/physics/flake.F90', 'FV3/ccpp/physics/physics/surface_perturbation.F90', 'FV3/ccpp/physics/physics/cu_gf_deep.F90', 'FV3/ccpp/physics/physics/cu_gf_sh.F90', @@ -288,6 +289,7 @@ 'FV3/ccpp/physics/physics/sfc_diff.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/sfc_drv.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/sfc_noahmp_drv.f' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/flake_driv.F90' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/sfc_nst.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/sfc_ocean.F' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/sfc_sice.f' : [ 'slow_physics' ], diff --git a/ccpp/suites/suite_FV3_GFS_v16beta_flake.xml b/ccpp/suites/suite_FV3_GFS_v16beta_flake.xml new file mode 100644 index 000000000..b2866bbee --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v16beta_flake.xml @@ -0,0 +1,94 @@ + + + + + + + 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 + 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 + lsm_noah + flake_driv + 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 + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + 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 + + + + + GFS_stochastics + + + + diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 4ca8cc2ff..e2ebcab9b 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -227,13 +227,15 @@ module GFS_typedefs type GFS_sfcprop_type !--- In (radiation and physics) - real (kind=kind_phys), pointer :: slmsk (:) => null() !< sea/land mask array (sea:0,land:1,sea-ice:2) + real (kind=kind_phys), pointer :: slmsk (:) => null() !< sea/land mask array (sea:0,land:1,sea-ice:2,lake-5) real (kind=kind_phys), pointer :: oceanfrac(:) => null() !< ocean fraction [0:1] real (kind=kind_phys), pointer :: landfrac(:) => null() !< land fraction [0:1] real (kind=kind_phys), pointer :: lakefrac(:) => null() !< lake fraction [0:1] + real (kind=kind_phys), pointer :: lakedepth(:) => null() !< lake depth [ m ] real (kind=kind_phys), pointer :: tsfc (:) => null() !< surface air temperature in K !< [tsea in gbphys.f] real (kind=kind_phys), pointer :: tsfco (:) => null() !< sst in K + real (kind=kind_phys), pointer :: tsfclk (:) => null() !< surface lake temperature in K real (kind=kind_phys), pointer :: tsfcl (:) => null() !< surface land temperature in K real (kind=kind_phys), pointer :: tisfc (:) => null() !< surface temperature over ice fraction real (kind=kind_phys), pointer :: tiice(:,:) => null() !< internal ice temperature @@ -242,6 +244,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: zorlo (:) => null() !< ocean surface roughness in cm real (kind=kind_phys), pointer :: zorll (:) => null() !< land surface roughness in cm real (kind=kind_phys), pointer :: fice (:) => null() !< ice fraction over open water grid + real (kind=kind_phys), pointer :: fice_lk(:) => null() !< ice fraction over lake ! real (kind=kind_phys), pointer :: hprim (:) => null() !< topographic standard deviation in m real (kind=kind_phys), pointer :: hprime (:,:) => null() !< orographic metrics @@ -272,6 +275,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: conv_act(:) => null() !< convective activity counter hli 09/2017 #endif real (kind=kind_phys), pointer :: hice (:) => null() !< sea ice thickness + real (kind=kind_phys), pointer :: hice_lk(:) => null() !< surface_ice_thickness_water_equivalent_over_lake real (kind=kind_phys), pointer :: weasd (:) => null() !< water equiv of accumulated snow depth (kg/m**2) !< over land and sea ice real (kind=kind_phys), pointer :: canopy (:) => null() !< canopy water @@ -781,6 +785,9 @@ module GFS_typedefs logical :: use_ufo !< flag for gcycle surface option +!--- flake model parameters + integer :: lkm !< flag for flake model + !--- tuning parameters for physical parameterizations logical :: ras !< flag for ras convection scheme logical :: flipv !< flag for vertical direction flip (ras) @@ -1627,6 +1634,7 @@ module GFS_typedefs type GFS_interstitial_type real (kind=kind_phys), pointer :: adjsfculw_land(:) => null() !< + real (kind=kind_phys), pointer :: adjsfculw_lake(:) => null() !< real (kind=kind_phys), pointer :: adjsfculw_ice(:) => null() !< real (kind=kind_phys), pointer :: adjsfculw_ocean(:) => null() !< real (kind=kind_phys), pointer :: adjnirbmd(:) => null() !< @@ -1643,14 +1651,17 @@ module GFS_typedefs real (kind=kind_phys), pointer :: cd(:) => null() !< real (kind=kind_phys), pointer :: cd_ice(:) => null() !< real (kind=kind_phys), pointer :: cd_land(:) => null() !< + real (kind=kind_phys), pointer :: cd_lake(:) => null() !< real (kind=kind_phys), pointer :: cd_ocean(:) => null() !< real (kind=kind_phys), pointer :: cdq(:) => null() !< real (kind=kind_phys), pointer :: cdq_ice(:) => null() !< real (kind=kind_phys), pointer :: cdq_land(:) => null() !< + real (kind=kind_phys), pointer :: cdq_lake(:) => null() !< real (kind=kind_phys), pointer :: cdq_ocean(:) => null() !< real (kind=kind_phys), pointer :: cf_upi(:,:) => null() !< real (kind=kind_phys), pointer :: chh_ice(:) => null() !< real (kind=kind_phys), pointer :: chh_land(:) => null() !< + real (kind=kind_phys), pointer :: chh_lake(:) => null() !< real (kind=kind_phys), pointer :: chh_ocean(:) => null() !< real (kind=kind_phys), pointer :: clcn(:,:) => null() !< real (kind=kind_phys), pointer :: cldf(:) => null() !< @@ -1664,6 +1675,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: clx(:,:) => null() !< real (kind=kind_phys), pointer :: cmm_ice(:) => null() !< real (kind=kind_phys), pointer :: cmm_land(:) => null() !< + real (kind=kind_phys), pointer :: cmm_lake(:) => null() !< real (kind=kind_phys), pointer :: cmm_ocean(:) => null() !< real (kind=kind_phys), pointer :: cndm_surf(:) => null() !< real (kind=kind_phys), pointer :: cnv_dqldt(:,:) => null() !< @@ -1703,11 +1715,13 @@ module GFS_typedefs real (kind=kind_phys), pointer :: ep1d(:) => null() !< real (kind=kind_phys), pointer :: ep1d_ice(:) => null() !< real (kind=kind_phys), pointer :: ep1d_land(:) => null() !< + real (kind=kind_phys), pointer :: ep1d_lake(:) => null() !< real (kind=kind_phys), pointer :: ep1d_ocean(:) => null() !< real (kind=kind_phys), pointer :: evap(:) => null() !< real (kind=kind_phys), pointer :: evapq(:) => null() !< real (kind=kind_phys), pointer :: evap_ice(:) => null() !< real (kind=kind_phys), pointer :: evap_land(:) => null() !< + real (kind=kind_phys), pointer :: evap_lake(:) => null() !< real (kind=kind_phys), pointer :: evap_ocean(:) => null() !< real (kind=kind_phys), pointer :: evbs(:) => null() !< real (kind=kind_phys), pointer :: evcw(:) => null() !< @@ -1715,28 +1729,34 @@ module GFS_typedefs real (kind=kind_phys), pointer :: faersw(:,:,:,:) => null() !< real (kind=kind_phys), pointer :: ffhh_ice(:) => null() !< real (kind=kind_phys), pointer :: ffhh_land(:) => null() !< + real (kind=kind_phys), pointer :: ffhh_lake(:) => null() !< real (kind=kind_phys), pointer :: ffhh_ocean(:) => null() !< real (kind=kind_phys), pointer :: fh2(:) => null() !< real (kind=kind_phys), pointer :: fh2_ice(:) => null() !< real (kind=kind_phys), pointer :: fh2_land(:) => null() !< + real (kind=kind_phys), pointer :: fh2_lake(:) => null() !< real (kind=kind_phys), pointer :: fh2_ocean(:) => null() !< logical, pointer :: flag_cice(:) => null() !< logical, pointer :: flag_guess(:) => null() !< logical, pointer :: flag_iter(:) => null() !< real (kind=kind_phys), pointer :: ffmm_ice(:) => null() !< real (kind=kind_phys), pointer :: ffmm_land(:) => null() !< + real (kind=kind_phys), pointer :: ffmm_lake(:) => null() !< real (kind=kind_phys), pointer :: ffmm_ocean(:) => null() !< real (kind=kind_phys), pointer :: fm10(:) => null() !< real (kind=kind_phys), pointer :: fm10_ice(:) => null() !< real (kind=kind_phys), pointer :: fm10_land(:) => null() !< + real (kind=kind_phys), pointer :: fm10_lake(:) => null() !< real (kind=kind_phys), pointer :: fm10_ocean(:) => null() !< real (kind=kind_phys) :: frain !< real (kind=kind_phys), pointer :: frland(:) => null() !< + real (kind=kind_phys), pointer :: frlake(:) => null() !< real (kind=kind_phys), pointer :: fscav(:) => null() !< real (kind=kind_phys), pointer :: fswtr(:) => null() !< real (kind=kind_phys), pointer :: gabsbdlw(:) => null() !< real (kind=kind_phys), pointer :: gabsbdlw_ice(:) => null() !< real (kind=kind_phys), pointer :: gabsbdlw_land(:) => null() !< + real (kind=kind_phys), pointer :: gabsbdlw_lake(:) => null() !< real (kind=kind_phys), pointer :: gabsbdlw_ocean(:) => null() !< real (kind=kind_phys), pointer :: gamma(:) => null() !< real (kind=kind_phys), pointer :: gamq(:) => null() !< @@ -1745,6 +1765,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: gflx(:) => null() !< real (kind=kind_phys), pointer :: gflx_ice(:) => null() !< real (kind=kind_phys), pointer :: gflx_land(:) => null() !< + real (kind=kind_phys), pointer :: gflx_lake(:) => null() !< real (kind=kind_phys), pointer :: gflx_ocean(:) => null() !< real (kind=kind_phys), pointer :: graupelmp(:) => null() !< real (kind=kind_phys), pointer :: gwdcu(:,:) => null() !< @@ -1757,6 +1778,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: hflxq(:) => null() !< real (kind=kind_phys), pointer :: hflx_ice(:) => null() !< real (kind=kind_phys), pointer :: hflx_land(:) => null() !< + real (kind=kind_phys), pointer :: hflx_lake(:) => null() !< real (kind=kind_phys), pointer :: hflx_ocean(:) => null() !< !--- radiation variables that need to be carried over from radiation to physics real (kind=kind_phys), pointer :: htlwc(:,:) => null() !< @@ -1834,6 +1856,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: qss(:) => null() !< real (kind=kind_phys), pointer :: qss_ice(:) => null() !< real (kind=kind_phys), pointer :: qss_land(:) => null() !< + real (kind=kind_phys), pointer :: qss_lake(:) => null() !< real (kind=kind_phys), pointer :: qss_ocean(:) => null() !< logical :: radar_reset !< real (kind=kind_phys) :: raddt !< @@ -1845,6 +1868,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: rb(:) => null() !< real (kind=kind_phys), pointer :: rb_ice(:) => null() !< real (kind=kind_phys), pointer :: rb_land(:) => null() !< + real (kind=kind_phys), pointer :: rb_lake(:) => null() !< real (kind=kind_phys), pointer :: rb_ocean(:) => null() !< logical :: reset !< real (kind=kind_phys), pointer :: rhc(:,:) => null() !< @@ -1857,6 +1881,7 @@ module GFS_typedefs 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_lake(:) => null() !< real (kind=kind_phys), pointer :: semis_ocean(:) => null() !< real (kind=kind_phys), pointer :: sfcalb(:,:) => null() !< real (kind=kind_phys), pointer :: sigma(:) => null() !< @@ -1868,6 +1893,7 @@ module GFS_typedefs 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_lake(:) => null() !< real (kind=kind_phys), pointer :: snowd_ocean(:) => null() !< real (kind=kind_phys), pointer :: snohf(:) => null() !< real (kind=kind_phys), pointer :: snowmp(:) => null() !< @@ -1876,6 +1902,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: stress(:) => null() !< real (kind=kind_phys), pointer :: stress_ice(:) => null() !< real (kind=kind_phys), pointer :: stress_land(:) => null() !< + real (kind=kind_phys), pointer :: stress_lake(:) => null() !< real (kind=kind_phys), pointer :: stress_ocean(:) => null() !< real (kind=kind_phys), pointer :: t2mmp(:) => null() !< real (kind=kind_phys), pointer :: theta(:) => null() !< @@ -1884,6 +1911,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tlyr(:,:) => null() !< real (kind=kind_phys), pointer :: tprcp_ice(:) => null() !< real (kind=kind_phys), pointer :: tprcp_land(:) => null() !< + real (kind=kind_phys), pointer :: tprcp_lake(:) => null() !< real (kind=kind_phys), pointer :: tprcp_ocean(:) => null() !< integer :: tracers_start_index !< integer :: tracers_total !< @@ -1894,16 +1922,24 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tsfa(:) => null() !< real (kind=kind_phys), pointer :: tsfc_ice(:) => null() !< real (kind=kind_phys), pointer :: tsfc_land(:) => null() !< + real (kind=kind_phys), pointer :: tsfc_lake(:) => null() !< real (kind=kind_phys), pointer :: tsfc_ocean(:) => null() !< real (kind=kind_phys), pointer :: tsfg(:) => null() !< real (kind=kind_phys), pointer :: tsnow(:) => 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_lake(:) => null() !< real (kind=kind_phys), pointer :: tsurf_ocean(:) => null() !< real (kind=kind_phys), pointer :: ud_mf(:,:) => null() !< + real (kind=kind_phys), pointer :: ulwsfc_cice(:) => null() !< + real (kind=kind_phys), pointer :: dusfc_cice(:) => null() !< + real (kind=kind_phys), pointer :: dvsfc_cice(:) => null() !< + real (kind=kind_phys), pointer :: dqsfc_cice(:) => null() !< + real (kind=kind_phys), pointer :: dtsfc_cice(:) => null() !< real (kind=kind_phys), pointer :: uustar_ice(:) => null() !< real (kind=kind_phys), pointer :: uustar_land(:) => null() !< + real (kind=kind_phys), pointer :: uustar_lake(:) => null() !< real (kind=kind_phys), pointer :: uustar_ocean(:) => null() !< real (kind=kind_phys), pointer :: vdftra(:,:,:) => null() !< real (kind=kind_phys), pointer :: vegf1d(:) => null() !< @@ -1912,6 +1948,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: wcbmax(:) => null() !< real (kind=kind_phys), pointer :: weasd_ocean(:) => null() !< real (kind=kind_phys), pointer :: weasd_land(:) => null() !< + real (kind=kind_phys), pointer :: weasd_lake(:) => null() !< real (kind=kind_phys), pointer :: weasd_ice(:) => null() !< real (kind=kind_phys), pointer :: wind(:) => null() !< real (kind=kind_phys), pointer :: work1(:) => null() !< @@ -1923,6 +1960,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: z01d(:) => null() !< real (kind=kind_phys), pointer :: zorl_ice(:) => null() !< real (kind=kind_phys), pointer :: zorl_land(:) => null() !< + real (kind=kind_phys), pointer :: zorl_lake(:) => null() !< real (kind=kind_phys), pointer :: zorl_ocean(:) => null() !< real (kind=kind_phys), pointer :: zt1d(:) => null() !< real (kind=kind_phys), pointer :: gw_dudt(:,:) => null() !< @@ -2168,8 +2206,10 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%oceanfrac(IM)) allocate (Sfcprop%landfrac (IM)) allocate (Sfcprop%lakefrac (IM)) + allocate (Sfcprop%lakedepth(IM)) allocate (Sfcprop%tsfc (IM)) allocate (Sfcprop%tsfco (IM)) + allocate (Sfcprop%tsfclk (IM)) allocate (Sfcprop%tsfcl (IM)) allocate (Sfcprop%tisfc (IM)) allocate (Sfcprop%tiice (IM,Model%kice)) @@ -2178,6 +2218,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%zorlo (IM)) allocate (Sfcprop%zorll (IM)) allocate (Sfcprop%fice (IM)) + allocate (Sfcprop%fice_lk (IM)) ! allocate (Sfcprop%hprim (IM)) allocate (Sfcprop%hprime (IM,Model%nmtvr)) @@ -2185,8 +2226,10 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%oceanfrac = clear_val Sfcprop%landfrac = clear_val Sfcprop%lakefrac = clear_val + Sfcprop%lakedepth = clear_val Sfcprop%tsfc = clear_val Sfcprop%tsfco = clear_val + Sfcprop%tsfclk = clear_val Sfcprop%tsfcl = clear_val Sfcprop%tisfc = clear_val Sfcprop%tiice = clear_val @@ -2195,6 +2238,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%zorlo = clear_val Sfcprop%zorll = clear_val Sfcprop%fice = clear_val + Sfcprop%fice_lk = clear_val ! Sfcprop%hprim = clear_val Sfcprop%hprime = clear_val @@ -2245,6 +2289,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) !--- In/Out allocate (Sfcprop%hice (IM)) + allocate (Sfcprop%hice_lk(IM)) allocate (Sfcprop%weasd (IM)) allocate (Sfcprop%sncovr (IM)) allocate (Sfcprop%canopy (IM)) @@ -2258,6 +2303,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%stc (IM,Model%lsoil)) Sfcprop%hice = clear_val + Sfcprop%hice_lk = clear_val Sfcprop%weasd = clear_val Sfcprop%sncovr = clear_val Sfcprop%canopy = clear_val @@ -2997,6 +3043,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: use_ufo = .false. !< flag for gcycle surface option +!--- flake model parameters + integer :: lkm = 1 !< flag for flake model + !--- tuning parameters for physical parameterizations logical :: ras = .false. !< flag for ras convection scheme logical :: flipv = .true. !< flag for vertical direction flip (ras) @@ -3287,6 +3336,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ! Noah MP options iopt_dveg,iopt_crs,iopt_btr,iopt_run,iopt_sfc, iopt_frz, & iopt_inf, iopt_rad,iopt_alb,iopt_snf,iopt_tbot,iopt_stc, & + + !--- lake model control + lkm, & + !--- physical parameterizations ras, trans_trac, old_monin, cnvgwd, mstrat, moist_adj, & cscnv, cal_pre, do_aw, do_shoc, shocaftcnv, shoc_cld, & @@ -3638,6 +3691,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%isot = isot Model%use_ufo = use_ufo +!--- flake model parameters + Model%lkm = lkm + ! Noah MP options from namelist ! Model%iopt_dveg = iopt_dveg @@ -4183,6 +4239,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ' ignore_lake=',ignore_lake print *,' min_lakeice=',Model%min_lakeice,' min_seaice=',Model%min_seaice, & 'min_lake_height=',Model%min_lake_height + + print *, 'flake model parameters' + print *, 'lkm : ', Model%lkm + if (Model%nstf_name(1) > 0 ) then print *,' NSSTM is active ' print *,' nstf_name(1)=',Model%nstf_name(1) @@ -4752,6 +4812,9 @@ subroutine control_print(Model) print *, ' use_ufo : ', Model%use_ufo print *, ' ' + print *, 'flake model parameters' + print *, 'lkm : ', Model%lkm + print *, 'tuning parameters for physical parameterizations' print *, ' ras : ', Model%ras if (Model%ras) then @@ -5934,6 +5997,7 @@ subroutine interstitial_create (Interstitial, IM, Model) call interstitial_setup_tracers(Interstitial, Model) ! Allocate arrays allocate (Interstitial%adjsfculw_land (IM)) + allocate (Interstitial%adjsfculw_lake (IM)) allocate (Interstitial%adjsfculw_ice (IM)) allocate (Interstitial%adjsfculw_ocean (IM)) allocate (Interstitial%adjnirbmd (IM)) @@ -5950,13 +6014,16 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%cd (IM)) allocate (Interstitial%cd_ice (IM)) allocate (Interstitial%cd_land (IM)) + allocate (Interstitial%cd_lake (IM)) allocate (Interstitial%cd_ocean (IM)) allocate (Interstitial%cdq (IM)) allocate (Interstitial%cdq_ice (IM)) allocate (Interstitial%cdq_land (IM)) + allocate (Interstitial%cdq_lake (IM)) allocate (Interstitial%cdq_ocean (IM)) allocate (Interstitial%chh_ice (IM)) allocate (Interstitial%chh_land (IM)) + allocate (Interstitial%chh_lake (IM)) allocate (Interstitial%chh_ocean (IM)) allocate (Interstitial%cldf (IM)) allocate (Interstitial%cldsa (IM,5)) @@ -5968,6 +6035,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%clx (IM,4)) allocate (Interstitial%cmm_ice (IM)) allocate (Interstitial%cmm_land (IM)) + allocate (Interstitial%cmm_lake (IM)) allocate (Interstitial%cmm_ocean (IM)) allocate (Interstitial%cnvc (IM,Model%levs)) allocate (Interstitial%cnvw (IM,Model%levs)) @@ -6001,11 +6069,13 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%ep1d (IM)) allocate (Interstitial%ep1d_ice (IM)) allocate (Interstitial%ep1d_land (IM)) + allocate (Interstitial%ep1d_lake (IM)) allocate (Interstitial%ep1d_ocean (IM)) allocate (Interstitial%evap (IM)) allocate (Interstitial%evapq (IM)) allocate (Interstitial%evap_ice (IM)) allocate (Interstitial%evap_land (IM)) + allocate (Interstitial%evap_lake (IM)) allocate (Interstitial%evap_ocean (IM)) allocate (Interstitial%evbs (IM)) allocate (Interstitial%evcw (IM)) @@ -6013,27 +6083,33 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%faersw (IM,Model%levr+LTP,NBDSW,NF_AESW)) allocate (Interstitial%ffhh_ice (IM)) allocate (Interstitial%ffhh_land (IM)) + allocate (Interstitial%ffhh_lake (IM)) allocate (Interstitial%ffhh_ocean (IM)) allocate (Interstitial%fh2 (IM)) allocate (Interstitial%fh2_ice (IM)) allocate (Interstitial%fh2_land (IM)) + allocate (Interstitial%fh2_lake (IM)) allocate (Interstitial%fh2_ocean (IM)) allocate (Interstitial%flag_cice (IM)) allocate (Interstitial%flag_guess (IM)) allocate (Interstitial%flag_iter (IM)) allocate (Interstitial%ffmm_ice (IM)) allocate (Interstitial%ffmm_land (IM)) + allocate (Interstitial%ffmm_lake (IM)) allocate (Interstitial%ffmm_ocean (IM)) allocate (Interstitial%fm10 (IM)) allocate (Interstitial%fm10_ice (IM)) allocate (Interstitial%fm10_land (IM)) + allocate (Interstitial%fm10_lake (IM)) allocate (Interstitial%fm10_ocean (IM)) allocate (Interstitial%frland (IM)) + allocate (Interstitial%frlake (IM)) allocate (Interstitial%fscav (Interstitial%nscav)) allocate (Interstitial%fswtr (Interstitial%nscav)) allocate (Interstitial%gabsbdlw (IM)) allocate (Interstitial%gabsbdlw_ice (IM)) allocate (Interstitial%gabsbdlw_land (IM)) + allocate (Interstitial%gabsbdlw_lake (IM)) allocate (Interstitial%gabsbdlw_ocean (IM)) allocate (Interstitial%gamma (IM)) allocate (Interstitial%gamq (IM)) @@ -6042,6 +6118,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%gflx (IM)) allocate (Interstitial%gflx_ice (IM)) allocate (Interstitial%gflx_land (IM)) + allocate (Interstitial%gflx_lake (IM)) allocate (Interstitial%gflx_ocean (IM)) allocate (Interstitial%gwdcu (IM,Model%levs)) allocate (Interstitial%gwdcv (IM,Model%levs)) @@ -6052,6 +6129,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%hflxq (IM)) allocate (Interstitial%hflx_ice (IM)) allocate (Interstitial%hflx_land (IM)) + allocate (Interstitial%hflx_lake (IM)) allocate (Interstitial%hflx_ocean (IM)) allocate (Interstitial%htlwc (IM,Model%levr+LTP)) allocate (Interstitial%htlw0 (IM,Model%levr+LTP)) @@ -6063,7 +6141,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%lake (IM)) allocate (Interstitial%ocean (IM)) allocate (Interstitial%islmsk (IM)) - allocate (Interstitial%islmsk_cice (IM)) + allocate (Interstitial%islmsk_cice (IM)) allocate (Interstitial%wet (IM)) allocate (Interstitial%kbot (IM)) allocate (Interstitial%kcnv (IM)) @@ -6084,6 +6162,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%qss (IM)) allocate (Interstitial%qss_ice (IM)) allocate (Interstitial%qss_land (IM)) + allocate (Interstitial%qss_lake (IM)) allocate (Interstitial%qss_ocean (IM)) allocate (Interstitial%raincd (IM)) allocate (Interstitial%raincs (IM)) @@ -6092,6 +6171,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%rb (IM)) allocate (Interstitial%rb_ice (IM)) allocate (Interstitial%rb_land (IM)) + allocate (Interstitial%rb_lake (IM)) allocate (Interstitial%rb_ocean (IM)) allocate (Interstitial%rhc (IM,Model%levs)) allocate (Interstitial%runoff (IM)) @@ -6103,6 +6183,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%scmpsw (IM)) allocate (Interstitial%semis_ice (IM)) allocate (Interstitial%semis_land (IM)) + allocate (Interstitial%semis_lake (IM)) allocate (Interstitial%semis_ocean (IM)) allocate (Interstitial%sfcalb (IM,NF_ALBD)) allocate (Interstitial%sigma (IM)) @@ -6113,6 +6194,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%snowc (IM)) allocate (Interstitial%snowd_ice (IM)) allocate (Interstitial%snowd_land (IM)) + allocate (Interstitial%snowd_lake (IM)) allocate (Interstitial%snowd_ocean (IM)) allocate (Interstitial%snohf (IM)) allocate (Interstitial%snowmt (IM)) @@ -6120,6 +6202,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%stress (IM)) allocate (Interstitial%stress_ice (IM)) allocate (Interstitial%stress_land (IM)) + allocate (Interstitial%stress_lake (IM)) allocate (Interstitial%stress_ocean (IM)) allocate (Interstitial%theta (IM)) allocate (Interstitial%tice (IM)) @@ -6127,21 +6210,30 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%tlyr (IM,Model%levr+LTP)) allocate (Interstitial%tprcp_ice (IM)) allocate (Interstitial%tprcp_land (IM)) + allocate (Interstitial%tprcp_lake (IM)) allocate (Interstitial%tprcp_ocean (IM)) allocate (Interstitial%trans (IM)) allocate (Interstitial%tseal (IM)) allocate (Interstitial%tsfa (IM)) allocate (Interstitial%tsfc_ice (IM)) allocate (Interstitial%tsfc_land (IM)) + allocate (Interstitial%tsfc_lake (IM)) allocate (Interstitial%tsfc_ocean (IM)) allocate (Interstitial%tsfg (IM)) allocate (Interstitial%tsurf (IM)) allocate (Interstitial%tsurf_ice (IM)) allocate (Interstitial%tsurf_land (IM)) + allocate (Interstitial%tsurf_lake (IM)) allocate (Interstitial%tsurf_ocean (IM)) allocate (Interstitial%ud_mf (IM,Model%levs)) + allocate (Interstitial%ulwsfc_cice (IM)) + allocate (Interstitial%dusfc_cice (IM)) + allocate (Interstitial%dvsfc_cice (IM)) + allocate (Interstitial%dtsfc_cice (IM)) + allocate (Interstitial%dqsfc_cice (IM)) allocate (Interstitial%uustar_ice (IM)) allocate (Interstitial%uustar_land (IM)) + allocate (Interstitial%uustar_lake (IM)) allocate (Interstitial%uustar_ocean (IM)) allocate (Interstitial%vdftra (IM,Model%levs,Interstitial%nvdiff)) !GJF first dimension was set as 'IX' in GFS_physics_driver allocate (Interstitial%vegf1d (IM)) @@ -6149,6 +6241,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%wcbmax (IM)) allocate (Interstitial%weasd_ice (IM)) allocate (Interstitial%weasd_land (IM)) + allocate (Interstitial%weasd_lake (IM)) allocate (Interstitial%weasd_ocean (IM)) allocate (Interstitial%wind (IM)) allocate (Interstitial%work1 (IM)) @@ -6160,6 +6253,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%z01d (IM)) allocate (Interstitial%zorl_ice (IM)) allocate (Interstitial%zorl_land (IM)) + allocate (Interstitial%zorl_lake (IM)) allocate (Interstitial%zorl_ocean (IM)) allocate (Interstitial%zt1d (IM)) ! RRTMGP @@ -6586,6 +6680,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) type(GFS_control_type), intent(in) :: Model ! Interstitial%adjsfculw_land = clear_val + Interstitial%adjsfculw_lake = clear_val Interstitial%adjsfculw_ice = clear_val Interstitial%adjsfculw_ocean = clear_val Interstitial%adjnirbmd = clear_val @@ -6600,13 +6695,16 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%cd = clear_val Interstitial%cd_ice = huge Interstitial%cd_land = huge + Interstitial%cd_lake = huge Interstitial%cd_ocean = huge Interstitial%cdq = clear_val Interstitial%cdq_ice = huge Interstitial%cdq_land = huge + Interstitial%cdq_lake = huge Interstitial%cdq_ocean = huge Interstitial%chh_ice = huge Interstitial%chh_land = huge + Interstitial%chh_lake = huge Interstitial%chh_ocean = huge Interstitial%cld1d = clear_val Interstitial%cldf = clear_val @@ -6615,6 +6713,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%clx = clear_val Interstitial%cmm_ice = huge Interstitial%cmm_land = huge + Interstitial%cmm_lake = huge Interstitial%cmm_ocean = huge Interstitial%cnvc = clear_val Interstitial%cnvw = clear_val @@ -6645,37 +6744,45 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%ep1d = clear_val Interstitial%ep1d_ice = huge Interstitial%ep1d_land = huge + Interstitial%ep1d_lake = huge Interstitial%ep1d_ocean = huge Interstitial%evap = clear_val Interstitial%evapq = clear_val Interstitial%evap_ice = huge Interstitial%evap_land = huge + Interstitial%evap_lake = huge Interstitial%evap_ocean = huge Interstitial%evbs = clear_val Interstitial%evcw = clear_val Interstitial%ffhh_ice = huge Interstitial%ffhh_land = huge + Interstitial%ffhh_lake = huge Interstitial%ffhh_ocean = huge Interstitial%fh2 = clear_val Interstitial%fh2_ice = huge Interstitial%fh2_land = huge + Interstitial%fh2_lake = huge Interstitial%fh2_ocean = huge Interstitial%flag_cice = .false. Interstitial%flag_guess = .false. Interstitial%flag_iter = .true. Interstitial%ffmm_ice = huge Interstitial%ffmm_land = huge + Interstitial%ffmm_lake = huge Interstitial%ffmm_ocean = huge Interstitial%fm10 = clear_val Interstitial%fm10_ice = huge Interstitial%fm10_land = huge + Interstitial%fm10_lake = huge Interstitial%fm10_ocean = huge Interstitial%frland = clear_val + Interstitial%frlake = clear_val Interstitial%fscav = clear_val Interstitial%fswtr = clear_val Interstitial%gabsbdlw = clear_val Interstitial%gabsbdlw_ice = clear_val Interstitial%gabsbdlw_land = clear_val + Interstitial%gabsbdlw_lake = clear_val Interstitial%gabsbdlw_ocean = clear_val Interstitial%gamma = clear_val Interstitial%gamq = clear_val @@ -6683,6 +6790,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%gflx = clear_val Interstitial%gflx_ice = clear_val Interstitial%gflx_land = clear_val + Interstitial%gflx_lake = zero Interstitial%gflx_ocean = clear_val Interstitial%gwdcu = clear_val Interstitial%gwdcv = clear_val @@ -6692,6 +6800,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%hflxq = clear_val Interstitial%hflx_ice = huge Interstitial%hflx_land = huge + Interstitial%hflx_lake = huge Interstitial%hflx_ocean = huge Interstitial%dry = .false. Interstitial%icy = .false. @@ -6712,6 +6821,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%qss = clear_val Interstitial%qss_ice = huge Interstitial%qss_land = huge + Interstitial%qss_lake = huge Interstitial%qss_ocean = huge Interstitial%raincd = clear_val Interstitial%raincs = clear_val @@ -6720,6 +6830,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%rb = clear_val Interstitial%rb_ice = huge Interstitial%rb_land = huge + Interstitial%rb_lake = huge Interstitial%rb_ocean = huge Interstitial%rhc = clear_val Interstitial%runoff = clear_val @@ -6730,6 +6841,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%sbsno = clear_val Interstitial%semis_ice = clear_val Interstitial%semis_land = clear_val + Interstitial%semis_lake = clear_val Interstitial%semis_ocean = clear_val Interstitial%sigma = clear_val Interstitial%sigmaf = clear_val @@ -6739,6 +6851,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%snowc = clear_val Interstitial%snowd_ice = huge Interstitial%snowd_land = huge + Interstitial%snowd_lake = huge Interstitial%snowd_ocean = huge Interstitial%snohf = clear_val Interstitial%snowmt = clear_val @@ -6746,24 +6859,34 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%stress = clear_val Interstitial%stress_ice = huge Interstitial%stress_land = huge + Interstitial%stress_lake = huge Interstitial%stress_ocean = huge Interstitial%theta = clear_val Interstitial%tice = clear_val Interstitial%tprcp_ice = huge Interstitial%tprcp_land = huge + Interstitial%tprcp_lake = huge Interstitial%tprcp_ocean = huge Interstitial%trans = clear_val Interstitial%tseal = clear_val Interstitial%tsfc_ice = huge Interstitial%tsfc_land = huge + Interstitial%tsfc_lake = huge Interstitial%tsfc_ocean = huge Interstitial%tsurf = clear_val Interstitial%tsurf_ice = huge Interstitial%tsurf_land = huge + Interstitial%tsurf_lake = huge Interstitial%tsurf_ocean = huge Interstitial%ud_mf = clear_val + Interstitial%ulwsfc_cice = clear_val + Interstitial%dusfc_cice = clear_val + Interstitial%dvsfc_cice = clear_val + Interstitial%dtsfc_cice = clear_val + Interstitial%dqsfc_cice = clear_val Interstitial%uustar_ice = huge Interstitial%uustar_land = huge + Interstitial%uustar_lake = huge Interstitial%uustar_ocean = huge Interstitial%vdftra = clear_val Interstitial%vegf1d = clear_val @@ -6771,6 +6894,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%wcbmax = clear_val Interstitial%weasd_ice = huge Interstitial%weasd_land = huge + Interstitial%weasd_lake = huge Interstitial%weasd_ocean = huge Interstitial%wind = huge Interstitial%work1 = clear_val @@ -6782,6 +6906,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%z01d = clear_val Interstitial%zorl_ice = huge Interstitial%zorl_land = huge + Interstitial%zorl_lake = huge Interstitial%zorl_ocean = huge Interstitial%zt1d = clear_val ! CIRES UGWP v0 @@ -6893,6 +7018,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) ! Print all other variables write (0,*) 'Interstitial_print: values that change' write (0,*) 'sum(Interstitial%adjsfculw_land ) = ', sum(Interstitial%adjsfculw_land ) + write (0,*) 'sum(Interstitial%adjsfculw_lake ) = ', sum(Interstitial%adjsfculw_lake ) write (0,*) 'sum(Interstitial%adjsfculw_ice ) = ', sum(Interstitial%adjsfculw_ice ) write (0,*) 'sum(Interstitial%adjsfculw_ocean ) = ', sum(Interstitial%adjsfculw_ocean ) write (0,*) 'sum(Interstitial%adjnirbmd ) = ', sum(Interstitial%adjnirbmd ) @@ -6909,13 +7035,16 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%cd ) = ', sum(Interstitial%cd ) write (0,*) 'sum(Interstitial%cd_ice ) = ', sum(Interstitial%cd_ice ) write (0,*) 'sum(Interstitial%cd_land ) = ', sum(Interstitial%cd_land ) + write (0,*) 'sum(Interstitial%cd_lake ) = ', sum(Interstitial%cd_lake ) write (0,*) 'sum(Interstitial%cd_ocean ) = ', sum(Interstitial%cd_ocean ) write (0,*) 'sum(Interstitial%cdq ) = ', sum(Interstitial%cdq ) write (0,*) 'sum(Interstitial%cdq_ice ) = ', sum(Interstitial%cdq_ice ) write (0,*) 'sum(Interstitial%cdq_land ) = ', sum(Interstitial%cdq_land ) + write (0,*) 'sum(Interstitial%cdq_lake ) = ', sum(Interstitial%cdq_lake ) write (0,*) 'sum(Interstitial%cdq_ocean ) = ', sum(Interstitial%cdq_ocean ) write (0,*) 'sum(Interstitial%chh_ice ) = ', sum(Interstitial%chh_ice ) write (0,*) 'sum(Interstitial%chh_land ) = ', sum(Interstitial%chh_land ) + write (0,*) 'sum(Interstitial%chh_lake ) = ', sum(Interstitial%chh_lake ) write (0,*) 'sum(Interstitial%chh_ocean ) = ', sum(Interstitial%chh_ocean ) write (0,*) 'sum(Interstitial%cldf ) = ', sum(Interstitial%cldf ) write (0,*) 'sum(Interstitial%cldsa ) = ', sum(Interstitial%cldsa ) @@ -6927,6 +7056,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%clouds ) = ', sum(Interstitial%clouds ) write (0,*) 'sum(Interstitial%cmm_ice ) = ', sum(Interstitial%cmm_ice ) write (0,*) 'sum(Interstitial%cmm_land ) = ', sum(Interstitial%cmm_land ) + write (0,*) 'sum(Interstitial%cmm_lake ) = ', sum(Interstitial%cmm_lake ) write (0,*) 'sum(Interstitial%cmm_ocean ) = ', sum(Interstitial%cmm_ocean ) write (0,*) 'sum(Interstitial%cnvc ) = ', sum(Interstitial%cnvc ) write (0,*) 'sum(Interstitial%cnvw ) = ', sum(Interstitial%cnvw ) @@ -6960,11 +7090,13 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%ep1d ) = ', sum(Interstitial%ep1d ) write (0,*) 'sum(Interstitial%ep1d_ice ) = ', sum(Interstitial%ep1d_ice ) write (0,*) 'sum(Interstitial%ep1d_land ) = ', sum(Interstitial%ep1d_land ) + write (0,*) 'sum(Interstitial%ep1d_lake ) = ', sum(Interstitial%ep1d_lake ) write (0,*) 'sum(Interstitial%ep1d_ocean ) = ', sum(Interstitial%ep1d_ocean ) write (0,*) 'sum(Interstitial%evap ) = ', sum(Interstitial%evap ) write (0,*) 'sum(Interstitial%evapq ) = ', sum(Interstitial%evapq ) write (0,*) 'sum(Interstitial%evap_ice ) = ', sum(Interstitial%evap_ice ) write (0,*) 'sum(Interstitial%evap_land ) = ', sum(Interstitial%evap_land ) + write (0,*) 'sum(Interstitial%evap_lake_ ) = ', sum(Interstitial%evap_lake ) write (0,*) 'sum(Interstitial%evap_ocean ) = ', sum(Interstitial%evap_ocean ) write (0,*) 'sum(Interstitial%evbs ) = ', sum(Interstitial%evbs ) write (0,*) 'sum(Interstitial%evcw ) = ', sum(Interstitial%evcw ) @@ -6972,28 +7104,34 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%faersw ) = ', sum(Interstitial%faersw ) write (0,*) 'sum(Interstitial%ffhh_ice ) = ', sum(Interstitial%ffhh_ice ) write (0,*) 'sum(Interstitial%ffhh_land ) = ', sum(Interstitial%ffhh_land ) + write (0,*) 'sum(Interstitial%ffhh_lake ) = ', sum(Interstitial%ffhh_lake ) write (0,*) 'sum(Interstitial%ffhh_ocean ) = ', sum(Interstitial%ffhh_ocean ) write (0,*) 'sum(Interstitial%fh2 ) = ', sum(Interstitial%fh2 ) write (0,*) 'sum(Interstitial%fh2_ice ) = ', sum(Interstitial%fh2_ice ) write (0,*) 'sum(Interstitial%fh2_land ) = ', sum(Interstitial%fh2_land ) + write (0,*) 'sum(Interstitial%fh2_lake ) = ', sum(Interstitial%fh2_lake ) write (0,*) 'sum(Interstitial%fh2_ocean ) = ', sum(Interstitial%fh2_ocean ) write (0,*) 'Interstitial%flag_cice(1) = ', Interstitial%flag_cice(1) write (0,*) 'Interstitial%flag_guess(1) = ', Interstitial%flag_guess(1) write (0,*) 'Interstitial%flag_iter(1) = ', Interstitial%flag_iter(1) write (0,*) 'sum(Interstitial%ffmm_ice ) = ', sum(Interstitial%ffmm_ice ) write (0,*) 'sum(Interstitial%ffmm_land ) = ', sum(Interstitial%ffmm_land ) + write (0,*) 'sum(Interstitial%ffmm_lake ) = ', sum(Interstitial%ffmm_lake ) write (0,*) 'sum(Interstitial%ffmm_ocean ) = ', sum(Interstitial%ffmm_ocean ) write (0,*) 'sum(Interstitial%fm10 ) = ', sum(Interstitial%fm10 ) write (0,*) 'sum(Interstitial%fm10_ice ) = ', sum(Interstitial%fm10_ice ) write (0,*) 'sum(Interstitial%fm10_land ) = ', sum(Interstitial%fm10_land ) + write (0,*) 'sum(Interstitial%fm10_lake ) = ', sum(Interstitial%fm10_lake ) write (0,*) 'sum(Interstitial%fm10_ocean ) = ', sum(Interstitial%fm10_ocean ) write (0,*) 'Interstitial%frain = ', Interstitial%frain write (0,*) 'sum(Interstitial%frland ) = ', sum(Interstitial%frland ) + write (0,*) 'sum(Interstitial%frlake ) = ', sum(Interstitial%frlake ) write (0,*) 'sum(Interstitial%fscav ) = ', sum(Interstitial%fscav ) write (0,*) 'sum(Interstitial%fswtr ) = ', sum(Interstitial%fswtr ) write (0,*) 'sum(Interstitial%gabsbdlw ) = ', sum(Interstitial%gabsbdlw ) write (0,*) 'sum(Interstitial%gabsbdlw_ice ) = ', sum(Interstitial%gabsbdlw_ice ) write (0,*) 'sum(Interstitial%gabsbdlw_land ) = ', sum(Interstitial%gabsbdlw_land ) + write (0,*) 'sum(Interstitial%gabsbdlw_lake ) = ', sum(Interstitial%gabsbdlw_lake ) write (0,*) 'sum(Interstitial%gabsbdlw_ocean ) = ', sum(Interstitial%gabsbdlw_ocean ) write (0,*) 'sum(Interstitial%gamma ) = ', sum(Interstitial%gamma ) write (0,*) 'sum(Interstitial%gamq ) = ', sum(Interstitial%gamq ) @@ -7002,6 +7140,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%gflx ) = ', sum(Interstitial%gflx ) write (0,*) 'sum(Interstitial%gflx_ice ) = ', sum(Interstitial%gflx_ice ) write (0,*) 'sum(Interstitial%gflx_land ) = ', sum(Interstitial%gflx_land ) + write (0,*) 'sum(Interstitial%gflx_lake ) = ', sum(Interstitial%gflx_lake ) write (0,*) 'sum(Interstitial%gflx_ocean ) = ', sum(Interstitial%gflx_ocean ) write (0,*) 'sum(Interstitial%gwdcu ) = ', sum(Interstitial%gwdcu ) write (0,*) 'sum(Interstitial%gwdcv ) = ', sum(Interstitial%gwdcv ) @@ -7011,6 +7150,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%hflxq ) = ', sum(Interstitial%hflxq ) write (0,*) 'sum(Interstitial%hflx_ice ) = ', sum(Interstitial%hflx_ice ) write (0,*) 'sum(Interstitial%hflx_land ) = ', sum(Interstitial%hflx_land ) + write (0,*) 'sum(Interstitial%hflx_lake ) = ', sum(Interstitial%hflx_lake ) write (0,*) 'sum(Interstitial%hflx_ocean ) = ', sum(Interstitial%hflx_ocean ) write (0,*) 'sum(Interstitial%htlwc ) = ', sum(Interstitial%htlwc ) write (0,*) 'sum(Interstitial%htlw0 ) = ', sum(Interstitial%htlw0 ) @@ -7046,6 +7186,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%qss ) = ', sum(Interstitial%qss ) write (0,*) 'sum(Interstitial%qss_ice ) = ', sum(Interstitial%qss_ice ) write (0,*) 'sum(Interstitial%qss_land ) = ', sum(Interstitial%qss_land ) + write (0,*) 'sum(Interstitial%qss_lake ) = ', sum(Interstitial%qss_lake ) write (0,*) 'sum(Interstitial%qss_ocean ) = ', sum(Interstitial%qss_ocean ) write (0,*) 'Interstitial%radar_reset = ', Interstitial%radar_reset write (0,*) 'Interstitial%raddt = ', Interstitial%raddt @@ -7056,6 +7197,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%rb ) = ', sum(Interstitial%rb ) write (0,*) 'sum(Interstitial%rb_ice ) = ', sum(Interstitial%rb_ice ) write (0,*) 'sum(Interstitial%rb_land ) = ', sum(Interstitial%rb_land ) + write (0,*) 'sum(Interstitial%rb_lake ) = ', sum(Interstitial%rb_lake ) write (0,*) 'sum(Interstitial%rb_ocean ) = ', sum(Interstitial%rb_ocean ) write (0,*) 'Interstitial%reset = ', Interstitial%reset write (0,*) 'sum(Interstitial%rhc ) = ', sum(Interstitial%rhc ) @@ -7073,6 +7215,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%scmpsw%visdf ) = ', sum(Interstitial%scmpsw%visdf ) write (0,*) 'sum(Interstitial%semis_ice ) = ', sum(Interstitial%semis_ice ) write (0,*) 'sum(Interstitial%semis_land ) = ', sum(Interstitial%semis_land ) + write (0,*) 'sum(Interstitial%semis_lake ) = ', sum(Interstitial%semis_lake ) write (0,*) 'sum(Interstitial%semis_ocean ) = ', sum(Interstitial%semis_ocean ) write (0,*) 'sum(Interstitial%sfcalb ) = ', sum(Interstitial%sfcalb ) write (0,*) 'sum(Interstitial%sigma ) = ', sum(Interstitial%sigma ) @@ -7083,6 +7226,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%snowc ) = ', sum(Interstitial%snowc ) write (0,*) 'sum(Interstitial%snowd_ice ) = ', sum(Interstitial%snowd_ice ) write (0,*) 'sum(Interstitial%snowd_land ) = ', sum(Interstitial%snowd_land ) + write (0,*) 'sum(Interstitial%snowd_lake ) = ', sum(Interstitial%snowd_lake ) write (0,*) 'sum(Interstitial%snowd_ocean ) = ', sum(Interstitial%snowd_ocean ) write (0,*) 'sum(Interstitial%snohf ) = ', sum(Interstitial%snohf ) write (0,*) 'sum(Interstitial%snowmt ) = ', sum(Interstitial%snowmt ) @@ -7090,6 +7234,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%stress ) = ', sum(Interstitial%stress ) write (0,*) 'sum(Interstitial%stress_ice ) = ', sum(Interstitial%stress_ice ) write (0,*) 'sum(Interstitial%stress_land ) = ', sum(Interstitial%stress_land ) + write (0,*) 'sum(Interstitial%stress_lake ) = ', sum(Interstitial%stress_lake ) write (0,*) 'sum(Interstitial%stress_ocean ) = ', sum(Interstitial%stress_ocean ) write (0,*) 'sum(Interstitial%theta ) = ', sum(Interstitial%theta ) write (0,*) 'sum(Interstitial%tice ) = ', sum(Interstitial%tice ) @@ -7097,21 +7242,30 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%tlyr ) = ', sum(Interstitial%tlyr ) write (0,*) 'sum(Interstitial%tprcp_ice ) = ', sum(Interstitial%tprcp_ice ) write (0,*) 'sum(Interstitial%tprcp_land ) = ', sum(Interstitial%tprcp_land ) + write (0,*) 'sum(Interstitial%tprcp_lake ) = ', sum(Interstitial%tprcp_lake ) write (0,*) 'sum(Interstitial%tprcp_ocean ) = ', sum(Interstitial%tprcp_ocean ) write (0,*) 'sum(Interstitial%trans ) = ', sum(Interstitial%trans ) write (0,*) 'sum(Interstitial%tseal ) = ', sum(Interstitial%tseal ) write (0,*) 'sum(Interstitial%tsfa ) = ', sum(Interstitial%tsfa ) write (0,*) 'sum(Interstitial%tsfc_ice ) = ', sum(Interstitial%tsfc_ice ) write (0,*) 'sum(Interstitial%tsfc_land ) = ', sum(Interstitial%tsfc_land ) + write (0,*) 'sum(Interstitial%tsfc_lake ) = ', sum(Interstitial%tsfc_lake ) write (0,*) 'sum(Interstitial%tsfc_ocean ) = ', sum(Interstitial%tsfc_ocean ) 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_lake ) = ', sum(Interstitial%tsurf_lake ) write (0,*) 'sum(Interstitial%tsurf_ocean ) = ', sum(Interstitial%tsurf_ocean ) write (0,*) 'sum(Interstitial%ud_mf ) = ', sum(Interstitial%ud_mf ) + write (0,*) 'sum(Interstitial%ulwsfc_cice ) = ', sum(Interstitial%ulwsfc_cice ) + write (0,*) 'sum(Interstitial%dusfc_cice ) = ', sum(Interstitial%dusfc_cice ) + write (0,*) 'sum(Interstitial%dvsfc_cice ) = ', sum(Interstitial%dvsfc_cice ) + write (0,*) 'sum(Interstitial%dtsfc_cice ) = ', sum(Interstitial%dtsfc_cice ) + write (0,*) 'sum(Interstitial%dqsfc_cice ) = ', sum(Interstitial%dqsfc_cice ) write (0,*) 'sum(Interstitial%uustar_ice ) = ', sum(Interstitial%uustar_ice ) write (0,*) 'sum(Interstitial%uustar_land ) = ', sum(Interstitial%uustar_land ) + write (0,*) 'sum(Interstitial%uustar_lake ) = ', sum(Interstitial%uustar_lake ) write (0,*) 'sum(Interstitial%uustar_ocean ) = ', sum(Interstitial%uustar_ocean ) write (0,*) 'sum(Interstitial%vdftra ) = ', sum(Interstitial%vdftra ) write (0,*) 'sum(Interstitial%vegf1d ) = ', sum(Interstitial%vegf1d ) @@ -7119,6 +7273,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%wcbmax ) = ', sum(Interstitial%wcbmax ) write (0,*) 'sum(Interstitial%weasd_ice ) = ', sum(Interstitial%weasd_ice ) write (0,*) 'sum(Interstitial%weasd_land ) = ', sum(Interstitial%weasd_land ) + write (0,*) 'sum(Interstitial%weasd_lake ) = ', sum(Interstitial%weasd_lake ) write (0,*) 'sum(Interstitial%weasd_ocean ) = ', sum(Interstitial%weasd_ocean ) write (0,*) 'sum(Interstitial%wind ) = ', sum(Interstitial%wind ) write (0,*) 'sum(Interstitial%work1 ) = ', sum(Interstitial%work1 ) @@ -7130,6 +7285,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%z01d ) = ', sum(Interstitial%z01d ) write (0,*) 'sum(Interstitial%zorl_ice ) = ', sum(Interstitial%zorl_ice ) write (0,*) 'sum(Interstitial%zorl_land ) = ', sum(Interstitial%zorl_land ) + write (0,*) 'sum(Interstitial%zorl_lake ) = ', sum(Interstitial%zorl_lake ) write (0,*) 'sum(Interstitial%zorl_ocean ) = ', sum(Interstitial%zorl_ocean ) write (0,*) 'sum(Interstitial%zt1d ) = ', sum(Interstitial%zt1d ) ! CIRES UGWP v0 diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index 4343bdd2e..9b14e87d5 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -464,6 +464,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[lakedepth] + standard_name = lake_depth + long_name = lake depth + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [tsfc] standard_name = surface_skin_temperature long_name = surface skin temperature @@ -478,6 +485,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[tsfclk] + standard_name = lake_surface_temperature + long_name = lake surface temperature + units = K + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [tsfcl] standard_name = surface_skin_temperature_over_land long_name = surface skin temperature over land @@ -534,6 +548,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[fice_lk] + standard_name = lake_ice_concentration + long_name = lake-ice fraction [0,1] + units = frac + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [hprime] standard_name = statistical_measures_of_subgrid_orography long_name = orographic metrics @@ -660,6 +681,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[hice_lk] + standard_name = surface_ice_thickness_water_equivalent_over_lake + long_name = water equivalent ice depth over lake + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [weasd] standard_name = water_equivalent_accumulated_snow_depth long_name = water equiv of acc snow depth over land and sea ice @@ -2892,6 +2920,12 @@ units = index dimensions = () type = integer +[lkm] + standard_name = flag_for_lake_surface_scheme + long_name = flag for lake surface model + units = flag + dimensions = () + type = integer [ras] standard_name = flag_for_ras_deep_convection long_name = flag for ras convection scheme @@ -6074,6 +6108,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[adjsfculw_lake] + standard_name = surface_upwelling_longwave_flux_over_lake_interstitial + long_name = surface upwelling longwave flux at current time over lake (temporary use as interstitial) + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [adjsfculw_land] standard_name = surface_upwelling_longwave_flux_over_land_interstitial long_name = surface upwelling longwave flux at current time over land (temporary use as interstitial) @@ -6179,6 +6220,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[cd_lake] + standard_name = surface_drag_coefficient_for_momentum_in_air_over_lake + long_name = surface exchange coeff for momentum over lake + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [cd_land] standard_name = surface_drag_coefficient_for_momentum_in_air_over_land long_name = surface exchange coeff for momentum over land @@ -6207,6 +6255,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[cdq_lake] + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_lake + long_name = surface exchange coeff heat & moisture over lake + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [cdq_land] standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_land long_name = surface exchange coeff heat & moisture over land @@ -6228,6 +6283,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[chh_lake] + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_lake + long_name = thermal exchange coefficient over lake + units = kg m-2 s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [chh_land] standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_land long_name = thermal exchange coefficient over land @@ -6396,6 +6458,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[cmm_lake] + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_lake + long_name = momentum exchange coefficient over lake + units = m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [cmm_land] standard_name = surface_drag_wind_speed_for_momentum_in_air_over_land long_name = momentum exchange coefficient over land @@ -6725,6 +6794,34 @@ dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) type = real kind = kind_phys +[dusfc_cice] + standard_name = surface_x_momentum_flux_for_coupling_interstitial + long_name = sfc x momentum flux for coupling interstitial + units = Pa + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[dvsfc_cice] + standard_name = surface_y_momentum_flux_for_coupling_interstitial + long_name = sfc y momentum flux for coupling interstitial + units = Pa + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[dtsfc_cice] + standard_name = surface_upward_sensible_heat_flux_for_coupling_interstitial + long_name = sfc sensible heat flux for coupling interstitial + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[dqsfc_cice] + standard_name = surface_upward_latent_heat_flux_for_coupling_interstitial + long_name= surface latent heat flux for coupling interstitial + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [elvmax] standard_name = maximum_subgrid_orography long_name = maximum of subgrid orography @@ -6739,6 +6836,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[semis_lake] + standard_name = surface_longwave_emissivity_over_lake_interstitial + long_name = surface lw emissivity in fraction over lake (temporary use as interstitial) + units = frac + dimensions = (horizontal_dimension) + 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) @@ -6767,6 +6871,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[ep1d_lake] + standard_name = surface_upward_potential_latent_heat_flux_over_lake + long_name = surface upward potential latent heat flux over lake + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [ep1d_land] standard_name = surface_upward_potential_latent_heat_flux_over_land long_name = surface upward potential latent heat flux over land @@ -6802,6 +6913,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[evap_lake] + standard_name = kinematic_surface_upward_latent_heat_flux_over_lake + long_name = kinematic surface upward latent heat flux over lake + units = kg kg-1 m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [evap_land] standard_name = kinematic_surface_upward_latent_heat_flux_over_land long_name = kinematic surface upward latent heat flux over land @@ -6893,6 +7011,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[ffhh_lake] + standard_name = Monin_Obukhov_similarity_function_for_heat_over_lake + long_name = Monin-Obukhov similarity function for heat over lake + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [ffhh_land] standard_name = Monin_Obukhov_similarity_function_for_heat_over_land long_name = Monin-Obukhov similarity function for heat over land @@ -6921,6 +7046,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[fh2_lake] + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_lake + long_name = Monin-Obukhov similarity parameter for heat at 2m over lake + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [fh2_land] standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_land long_name = Monin-Obukhov similarity parameter for heat at 2m over land @@ -6960,6 +7092,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[ffmm_lake] + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_lake + long_name = Monin-Obukhov similarity function for momentum over lake + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [ffmm_land] standard_name = Monin_Obukhov_similarity_function_for_momentum_over_land long_name = Monin-Obukhov similarity function for momentum over land @@ -6988,6 +7127,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[fm10_lake] + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_lake + long_name = Monin-Obukhov similarity parameter for momentum at 10m over lake + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [fm10_land] standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_land long_name = Monin-Obukhov similarity parameter for momentum at 10m over land @@ -7016,6 +7162,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[frlake] + standard_name = lake_area_fraction_for_microphysics + long_name = lake area fraction used in microphysics schemes + units = frac + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [fscav] standard_name = fraction_of_tracer_scavenged long_name = fraction of the tracer (aerosols) that is scavenged by convection @@ -7044,6 +7197,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[gabsbdlw_lake] + standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_lake + long_name = total sky surface downward longwave flux absorbed by the ground over lake + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [gabsbdlw_land] standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_land long_name = total sky surface downward longwave flux absorbed by the ground over land @@ -7163,6 +7323,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[gflx_lake] + standard_name = upward_heat_flux_in_soil_over_lake + long_name = soil heat flux over lake + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [gflx_land] standard_name = upward_heat_flux_in_soil_over_land long_name = soil heat flux over land @@ -7246,6 +7413,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[hflx_lake] + standard_name = kinematic_surface_upward_sensible_heat_flux_over_lake + long_name = kinematic surface upward sensible heat flux over lake + units = K m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [hflx_land] standard_name = kinematic_surface_upward_sensible_heat_flux_over_land long_name = kinematic surface upward sensible heat flux over land @@ -7725,6 +7899,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[qss_lake] + standard_name = surface_specific_humidity_over_lake + long_name = surface air saturation specific humidity over lake + units = kg kg-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [qss_land] standard_name = surface_specific_humidity_over_land long_name = surface air saturation specific humidity over land @@ -7801,6 +7982,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[rb_lake] + standard_name = bulk_richardson_number_at_lowest_model_level_over_lake + long_name = bulk Richardson number at the surface over lake + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [rb_land] standard_name = bulk_richardson_number_at_lowest_model_level_over_land long_name = bulk Richardson number at the surface over land @@ -7979,6 +8167,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[snowd_lake] + standard_name = surface_snow_thickness_water_equivalent_over_lake + long_name = water equivalent snow depth over lake + units = mm + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [snowd_land] standard_name = surface_snow_thickness_water_equivalent_over_land long_name = water equivalent snow depth over land @@ -8034,6 +8229,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[stress_lake] + standard_name = surface_wind_stress_over_lake + long_name = surface wind stress over lake + units = m2 s-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [stress_land] standard_name = surface_wind_stress_over_land long_name = surface wind stress over land @@ -8090,6 +8292,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[tprcp_lake] + standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_lake + long_name = total precipitation amount in each time step over lake + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [tprcp_land] standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_land long_name = total precipitation amount in each time step over land @@ -8150,6 +8359,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[tsfc_lake] + standard_name = surface_skin_temperature_over_lake_interstitial + long_name = surface skin temperature over lake (temporary use as interstitial) + units = K + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [tsfc_land] standard_name = surface_skin_temperature_over_land_interstitial long_name = surface skin temperature over land (temporary use as interstitial) @@ -8185,6 +8401,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[tsurf_lake] + standard_name = surface_skin_temperature_after_iteration_over_lake + long_name = surface skin temperature after iteration over lake + units = K + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [tsurf_land] standard_name = surface_skin_temperature_after_iteration_over_land long_name = surface skin temperature after iteration over land @@ -8212,6 +8435,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[ulwsfc_cice] + standard_name = surface_upwelling_longwave_flux_for_coupling_interstitial + long_name = surface upwelling longwave flux for coupling_interstitial + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [uustar_ocean] standard_name = surface_friction_velocity_over_ocean long_name = surface friction velocity over ocean @@ -8219,6 +8449,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[uustar_lake] + standard_name = surface_friction_velocity_over_lake + long_name = surface friction velocity over lake + units = m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [uustar_land] standard_name = surface_friction_velocity_over_land long_name = surface friction velocity over land @@ -8274,6 +8511,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[weasd_lake] + standard_name = water_equivalent_accumulated_snow_depth_over_lake + long_name = water equiv of acc snow depth over lake + units = mm + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [weasd_land] standard_name = water_equivalent_accumulated_snow_depth_over_land long_name = water equiv of acc snow depth over land @@ -8351,6 +8595,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[zorl_lake] + standard_name = surface_roughness_length_over_lake_interstitial + long_name = surface roughness length over lake (temporary use as interstitial) + units = cm + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [zorl_land] standard_name = surface_roughness_length_over_land_interstitial long_name = surface roughness length over land (temporary use as interstitial) diff --git a/io/FV3GFS_io.F90 b/io/FV3GFS_io.F90 index 33ff21080..b4a3173de 100644 --- a/io/FV3GFS_io.F90 +++ b/io/FV3GFS_io.F90 @@ -492,6 +492,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) integer :: id_restart integer :: nvar_o2, nvar_s2m, nvar_s2o, nvar_s3 integer :: nvar_s2mp, nvar_s3mp,isnow + integer :: nlakes #ifdef CCPP integer :: nvar_s2r #endif @@ -517,6 +518,7 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) data dzs /0.1,0.3,0.6,1.0/ data zsoil /-0.1,-0.4,-1.0,-2.0/ + nlakes = 0 if (Model%cplflx) then ! needs more variables nvar_s2m = 34 @@ -633,9 +635,23 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) Sfcprop(nb)%oro_uf(ix) = oro_var2(i,j,16) Sfcprop(nb)%landfrac(ix) = oro_var2(i,j,17) !land frac [0:1] Sfcprop(nb)%lakefrac(ix) = oro_var2(i,j,18) !lake frac [0:1] + Sfcprop(nb)%lakedepth(ix) = oro_var2(i,j,19) !lake depth [m] !YWu enddo enddo + if (nint(oro_var2(1,1,18)) == -9999._kind_phys) then ! lakefrac doesn't exist in the restart, need to create it + if (Model%me == Model%master ) call mpp_error(NOTE, 'gfs_driver::surface_props_input - will computing lakefrac') + Model%frac_grid = .false. + elseif (Model%frac_grid_off) then + Model%frac_grid = .false. + else + Model%frac_grid = .true. + endif + + if (Model%me == Model%master ) write(0,*)' resetting Model%frac_grid=',Model%frac_grid + +! Model%frac_grid = .false. !YWu 2019 + !--- deallocate containers and free restart container deallocate(oro_name2, oro_var2) call free_restart_type(Oro_restart) @@ -910,6 +926,19 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) !--- 2D variables ! ------------ Sfcprop(nb)%slmsk(ix) = sfc_var2(i,j,1) !--- slmsk + +! print*,'Sfcprop(nb)%slmsk(ix) = ', Sfcprop(nb)%slmsk(ix) + if(Sfcprop(nb)%slmsk(ix) == 5) then + nlakes = nlakes + 1 + endif +! YWU 2020 + if(Model%lkm.ne.1) then + if(Sfcprop(nb)%slmsk(ix) == 5) then + Sfcprop(nb)%slmsk(ix) = 0 + Sfcprop(nb)%lakefrac(ix)=0.0 + endif + endif +! Sfcprop(nb)%tsfco(ix) = sfc_var2(i,j,2) !--- tsfc (tsea in sfc file) Sfcprop(nb)%weasd(ix) = sfc_var2(i,j,3) !--- weasd (sheleg in sfc file) Sfcprop(nb)%tg3(ix) = sfc_var2(i,j,4) !--- tg3 @@ -1115,6 +1144,9 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) enddo !ix enddo !nb + + print*,'nlakes= ',nlakes + call mpp_error(NOTE, 'gfs_driver:: - after put to container ') ! so far: At cold start everything is 9999.0, warm start snowxy has values