diff --git a/.gitmodules b/.gitmodules
index 22c723ac1..9cd543b82 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -8,8 +8,8 @@
branch = main
[submodule "ccpp/physics"]
path = ccpp/physics
- url = https://github.com/ufs-community/ccpp-physics
- branch = ufs/dev
+ url = https://github.com/AndersJensen-NOAA/ccpp-physics
+ branch = tempo
[submodule "upp"]
path = upp
url = https://github.com/NOAA-EMC/UPP
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cdf597df2..2a564e1a2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -23,6 +23,10 @@ endif()
###############################################################################
set(MPI ON)
+# DJS asks Anders: These two PP directives are needed in TEMPO. We should avoid
+# using PP directives if possible, so let's plan to remove them if feasible.
+set(OLD_MPTBLS ON)
+set(ccpp_default ON)
add_subdirectory(ccpp)
###############################################################################
diff --git a/ccpp/CMakeLists.txt b/ccpp/CMakeLists.txt
index e9a5d56c7..bd55152d3 100644
--- a/ccpp/CMakeLists.txt
+++ b/ccpp/CMakeLists.txt
@@ -49,6 +49,12 @@ add_definitions(-DFV3)
if(MPI)
add_definitions(-DMPI)
endif()
+if (OLD_MPTBLS)
+ add_definitions(-DOLD_MPTBLS)
+endif()
+if (ccpp_default)
+ add_definitions(-Dccpp_default)
+endif()
#------------------------------------------------------------------------------
# Set flag for 32bit dynamics build
diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py
index 5e91f3ef6..64c9508c9 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,10 @@
'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/tempo/module_mp_tempo_params.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 dd38035f7..92fcaedf2 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, &
@@ -941,6 +942,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
@@ -1025,6 +1027,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 hail-aware version
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
@@ -1033,6 +1036,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 :: thpsnmp_is_init !< Local scheme initialization flag
!--- GFDL microphysical paramters
@@ -3256,13 +3260,13 @@ subroutine coupling_create (Coupling, Model)
Coupling%spp_wts_cu_deep = clear_val
endif
- !--- needed for Thompson's aerosol option
- if(Model%imp_physics == Model%imp_physics_thompson .and. (Model%ltaerosol .or. Model%mraerosol)) then
+ !--- needed for Thompson/TEMPO's aerosol option
+ 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
Coupling%nifa2d = clear_val
- endif
+ endif
if(Model%rrfs_sd) then
!--- needed for smoke aerosol option
@@ -3584,6 +3588,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 hail-aware version
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
@@ -4090,8 +4095,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, &
@@ -4749,6 +4754,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
@@ -4764,6 +4770,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
@@ -4866,11 +4882,11 @@ 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_nssl )) then
+ (Model%imp_physics /= Model%imp_physics_gfdl .and. Model%imp_physics /= Model%imp_physics_thompson .and. &
+ Model%imp_physics /= Model%imp_physics_tempo .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
- print *,' Using exticeden = T is only valid when using GFDL, Thompson, or NSSL microphysics.'
+ print *,' Using exticeden = T is only valid when using GFDL, Thompson, TEMPO, or NSSL microphysics.'
stop
end if
! GFDL surface layer options
@@ -5786,8 +5802,8 @@ 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 or TEMPO MP -- shutting down'
stop
endif
Model%nshoc_3d = 3
@@ -6147,7 +6163,7 @@ 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
@@ -6167,6 +6183,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
if (Model%me == Model%master) print *,' Using Thompson 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, &
@@ -6719,10 +6736,11 @@ 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
- print *, ' Thompson microphysical parameters'
+ 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/TEMPO 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 719cae26c..7c1b19cd9 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
@@ -4861,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
@@ -4911,6 +4923,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
[thpsnmp_is_init]
standard_name = flag_for_thompson_mp_scheme_initialization
long_name = flag carrying scheme initialization status
@@ -10114,6 +10132,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 a7fe01c4d..2f44810c6 160000
--- a/ccpp/physics
+++ b/ccpp/physics
@@ -1 +1 @@
-Subproject commit a7fe01c4da43955de38bac8c39667478cd03c711
+Subproject commit 2f44810c6bca9e141b6488df4278ff8b354e3efb
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..06cd3d6ae
--- /dev/null
+++ b/ccpp/suites/suite_FV3_GFS_v17_p8_ugwpv1_tempo.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+ 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_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
+
+
+
+
diff --git a/ccpp/suites/suite_osprey.xml b/ccpp/suites/suite_osprey.xml
new file mode 100644
index 000000000..336f0a386
--- /dev/null
+++ b/ccpp/suites/suite_osprey.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
+ sgscloud_radpre
+ GFS_rrtmg_pre
+ GFS_radiation_surface
+ rad_sw_pre
+ rrtmg_sw
+ rrtmg_sw_post
+ rrtmg_lw
+ sgscloud_radpost
+ 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
+
+
+
+ mynnsfc_wrapper
+ GFS_surface_loop_control_part1
+ sfc_nst_pre
+ sfc_nst
+ sfc_nst_post
+ noahmpdrv
+ sfc_sice
+ GFS_surface_loop_control_part2
+
+
+
+ GFS_surface_composites_post
+ sfc_diag
+ sfc_diag_post
+ GFS_surface_generic_post
+ mynnedmf_wrapper
+ GFS_GWD_generic_pre
+ ugwpv1_gsldrag
+ ugwpv1_gsldrag_post
+ GFS_GWD_generic_post
+ GFS_suite_stateout_update
+ h2ophys
+ get_phi_fv3
+ GFS_suite_interstitial_3
+ GFS_DCNV_generic_pre
+ cu_c3_driver_pre
+ cu_c3_driver
+ GFS_DCNV_generic_post
+ GFS_SCNV_generic_pre
+ 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
+ cu_c3_driver_post
+ maximum_hourly_diagnostics
+
+
+
+
+ GFS_stochastics
+ GFS_physics_post
+
+
+
+