diff --git a/.gitmodules b/.gitmodules index a01232401..e79a41174 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,8 +8,10 @@ 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/AndersJensen-NOAA/ccpp-physics + branch = tempo_dev [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 f170e33ac..db5194b4a 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -20,6 +20,7 @@ 'physics/physics/Radiation/RRTMG/radsw_param.f', 'physics/physics/Radiation/RRTMG/radlw_param.f', 'physics/physics/photochem/module_ozphys.F90', + 'physics/physics/MP/TEMPO/TEMPO/module_mp_tempo_params.F90', 'physics/physics/photochem/module_h2ophys.F90', 'physics/physics/SFC_Models/Land/Noahmp/lnd_iau_mod.F90', '../ccpp/data/CCPP_typedefs.F90', @@ -46,6 +47,10 @@ 'module_ozphys' : '', 'ty_ozphys' : '', }, + 'module_mp_tempo_params' : { + 'module_mp_tempo_params' : '', + 'ty_tempo_cfg' : '', + }, 'module_h2ophys' : { 'module_h2ophys' : '', 'ty_h2ophys' : '', @@ -172,6 +177,9 @@ 'physics/physics/MP/Thompson/mp_thompson_pre.F90', 'physics/physics/MP/Thompson/mp_thompson.F90', 'physics/physics/MP/Thompson/mp_thompson_post.F90', + 'physics/physics/MP/TEMPO/mp_tempo_pre.F90', + 'physics/physics/MP/TEMPO/mp_tempo.F90', + 'physics/physics/MP/TEMPO/mp_tempo_post.F90', 'physics/physics/MP/Zhao_Carr/zhaocarr_gscond.f', 'physics/physics/MP/Zhao_Carr/zhaocarr_precpd.f', 'physics/physics/PBL/HEDMF/hedmf.f', diff --git a/ccpp/data/CCPP_typedefs.F90 b/ccpp/data/CCPP_typedefs.F90 index 8b24554cc..d9aaebf3b 100644 --- a/ccpp/data/CCPP_typedefs.F90 +++ b/ccpp/data/CCPP_typedefs.F90 @@ -820,7 +820,7 @@ subroutine gfs_interstitial_create (Interstitial, IM, Model) ! ! 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 & + .or. Model%imp_physics == Model%imp_physics_tempo .or. Model%imp_physics == Model%imp_physics_nssl & ) then allocate (Interstitial%graupelmp (IM)) allocate (Interstitial%icemp (IM)) @@ -908,7 +908,8 @@ subroutine gfs_interstitial_setup_tracers(Interstitial, Model) ! perform aerosol convective transport and PBL diffusion Interstitial%trans_aero = Model%cplchm .and. Model%trans_trac - if (Model%imp_physics == Model%imp_physics_thompson) then + if (Model%imp_physics == Model%imp_physics_thompson .or. & + Model%imp_physics == Model%imp_physics_tempo) then if (Model%ltaerosol) then Interstitial%nvdiff = 12 else if (Model%mraerosol) then @@ -961,7 +962,8 @@ subroutine gfs_interstitial_setup_tracers(Interstitial, Model) if (Model%imp_physics == Model%imp_physics_wsm6) then Interstitial%ntcwx = 2 Interstitial%ntiwx = 3 - elseif (Model%imp_physics == Model%imp_physics_thompson) then + elseif (Model%imp_physics == Model%imp_physics_thompson .or. & + Model%imp_physics == Model%imp_physics_tempo) then Interstitial%ntcwx = 2 Interstitial%ntiwx = 3 Interstitial%ntrwx = 4 @@ -999,7 +1001,8 @@ subroutine gfs_interstitial_setup_tracers(Interstitial, Model) endif elseif (Model%imp_physics == Model%imp_physics_gfdl) then Interstitial%nvdiff = 7 - elseif (Model%imp_physics == Model%imp_physics_thompson) then + elseif (Model%imp_physics == Model%imp_physics_thompson .or. & + Model%imp_physics == Model%imp_physics_tempo) then if (Model%ltaerosol) then Interstitial%nvdiff = 12 else if (Model%mraerosol) then @@ -1421,7 +1424,7 @@ subroutine gfs_interstitial_phys_reset (Interstitial, Model) ! ! 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 & + .or. Model%imp_physics == Model%imp_physics_tempo .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 c4de321ca..6e6f8e90c 100644 --- a/ccpp/data/CCPP_typedefs.meta +++ b/ccpp/data/CCPP_typedefs.meta @@ -1128,7 +1128,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_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_tempo_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 @@ -1220,7 +1220,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_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_tempo_microphysics_scheme) [dry] standard_name = flag_nonzero_land_surface_fraction long_name = flag indicating presence of some land surface area fraction @@ -1711,7 +1711,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_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_tempo_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 @@ -1967,7 +1967,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_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_tempo_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 9ef11201b..79b740047 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -15,6 +15,7 @@ module GFS_typedefs use module_radsw_parameters, only: topfsw_type, sfcfsw_type use module_radlw_parameters, only: topflw_type, sfcflw_type + use module_mp_tempo_params, only: ty_tempo_cfg use module_ozphys, only: ty_ozphys use module_h2ophys, only: ty_h2ophys use land_iau_mod, only: land_iau_external_data_type, land_iau_control_type, & @@ -949,6 +950,7 @@ module GFS_typedefs integer :: imp_physics !< choice of microphysics scheme integer :: imp_physics_gfdl = 11 !< choice of GFDL microphysics scheme integer :: imp_physics_thompson = 8 !< choice of Thompson microphysics scheme + integer :: imp_physics_tempo = 88 !< choice of TEMPO microphysics scheme integer :: imp_physics_wsm6 = 6 !< choice of WSMG microphysics scheme integer :: imp_physics_zhao_carr = 99 !< choice of Zhao-Carr microphysics scheme integer :: imp_physics_zhao_carr_pdf = 98 !< choice of Zhao-Carr microphysics scheme with PDF clouds @@ -1033,6 +1035,7 @@ module GFS_typedefs !--- Thompson's microphysical parameters logical :: ltaerosol !< flag for aerosol version logical :: mraerosol !< flag for merra2_aerosol_aware + logical :: lthailaware !< flag for TEMPO hail-aware logical :: lradar !< flag for radar reflectivity real(kind=kind_phys) :: nsfullradar_diag!< seconds between resetting radar reflectivity calculation real(kind=kind_phys) :: ttendlim !< temperature tendency limiter per time step in K/s @@ -1041,6 +1044,7 @@ module GFS_typedefs real(kind=kind_phys) :: dt_inner !< time step for the inner loop in s logical :: sedi_semi !< flag for semi Lagrangian sedi of rain integer :: decfl !< deformed CFL factor + type(ty_tempo_cfg) :: tempo_cfg !< Thompson MP configuration information. logical :: thompson_mp_is_init=.false. !< Local scheme initialization flag !--- GFDL microphysical paramters @@ -3290,7 +3294,9 @@ subroutine coupling_create (Coupling, Model) endif !--- needed for Thompson's aerosol option - if(Model%imp_physics == Model%imp_physics_thompson .and. (Model%ltaerosol .or. Model%mraerosol)) then + if((Model%imp_physics == Model%imp_physics_thompson .or. & + Model%imp_physics == Model%imp_physics_tempo) .and. & + (Model%ltaerosol .or. Model%mraerosol)) then allocate (Coupling%nwfa2d (IM)) allocate (Coupling%nifa2d (IM)) Coupling%nwfa2d = clear_val @@ -3617,6 +3623,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- Thompson microphysical parameters logical :: ltaerosol = .false. !< flag for aerosol version logical :: mraerosol = .false. !< flag for merra2_aerosol_aware + logical :: lthailaware = .false. !< flag for TEMPO hail-aware logical :: lradar = .false. !< flag for radar reflectivity real(kind=kind_phys) :: nsfullradar_diag = -999.0 !< seconds between resetting radar reflectivity calculation, set to <0 for every time step real(kind=kind_phys) :: ttendlim = -999.0 !< temperature tendency limiter, set to <0 to deactivate @@ -4128,8 +4135,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & mg_do_graupel, mg_do_hail, mg_nccons, mg_nicons, mg_ngcons, & mg_ncnst, mg_ninst, mg_ngnst, sed_supersat, do_sb_physics, & mg_alf, mg_qcmin, mg_do_ice_gmao, mg_do_liq_liu, & - ltaerosol, lradar, nsfullradar_diag, lrefres, ttendlim, & - ext_diag_thompson, dt_inner, lgfdlmprad, & + ltaerosol, lthailaware, lradar, nsfullradar_diag, lrefres, & + ttendlim, ext_diag_thompson, dt_inner, lgfdlmprad, & sedi_semi, decfl, & nssl_cccn, nssl_alphah, nssl_alphahl, & nssl_alphar, nssl_ehw0, nssl_ehlw0, & @@ -4791,6 +4798,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- Thompson MP parameters Model%ltaerosol = ltaerosol Model%mraerosol = mraerosol + Model%lthailaware = lthailaware if (Model%ltaerosol .and. Model%mraerosol) then write(0,*) 'Logic error: Only one Thompson aerosol option can be true, either ltaerosol or mraerosol)' stop @@ -4806,6 +4814,16 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & endif Model%sedi_semi = sedi_semi Model%decfl = decfl + +!--- TEMPO MP parameters + ! DJS to Anders: Maybe we put more of these nml options into the TEMPO configuration type? + Model%tempo_cfg%aerosol_aware = (ltaerosol .or. mraerosol) + Model%tempo_cfg%hail_aware = lthailaware + if (Model%ltaerosol .and. Model%mraerosol) then + write(0,*) 'Logic error: Only one TEMPO aerosol option can be true, either ltaerosol or mraerosol)' + stop + end if + !--- F-A MP parameters Model%rhgrd = rhgrd Model%spec_adv = spec_adv @@ -4909,7 +4927,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%exticeden = exticeden if (Model%exticeden .and. & (Model%imp_physics /= Model%imp_physics_gfdl .and. Model%imp_physics /= Model%imp_physics_thompson .and. & - Model%imp_physics /= Model%imp_physics_nssl )) then + Model%imp_physics /= Model%imp_physics_nssl .and. Model%imp_physics /= Model%imp_physics_tempo)) then !see GFS_MP_generic_post.F90; exticeden is only compatible with GFDL, !Thompson, or NSSL MP print *,' Using exticeden = T is only valid when using GFDL, Thompson, or NSSL microphysics.' @@ -5840,8 +5858,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- BEGIN CODE FROM COMPNS_PHYSICS !--- shoc scheme if (do_shoc) then - if (Model%imp_physics == Model%imp_physics_thompson) then - print *,'SHOC is not currently compatible with Thompson MP -- shutting down' + if ((Model%imp_physics == Model%imp_physics_thompson) .or. & + (Model%imp_physics == Model%imp_physics_tempo)) then + print *,'SHOC is not currently compatible with Thompson/TEMPO MP -- shutting down' stop endif Model%nshoc_3d = 3 @@ -6201,7 +6220,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ' num_p2d =',Model%num_p2d - elseif (Model%imp_physics == Model%imp_physics_thompson) then !Thompson microphysics + elseif (Model%imp_physics == Model%imp_physics_thompson .or. & + Model%imp_physics == Model%imp_physics_tempo) then !Thompson/TEMPO microphysics Model%npdf3d = 0 Model%num_p3d = 3 Model%num_p2d = 1 @@ -6218,9 +6238,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & print *,' Thompson MP requires effr_in to be set to .true. - job aborted' stop end if - if (Model%me == Model%master) print *,' Using Thompson double moment microphysics', & + if (Model%me == Model%master) print *,' Using Thompson/TEMPO double moment microphysics', & ' ltaerosol = ',Model%ltaerosol, & ' mraerosol = ',Model%mraerosol, & + ' lthailaware = ',Model%lthailaware, & ' ttendlim =',Model%ttendlim, & ' ext_diag_thompson =',Model%ext_diag_thompson, & ' dt_inner =',Model%dt_inner, & @@ -6775,10 +6796,12 @@ subroutine control_print(Model) print *, ' wminco : ', Model%wminco print *, ' ' endif - if (Model%imp_physics == Model%imp_physics_wsm6 .or. Model%imp_physics == Model%imp_physics_thompson) then + if ((Model%imp_physics == Model%imp_physics_wsm6) .or. (Model%imp_physics == Model%imp_physics_thompson) .or. & + (Model%imp_physics == Model%imp_physics_tempo)) then print *, ' Thompson microphysical parameters' print *, ' ltaerosol : ', Model%ltaerosol print *, ' mraerosol : ', Model%mraerosol + print *, ' lthailaware : ', Model%lthailaware print *, ' lradar : ', Model%lradar print *, ' nsfullradar_diag : ', Model%nsfullradar_diag print *, ' lrefres : ', Model%lrefres diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index 0037163db..dba837c0a 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -3219,7 +3219,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .and. (flag_for_aerosol_physics .or. do_merra2_aerosol_awareness)) + active = ((control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_tempo_microphysics_scheme) .and. (flag_for_aerosol_physics .or. do_merra2_aerosol_awareness)) [nifa2d] standard_name = tendency_of_nonhygroscopic_ice_nucleating_aerosols_at_surface_adjacent_layer long_name = instantaneous ice-friendly sfc aerosol source @@ -3227,7 +3227,7 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys - active = (control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .and. (flag_for_aerosol_physics .or. do_merra2_aerosol_awareness)) + active = ((control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_tempo_microphysics_scheme) .and. (flag_for_aerosol_physics .or. do_merra2_aerosol_awareness)) [ebu_smoke] standard_name = ebu_smoke long_name = buffer of vertical fire emission @@ -4401,6 +4401,12 @@ units = flag dimensions = () type = integer +[imp_physics_tempo] + standard_name = identifier_for_tempo_microphysics_scheme + long_name = choice of TEMPO microphysics scheme + units = flag + dimensions = () + type = integer [imp_physics_wsm6] standard_name = identifier_for_wsm6_microphysics_scheme long_name = choice of WSM6 microphysics scheme @@ -4925,6 +4931,12 @@ units = flag dimensions = () type = logical +[lthailaware] + standard_name = flag_for_hail_physics + long_name = flag for hail physics + units = flag + dimensions = () + type = logical [mraerosol] standard_name = do_merra2_aerosol_awareness long_name = flag for merra2 aerosol-aware physics for example the thompson microphysics @@ -4975,6 +4987,12 @@ units = count dimensions = () type = integer +[tempo_cfg] + standard_name = configuration_for_TEMPO_microphysics + long_name = configuration information for TEMPO microphysics + units = mixed + dimensions = () + type = ty_tempo_cfg [thompson_mp_is_init] standard_name = flag_for_thompson_mp_scheme_initialization long_name = flag carrying scheme initialization status @@ -10248,6 +10266,7 @@ relative_path = ../physics/physics/ dependencies = hooks/machine.F,hooks/physcons.F90 dependencies = Radiation/RRTMG/radlw_param.f,Radiation/RRTMG/radsw_param.f + dependencies = MP/TEMPO/TEMPO/module_mp_tempo_params.F90 dependencies = photochem/module_ozphys.F90,photochem/module_h2ophys.F90 dependencies = SFC_Models/Land/Noahmp/lnd_iau_mod.F90,MP/GFDL/GFDL_parse_tracers.F90 diff --git a/ccpp/driver/GFS_diagnostics.F90 b/ccpp/driver/GFS_diagnostics.F90 index 9b2757703..61022a3ff 100644 --- a/ccpp/driver/GFS_diagnostics.F90 +++ b/ccpp/driver/GFS_diagnostics.F90 @@ -3852,7 +3852,7 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ! Cloud effective radii from Microphysics if (Model%imp_physics == Model%imp_physics_thompson .or. Model%imp_physics == Model%imp_physics_fer_hires .or. & - Model%imp_physics == Model%imp_physics_nssl ) then + Model%imp_physics == Model%imp_physics_nssl .or. Model%imp_physics == Model%imp_physics_tempo ) then idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'cleffr' diff --git a/ccpp/driver/GFS_restart.F90 b/ccpp/driver/GFS_restart.F90 index 2af537395..fcca0afd9 100644 --- a/ccpp/driver/GFS_restart.F90 +++ b/ccpp/driver/GFS_restart.F90 @@ -140,7 +140,8 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, num2d = num2d + 2 endif ! Thompson aerosol-aware - if (Model%imp_physics == Model%imp_physics_thompson .and. Model%ltaerosol) then + if ((Model%imp_physics == Model%imp_physics_thompson .or. & + Model%imp_physics == Model%imp_physics_tempo) .and. (Model%ltaerosol)) then num2d = num2d + 2 endif if (Model%do_cap_suppress .and. Model%num_dfi_radar>0) then @@ -421,7 +422,8 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, Restart(idx)%data%var2 => Sfcprop%rainncprv(:) endif ! Thompson aerosol-aware - if (Model%imp_physics == Model%imp_physics_thompson .and. Model%ltaerosol) then + if ((Model%imp_physics == Model%imp_physics_thompson .or. & + Model%imp_physics == Model%imp_physics_tempo) .and. Model%ltaerosol) then idx = idx + 1 Restart(idx)%name = 'thompson_2d_nwfa2d' Restart(idx)%axes = 2 diff --git a/ccpp/physics b/ccpp/physics index 65a25474e..6e1a2ba48 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 65a25474e96977737532f86d199c39dc74b5dc28 +Subproject commit 6e1a2ba4812f22810421ae27408a6f9665330417 diff --git a/ccpp/suites/suite_FV3_GFS_v17_p8_ugwpv1_tempo.xml b/ccpp/suites/suite_FV3_GFS_v17_p8_ugwpv1_tempo.xml new file mode 100644 index 000000000..cd1d1aff5 --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v17_p8_ugwpv1_tempo.xml @@ -0,0 +1,96 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_rrtmg_pre + GFS_radiation_surface + rad_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + 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 + noahmpdrv + sfc_land + 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 + ugwpv1_gsldrag + ugwpv1_gsldrag_post + GFS_GWD_generic_post + GFS_suite_stateout_update + + + + + GFS_photochemistry + 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 + mp_tempo_pre + + + mp_tempo + + + mp_tempo_post + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + GFS_physics_post + + + +