From 2931855fe2789bfba10eb10d3e32663da16578c0 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 30 Jan 2025 13:27:31 -0500 Subject: [PATCH 1/8] saving work on adding PUMAS control variables (#554) --- scm/src/GFS_typedefs.F90 | 49 +++++++++++++ scm/src/GFS_typedefs.meta | 140 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 189 insertions(+) diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index f73f6a90..f3cc6937 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -1640,6 +1640,30 @@ module GFS_typedefs integer :: levh2o !< Number of vertical layers in stratospheric h2o data. integer :: h2o_coeff !< Number of coefficients in stratospheric h2o data. +!--- PUMAS + real(kind=kind_phys) :: micro_mg_accre_enhan_fact !< KK2000 accretion enhancement factor for PUMAS microphysics + real(kind=kind_phys) :: micro_mg_autocon_fact !< KK2000 autonconverion enhancement factor for PUMAS microphysics + real(kind=kind_phys) :: micro_mg_autocon_lwp_exp !< KK2000 autonconverion lwp (qc) exponent in PUMAS microphysics + real(kind=kind_phys) :: micro_mg_autocon_nd_exp !< KK2000 autonconverion nd exponent in PUMAS microphysics + character(len=*) :: control_for_warm_rain_method !< warm rain method (KK2000,sb2001,tau,emulated) + logical :: micro_mg_implicit_fall !< use implicit calculation for fall speed for PUMAS microphysics + integer :: micro_dust_nbins !< number of dust particle size bins + character(len=*) :: stochastic_emulated_filename_input_scale !< emulated stochastic collection filename for input scaling + character(len=*) :: stochastic_emulated_filename_output_scale !< emulated stochastic collection filename for output scaling + character(len=*) :: stochastic_emulated_filename_quantile !< emulated stochastic collection filename for quantiles + logical :: micro_mg_accre_sees_auto !< KK200 accretion sees newely formed rain for PUMAS microphysics + logical :: micro_mg_ifs_sed !< Use constant sedimentation of all species for PUMAS microphysics + logical :: micro_mg_precip_fall_corr !< ensure non-zero precipitation fallspeed for PUMAS microphysics + logical :: use_hetfrz_classnuc !< flag for heterogeneous freezing for PUMAS microphysics + logical :: micro_mg_evap_sed_off !< true for sedimenting condensate does not evaporate for PUMAS microphys + logical :: micro_mg_nrcons !< flag for constant rain concentration for PUMAS microphysics + logical :: micro_mg_nscons !< flag for constant snow concentration for PUMAS microphysics + logical :: micro_mg_rainfreeze_ifs !< Freeze rain at 0C for PUMAS microphysics + logical :: micro_mg_icenuc_rh_off !< If .true., remove RH threshold from ice nucelation calculation for PUMAS microphysics + logical :: micro_mg_evap_scl_ifs !< if True Apply 0.3 scaling factor to evaporation of precipitation for PUMAS microphysics + logical :: micro_mg_icenuc_use_meyers !< use temperature dependent ice nucleation from Meyers 1992 for PUMAS microphysics + logical :: micro_mg_evap_rhthrsh_ifs !< Do not evaporate precipitation until RH below 90% as done in the for PUMAS microphysics + !--- CCPP suite simulator logical :: do_ccpp_suite_sim ! integer :: nphys_proc ! @@ -1653,6 +1677,7 @@ module GFS_typedefs integer :: iactive_u ! integer :: iactive_v ! integer :: iactive_q ! + contains procedure :: init => control_initialize @@ -5731,6 +5756,30 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%h2o_coeff = 1 end if + !--- PUMAS; all default values come from https://github.com/ESCOMP/CAM/blob/cam_development/bld/namelist_files/namelist_defaults_cam.xml + Model%micro_mg_accre_enhan_fact = 1.0_kind_phys + Model%micro_mg_autocon_fact = 0.01_kind_phys + Model%micro_mg_autocon_lwp_exp = 2.47_kind_phys + Model%micro_mg_autocon_nd_exp = -1.1_kind_phys + Model%control_for_warm_rain_method = 'kk2000' + Model%micro_mg_implicit_fall = .true. + Model%micro_dust_nbins = 1 !!!!!!! + Model%stochastic_emulated_filename_input_scale = '' !!!!!!!! + Model%stochastic_emulated_filename_output_scale = '' !!!!!!!! + Model%stochastic_emulated_filename_quantile = '' !!!!!!!! + Model%micro_mg_accre_sees_auto = .true. + Model%micro_mg_ifs_sed = .false. !!!!!!! + Model%micro_mg_precip_fall_corr = .true. + Model%use_hetfrz_classnuc = .true. + Model%micro_mg_evap_sed_off = .false. !!!!!!! + Model%micro_mg_nrcons = .false. !!!!!!! + Model%micro_mg_nscons = .false. !!!!!!! + Model%micro_mg_rainfreeze_ifs = .false. !!!!!!! + Model%micro_mg_icenuc_rh_off = .false. !!!!!!! + Model%micro_mg_evap_scl_ifs = .false. !!!!!!! + Model%micro_mg_icenuc_use_meyers = .false. !!!!!!! + Model%micro_mg_evap_rhthrsh_ifs = .false. !!!!!!! + !--- quantities to be used to derive phy_f*d totals Model%nshoc_2d = nshoc_2d Model%nshoc_3d = nshoc_3d diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 7f08839c..d2edd715 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -7123,6 +7123,146 @@ units = index dimensions = () type = integer +[micro_mg_accre_enhan_fact] + standard_name = accretion_enhancement_factor + long_name = KK2000 accretion enhancement factor for MG microphysics + units = none + dimensions = () + type = real + kind = kind_phys +[micro_mg_autocon_fact] + standard_name = autconversion_enhancement_factor + long_name = KK2000 autonconverion enhancement factor for MG microphysics + units = none + dimensions = () + type = real + kind = kind_phys +[micro_mg_autocon_lwp_exp] + standard_name = autconversion_lwp_exponent + long_name = KK2000 autonconverion lwp (qc) exponent in MG microphysics + units = none + dimensions = () + type = real + kind = kind_phys +[micro_mg_autocon_nd_exp] + standard_name = autconversion_nd_exponent + long_name = KK2000 autonconverion nd exponent in MG microphysics + units = none + dimensions = () + type = real + kind = kind_phys +[micro_mg_warm_rain] + standard_name = control_for_warm_rain_method + long_name = warm rain method (KK2000,sb2001,tau,emulated) + units = none + dimensions = () + type = character + kind = len=* +[micro_mg_implicit_fall] + standard_name = do_implicit_fall_speed_calc + long_name = use implicit calculation for fall speed for MG microphysics + units = flag + dimensions = () + type = logical +[micro_dust_nbins] + standard_name = dust_size_bins_dimension + long_name = number of dust particle size bins + units = count + dimensions = () + type = integer +[stochastic_emulated_filename_input_scale] + standard_name = filename_of_emulated_stochastic_collection_input_scalings + long_name = emulated stochastic collection filename for input scaling + units = none + dimensions = () + type = character + kind = len=* +[stochastic_emulated_filename_output_scale] + standard_name = filename_of_emulated_stochastic_collection_output_scalings + long_name = emulated stochastic collection filename for output scaling + units = none + dimensions = () + type = character + kind = len=* +[stochastic_emulated_filename_quantile] + standard_name = filename_of_emulated_stochastic_collection_quantiles + long_name = emulated stochastic collection filename for quantiles + units = none + dimensions = () + type = character + kind = len=* +[micro_mg_accre_sees_auto] + standard_name = flag_for_accretion_sees_autoconverted_condensate + long_name = KK200 accretion sees newely formed rain for MG microphysics + units = flag + dimensions = () + type = logical +[micro_mg_ifs_sed] + standard_name = flag_for_constant_sedimentation_fall_speed + long_name = Use constant sedimentation of all species for MG microphysics + units = flag + dimensions = () + type = logical +[micro_mg_precip_fall_corr] + standard_name = flag_for_fall_speed_correction + long_name = ensure non-zero precipitation fallspeed for MG microphysics + units = flag + dimensions = () + type = logical +[use_hetfrz_classnuc] + standard_name = flag_for_heterogeneous_ice_nucleation + long_name = flag for heterogeneous freezing for MG microphysics + units = flag + dimensions = () + type = logical +[micro_mg_evap_sed_off] + standard_name = flag_for_no_evaporation_of_precipitation + long_name = true for sedimenting condensate does not evaporate for MG microphysics + units = flag + dimensions = () + type = logical +[micro_mg_nrcons] + standard_name = flag_for_prescribed_rain_number_concentration + long_name = flag for constant rain concentration for MG microphysics + units = flag + dimensions = () + type = logical +[micro_mg_nscons] + standard_name = flag_for_prescribed_snow_number_concentration + long_name = flag for constant snow concentration for MG microphysics + units = flag + dimensions = () + type = logical +[micro_mg_rainfreeze_ifs] + standard_name = flag_to_freeze_rain_at_0C + long_name = Freeze rain at 0C for MG microphysics + units = flag + dimensions = () + type = logical +[micro_mg_icenuc_rh_off] + standard_name = flag_to_remove_threshold_for_ice_nucleation + long_name = If .true., remove RH threshold from ice nucelation calculation for MG microphysics + units = flag + dimensions = () + type = logical +[micro_mg_evap_scl_ifs] + standard_name = flag_to_scale_evaporation_like_ifs + long_name = if True Apply 0.3 scaling factor to evaporation of precipitation for MG microphysics + units = flag + dimensions = () + type = logical +[micro_mg_icenuc_use_meyers] + standard_name = flag_to_use_meyers_ice_nucleation + long_name = use temperature dependent ice nucleation from Meyers 1992 for MG microphysics + units = flag + dimensions = () + type = logical +[micro_mg_evap_rhthrsh_ifs] + standard_name = flag_use_ifs_evaporation_threshold + long_name = Do not evaporate precipitation until RH below 90% as done in the for MG microphysics + units = flag + dimensions = () + type = logical [do_ccpp_suite_sim] standard_name = flag_for_CCPP_suite_simulator long_name = flag for ccpp suite simulator From 3bcbc8e800ed34c8a09a01ad6ba21d7d6ba04eb5 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Thu, 30 Jan 2025 18:32:59 +0000 Subject: [PATCH 2/8] Updated physics --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index b5b10a51..81c29968 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit b5b10a51772fa5c1daa809a779b9a55f2ffbff7b +Subproject commit 81c299682b4e66ade45ea3411b0a119ab541dbf3 From b9985094fe500792e769fb995f373bb390fbf6cc Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Thu, 30 Jan 2025 18:42:52 +0000 Subject: [PATCH 3/8] Update physics submodule --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 81c29968..21d229ea 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 81c299682b4e66ade45ea3411b0a119ab541dbf3 +Subproject commit 21d229ea69744b1332b3a90d97af47814bf15747 From 603162ae91edd41df4227a820ca55f03a6f10878 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Thu, 30 Jan 2025 18:46:34 +0000 Subject: [PATCH 4/8] Bugfixes --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 21d229ea..c781f4b2 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 21d229ea69744b1332b3a90d97af47814bf15747 +Subproject commit c781f4b2e925c0a56c50f73c9243391ed3b79fcd From d9018a3b73802e937006a965132f86330b93a93c Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Thu, 30 Jan 2025 20:43:16 +0000 Subject: [PATCH 5/8] More scalars for PUMAS --- scm/src/GFS_typedefs.F90 | 4 ++++ scm/src/GFS_typedefs.meta | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index f3cc6937..e85009a3 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -1664,6 +1664,10 @@ module GFS_typedefs logical :: micro_mg_icenuc_use_meyers !< use temperature dependent ice nucleation from Meyers 1992 for PUMAS microphysics logical :: micro_mg_evap_rhthrsh_ifs !< Do not evaporate precipitation until RH below 90% as done in the for PUMAS microphysics + real(kind=kind_phys) :: micro_mg_homog_size !< radius of drops homogeneously frozen in MG microphysics + real(kind=kind_phys) :: micro_mg_max_nicons !< maximum allowed ice number concentration for MG microphysics + integer :: iulog !< log output unit + !--- CCPP suite simulator logical :: do_ccpp_suite_sim ! integer :: nphys_proc ! diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index d2edd715..7091a8de 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -7263,6 +7263,26 @@ units = flag dimensions = () type = logical +[iulog] + standard_name = log_output_unit + long_name = log output unit + units = 1 + dimensions = () + type = integer +[micro_mg_homog_size] + standard_name = homogeneous_freezing_radius + long_name = radius of drops homogeneously frozen in MG microphysics + units = m + dimensions = () + type = real + kind = kind_phys +[micro_mg_max_nicons] + standard_name = maximum_ice_number_concentration + long_name = maximum allowed ice number concentration for MG microphysics + units = m-3 + dimensions = () + type = real + kind = kind_phys [do_ccpp_suite_sim] standard_name = flag_for_CCPP_suite_simulator long_name = flag for ccpp suite simulator From 95fae7c6b7ee8786370f1b0d0b620987aef80169 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Thu, 30 Jan 2025 20:50:30 +0000 Subject: [PATCH 6/8] Revert some stuff --- scm/src/GFS_typedefs.F90 | 4 ---- scm/src/GFS_typedefs.meta | 20 -------------------- 2 files changed, 24 deletions(-) diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index e85009a3..f3cc6937 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -1664,10 +1664,6 @@ module GFS_typedefs logical :: micro_mg_icenuc_use_meyers !< use temperature dependent ice nucleation from Meyers 1992 for PUMAS microphysics logical :: micro_mg_evap_rhthrsh_ifs !< Do not evaporate precipitation until RH below 90% as done in the for PUMAS microphysics - real(kind=kind_phys) :: micro_mg_homog_size !< radius of drops homogeneously frozen in MG microphysics - real(kind=kind_phys) :: micro_mg_max_nicons !< maximum allowed ice number concentration for MG microphysics - integer :: iulog !< log output unit - !--- CCPP suite simulator logical :: do_ccpp_suite_sim ! integer :: nphys_proc ! diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 7091a8de..d2edd715 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -7263,26 +7263,6 @@ units = flag dimensions = () type = logical -[iulog] - standard_name = log_output_unit - long_name = log output unit - units = 1 - dimensions = () - type = integer -[micro_mg_homog_size] - standard_name = homogeneous_freezing_radius - long_name = radius of drops homogeneously frozen in MG microphysics - units = m - dimensions = () - type = real - kind = kind_phys -[micro_mg_max_nicons] - standard_name = maximum_ice_number_concentration - long_name = maximum allowed ice number concentration for MG microphysics - units = m-3 - dimensions = () - type = real - kind = kind_phys [do_ccpp_suite_sim] standard_name = flag_for_CCPP_suite_simulator long_name = flag for ccpp suite simulator From 70cc303d478670c895004cc4fa2aa0b30fe3deb9 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Thu, 30 Jan 2025 20:59:31 +0000 Subject: [PATCH 7/8] Updated PUMAS --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index c781f4b2..df971a32 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit c781f4b2e925c0a56c50f73c9243391ed3b79fcd +Subproject commit df971a322e7ccf36601def36c7479c79b7e533b7 From 3a25a06183f8dab337d972c3977ab5c58dd482c9 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Thu, 30 Jan 2025 21:06:52 +0000 Subject: [PATCH 8/8] FIx hash --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index df971a32..59b1d86d 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit df971a322e7ccf36601def36c7479c79b7e533b7 +Subproject commit 59b1d86df18942eded88505fe4571a845829d517