From 2b9dbcfeea49e95bc2a85495fe6086ea7e320143 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 31 Jan 2025 21:26:43 +0000 Subject: [PATCH 1/9] Initial TEMPO commit --- ccpp/config/ccpp_prebuild_config.py | 8 ++ ccpp/data/GFS_typedefs.F90 | 18 ++-- ccpp/data/GFS_typedefs.meta | 12 +++ ccpp/physics | 2 +- .../suite_FV3_GFS_v17_p8_ugwpv1_tempo.xml | 94 +++++++++++++++++++ 5 files changed, 127 insertions(+), 7 deletions(-) create mode 100644 ccpp/suites/suite_FV3_GFS_v17_p8_ugwpv1_tempo.xml diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 5e91f3ef6..69a2431bc 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', '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' : '', @@ -174,6 +179,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/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 4614c087b..23457dc7e 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, & @@ -943,6 +944,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 @@ -1035,6 +1037,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 @@ -4874,7 +4877,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.' @@ -5793,8 +5796,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 @@ -6154,7 +6158,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 @@ -6171,7 +6176,7 @@ 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, & ' ttendlim =',Model%ttendlim, & @@ -6728,7 +6733,8 @@ 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 diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index bd0e34975..a6217bd4d 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -4337,6 +4337,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 @@ -4911,6 +4917,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 diff --git a/ccpp/physics b/ccpp/physics index 50a7846db..fb11da522 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 50a7846db918ec01fb001afb6a9dd8c76d5c0070 +Subproject commit fb11da522d31cb44c1f97c37d80c9d910f927c1a 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..22f8a402d --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v17_p8_ugwpv1_tempo.xml @@ -0,0 +1,94 @@ + + + + + + + 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 + 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 + + + + From 7db11e77455375122117ebfcf58253d4bc073238 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Sat, 1 Feb 2025 23:58:31 +0000 Subject: [PATCH 2/9] Changes for TEMPO to be called with imp_physics option 88 --- ccpp/data/CCPP_typedefs.F90 | 13 ++++++++----- ccpp/data/CCPP_typedefs.meta | 8 ++++---- ccpp/physics | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/ccpp/data/CCPP_typedefs.F90 b/ccpp/data/CCPP_typedefs.F90 index 1f5deaec2..1d45700b0 100644 --- a/ccpp/data/CCPP_typedefs.F90 +++ b/ccpp/data/CCPP_typedefs.F90 @@ -818,7 +818,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)) @@ -906,7 +906,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 @@ -959,7 +960,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 @@ -997,7 +999,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 @@ -1409,7 +1412,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 e8ec56b8d..f0f2068c4 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/physics b/ccpp/physics index fb11da522..a42db1d50 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit fb11da522d31cb44c1f97c37d80c9d910f927c1a +Subproject commit a42db1d5066fe2c2e0eada2d1d5a184805146075 From d0f07536e73f7cb31937b4e7d97563d2333220e6 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Sun, 2 Feb 2025 16:57:40 +0000 Subject: [PATCH 3/9] Support for TEMPO aerosol-aware in CCPP --- ccpp/data/GFS_typedefs.F90 | 4 +++- ccpp/data/GFS_typedefs.meta | 4 ++-- ccpp/driver/GFS_diagnostics.F90 | 2 +- ccpp/driver/GFS_restart.F90 | 6 ++++-- ccpp/physics | 2 +- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 23457dc7e..23d32239d 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -3264,7 +3264,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 diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index a6217bd4d..51d7a282d 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -3155,7 +3155,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 @@ -3163,7 +3163,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 diff --git a/ccpp/driver/GFS_diagnostics.F90 b/ccpp/driver/GFS_diagnostics.F90 index d2a8bdf5a..a637f4260 100644 --- a/ccpp/driver/GFS_diagnostics.F90 +++ b/ccpp/driver/GFS_diagnostics.F90 @@ -5044,7 +5044,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 d82a1b89f..76ff662bf 100644 --- a/ccpp/driver/GFS_restart.F90 +++ b/ccpp/driver/GFS_restart.F90 @@ -145,7 +145,8 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & Restart%num2d = Restart%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 Restart%num2d = Restart%num2d + 2 endif if (Model%do_cap_suppress .and. Model%num_dfi_radar>0) then @@ -458,7 +459,8 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & enddo 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 num = num + 1 Restart%name2d(num) = 'thompson_2d_nwfa2d' do nb = 1,nblks diff --git a/ccpp/physics b/ccpp/physics index a42db1d50..dcda3f987 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit a42db1d5066fe2c2e0eada2d1d5a184805146075 +Subproject commit dcda3f987c0dd03f46086c94dbcaddd87309d9a5 From 858ac8412a7691633be900f9574aeced2e4812cf Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Mon, 3 Feb 2025 01:01:50 +0000 Subject: [PATCH 4/9] Couple TEMPO to radiation --- ccpp/data/GFS_typedefs.F90 | 4 ++-- ccpp/physics | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 23d32239d..2ad59222e 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -6160,8 +6160,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ' num_p2d =',Model%num_p2d - elseif ((Model%imp_physics == Model%imp_physics_thompson) .or. & - (Model%imp_physics == Model%imp_physics_tempo)) then !Thompson/TEMPO 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 diff --git a/ccpp/physics b/ccpp/physics index dcda3f987..a2fc440be 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit dcda3f987c0dd03f46086c94dbcaddd87309d9a5 +Subproject commit a2fc440be9086594cb5bdc45457c79f79f15e70c From 41350c1175241f508156d3117b60f57a71f9465a Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Mon, 3 Feb 2025 17:17:27 +0000 Subject: [PATCH 5/9] TEMPO radiation buxfix --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index a2fc440be..d8d35a632 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit a2fc440be9086594cb5bdc45457c79f79f15e70c +Subproject commit d8d35a632089e7ad1825a600daa37ae14260e8a5 From a64b4b0c06529ddd793b4d4d345b72987e1e19a8 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Mon, 3 Feb 2025 20:52:28 +0000 Subject: [PATCH 6/9] Support for TEMPO hail-aware --- ccpp/data/GFS_typedefs.F90 | 19 +++++++++++++++++-- ccpp/data/GFS_typedefs.meta | 7 +++++++ ccpp/physics | 2 +- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index 2ad59222e..5e6cc1d73 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -1029,6 +1029,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 @@ -3593,6 +3594,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 @@ -4100,8 +4102,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, & @@ -4761,6 +4763,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 @@ -4776,6 +4779,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 @@ -6181,6 +6194,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & 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, & @@ -6740,6 +6754,7 @@ subroutine control_print(Model) 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 51d7a282d..4b326c3cc 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -4867,6 +4867,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 @@ -10145,6 +10151,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/physics b/ccpp/physics index d8d35a632..f46ecf217 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit d8d35a632089e7ad1825a600daa37ae14260e8a5 +Subproject commit f46ecf217bc3d2d70630d53b064649f087be8b58 From 9373e48efbea22bd3bf029a57f11c7efe6924269 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 4 Feb 2025 03:16:50 +0000 Subject: [PATCH 7/9] hail-aware variables and renamed module variables --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index f46ecf217..e1b64e470 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit f46ecf217bc3d2d70630d53b064649f087be8b58 +Subproject commit e1b64e470bb04df67d05806f4a2c220dd26594a4 From 6fb354c5eef3f98bdd83741bd4cca60e67802c6b Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 4 Feb 2025 15:54:31 +0000 Subject: [PATCH 8/9] Update pointer to ccpp --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index e1b64e470..d56890024 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit e1b64e470bb04df67d05806f4a2c220dd26594a4 +Subproject commit d568900240e8cd13778817372899da3a4e67c946 From 034fa88d96aaf5569e75d3663026be2faadafae1 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 4 Feb 2025 16:13:11 +0000 Subject: [PATCH 9/9] update to NCAR TEMPO repo --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index d56890024..857cd4045 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit d568900240e8cd13778817372899da3a4e67c946 +Subproject commit 857cd4045b57c379a2f781f708a1bd03fa5ebe13