From 3d34b53500d6c1e4541afcbcf8af9bae0a2c3a27 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Mon, 9 Mar 2026 19:56:17 +0000 Subject: [PATCH 1/6] First commit for one-moment hail category - Adds option in TEMPO registry to turn on hail category - Adds package information for hail category in MPAS registry and packages file --- src/core_atmosphere/Registry.xml | 9 +++++---- src/core_atmosphere/physics/Registry_tempo.xml | 7 ++++++- src/core_atmosphere/physics/mpas_atmphys_packages.F | 13 ++++++++++--- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index 4851e1cae7..f8a355ba95 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -424,6 +424,7 @@ + @@ -2015,7 +2016,7 @@ + packages="mp_nssl2m_in;tempo_hailcat_in"/> + packages="mp_nssl2m_in;tempo_hailcat_in"/> - - diff --git a/src/core_atmosphere/physics/Registry_tempo.xml b/src/core_atmosphere/physics/Registry_tempo.xml index fa861d5d7c..8f4c14e1ad 100644 --- a/src/core_atmosphere/physics/Registry_tempo.xml +++ b/src/core_atmosphere/physics/Registry_tempo.xml @@ -8,12 +8,17 @@ units="-" description="Logical flag to turn on/off prognostic cloud droplet and aerosol number concentrations" possible_values=".true. or .false."/> - + + + Date: Mon, 9 Mar 2026 20:16:22 +0000 Subject: [PATCH 2/6] - allocates and deallocates the hail pointer in the microphysics driver and couples hail pointer to MPAS through the interface --- .../mpas_atmphys_driver_microphysics.F | 14 ++++++-- .../physics/mpas_atmphys_interface.F | 34 +++++++++++++++++-- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F index e657bdf561..b319546639 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F @@ -109,7 +109,7 @@ subroutine allocate_microphysics(configs) !local pointers: character(len=StrKIND),pointer:: microp_scheme character(len=StrKIND),pointer:: nssl_moments - logical,pointer:: config_tempo_aerosolaware,config_tempo_hailaware + logical,pointer:: config_tempo_aerosolaware,config_tempo_hailaware,config_tempo_hailcat logical,pointer:: config_tempo_ml_for_bl_nc !----------------------------------------------------------------------------------------------------------------- @@ -117,6 +117,7 @@ subroutine allocate_microphysics(configs) call mpas_pool_get_config(configs,'config_nssl_moments',nssl_moments) call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware) call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware) + call mpas_pool_get_config(configs,'config_tempo_hailcat',config_tempo_hailcat) call mpas_pool_get_config(configs,'config_tempo_ml_for_bl_nc',config_tempo_ml_for_bl_nc) !sounding variables: @@ -227,6 +228,10 @@ subroutine allocate_microphysics(configs) if(.not.allocated(volg_p)) allocate(volg_p(ims:ime,kms:kme,jms:jme)) endif + if (config_tempo_hailcat) then + if(.not.allocated(qh_p) ) allocate(qh_p(ims:ime,kms:kme,jms:jme)) + endif + if (config_tempo_ml_for_bl_nc) then if(.not.allocated(cldfrac_p) ) allocate(cldfrac_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(qcbl_p) ) allocate(qcbl_p(ims:ime,kms:kme,jms:jme)) @@ -270,7 +275,7 @@ subroutine deallocate_microphysics(configs) !local pointers: character(len=StrKIND),pointer:: microp_scheme character(len=StrKIND),pointer:: nssl_moments - logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware + logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware, config_tempo_hailcat logical,pointer:: config_tempo_ml_for_bl_nc !----------------------------------------------------------------------------------------------------------------- @@ -279,6 +284,7 @@ subroutine deallocate_microphysics(configs) call mpas_pool_get_config(configs,'config_nssl_moments',nssl_moments) call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware) call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware) + call mpas_pool_get_config(configs,'config_tempo_hailcat',config_tempo_hailcat) call mpas_pool_get_config(configs,'config_tempo_ml_for_bl_nc',config_tempo_ml_for_bl_nc) !sounding variables: @@ -389,6 +395,10 @@ subroutine deallocate_microphysics(configs) if(allocated(volg_p) ) deallocate(volg_p ) endif + if (config_tempo_hailcat) then + if(allocated(qh_p) ) deallocate(qh_p ) + endif + if (config_tempo_ml_for_bl_nc) then if(allocated(cldfrac_p) ) deallocate(cldfrac_p) if(allocated(qcbl_p) ) deallocate(qcbl_p) diff --git a/src/core_atmosphere/physics/mpas_atmphys_interface.F b/src/core_atmosphere/physics/mpas_atmphys_interface.F index 4faa5fbe38..0344402c19 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_interface.F +++ b/src/core_atmosphere/physics/mpas_atmphys_interface.F @@ -663,7 +663,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, real(kind=RKIND),dimension(:),pointer :: nifa2d,nwfa2d,nt_c,mu_c !TEMPO/NSSL character(len=StrKIND),pointer:: nssl_moments - logical,pointer:: config_tempo_aerosolaware,config_tempo_hailaware + logical,pointer:: config_tempo_aerosolaware,config_tempo_hailaware,config_tempo_hailcat logical,pointer:: config_tempo_ml_for_bl_nc integer,pointer:: index_qh integer,pointer:: index_zrw,index_zgw,index_zhw @@ -696,6 +696,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, call mpas_pool_get_config(configs,'config_nssl_moments',nssl_moments) call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware) call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware) + call mpas_pool_get_config(configs,'config_tempo_hailcat',config_tempo_hailcat) call mpas_pool_get_config(configs,'config_tempo_ml_for_bl_nc',config_tempo_ml_for_bl_nc) call mpas_pool_get_array(mesh,'zgrid',zgrid) @@ -943,6 +944,20 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, enddo endif + if (config_tempo_hailcat) then + call mpas_pool_get_dimension(state,'index_qh' ,index_qh ) + + qh => scalars(index_qh,:,:) + + do j = jts, jte + do k = kts, kte + do i = its, ite + qh_p(i,k,j) = qh(k,i) + enddo + enddo + enddo + endif + case("mp_nssl2m") call mpas_pool_get_dimension(state,'index_ni',index_ni) call mpas_pool_get_dimension(state,'index_nr',index_nr) @@ -1150,7 +1165,7 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te !local pointers: character(len=StrKIND),pointer:: mp_scheme character(len=StrKIND),pointer:: nssl_moments - logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware + logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware, config_tempo_hailcat integer,pointer:: index_qv,index_qc,index_qr,index_qi,index_qs,index_qg integer,pointer:: index_nc,index_ni,index_nr,index_nifa,index_nwfa !TEMPO/NSSL @@ -1189,6 +1204,7 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te call mpas_pool_get_config(configs,'config_nssl_moments',nssl_moments) call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware) call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware) + call mpas_pool_get_config(configs,'config_tempo_hailcat',config_tempo_hailcat) call mpas_pool_get_array(mesh,'zz' ,zz ) call mpas_pool_get_array(mesh,'zgrid',zgrid) @@ -1449,6 +1465,20 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te enddo endif + if (config_tempo_hailcat) then + call mpas_pool_get_dimension(state,'index_qh' ,index_qh ) + + qh => scalars(index_qh,:,:) + + do j = jts, jte + do k = kts, kte + do i = its, ite + qh(k,i) = qh_p(i,k,j) + enddo + enddo + enddo + endif + case("mp_nssl2m") call mpas_pool_get_dimension(state,'index_ni' ,index_ni ) call mpas_pool_get_dimension(state,'index_nc' ,index_nc ) From 73b9a6b28f579efefbccfdc4b51b94c72b23d9b7 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Mon, 9 Mar 2026 21:08:38 +0000 Subject: [PATCH 3/6] - adds hail (qh) to tempo_run in the MPAS microphysics driver and connects qh into tempo --- src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F | 2 +- src/core_atmosphere/physics/physics_noaa/TEMPO | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F index b319546639..34fdf7a66b 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F @@ -617,7 +617,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten ng = ng_p , qb = volg_p , w = w_p , & nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & pii = pi_p , p = pres_p , dz = dz_p , & - qc_bl = qcbl_p , qcfrac_bl = cldfrac_p , & + qc_bl = qcbl_p , qcfrac_bl = cldfrac_p , qh = qh_p , & 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 , & diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO index 9adf9ef282..485907c80c 160000 --- a/src/core_atmosphere/physics/physics_noaa/TEMPO +++ b/src/core_atmosphere/physics/physics_noaa/TEMPO @@ -1 +1 @@ -Subproject commit 9adf9ef2827104640125f0c322e1218fce74e94c +Subproject commit 485907c80ca43b04e72b2439437dd09bf883b5f8 From b9e22916d9b8644541ad2fa550a3323f43f53611 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Tue, 10 Mar 2026 01:44:15 +0000 Subject: [PATCH 4/6] - adds hail precipition --- .../physics/mpas_atmphys_driver_microphysics.F | 12 ++++++++---- src/core_atmosphere/physics/physics_noaa/TEMPO | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F index 34fdf7a66b..5802fc4e31 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F @@ -629,16 +629,20 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten tempo_driver_diags%snow_liquid_equiv_precip(i,j) snownc_p(i,j) = snownc_p(i,j) + tempo_driver_diags%ice_liquid_equiv_precip(i,j) + & tempo_driver_diags%snow_liquid_equiv_precip(i,j) - graupelncv_p(i,j) = graupelncv_p(i,j) + tempo_driver_diags%graupel_liquid_equiv_precip(i,j) - graupelnc_p(i,j) = graupelnc_p(i,j) + tempo_driver_diags%graupel_liquid_equiv_precip(i,j) + graupelncv_p(i,j) = graupelncv_p(i,j) + tempo_driver_diags%graupel_liquid_equiv_precip(i,j) + & + tempo_driver_diags%hail_liquid_equiv_precip(i,j) + graupelnc_p(i,j) = graupelnc_p(i,j) + tempo_driver_diags%graupel_liquid_equiv_precip(i,j) + & + tempo_driver_diags%hail_liquid_equiv_precip(i,j) rainncv_p(i,j) = rainncv_p(i,j) + tempo_driver_diags%rain_precip(i,j) + & tempo_driver_diags%ice_liquid_equiv_precip(i,j) + & tempo_driver_diags%snow_liquid_equiv_precip(i,j) + & - tempo_driver_diags%graupel_liquid_equiv_precip(i,j) + tempo_driver_diags%graupel_liquid_equiv_precip(i,j) + & + tempo_driver_diags%hail_liquid_equiv_precip(i,j) rainnc_p(i,j) = rainnc_p(i,j) + tempo_driver_diags%rain_precip(i,j) + & tempo_driver_diags%ice_liquid_equiv_precip(i,j) + & tempo_driver_diags%snow_liquid_equiv_precip(i,j) + & - tempo_driver_diags%graupel_liquid_equiv_precip(i,j) + tempo_driver_diags%graupel_liquid_equiv_precip(i,j) + & + tempo_driver_diags%hail_liquid_equiv_precip(i,j) sr_p(i,j) = tempo_driver_diags%frozen_fraction(i,j) frainnc_p(i,j) = frainnc_p(i,j) + tempo_driver_diags%frz_rain_precip(i,j) max_hail_diameter_sfc_p(i,j) = tempo_driver_diags%max_hail_diameter_sfc(i,j) diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO index 485907c80c..8df0397e24 160000 --- a/src/core_atmosphere/physics/physics_noaa/TEMPO +++ b/src/core_atmosphere/physics/physics_noaa/TEMPO @@ -1 +1 @@ -Subproject commit 485907c80ca43b04e72b2439437dd09bf883b5f8 +Subproject commit 8df0397e24e97defef337cec738c6f8e44772dbb From 8b1a1d32ebc352e250c1fedd18359a57461ef88f Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Tue, 10 Mar 2026 04:15:36 +0000 Subject: [PATCH 5/6] adds hail to diagnostics and adds hail melting, hail riming, rain-hail collection --- src/core_atmosphere/physics/physics_noaa/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO index 8df0397e24..6d7364ae3a 160000 --- a/src/core_atmosphere/physics/physics_noaa/TEMPO +++ b/src/core_atmosphere/physics/physics_noaa/TEMPO @@ -1 +1 @@ -Subproject commit 8df0397e24e97defef337cec738c6f8e44772dbb +Subproject commit 6d7364ae3aa89aa88ce1d9ad0adc40cb4d286d05 From 9d5bd8844b68eda5b236596e1e27634a6b6101fb Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Wed, 11 Mar 2026 03:50:58 +0000 Subject: [PATCH 6/6] update pointer --- src/core_atmosphere/physics/physics_noaa/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO index 6d7364ae3a..5ea4b01e09 160000 --- a/src/core_atmosphere/physics/physics_noaa/TEMPO +++ b/src/core_atmosphere/physics/physics_noaa/TEMPO @@ -1 +1 @@ -Subproject commit 6d7364ae3aa89aa88ce1d9ad0adc40cb4d286d05 +Subproject commit 5ea4b01e0991f22fd5fdea9f1099c9053debe919