From 044c30f4fbc8be7788061b564823955b4ce9abc6 Mon Sep 17 00:00:00 2001 From: Ruiyu Sun Date: Fri, 5 Nov 2021 13:43:44 +0000 Subject: [PATCH 01/10] add semi-Lagrangian sedimentation of graupel into Thompson MP --- physics/module_mp_thompson.F90 | 94 +++++++++++++++++++++++----------- 1 file changed, 65 insertions(+), 29 deletions(-) diff --git a/physics/module_mp_thompson.F90 b/physics/module_mp_thompson.F90 index 2068084c0..d5cef1dec 100644 --- a/physics/module_mp_thompson.F90 +++ b/physics/module_mp_thompson.F90 @@ -1908,12 +1908,12 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & DOUBLE PRECISION, PARAMETER:: zeroD0 = 0.0d0 REAL, PARAMETER :: decfl = 8.0 - REAL :: dtcfl,rainsfc + REAL :: dtcfl,rainsfc,graulsfc INTEGER :: niter REAL, DIMENSION(kts:kte):: temp, pres, qv REAL, DIMENSION(kts:kte):: rc, ri, rr, rs, rg, ni, nr, nc, nwfa, nifa - REAL, DIMENSION(kts:kte):: rr_tmp,nr_tmp + REAL, DIMENSION(kts:kte):: rr_tmp, nr_tmp, rg_tmp REAL, DIMENSION(kts:kte):: rho, rhof, rhof2 REAL, DIMENSION(kts:kte):: qvs, qvsi, delQvs REAL, DIMENSION(kts:kte):: satw, sati, ssatw, ssati @@ -1927,7 +1927,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & REAL, DIMENSION(kts:kte):: sed_r, sed_s, sed_g, sed_i, sed_n,sed_c - REAL:: rgvm, delta_tp, orho, lfus2 + REAL:: rgvm, delta_tp, orho, lfus2, orhodt REAL, DIMENSION(5):: onstep DOUBLE PRECISION:: N0_exp, N0_min, lam_exp, lamc, lamr, lamg DOUBLE PRECISION:: lami, ilami, ilamc @@ -3937,11 +3937,12 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & do n = 1, niter rr_tmp(:) = rr(:) nr_tmp(:) = nr(:) - call nislfv_rain_ppm(kte,dzq,vtrk,rr,rainsfc,dtcfl,R1) - call nislfv_rain_ppm(kte,dzq,vtnrk,nr,vtr,dtcfl,R2) + call nislfv_precip_ppm(kte,dzq,vtrk,rr,rainsfc,dtcfl,R1) + call nislfv_precip_ppm(kte,dzq,vtnrk,nr,vtr,dtcfl,R2) do k = kts, kte - qrten(k) = qrten(k) + (rr(k) - rr_tmp(k))/rho(k)/dt - nrten(k) = nrten(k) + (nr(k) - nr_tmp(k))/rho(k)/dt + orhodt = 1./(rho(k)*dt) + qrten(k) = qrten(k) + (rr(k) - rr_tmp(k)) * orhodt + nrten(k) = nrten(k) + (nr(k) - nr_tmp(k)) * orhodt enddo pptrain = pptrain + rainsfc @@ -4054,28 +4055,63 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & if (ANY(L_qg .eqv. .true.)) then nstep = NINT(1./onstep(4)) - do n = 1, nstep - do k = kte, kts, -1 - sed_g(k) = vtgk(k)*rg(k) - enddo - k = kte - odzq = 1./dzq(k) - orho = 1./rho(k) - qgten(k) = qgten(k) - sed_g(k)*odzq*onstep(4)*orho - rg(k) = MAX(R1, rg(k) - sed_g(k)*odzq*DT*onstep(4)) - do k = ksed1(4), kts, -1 - odzq = 1./dzq(k) - orho = 1./rho(k) - qgten(k) = qgten(k) + (sed_g(k+1)-sed_g(k)) & - *odzq*onstep(4)*orho - rg(k) = MAX(R1, rg(k) + (sed_g(k+1)-sed_g(k)) & + if(.not. sedi_semi) then + do n = 1, nstep + do k = kte, kts, -1 + sed_g(k) = vtgk(k)*rg(k) + enddo + k = kte + odzq = 1./dzq(k) + orho = 1./rho(k) + qgten(k) = qgten(k) - sed_g(k)*odzq*onstep(4)*orho + rg(k) = MAX(R1, rg(k) - sed_g(k)*odzq*DT*onstep(4)) + do k = ksed1(4), kts, -1 + odzq = 1./dzq(k) + orho = 1./rho(k) + qgten(k) = qgten(k) + (sed_g(k+1)-sed_g(k)) & + *odzq*onstep(4)*orho + rg(k) = MAX(R1, rg(k) + (sed_g(k+1)-sed_g(k)) & *odzq*DT*onstep(4)) - enddo + enddo - if (rg(kts).gt.R1*10.) & - pptgraul = pptgraul + sed_g(kts)*DT*onstep(4) - enddo - endif + if (rg(kts).gt.R1*10.) & + pptgraul = pptgraul + sed_g(kts)*DT*onstep(4) + enddo + else ! if(.not. sedi_semi) then + niter = 1 + dtcfl = dt + if(SEDI_SEMI_DECFL) then + niter = int(nstep/decfl) + 1 + dtcfl = dt/niter + endif + + do n = 1, niter + rg_tmp(:) = rg(:) + call nislfv_precip_ppm(kte,dzq,vtgk,rg,graulsfc,dtcfl,R1) + do k = kts, kte + orhodt = 1./(rho(k)*dt) + qgten(k) = qgten(k) + (rg(k) - rg_tmp(k))*orhodt + enddo + pptgraul = pptgraul + graulsfc + if(sedi_semi_update) then + do k = kte+1, kts, -1 + vtgk(k) = 0. + enddo + do k = kte, kts, -1 + vtg = 0. + if (rg(k).gt. R1) then + vtg = rhof(k)*av_g*cgg(6)*ogg3 * ilamg(k)**bv_g + if (temp(k).gt. T_0) then + vtgk(k) = MAX(vtg, vtrk(k)) + else + vtgk(k) = vtg + endif + endif + enddo + endif + enddo + endif ! if(.not. sedi_semi) then + endif !+---+-----------------------------------------------------------------+ !> - Instantly melt any cloud ice into cloud water if above 0C and @@ -6102,7 +6138,7 @@ subroutine calc_refl10cm (qv1d, qc1d, qr1d, nr1d, qs1d, qg1d, & end subroutine calc_refl10cm ! !------------------------------------------------------------------- - SUBROUTINE nislfv_rain_ppm(km,dzl,wwl,rql,precip,dt,R1) + SUBROUTINE nislfv_precip_ppm(km,dzl,wwl,rql,precip,dt,R1) !------------------------------------------------------------------- ! ! for non-iteration semi-Lagrangain forward advection for cloud @@ -6320,7 +6356,7 @@ SUBROUTINE nislfv_rain_ppm(km,dzl,wwl,rql,precip,dt,R1) ! ! ---------------------------------- ! - END SUBROUTINE nislfv_rain_ppm + END SUBROUTINE nislfv_precip_ppm !+---+-----------------------------------------------------------------+ !+---+-----------------------------------------------------------------+ !+---+-----------------------------------------------------------------+ From ef3bac3bb79270f8de1167ee7d20a4f6b50f6c78 Mon Sep 17 00:00:00 2001 From: Ruiyu Sun Date: Sat, 6 Nov 2021 17:34:19 +0000 Subject: [PATCH 02/10] to address reviews --- physics/module_mp_thompson.F90 | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/physics/module_mp_thompson.F90 b/physics/module_mp_thompson.F90 index d5cef1dec..5f62ab645 100644 --- a/physics/module_mp_thompson.F90 +++ b/physics/module_mp_thompson.F90 @@ -3937,8 +3937,8 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & do n = 1, niter rr_tmp(:) = rr(:) nr_tmp(:) = nr(:) - call nislfv_precip_ppm(kte,dzq,vtrk,rr,rainsfc,dtcfl,R1) - call nislfv_precip_ppm(kte,dzq,vtnrk,nr,vtr,dtcfl,R2) + call semi_lagrange_sedim(kte,dzq,vtrk,rr,rainsfc,dtcfl,R1) + call semi_lagrange_sedim(kte,dzq,vtnrk,nr,vtr,dtcfl,R2) do k = kts, kte orhodt = 1./(rho(k)*dt) qrten(k) = qrten(k) + (rr(k) - rr_tmp(k)) * orhodt @@ -4087,7 +4087,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & do n = 1, niter rg_tmp(:) = rg(:) - call nislfv_precip_ppm(kte,dzq,vtgk,rg,graulsfc,dtcfl,R1) + call semi_lagrange_sedim(kte,dzq,vtgk,rg,graulsfc,dtcfl,R1) do k = kts, kte orhodt = 1./(rho(k)*dt) qgten(k) = qgten(k) + (rg(k) - rg_tmp(k))*orhodt @@ -6138,13 +6138,13 @@ subroutine calc_refl10cm (qv1d, qc1d, qr1d, nr1d, qs1d, qg1d, & end subroutine calc_refl10cm ! !------------------------------------------------------------------- - SUBROUTINE nislfv_precip_ppm(km,dzl,wwl,rql,precip,dt,R1) + SUBROUTINE semi_lagrange_sedim(km,dzl,wwl,rql,precip,dt,R1) !------------------------------------------------------------------- ! -! for non-iteration semi-Lagrangain forward advection for cloud +! This routine is a semi-Lagrangain forward advection for hydrometeors ! with mass conservation and positive definite advection -! 2nd order interpolation with monotonic piecewise parabolic method -! this routine is under assumption of decfl < 1 for semi_Lagrangian +! 2nd order interpolation with monotonic piecewise parabolic method is used. +! This routine is under assumption of decfl < 1 for semi_Lagrangian ! ! dzl depth of model layer in meter ! wwl terminal velocity at model layer m/s @@ -6154,6 +6154,9 @@ SUBROUTINE nislfv_precip_ppm(km,dzl,wwl,rql,precip,dt,R1) ! ! author: hann-ming henry juang ! implemented by song-you hong +! reference: Juang, H.-M., and S.-Y. Hong, 2010: Forward semi-Lagrangian advection +! with mass conservation and positive definiteness for falling +! hydrometeors. *Mon. Wea. Rev.*, *138*, 1778-1791 ! implicit none @@ -6356,7 +6359,7 @@ SUBROUTINE nislfv_precip_ppm(km,dzl,wwl,rql,precip,dt,R1) ! ! ---------------------------------- ! - END SUBROUTINE nislfv_precip_ppm + END SUBROUTINE semi_lagrange_sedim !+---+-----------------------------------------------------------------+ !+---+-----------------------------------------------------------------+ !+---+-----------------------------------------------------------------+ From 426b3fbe36b67bc80557f29ab3d5360fcde8a453 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Wed, 10 Nov 2021 06:38:23 -0700 Subject: [PATCH 03/10] Replace units 'various' with 'mixed', update several invalid units of non-physical quantities, fix units of humidity diagnostic variables --- physics/GFS_DCNV_generic.meta | 2 +- physics/GFS_GWD_generic.meta | 6 +++--- physics/GFS_MP_generic.meta | 2 +- physics/GFS_PBL_generic.meta | 2 +- physics/GFS_SCNV_generic.meta | 2 +- physics/GFS_phys_time_vary.fv3.meta | 10 +++++----- physics/GFS_phys_time_vary.scm.meta | 10 +++++----- physics/GFS_rrtmg_post.meta | 2 +- physics/GFS_rrtmgp_lw_post.meta | 2 +- physics/GFS_rrtmgp_pre.meta | 2 +- physics/GFS_rrtmgp_sw_post.meta | 2 +- physics/GFS_rrtmgp_thompsonmp_pre.meta | 2 +- physics/GFS_suite_interstitial.meta | 4 ++-- physics/cires_ugwp.meta | 2 +- physics/cu_gf_driver.meta | 2 +- physics/drag_suite.meta | 2 +- physics/gfdl_fv_sat_adj.meta | 2 +- physics/gwdc.meta | 2 +- physics/h2o_def.meta | 2 +- physics/h2ophys.meta | 4 ++-- physics/maximum_hourly_diagnostics.meta | 4 ++-- physics/module_MYJPBL_wrapper.meta | 2 +- physics/module_MYNNPBL_wrapper.meta | 2 +- physics/moninedmf.meta | 2 +- physics/moninshoc.meta | 2 +- physics/ozne_def.meta | 2 +- physics/ozphys.meta | 6 +++--- physics/ozphys_2015.meta | 6 +++--- physics/phys_tend.meta | 2 +- physics/rayleigh_damp.meta | 2 +- physics/satmedmfvdif.meta | 2 +- physics/satmedmfvdifq.meta | 2 +- physics/shinhongvdif.meta | 2 +- physics/ugwpv1_gsldrag.meta | 4 ++-- physics/unified_ugwp.meta | 2 +- physics/ysuvdif.meta | 2 +- 36 files changed, 54 insertions(+), 54 deletions(-) diff --git a/physics/GFS_DCNV_generic.meta b/physics/GFS_DCNV_generic.meta index 335c5593b..c719ae96c 100644 --- a/physics/GFS_DCNV_generic.meta +++ b/physics/GFS_DCNV_generic.meta @@ -422,7 +422,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/GFS_GWD_generic.meta b/physics/GFS_GWD_generic.meta index bd2bfbe87..f761ac5bc 100644 --- a/physics/GFS_GWD_generic.meta +++ b/physics/GFS_GWD_generic.meta @@ -31,7 +31,7 @@ [mntvar] standard_name = statistical_measures_of_subgrid_orography_collection_array long_name = array of statistical measures of subgrid height_above_mean_sea_level - units = various + units = mixed dimensions = (horizontal_loop_extent,number_of_statistical_measures_of_subgrid_orography) type = real kind = kind_phys @@ -165,7 +165,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys @@ -327,7 +327,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/GFS_MP_generic.meta b/physics/GFS_MP_generic.meta index ccb6ba6d3..d14c11baf 100644 --- a/physics/GFS_MP_generic.meta +++ b/physics/GFS_MP_generic.meta @@ -730,7 +730,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/GFS_PBL_generic.meta b/physics/GFS_PBL_generic.meta index f267bf609..3dcf81043 100644 --- a/physics/GFS_PBL_generic.meta +++ b/physics/GFS_PBL_generic.meta @@ -721,7 +721,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/GFS_SCNV_generic.meta b/physics/GFS_SCNV_generic.meta index 8464ae9b8..90dc72d42 100644 --- a/physics/GFS_SCNV_generic.meta +++ b/physics/GFS_SCNV_generic.meta @@ -383,7 +383,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/GFS_phys_time_vary.fv3.meta b/physics/GFS_phys_time_vary.fv3.meta index 6c7f086dd..4218fc85c 100644 --- a/physics/GFS_phys_time_vary.fv3.meta +++ b/physics/GFS_phys_time_vary.fv3.meta @@ -127,7 +127,7 @@ [ozpl] standard_name = ozone_forcing long_name = ozone forcing data - units = various + units = mixed dimensions = (horizontal_dimension,vertical_dimension_of_ozone_forcing_data,number_of_coefficients_in_ozone_forcing_data) type = real kind = kind_phys @@ -157,7 +157,7 @@ [h2opl] standard_name = stratospheric_water_vapor_forcing long_name = water forcing data - units = various + units = mixed dimensions = (horizontal_dimension,vertical_dimension_of_h2o_forcing_data,number_of_coefficients_in_h2o_forcing_data) type = real kind = kind_phys @@ -1116,7 +1116,7 @@ [ozpl] standard_name = ozone_forcing long_name = ozone forcing data - units = various + units = mixed dimensions = (horizontal_dimension,vertical_dimension_of_ozone_forcing_data,number_of_coefficients_in_ozone_forcing_data) type = real kind = kind_phys @@ -1146,7 +1146,7 @@ [h2opl] standard_name = stratospheric_water_vapor_forcing long_name = water forcing data - units = various + units = mixed dimensions = (horizontal_dimension,vertical_dimension_of_h2o_forcing_data,number_of_coefficients_in_h2o_forcing_data) type = real kind = kind_phys @@ -1826,7 +1826,7 @@ [tau_amf] standard_name = absolute_momentum_flux_due_to_nonorographic_gravity_wave_drag long_name = ngw_absolute_momentum_flux - units = various + units = mixed dimensions = (horizontal_dimension) type = real kind = kind_phys diff --git a/physics/GFS_phys_time_vary.scm.meta b/physics/GFS_phys_time_vary.scm.meta index a7de26fe1..566636326 100644 --- a/physics/GFS_phys_time_vary.scm.meta +++ b/physics/GFS_phys_time_vary.scm.meta @@ -127,7 +127,7 @@ [ozpl] standard_name = ozone_forcing long_name = ozone forcing data - units = various + units = mixed dimensions = (horizontal_dimension,vertical_dimension_of_ozone_forcing_data,number_of_coefficients_in_ozone_forcing_data) type = real kind = kind_phys @@ -157,7 +157,7 @@ [h2opl] standard_name = stratospheric_water_vapor_forcing long_name = water forcing data - units = various + units = mixed dimensions = (horizontal_dimension,vertical_dimension_of_h2o_forcing_data,number_of_coefficients_in_h2o_forcing_data) type = real kind = kind_phys @@ -1109,7 +1109,7 @@ [ozpl] standard_name = ozone_forcing long_name = ozone forcing data - units = various + units = mixed dimensions = (horizontal_dimension,vertical_dimension_of_ozone_forcing_data,number_of_coefficients_in_ozone_forcing_data) type = real kind = kind_phys @@ -1139,7 +1139,7 @@ [h2opl] standard_name = stratospheric_water_vapor_forcing long_name = water forcing data - units = various + units = mixed dimensions = (horizontal_dimension,vertical_dimension_of_h2o_forcing_data,number_of_coefficients_in_h2o_forcing_data) type = real kind = kind_phys @@ -1333,7 +1333,7 @@ [tau_amf] standard_name = absolute_momentum_flux_due_to_nonorographic_gravity_wave_drag long_name = ngw_absolute_momentum_flux - units = various + units = mixed dimensions = (horizontal_dimension) type = real kind = kind_phys diff --git a/physics/GFS_rrtmg_post.meta b/physics/GFS_rrtmg_post.meta index 0de8b7907..8677d9900 100644 --- a/physics/GFS_rrtmg_post.meta +++ b/physics/GFS_rrtmg_post.meta @@ -253,7 +253,7 @@ [fluxr] standard_name = cumulative_radiation_diagnostic long_name = time-accumulated 2D radiation-related diagnostic fields - units = various + units = mixed dimensions = (horizontal_loop_extent,number_of_diagnostics_variables_for_radiation) type = real kind = kind_phys diff --git a/physics/GFS_rrtmgp_lw_post.meta b/physics/GFS_rrtmgp_lw_post.meta index ebcf8350c..b941e23d0 100644 --- a/physics/GFS_rrtmgp_lw_post.meta +++ b/physics/GFS_rrtmgp_lw_post.meta @@ -163,7 +163,7 @@ [fluxr] standard_name = cumulative_radiation_diagnostic long_name = time-accumulated 2D radiation-related diagnostic fields - units = various + units = mixed dimensions = (horizontal_loop_extent,number_of_diagnostics_variables_for_radiation) type = real kind = kind_phys diff --git a/physics/GFS_rrtmgp_pre.meta b/physics/GFS_rrtmgp_pre.meta index bd578e2ad..2d0a13680 100644 --- a/physics/GFS_rrtmgp_pre.meta +++ b/physics/GFS_rrtmgp_pre.meta @@ -328,7 +328,7 @@ [q_lay] standard_name = water_vapor_mixing_ratio long_name = water vaport mixing ratio - units = kg/kg + units = kg kg-1 dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys diff --git a/physics/GFS_rrtmgp_sw_post.meta b/physics/GFS_rrtmgp_sw_post.meta index d3d026989..ad3ca1869 100644 --- a/physics/GFS_rrtmgp_sw_post.meta +++ b/physics/GFS_rrtmgp_sw_post.meta @@ -218,7 +218,7 @@ [fluxr] standard_name = cumulative_radiation_diagnostic long_name = time-accumulated 2D radiation-related diagnostic fields - units = various + units = mixed dimensions = (horizontal_loop_extent,number_of_diagnostics_variables_for_radiation) type = real kind = kind_phys diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.meta b/physics/GFS_rrtmgp_thompsonmp_pre.meta index f8fdc0e4f..82d9a1b95 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.meta +++ b/physics/GFS_rrtmgp_thompsonmp_pre.meta @@ -194,7 +194,7 @@ [q_lay] standard_name = water_vapor_mixing_ratio long_name = water vaport mixing ratio - units = kg/kg + units = kg kg-1 dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys diff --git a/physics/GFS_suite_interstitial.meta b/physics/GFS_suite_interstitial.meta index 7afae62d2..f596b86cd 100644 --- a/physics/GFS_suite_interstitial.meta +++ b/physics/GFS_suite_interstitial.meta @@ -595,7 +595,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys @@ -1768,7 +1768,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/cires_ugwp.meta b/physics/cires_ugwp.meta index fe0e82390..0d4cbcfd8 100644 --- a/physics/cires_ugwp.meta +++ b/physics/cires_ugwp.meta @@ -780,7 +780,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/cu_gf_driver.meta b/physics/cu_gf_driver.meta index 4ce14272c..a362de258 100644 --- a/physics/cu_gf_driver.meta +++ b/physics/cu_gf_driver.meta @@ -389,7 +389,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/drag_suite.meta b/physics/drag_suite.meta index c168167a3..66a85edfd 100644 --- a/physics/drag_suite.meta +++ b/physics/drag_suite.meta @@ -576,7 +576,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/gfdl_fv_sat_adj.meta b/physics/gfdl_fv_sat_adj.meta index fc22ecd9e..88164f4fc 100644 --- a/physics/gfdl_fv_sat_adj.meta +++ b/physics/gfdl_fv_sat_adj.meta @@ -341,7 +341,7 @@ [pkz] standard_name = finite_volume_mean_edge_pressure_raised_to_the_power_of_kappa long_name = finite-volume mean edge pressure raised to the power of kappa - units = Pa**kappa + units = 1 dimensions = (starting_x_direction_index:ending_x_direction_index,starting_y_direction_index:ending_y_direction_index,1:vertical_dimension_for_fast_physics) type = real kind = kind_dyn diff --git a/physics/gwdc.meta b/physics/gwdc.meta index 3d4d7b385..2e8076bca 100644 --- a/physics/gwdc.meta +++ b/physics/gwdc.meta @@ -529,7 +529,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/h2o_def.meta b/physics/h2o_def.meta index 524828ba4..3c223f1cb 100644 --- a/physics/h2o_def.meta +++ b/physics/h2o_def.meta @@ -22,7 +22,7 @@ [h2o_pres] standard_name = natural_log_of_h2o_forcing_data_pressure_levels long_name = natural log of h2o forcing data pressure levels - units = log(Pa) + units = 1 dimensions = (vertical_dimension_of_h2o_forcing_data) type = real kind = kind_phys diff --git a/physics/h2ophys.meta b/physics/h2ophys.meta index 702da0193..759666baf 100644 --- a/physics/h2ophys.meta +++ b/physics/h2ophys.meta @@ -74,7 +74,7 @@ [ph2o] standard_name = natural_log_of_h2o_forcing_data_pressure_levels long_name = natural log of h2o forcing data pressure levels - units = log(Pa) + units = 1 dimensions = (vertical_dimension_of_h2o_forcing_data) type = real kind = kind_phys @@ -90,7 +90,7 @@ [h2opltc] standard_name = stratospheric_water_vapor_forcing long_name = water forcing data - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_dimension_of_h2o_forcing_data,number_of_coefficients_in_h2o_forcing_data) type = real kind = kind_phys diff --git a/physics/maximum_hourly_diagnostics.meta b/physics/maximum_hourly_diagnostics.meta index 6ce746daa..1f7df8215 100644 --- a/physics/maximum_hourly_diagnostics.meta +++ b/physics/maximum_hourly_diagnostics.meta @@ -194,7 +194,7 @@ [rh02max] standard_name = maximum_relative_humidity_at_2m_over_maximum_hourly_time_interval long_name = maximum relative humidity at 2m over maximum hourly time interval - units = % + units = 1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys @@ -202,7 +202,7 @@ [rh02min] standard_name = minimum_relative_humidity_at_2m_over_maximum_hourly_time_interval long_name = minumum relative humidity at 2m over maximum hourly time interval - units = % + units = 1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys diff --git a/physics/module_MYJPBL_wrapper.meta b/physics/module_MYJPBL_wrapper.meta index cc3673958..43e63b4ab 100644 --- a/physics/module_MYJPBL_wrapper.meta +++ b/physics/module_MYJPBL_wrapper.meta @@ -589,7 +589,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/module_MYNNPBL_wrapper.meta b/physics/module_MYNNPBL_wrapper.meta index aeecae190..e7c107b52 100644 --- a/physics/module_MYNNPBL_wrapper.meta +++ b/physics/module_MYNNPBL_wrapper.meta @@ -1004,7 +1004,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/moninedmf.meta b/physics/moninedmf.meta index f07e1916f..1bb6847eb 100644 --- a/physics/moninedmf.meta +++ b/physics/moninedmf.meta @@ -526,7 +526,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/moninshoc.meta b/physics/moninshoc.meta index 4acfe1001..ab4103891 100644 --- a/physics/moninshoc.meta +++ b/physics/moninshoc.meta @@ -452,7 +452,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/ozne_def.meta b/physics/ozne_def.meta index 8776b9f80..ac747745c 100644 --- a/physics/ozne_def.meta +++ b/physics/ozne_def.meta @@ -22,7 +22,7 @@ [oz_pres] standard_name = natural_log_of_ozone_forcing_data_pressure_levels long_name = natural log of ozone forcing data pressure levels - units = log(Pa) + units = 1 dimensions = (vertical_dimension_of_ozone_forcing_data) type = real kind = kind_phys diff --git a/physics/ozphys.meta b/physics/ozphys.meta index aa50a2b81..5d6a9fff7 100644 --- a/physics/ozphys.meta +++ b/physics/ozphys.meta @@ -82,7 +82,7 @@ [po3] standard_name = natural_log_of_ozone_forcing_data_pressure_levels long_name = natural log of ozone forcing data pressure levels - units = log(Pa) + units = 1 dimensions = (vertical_dimension_of_ozone_forcing_data) type = real kind = kind_phys @@ -98,7 +98,7 @@ [prdout] standard_name = ozone_forcing long_name = ozone forcing coefficients - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_dimension_of_ozone_forcing_data,number_of_coefficients_in_ozone_forcing_data) type = real kind = kind_phys @@ -128,7 +128,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/ozphys_2015.meta b/physics/ozphys_2015.meta index b122fc4d9..070e57e54 100644 --- a/physics/ozphys_2015.meta +++ b/physics/ozphys_2015.meta @@ -82,7 +82,7 @@ [po3] standard_name = natural_log_of_ozone_forcing_data_pressure_levels long_name = natural log of ozone forcing data pressure levels - units = log(Pa) + units = 1 dimensions = (vertical_dimension_of_ozone_forcing_data) type = real kind = kind_phys @@ -98,7 +98,7 @@ [prdout] standard_name = ozone_forcing long_name = ozone forcing data - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_dimension_of_ozone_forcing_data,number_of_coefficients_in_ozone_forcing_data) type = real kind = kind_phys @@ -128,7 +128,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/phys_tend.meta b/physics/phys_tend.meta index 9660d5c90..ffb9c0b12 100644 --- a/physics/phys_tend.meta +++ b/physics/phys_tend.meta @@ -17,7 +17,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/rayleigh_damp.meta b/physics/rayleigh_damp.meta index 4a08a1d64..568cb9486 100644 --- a/physics/rayleigh_damp.meta +++ b/physics/rayleigh_damp.meta @@ -133,7 +133,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/satmedmfvdif.meta b/physics/satmedmfvdif.meta index be9aa23fe..9eff692d8 100644 --- a/physics/satmedmfvdif.meta +++ b/physics/satmedmfvdif.meta @@ -499,7 +499,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/satmedmfvdifq.meta b/physics/satmedmfvdifq.meta index 153a81bd4..d6fb95715 100644 --- a/physics/satmedmfvdifq.meta +++ b/physics/satmedmfvdifq.meta @@ -583,7 +583,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/shinhongvdif.meta b/physics/shinhongvdif.meta index 7e160c8a2..8d0dac7db 100644 --- a/physics/shinhongvdif.meta +++ b/physics/shinhongvdif.meta @@ -439,7 +439,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/ugwpv1_gsldrag.meta b/physics/ugwpv1_gsldrag.meta index 64d6b0d64..41c93eda3 100644 --- a/physics/ugwpv1_gsldrag.meta +++ b/physics/ugwpv1_gsldrag.meta @@ -716,7 +716,7 @@ [tau_amf] standard_name = absolute_momentum_flux_due_to_nonorographic_gravity_wave_drag long_name = ngw_absolute_momentum_flux - units = various + units = mixed dimensions = (horizontal_loop_extent) type = real kind = kind_phys @@ -1021,7 +1021,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/unified_ugwp.meta b/physics/unified_ugwp.meta index 547256681..d590f0179 100644 --- a/physics/unified_ugwp.meta +++ b/physics/unified_ugwp.meta @@ -1068,7 +1068,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys diff --git a/physics/ysuvdif.meta b/physics/ysuvdif.meta index 6585fae13..f28ef3eff 100644 --- a/physics/ysuvdif.meta +++ b/physics/ysuvdif.meta @@ -462,7 +462,7 @@ [dtend] standard_name = cumulative_change_of_state_variables long_name = diagnostic tendencies for state variables - units = various + units = mixed dimensions = (horizontal_loop_extent,vertical_layer_dimension,cumulative_change_of_state_variables_outer_index_max) type = real kind = kind_phys From 742f01caf8708b06af5bf07816ce9012c92892ea Mon Sep 17 00:00:00 2001 From: William Ramstrom Date: Wed, 10 Nov 2021 19:46:16 +0000 Subject: [PATCH 04/10] Expanded format fields for percentages to allow 100% to be output. --- physics/sfcsub.F | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/physics/sfcsub.F b/physics/sfcsub.F index 53a907cc0..e8b61f083 100644 --- a/physics/sfcsub.F +++ b/physics/sfcsub.F @@ -5753,63 +5753,63 @@ subroutine qcmxmn(ttl,fld,slimsk,sno,iceflg, & per = float(kmaxl)/float(len)*100. print 9002,fldlmx,kmaxl,per 9002 format(' bare land max check. modified to ',f8.1, & - & ' at ',i5,' points ',f4.1,'percent') + & ' at ',i5,' points ',f5.1,'percent') if(per.gt.permax) permax=per endif if(kmino > 0) then per = float(kmino)/float(len)*100. print 9003,fldomn,kmino,per 9003 format(' open ocean min check. modified to ',f8.1, & - & ' at ',i5,' points ',f4.1,'percent') + & ' at ',i5,' points ',f5.1,'percent') if(per.gt.permax) permax=per endif if(kmaxo > 0) then per = float(kmaxo)/float(len)*100. print 9004,fldomx,kmaxo,per 9004 format(' open sea max check. modified to ',f8.1, & - & ' at ',i5,' points ',f4.1,'percent') + & ' at ',i5,' points ',f5.1,'percent') if(per.gt.permax) permax=per endif if(kmins >.0) then per = float(kmins)/float(len)*100. print 9009,fldsmn,kmins,per 9009 format(' snow covered land min check. modified to ',f8.1, & - & ' at ',i5,' points ',f4.1,'percent') + & ' at ',i5,' points ',f5.1,'percent') if(per.gt.permax) permax=per endif if(kmaxs > 0) then per = float(kmaxs)/float(len)*100. print 9010,fldsmx,kmaxs,per 9010 format(' snow covered land max check. modified to ',f8.1, & - & ' at ',i5,' points ',f4.1,'percent') + & ' at ',i5,' points ',f5.1,'percent') if(per.gt.permax) permax=per endif if(kmini > 0) then per = float(kmini)/float(len)*100. print 9005,fldimn,kmini,per 9005 format(' bare ice min check. modified to ',f8.1, & - & ' at ',i5,' points ',f4.1,'percent') + & ' at ',i5,' points ',f5.1,'percent') if(per.gt.permax) permax=per endif if(kmaxi > 0) then per = float(kmaxi)/float(len)*100. print 9006,fldimx,kmaxi,per 9006 format(' bare ice max check. modified to ',f8.1, & - & ' at ',i5,' points ',f4.1,'percent') + & ' at ',i5,' points ',f5.1,'percent') if(per > permax) permax=per endif if(kminj > 0) then per = float(kminj)/float(len)*100. print 9007,fldjmn,kminj,per 9007 format(' snow covered ice min check. modified to ',f8.1, & - & ' at ',i5,' points ',f4.1,'percent') + & ' at ',i5,' points ',f5.1,'percent') if(per.gt.permax) permax=per endif if(kmaxj > 0) then per = float(kmaxj)/float(len)*100. print 9008,fldjmx,kmaxj,per 9008 format(' snow covered ice max check. modified to ',f8.1, & - & ' at ',i5,' points ',f4.1,'percent') + & ' at ',i5,' points ',f5.1,'percent') if(per > permax) permax=per endif ! commented on 06/30/99 -- moorthi From 4db27ba24475a2c109c8757a1cda7adbf47771de Mon Sep 17 00:00:00 2001 From: Ruiyu Sun Date: Thu, 18 Nov 2021 20:19:09 +0000 Subject: [PATCH 05/10] update the namelist variables to control semi-lagrangian sedimentation --- physics/module_mp_thompson.F90 | 90 ++++++++++++++++------------------ physics/mp_thompson.F90 | 12 ++--- physics/mp_thompson.meta | 17 ++----- 3 files changed, 50 insertions(+), 69 deletions(-) diff --git a/physics/module_mp_thompson.F90 b/physics/module_mp_thompson.F90 index 5f62ab645..dbf554508 100644 --- a/physics/module_mp_thompson.F90 +++ b/physics/module_mp_thompson.F90 @@ -970,8 +970,7 @@ SUBROUTINE mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & nwfa, nifa, nwfa2d, nifa2d, & tt, th, pii, & p, w, dz, dt_in, dt_inner, & - sedi_semi, sedi_semi_update, & - sedi_semi_decfl, & + sedi_semi, decfl, & RAINNC, RAINNCV, & SNOWNC, SNOWNCV, & ICENC, ICENCV, & @@ -1049,7 +1048,8 @@ SUBROUTINE mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & vt_dbz_wt LOGICAL, INTENT(IN) :: first_time_step REAL, INTENT(IN):: dt_in, dt_inner - LOGICAL, INTENT(IN) :: sedi_semi, sedi_semi_update, sedi_semi_decfl + LOGICAL, INTENT(IN) :: sedi_semi + INTEGER, INTENT(IN) :: decfl ! To support subcycling: current step and maximum number of steps INTEGER, INTENT (IN) :: istep, nsteps LOGICAL, INTENT (IN) :: reset_dBZ @@ -1425,7 +1425,7 @@ SUBROUTINE mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & #endif rand1, rand2, rand3, & kts, kte, dt, i, j, ext_diag, & - sedi_semi, sedi_semi_update, sedi_semi_decfl, & + sedi_semi, decfl, & !vtsk1, txri1, txrc1, & prw_vcdc1, prw_vcde1, & tpri_inu1, tpri_ide1_d, tpri_ide1_s, tprs_ide1, & @@ -1821,7 +1821,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & ! Extended diagnostics, most arrays only ! allocated if ext_diag flag is .true. ext_diag, & - sedi_semi, sedi_semi_update, sedi_semi_decfl, & + sedi_semi, decfl, & !vtsk1, txri1, txrc1, & prw_vcdc1, prw_vcde1, & tpri_inu1, tpri_ide1_d, tpri_ide1_s, tprs_ide1, & @@ -1851,7 +1851,8 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & REAL, INTENT(IN):: rand1, rand2, rand3 ! Extended diagnostics, most arrays only allocated if ext_diag is true LOGICAL, INTENT(IN) :: ext_diag - LOGICAL, INTENT(IN) :: sedi_semi, sedi_semi_update, sedi_semi_decfl + LOGICAL, INTENT(IN) :: sedi_semi + INTEGER, INTENT(IN) :: decfl REAL, DIMENSION(:), INTENT(OUT):: & !vtsk1, txri1, txrc1, & prw_vcdc1, & @@ -1907,7 +1908,6 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & prg_rcg, prg_ihm DOUBLE PRECISION, PARAMETER:: zeroD0 = 0.0d0 - REAL, PARAMETER :: decfl = 8.0 REAL :: dtcfl,rainsfc,graulsfc INTEGER :: niter @@ -3930,10 +3930,8 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & else !if(.not. sedi_semi) niter = 1 dtcfl = dt - if(sedi_semi_decfl) then - niter = int(nstep/decfl) + 1 - dtcfl = dt/niter - endif + niter = int(nstep/max(decfl,1)) + 1 + dtcfl = dt/niter do n = 1, niter rr_tmp(:) = rr(:) nr_tmp(:) = nr(:) @@ -3946,29 +3944,27 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & enddo pptrain = pptrain + rainsfc - if(sedi_semi_update) then - do k = kte+1, kts, -1 - vtrk(k) = 0. - vtnrk(k) = 0. - enddo - do k = kte, kts, -1 - vtr = 0. - if (rr(k).gt. R1) then - lamr = (am_r*crg(3)*org2*nr(k)/rr(k))**obmr - vtr = rhof(k)*av_r*crg(6)*org3 * lamr**cre(3) & - *((lamr+fv_r)**(-cre(6))) - vtrk(k) = vtr + do k = kte+1, kts, -1 + vtrk(k) = 0. + vtnrk(k) = 0. + enddo + do k = kte, kts, -1 + vtr = 0. + if (rr(k).gt. R1) then + lamr = (am_r*crg(3)*org2*nr(k)/rr(k))**obmr + vtr = rhof(k)*av_r*crg(6)*org3 * lamr**cre(3) & + *((lamr+fv_r)**(-cre(6))) + vtrk(k) = vtr ! First below is technically correct: ! vtr = rhof(k)*av_r*crg(5)*org2 * lamr**cre(2) & ! *((lamr+fv_r)**(-cre(5))) ! Test: make number fall faster (but still slower than mass) ! Goal: less prominent size sorting - vtr = rhof(k)*av_r*crg(7)/crg(12) * lamr**cre(12) & - *((lamr+fv_r)**(-cre(7))) - vtnrk(k) = vtr - endif - enddo - endif ! if(sedi_semi_update) + vtr = rhof(k)*av_r*crg(7)/crg(12) * lamr**cre(12) & + *((lamr+fv_r)**(-cre(7))) + vtnrk(k) = vtr + endif + enddo enddo endif! if(.not. sedi_semi) endif @@ -4080,10 +4076,8 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & else ! if(.not. sedi_semi) then niter = 1 dtcfl = dt - if(SEDI_SEMI_DECFL) then - niter = int(nstep/decfl) + 1 - dtcfl = dt/niter - endif + niter = int(nstep/max(decfl,1)) + 1 + dtcfl = dt/niter do n = 1, niter rg_tmp(:) = rg(:) @@ -4093,22 +4087,20 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & qgten(k) = qgten(k) + (rg(k) - rg_tmp(k))*orhodt enddo pptgraul = pptgraul + graulsfc - if(sedi_semi_update) then - do k = kte+1, kts, -1 - vtgk(k) = 0. - enddo - do k = kte, kts, -1 - vtg = 0. - if (rg(k).gt. R1) then - vtg = rhof(k)*av_g*cgg(6)*ogg3 * ilamg(k)**bv_g - if (temp(k).gt. T_0) then - vtgk(k) = MAX(vtg, vtrk(k)) - else - vtgk(k) = vtg - endif - endif - enddo - endif + do k = kte+1, kts, -1 + vtgk(k) = 0. + enddo + do k = kte, kts, -1 + vtg = 0. + if (rg(k).gt. R1) then + vtg = rhof(k)*av_g*cgg(6)*ogg3 * ilamg(k)**bv_g + if (temp(k).gt. T_0) then + vtgk(k) = MAX(vtg, vtrk(k)) + else + vtgk(k) = vtg + endif + endif + enddo enddo endif ! if(.not. sedi_semi) then endif diff --git a/physics/mp_thompson.F90 b/physics/mp_thompson.F90 index d5a1fcaad..44b80969c 100644 --- a/physics/mp_thompson.F90 +++ b/physics/mp_thompson.F90 @@ -302,8 +302,7 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & is_aerosol_aware, nc, nwfa, nifa, & nwfa2d, nifa2d, & tgrs, prsl, phii, omega, & - sedi_semi, sedi_semi_update, & - sedi_semi_decfl, dtp, dt_inner, & + sedi_semi, decfl, dtp, dt_inner, & first_time_step, istep, nsteps, & prcp, rain, graupel, ice, snow, sr, & refl_10cm, reset_dBZ, do_radar_ref, & @@ -359,8 +358,7 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & real(kind_phys), intent(inout) :: refl_10cm(:,:) logical, intent(in ) :: do_radar_ref logical, intent(in) :: sedi_semi - logical, intent(in) :: sedi_semi_update - logical, intent(in) :: sedi_semi_decfl + integer, intent(in) :: decfl ! MPI and block information integer, intent(in) :: blkno integer, intent(in) :: mpicomm @@ -618,8 +616,7 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & nc=nc, nwfa=nwfa, nifa=nifa, nwfa2d=nwfa2d, nifa2d=nifa2d, & tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtstep, dt_inner=dt_inner, & - sedi_semi=sedi_semi, sedi_semi_update=sedi_semi_update, & - sedi_semi_decfl=sedi_semi_decfl, & + sedi_semi=sedi_semi, decfl=decfl, & rainnc=rain_mp, rainncv=delta_rain_mp, & snownc=snow_mp, snowncv=delta_snow_mp, & icenc=ice_mp, icencv=delta_ice_mp, & @@ -658,8 +655,7 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & else call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtstep, dt_inner=dt_inner, & - sedi_semi=sedi_semi, sedi_semi_update=sedi_semi_update, & - sedi_semi_decfl=sedi_semi_decfl, & + sedi_semi=sedi_semi, decfl=decfl, & rainnc=rain_mp, rainncv=delta_rain_mp, & snownc=snow_mp, snowncv=delta_snow_mp, & icenc=ice_mp, icencv=delta_ice_mp, & diff --git a/physics/mp_thompson.meta b/physics/mp_thompson.meta index 25efcf953..248b76cc9 100644 --- a/physics/mp_thompson.meta +++ b/physics/mp_thompson.meta @@ -474,19 +474,12 @@ dimensions = () type = logical intent = in -[sedi_semi_update] - standard_name = flag_for_v_update_in_semi_Lagrangian_sedi - long_name = flag for v update in semi Lagrangian sedi of rain - units = flag +[decfl] + standard_name = deformed_CFL_factor + long_name = deformed CFL factor + units = count dimensions = () - type = logical - intent = in -[sedi_semi_decfl] - standard_name = flag_for_iteration_with_semi_Lagrangian_sedi - long_name = flag for interation with semi Lagrangian sedi of rain - units = flag - dimensions = () - type = logical + type = integer intent = in [dtp] standard_name = timestep_for_physics From e96358c3cc1b44753999bf175fa12222c666fdae Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Thu, 18 Nov 2021 16:03:51 -0700 Subject: [PATCH 06/10] Add @mkavulich to CODEOWNERS --- CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index bd4193c5a..c163e7b80 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -3,7 +3,7 @@ # These owners will be the default owners for everything in the repo. #* @defunkt -* @climbfuji @llpcarson @grantfirl @mzhangw @panll +* @climbfuji @llpcarson @grantfirl @mzhangw @panll @mkavulich # Order is important. The last matching pattern has the most precedence. # So if a pull request only touches javascript files, only these owners From bd4710a0511a1a0c6bd6850ce3b7630e9a356df5 Mon Sep 17 00:00:00 2001 From: Ruiyu Sun Date: Fri, 19 Nov 2021 04:22:56 +0000 Subject: [PATCH 07/10] remove trailing whitespace --- physics/module_mp_thompson.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/physics/module_mp_thompson.F90 b/physics/module_mp_thompson.F90 index dbf554508..6d3a9cb69 100644 --- a/physics/module_mp_thompson.F90 +++ b/physics/module_mp_thompson.F90 @@ -1425,7 +1425,7 @@ SUBROUTINE mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & #endif rand1, rand2, rand3, & kts, kte, dt, i, j, ext_diag, & - sedi_semi, decfl, & + sedi_semi, decfl, & !vtsk1, txri1, txrc1, & prw_vcdc1, prw_vcde1, & tpri_inu1, tpri_ide1_d, tpri_ide1_s, tprs_ide1, & @@ -1821,7 +1821,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & ! Extended diagnostics, most arrays only ! allocated if ext_diag flag is .true. ext_diag, & - sedi_semi, decfl, & + sedi_semi, decfl, & !vtsk1, txri1, txrc1, & prw_vcdc1, prw_vcde1, & tpri_inu1, tpri_ide1_d, tpri_ide1_s, tprs_ide1, & From ef072d93225b5f45107f4aa66312a5f2a34d2e02 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 23 Nov 2021 08:36:45 -0700 Subject: [PATCH 08/10] Revert unnecessary whitespace changes in physics/module_mp_thompson.F90 --- physics/module_mp_thompson.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/physics/module_mp_thompson.F90 b/physics/module_mp_thompson.F90 index 6d3a9cb69..dbf554508 100644 --- a/physics/module_mp_thompson.F90 +++ b/physics/module_mp_thompson.F90 @@ -1425,7 +1425,7 @@ SUBROUTINE mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & #endif rand1, rand2, rand3, & kts, kte, dt, i, j, ext_diag, & - sedi_semi, decfl, & + sedi_semi, decfl, & !vtsk1, txri1, txrc1, & prw_vcdc1, prw_vcde1, & tpri_inu1, tpri_ide1_d, tpri_ide1_s, tprs_ide1, & @@ -1821,7 +1821,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & ! Extended diagnostics, most arrays only ! allocated if ext_diag flag is .true. ext_diag, & - sedi_semi, decfl, & + sedi_semi, decfl, & !vtsk1, txri1, txrc1, & prw_vcdc1, prw_vcde1, & tpri_inu1, tpri_ide1_d, tpri_ide1_s, tprs_ide1, & From a233e2e87411379562d03d214ef4ebc98aca94f4 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 23 Nov 2021 08:41:46 -0700 Subject: [PATCH 09/10] Change units of relative humidity variables in CCPP metadata from 1 or none to frac --- physics/m_micro.meta | 4 ++-- physics/maximum_hourly_diagnostics.meta | 4 ++-- physics/mp_fer_hires.meta | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/physics/m_micro.meta b/physics/m_micro.meta index 43654a26c..e202f7b74 100644 --- a/physics/m_micro.meta +++ b/physics/m_micro.meta @@ -135,7 +135,7 @@ [mg_qcvar] standard_name = relative_variance_of_subgrid_cloud_condensate_distribution long_name = cloud water relative variance for MG microphysics - units = + units = frac dimensions = () type = real kind = kind_phys @@ -151,7 +151,7 @@ [mg_rhmini] standard_name = relative_humidity_threshold_for_ice_nucleation long_name = relative humidity threshold parameter for nucleating ice for MG microphysics - units = none + units = frac dimensions = () type = real kind = kind_phys diff --git a/physics/maximum_hourly_diagnostics.meta b/physics/maximum_hourly_diagnostics.meta index 1f7df8215..d9a236c29 100644 --- a/physics/maximum_hourly_diagnostics.meta +++ b/physics/maximum_hourly_diagnostics.meta @@ -194,7 +194,7 @@ [rh02max] standard_name = maximum_relative_humidity_at_2m_over_maximum_hourly_time_interval long_name = maximum relative humidity at 2m over maximum hourly time interval - units = 1 + units = frac dimensions = (horizontal_loop_extent) type = real kind = kind_phys @@ -202,7 +202,7 @@ [rh02min] standard_name = minimum_relative_humidity_at_2m_over_maximum_hourly_time_interval long_name = minumum relative humidity at 2m over maximum hourly time interval - units = 1 + units = frac dimensions = (horizontal_loop_extent) type = real kind = kind_phys diff --git a/physics/mp_fer_hires.meta b/physics/mp_fer_hires.meta index 6cf457063..08c6d939a 100644 --- a/physics/mp_fer_hires.meta +++ b/physics/mp_fer_hires.meta @@ -274,7 +274,7 @@ [rhgrd] standard_name = relative_humidity_threshold_for_condensation long_name = relative humidity threshold parameter for condensation for FA scheme - units = none + units = frac dimensions = () type = real kind = kind_phys From b7bd5b9f8923c5608759d34ce026dec1901d83b1 Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Tue, 23 Nov 2021 13:33:11 -0700 Subject: [PATCH 10/10] Add 'in Pa' to three long names to clarify the variables --- physics/gfdl_fv_sat_adj.meta | 2 +- physics/h2o_def.meta | 2 +- physics/ozne_def.meta | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/physics/gfdl_fv_sat_adj.meta b/physics/gfdl_fv_sat_adj.meta index 88164f4fc..8eece5a9c 100644 --- a/physics/gfdl_fv_sat_adj.meta +++ b/physics/gfdl_fv_sat_adj.meta @@ -340,7 +340,7 @@ intent = inout [pkz] standard_name = finite_volume_mean_edge_pressure_raised_to_the_power_of_kappa - long_name = finite-volume mean edge pressure raised to the power of kappa + long_name = finite-volume mean edge pressure in Pa raised to the power of kappa units = 1 dimensions = (starting_x_direction_index:ending_x_direction_index,starting_y_direction_index:ending_y_direction_index,1:vertical_dimension_for_fast_physics) type = real diff --git a/physics/h2o_def.meta b/physics/h2o_def.meta index 3c223f1cb..17f0f8779 100644 --- a/physics/h2o_def.meta +++ b/physics/h2o_def.meta @@ -21,7 +21,7 @@ type = integer [h2o_pres] standard_name = natural_log_of_h2o_forcing_data_pressure_levels - long_name = natural log of h2o forcing data pressure levels + long_name = natural log of h2o forcing data pressure levels in Pa units = 1 dimensions = (vertical_dimension_of_h2o_forcing_data) type = real diff --git a/physics/ozne_def.meta b/physics/ozne_def.meta index ac747745c..3cad9c14d 100644 --- a/physics/ozne_def.meta +++ b/physics/ozne_def.meta @@ -21,7 +21,7 @@ type = integer [oz_pres] standard_name = natural_log_of_ozone_forcing_data_pressure_levels - long_name = natural log of ozone forcing data pressure levels + long_name = natural log of ozone forcing data pressure levels in Pa units = 1 dimensions = (vertical_dimension_of_ozone_forcing_data) type = real