From cb187378ec161b50d27aeaa36774d18a6131c479 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Fri, 9 Jan 2026 15:19:29 +0000 Subject: [PATCH 01/21] initial connection of tempo microphysics to WRF --- Makefile | 16 ++++++++++++++++ arch/Externals.cfg | 8 ++++++++ clean | 5 +++++ phys/Makefile | 34 ++++++++++++++++++++++++++++++++-- 4 files changed, 61 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 022538c088..ec8e8437ae 100644 --- a/Makefile +++ b/Makefile @@ -138,6 +138,22 @@ wrf : framework_only echo "MYNN-EDMF submodule files populating WRF directories" ; \ echo "------------------------------------------------------------------------------" ; \ fi + @if [ \( ! -f phys/module_mp_tempo_driver.F90 \) -o \( ! -f phys/module_mp_tempo_main.F90 \) -o \ + \( ! -f phys/module_mp_tempo_init.F90 \) -o \( ! -f phys/module_mp_tempo_aerosols.F90 \) -o \ + \( ! -f phys/module_mp_tempo_ml.F90 \) -o \( ! -f phys/module_mp_tempo_diags.F90 \) -o \ + \( ! -f phys/module_mp_tempo_utils.F90 \) -o \( ! -f phys/module_mp_tempo_params.F90 \) -o \ + \( ! -f phys/module_mp_tempo_cfgs.F90 \) ] ; then \ + echo " " ; \ + echo "------------------------------------------------------------------------------" ; \ + echo "Error Error Error TEMPO submodule files not populating WRF directories" ; \ + echo "------------------------------------------------------------------------------" ; \ + echo " " ; \ + exit 31 ; \ + else \ + echo "------------------------------------------------------------------------------" ; \ + echo "TEMPO submodule files populating WRF directories" ; \ + echo "------------------------------------------------------------------------------" ; \ + fi if [ $(WRF_CHEM) -eq 1 ] ; then $(MAKE) MODULE_DIRS="$(ALL_MODULES)" chemics ; fi if [ $(WRF_EM_CORE) -eq 1 ] ; then $(MAKE) MODULE_DIRS="$(ALL_MODULES)" em_core ; fi if [ $(WRF_HYDRO) -eq 1 ] ; then $(MAKE) MODULE_DIRS="$(ALL_MODULES)" wrf_hydro ; fi diff --git a/arch/Externals.cfg b/arch/Externals.cfg index 48cd9b11e0..bd13543a11 100644 --- a/arch/Externals.cfg +++ b/arch/Externals.cfg @@ -6,5 +6,13 @@ tag = 20240626-MPASv8.2 required = True +[TEMPO-MP] +local_path = ./phys/TEMPO +protocol = git +repo_url = https://github.com/AndersJensen-NOAA/TEMPO.git +tag = v3.0.0_d + +required = True + [externals_description] schema_version = 1.0.0 diff --git a/clean b/clean index bf063ba4d1..ddb5b5bf33 100755 --- a/clean +++ b/clean @@ -85,6 +85,11 @@ if ( "$arg" == '-a' || "$arg" == '-aa' ) then run/MPTABLE.TBL /bin/rm -f phys/module_bl_mynnedmf.F phys/module_bl_mynnedmf_common.F \ phys/module_bl_mynnedmf_driver.F + /bin/rm -f phys/module_mp_tempo_cfgs.F90 phys/module_mp_tempo_params.F90 \ + phys/module_mp_tempo_utils.F90 phys/module_mp_tempo_diags.F90 \ + phys/module_mp_tempo_ml.F90 phys/module_mp_tempo_init.F90 \ + phys/module_mp_tempo_aerosols.F90 phys/module_mp_tempo_main.F90 \ + phys/module_mp_tempo_driver.F90 endif endif diff --git a/phys/Makefile b/phys/Makefile index 5eda61c111..cd2fec18e9 100644 --- a/phys/Makefile +++ b/phys/Makefile @@ -245,6 +245,17 @@ PHYSMMM_MODULES = \ physics_mmm/bl_gwdo.o \ physics_mmm/bl_ysu.o +TEMPO_MODULES = \ + module_mp_tempo_cfgs.o \ + module_mp_tempo_params.o \ + module_mp_tempo_utils.o \ + module_mp_tempo_diags.o \ + module_mp_tempo_ml.o \ + module_mp_tempo_init.o \ + module_mp_tempo_aerosols.o \ + module_mp_tempo_main.o \ + module_mp_tempo_driver.o + OBJS = LIBTARGET = physics @@ -254,11 +265,11 @@ $(LIBTARGET) : (cd .. && ./tools/manage_externals/checkout_externals --externals ./arch/Externals.cfg) $(MAKE) $(J) non_nmm ; \ $(AR) $(ARFLAGS) ../main/$(LIBWRFLIB) $(MODULES) $(OBJS) \ - $(FIRE_MODULES) $(DIAGNOSTIC_MODULES_EM) $(PHYSMMM_MODULES) + $(FIRE_MODULES) $(DIAGNOSTIC_MODULES_EM) $(PHYSMMM_MODULES) $(TEMPO_MODULES) include ../configure.wrf -non_nmm : $(MODULES) $(FIRE_MODULES) $(OBJS) $(DIAGNOSTIC_MODULES_EM) +non_nmm : $(MODULES) $(FIRE_MODULES) $(OBJS) $(DIAGNOSTIC_MODULES_EM) $(TEMPO_MODULES) submodules : @if [ \( ! -f module_sf_noahmpdrv.F \) -o \( ! -f module_sf_noahmp_glacier.F \) -o \ @@ -283,6 +294,25 @@ submodules : else \ echo No action required for MYNN-EDMF submodule ; \ fi + @if [ \( ! -f module_mp_tempo_driver.F90 \) -o \( ! -f module_mp_tempo_main.F90 \) -o \ + \( ! -f module_mp_tempo_init.F90 \) -o \( ! -f module_mp_tempo_aerosols.F90 \) -o \ + \( ! -f module_mp_tempo_ml.F90 \) -o \( ! -f modulemp_tempo_diags.F90 \) -o \ + \( ! -f module_mp_tempo_utils.F90 \) -o \( ! -f module_mp_tempo_params.F90 \) -o \ + \( ! -f module_mp_tempo_cfgs.F90 \) ] ; then \ + echo Pulling in TEMPO submodule ; \ + ( cd .. ; git submodule update --init --recursive ) ; \ + ln -sf TEMPO/src/module_mp_tempo_cfgs.F90 module_mp_tempo_cfgs.F90 ; \ + ln -sf TEMPO/src/module_mp_tempo_params.F90 module_mp_tempo_params.F90 ; \ + ln -sf TEMPO/src/module_mp_tempo_utils.F90 module_mp_tempo_utils.F90 ; \ + ln -sf TEMPO/src/module_mp_tempo_diags.F90 module_mp_tempo_diags.F90 ; \ + ln -sf TEMPO/src/module_mp_tempo_ml.F90 module_mp_tempo_ml.F90 ; \ + ln -sf TEMPO/src/module_mp_tempo_init.F90 module_mp_tempo_init.F90 ; \ + ln -sf TEMPO/src/module_mp_tempo_aerosols.F90 module_mp_tempo_aerosols.F90 ; \ + ln -sf TEMPO/src/module_mp_tempo_main.F90 module_mp_tempo_main.F90 ; \ + ln -sf TEMPO/src/module_mp_tempo_driver.F90 module_mp_tempo_driver.F90 ; \ + else \ + echo No action required for TEMPO submodule ; \ + fi clean: @ echo 'use the clean script' From e2450bc862cecd73392b445595454963817b5b6d Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Fri, 9 Jan 2026 18:25:53 +0000 Subject: [PATCH 02/21] add TEMPO package and optional packages and connect to phys_init --- Registry/Registry.EM_COMMON | 7 +++++-- phys/module_physics_init.F | 7 +++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Registry/Registry.EM_COMMON b/Registry/Registry.EM_COMMON index 4d133c9bfa..c5f2338b01 100644 --- a/Registry/Registry.EM_COMMON +++ b/Registry/Registry.EM_COMMON @@ -2427,7 +2427,8 @@ rconfig integer nssl_3moment namelist,physics 1 0 rconfig integer nssl_density_on namelist,physics 1 -1 rh "NSSL graupel/hail density flag" "" "" rconfig integer nssl_ssat_output namelist,physics 1 0 rh "NSSL ssat output flag" "" "" - +rconfig integer tempo_aerosolaware namelist,physics 1 1 rh "TEMPO aerosol-aware flag" "" "" +rconfig integer tempo_hailware namelist,physics 1 1 rh "TEMPO hail-aware flag" "" "" rconfig integer CCNTY namelist,physics 1 2 rh "Aerosol background type for NTU microphysics" "" "" @@ -3040,6 +3041,7 @@ package wdm7scheme mp_physics==26 - moist:qv,qc package udmscheme mp_physics==27 - moist:qv,qc,qr,qi,qs,qg,qh;scalar:qnn,qnc,qnr;state:re_cloud,re_ice,re_snow package thompsonaero mp_physics==28 - moist:qv,qc,qr,qi,qs,qg;scalar:qni,qnr,qnc,qnwfa,qnifa,qnbca;state:re_cloud,re_ice,re_snow,qnwfa2d,qnifa2d,taod5503d,taod5502d package thompsongh mp_physics==38 - moist:qv,qc,qr,qi,qs,qg;scalar:qni,qnr,qnc,qng,qvolg,qnwfa,qnifa,qnbca;state:re_cloud,re_ice,re_snow,qnwfa2d,qnifa2d,taod5503d,taod5502d +package tempo mp_physics==88 - moist:qv,qc,qr,qi,qs,qg;scalar:qni,qnr;state:re_cloud,re_ice,re_snow package p3_1category mp_physics==50 - moist:qv,qc,qr,qi;scalar:qni,qnr,qir,qib;state:re_cloud,re_ice,vmi3d,rhopo3d,di3d,refl_10cm,th_old,qv_old package p3_1category_nc mp_physics==51 - moist:qv,qc,qr,qi;scalar:qnc,qni,qnr,qir,qib;state:re_cloud,re_ice,vmi3d,rhopo3d,di3d,refl_10cm,th_old,qv_old package p3_2category mp_physics==52 - moist:qv,qc,qr,qi,qi2;scalar:qnc,qni,qnr,qir,qib,qni2,qir2,qib2;state:re_cloud,re_ice,vmi3d,rhopo3d,di3d,vmi3d_2,rhopo3d_2,di3d_2,refl_10cm,th_old,qv_old @@ -3062,7 +3064,8 @@ package nssl_graupelvol nssl_density_on==1 - scalar:qvol package nssl_hailvol nssl_density_on==2 - scalar:qvolg,qvolh package nssl_ssat_out nssl_ssat_output==1 - state:ssat package nssl_ssati_out nssl_ssat_output==2 - state:ssat,ssati - +package tempo_aerosol tempo_aerosolaware==1 - scalar:qnc,qnwfa,qnifa +package tempo_hail tempo_hailaware==1 - scalar:qng,qvolg package radar_refl compute_radar_ref==1 - state:refl_10cm,refd_max endif diff --git a/phys/module_physics_init.F b/phys/module_physics_init.F index 8f94e171e2..6d6e44a858 100644 --- a/phys/module_physics_init.F +++ b/phys/module_physics_init.F @@ -1004,6 +1004,7 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & (config_flags%ra_sw_physics .eq. goddardswscheme ) ) .and. & (config_flags%mp_physics .eq. THOMPSON .or. & config_flags%mp_physics .eq. THOMPSONAERO .or. & + config_flags%mp_physics .eq. TEMPO .or. & config_flags%mp_physics .eq. RCON_MP_SCHEME .or. & (config_flags%mp_physics .eq. NSSL_2MOM .and. config_flags%nssl_2moment_on == 1) .or. & config_flags%mp_physics .eq. WSM3SCHEME .or. & @@ -1040,6 +1041,7 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & IF (( config_flags%mp_physics == THOMPSON .OR. & config_flags%mp_physics == RCON_MP_SCHEME .OR. & config_flags%mp_physics == THOMPSONAERO .OR. & + config_flags%mp_physics == TEMPO .OR. & config_flags%mp_physics == WSM3SCHEME .OR. & config_flags%mp_physics == WSM5SCHEME .OR. & config_flags%mp_physics == WSM6SCHEME .OR. & @@ -4405,6 +4407,7 @@ SUBROUTINE mp_init(RAINNC,SNOWNC,GRAUPELNC,config_flags,restart,warm_rain, USE module_mp_wdm6 USE module_mp_wdm7 USE module_mp_udm + USE module_mp_tempo_init, only : tempo_init #if (WRFPLUS != 1) & !defined( VAR4D ) USE module_mp_nssl_2mom, only: nssl_2mom_init #endif @@ -4577,6 +4580,10 @@ SUBROUTINE mp_init(RAINNC,SNOWNC,GRAUPELNC,config_flags,restart,warm_rain, IMS=ims, IME=ime, JMS=jms, JME=jme, KMS=kms, KME=kme, & ITS=its, ITE=ite, JTS=jts, JTE=jte, KTS=kts, KTE=kte) + CASE (TEMPO) + CALL tempo_init(aerosolaware_flag=config_flags%tempo_aerosolaware, & + hailaware_flag=config_flags%tempo_hailaware) + CASE (MORR_TWO_MOMENT) CALL morr_two_moment_init( config_flags%morr_rimed_ice ) #if (EM_CORE==1) From b0fd1091f0047991ee9f5c4e34f6cdb117ad718f Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 9 Jan 2026 23:23:55 +0000 Subject: [PATCH 03/21] fix typo in Registry --- Registry/Registry.EM_COMMON | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Registry/Registry.EM_COMMON b/Registry/Registry.EM_COMMON index c5f2338b01..15ffa4652c 100644 --- a/Registry/Registry.EM_COMMON +++ b/Registry/Registry.EM_COMMON @@ -2428,7 +2428,7 @@ rconfig integer nssl_density_on namelist,physics 1 -1 rconfig integer nssl_ssat_output namelist,physics 1 0 rh "NSSL ssat output flag" "" "" rconfig integer tempo_aerosolaware namelist,physics 1 1 rh "TEMPO aerosol-aware flag" "" "" -rconfig integer tempo_hailware namelist,physics 1 1 rh "TEMPO hail-aware flag" "" "" +rconfig integer tempo_hailaware namelist,physics 1 1 rh "TEMPO hail-aware flag" "" "" rconfig integer CCNTY namelist,physics 1 2 rh "Aerosol background type for NTU microphysics" "" "" From 5ce548e7787d79f53ad9ccc7e2017bd1edc9f624 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 9 Jan 2026 23:24:48 +0000 Subject: [PATCH 04/21] move TEMPO objects to be with other MP objects --- phys/Makefile | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/phys/Makefile b/phys/Makefile index cd2fec18e9..74f0b820d6 100644 --- a/phys/Makefile +++ b/phys/Makefile @@ -97,6 +97,15 @@ MODULES = \ module_mp_etanew.o \ module_mp_fer_hires.o \ module_mp_thompson.o \ + module_mp_tempo_cfgs.o \ + module_mp_tempo_params.o \ + module_mp_tempo_utils.o \ + module_mp_tempo_diags.o \ + module_mp_tempo_ml.o \ + module_mp_tempo_init.o \ + module_mp_tempo_aerosols.o \ + module_mp_tempo_main.o \ + module_mp_tempo_driver.o \ module_mp_rcon.o \ module_fire_emis.o \ module_mp_SBM_polar_radar.o \ @@ -234,7 +243,7 @@ DIAGNOSTIC_MODULES_EM = \ module_diag_zld.o \ module_diag_trad_fields.o \ module_diag_solar.o - + PHYSMMM_MODULES = \ physics_mmm/sf_sfclayrev.o \ physics_mmm/cu_ntiedtke.o \ @@ -245,17 +254,6 @@ PHYSMMM_MODULES = \ physics_mmm/bl_gwdo.o \ physics_mmm/bl_ysu.o -TEMPO_MODULES = \ - module_mp_tempo_cfgs.o \ - module_mp_tempo_params.o \ - module_mp_tempo_utils.o \ - module_mp_tempo_diags.o \ - module_mp_tempo_ml.o \ - module_mp_tempo_init.o \ - module_mp_tempo_aerosols.o \ - module_mp_tempo_main.o \ - module_mp_tempo_driver.o - OBJS = LIBTARGET = physics @@ -265,11 +263,11 @@ $(LIBTARGET) : (cd .. && ./tools/manage_externals/checkout_externals --externals ./arch/Externals.cfg) $(MAKE) $(J) non_nmm ; \ $(AR) $(ARFLAGS) ../main/$(LIBWRFLIB) $(MODULES) $(OBJS) \ - $(FIRE_MODULES) $(DIAGNOSTIC_MODULES_EM) $(PHYSMMM_MODULES) $(TEMPO_MODULES) + $(FIRE_MODULES) $(DIAGNOSTIC_MODULES_EM) $(PHYSMMM_MODULES) include ../configure.wrf -non_nmm : $(MODULES) $(FIRE_MODULES) $(OBJS) $(DIAGNOSTIC_MODULES_EM) $(TEMPO_MODULES) +non_nmm : $(MODULES) $(FIRE_MODULES) $(OBJS) $(DIAGNOSTIC_MODULES_EM) submodules : @if [ \( ! -f module_sf_noahmpdrv.F \) -o \( ! -f module_sf_noahmp_glacier.F \) -o \ From e891c465773df49b87c062cc148b37de1462a27c Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 9 Jan 2026 23:26:18 +0000 Subject: [PATCH 05/21] TEMPO connection to physics init --- phys/module_physics_init.F | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/phys/module_physics_init.F b/phys/module_physics_init.F index 6d6e44a858..8b3ab9fe82 100644 --- a/phys/module_physics_init.F +++ b/phys/module_physics_init.F @@ -4407,6 +4407,7 @@ SUBROUTINE mp_init(RAINNC,SNOWNC,GRAUPELNC,config_flags,restart,warm_rain, USE module_mp_wdm6 USE module_mp_wdm7 USE module_mp_udm + USE module_mp_tempo_cfgs, only : ty_tempo_cfgs USE module_mp_tempo_init, only : tempo_init #if (WRFPLUS != 1) & !defined( VAR4D ) USE module_mp_nssl_2mom, only: nssl_2mom_init @@ -4452,6 +4453,8 @@ SUBROUTINE mp_init(RAINNC,SNOWNC,GRAUPELNC,config_flags,restart,warm_rain, INTEGER, INTENT(IN) :: num_sc ! G. Thompson REAL, DIMENSION(ims:ime,kms:kme,jms:jme, num_sc), INTENT(INOUT):: scalar ! G. Thompson + type(ty_tempo_cfgs) :: tempo_cfgs ! for tempo + logical :: config_tempo_aerosolaware, config_tempo_hailaware ! Local INTEGER :: i, j, itf, jtf REAL, DIMENSION(20) :: nssl_params @@ -4580,9 +4583,13 @@ SUBROUTINE mp_init(RAINNC,SNOWNC,GRAUPELNC,config_flags,restart,warm_rain, IMS=ims, IME=ime, JMS=jms, JME=jme, KMS=kms, KME=kme, & ITS=its, ITE=ite, JTS=jts, JTE=jte, KTS=kts, KTE=kte) - CASE (TEMPO) - CALL tempo_init(aerosolaware_flag=config_flags%tempo_aerosolaware, & - hailaware_flag=config_flags%tempo_hailaware) + CASE (TEMPO) + config_tempo_aerosolaware = .false. + config_tempo_hailaware = .false. + if (config_flags%tempo_aerosolaware == 1) config_tempo_aerosolaware = .true. + if (config_flags%tempo_hailaware == 1) config_tempo_hailaware = .true. + CALL tempo_init(aerosolaware_flag=config_tempo_aerosolaware, & + hailaware_flag=config_tempo_hailaware, tempo_cfgs=tempo_cfgs) CASE (MORR_TWO_MOMENT) CALL morr_two_moment_init( config_flags%morr_rimed_ice ) From d45f59bd41b55fb43e60094f27528f0e7da48ec6 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 9 Jan 2026 23:27:42 +0000 Subject: [PATCH 06/21] TEMPO connection to microphysics driver --- phys/module_microphysics_driver.F | 44 ++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/phys/module_microphysics_driver.F b/phys/module_microphysics_driver.F index 94004191cb..b107ac5558 100644 --- a/phys/module_microphysics_driver.F +++ b/phys/module_microphysics_driver.F @@ -174,7 +174,7 @@ SUBROUTINE microphysics_driver( & ,WSM7SCHEME, WDM7SCHEME, UDMSCHEME & ,NUWRF4ICESCHEME & ,MILBRANDT2MOM , CAMMGMPSCHEME,FULL_KHAIN_LYNN, P3_1CATEGORY, P3_1CATEGORY_NC, P3_2CATEGORY, P3_1CAT_3MOM & - ,MORR_TM_AERO, JENSEN_ISHMAEL, SPRINKLER, NTU !,MILBRANDT3MOM + ,MORR_TM_AERO, JENSEN_ISHMAEL, SPRINKLER, NTU, TEMPO !,MILBRANDT3MOM USE module_state_description, ONLY : WSM6RSCHEME #if ( WRFPLUS == 1 ) USE module_state_description, ONLY : LSCONDSCHEME, MKESSLERSCHEME @@ -224,6 +224,8 @@ SUBROUTINE microphysics_driver( & USE module_mp_fer_hires USE module_mp_rcon USE module_mp_thompson + USE module_mp_tempo_cfgs, only : ty_tempo_cfgs + USE module_mp_tempo_driver, only : tempo_driver, ty_tempo_driver_diags USE module_mp_full_sbm #if ( BUILD_SBM_FAST == 1 ) USE module_mp_fast_sbm @@ -796,6 +798,9 @@ SUBROUTINE microphysics_driver( & character*256 :: errmsg integer :: errflg + type(ty_tempo_cfgs) :: tempo_cfgs + type(ty_tempo_driver_diags) :: tempo_driver_diags + logical :: config_tempo_aerosolaware, config_tempo_hailaware !--------------------------------------------------------------------- ! check for microphysics type. We need a clean way to ! specify these things! @@ -1381,6 +1386,43 @@ SUBROUTINE microphysics_driver( & ELSE CALL wrf_error_fatal ( 'arguments not present for calling thompson_et_al' ) ENDIF + CASE (TEMPO) + CALL wrf_debug ( 100 , 'microphysics_driver: calling tempo' ) + IF ( PRESENT( QV_CURR ) .AND. PRESENT ( QC_CURR ) .AND. & + PRESENT( QR_CURR ) .AND. PRESENT ( QI_CURR ) .AND. & + PRESENT( QS_CURR ) .AND. PRESENT ( QG_CURR ) .AND. & + PRESENT( QNR_CURR) .AND. PRESENT ( QNI_CURR)) THEN + + config_tempo_aerosolaware = .false. + config_tempo_hailaware = .false. + if (config_flags%tempo_aerosolaware == 1) config_tempo_aerosolaware = .true. + if (config_flags%tempo_hailaware == 1) config_tempo_hailaware = .true. + tempo_cfgs%aerosolaware_flag = config_tempo_aerosolaware + tempo_cfgs%hailaware_flag = config_tempo_hailaware + CALL tempo_driver( & + tempo_cfgs=tempo_cfgs, & + dt=dt, & + itimestep=itimestep, & + th=th, & + pii=pi_phy, & + p=p, & + w=w, & + dz=dz8w, & + qv=qv_curr, & + qc=qc_curr, & + qr=qr_curr, & + qi=qi_curr, & + qs=qs_curr, & + qg=qg_curr, & + ni=qni_curr, & + nr=qnr_curr, & + ids=ids,ide=ide, jds=jds,jde=jde, kds=kds,kde=kde, & + ims=ims,ime=ime, jms=jms,jme=jme, kms=kms,kme=kme, & + its=its,ite=ite, jts=jts,jte=jte, kts=kts,kte=kte, & + tempo_diags = tempo_driver_diags) + ELSE + CALL wrf_error_fatal ( 'arguments not present for calling tempo' ) + ENDIF #if (EM_CORE==1) CASE (NTU) CALL wrf_debug(100, 'microphysics_driver: calling ntu') From 9ff03a3e90384ac49d0db6e993f01099621c25ad Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 9 Jan 2026 23:28:08 +0000 Subject: [PATCH 07/21] update TEMPO tag --- arch/Externals.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/Externals.cfg b/arch/Externals.cfg index bd13543a11..d49b130926 100644 --- a/arch/Externals.cfg +++ b/arch/Externals.cfg @@ -10,7 +10,7 @@ required = True local_path = ./phys/TEMPO protocol = git repo_url = https://github.com/AndersJensen-NOAA/TEMPO.git -tag = v3.0.0_d +tag = v3.0.0_e required = True From 6d78b09d7e566280c3b8f38bc975d45064f87d3a Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 13 Jan 2026 14:09:10 +0000 Subject: [PATCH 08/21] switch TEMPO from manage externals to git submodule --- .gitmodules | 3 +++ arch/Externals.cfg | 8 -------- phys/TEMPO | 1 + 3 files changed, 4 insertions(+), 8 deletions(-) create mode 160000 phys/TEMPO diff --git a/.gitmodules b/.gitmodules index 41f7345dd5..267ff1e5f2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "phys/MYNN-EDMF"] path = phys/MYNN-EDMF url = https://github.com/NCAR/MYNN-EDMF +[submodule "phys/TEMPO"] + path = phys/TEMPO + url = https://github.com/AndersJensen-NOAA/TEMPO.git diff --git a/arch/Externals.cfg b/arch/Externals.cfg index d49b130926..48cd9b11e0 100644 --- a/arch/Externals.cfg +++ b/arch/Externals.cfg @@ -6,13 +6,5 @@ tag = 20240626-MPASv8.2 required = True -[TEMPO-MP] -local_path = ./phys/TEMPO -protocol = git -repo_url = https://github.com/AndersJensen-NOAA/TEMPO.git -tag = v3.0.0_e - -required = True - [externals_description] schema_version = 1.0.0 diff --git a/phys/TEMPO b/phys/TEMPO new file mode 160000 index 0000000000..29015df5f8 --- /dev/null +++ b/phys/TEMPO @@ -0,0 +1 @@ +Subproject commit 29015df5f8635d610a90bfa0c2f4d23e689ba500 From 1f684ec4764c64472b0b66f895dac0c645f614a7 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 13 Jan 2026 14:10:01 +0000 Subject: [PATCH 09/21] add TEMPO diagnostics, aerosolaware, and hailaware args to microphysics driver --- phys/module_microphysics_driver.F | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/phys/module_microphysics_driver.F b/phys/module_microphysics_driver.F index b107ac5558..1239cf99c6 100644 --- a/phys/module_microphysics_driver.F +++ b/phys/module_microphysics_driver.F @@ -1391,7 +1391,10 @@ SUBROUTINE microphysics_driver( & IF ( PRESENT( QV_CURR ) .AND. PRESENT ( QC_CURR ) .AND. & PRESENT( QR_CURR ) .AND. PRESENT ( QI_CURR ) .AND. & PRESENT( QS_CURR ) .AND. PRESENT ( QG_CURR ) .AND. & - PRESENT( QNR_CURR) .AND. PRESENT ( QNI_CURR)) THEN + PRESENT( QNR_CURR) .AND. PRESENT ( QNI_CURR) .AND. & + PRESENT( QNG_CURR) .AND. PRESENT ( QVOLG_CURR) .AND. & + PRESENT( QNC_CURR) .AND. PRESENT ( QNWFA_CURR) .AND. & + PRESENT( QNIFA_CURR)) THEN config_tempo_aerosolaware = .false. config_tempo_hailaware = .false. @@ -1416,10 +1419,34 @@ SUBROUTINE microphysics_driver( & qg=qg_curr, & ni=qni_curr, & nr=qnr_curr, & + nc=qnc_curr, & + nwfa=qnwfa_curr, & + nifa=qnifa_curr, & + ng=qng_curr, & + qb=qvolg_curr, & ids=ids,ide=ide, jds=jds,jde=jde, kds=kds,kde=kde, & ims=ims,ime=ime, jms=jms,jme=jme, kms=kms,kme=kme, & its=its,ite=ite, jts=jts,jte=jte, kts=kts,kte=kte, & tempo_diags = tempo_driver_diags) + do j = jts, jte + do i = its, ite + snownc(i,j) = snownc(i,j) + tempo_driver_diags%snow_liquid_equiv_precip(i,j) + snowncv(i,j) = tempo_driver_diags%snow_liquid_equiv_precip(i,j) + graupelnc(i,j) = graupelnc(i,j) + tempo_driver_diags%graupel_liquid_equiv_precip(i,j) + graupelncv(i,j) = tempo_driver_diags%graupel_liquid_equiv_precip(i,j) + rainncv(i,j) = tempo_driver_diags%rain_precip(i,j) + & + snowncv(i,j) + graupelncv(i,j) + tempo_driver_diags%ice_liquid_equiv_precip(i,j) + rainnc(i,j) = rainnc(i,j) + (tempo_driver_diags%rain_precip(i,j) + & + snowncv(i,j) + graupelncv(i,j) + tempo_driver_diags%ice_liquid_equiv_precip(i,j)) + sr(i,j) = tempo_driver_diags%frozen_fraction(i,j) + do k = kts, kte + refl_10cm(i,k,j) = tempo_driver_diags%refl10cm(i,k,j) + re_cloud(i,k,j) = tempo_driver_diags%re_cloud(i,k,j) + re_ice(i,k,j) = tempo_driver_diags%re_ice(i,k,j) + re_snow(i,k,j) = tempo_driver_diags%re_snow(i,k,j) + enddo + enddo + enddo ELSE CALL wrf_error_fatal ( 'arguments not present for calling tempo' ) ENDIF From 93801b2c4dd91c9f179e8ca6328a0efcd9666c29 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 13 Jan 2026 19:28:58 +0000 Subject: [PATCH 10/21] add TEMPO dependencies --- main/depend.common | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/main/depend.common b/main/depend.common index 0d34bd218b..f734808060 100644 --- a/main/depend.common +++ b/main/depend.common @@ -983,6 +983,33 @@ module_mp_nssl_2mom.o: \ ../share/module_model_constants.o +module_mp_tempo_ml.o: \ + module_mp_tempo_params.o +module_mp_tempo_utils.o: \ + module_mp_tempo_params.o +module_mp_tempo_aerosols.o: \ + module_mp_tempo_params.o +module_mp_tempo_diags.o: \ + module_mp_tempo_params.o \ + module_mp_tempo_utils.o +module_mp_tempo_init.o: \ + module_mp_tempo_params.o \ + module_mp_tempo_cfgs.o \ + module_mp_tempo_utils.o \ + module_mp_tempo_ml.o +module_mp_tempo_driver.o : \ + module_mp_tempo_params.o \ + module_mp_tempo_cfgs.o \ + module_mp_tempo_main.o +module_mp_tempo_main.o : \ + module_mp_tempo_params.o \ + module_mp_tempo_cfgs.o \ + module_mp_tempo_utils.o \ + module_mp_tempo_diags.o \ + module_mp_tempo_aerosols.o \ + module_mp_tempo_ml.o + + module_mp_fast_sbm.o: \ ../frame/module_domain.o \ module_mp_SBM_polar_radar.o \ @@ -1342,6 +1369,8 @@ module_physics_init.o: \ module_fdda_spnudging.o \ module_fddaobs_rtfdda.o \ module_mp_thompson.o \ + module_mp_tempo_cfgs.o \ + module_mp_tempo_init.o \ module_mp_rcon.o \ module_mp_gsfcgce.o \ module_mp_gsfcgce_4ice_nuwrf.o \ @@ -1389,6 +1418,8 @@ module_microphysics_driver.o: \ module_mp_wsm6r.o \ module_mp_fer_hires.o \ module_mp_thompson.o \ + module_mp_tempo_cfgs.o \ + module_mp_tempo_driver.o \ module_mp_rcon.o \ module_mp_gsfcgce.o \ module_mp_gsfcgce_4ice_nuwrf.o \ From 39edba6ab32b362fac86c9a9b3d60aacdc820086 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Wed, 14 Jan 2026 17:37:11 +0000 Subject: [PATCH 11/21] added qnwfa2d to tempo aerosolaware state and connected tempo diagnostics and optional arguments --- Registry/Registry.EM_COMMON | 2 +- phys/module_microphysics_driver.F | 98 +++++++++++++++++++++---------- 2 files changed, 69 insertions(+), 31 deletions(-) diff --git a/Registry/Registry.EM_COMMON b/Registry/Registry.EM_COMMON index 15ffa4652c..9d57073966 100644 --- a/Registry/Registry.EM_COMMON +++ b/Registry/Registry.EM_COMMON @@ -3064,7 +3064,7 @@ package nssl_graupelvol nssl_density_on==1 - scalar:qvol package nssl_hailvol nssl_density_on==2 - scalar:qvolg,qvolh package nssl_ssat_out nssl_ssat_output==1 - state:ssat package nssl_ssati_out nssl_ssat_output==2 - state:ssat,ssati -package tempo_aerosol tempo_aerosolaware==1 - scalar:qnc,qnwfa,qnifa +package tempo_aerosol tempo_aerosolaware==1 - scalar:qnc,qnwfa,qnifa,qnwfa2d package tempo_hail tempo_hailaware==1 - scalar:qng,qvolg package radar_refl compute_radar_ref==1 - state:refl_10cm,refd_max diff --git a/phys/module_microphysics_driver.F b/phys/module_microphysics_driver.F index 1239cf99c6..2d1a3aa7ad 100644 --- a/phys/module_microphysics_driver.F +++ b/phys/module_microphysics_driver.F @@ -225,7 +225,8 @@ SUBROUTINE microphysics_driver( & USE module_mp_rcon USE module_mp_thompson USE module_mp_tempo_cfgs, only : ty_tempo_cfgs - USE module_mp_tempo_driver, only : tempo_driver, ty_tempo_driver_diags + USE module_mp_tempo_driver, only : tempo_driver, ty_tempo_driver_diags, & + tempo_aerosol_surface_emissions USE module_mp_full_sbm #if ( BUILD_SBM_FAST == 1 ) USE module_mp_fast_sbm @@ -1386,22 +1387,27 @@ SUBROUTINE microphysics_driver( & ELSE CALL wrf_error_fatal ( 'arguments not present for calling thompson_et_al' ) ENDIF - CASE (TEMPO) + CASE (TEMPO) + ! add surface emissions + if (present(qnwfa_curr) .and. present(qnwfa2d)) then + call tempo_aerosol_surface_emissions(dt=dt, & + nwfa=qnwfa_curr, nwfa2d=qnwfa2d, & + ims=ims, ime=ime, jms=jms, & + jme=jme, kms=kms, kme=kme, kts=kts) + endif + CALL wrf_debug ( 100 , 'microphysics_driver: calling tempo' ) IF ( PRESENT( QV_CURR ) .AND. PRESENT ( QC_CURR ) .AND. & PRESENT( QR_CURR ) .AND. PRESENT ( QI_CURR ) .AND. & PRESENT( QS_CURR ) .AND. PRESENT ( QG_CURR ) .AND. & - PRESENT( QNR_CURR) .AND. PRESENT ( QNI_CURR) .AND. & - PRESENT( QNG_CURR) .AND. PRESENT ( QVOLG_CURR) .AND. & - PRESENT( QNC_CURR) .AND. PRESENT ( QNWFA_CURR) .AND. & - PRESENT( QNIFA_CURR)) THEN - - config_tempo_aerosolaware = .false. - config_tempo_hailaware = .false. - if (config_flags%tempo_aerosolaware == 1) config_tempo_aerosolaware = .true. - if (config_flags%tempo_hailaware == 1) config_tempo_hailaware = .true. - tempo_cfgs%aerosolaware_flag = config_tempo_aerosolaware - tempo_cfgs%hailaware_flag = config_tempo_hailaware + PRESENT( QNR_CURR) .AND. PRESENT ( QNI_CURR)) THEN + + config_tempo_aerosolaware = .false. + config_tempo_hailaware = .false. + if (config_flags%tempo_aerosolaware == 1) config_tempo_aerosolaware = .true. + if (config_flags%tempo_hailaware == 1) config_tempo_hailaware = .true. + tempo_cfgs%aerosolaware_flag = config_tempo_aerosolaware + tempo_cfgs%hailaware_flag = config_tempo_hailaware CALL tempo_driver( & tempo_cfgs=tempo_cfgs, & dt=dt, & @@ -1419,31 +1425,63 @@ SUBROUTINE microphysics_driver( & qg=qg_curr, & ni=qni_curr, & nr=qnr_curr, & - nc=qnc_curr, & - nwfa=qnwfa_curr, & - nifa=qnifa_curr, & - ng=qng_curr, & - qb=qvolg_curr, & + nc=qnc_curr, & ! optionally present when tempo_aerosolaware == 1 + nwfa=qnwfa_curr, & ! optionally present when tempo_aerosolaware == 1 + nifa=qnifa_curr, & ! optionally present when tempo_aerosolaware == 1 + ng=qng_curr, & ! optionally present when tempo_hailaware == 1 + qb=qvolg_curr, & ! optionally present when tempo_hailaware == 1 ids=ids,ide=ide, jds=jds,jde=jde, kds=kds,kde=kde, & ims=ims,ime=ime, jms=jms,jme=jme, kms=kms,kme=kme, & its=its,ite=ite, jts=jts,jte=jte, kts=kts,kte=kte, & tempo_diags = tempo_driver_diags) + ! map tempo diagnostics to WRF variable names noting that some wrf variables are optional do j = jts, jte do i = its, ite - snownc(i,j) = snownc(i,j) + tempo_driver_diags%snow_liquid_equiv_precip(i,j) - snowncv(i,j) = tempo_driver_diags%snow_liquid_equiv_precip(i,j) - graupelnc(i,j) = graupelnc(i,j) + tempo_driver_diags%graupel_liquid_equiv_precip(i,j) - graupelncv(i,j) = tempo_driver_diags%graupel_liquid_equiv_precip(i,j) - rainncv(i,j) = tempo_driver_diags%rain_precip(i,j) + & - snowncv(i,j) + graupelncv(i,j) + tempo_driver_diags%ice_liquid_equiv_precip(i,j) - rainnc(i,j) = rainnc(i,j) + (tempo_driver_diags%rain_precip(i,j) + & - snowncv(i,j) + graupelncv(i,j) + tempo_driver_diags%ice_liquid_equiv_precip(i,j)) + if (present(snowncv)) then + snowncv(i,j) = tempo_driver_diags%ice_liquid_equiv_precip(i,j) + & + tempo_driver_diags%snow_liquid_equiv_precip(i,j) + endif + if (present(snownc)) snownc(i,j) = snownc(i,j) + snownvc(i,j) + + if (present(graupelncv)) then + graupelncv(i,j) = tempo_driver_diags%graupel_liquid_equiv_precip(i,j) + endif + if (present(graupelnc)) graupelnc(i,j) = graupelnc(i,j) + graupelncv(i,j) + + if (present(rainncv)) then + rainncv(i,j) = tempo_driver_diags%rain_precip(i,j) + snowncv(i,j) + graupelncv(i,j) + endif + if (present(rainnc)) rainnc(i,j) = rainnc(i,j) + rainncv(i,j) + ! ratio of frozen precipitation to total is not optional in wrf sr(i,j) = tempo_driver_diags%frozen_fraction(i,j) + + if (present(hail_maxk1)) then + if (allocated(tempo_driver_diags%max_hail_diameter_sfc)) then + hail_maxk1(i,j) = tempo_driver_diags%max_hail_diameter_sfc(i,j) + endif + endif + if (present(hail_max2d)) then + if (allocated(tempo_driver_diags%max_hail_diameter_column)) then + hail_max2d(i,j) = tempo_driver_diags%max_hail_diameter_column(i,j) + endif + endif + ! 3d tempo diagnostics do k = kts, kte - refl_10cm(i,k,j) = tempo_driver_diags%refl10cm(i,k,j) - re_cloud(i,k,j) = tempo_driver_diags%re_cloud(i,k,j) - re_ice(i,k,j) = tempo_driver_diags%re_ice(i,k,j) - re_snow(i,k,j) = tempo_driver_diags%re_snow(i,k,j) + if (present(refl_10cm)) then + if (allocated(tempo_driver_diags%refl10cm)) then + refl_10cm(i,k,j) = tempo_driver_diags%refl10cm(i,k,j) + endif + endif + ! effective radius values are not optional in wrf + if (allocated(tempo_driver_diags%re_cloud)) then + re_cloud(i,k,j) = tempo_driver_diags%re_cloud(i,k,j) + endif + if (allocated(tempo_driver_diags%re_ice)) then + re_ice(i,k,j) = tempo_driver_diags%re_ice(i,k,j) + endif + if (allocated(tempo_driver_diags%re_snow)) then + re_snow(i,k,j) = tempo_driver_diags%re_snow(i,k,j) + endif enddo enddo enddo From 344d841c5523a195bbe3b48b712553502f728266 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Wed, 14 Jan 2026 19:06:49 +0000 Subject: [PATCH 12/21] fix typo snownvc -> snowncv --- phys/module_microphysics_driver.F | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phys/module_microphysics_driver.F b/phys/module_microphysics_driver.F index 2d1a3aa7ad..1f1b1853e1 100644 --- a/phys/module_microphysics_driver.F +++ b/phys/module_microphysics_driver.F @@ -1441,7 +1441,7 @@ SUBROUTINE microphysics_driver( & snowncv(i,j) = tempo_driver_diags%ice_liquid_equiv_precip(i,j) + & tempo_driver_diags%snow_liquid_equiv_precip(i,j) endif - if (present(snownc)) snownc(i,j) = snownc(i,j) + snownvc(i,j) + if (present(snownc)) snownc(i,j) = snownc(i,j) + snowncv(i,j) if (present(graupelncv)) then graupelncv(i,j) = tempo_driver_diags%graupel_liquid_equiv_precip(i,j) From b8912657c1bf40810ea36dc310e525b78bb89844 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Thu, 15 Jan 2026 20:21:18 +0000 Subject: [PATCH 13/21] small tempo refactor for ccpp compliance --- clean | 5 ++--- main/depend.common | 13 ++++--------- phys/Makefile | 7 ++----- phys/TEMPO | 2 +- phys/module_physics_init.F | 2 +- 5 files changed, 10 insertions(+), 19 deletions(-) diff --git a/clean b/clean index ddb5b5bf33..06514476df 100755 --- a/clean +++ b/clean @@ -87,9 +87,8 @@ if ( "$arg" == '-a' || "$arg" == '-aa' ) then phys/module_bl_mynnedmf_driver.F /bin/rm -f phys/module_mp_tempo_cfgs.F90 phys/module_mp_tempo_params.F90 \ phys/module_mp_tempo_utils.F90 phys/module_mp_tempo_diags.F90 \ - phys/module_mp_tempo_ml.F90 phys/module_mp_tempo_init.F90 \ - phys/module_mp_tempo_aerosols.F90 phys/module_mp_tempo_main.F90 \ - phys/module_mp_tempo_driver.F90 + phys/module_mp_tempo_ml.F90 phys/module_mp_tempo_driver.F90 \ + phys/module_mp_tempo_aerosols.F90 phys/module_mp_tempo_main.F90 endif endif diff --git a/main/depend.common b/main/depend.common index f734808060..7b3aa0a99e 100644 --- a/main/depend.common +++ b/main/depend.common @@ -982,7 +982,6 @@ module_mp_nssl_2mom.o: \ ../frame/module_wrf_error.o \ ../share/module_model_constants.o - module_mp_tempo_ml.o: \ module_mp_tempo_params.o module_mp_tempo_utils.o: \ @@ -992,15 +991,12 @@ module_mp_tempo_aerosols.o: \ module_mp_tempo_diags.o: \ module_mp_tempo_params.o \ module_mp_tempo_utils.o -module_mp_tempo_init.o: \ - module_mp_tempo_params.o \ - module_mp_tempo_cfgs.o \ - module_mp_tempo_utils.o \ - module_mp_tempo_ml.o module_mp_tempo_driver.o : \ module_mp_tempo_params.o \ module_mp_tempo_cfgs.o \ - module_mp_tempo_main.o + module_mp_tempo_utils.o \ + module_mp_tempo_main.o \ + module_mp_tempo_ml.o module_mp_tempo_main.o : \ module_mp_tempo_params.o \ module_mp_tempo_cfgs.o \ @@ -1009,7 +1005,6 @@ module_mp_tempo_main.o : \ module_mp_tempo_aerosols.o \ module_mp_tempo_ml.o - module_mp_fast_sbm.o: \ ../frame/module_domain.o \ module_mp_SBM_polar_radar.o \ @@ -1370,7 +1365,7 @@ module_physics_init.o: \ module_fddaobs_rtfdda.o \ module_mp_thompson.o \ module_mp_tempo_cfgs.o \ - module_mp_tempo_init.o \ + module_mp_tempo_driver.o \ module_mp_rcon.o \ module_mp_gsfcgce.o \ module_mp_gsfcgce_4ice_nuwrf.o \ diff --git a/phys/Makefile b/phys/Makefile index 74f0b820d6..05191c1dc7 100644 --- a/phys/Makefile +++ b/phys/Makefile @@ -102,7 +102,6 @@ MODULES = \ module_mp_tempo_utils.o \ module_mp_tempo_diags.o \ module_mp_tempo_ml.o \ - module_mp_tempo_init.o \ module_mp_tempo_aerosols.o \ module_mp_tempo_main.o \ module_mp_tempo_driver.o \ @@ -293,10 +292,9 @@ submodules : echo No action required for MYNN-EDMF submodule ; \ fi @if [ \( ! -f module_mp_tempo_driver.F90 \) -o \( ! -f module_mp_tempo_main.F90 \) -o \ - \( ! -f module_mp_tempo_init.F90 \) -o \( ! -f module_mp_tempo_aerosols.F90 \) -o \ + \( ! -f module_mp_tempo_cfgs.F90 \) -o \( ! -f module_mp_tempo_aerosols.F90 \) -o \ \( ! -f module_mp_tempo_ml.F90 \) -o \( ! -f modulemp_tempo_diags.F90 \) -o \ - \( ! -f module_mp_tempo_utils.F90 \) -o \( ! -f module_mp_tempo_params.F90 \) -o \ - \( ! -f module_mp_tempo_cfgs.F90 \) ] ; then \ + \( ! -f module_mp_tempo_utils.F90 \) -o \( ! -f module_mp_tempo_params.F90 \) ] ; then \ echo Pulling in TEMPO submodule ; \ ( cd .. ; git submodule update --init --recursive ) ; \ ln -sf TEMPO/src/module_mp_tempo_cfgs.F90 module_mp_tempo_cfgs.F90 ; \ @@ -304,7 +302,6 @@ submodules : ln -sf TEMPO/src/module_mp_tempo_utils.F90 module_mp_tempo_utils.F90 ; \ ln -sf TEMPO/src/module_mp_tempo_diags.F90 module_mp_tempo_diags.F90 ; \ ln -sf TEMPO/src/module_mp_tempo_ml.F90 module_mp_tempo_ml.F90 ; \ - ln -sf TEMPO/src/module_mp_tempo_init.F90 module_mp_tempo_init.F90 ; \ ln -sf TEMPO/src/module_mp_tempo_aerosols.F90 module_mp_tempo_aerosols.F90 ; \ ln -sf TEMPO/src/module_mp_tempo_main.F90 module_mp_tempo_main.F90 ; \ ln -sf TEMPO/src/module_mp_tempo_driver.F90 module_mp_tempo_driver.F90 ; \ diff --git a/phys/TEMPO b/phys/TEMPO index 29015df5f8..8feecda407 160000 --- a/phys/TEMPO +++ b/phys/TEMPO @@ -1 +1 @@ -Subproject commit 29015df5f8635d610a90bfa0c2f4d23e689ba500 +Subproject commit 8feecda407db3cd6f2a55d32655bd1a0a5bf732d diff --git a/phys/module_physics_init.F b/phys/module_physics_init.F index 8b3ab9fe82..5b3a5f1a67 100644 --- a/phys/module_physics_init.F +++ b/phys/module_physics_init.F @@ -4408,7 +4408,7 @@ SUBROUTINE mp_init(RAINNC,SNOWNC,GRAUPELNC,config_flags,restart,warm_rain, USE module_mp_wdm7 USE module_mp_udm USE module_mp_tempo_cfgs, only : ty_tempo_cfgs - USE module_mp_tempo_init, only : tempo_init + USE module_mp_tempo_driver, only : tempo_init #if (WRFPLUS != 1) & !defined( VAR4D ) USE module_mp_nssl_2mom, only: nssl_2mom_init #endif From 9c3259cd5598a8896f326e6af7b3e929572745ed Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Thu, 15 Jan 2026 21:56:27 +0000 Subject: [PATCH 14/21] removed tempo_module_init and combined with driver for ccpp compliance --- Makefile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index ec8e8437ae..4dfa775504 100644 --- a/Makefile +++ b/Makefile @@ -139,10 +139,9 @@ wrf : framework_only echo "------------------------------------------------------------------------------" ; \ fi @if [ \( ! -f phys/module_mp_tempo_driver.F90 \) -o \( ! -f phys/module_mp_tempo_main.F90 \) -o \ - \( ! -f phys/module_mp_tempo_init.F90 \) -o \( ! -f phys/module_mp_tempo_aerosols.F90 \) -o \ + \( ! -f phys/module_mp_tempo_cfgs.F90 \) -o \( ! -f phys/module_mp_tempo_aerosols.F90 \) -o \ \( ! -f phys/module_mp_tempo_ml.F90 \) -o \( ! -f phys/module_mp_tempo_diags.F90 \) -o \ - \( ! -f phys/module_mp_tempo_utils.F90 \) -o \( ! -f phys/module_mp_tempo_params.F90 \) -o \ - \( ! -f phys/module_mp_tempo_cfgs.F90 \) ] ; then \ + \( ! -f phys/module_mp_tempo_utils.F90 \) -o \( ! -f phys/module_mp_tempo_params.F90 \) ] ; then \ echo " " ; \ echo "------------------------------------------------------------------------------" ; \ echo "Error Error Error TEMPO submodule files not populating WRF directories" ; \ From 09bf02a2574ea1bce653c89a11a63b839ba45dd1 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Thu, 15 Jan 2026 21:57:06 +0000 Subject: [PATCH 15/21] add wrf config flag checks to diagnostic output --- phys/module_microphysics_driver.F | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/phys/module_microphysics_driver.F b/phys/module_microphysics_driver.F index 1f1b1853e1..4ac76e3088 100644 --- a/phys/module_microphysics_driver.F +++ b/phys/module_microphysics_driver.F @@ -1455,21 +1455,25 @@ SUBROUTINE microphysics_driver( & ! ratio of frozen precipitation to total is not optional in wrf sr(i,j) = tempo_driver_diags%frozen_fraction(i,j) - if (present(hail_maxk1)) then - if (allocated(tempo_driver_diags%max_hail_diameter_sfc)) then - hail_maxk1(i,j) = tempo_driver_diags%max_hail_diameter_sfc(i,j) + if (config_flags%nwp_diagnostics == 1) then + if (present(hail_maxk1)) then + if (allocated(tempo_driver_diags%max_hail_diameter_sfc)) then + hail_maxk1(i,j) = tempo_driver_diags%max_hail_diameter_sfc(i,j) + endif endif - endif - if (present(hail_max2d)) then - if (allocated(tempo_driver_diags%max_hail_diameter_column)) then - hail_max2d(i,j) = tempo_driver_diags%max_hail_diameter_column(i,j) + if (present(hail_max2d)) then + if (allocated(tempo_driver_diags%max_hail_diameter_column)) then + hail_max2d(i,j) = tempo_driver_diags%max_hail_diameter_column(i,j) + endif endif endif ! 3d tempo diagnostics do k = kts, kte - if (present(refl_10cm)) then - if (allocated(tempo_driver_diags%refl10cm)) then - refl_10cm(i,k,j) = tempo_driver_diags%refl10cm(i,k,j) + if (do_radar_ref == 1) then + if (present(refl_10cm)) then + if (allocated(tempo_driver_diags%refl10cm)) then + refl_10cm(i,k,j) = tempo_driver_diags%refl10cm(i,k,j) + endif endif endif ! effective radius values are not optional in wrf From 8b97b4e0d3e23d64075851a79196e7f27dbc301f Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Wed, 21 Jan 2026 19:38:33 +0000 Subject: [PATCH 16/21] change from tempo_drvier -> tempo_run for ccpp compliance --- phys/TEMPO | 2 +- phys/module_microphysics_driver.F | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/phys/TEMPO b/phys/TEMPO index 8feecda407..9015efeef2 160000 --- a/phys/TEMPO +++ b/phys/TEMPO @@ -1 +1 @@ -Subproject commit 8feecda407db3cd6f2a55d32655bd1a0a5bf732d +Subproject commit 9015efeef2087688139bed40652085a0cda19825 diff --git a/phys/module_microphysics_driver.F b/phys/module_microphysics_driver.F index 4ac76e3088..538d806c61 100644 --- a/phys/module_microphysics_driver.F +++ b/phys/module_microphysics_driver.F @@ -225,7 +225,7 @@ SUBROUTINE microphysics_driver( & USE module_mp_rcon USE module_mp_thompson USE module_mp_tempo_cfgs, only : ty_tempo_cfgs - USE module_mp_tempo_driver, only : tempo_driver, ty_tempo_driver_diags, & + USE module_mp_tempo_driver, only : tempo_run, ty_tempo_driver_diags, & tempo_aerosol_surface_emissions USE module_mp_full_sbm #if ( BUILD_SBM_FAST == 1 ) @@ -1408,7 +1408,7 @@ SUBROUTINE microphysics_driver( & if (config_flags%tempo_hailaware == 1) config_tempo_hailaware = .true. tempo_cfgs%aerosolaware_flag = config_tempo_aerosolaware tempo_cfgs%hailaware_flag = config_tempo_hailaware - CALL tempo_driver( & + CALL tempo_run( & tempo_cfgs=tempo_cfgs, & dt=dt, & itimestep=itimestep, & From 9135bb5da71c6613caf899865e3a863dc945062e Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Thu, 22 Jan 2026 22:04:34 +0000 Subject: [PATCH 17/21] fix to scalar/state declarations when using tempo_aerosolaware --- Registry/Registry.EM_COMMON | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Registry/Registry.EM_COMMON b/Registry/Registry.EM_COMMON index 9d57073966..238dc653b7 100644 --- a/Registry/Registry.EM_COMMON +++ b/Registry/Registry.EM_COMMON @@ -3064,7 +3064,7 @@ package nssl_graupelvol nssl_density_on==1 - scalar:qvol package nssl_hailvol nssl_density_on==2 - scalar:qvolg,qvolh package nssl_ssat_out nssl_ssat_output==1 - state:ssat package nssl_ssati_out nssl_ssat_output==2 - state:ssat,ssati -package tempo_aerosol tempo_aerosolaware==1 - scalar:qnc,qnwfa,qnifa,qnwfa2d +package tempo_aerosol tempo_aerosolaware==1 - scalar:qnc,qnwfa,qnifa;state:qnwfa2d,qnifa2d package tempo_hail tempo_hailaware==1 - scalar:qng,qvolg package radar_refl compute_radar_ref==1 - state:refl_10cm,refd_max From 14c17333625302b5e6c55eb0bd6b1c4ae4b4c8aa Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Thu, 22 Jan 2026 22:05:49 +0000 Subject: [PATCH 18/21] adds option to use aerosol climo and surface emissions with TEMPO --- dyn_em/module_initialize_real.F | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/dyn_em/module_initialize_real.F b/dyn_em/module_initialize_real.F index 30a6d34a2a..275157b4e4 100644 --- a/dyn_em/module_initialize_real.F +++ b/dyn_em/module_initialize_real.F @@ -2332,7 +2332,8 @@ SUBROUTINE init_domain_rk ( grid & aer_init_opt = config_flags%aer_init_opt if_thompsonaero_3d: IF ((config_flags%mp_physics .EQ. THOMPSONAERO & - .OR. config_flags%mp_physics .EQ. RCON_MP_SCHEME) .AND. & + .OR. (config_flags%mp_physics .EQ. TEMPO .AND. config_flags%tempo_aerosolaware .EQ. 1) & + .OR. config_flags%mp_physics .EQ. RCON_MP_SCHEME) .AND. & config_flags%wif_input_opt .GT. 0) THEN select_aer_init_opt_3d: select case (aer_init_opt) @@ -2740,7 +2741,8 @@ SUBROUTINE init_domain_rk ( grid & end select select_aer_init_opt_3d ELSE IF ((config_flags%mp_physics .EQ. THOMPSONAERO & - .OR. config_flags%mp_physics .EQ. RCON_MP_SCHEME) .and. & + .OR. (config_flags%mp_physics .EQ. TEMPO .AND. config_flags%tempo_aerosolaware .EQ. 1) & + .OR. config_flags%mp_physics .EQ. RCON_MP_SCHEME) .and. & config_flags%wif_input_opt .EQ. 0 ) THEN CALL wrf_error_fatal ('wif_input_opt=0 but mp_physics=28 or mp_physics=29' ) END IF if_thompsonaero_3d @@ -4510,7 +4512,8 @@ SUBROUTINE init_domain_rk ( grid & !+---+-----------------------------------------------------------------+ if_thompsonaero_2d: IF ((config_flags%mp_physics .EQ. THOMPSONAERO & - .OR. config_flags%mp_physics .EQ. RCON_MP_SCHEME) .AND. & + .OR. (config_flags%mp_physics .EQ. TEMPO .AND. config_flags%tempo_aerosolaware .EQ. 1) & + .OR. config_flags%mp_physics .EQ. RCON_MP_SCHEME) .AND. & config_flags%wif_input_opt .GT. 0) THEN select_aer_init_opt_2d: select case (aer_init_opt) @@ -4533,7 +4536,11 @@ SUBROUTINE init_domain_rk ( grid & do j = jts, min(jde-1,jte) do i = its, min(ide-1,ite) z1 = (grid%phb(i,2,j)-grid%phb(i,1,j))/g - grid%qnwfa2d(i,j) = grid%w_wif_now(i,1,j) * 0.000196 * (50./z1) + if (config_flags%mp_physics .EQ. TEMPO) then + grid%qnwfa2d(i,j) = grid%w_wif_now(i,1,j) * 0.000196 * (5./z1) + else + grid%qnwfa2d(i,j) = grid%w_wif_now(i,1,j) * 0.000196 * (50./z1) + endif enddo enddo From eee91c8eaeb90fbe555f11fd9b0fdf34839f78b0 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Thu, 22 Jan 2026 22:06:56 +0000 Subject: [PATCH 19/21] sets aer_init_opt for TEMPO --- share/module_check_a_mundo.F | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/share/module_check_a_mundo.F b/share/module_check_a_mundo.F index 551d4e9132..cc312c9c5e 100644 --- a/share/module_check_a_mundo.F +++ b/share/module_check_a_mundo.F @@ -2529,7 +2529,9 @@ END FUNCTION bep_bem_ngr_u ! Set aer_init_opt for Thompson-MP-Aero (mp_physics=28) AND rcon mp (mp_physics=29) !----------------------------------------------------------------------- DO i = 1, model_config_rec % max_dom - IF ( model_config_rec%mp_physics(i) .EQ. THOMPSONAERO .OR. model_config_rec%mp_physics(i) .EQ. RCON_MP_SCHEME ) THEN + IF ( model_config_rec%mp_physics(i) .EQ. THOMPSONAERO .OR. & + (model_config_rec%mp_physics(i) .EQ. TEMPO .AND. model_config_rec%tempo_aerosolaware .EQ. 1) .OR. & + model_config_rec%mp_physics(i) .EQ. RCON_MP_SCHEME ) THEN IF ( model_config_rec%use_aero_icbc ) THEN model_config_rec%aer_init_opt = 1 ELSE IF ( model_config_rec%use_rap_aero_icbc ) THEN From ccc12aa2654861ec606fc19223aa3d147f19f961 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Mon, 2 Feb 2026 16:47:53 +0000 Subject: [PATCH 20/21] update pointer to NCAR/TEMPO --- phys/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phys/TEMPO b/phys/TEMPO index 9015efeef2..e41f020bb5 160000 --- a/phys/TEMPO +++ b/phys/TEMPO @@ -1 +1 @@ -Subproject commit 9015efeef2087688139bed40652085a0cda19825 +Subproject commit e41f020bb5194a48c3306dd99812a067cbbeab32 From fd8d63ada589471135eed31f57d56a2f601e2cfc Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Mon, 2 Feb 2026 18:03:26 +0000 Subject: [PATCH 21/21] update .gitmodules to point to NCAR/TEMPO --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 267ff1e5f2..68a67f468a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -9,4 +9,4 @@ url = https://github.com/NCAR/MYNN-EDMF [submodule "phys/TEMPO"] path = phys/TEMPO - url = https://github.com/AndersJensen-NOAA/TEMPO.git + url = https://github.com/NCAR/TEMPO.git