diff --git a/.gitmodules b/.gitmodules index 22c723ac1..7f2098b7c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,8 +8,11 @@ branch = main [submodule "ccpp/physics"] path = ccpp/physics - url = https://github.com/ufs-community/ccpp-physics - branch = ufs/dev + #url = https://github.com/ufs-community/ccpp-physics + #branch = ufs/dev + url = https://github.com/RuiyuSun/ccpp-physics + branch = feature_gfdlmpv3 + [submodule "upp"] path = upp url = https://github.com/NOAA-EMC/UPP diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 1ed2c6245..2af5d380b 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -153,8 +153,10 @@ 'physics/physics/photochem/h2ophys.f', 'physics/physics/photochem/module_ozphys.F90', 'physics/physics/MP/Ferrier_Aligo/mp_fer_hires.F90', - 'physics/physics/MP/GFDL/gfdl_cloud_microphys.F90', - 'physics/physics/MP/GFDL/fv_sat_adj.F90', + 'physics/physics/MP/GFDL_2019_v1/gfdl_cloud_microphys.F90', + 'physics/physics/MP/GFDL_2019_v1/fv_sat_adj.F90', + 'physics/physics/MP/GFDL_2022_v3/gfdl_cld_mp_v3.F90', + 'physics/physics/MP/GFDL_2022_v3/fv_sat_adj_v3.F90', 'physics/physics/MP/Morrison_Gettelman/m_micro.F90', 'physics/physics/MP/Morrison_Gettelman/m_micro_pre.F90', 'physics/physics/MP/Morrison_Gettelman/m_micro_post.F90', diff --git a/ccpp/data/CCPP_typedefs.F90 b/ccpp/data/CCPP_typedefs.F90 index 7d9351337..09159bd5f 100644 --- a/ccpp/data/CCPP_typedefs.F90 +++ b/ccpp/data/CCPP_typedefs.F90 @@ -829,8 +829,10 @@ subroutine gfs_interstitial_create (Interstitial, IM, Model) end if ! ! Allocate arrays that are conditional on physics choices - if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson & - .or. Model%imp_physics == Model%imp_physics_nssl & + if (Model%imp_physics == Model%imp_physics_gfdl & + .or. Model%imp_physics == Model%imp_physics_gfdl_v3 & + .or. Model%imp_physics == Model%imp_physics_thompson & + .or. Model%imp_physics == Model%imp_physics_nssl & ) then allocate (Interstitial%graupelmp (IM)) allocate (Interstitial%icemp (IM)) @@ -988,7 +990,8 @@ subroutine gfs_interstitial_setup_tracers(Interstitial, Model) Interstitial%ntcwx = 2 Interstitial%ntiwx = 3 Interstitial%ntrwx = 4 - elseif (Model%imp_physics == Model%imp_physics_gfdl) then + elseif (Model%imp_physics == Model%imp_physics_gfdl & + .or. Model%imp_physics == Model%imp_physics_gfdl_v3 ) then Interstitial%ntcwx = 2 Interstitial%ntiwx = 3 Interstitial%ntrwx = 4 @@ -1016,7 +1019,8 @@ subroutine gfs_interstitial_setup_tracers(Interstitial, Model) else Interstitial%nvdiff = 10 endif - elseif (Model%imp_physics == Model%imp_physics_gfdl) then + elseif (Model%imp_physics == Model%imp_physics_gfdl & + .or. Model%imp_physics == Model%imp_physics_gfdl_v3) then Interstitial%nvdiff = 7 elseif (Model%imp_physics == Model%imp_physics_thompson) then if (Model%ltaerosol) then @@ -1438,8 +1442,10 @@ subroutine gfs_interstitial_phys_reset (Interstitial, Model) end if ! ! Reset fields that are conditional on physics choices - if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson & - .or. Model%imp_physics == Model%imp_physics_nssl & + if (Model%imp_physics == Model%imp_physics_gfdl & + .or. Model%imp_physics == Model%imp_physics_gfdl_v3 & + .or. Model%imp_physics == Model%imp_physics_thompson & + .or. Model%imp_physics == Model%imp_physics_nssl & ) then Interstitial%graupelmp = clear_val Interstitial%icemp = clear_val diff --git a/ccpp/data/CCPP_typedefs.meta b/ccpp/data/CCPP_typedefs.meta index a2d1105df..8f6e1a944 100644 --- a/ccpp/data/CCPP_typedefs.meta +++ b/ccpp/data/CCPP_typedefs.meta @@ -1127,7 +1127,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme) + active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_gfdl_microphysics_v3_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme) [gwdcu] standard_name = tendency_of_x_wind_due_to_convective_gravity_wave_drag long_name = zonal wind tendency due to convective gravity wave drag @@ -1219,7 +1219,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme) + active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_gfdl_microphysics_v3_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme) [dry] standard_name = flag_nonzero_land_surface_fraction long_name = flag indicating presence of some land surface area fraction @@ -1726,7 +1726,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme) + active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_gfdl_microphysics_v3_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme) [rainp] standard_name = tendency_of_rain_water_mixing_ratio_due_to_microphysics long_name = tendency of rain water mixing ratio due to microphysics @@ -1982,7 +1982,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme) + active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_gfdl_microphysics_v3_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme) [snowmt] standard_name = surface_snow_melt long_name = snow melt during timestep diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 5a8368a40..ed36990a1 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -901,6 +901,7 @@ module GFS_typedefs !--- new microphysical switch integer :: imp_physics !< choice of microphysics scheme integer :: imp_physics_gfdl = 11 !< choice of GFDL microphysics scheme + integer :: imp_physics_gfdl_v3 = 13 !< choice of GFDL microphysics version 3 scheme integer :: imp_physics_thompson = 8 !< choice of Thompson microphysics scheme integer :: imp_physics_wsm6 = 6 !< choice of WSMG microphysics scheme integer :: imp_physics_zhao_carr = 99 !< choice of Zhao-Carr microphysics scheme @@ -4691,7 +4692,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & 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_gfdl .and. & + Model%imp_physics /= Model%imp_physics_gfdl_v3 .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 @@ -6038,7 +6041,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ' mg_alf=', Model%mg_alf, ' mg_qcmin=', Model%mg_qcmin, & ' mg_do_ice_gmao=', Model%mg_do_ice_gmao, ' mg_do_liq_liu=', Model%mg_do_liq_liu - elseif (Model%imp_physics == Model%imp_physics_gfdl) then !GFDL microphysics + elseif (Model%imp_physics == Model%imp_physics_gfdl .or. & + Model%imp_physics == Model%imp_physics_gfdl_v3) then !GFDL microphysics Model%npdf3d = 0 if(Model%effr_in) then Model%num_p3d = 5 @@ -6567,7 +6571,13 @@ subroutine control_print(Model) print *, ' ' endif if (Model%imp_physics == Model%imp_physics_gfdl) then - print *, ' GFDL microphysical parameters' + print *, ' GFDL microphysical parameters v1' + print *, ' GFDL MP radiation inter: ', Model%lgfdlmprad + print *, ' lrefres : ', Model%lrefres + print *, ' ' + endif + if (Model%imp_physics == Model%imp_physics_gfdl_v3) then + print *, ' GFDL microphysical parameters v3' print *, ' GFDL MP radiation inter: ', Model%lgfdlmprad print *, ' lrefres : ', Model%lrefres print *, ' ' diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index ebaa9af7f..d0178b0b4 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -4074,6 +4074,12 @@ units = flag dimensions = () type = integer +[imp_physics_gfdl_v3] + standard_name = identifier_for_gfdl_microphysics_v3_scheme + long_name = choice of GFDL microphysics v3 scheme + units = flag + dimensions = () + type = integer [imp_physics_thompson] standard_name = identifier_for_thompson_microphysics_scheme long_name = choice of Thompson microphysics scheme @@ -9867,7 +9873,7 @@ dependencies = hooks/machine.F,hooks/physcons.F90 dependencies = Radiation/RRTMG/radlw_param.f,Radiation/RRTMG/radsw_param.f dependencies = photochem/h2o_def.f,photochem/module_ozphys.F90 - dependencies = MP/GFDL/GFDL_parse_tracers.F90 + dependencies = MP/GFDL_parse_tracers.F90 [ccpp-arg-table] name = GFS_typedefs diff --git a/ccpp/suites/suite_FV3_GFS_v16_gfdlmpv3.xml b/ccpp/suites/suite_FV3_GFS_v16_gfdlmpv3.xml new file mode 100644 index 000000000..c3d8c3b23 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v16_gfdlmpv3.xml @@ -0,0 +1,92 @@ + + + + + + + fv_sat_adj_v3 + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + GFS_radiation_surface + rad_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + satmedmfvdifq + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + GFS_suite_stateout_update + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_DCNV_generic_pre + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cld_mp_v3 + GFS_MP_generic_post + maximum_hourly_diagnostics + GFS_physics_post + + + + + GFS_stochastics + + + + diff --git a/ccpp/suites/suite_FV3_HAFS_v1_gfdlmpv3_tedmf.xml b/ccpp/suites/suite_FV3_HAFS_v1_gfdlmpv3_tedmf.xml new file mode 100644 index 000000000..a1c57f46c --- /dev/null +++ b/ccpp/suites/suite_FV3_HAFS_v1_gfdlmpv3_tedmf.xml @@ -0,0 +1,92 @@ + + + + + + + fv_sat_adj_v3 + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + GFS_radiation_surface + rad_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + satmedmfvdifq + GFS_PBL_generic_post + GFS_GWD_generic_pre + unified_ugwp + unified_ugwp_post + GFS_GWD_generic_post + GFS_suite_stateout_update + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_DCNV_generic_pre + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cld_mp_v3 + GFS_MP_generic_post + maximum_hourly_diagnostics + GFS_physics_post + + + + + GFS_stochastics + + + +