Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
c61d9f1
- removed unused configuration variable
AndersJensen-NOAA Dec 1, 2025
4e732be
- cleaned up core_atmosphere registry for tempo
AndersJensen-NOAA Dec 2, 2025
b1f0da2
cleaned up mpas tempo driver call and removed tempo table build from …
AndersJensen-NOAA Dec 13, 2025
4f47418
v3.0.0 updates consistent with tempo refactor
AndersJensen-NOAA Jan 6, 2026
7306023
update pointer to tempo refactor
AndersJensen-NOAA Jan 6, 2026
50294c1
v3.0.0 tempo refactor with ml prediction for bl clouds
AndersJensen-NOAA Jan 7, 2026
abd6351
update tempo pointer
AndersJensen-NOAA Jan 7, 2026
563d91e
update tempo pointer
AndersJensen-NOAA Jan 7, 2026
39e1932
Merge branch 'gsl/develop' into tempo_v3.0.0_formatting
AndersJensen-NOAA Jan 7, 2026
4eec574
Merge branch 'gsl/develop' into tempo_v3.0.0_formatting
AndersJensen-NOAA Feb 5, 2026
df1e4d4
update point to tempo v3 and clean up code to better match NCAR imple…
AndersJensen-NOAA Feb 5, 2026
31057e4
Merge remote-tracking branch 'upstream/gsl/develop' into tempo_v3.0.0…
AndersJensen-NOAA Feb 11, 2026
0aa138b
Update CMakeList for tempo v3
AndersJensen-NOAA Feb 12, 2026
93f087f
fix the typo in CMakeList
AndersJensen-NOAA Feb 12, 2026
2f6b931
add compile option for tempo
AndersJensen-NOAA Feb 12, 2026
8f2f0b0
More updates to github runners for tempo v3
AndersJensen-NOAA Feb 12, 2026
5663e40
this might fix failing regression tests
AndersJensen-NOAA Feb 12, 2026
5a5d15e
update pointer to new test data fork
AndersJensen-NOAA Feb 12, 2026
76f84ba
change workflow to pull tempo v2 and v3 tables
AndersJensen-NOAA Feb 12, 2026
1da6374
change RT to debug
AndersJensen-NOAA Feb 13, 2026
f9760f9
revert debug testing in CI and update tempo pointer
AndersJensen-NOAA Feb 13, 2026
0b29d03
revert baseline runtime configs to original repo
AndersJensen-NOAA Feb 13, 2026
727a9c8
adds flag to turn on/off ability to calculate reflectivity from melti…
AndersJensen-NOAA Feb 19, 2026
c801f83
update pointer to tempo v3.0.2
AndersJensen-NOAA Feb 19, 2026
80caac8
adds 3d profiles of microphysics to sounding output
AndersJensen-NOAA Feb 19, 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
4 changes: 2 additions & 2 deletions .github/workflows/run_mpas.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ on: [push, pull_request, workflow_dispatch]
# - The test build/run configurations matrix is described below.
# - This script uses a matrix run configuration with exclusions to achieve the desired "run list"
#
# <physics> - List of physics configuration to test. See https://github.com/barlage/mpas_testcase.git
# <physics> - List of physics configuration to test. See https://github.com/AndersJensen-NOAA/mpas_testcase.git
# <repo> - Baseline codebase repository.
# <branch> - Baseline codebase repository branch.
#
Expand Down Expand Up @@ -285,7 +285,7 @@ jobs:
- name: Download MPAS testing repository with runtime configurations.
run: |
cd ${mpas_run_ROOT}
git clone --recursive --branch main https://github.com/barlage/mpas_testcase.git
git clone --recursive --branch main https://github.com/AndersJensen-NOAA/mpas_testcase.git

- name: Cache Thompson MP tables
id: cache-thompson-data
Expand Down
20 changes: 9 additions & 11 deletions .github/workflows/run_mpas_hrrr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ on: [push, pull_request, workflow_dispatch]
# - The test build/run configurations matrix is described below.
# - This script uses a matrix run configuration with exclusions to achieve the desired "run list"
#
# <physics> - List of physics configuration to test. See https://github.com/barlage/mpas_testcase.git
# <physics> - List of physics configuration to test. See https://github.com/AndersJensen-NOAA/mpas_testcase.git
# <repo> - Baseline codebase repository.
# <branch> - Baseline codebase repository branch.
#
Expand Down Expand Up @@ -288,20 +288,17 @@ jobs:
- name: Download MPAS testing repository with runtime configurations.
run: |
cd ${mpas_run_ROOT}
git clone --recursive --branch main https://github.com/barlage/mpas_testcase.git
git clone --recursive --branch main https://github.com/AndersJensen-NOAA/mpas_testcase.git

- name: Cache TEMPO MP tables
id: cache-tempo-data
uses: actions/cache@v4
with:
path: /home/runner/tempo
key: cache-tempo-data-key
- name: Download MPAS testing repository with runtime configurations for baselines.
run: |
cd ${mpas_run_ROOT}
git clone --recursive --branch main https://github.com/barlage/mpas_testcase.git mpas_testcase_bl

- name: Download TEMPO MP tables
if: steps.cache-tempo-data.outputs.cache-hit != 'true'
run: |
cd ${runner_ROOT} && mkdir tempo && cd tempo
wget -q -e robots=off -nH --cut-dirs N -nc -r -lX --accept-regex='_tempo_v3' -A '*' -R 'catalog*' -I /thredds/fileServer/,/thredds/catalog/ \
wget -q -e robots=off -nH --cut-dirs N -nc -r -lX -A '*' -R 'catalog*' -I /thredds/fileServer/,/thredds/catalog/ \
https://gsl.noaa.gov/thredds/catalog/${mpdata_dir}/catalog.html
mv thredds/fileServer/${mpdata_dir}/* .
rm -rf thredds
Expand All @@ -328,7 +325,7 @@ jobs:
- name: Create and populate run directory (baselines)
run: |
cd ${mpas_run_ROOT} && mkdir run_bl && cd run_bl
cp ${mpas_run_ROOT}/mpas_testcase/run_case/case_files/${nml_version}/${domain}/${{matrix.ic_source}}.${yyyy}${mm}${dd}${hh}/${{env.physics}}/* .
cp ${mpas_run_ROOT}/mpas_testcase_bl/run_case/case_files/${nml_version}/${domain}/${{matrix.ic_source}}.${yyyy}${mm}${dd}${hh}/${{env.physics}}/* .
ln -sf ${mpas_bl_ROOT}/src/core_atmosphere/physics/physics_wrf/files/*.TBL .
ln -sf ${mpas_bl_ROOT}/src/core_atmosphere/physics/physics_wrf/files/*.DBL .
ln -sf ${mpas_bl_ROOT}/src/core_atmosphere/physics/physics_wrf/files/*DATA .
Expand Down Expand Up @@ -368,6 +365,7 @@ jobs:
ln -sf ${mpas_rt_ROOT}/MPAS-Model/atmosphere_model atmosphere_model
ln -sf ${mpas_run_ROOT}/run_data/${{steps.set_vars.outputs.ugwp_file}} mpas.ugwp_oro_data.nc
ln -sf ${runner_ROOT}/tempo/* .
ln -sf ${mpas_rt_ROOT}/MPAS-Model/src/core_atmosphere/physics/physics_noaa/TEMPO/tables/ccn_activate.bin .
ln -sf ${runner_ROOT}/ugw/ugwp_limb_tau.nc .

- name: Link lateral boundary condition file for regional MPAS (feature)
Expand Down
14 changes: 9 additions & 5 deletions src/core_atmosphere/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -217,13 +217,17 @@ else()
endif()

set(ATMOSPHERE_CORE_PHYSICS_TEMPO_SOURCES
module_mp_tempo_main.F90
module_mp_tempo_params.F90
module_mp_tempo_utils.F90
module_mp_tempo_ml.F90
drivers/mpas/module_mp_tempo.F90
src/module_mp_tempo_cfgs.F90
src/module_mp_tempo_params.F90
src/module_mp_tempo_ml.F90
src/module_mp_tempo_utils.F90
src/module_mp_tempo_diags.F90
src/module_mp_tempo_aerosols.F90
src/module_mp_tempo_main.F90
src/module_mp_tempo_driver.F90
)
list(TRANSFORM ATMOSPHERE_CORE_PHYSICS_TEMPO_SOURCES PREPEND physics/physics_noaa/TEMPO/)
set_source_files_properties(physics/physics_noaa/TEMPO/src/module_mp_tempo_params.F90 PROPERTIES COMPILE_OPTIONS "-Dtempo_mpas")

set(ATMOSPHERE_CORE_PHYSICS_MYNN-EDMF_DIR ${CMAKE_CURRENT_SOURCE_DIR}/physics/physics_noaa/MYNN-EDMF)

Expand Down
52 changes: 19 additions & 33 deletions src/core_atmosphere/Registry.xml
Original file line number Diff line number Diff line change
Expand Up @@ -421,9 +421,9 @@
<package name="mp_kessler_in" description="parameterization of kessler microphysics."/>
<package name="mp_thompson_in" description="parameterization of Thompson cloud microphysics."/>
<package name="mp_thompson_aers_in" description="parameterization of aerosol-aware Thompson cloud microphysics."/>
<package name="mp_tempo_in" description="parameterization of TEMPO cloud microphysics."/>
<package name="tempo_aerosolaware_in" description="variables for TEMPO with aerosol-aware microphysics."/>
<package name="tempo_hailaware_in" description="variables for TEMPO hail-aware microphysics."/>
<package name="mp_tempo_in" description="parameterization of TEMPO cloud microphysics."/>
<package name="tempo_aerosolaware_in" description="variables for TEMPO with aerosol-aware microphysics."/>
<package name="tempo_hailaware_in" description="variables for TEMPO hail-aware microphysics."/>
<package name="mp_wsm6_in" description="parameterization of WSM6 cloud microphysics."/>
<package name="mp_nssl2m_in" description="parameterization of NSSL 2-moment microphysics."/>
<package name="nssl3m_in" description="variables for NSSL 3-moment microphysics."/>
Expand Down Expand Up @@ -2725,28 +2725,18 @@
description="configuration for cloud microphysics schemes"
possible_values="`suite',`mp_wsm6',`mp_tempo',`mp_thompson',`mp_thompson_aerosols', `mp_kessler',`mp_nssl2m',`off'"/>

<nml_option name="config_tempo_hailaware" type="logical" default_value="false" in_defaults="false"
units="-"
description="Logical flag to turn on/off prognostic graupel number concentration and rime density"
possible_values=".true. or .false."/>

<nml_option name="config_tempo_cldfra" type="logical" default_value="false" in_defaults="false"
units="-"
<nml_option name="config_tempo_cldfra" type="logical" default_value="false" in_defaults="false"
units="-"
description="Logical flag to turn on/off prognostic cloud fraction"
possible_values=".true. or .false."/>

<nml_option name="config_tempo_ml_nc_pbl" type="logical" default_value="false" in_defaults="false"
units="-"
description="Logical flag to turn on/off ML prediction of boundary layer cloud number concentrations"
possible_values=".true. or .false."/>

<nml_option name="config_tempo_ml_nc" type="logical" default_value="false" in_defaults="false"
units="-"
<nml_option name="config_tempo_ml_nc" type="logical" default_value="false" in_defaults="false"
units="-"
description="Logical flag to turn on/off ML prediction of microphysics cloud number concentrations"
possible_values=".true. or .false."/>

<nml_option name="config_tempo_ml_nr" type="logical" default_value="false" in_defaults="false"
units="-"
<nml_option name="config_tempo_ml_nr" type="logical" default_value="false" in_defaults="false"
units="-"
description="Logical flag to turn on/off ML prediction of microphysics rain number concentrations"
possible_values=".true. or .false."/>

Expand Down Expand Up @@ -2947,11 +2937,6 @@
description="configuration for spp boundary layer"
possible_values="`0: off',`1: activated'"/>

<nml_option name="config_tempo_aerosolaware" type="logical" default_value="true" in_defaults="false"
units="-"
description="Logical flag to turn on/off prognostic cloud droplet and aerosol number concentrations"
possible_values=".true. or .false."/>

<nml_option name="config_bucket_radt" type="real" default_value="1.0e9" in_defaults="false"
units="-"
description="threshold above which accumulated radiation diagnostics are reset"
Expand Down Expand Up @@ -3018,20 +3003,20 @@
<!-- ... PARAMETERIZATION OF CLOUD MICROPHYSICS: -->
<!-- ================================================================================================== -->

<var name="max_hail_diameter_sfc" type="real" dimensions="nCells Time" units="mm"
description="Maximum hail diameter at the surface"
<var name="max_hail_diameter_sfc" type="real" dimensions="nCells Time" units="mm"
description="Instantaneous maximum hail diameter at the surface"
packages="mp_tempo_in"/>

<var name="max_hail_diameter_column" type="real" dimensions="nCells Time" units="mm"
description="Maximum hail diameter in the vertical column"
<var name="max_hail_diameter_column" type="real" dimensions="nCells Time" units="mm"
description="Instantaneous maximum hail diameter in the vertical column"
packages="mp_tempo_in"/>

<var name="max_hail_diameter_column_acc" type="real" dimensions="nCells Time" units="mm"
description="Maximum hail diameter in the vertical column accumulated over diagnostic output"
<var name="max_hail_diameter_sfc_acc" type="real" dimensions="nCells Time" units="mm"
description="Maximum hail diameter at the surface during the diagnostic output time window"
packages="mp_tempo_in"/>

<var name="max_hail_diameter_sfc_acc" type="real" dimensions="nCells Time" units="mm"
description="Maximum hail diameter at the surface accumulated over diagnostic output"
<var name="max_hail_diameter_column_acc" type="real" dimensions="nCells Time" units="mm"
description="Maximum hail diameter in the vertical column during the diagnostic output time window"
packages="mp_tempo_in"/>

<var name="do_diag_dbz" type="integer" dimensions="" units = ""
Expand Down Expand Up @@ -4675,6 +4660,7 @@

#ifdef DO_PHYSICS
#include "physics/Registry_noahmp.xml"
#include "physics/Registry_tempo.xml"
#include "physics/registry.chemistry.xml"
#endif
</registry>
37 changes: 31 additions & 6 deletions src/core_atmosphere/diagnostics/mpas_soundings.F
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ module mpas_soundings
type (MPAS_pool_type), pointer :: mesh
type (MPAS_pool_type), pointer :: state
type (MPAS_pool_type), pointer :: diag
type (MPAS_pool_type), pointer :: diag_physics

integer :: nSoundings = 0
logical, allocatable, dimension(:) :: stationOwned
Expand Down Expand Up @@ -88,6 +89,7 @@ subroutine soundings_setup(configs, all_pools, simulation_clock, dminfo)
call mpas_pool_get_subpool(all_pools, 'mesh', mesh)
call mpas_pool_get_subpool(all_pools, 'state', state)
call mpas_pool_get_subpool(all_pools, 'diag', diag)
call mpas_pool_get_subpool(all_pools, 'diag_physics', diag_physics)

!
! Query the config_sounding_interval namelist option without triggering
Expand Down Expand Up @@ -237,11 +239,12 @@ subroutine soundings_compute()
implicit none

integer :: iStn, k
integer, pointer :: nVertLevels, index_qv
integer, pointer :: nVertLevels, index_qv, index_qc, index_qr, index_qi, index_qs, index_qg
real (kind=RKIND), dimension(:,:), pointer :: pressure_base, pressure_p, uReconstructZonal, uReconstructMeridional, zgrid, &
theta_m, exner
real (kind=RKIND), dimension(:), pointer :: rainncv, snowncv, graupelncv
real (kind=RKIND), dimension(:,:,:), pointer :: scalars
real (kind=RKIND) :: tmpc, tdpc, dir, spd, rh, log_rh, qvs, pres
real (kind=RKIND) :: tmpc, tdpc, dir, spd, rh, log_rh, qvs, pres, qc, qr, qi, qs, qg
type (MPAS_time_type) :: now
character(len=StrKIND) :: nowString
integer :: yyyy, mm, dd, h, m, s
Expand All @@ -257,6 +260,11 @@ subroutine soundings_compute()

call MPAS_pool_get_dimension(mesh, 'nVertLevels', nVertLevels)
call MPAS_pool_get_dimension(state, 'index_qv', index_qv)
call MPAS_pool_get_dimension(state, 'index_qc', index_qc)
call MPAS_pool_get_dimension(state, 'index_qr', index_qr)
call MPAS_pool_get_dimension(state, 'index_qi', index_qi)
call MPAS_pool_get_dimension(state, 'index_qs', index_qs)
call MPAS_pool_get_dimension(state, 'index_qg', index_qg)
call MPAS_pool_get_array(mesh, 'zgrid', zgrid)
call MPAS_pool_get_array(state, 'scalars', scalars, 1)
call MPAS_pool_get_array(state, 'theta_m', theta_m, 1)
Expand All @@ -265,6 +273,9 @@ subroutine soundings_compute()
call MPAS_pool_get_array(diag, 'exner', exner)
call MPAS_pool_get_array(diag, 'uReconstructZonal', uReconstructZonal)
call MPAS_pool_get_array(diag, 'uReconstructMeridional', uReconstructMeridional)
call MPAS_pool_get_array(diag_physics, 'rainncv', rainncv)
call MPAS_pool_get_array(diag_physics, 'snowncv', snowncv)
call MPAS_pool_get_array(diag_physics, 'graupelncv', graupelncv)

! call mpas_log_write('--- Writing soundings at '//trim(nowString)//'---')

Expand All @@ -278,12 +289,12 @@ subroutine soundings_compute()

write(stid,'(a)') trim(stationNames(iStn))

write(sndUnit,'(a)') ' SNPARM = PRES;HGHT;TMPC;DWPC;DRCT;SPED;'
write(sndUnit,'(a)') ' SNPARM = PRES;HGHT;TMPC;DWPC;DRCT;SPED;QC;QR;QI;QS;QG;RAINNCV;SNOWNCV;GRAUPELNCV'
write(sndUnit,'(a)') ''
write(sndUnit,'(a,i2.2,i2.2,i2.2,a,i2.2,i2.2)') ' STID = '//stid//' STNM = 99999 TIME = ', mod(yyyy,100), mm, dd,'/', h, m
write(sndUnit,'(a,f6.2,a,f7.2,a)') ' SLAT = ', stationLats(iStn), ' SLON = ', stationLons(iStn), ' SELV = -999'
write(sndUnit,'(a)') ''
write(sndUnit,'(a)') ' PRES HGHT TMPC DWPC DRCT SPED'
write(sndUnit,'(a)') ' PRES HGHT TMPC DWPC DRCT SPED QC QR QI QS QG RAINNCV SNOWNCV GRAUPELNCV'

do k=1,nVertLevels
tmpc = theta_m(k,stationCells(iStn)) / (1.0_RKIND + rvord * scalars(index_qv,k,stationCells(iStn))) * exner(k,stationCells(iStn))
Expand All @@ -308,13 +319,27 @@ subroutine soundings_compute()
end if
dir = dir * 180.0_RKIND / pi_const
end if
write(sndUnit,'(f10.2,f10.2,f9.2,f9.2,f9.2,f9.2)') &
qc = scalars(index_qc,k,stationCells(iStn))
qr = scalars(index_qr,k,stationCells(iStn))
qi = scalars(index_qi,k,stationCells(iStn))
qs = scalars(index_qs,k,stationCells(iStn))
qg = scalars(index_qg,k,stationCells(iStn))

write(sndUnit,'(f10.2,f10.2,f9.2,f9.2,f9.2,f9.2,e15.4,e15.4,e15.4,e15.4,e15.4,e15.4,e15.4,e15.4)') &
pres, &
0.5 * (zgrid(k,stationCells(iStn)) + zgrid(k+1,stationCells(iStn))), & ! Avg to layer midpoint
tmpc, &
tdpc, &
dir, &
spd
spd, &
1000.*qc, &
1000.*qr, &
1000.*qi, &
1000.*qs, &
1000.*qg, &
rainncv(iStn), &
snowncv(iStn), &
graupelncv(iStn)
end do

close(sndUnit)
Expand Down
1 change: 0 additions & 1 deletion src/core_atmosphere/mpas_atm_core.F
Original file line number Diff line number Diff line change
Expand Up @@ -588,7 +588,6 @@ subroutine atm_mpas_init_block(dminfo, stream_manager, block, mesh, dt)
!initialization of all physics:
call physics_init(dminfo, stream_manager, clock, block % configs, mesh, diag, tend, state, 1, &
diag_physics, diag_physics_noahmp, ngw_input, atm_input, sfc_input, output_noahmp)
call tempo_ml_init(block % configs)
endif
#endif

Expand Down
4 changes: 2 additions & 2 deletions src/core_atmosphere/physics/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ core_physics_mmm: core_physics_init
(cd physics_mmm; $(MAKE) -f Makefile.mpas all)

core_microphysics: core_physics_init core_physics_mmm
(cd physics_noaa/TEMPO; cp ./drivers/mpas/module_mp_tempo.F90 .; $(MAKE) all COREDEF="$(COREDEF)")
(cd physics_noaa/TEMPO; $(MAKE) -f Makefile.mpas)

core_SMOKE: core_physics_init
(cd physics_noaa/SMOKE; cp ./MPAS/Makefile .; cp ./MPAS/mpas_smoke_wrapper.F90 .; $(MAKE) all)
Expand Down Expand Up @@ -286,7 +286,7 @@ clean:
( cd physics_noahmp/drivers/mpas; $(MAKE) clean )
( cd physics_noahmp/src; $(MAKE) clean )
( cd physics_noahmp/utility; $(MAKE) clean )
( if [ -d physics_noaa/TEMPO ]; then cd physics_noaa/TEMPO; $(MAKE) clean; fi )
( if [ -d physics_noaa/TEMPO ]; then cd physics_noaa/TEMPO; $(MAKE) -f Makefile.mpas clean; fi )
( if [ -d physics_noaa/UGWP ]; then cd physics_noaa/UGWP; $(MAKE) clean; fi )
( if [ -d physics_noaa/RUCLSM ]; then cd physics_noaa/RUCLSM; $(MAKE) -f MPAS/Makefile clean; fi )
( if [ -d physics_noaa/MYNN-EDMF ]; then cd physics_noaa/MYNN-EDMF; cp ./MPAS/Makefile .; $(MAKE) clean; fi )
Expand Down
29 changes: 29 additions & 0 deletions src/core_atmosphere/physics/Registry_tempo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<!-- ========================================================================================================= -->
<!-- ARRAYS SPECIFIC TO TEMPO: -->
<!-- ========================================================================================================= -->

<nml_record name="physics_mp_tempo" in_defaults="true">

<nml_option name="config_tempo_aerosolaware" type="logical" default_value="true" in_defaults="false"
units="-"
description="Logical flag to turn on/off prognostic cloud droplet and aerosol number concentrations"
possible_values=".true. or .false."/>

<nml_option name="config_tempo_hailaware" type="logical" default_value="true" in_defaults="false"
units="-"
description="Logical flag to turn on/off prognostic graupel number concentration and rime density"
possible_values=".true. or .false."/>

<nml_option name="config_tempo_ml_for_bl_nc" type="logical" default_value="false" in_defaults="false"
units="-"
description="Logical flag to turn on/off ML prediction of boundary layer cloud number concentrations"
possible_values=".true. or .false."/>

<nml_option name="config_tempo_refl10cm_from_melting" type="logical" default_value="false" in_defaults="false"
units="-"
description="Logical flag to turn on/off reflectivity calculation from melting snow and graupel"
possible_values=".true. or .false."/>

</nml_record>

<!-- ========================================================================================================= -->
Loading
Loading