From ec11fb41132be4da671569a8f0ef24ddde15360e Mon Sep 17 00:00:00 2001 From: Dom Heinzeller Date: Mon, 18 Nov 2019 15:02:27 -0700 Subject: [PATCH] gfsphysics/GFS_layer/GFS_typedefs.*: add new control variables/flags for CCPP for sas and satmedmfvdifq --- gfsphysics/GFS_layer/GFS_typedefs.F90 | 80 +++++++++++++----- gfsphysics/GFS_layer/GFS_typedefs.meta | 108 ++++++++++++++++++++----- 2 files changed, 150 insertions(+), 38 deletions(-) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 7f8239a5a..4e73d62f6 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -781,16 +781,36 @@ module GFS_typedefs !< 1: July 2010 version of mass-flux shallow conv scheme !< current operational version as of 2016 !< 2: scale- & aerosol-aware mass-flux shallow conv scheme (2017) + !< 3: scale- & aerosol-aware Grell-Freitas scheme (GSD) + !< 4: New Tiedtke scheme (CAPS) !< 0: modified Tiedtke's eddy-diffusion shallow conv scheme !< -1: no shallow convection used +#ifdef CCPP + integer :: imfshalcnv_sas = 1 !< flag for SAS mass-flux shallow convection scheme + integer :: imfshalcnv_samf = 2 !< flag for SAMF scale- & aerosol-aware mass-flux shallow convection scheme + integer :: imfshalcnv_gf = 3 !< flag for scale- & aerosol-aware Grell-Freitas scheme (GSD) + integer :: imfshalcnv_ntiedtke = 4 !< flag for new Tiedtke scheme (CAPS) +#endif integer :: imfdeepcnv !< flag for mass-flux deep convection scheme !< 1: July 2010 version of SAS conv scheme !< current operational version as of 2016 !< 2: scale- & aerosol-aware mass-flux deep conv scheme (2017) + !< 3: scale- & aerosol-aware Grell-Freitas scheme (GSD) + !< 4: New Tiedtke scheme (CAPS) !< 0: old SAS Convection scheme before July 2010 - integer :: isatmedmf !< flag for scale-aware TKE-based moist edmf scheme +#ifdef CCPP + integer :: imfdeepcnv_sas = 1 !< flag for SAS mass-flux deep convection scheme + integer :: imfdeepcnv_samf = 2 !< flag for SAMF scale- & aerosol-aware mass-flux deep convection scheme + integer :: imfdeepcnv_gf = 3 !< flag for scale- & aerosol-aware Grell-Freitas scheme (GSD) + integer :: imfdeepcnv_ntiedtke = 4 !< flag for new Tiedtke scheme (CAPS) +#endif + integer :: isatmedmf !< flag for scale-aware TKE-based moist edmf scheme !< 0: initial version of satmedmf (Nov. 2018) !< 1: updated version of satmedmf (as of May 2019) +#ifdef CCPP + integer :: isatmedmf_vdif = 0 !< flag for initial version of satmedmf (Nov. 2018) + integer :: isatmedmf_vdifq = 1 !< flag for updated version of satmedmf (as of May 2019) +#endif integer :: nmtvr !< number of topographic variables such as variance etc !< used in the GWD parameterization integer :: jcap !< number of spectral wave trancation used only by sascnv shalcnv @@ -2300,7 +2320,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%cqs2 = clear_val Sfcprop%lh = clear_val end if - if (Model%imfdeepcnv == 3) then + if (Model%imfdeepcnv == Model%imfdeepcnv_gf) then allocate (Sfcprop%conv_act(IM)) Sfcprop%conv_act = zero end if @@ -3869,8 +3889,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & #ifdef CCPP ! Consistency check for NTDK convection: deep and shallow convection are bundled ! and cannot be combined with any other deep or shallow convection scheme - if ( (Model%imfdeepcnv == 4 .or. Model%imfshalcnv == 4) .and. & - .not. (Model%imfdeepcnv == 4 .and. Model%imfshalcnv == 4) ) then + if ( (Model%imfdeepcnv == Model%imfdeepcnv_ntiedtke .or. Model%imfshalcnv == Model%imfshalcnv_ntiedtke) .and. & + .not. (Model%imfdeepcnv == Model%imfdeepcnv_ntiedtke .and. Model%imfshalcnv == Model%imfshalcnv_ntiedtke) ) then write(0,*) "Logic error: if NTDK deep convection is used, must also use NTDK shallow convection (and vice versa)" stop end if @@ -3890,14 +3910,21 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & else if (Model%imfdeepcnv == 0) then print *,' old SAS Convection scheme before July 2010 used' - elseif(Model%imfdeepcnv == 1) then +#ifdef CCPP + elseif(Model%imfdeepcnv == Model%imfdeepcnv_sas) then print *,' July 2010 version of SAS conv scheme used' - elseif(Model%imfdeepcnv == 2) then + elseif(Model%imfdeepcnv == Model%imfdeepcnv_samf) then print *,' scale & aerosol-aware mass-flux deep conv scheme' - elseif(Model%imfdeepcnv == 3) then + elseif(Model%imfdeepcnv == Model%imfdeepcnv_gf) then print *,' Grell-Freitas scale & aerosol-aware mass-flux deep conv scheme' - elseif(Model%imfdeepcnv == 4) then + elseif(Model%imfdeepcnv == Model%imfdeepcnv_ntiedtke) then print *,' New Tiedtke cumulus scheme' +#else + elseif(Model%imfdeepcnv == 1) then + print *,' July 2010 version of SAS conv scheme used' + elseif(Model%imfdeepcnv == 2) then + print *,' scale & aerosol-aware mass-flux deep conv scheme' +#endif endif endif else @@ -3913,16 +3940,19 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & print*, ' Deep convection scheme disabled' endif if (Model%satmedmf) then +#ifdef CCPP + if (Model%isatmedmf == Model%isatmedmf_vdif) then + print *,' initial version (Nov 2018) of sale-aware TKE-based moist EDMF scheme used' + elseif(Model%isatmedmf == Model%isatmedmf_vdifq) then + print *,' update version (May 2019) of sale-aware TKE-based moist EDMF scheme used' + endif +#else if (Model%isatmedmf == 0) then print *,' initial version (Nov 2018) of sale-aware TKE-based moist EDMF scheme used' elseif(Model%isatmedmf == 1) then -#ifdef CCPP - print *,' Error: updated version (May 2019) of sale-aware TKE-based moist EDMF scheme not yet available in CCPP' - stop -#else print *,' update version (May 2019) of sale-aware TKE-based moist EDMF scheme used' -#endif endif +#endif elseif (Model%hybedmf) then print *,' scale-aware hybrid edmf PBL scheme used' elseif (Model%old_monin) then @@ -3940,14 +3970,21 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & else if (Model%imfshalcnv == 0) then print *,' modified Tiedtke eddy-diffusion shallow conv scheme used' - elseif (Model%imfshalcnv == 1) then +#ifdef CCPP + elseif (Model%imfshalcnv == Model%imfshalcnv_sas) then print *,' July 2010 version of mass-flux shallow conv scheme used' - elseif (Model%imfshalcnv == 2) then + elseif (Model%imfshalcnv == Model%imfshalcnv_samf) then print *,' scale- & aerosol-aware mass-flux shallow conv scheme (2017)' - elseif (Model%imfshalcnv == 3) then + elseif (Model%imfshalcnv == Model%imfshalcnv_gf) then print *,' Grell-Freitas scale- & aerosol-aware mass-flux shallow conv scheme (2013)' - elseif (Model%imfshalcnv == 4) then + elseif (Model%imfshalcnv == Model%imfshalcnv_ntiedtke) then print *,' New Tiedtke cumulus scheme' +#else + elseif (Model%imfshalcnv == 1) then + print *,' July 2010 version of mass-flux shallow conv scheme used' + elseif (Model%imfshalcnv == 2) then + print *,' scale- & aerosol-aware mass-flux shallow conv scheme (2017)' +#endif else print *,' unknown mass-flux scheme in use - defaulting to no shallow convection' Model%imfshalcnv = -1 @@ -4179,7 +4216,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%lmfshal = (Model%shal_cnv .and. Model%imfshalcnv > 0) #ifdef CCPP - Model%lmfdeep2 = (Model%imfdeepcnv == 2 .or. Model%imfdeepcnv == 3 .or. Model%imfdeepcnv == 4) + Model%lmfdeep2 = (Model%imfdeepcnv == Model%imfdeepcnv_sas & + .or. Model%imfdeepcnv == Model%imfdeepcnv_gf & + .or. Model%imfdeepcnv == Model%imfdeepcnv_ntiedtke) #else Model%lmfdeep2 = (Model%imfdeepcnv == 2) #endif @@ -4389,6 +4428,7 @@ subroutine control_print(Model) print *, ' redrag : ', Model%redrag print *, ' hybedmf : ', Model%hybedmf print *, ' satmedmf : ', Model%satmedmf + print *, ' isatmedmf : ', Model%isatmedmf print *, ' shinhong : ', Model%shinhong print *, ' do_ysu : ', Model%do_ysu print *, ' dspheat : ', Model%dspheat @@ -4734,7 +4774,7 @@ subroutine tbd_create (Tbd, IM, Model) Tbd%htswc = clear_val Tbd%htsw0 = clear_val - if (Model%imfdeepcnv == 3 .or. Model%imfdeepcnv == 4) then + if (Model%imfdeepcnv == Model%imfdeepcnv_gf .or. Model%imfdeepcnv == Model%imfdeepcnv_ntiedtke) then allocate(Tbd%forcet(IM, Model%levs)) allocate(Tbd%forceq(IM, Model%levs)) allocate(Tbd%prevst(IM, Model%levs)) @@ -4745,7 +4785,7 @@ subroutine tbd_create (Tbd, IM, Model) Tbd%prevsq = clear_val end if - if (Model%imfdeepcnv == 3) then + if (Model%imfdeepcnv == Model%imfdeepcnv_gf) then allocate(Tbd%cactiv(IM)) Tbd%cactiv = zero end if diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index 79ab00129..aaed9e9ef 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -2777,18 +2777,90 @@ units = flag dimensions = () type = integer +[imfshalcnv_sas] + standard_name = flag_for_sas_shallow_convection_scheme + long_name = flag for SAS shallow convection scheme + units = flag + dimensions = () + type = integer +[imfshalcnv_samf] + standard_name = flag_for_samf_shallow_convection_scheme + long_name = flag for SAMF shallow convection scheme + units = flag + dimensions = () + type = integer +[imfshalcnv_gf] + standard_name = flag_for_gf_shallow_convection_scheme + long_name = flag for Grell-Freitas shallow convection scheme + units = flag + dimensions = () + type = integer +[imfshalcnv_gf] + standard_name = flag_for_ntiedtke_shallow_convection_scheme + long_name = flag for new Tiedtke shallow convection scheme + units = flag + dimensions = () + type = integer [imfdeepcnv] standard_name = flag_for_mass_flux_deep_convection_scheme long_name = flag for mass-flux deep convection scheme units = flag dimensions = () type = integer +[imfdeepcnv_sas] + standard_name = flag_for_sas_deep_convection_scheme + long_name = flag for SAS deep convection scheme + units = flag + dimensions = () + type = integer +[imfdeepcnv_samf] + standard_name = flag_for_samf_deep_convection_scheme + long_name = flag for SAMF deep convection scheme + units = flag + dimensions = () + type = integer +[imfdeepcnv_gf] + standard_name = flag_for_gf_deep_convection_scheme + long_name = flag for Grell-Freitas deep convection scheme + units = flag + dimensions = () + type = integer +[imfdeepcnv_ntiedtke] + standard_name = flag_for_ntiedtke_deep_convection_scheme + long_name = flag for new Tiedtke deep convection scheme + units = flag + dimensions = () + type = integer +[isatmedmf] + standard_name = choice_of_scale_aware_TKE_moist_EDMF_PBL + long_name = choice of scale-aware TKE moist EDMF PBL scheme + units = none + dimensions = () + type = integer +[isatmedmf_vdif] + standard_name = choice_of_original_scale_aware_TKE_moist_EDMF_PBL + long_name = choice of original scale-aware TKE moist EDMF PBL scheme + units = none + dimensions = () + type = integer +[isatmedmf_vdifq] + standard_name = choice_of_updated_scale_aware_TKE_moist_EDMF_PBL + long_name = choice of updated scale-aware TKE moist EDMF PBL scheme + units = none + dimensions = () + type = integer [nmtvr] standard_name = number_of_statistical_measures_of_subgrid_orography long_name = number of topographic variables in GWD units = count dimensions = () type = integer +[jcap] + standard_name = number_of_spectral_wave_trancation_for_sas + long_name = number of spectral wave trancation used only by sascnv and shalcnv + units = count + dimensions = () + type = integer [cs_parm(1)] standard_name = updraft_velocity_tunable_parameter_1_CS long_name = tunable parameter 1 for Chikira-Sugiyama convection @@ -2896,91 +2968,91 @@ kind = kind_phys [c0s_deep] standard_name = rain_conversion_parameter_deep_convection - long_name = convective rain conversion parameter for deep conv. + long_name = convective rain conversion parameter for deep convection units = m-1 dimensions = () type = real kind = kind_phys [c1_deep] standard_name = detrainment_conversion_parameter_deep_convection - long_name = convective detrainment conversion parameter for deep conv. + long_name = convective detrainment conversion parameter for deep convection units = m-1 dimensions = () type = real kind = kind_phys [betal_deep] standard_name = downdraft_fraction_reaching_surface_over_land_deep_convection - long_name = downdraft fraction reaching surface over land for deep conv. + long_name = downdraft fraction reaching surface over land for deep convection units = frac dimensions = () type = real kind = kind_phys [betas_deep] standard_name = downdraft_fraction_reaching_surface_over_ocean_deep_convection - long_name = downdraft fraction reaching surface over ocean for deep conv. + long_name = downdraft fraction reaching surface over ocean for deep convection units = frac dimensions = () type = real kind = kind_phys [evfact_deep] standard_name = rain_evaporation_coefficient_deep_convection - long_name = convective rain evaporation coefficient for deep conv. + long_name = convective rain evaporation coefficient for deep convection units = frac dimensions = () type = real kind = kind_phys [evfactl_deep] standard_name = rain_evaporation_coefficient_over_land_deep_convection - long_name = convective rain evaporation coefficient over land for deep conv. + long_name = convective rain evaporation coefficient over land for deep convection units = frac dimensions = () type = real kind = kind_phys [pgcon_deep] standard_name = momentum_transport_reduction_factor_pgf_deep_convection - long_name = reduction factor in momentum transport due to deep conv. induced pressure gradient force + long_name = reduction factor in momentum transport due to deep convection induced pressure gradient force units = frac dimensions = () type = real kind = kind_phys [asolfac_deep] standard_name = aerosol_aware_parameter_deep_convection - long_name = aerosol-aware parameter inversely proportional to CCN number concentraion from Lim (2011) for deep conv. + long_name = aerosol-aware parameter inversely proportional to CCN number concentraion from Lim (2011) for deep convection units = none dimensions = () type = real kind = kind_phys [clam_shal] standard_name = entrainment_rate_coefficient_shallow_convection - long_name = entrainment rate coefficient for shal conv. + long_name = entrainment rate coefficient for shallow convection units = none dimensions = () type = real kind = kind_phys [c0s_shal] standard_name = rain_conversion_parameter_shallow_convection - long_name = convective rain conversion parameter for shal conv. + long_name = convective rain conversion parameter for shallow convection units = m-1 dimensions = () type = real kind = kind_phys [c1_shal] standard_name = detrainment_conversion_parameter_shallow_convection - long_name = convective detrainment conversion parameter for shal conv. + long_name = convective detrainment conversion parameter for shallow convection units = m-1 dimensions = () type = real kind = kind_phys [pgcon_shal] standard_name = momentum_transport_reduction_factor_pgf_shallow_convection - long_name = reduction factor in momentum transport due to shal conv. induced pressure gradient force + long_name = reduction factor in momentum transport due to shallow convection induced pressure gradient force units = frac dimensions = () type = real kind = kind_phys [asolfac_shal] standard_name = aerosol_aware_parameter_shallow_convection - long_name = aerosol-aware parameter inversely proportional to CCN number concentraion from Lim (2011) for shal conv. + long_name = aerosol-aware parameter inversely proportional to CCN number concentraion from Lim (2011) for shallow convection units = none dimensions = () type = real @@ -5294,14 +5366,14 @@ kind = kind_phys [dt3dt(:,:,4)] standard_name = cumulative_change_in_temperature_due_to_deep_convection - long_name = cumulative change in temperature due to deep conv. + long_name = cumulative change in temperature due to deep convection units = K dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [dt3dt(:,:,5)] standard_name = cumulative_change_in_temperature_due_to_shal_convection - long_name = cumulative change in temperature due to shal conv. + long_name = cumulative change in temperature due to shallow convection units = K dimensions = (horizontal_dimension,vertical_dimension) type = real @@ -5329,14 +5401,14 @@ kind = kind_phys [dq3dt(:,:,2)] standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_deep_convection - long_name = cumulative change in water vapor specific humidity due to deep conv. + long_name = cumulative change in water vapor specific humidity due to deep convection units = kg kg-1 dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [dq3dt(:,:,3)] standard_name = cumulative_change_in_water_vapor_specific_humidity_due_to_shal_convection - long_name = cumulative change in water vapor specific humidity due to shal conv. + long_name = cumulative change in water vapor specific humidity due to shallow convection units = kg kg-1 dimensions = (horizontal_dimension,vertical_dimension) type = real @@ -7103,7 +7175,7 @@ kind = kind_phys [ncstrac] standard_name = number_of_tracers_for_CS - long_name = number of convectively transported tracers in Chikira-Sugiyama deep conv. scheme + long_name = number of convectively transported tracers in Chikira-Sugiyama deep convection scheme units = count dimensions = () type = integer