Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
34921a8
initial connection to TEMPO microphysics
AndersJensen-NOAA Jan 9, 2026
894e86a
update tempo tag in externals
AndersJensen-NOAA Jan 9, 2026
97f8af7
- updates TEMPO tag
AndersJensen-NOAA Jan 16, 2026
3835c65
- adds tempo microphysics to list of available microphysics options
AndersJensen-NOAA Jan 20, 2026
9c08bb3
- adds aerosol initialization for tempo
AndersJensen-NOAA Jan 21, 2026
634d4c0
-adds tempo and supported diagnostics to microphysics driver
AndersJensen-NOAA Jan 21, 2026
3a2dded
Update TEMPO tag
AndersJensen-NOAA Feb 1, 2026
099bb79
adds tempo packages and tempo variables to registries
AndersJensen-NOAA Feb 2, 2026
7162adf
adds support for tempo initial conditions of nwfa and nifa
AndersJensen-NOAA Feb 2, 2026
860bf34
move tempo pointer to NCAR/TEMPO
AndersJensen-NOAA Feb 2, 2026
d8ef1f6
adds tempo to lw and sw radiation drivers
AndersJensen-NOAA Feb 2, 2026
556bc5c
connects tempo aerosolaware variables to mynn mixing
AndersJensen-NOAA Feb 2, 2026
7e38e78
Added hailaware feature
AndersJensen-NOAA Feb 5, 2026
07ff1f0
cleaned up interface, added comments, and added 3d reflectivity
AndersJensen-NOAA Feb 5, 2026
91f0699
add missing comma
AndersJensen-NOAA Feb 5, 2026
28e0284
Update to tempo v3.0.1 and add mp_tempo case to precipitation output
AndersJensen-NOAA Feb 13, 2026
f6a45ea
update tempo to version 3.0.2
AndersJensen-NOAA Feb 19, 2026
62f07cd
update to tempo v3.0.3
AndersJensen-NOAA Feb 19, 2026
b0bbb8b
update to tempo version 3.0.4
AndersJensen-NOAA Mar 4, 2026
8350c5e
Modify TEMPO pointer to development version of 3.0.6
AndersJensen-NOAA Apr 25, 2026
0953fce
Attempt to fix nested case statement logic in the interface
AndersJensen-NOAA Apr 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Added hailaware feature
  • Loading branch information
AndersJensen-NOAA committed Feb 5, 2026
commit 7e38e7843ba75de78de46d2e7a94b891961db95c
25 changes: 25 additions & 0 deletions src/core_atmosphere/Registry.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1665,6 +1665,14 @@
description="Rain number concentration"
packages="mp_thompson_in;mp_thompson_aers_in;mp_tempo_in"/>

<var name="ng" array_group="number" units="nb kg^{-1}"
description="Graupel number concentration"
packages="tempo_hailaware_in"/>

<var name="volg" array_group="volume" units="m^{3} kg^{-1} or L kg^{-1}"
description="Graupel volume"
packages="tempo_hailaware_in"/>

<var name="nc" array_group="number" units="nb kg^{-1}"
description="Cloud water number concentration"
packages="mp_thompson_aers_in;tempo_aerosolaware_in"/>
Expand Down Expand Up @@ -2016,6 +2024,14 @@
description="Tendency of rain number concentration multiplied by dry air density divided by d(zeta)/dz"
packages="mp_thompson_in;mp_thompson_aers_in;mp_tempo_in"/>

<var name="tend_ng" name_in_code="ng" array_group="number" units="nb m^{-3} s^{-1}"
description="Tendency of graupel number concentration multiplied by dry air density divided by d(zeta)/dz"
packages="tempo_hailaware_in"/>

<var name="tend_volg" name_in_code="volg" array_group="volume" units="m^{3} m^{-3} s^{-1} or L m^{-3} s^{-1}"
description="Tendency of graupel volume multiplied by dry air density divided by d(zeta)/dz"
packages="tempo_hailaware_in"/>

<var name="tend_nc" name_in_code="nc" array_group="number" units="nb m^{-3} s^{-1}"
description="Tendency of cloud water number concentration multiplied by dry air density divided by d(zeta)/dz"
packages="mp_thompson_aers_in;tempo_aerosolaware_in"/>
Expand Down Expand Up @@ -2090,6 +2106,14 @@
units="m^{-3} s^{-1}"
description="Lateral boundary tendency of rain number concentration"/>

<var name="lbc_ng" name_in_code="ng" array_group="number" packages="tempo_hailaware_in"
units="m^{-3} s^{-1}"
description="Lateral boundary tendency of graupel number concentration"/>

<var name="lbc_volg" name_in_code="volg" array_group="volume" packages="tempo_hailaware_in"
units="m^{3} m^{-3} s^{-1} or L m^{-3} s^{-1}"
description="Lateral boundary tendency of graupel volume"/>

<var name="lbc_ni" name_in_code="ni" array_group="number" packages="bl_mynn_in;mp_thompson_in;mp_thompson_aers_in;mp_tempo_in"
units="m^{-3} s^{-1}"
description="Lateral boundary tendency of ice number concentration"/>
Expand Down Expand Up @@ -3919,5 +3943,6 @@

#ifdef DO_PHYSICS
#include "physics/Registry_noahmp.xml"
#include "physics/Registry_tempo.xml"
#endif
</registry>
82 changes: 45 additions & 37 deletions src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F
Original file line number Diff line number Diff line change
Expand Up @@ -106,12 +106,13 @@ subroutine allocate_microphysics(configs)

!local pointers:
character(len=StrKIND),pointer:: microp_scheme
logical,pointer:: config_tempo_aerosolaware
logical,pointer:: config_tempo_aerosolaware, config_tempo_hailaware

!-----------------------------------------------------------------------------------------------------------------

call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme)
call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware)
call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware)

!sounding variables:
if(.not.allocated(rho_p) ) allocate(rho_p(ims:ime,kms:kme,jms:jme) )
Expand Down Expand Up @@ -160,6 +161,22 @@ subroutine allocate_microphysics(configs)
if(.not.allocated(qs_p)) allocate(qs_p(ims:ime,kms:kme,jms:jme))
if(.not.allocated(qg_p)) allocate(qg_p(ims:ime,kms:kme,jms:jme))

if(.not.allocated(ni_p) ) allocate(ni_p(ims:ime,kms:kme,jms:jme))
if(.not.allocated(nr_p) ) allocate(nr_p(ims:ime,kms:kme,jms:jme))

if(config_tempo_aerosolaware) then
if(.not.allocated(nifa2d_p)) allocate(nifa2d_p(ims:ime,jms:jme))
if(.not.allocated(nwfa2d_p)) allocate(nwfa2d_p(ims:ime,jms:jme))
if(.not.allocated(nc_p) ) allocate(nc_p(ims:ime,kms:kme,jms:jme) )
if(.not.allocated(nifa_p) ) allocate(nifa_p(ims:ime,kms:kme,jms:jme))
if(.not.allocated(nwfa_p) ) allocate(nwfa_p(ims:ime,kms:kme,jms:jme))
endif

if(config_tempo_hailaware) then
if(.not.allocated(ng_p) ) allocate(ng_p(ims:ime,kms:kme,jms:jme) )
if(.not.allocated(volg_p) ) allocate(volg_p(ims:ime,kms:kme,jms:jme))
endif

!surface precipitation:
if(.not.allocated(sr_p) ) allocate(sr_p(ims:ime,jms:jme) )
if(.not.allocated(snownc_p) ) allocate(snownc_p(ims:ime,jms:jme) )
Expand All @@ -179,10 +196,6 @@ subroutine allocate_microphysics(configs)
if(.not.allocated(ni_p) ) allocate(ni_p(ims:ime,kms:kme,jms:jme))
if(.not.allocated(nr_p) ) allocate(nr_p(ims:ime,kms:kme,jms:jme))

case("mp_tempo")
if(.not.allocated(ni_p) ) allocate(ni_p(ims:ime,kms:kme,jms:jme))
if(.not.allocated(nr_p) ) allocate(nr_p(ims:ime,kms:kme,jms:jme))

microp3_select: select case(trim(microp_scheme))
case("mp_thompson_aerosols")
if(.not.allocated(nifa2d_p)) allocate(nifa2d_p(ims:ime,jms:jme))
Expand All @@ -191,15 +204,6 @@ subroutine allocate_microphysics(configs)
if(.not.allocated(nifa_p) ) allocate(nifa_p(ims:ime,kms:kme,jms:jme))
if(.not.allocated(nwfa_p) ) allocate(nwfa_p(ims:ime,kms:kme,jms:jme))

case("mp_tempo")
if(config_tempo_aerosolaware) then
if(.not.allocated(nifa2d_p)) allocate(nifa2d_p(ims:ime,jms:jme))
if(.not.allocated(nwfa2d_p)) allocate(nwfa2d_p(ims:ime,jms:jme))
if(.not.allocated(nc_p) ) allocate(nc_p(ims:ime,kms:kme,jms:jme) )
if(.not.allocated(nifa_p) ) allocate(nifa_p(ims:ime,kms:kme,jms:jme))
if(.not.allocated(nwfa_p) ) allocate(nwfa_p(ims:ime,kms:kme,jms:jme))
endif

case default
end select microp3_select

Expand All @@ -220,13 +224,14 @@ subroutine deallocate_microphysics(configs)

!local pointers:
character(len=StrKIND),pointer:: microp_scheme
logical,pointer:: config_tempo_aerosolaware
logical,pointer:: config_tempo_aerosolaware, config_tempo_hailaware

!-----------------------------------------------------------------------------------------------------------------

call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme)
call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware)

call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware)

!sounding variables:
if(allocated(rho_p) ) deallocate(rho_p )
if(allocated(th_p) ) deallocate(th_p )
Expand Down Expand Up @@ -274,6 +279,22 @@ subroutine deallocate_microphysics(configs)
if(allocated(qs_p)) deallocate(qs_p)
if(allocated(qg_p)) deallocate(qg_p)

if(allocated(ni_p) ) deallocate(ni_p )
if(allocated(nr_p) ) deallocate(nr_p )

if(config_tempo_aerosolaware) then
if(allocated(nifa2d_p)) deallocate(nifa2d_p)
if(allocated(nwfa2d_p)) deallocate(nwfa2d_p)
if(allocated(nc_p) ) deallocate(nc_p )
if(allocated(nifa_p) ) deallocate(nifa_p )
if(allocated(nwfa_p) ) deallocate(nwfa_p )
endif

if(config_tempo_hailaware) then
if(allocated(ng_p) ) deallocate(ng_p )
if(allocated(volg_p) ) deallocate(volg_p )
endif

!surface precipitation:
if(allocated(sr_p) ) deallocate(sr_p )
if(allocated(snownc_p) ) deallocate(snownc_p )
Expand All @@ -293,10 +314,6 @@ subroutine deallocate_microphysics(configs)
if(allocated(ni_p) ) deallocate(ni_p )
if(allocated(nr_p) ) deallocate(nr_p )

case("mp_tempo")
if(allocated(ni_p) ) deallocate(ni_p )
if(allocated(nr_p) ) deallocate(nr_p )

microp3_select: select case(trim(microp_scheme))
case("mp_thompson_aerosols")
if(allocated(nifa2d_p)) deallocate(nifa2d_p)
Expand All @@ -305,15 +322,6 @@ subroutine deallocate_microphysics(configs)
if(allocated(nifa_p) ) deallocate(nifa_p )
if(allocated(nwfa_p) ) deallocate(nwfa_p )

case("mp_tempo")
if(config_tempo_aerosolaware) then
if(allocated(nifa2d_p)) deallocate(nifa2d_p)
if(allocated(nwfa2d_p)) deallocate(nwfa2d_p)
if(allocated(nc_p) ) deallocate(nc_p )
if(allocated(nifa_p) ) deallocate(nifa_p )
if(allocated(nwfa_p) ) deallocate(nwfa_p )
endif

case default
end select microp3_select

Expand Down Expand Up @@ -343,7 +351,7 @@ subroutine init_microphysics(dminfo,configs,mesh,state,time_lev,sfc_input,diag_p
!local pointer:
logical,pointer:: do_restart
character(len=StrKIND),pointer:: microp_scheme
logical,pointer:: config_tempo_aerosolaware
logical,pointer:: config_tempo_aerosolaware, config_tempo_hailaware

!CCPP-compliant flags:
character(len=StrKIND):: errmsg
Expand All @@ -360,6 +368,7 @@ subroutine init_microphysics(dminfo,configs,mesh,state,time_lev,sfc_input,diag_p
call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme)
call mpas_pool_get_config(configs,'config_do_restart' ,do_restart )
call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware)
call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware)

microp_select: select case(trim(microp_scheme))
case("mp_thompson","mp_thompson_aerosols")
Expand All @@ -368,15 +377,15 @@ subroutine init_microphysics(dminfo,configs,mesh,state,time_lev,sfc_input,diag_p

case("mp_tempo")
call tempo_init(aerosolaware_flag=config_tempo_aerosolaware, &
tempo_cfgs=tempo_cfgs)
hailaware_flag=config_tempo_hailaware, tempo_cfgs=tempo_cfgs)

if(config_tempo_aerosolaware) then
call init_tempo_aerosols_forMPAS(do_restart,dminfo,mesh,state,time_lev,diag_physics)
endif

microp2_select: select case(trim(microp_scheme))
case("mp_thompson_aerosols")
call init_thompson_aerosols_forMPAS(do_restart,dminfo,mesh,state,time_lev,diag_physics)
case("mp_tempo")
if(config_tempo_aerosolaware) then
call init_tempo_aerosols_forMPAS(do_restart,dminfo,mesh,state,time_lev,diag_physics)
endif

case default
end select microp2_select
Expand Down Expand Up @@ -482,8 +491,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten
th = th_p , qv = qv_p , qc = qc_p , &
qr = qr_p , qi = qi_p , qs = qs_p , &
qg = qg_p , ni = ni_p , nr = nr_p , &
w = w_p , &
! ng = ng_p , qb = volg_p , w = w_p , &
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 , &
ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , &
Expand Down
Loading