From 3cd72e71c59e976bd3d364ea5fe9c42c1def91e6 Mon Sep 17 00:00:00 2001 From: ericaligo-NOAA <48365233+ericaligo-NOAA@users.noreply.github.com> Date: Mon, 5 Dec 2022 09:38:19 -0500 Subject: [PATCH 01/20] Update .gitmodules --- .gitmodules | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index 22c723ac1..757205eae 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,9 +8,13 @@ branch = main [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/ufs-community/ccpp-physics - branch = ufs/dev + url = https://github.com/ericaligo-NOAA/ccpp-physics + branch = winterwx +# url = https://github.com/ufs-community/ccpp-physics +# branch = ufs/dev [submodule "upp"] path = upp - url = https://github.com/NOAA-EMC/UPP - branch = develop + url = https://github.com/ericaligo-NOAA/UPP + branch = winterwx +# url = https://github.com/NOAA-EMC/UPP +# branch = develop From 325e45f1dbc183b30e0698c59e2c0a0ce9216b68 Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Thu, 8 Dec 2022 19:19:06 +0000 Subject: [PATCH 02/20] Six new winter wx diags added to output, accumulated fields added to restart file and changed nsradar_reset, radar_reset to something that makes more sense, that is, nsfullradar_diag and fullradar_diag. Also, added new namelist parameter to use new precip ice density with the NOAH LSM. Code changes to upp also made to include the new winter wx diags. --- ccpp/data/CCPP_typedefs.F90 | 10 ++-- ccpp/data/CCPP_typedefs.meta | 6 +-- ccpp/data/GFS_typedefs.F90 | 41 +++++++++++++--- ccpp/data/GFS_typedefs.meta | 55 ++++++++++++++++++++++ ccpp/driver/GFS_diagnostics.F90 | 83 +++++++++++++++++++++++++++++++++ ccpp/driver/GFS_restart.F90 | 12 +++++ ccpp/physics | 2 +- io/post_fv3.F90 | 69 ++++++++++++++++++++++++++- upp | 2 +- 9 files changed, 262 insertions(+), 18 deletions(-) diff --git a/ccpp/data/CCPP_typedefs.F90 b/ccpp/data/CCPP_typedefs.F90 index c8f402b65..9ae5a5d27 100644 --- a/ccpp/data/CCPP_typedefs.F90 +++ b/ccpp/data/CCPP_typedefs.F90 @@ -254,7 +254,7 @@ module CCPP_typedefs real (kind=kind_phys), pointer :: qss_ice(:) => null() !< real (kind=kind_phys), pointer :: qss_land(:) => null() !< real (kind=kind_phys), pointer :: qss_water(:) => null() !< - logical :: radar_reset !< + logical :: fullradar_diag !< real (kind=kind_phys) :: raddt !< real (kind=kind_phys), pointer :: rainmp(:) => null() !< real (kind=kind_phys), pointer :: raincd(:) => null() !< @@ -1611,11 +1611,11 @@ subroutine gfs_interstitial_phys_reset (Interstitial, Model) ! Use same logic in UFS to reset Thompson extended diagnostics Interstitial%ext_diag_thompson_reset = Interstitial%max_hourly_reset ! - ! Set flag for resetting radar reflectivity calculation - if (Model%nsradar_reset<0) then - Interstitial%radar_reset = .true. + ! Frequency flag for computing the full radar reflectivity (water coated ice) + if (Model%nsfullradar_diag<0) then + Interstitial%fullradar_diag = .true. else - Interstitial%radar_reset = mod(Model%kdt-1, nint(Model%nsradar_reset/Model%dtp)) == 0 + Interstitial%fullradar_diag = (Model%kdt == 1 .or. mod(Model%kdt, nint(Model%nsfullradar_diag/Model%dtp)) == 0) end if ! end subroutine gfs_interstitial_phys_reset diff --git a/ccpp/data/CCPP_typedefs.meta b/ccpp/data/CCPP_typedefs.meta index d9eaba7ca..80396fb5f 100644 --- a/ccpp/data/CCPP_typedefs.meta +++ b/ccpp/data/CCPP_typedefs.meta @@ -1699,9 +1699,9 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys -[radar_reset] - standard_name = flag_for_resetting_radar_reflectivity_calculation - long_name = flag for resetting radar reflectivity calculation +[fullradar_diag] + standard_name = flag_for_computing_full_radar_reflectivity + long_name = flag for computing full radar reflectivity units = flag dimensions = () type = logical diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 41741d236..5a801a681 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -890,7 +890,7 @@ module GFS_typedefs logical :: ltaerosol !< flag for aerosol version logical :: mraerosol !< flag for merra2_aerosol_aware logical :: lradar !< flag for radar reflectivity - real(kind=kind_phys) :: nsradar_reset !< seconds between resetting radar reflectivity calculation + real(kind=kind_phys) :: nsfullradar_diag!< seconds between resetting radar reflectivity calculation real(kind=kind_phys) :: ttendlim !< temperature tendency limiter per time step in K/s logical :: ext_diag_thompson !< flag for extended diagnostic output from Thompson integer :: thompson_ext_ndiag3d=37 !< number of 3d arrays for extended diagnostic output from Thompson @@ -924,6 +924,7 @@ module GFS_typedefs integer :: lsnow_lsm !< maximum number of snow layers internal to land surface model integer :: lsnow_lsm_lbound!< lower bound for snow arrays, depending on lsnow_lsm integer :: lsnow_lsm_ubound!< upper bound for snow arrays, depending on lsnow_lsm + logical :: vrbliceden_noah !< flag for variable precip ice density for NOAH LSM real(kind=kind_phys), pointer :: zs(:) => null() !< depth of soil levels for land surface model real(kind=kind_phys), pointer :: dzs(:) => null() !< thickness of soil levels for land surface model real(kind=kind_phys), pointer :: pores(:) => null() !< max soil moisture for a given soil type for land surface model @@ -1727,6 +1728,13 @@ module GFS_typedefs real (kind=kind_phys), pointer :: toticeb(:) => null() !< accumulated ice precipitation in bucket (kg/m2) real (kind=kind_phys), pointer :: totsnwb(:) => null() !< accumulated snow precipitation in bucket (kg/m2) real (kind=kind_phys), pointer :: totgrpb(:) => null() !< accumulated graupel precipitation in bucket (kg/m2) + real (kind=kind_phys), pointer :: acfrzrn(:) => null() !< accumulated surface freezing rain (m) + real (kind=kind_phys), pointer :: acfrzrnb(:) => null() !< accumulated surface freezing rain in bucket (m) + real (kind=kind_phys), pointer :: acgraup(:) => null() !< accumulated surface graupel (m) + real (kind=kind_phys), pointer :: acgraupb(:) => null() !< accumulated surface graupel in bucket (m) + real (kind=kind_phys), pointer :: acsnow(:) => null() !< accumulated surface snowfall (m) + real (kind=kind_phys), pointer :: acsnowb(:) => null() !< accumulated surface snowfall in bucket (m) + real (kind=kind_phys), pointer :: rhonewsn1(:) => null() !< precipitation ice density (kg/m3) !--- MYNN variables real (kind=kind_phys), pointer :: edmf_a (:,:) => null() ! @@ -3089,7 +3097,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: ltaerosol = .false. !< flag for aerosol version logical :: mraerosol = .false. !< flag for merra2_aerosol_aware logical :: lradar = .false. !< flag for radar reflectivity - real(kind=kind_phys) :: nsradar_reset = -999.0 !< seconds between resetting radar reflectivity calculation, set to <0 for every time step + real(kind=kind_phys) :: nsfullradar_diag = -999.0 !< seconds between resetting radar reflectivity calculation, set to <0 for every time step real(kind=kind_phys) :: ttendlim = -999.0 !< temperature tendency limiter, set to <0 to deactivate logical :: ext_diag_thompson = .false. !< flag for extended diagnostic output from Thompson real(kind=kind_phys) :: dt_inner = -999.0 !< time step for the inner loop @@ -3107,6 +3115,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: lsoil = 4 !< number of soil layers integer :: lsoil_lsm = -1 !< number of soil layers internal to land surface model; -1 use lsoil integer :: lsnow_lsm = 3 !< maximum number of snow layers internal to land surface model + logical :: vrbliceden_noah = .false. !< Use variable precip ice density for NOAH LSM if true or original formulation logical :: rdlai = .false. !< read LAI from input file (for RUC LSM or NOAH LSM WRFv4) logical :: ua_phys = .false. !< flag for using University of Arizona? extension to NOAH LSM WRFv4 logical :: usemonalb = .true. !< flag to read surface diffused shortwave albedo from input file for NOAH LSM WRFv4 @@ -3498,7 +3507,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & mg_do_graupel, mg_do_hail, mg_nccons, mg_nicons, mg_ngcons, & mg_ncnst, mg_ninst, mg_ngnst, sed_supersat, do_sb_physics, & mg_alf, mg_qcmin, mg_do_ice_gmao, mg_do_liq_liu, & - ltaerosol, lradar, nsradar_reset, lrefres, ttendlim, & + ltaerosol, lradar, nsfullradar_diag, lrefres, ttendlim, & ext_diag_thompson, dt_inner, lgfdlmprad, & sedi_semi, decfl, & nssl_cccn, nssl_alphah, nssl_alphahl, & @@ -3508,7 +3517,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- land/surface model control lsm, lsoil, lsoil_lsm, lsnow_lsm, kice, rdlai, & nmtvr, ivegsrc, use_ufo, iopt_thcnd, ua_phys, usemonalb, & - aoasis, fasdas, & + aoasis, fasdas,vrbliceden_noah, & ! 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, & @@ -4045,7 +4054,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & stop end if Model%lradar = lradar - Model%nsradar_reset = nsradar_reset + Model%nsfullradar_diag = nsfullradar_diag Model%ttendlim = ttendlim Model%ext_diag_thompson= ext_diag_thompson if (dt_inner>0) then @@ -4153,6 +4162,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ivegsrc = ivegsrc Model%isot = isot Model%use_ufo = use_ufo + Model%vrbliceden_noah = vrbliceden_noah ! GFDL surface layer options Model%lcurr_sf = lcurr_sf @@ -5042,6 +5052,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & if (Model%me == Model%master) then if (Model%lsm == 1) then print *,' NOAH Land Surface Model used' + print *,'vrbliceden_noah = ', Model%vrbliceden_noah + elseif (Model%lsm == 0) then print *,' OSU no longer supported - job aborted' stop @@ -5338,7 +5350,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ' decfl=',decfl, & ' effr_in =',Model%effr_in, & ' lradar =',Model%lradar, & - ' nsradar_reset =',Model%nsradar_reset, & + ' nsfullradar_diag =',Model%nsfullradar_diag, & ' num_p3d =',Model%num_p3d, & ' num_p2d =',Model%num_p2d @@ -5839,7 +5851,7 @@ subroutine control_print(Model) print *, ' ltaerosol : ', Model%ltaerosol print *, ' mraerosol : ', Model%mraerosol print *, ' lradar : ', Model%lradar - print *, ' nsradar_reset : ', Model%nsradar_reset + print *, ' nsfullradar_diag : ', Model%nsfullradar_diag print *, ' lrefres : ', Model%lrefres print *, ' ttendlim : ', Model%ttendlim print *, ' ext_diag_thompson : ', Model%ext_diag_thompson @@ -5899,6 +5911,7 @@ subroutine control_print(Model) print *, ' lsoil : ', Model%lsoil print *, ' rdlai : ', Model%rdlai print *, ' lsoil_lsm : ', Model%lsoil_lsm + print *, ' vrbliceden_noah : ', Model%vrbliceden_noah if (Model%lsm==Model%lsm_noahmp) then print *, ' lsnow_lsm : ', Model%lsnow_lsm print *, ' lsnow_lsm_lbound : ', Model%lsnow_lsm_lbound @@ -6862,6 +6875,13 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%epi (IM)) allocate (Diag%smcwlt2 (IM)) allocate (Diag%smcref2 (IM)) + allocate (Diag%rhonewsn1 (IM)) + allocate (Diag%acfrzrn (IM)) + allocate (Diag%acfrzrnb (IM)) + allocate (Diag%acgraup (IM)) + allocate (Diag%acgraupb (IM)) + allocate (Diag%acsnow (IM)) + allocate (Diag%acsnowb (IM)) if (.not. Model%lsm == Model%lsm_ruc) then allocate (Diag%wet1 (IM)) end if @@ -7188,6 +7208,9 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%toticeb = zero Diag%totsnwb = zero Diag%totgrpb = zero + Diag%acfrzrnb = zero + Diag%acgraupb = zero + Diag%acsnowb = zero !--- MYNN variables: if (Model%do_mynnedmf) then @@ -7300,6 +7323,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%rh02max = -999. Diag%rh02min = 999. Diag%pratemax = 0. + Diag%rhonewsn1 = 200. set_totprcp = .false. if (present(linit) ) set_totprcp = linit if (present(iauwindow_center) ) set_totprcp = iauwindow_center @@ -7309,6 +7333,9 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%totice = zero Diag%totsnw = zero Diag%totgrp = zero + Diag%acfrzrn = zero + Diag%acgraup = zero + Diag%acsnow = zero endif end subroutine diag_phys_zero diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index 42d5ef29e..ddb0f7a1a 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -4170,6 +4170,12 @@ units = count dimensions = () type = integer +[vrbliceden_noah] + standard_name = flag_for_vrbl_prcp_ice_den + long_name = flag for variable precip ice density + units = flag + dimensions = () + type = logical [zs] standard_name = depth_of_soil_layers long_name = depth of soil levels for land surface model @@ -7493,6 +7499,55 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys +[acfrzrn] + standard_name = lwe_thickness_of_sfc_freezing_rain_amount + long_name = accumulated surface freezing rain + units = m + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[acfrzrnb] + standard_name = lwe_thickness_of_sfc_freezing_rain_amount_in_bucket + long_name = accumulated surface freezing rain in bucket + units = m + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[acgraup] + standard_name = lwe_thickness_of_sfc_graupel_amount + long_name = accumulated surface graupel + units = m + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[acgraupb] + standard_name = lwe_thickness_of_sfc_graupel_amount_in_bucket + long_name = accumulated surface graupel in bucket + units = m + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[acsnow] + standard_name = lwe_thickness_of_sfc_snow_amount + long_name = accumulated surface snow + units = m + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[acsnowb] + standard_name = lwe_thickness_of_sfc_snow_amount_in_bucket + long_name = accumulated surface snow in bucket + units = m + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[rhonewsn1] + standard_name = lwe_density_of_precip_ice + long_name = density of precipitation ice + units = kg m-3 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys [train] standard_name = accumulated_change_of_air_temperature_due_to_FA_scheme long_name = accumulated change of air temperature due to FA MP scheme diff --git a/ccpp/driver/GFS_diagnostics.F90 b/ccpp/driver/GFS_diagnostics.F90 index 9e7cbf49b..cb79adc0d 100644 --- a/ccpp/driver/GFS_diagnostics.F90 +++ b/ccpp/driver/GFS_diagnostics.F90 @@ -1642,6 +1642,89 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%pratemax(:) enddo + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'acfrzrn' + ExtDiag(idx)%desc = 'accumulated surface freezing rain' + ExtDiag(idx)%unit = 'kg/m**2' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%cnvfac = cn_th + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%acfrzrn(:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'acfrzrnb' + ExtDiag(idx)%desc = 'accumulated surface freezing rain in bucket' + ExtDiag(idx)%unit = 'kg/m**2' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%cnvfac = cn_th + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%acfrzrnb(:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'acgraup' + ExtDiag(idx)%desc = 'accumulated surface graupel' + ExtDiag(idx)%unit = 'kg/m**2' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%cnvfac = cn_th + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%acgraup(:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'acgraupb' + ExtDiag(idx)%desc = 'accumulated surface graupel in bucket' + ExtDiag(idx)%unit = 'kg/m**2' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%cnvfac = cn_th + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%acgraupb(:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'acsnow' + ExtDiag(idx)%desc = 'accumulated surface snow' + ExtDiag(idx)%unit = 'kg/m**2' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%cnvfac = cn_th + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%acsnow(:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'acsnowb' + ExtDiag(idx)%desc = 'accumulated surface snow in bucket' + ExtDiag(idx)%unit = 'kg/m**2' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%cnvfac = cn_th + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%acsnowb(:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'rhonewsn' + ExtDiag(idx)%desc = 'precipitation ice density' + ExtDiag(idx)%unit = 'kg m^-3' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%rhonewsn1(:) + enddo + idx = idx + 1 ExtDiag(idx)%axes = 2 ExtDiag(idx)%name = 'rain' diff --git a/ccpp/driver/GFS_restart.F90 b/ccpp/driver/GFS_restart.F90 index 4774ff299..5735c189a 100644 --- a/ccpp/driver/GFS_restart.F90 +++ b/ccpp/driver/GFS_restart.F90 @@ -88,6 +88,18 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & else if( trim(ExtDiag(idx)%name) == 'totgrp_ave') then ndiag_rst = ndiag_rst +1 ndiag_idx(ndiag_rst) = idx + else if( trim(ExtDiag(idx)%name) == 'acsnow') then + ndiag_rst = ndiag_rst +1 + ndiag_idx(ndiag_rst) = idx + else if( trim(ExtDiag(idx)%name) == 'acgraup') then + ndiag_rst = ndiag_rst +1 + ndiag_idx(ndiag_rst) = idx + else if( trim(ExtDiag(idx)%name) == 'acfrzrn') then + ndiag_rst = ndiag_rst +1 + ndiag_idx(ndiag_rst) = idx + else if( trim(ExtDiag(idx)%name) == 'snowfall_acc_land') then + ndiag_rst = ndiag_rst +1 + ndiag_idx(ndiag_rst) = idx endif endif enddo diff --git a/ccpp/physics b/ccpp/physics index 9d45cd1b5..8f7f329f0 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 9d45cd1b5a7700c20b0493122ed420be0e79baba +Subproject commit 8f7f329f01fcb7a88e7240f77740bfef0e94de57 diff --git a/io/post_fv3.F90 b/io/post_fv3.F90 index 6b08c4785..6fcd975a5 100644 --- a/io/post_fv3.F90 +++ b/io/post_fv3.F90 @@ -527,7 +527,8 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) rel_vort_max, rel_vort_maxhy1, refd_max, & refdm10c_max, u10max, v10max, wspd10max, sfcuxi, & sfcvxi, t10m, t10avg, psfcavg, akhsavg, akmsavg, & - albedo, tg, prate_max, pwat + albedo, tg, prate_max, pwat, snow_acm, snow_bkt, & + acgraup, graup_bucket, acfrain, frzrn_bucket use soil, only: sldpth, sh2o, smc, stc use masks, only: lmv, lmh, htm, vtm, gdlat, gdlon, dx, dy, hbm2, sm, sice use ctlblk_mod, only: im, jm, lm, lp1, jsta, jend, jsta_2l, jend_2u, jsta_m,jend_m, & @@ -1191,6 +1192,72 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) enddo endif + !Accumulated snowfall + if(trim(fieldname)=='acsnow') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,snow_acm,arrayr42d,sm,fillValue) + do j=jsta,jend + do i=ista, iend + snow_acm(i,j) = arrayr42d(i,j) + if (abs(arrayr42d(i,j)-fillValue) < small) snow_acm(i,j) = spval + enddo + enddo + endif + + !Snowfall bucket + if(trim(fieldname)=='acsnowb') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,snow_bkt,arrayr42d,sm,fillValue) + do j=jsta,jend + do i=ista, iend + snow_bkt(i,j) = arrayr42d(i,j) + if (abs(arrayr42d(i,j)-fillValue) < small) snow_bkt(i,j) = spval + enddo + enddo + endif + + !Accumulated graupel + if(trim(fieldname)=='acgraup') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,acgraup,arrayr42d,sm,fillValue) + do j=jsta,jend + do i=ista, iend + acgraup(i,j) = arrayr42d(i,j) + if (abs(arrayr42d(i,j)-fillValue) < small) acgraup(i,j) = spval + enddo + enddo + endif + + !Graupel bucket + if(trim(fieldname)=='acgraupb') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,graup_bucket,arrayr42d,sm,fillValue) + do j=jsta,jend + do i=ista, iend + graup_bucket(i,j) = arrayr42d(i,j) + if (abs(arrayr42d(i,j)-fillValue) < small) graup_bucket(i,j) = spval + enddo + enddo + endif + + !Accumulated freezing rain + if(trim(fieldname)=='acfrzrn') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,acfrain,arrayr42d,sm,fillValue) + do j=jsta,jend + do i=ista, iend + acfrain(i,j) = arrayr42d(i,j) + if (abs(arrayr42d(i,j)-fillValue) < small) acfrain(i,j) = spval + enddo + enddo + endif + + !Freezing rain bucket + if(trim(fieldname)=='acfrzrnb') then + !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,frzrn_bucket,arrayr42d,sm,fillValue) + do j=jsta,jend + do i=ista, iend + frzrn_bucket(i,j) = arrayr42d(i,j) + if (abs(arrayr42d(i,j)-fillValue) < small) frzrn_bucket(i,j) = spval + enddo + enddo + endif + ! max hourly surface precipitation rate if(trim(fieldname)=='pratemax') then !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,prate_max,arrayr42d,sm,fillValue) diff --git a/upp b/upp index e22724738..66fd8a1ad 160000 --- a/upp +++ b/upp @@ -1 +1 @@ -Subproject commit e22724738fd104327fee7c3c7ffc805ccabd619f +Subproject commit 66fd8a1adff4a6a1dff2eeb271b160bff8216a49 From 5945045f351415ead08fffd3c229e706e2feb217 Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Fri, 9 Dec 2022 15:41:55 +0000 Subject: [PATCH 03/20] Fix typo --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 8f7f329f0..33f492239 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 8f7f329f01fcb7a88e7240f77740bfef0e94de57 +Subproject commit 33f4922398a896c9c69b4b9852a13d6febd86706 From 770f532f18864fc30d8374ed3487c251fb7acef0 Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Mon, 12 Dec 2022 15:09:28 +0000 Subject: [PATCH 04/20] Rename winter wx diags --- ccpp/driver/GFS_diagnostics.F90 | 24 ++++++++++++------------ ccpp/driver/GFS_restart.F90 | 9 +++------ ccpp/physics | 2 +- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/ccpp/driver/GFS_diagnostics.F90 b/ccpp/driver/GFS_diagnostics.F90 index cb79adc0d..9a90aa5cb 100644 --- a/ccpp/driver/GFS_diagnostics.F90 +++ b/ccpp/driver/GFS_diagnostics.F90 @@ -1644,74 +1644,74 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop idx = idx + 1 ExtDiag(idx)%axes = 2 - ExtDiag(idx)%name = 'acfrzrn' + ExtDiag(idx)%name = 'frzr' ExtDiag(idx)%desc = 'accumulated surface freezing rain' ExtDiag(idx)%unit = 'kg/m**2' ExtDiag(idx)%mod_name = 'gfs_phys' ExtDiag(idx)%cnvfac = cn_th allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%acfrzrn(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%frzr(:) enddo idx = idx + 1 ExtDiag(idx)%axes = 2 - ExtDiag(idx)%name = 'acfrzrnb' + ExtDiag(idx)%name = 'frzrb' ExtDiag(idx)%desc = 'accumulated surface freezing rain in bucket' ExtDiag(idx)%unit = 'kg/m**2' ExtDiag(idx)%mod_name = 'gfs_phys' ExtDiag(idx)%cnvfac = cn_th allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%acfrzrnb(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%frzrb(:) enddo idx = idx + 1 ExtDiag(idx)%axes = 2 - ExtDiag(idx)%name = 'acgraup' + ExtDiag(idx)%name = 'frozr' ExtDiag(idx)%desc = 'accumulated surface graupel' ExtDiag(idx)%unit = 'kg/m**2' ExtDiag(idx)%mod_name = 'gfs_phys' ExtDiag(idx)%cnvfac = cn_th allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%acgraup(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%frozr(:) enddo idx = idx + 1 ExtDiag(idx)%axes = 2 - ExtDiag(idx)%name = 'acgraupb' + ExtDiag(idx)%name = 'frozrb' ExtDiag(idx)%desc = 'accumulated surface graupel in bucket' ExtDiag(idx)%unit = 'kg/m**2' ExtDiag(idx)%mod_name = 'gfs_phys' ExtDiag(idx)%cnvfac = cn_th allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%acgraupb(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%frozrb(:) enddo idx = idx + 1 ExtDiag(idx)%axes = 2 - ExtDiag(idx)%name = 'acsnow' + ExtDiag(idx)%name = 'tsnowp' ExtDiag(idx)%desc = 'accumulated surface snow' ExtDiag(idx)%unit = 'kg/m**2' ExtDiag(idx)%mod_name = 'gfs_phys' ExtDiag(idx)%cnvfac = cn_th allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%acsnow(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tsnowp(:) enddo idx = idx + 1 ExtDiag(idx)%axes = 2 - ExtDiag(idx)%name = 'acsnowb' + ExtDiag(idx)%name = 'tsnowpb' ExtDiag(idx)%desc = 'accumulated surface snow in bucket' ExtDiag(idx)%unit = 'kg/m**2' ExtDiag(idx)%mod_name = 'gfs_phys' ExtDiag(idx)%cnvfac = cn_th allocate (ExtDiag(idx)%data(nblks)) do nb = 1,nblks - ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%acsnowb(:) + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tsnowpb(:) enddo idx = idx + 1 diff --git a/ccpp/driver/GFS_restart.F90 b/ccpp/driver/GFS_restart.F90 index 5735c189a..c3930d752 100644 --- a/ccpp/driver/GFS_restart.F90 +++ b/ccpp/driver/GFS_restart.F90 @@ -88,16 +88,13 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & else if( trim(ExtDiag(idx)%name) == 'totgrp_ave') then ndiag_rst = ndiag_rst +1 ndiag_idx(ndiag_rst) = idx - else if( trim(ExtDiag(idx)%name) == 'acsnow') then + else if( trim(ExtDiag(idx)%name) == 'tsnowp') then ndiag_rst = ndiag_rst +1 ndiag_idx(ndiag_rst) = idx - else if( trim(ExtDiag(idx)%name) == 'acgraup') then + else if( trim(ExtDiag(idx)%name) == 'frozr') then ndiag_rst = ndiag_rst +1 ndiag_idx(ndiag_rst) = idx - else if( trim(ExtDiag(idx)%name) == 'acfrzrn') then - ndiag_rst = ndiag_rst +1 - ndiag_idx(ndiag_rst) = idx - else if( trim(ExtDiag(idx)%name) == 'snowfall_acc_land') then + else if( trim(ExtDiag(idx)%name) == 'frzr') then ndiag_rst = ndiag_rst +1 ndiag_idx(ndiag_rst) = idx endif diff --git a/ccpp/physics b/ccpp/physics index 33f492239..f72f38b13 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 33f4922398a896c9c69b4b9852a13d6febd86706 +Subproject commit f72f38b13992eb127a32bb5f18ca2a3ea7c5ebfd From 78cfeb1634fbecafcf020c731c1c81211f55a88c Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Mon, 12 Dec 2022 15:13:53 +0000 Subject: [PATCH 05/20] Rename winter wx diags --- ccpp/data/GFS_typedefs.F90 | 36 ++++++++++++++++++------------------ ccpp/data/GFS_typedefs.meta | 12 ++++++------ io/post_fv3.F90 | 12 ++++++------ 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 5a801a681..0b75499c0 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -1728,12 +1728,12 @@ module GFS_typedefs real (kind=kind_phys), pointer :: toticeb(:) => null() !< accumulated ice precipitation in bucket (kg/m2) real (kind=kind_phys), pointer :: totsnwb(:) => null() !< accumulated snow precipitation in bucket (kg/m2) real (kind=kind_phys), pointer :: totgrpb(:) => null() !< accumulated graupel precipitation in bucket (kg/m2) - real (kind=kind_phys), pointer :: acfrzrn(:) => null() !< accumulated surface freezing rain (m) - real (kind=kind_phys), pointer :: acfrzrnb(:) => null() !< accumulated surface freezing rain in bucket (m) - real (kind=kind_phys), pointer :: acgraup(:) => null() !< accumulated surface graupel (m) - real (kind=kind_phys), pointer :: acgraupb(:) => null() !< accumulated surface graupel in bucket (m) - real (kind=kind_phys), pointer :: acsnow(:) => null() !< accumulated surface snowfall (m) - real (kind=kind_phys), pointer :: acsnowb(:) => null() !< accumulated surface snowfall in bucket (m) + real (kind=kind_phys), pointer :: frzr(:) => null() !< accumulated surface freezing rain (m) + real (kind=kind_phys), pointer :: frzrb(:) => null() !< accumulated surface freezing rain in bucket (m) + real (kind=kind_phys), pointer :: frozr(:) => null() !< accumulated surface graupel (m) + real (kind=kind_phys), pointer :: frozrb(:) => null() !< accumulated surface graupel in bucket (m) + real (kind=kind_phys), pointer :: tsnowp(:) => null() !< accumulated surface snowfall (m) + real (kind=kind_phys), pointer :: tsnowpb(:) => null() !< accumulated surface snowfall in bucket (m) real (kind=kind_phys), pointer :: rhonewsn1(:) => null() !< precipitation ice density (kg/m3) !--- MYNN variables @@ -6876,12 +6876,12 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%smcwlt2 (IM)) allocate (Diag%smcref2 (IM)) allocate (Diag%rhonewsn1 (IM)) - allocate (Diag%acfrzrn (IM)) - allocate (Diag%acfrzrnb (IM)) - allocate (Diag%acgraup (IM)) - allocate (Diag%acgraupb (IM)) - allocate (Diag%acsnow (IM)) - allocate (Diag%acsnowb (IM)) + allocate (Diag%frzr (IM)) + allocate (Diag%frzrb (IM)) + allocate (Diag%frozr (IM)) + allocate (Diag%frozrb (IM)) + allocate (Diag%tsnowp (IM)) + allocate (Diag%tsnowpb (IM)) if (.not. Model%lsm == Model%lsm_ruc) then allocate (Diag%wet1 (IM)) end if @@ -7208,9 +7208,9 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%toticeb = zero Diag%totsnwb = zero Diag%totgrpb = zero - Diag%acfrzrnb = zero - Diag%acgraupb = zero - Diag%acsnowb = zero + Diag%frzrb = zero + Diag%frozrb = zero + Diag%tsnowpb = zero !--- MYNN variables: if (Model%do_mynnedmf) then @@ -7333,9 +7333,9 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%totice = zero Diag%totsnw = zero Diag%totgrp = zero - Diag%acfrzrn = zero - Diag%acgraup = zero - Diag%acsnow = zero + Diag%frzr = zero + Diag%frozr = zero + Diag%tsnowp = zero endif end subroutine diag_phys_zero diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index ddb0f7a1a..081e84edc 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -7499,42 +7499,42 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys -[acfrzrn] +[frzr] standard_name = lwe_thickness_of_sfc_freezing_rain_amount long_name = accumulated surface freezing rain units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys -[acfrzrnb] +[frzrb] standard_name = lwe_thickness_of_sfc_freezing_rain_amount_in_bucket long_name = accumulated surface freezing rain in bucket units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys -[acgraup] +[frozr] standard_name = lwe_thickness_of_sfc_graupel_amount long_name = accumulated surface graupel units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys -[acgraupb] +[frozrb] standard_name = lwe_thickness_of_sfc_graupel_amount_in_bucket long_name = accumulated surface graupel in bucket units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys -[acsnow] +[tsnowp] standard_name = lwe_thickness_of_sfc_snow_amount long_name = accumulated surface snow units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys -[acsnowb] +[tsnowpb] standard_name = lwe_thickness_of_sfc_snow_amount_in_bucket long_name = accumulated surface snow in bucket units = m diff --git a/io/post_fv3.F90 b/io/post_fv3.F90 index 6fcd975a5..58852ce41 100644 --- a/io/post_fv3.F90 +++ b/io/post_fv3.F90 @@ -1193,7 +1193,7 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) endif !Accumulated snowfall - if(trim(fieldname)=='acsnow') then + if(trim(fieldname)=='tsnowp') then !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,snow_acm,arrayr42d,sm,fillValue) do j=jsta,jend do i=ista, iend @@ -1204,7 +1204,7 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) endif !Snowfall bucket - if(trim(fieldname)=='acsnowb') then + if(trim(fieldname)=='tsnowpb') then !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,snow_bkt,arrayr42d,sm,fillValue) do j=jsta,jend do i=ista, iend @@ -1215,7 +1215,7 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) endif !Accumulated graupel - if(trim(fieldname)=='acgraup') then + if(trim(fieldname)=='frozr') then !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,acgraup,arrayr42d,sm,fillValue) do j=jsta,jend do i=ista, iend @@ -1226,7 +1226,7 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) endif !Graupel bucket - if(trim(fieldname)=='acgraupb') then + if(trim(fieldname)=='frozrb') then !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,graup_bucket,arrayr42d,sm,fillValue) do j=jsta,jend do i=ista, iend @@ -1237,7 +1237,7 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) endif !Accumulated freezing rain - if(trim(fieldname)=='acfrzrn') then + if(trim(fieldname)=='frzr') then !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,acfrain,arrayr42d,sm,fillValue) do j=jsta,jend do i=ista, iend @@ -1248,7 +1248,7 @@ subroutine set_postvars_fv3(wrt_int_state,grid_id,mype,mpicomp) endif !Freezing rain bucket - if(trim(fieldname)=='acfrzrnb') then + if(trim(fieldname)=='frzrb') then !$omp parallel do default(none) private(i,j) shared(jsta,jend,ista,iend,spval,frzrn_bucket,arrayr42d,sm,fillValue) do j=jsta,jend do i=ista, iend From def1cb3ec269d9baaf9ea953f06770c154e97260 Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Mon, 12 Dec 2022 15:14:36 +0000 Subject: [PATCH 06/20] Rename winter wx diags --- upp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upp b/upp index 66fd8a1ad..430667cbc 160000 --- a/upp +++ b/upp @@ -1 +1 @@ -Subproject commit 66fd8a1adff4a6a1dff2eeb271b160bff8216a49 +Subproject commit 430667cbc5eb776eff8ec14d5e258df18e8112a7 From 0d8072b3f1a8540a571e40714bc676ce08ee289d Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Mon, 19 Dec 2022 13:50:57 +0000 Subject: [PATCH 07/20] removed log file --- upp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upp b/upp index 430667cbc..a7f0b0fb6 160000 --- a/upp +++ b/upp @@ -1 +1 @@ -Subproject commit 430667cbc5eb776eff8ec14d5e258df18e8112a7 +Subproject commit a7f0b0fb6e0d7b833b063fa145f59a2134f9049d From 567cdb086d6dcbabcd55a78b9c361ebc44812ae9 Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Mon, 19 Dec 2022 14:52:22 +0000 Subject: [PATCH 08/20] remove six winter wx diags from f00 xml file --- upp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upp b/upp index a7f0b0fb6..6e2a200f2 160000 --- a/upp +++ b/upp @@ -1 +1 @@ -Subproject commit a7f0b0fb6e0d7b833b063fa145f59a2134f9049d +Subproject commit 6e2a200f2f5a9feaf9a79ed0f7e264bec48cc122 From d900f62f3bf30ef950f3b94ef108dd4ce544b5f2 Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Tue, 27 Dec 2022 14:14:11 +0000 Subject: [PATCH 09/20] Merge updates --- ccpp/physics | 2 +- upp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ccpp/physics b/ccpp/physics index f72f38b13..6825a3e3b 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit f72f38b13992eb127a32bb5f18ca2a3ea7c5ebfd +Subproject commit 6825a3e3bd40864431dec97b688fa980e6cfc48d diff --git a/upp b/upp index 6e2a200f2..9baaada77 160000 --- a/upp +++ b/upp @@ -1 +1 @@ -Subproject commit 6e2a200f2f5a9feaf9a79ed0f7e264bec48cc122 +Subproject commit 9baaada77091f23005ee2574f01439bce5d8ce9d From 9605e8b74f473ea083c41a3c056e2eadc70690c6 Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Tue, 27 Dec 2022 14:24:28 +0000 Subject: [PATCH 10/20] Merge atmoscubed and framework --- atmos_cubed_sphere | 2 +- ccpp/framework | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index a839395d5..aa42f6e13 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit a839395d542ab860ae0afa7601e35b37d68d773e +Subproject commit aa42f6e135839492b0a3b80fc3f2c25d766ad437 diff --git a/ccpp/framework b/ccpp/framework index d4a000313..4daaa246d 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit d4a00031381afa7cd90589040a5c7e8f53991801 +Subproject commit 4daaa246d1a3bce8eca60d314eeef44332f47e26 From b02b2b95c37521324de12bc612c8c0eadf5d26c3 Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Thu, 5 Jan 2023 15:34:37 +0000 Subject: [PATCH 11/20] point to the updated UPP --- .gitmodules | 6 ++---- upp | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index 757205eae..464a4e6af 100644 --- a/.gitmodules +++ b/.gitmodules @@ -14,7 +14,5 @@ # branch = ufs/dev [submodule "upp"] path = upp - url = https://github.com/ericaligo-NOAA/UPP - branch = winterwx -# url = https://github.com/NOAA-EMC/UPP -# branch = develop + url = https://github.com/NOAA-EMC/UPP + branch = develop diff --git a/upp b/upp index 9baaada77..914f03a39 160000 --- a/upp +++ b/upp @@ -1 +1 @@ -Subproject commit 9baaada77091f23005ee2574f01439bce5d8ce9d +Subproject commit 914f03a392da6a25808b1aebb6ecd81be45c04ee From bfd106fb12d58436e879aed9433110ad72b95884 Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Thu, 5 Jan 2023 20:26:11 +0000 Subject: [PATCH 12/20] minor touchups --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 6825a3e3b..560f99887 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 6825a3e3bd40864431dec97b688fa980e6cfc48d +Subproject commit 560f998871340120ab302c4be534a9169597e724 From ea70d3a58959744e3fb3a37120f4590cb1f80540 Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Thu, 5 Jan 2023 21:10:46 +0000 Subject: [PATCH 13/20] Minor changes to typedefs --- ccpp/data/GFS_typedefs.F90 | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index d41180de6..d02cd5537 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -1730,11 +1730,11 @@ module GFS_typedefs real (kind=kind_phys), pointer :: toticeb(:) => null() !< accumulated ice precipitation in bucket (kg/m2) real (kind=kind_phys), pointer :: totsnwb(:) => null() !< accumulated snow precipitation in bucket (kg/m2) real (kind=kind_phys), pointer :: totgrpb(:) => null() !< accumulated graupel precipitation in bucket (kg/m2) - real (kind=kind_phys), pointer :: frzr(:) => null() !< accumulated surface freezing rain (m) - real (kind=kind_phys), pointer :: frzrb(:) => null() !< accumulated surface freezing rain in bucket (m) - real (kind=kind_phys), pointer :: frozr(:) => null() !< accumulated surface graupel (m) - real (kind=kind_phys), pointer :: frozrb(:) => null() !< accumulated surface graupel in bucket (m) - real (kind=kind_phys), pointer :: tsnowp(:) => null() !< accumulated surface snowfall (m) + real (kind=kind_phys), pointer :: frzr (:) => null() !< accumulated surface freezing rain (m) + real (kind=kind_phys), pointer :: frzrb (:) => null() !< accumulated surface freezing rain in bucket (m) + real (kind=kind_phys), pointer :: frozr (:) => null() !< accumulated surface graupel (m) + real (kind=kind_phys), pointer :: frozrb (:) => null() !< accumulated surface graupel in bucket (m) + real (kind=kind_phys), pointer :: tsnowp (:) => null() !< accumulated surface snowfall (m) real (kind=kind_phys), pointer :: tsnowpb(:) => null() !< accumulated surface snowfall in bucket (m) real (kind=kind_phys), pointer :: rhonewsn1(:) => null() !< precipitation ice density (kg/m3) @@ -6890,12 +6890,12 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%smcwlt2 (IM)) allocate (Diag%smcref2 (IM)) allocate (Diag%rhonewsn1 (IM)) - allocate (Diag%frzr (IM)) - allocate (Diag%frzrb (IM)) - allocate (Diag%frozr (IM)) - allocate (Diag%frozrb (IM)) - allocate (Diag%tsnowp (IM)) - allocate (Diag%tsnowpb (IM)) + allocate (Diag%frzr (IM)) + allocate (Diag%frzrb (IM)) + allocate (Diag%frozr (IM)) + allocate (Diag%frozrb (IM)) + allocate (Diag%tsnowp (IM)) + allocate (Diag%tsnowpb (IM)) if (.not. Model%lsm == Model%lsm_ruc) then allocate (Diag%wet1 (IM)) end if @@ -7231,8 +7231,8 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%toticeb = zero Diag%totsnwb = zero Diag%totgrpb = zero - Diag%frzrb = zero - Diag%frozrb = zero + Diag%frzrb = zero + Diag%frozrb = zero Diag%tsnowpb = zero !--- MYNN variables: @@ -7365,8 +7365,8 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%totice = zero Diag%totsnw = zero Diag%totgrp = zero - Diag%frzr = zero - Diag%frozr = zero + Diag%frzr = zero + Diag%frozr = zero Diag%tsnowp = zero endif From 1e5e8092427ff8192b69d6542fa08aaf3f8ae35b Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Thu, 5 Jan 2023 21:12:55 +0000 Subject: [PATCH 14/20] switch to new hash --- ccpp/framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/framework b/ccpp/framework index 4daaa246d..d4a000313 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit 4daaa246d1a3bce8eca60d314eeef44332f47e26 +Subproject commit d4a00031381afa7cd90589040a5c7e8f53991801 From 9423136413b000cd09a8f3a11d1c55df0ad12218 Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Thu, 5 Jan 2023 21:19:07 +0000 Subject: [PATCH 15/20] Removed commented out lines related to the old computation of the precip ice density --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 560f99887..2f3d69a12 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 560f998871340120ab302c4be534a9169597e724 +Subproject commit 2f3d69a121aca341aa6e9b8cabac8eb8892c7541 From 0171ca59476a258556f9a67c4c46dc6a9c587845 Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Fri, 13 Jan 2023 14:44:15 +0000 Subject: [PATCH 16/20] commit correct hash to winterwx branch --- atmos_cubed_sphere | 2 +- upp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index aa42f6e13..a839395d5 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit aa42f6e135839492b0a3b80fc3f2c25d766ad437 +Subproject commit a839395d542ab860ae0afa7601e35b37d68d773e diff --git a/upp b/upp index 914f03a39..e88dbea92 160000 --- a/upp +++ b/upp @@ -1 +1 @@ -Subproject commit 914f03a392da6a25808b1aebb6ecd81be45c04ee +Subproject commit e88dbea9269b36d21e60d9d1c17b71634fe3c81f From aa575b12e262a7dda8f5785475a4357bbb7cd532 Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Mon, 23 Jan 2023 20:30:52 +0000 Subject: [PATCH 17/20] update submodule ccpp/physics --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index db11313be..9691f350b 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit db11313be3f3dd7c471452a13068fd6792690912 +Subproject commit 9691f350b58245d93d5d0fbc61ea793ab47e4dad From 4f32f6c672fba593168a652cd04394a12871f154 Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Wed, 8 Feb 2023 15:25:39 +0000 Subject: [PATCH 18/20] winter weather diagnostics related changes --- ccpp/data/CCPP_typedefs.meta | 2 +- ccpp/data/GFS_typedefs.F90 | 19 ++++++++++--------- ccpp/data/GFS_typedefs.meta | 27 +++++++++++++++++---------- upp | 2 +- 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/ccpp/data/CCPP_typedefs.meta b/ccpp/data/CCPP_typedefs.meta index f235c3669..20e9f155b 100644 --- a/ccpp/data/CCPP_typedefs.meta +++ b/ccpp/data/CCPP_typedefs.meta @@ -1700,7 +1700,7 @@ type = real kind = kind_phys [fullradar_diag] - standard_name = flag_for_computing_full_radar_reflectivity + standard_name = do_full_radar_reflectivity long_name = flag for computing full radar reflectivity units = flag dimensions = () diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index d02cd5537..952f5d444 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -925,7 +925,7 @@ module GFS_typedefs integer :: lsnow_lsm !< maximum number of snow layers internal to land surface model integer :: lsnow_lsm_lbound!< lower bound for snow arrays, depending on lsnow_lsm integer :: lsnow_lsm_ubound!< upper bound for snow arrays, depending on lsnow_lsm - logical :: vrbliceden_noah !< flag for variable precip ice density for NOAH LSM + logical :: exticeden !< flag for calculating frozen precip ice density outside of the LSM real(kind=kind_phys), pointer :: zs(:) => null() !< depth of soil levels for land surface model real(kind=kind_phys), pointer :: dzs(:) => null() !< thickness of soil levels for land surface model real(kind=kind_phys), pointer :: pores(:) => null() !< max soil moisture for a given soil type for land surface model @@ -1736,7 +1736,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: frozrb (:) => null() !< accumulated surface graupel in bucket (m) real (kind=kind_phys), pointer :: tsnowp (:) => null() !< accumulated surface snowfall (m) real (kind=kind_phys), pointer :: tsnowpb(:) => null() !< accumulated surface snowfall in bucket (m) - real (kind=kind_phys), pointer :: rhonewsn1(:) => null() !< precipitation ice density (kg/m3) + real (kind=kind_phys), pointer :: rhonewsn1(:) => null() !< precipitation ice density outside RUC LSM (kg/m3) + real (kind=kind_phys), pointer :: rhosnf(:) => null() !< precipitation ice density inside RUC LSM (kg/m3) !--- MYNN variables real (kind=kind_phys), pointer :: edmf_a (:,:) => null() ! @@ -3124,7 +3125,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: lsoil = 4 !< number of soil layers integer :: lsoil_lsm = -1 !< number of soil layers internal to land surface model; -1 use lsoil integer :: lsnow_lsm = 3 !< maximum number of snow layers internal to land surface model - logical :: vrbliceden_noah = .false. !< Use variable precip ice density for NOAH LSM if true or original formulation + logical :: exticeden = .false. !< Use variable precip ice density for NOAH LSM if true or original formulation logical :: rdlai = .false. !< read LAI from input file (for RUC LSM or NOAH LSM WRFv4) logical :: ua_phys = .false. !< flag for using University of Arizona? extension to NOAH LSM WRFv4 logical :: usemonalb = .true. !< flag to read surface diffused shortwave albedo from input file for NOAH LSM WRFv4 @@ -3528,7 +3529,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- land/surface model control lsm, lsoil, lsoil_lsm, lsnow_lsm, kice, rdlai, & nmtvr, ivegsrc, use_ufo, iopt_thcnd, ua_phys, usemonalb, & - aoasis, fasdas,vrbliceden_noah, & + aoasis, fasdas,exticeden, & ! 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, & @@ -4174,7 +4175,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ivegsrc = ivegsrc Model%isot = isot Model%use_ufo = use_ufo - Model%vrbliceden_noah = vrbliceden_noah + Model%exticeden = exticeden ! GFDL surface layer options Model%lcurr_sf = lcurr_sf @@ -5065,7 +5066,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & if (Model%me == Model%master) then if (Model%lsm == 1) then print *,' NOAH Land Surface Model used' - print *,'vrbliceden_noah = ', Model%vrbliceden_noah elseif (Model%lsm == 0) then print *,' OSU no longer supported - job aborted' @@ -5924,7 +5924,6 @@ subroutine control_print(Model) print *, ' lsoil : ', Model%lsoil print *, ' rdlai : ', Model%rdlai print *, ' lsoil_lsm : ', Model%lsoil_lsm - print *, ' vrbliceden_noah : ', Model%vrbliceden_noah if (Model%lsm==Model%lsm_noahmp) then print *, ' lsnow_lsm : ', Model%lsnow_lsm print *, ' lsnow_lsm_lbound : ', Model%lsnow_lsm_lbound @@ -6890,6 +6889,7 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%smcwlt2 (IM)) allocate (Diag%smcref2 (IM)) allocate (Diag%rhonewsn1 (IM)) + allocate (Diag%rhosnf (IM)) allocate (Diag%frzr (IM)) allocate (Diag%frzrb (IM)) allocate (Diag%frozr (IM)) @@ -7354,8 +7354,9 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%t02min = 999. Diag%rh02max = -999. Diag%rh02min = 999. - Diag%pratemax = 0. - Diag%rhonewsn1 = 200. + Diag%pratemax = 0. + Diag%rhonewsn1 = 200. + Diag%rhosnf = -1.e3 set_totprcp = .false. if (present(linit) ) set_totprcp = linit if (present(iauwindow_center) ) set_totprcp = iauwindow_center diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index d9b9ca82a..67be9bab1 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -4170,9 +4170,9 @@ units = count dimensions = () type = integer -[vrbliceden_noah] - standard_name = flag_for_vrbl_prcp_ice_den - long_name = flag for variable precip ice density +[exticeden] + standard_name = do_external_surface_frozen_precipitation_density + long_name = flag for calculating frozen precip ice density outside of the LSM units = flag dimensions = () type = logical @@ -7512,54 +7512,61 @@ type = real kind = kind_phys [frzr] - standard_name = lwe_thickness_of_sfc_freezing_rain_amount + standard_name = cumulative_lwe_thickness_of_surface_freezing_rain_amount long_name = accumulated surface freezing rain units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [frzrb] - standard_name = lwe_thickness_of_sfc_freezing_rain_amount_in_bucket + standard_name = cumulative_lwe_thickness_of_surface_freezing_rain_amount_in_bucket long_name = accumulated surface freezing rain in bucket units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [frozr] - standard_name = lwe_thickness_of_sfc_graupel_amount + standard_name = cumulative_lwe_thickness_of_surface_graupel_amount long_name = accumulated surface graupel units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [frozrb] - standard_name = lwe_thickness_of_sfc_graupel_amount_in_bucket + standard_name = cumulative_lwe_thickness_of_surface_graupel_amount_in_bucket long_name = accumulated surface graupel in bucket units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [tsnowp] - standard_name = lwe_thickness_of_sfc_snow_amount + standard_name = cumulative_lwe_thickness_of_surface_snow_amount long_name = accumulated surface snow units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [tsnowpb] - standard_name = lwe_thickness_of_sfc_snow_amount_in_bucket + standard_name = cumulative_lwe_thickness_of_surface_snow_amount_in_bucket long_name = accumulated surface snow in bucket units = m dimensions = (horizontal_loop_extent) type = real kind = kind_phys [rhonewsn1] - standard_name = lwe_density_of_precip_ice + standard_name = surface_frozen_precipitation_density long_name = density of precipitation ice units = kg m-3 dimensions = (horizontal_loop_extent) type = real kind = kind_phys +[rhosnf] + standard_name = lsm_internal_surface_frozen_precipitation_density + long_name = density of frozen precipitation + units = kg m-3 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys [train] standard_name = accumulated_change_of_air_temperature_due_to_FA_scheme long_name = accumulated change of air temperature due to FA MP scheme diff --git a/upp b/upp index e88dbea92..2b2c84a60 160000 --- a/upp +++ b/upp @@ -1 +1 @@ -Subproject commit e88dbea9269b36d21e60d9d1c17b71634fe3c81f +Subproject commit 2b2c84a609f575fc293a4f90238391681bc383f0 From b7b1dbffef3b23a18fc6cac64de42a8edcbdbc6c Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Thu, 9 Feb 2023 20:35:04 +0000 Subject: [PATCH 19/20] include Grant's winter wx mods --- ccpp/data/GFS_typedefs.F90 | 18 +++++++++++++----- ccpp/data/GFS_typedefs.meta | 8 -------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 952f5d444..c8b47bda5 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -370,7 +370,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: clw_surf_ice(:) => null() !< RUC LSM: moist cloud water mixing ratio at surface over ice real (kind=kind_phys), pointer :: qwv_surf_land(:) => null() !< RUC LSM: water vapor mixing ratio at surface over land real (kind=kind_phys), pointer :: qwv_surf_ice(:) => null() !< RUC LSM: water vapor mixing ratio at surface over ice - real (kind=kind_phys), pointer :: rhofr(:) => null() !< RUC LSM: density of frozen precipitation real (kind=kind_phys), pointer :: tsnow_land(:) => null() !< RUC LSM: snow temperature at the bottom of the first snow layer over land real (kind=kind_phys), pointer :: tsnow_ice(:) => null() !< RUC LSM: snow temperature at the bottom of the first snow layer over ice real (kind=kind_phys), pointer :: snowfallac_land(:) => null() !< ruc lsm diagnostics over land @@ -2429,7 +2428,6 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%clw_surf_ice (IM)) allocate (Sfcprop%qwv_surf_land (IM)) allocate (Sfcprop%qwv_surf_ice (IM)) - allocate (Sfcprop%rhofr (IM)) allocate (Sfcprop%tsnow_land (IM)) allocate (Sfcprop%tsnow_ice (IM)) allocate (Sfcprop%snowfallac_land (IM)) @@ -2445,7 +2443,6 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%qwv_surf_land = clear_val Sfcprop%qwv_surf_ice = clear_val Sfcprop%flag_frsoil = clear_val - Sfcprop%rhofr = clear_val Sfcprop%tsnow_land = clear_val Sfcprop%tsnow_ice = clear_val Sfcprop%snowfallac_land = clear_val @@ -4176,7 +4173,14 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%isot = isot Model%use_ufo = use_ufo Model%exticeden = exticeden - + if (Model%exticeden .and. & + (Model%imp_physics /= Model%imp_physics_gfdl .and. Model%imp_physics /= Model%imp_physics_thompson .and. & + Model%imp_physics /= Model%imp_physics_nssl )) then + !see GFS_MP_generic_post.F90; exticeden is only compatible with GFDL, + !Thompson, or NSSL MP + print *,' Using exticeden = T is only valid when using GFDL, Thompson, or NSSL microphysics.' + stop + end if ! GFDL surface layer options Model%lcurr_sf = lcurr_sf Model%pert_cd = pert_cd @@ -4197,7 +4201,11 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%iopt_inf = iopt_inf Model%iopt_rad = iopt_rad Model%iopt_alb = iopt_alb - Model%iopt_snf = iopt_snf + if (Model%lsm==Model%lsm_noahmp .and. Model%exticeden .and. iopt_snf == 4) then + Model%iopt_snf = 5 + else + Model%iopt_snf = iopt_snf + end if Model%iopt_tbot = iopt_tbot Model%iopt_stc = iopt_stc Model%iopt_trs = iopt_trs diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index 67be9bab1..75eb19447 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -1627,14 +1627,6 @@ type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) -[rhofr] - standard_name = frozen_precipitation_density - long_name = density of frozen precipitation - units = kg m-3 - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) [tsnow_land] standard_name = temperature_in_surface_snow_at_surface_adjacent_layer_over_land long_name = snow temperature at the bottom of the first snow layer over land From 34096559661945391ed0dce2e56f87cd2679ef94 Mon Sep 17 00:00:00 2001 From: Eric Aligo Date: Fri, 17 Feb 2023 22:10:50 +0000 Subject: [PATCH 20/20] Revert .gitmodules and update pointer to ccpp/physics --- .gitmodules | 6 ++---- ccpp/physics | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index 464a4e6af..22c723ac1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,10 +8,8 @@ branch = main [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/ericaligo-NOAA/ccpp-physics - branch = winterwx -# url = https://github.com/ufs-community/ccpp-physics -# branch = ufs/dev + url = https://github.com/ufs-community/ccpp-physics + branch = ufs/dev [submodule "upp"] path = upp url = https://github.com/NOAA-EMC/UPP diff --git a/ccpp/physics b/ccpp/physics index 48d9d238e..336285206 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 48d9d238e2d14242d97f890ab104570eb4f697c0 +Subproject commit 336285206d19f06bde4b37a741ac9bc0e15f05e1