diff --git a/src/data/registry.xml b/src/data/registry.xml
index 83ba849e0..fadcc1f46 100644
--- a/src/data/registry.xml
+++ b/src/data/registry.xml
@@ -575,8 +575,21 @@
standard_name="specific_heat_of_air_used_in_dycore"
units="J kg-1 K-1" type="real" kind="kind_phys"
allocatable="allocatable">
- specific heat of air used in the dynamical core (enthalpy for pressure-based dynamical cores and internal energy for z-based dynamical cores)
+ specific heat of air used in the dynamical core (enthalpy for pressure-based dynamical cores and internal energy for z-based dynamical cores), updated mid-physics for post-mass-adjustment total energy diagnostics
horizontal_dimension vertical_layer_dimension
+ 0._kind_phys
+
+
+ Specific heat of air used in the dynamical core (enthalpy for pressure-based dynamical cores and internal energy for z-based dynamical cores), at start of physics timestep, for energy-consistency scaling and energy checker
+ horizontal_dimension vertical_layer_dimension
+
cp_or_cv_dycore
diff --git a/src/dynamics/mpas/dyn_coupling_impl.F90 b/src/dynamics/mpas/dyn_coupling_impl.F90
index 2eb90f696..b6247ce90 100644
--- a/src/dynamics/mpas/dyn_coupling_impl.F90
+++ b/src/dynamics/mpas/dyn_coupling_impl.F90
@@ -507,7 +507,8 @@ subroutine set_physics_state_external()
use dyn_comp, only: advected_constituent_index, mpas_dynamical_core
use dyn_procedures, only: exner_function
use dynconst, only: constant_g => gravit
- use physics_types, only: cappav, cp_or_cv_dycore, cpairv, lagrangian_vertical, phys_state, rairv, zvirv
+ use physics_types, only: cappav, cp_or_cv_dycore, cp_or_cv_dycore_at_start_of_physics_timestep, &
+ cpairv, lagrangian_vertical, phys_state, rairv, zvirv
use runtime_obj, only: cam_runtime_opts
use string_utils, only: stringify
use vert_coord, only: pver, pverp
@@ -565,6 +566,8 @@ subroutine set_physics_state_external()
call cam_thermo_water_update( &
constituents, ncells_solve, pver, energy_formula_dycore_mpas, cp_or_cv_dycore)
+ cp_or_cv_dycore_at_start_of_physics_timestep(:, :) = cp_or_cv_dycore(:, :)
+
! This variable name is really misleading. It actually represents the reciprocal of Exner function
! with respect to surface pressure. This definition is sometimes used for boundary layer work. See
! the paragraph below equation 1.5.1c in doi:10.1007/978-94-009-3027-8.
diff --git a/src/dynamics/se/dp_coupling.F90 b/src/dynamics/se/dp_coupling.F90
index de4f7fe06..ae351a660 100644
--- a/src/dynamics/se/dp_coupling.F90
+++ b/src/dynamics/se/dp_coupling.F90
@@ -588,6 +588,7 @@ subroutine derived_phys_dry(cam_runtime_opts, phys_state, phys_tend)
use air_composition, only: dry_air_species_num
use physics_types, only: cpairv, rairv, zvirv, cappav
use physics_types, only: cp_or_cv_dycore
+ use physics_types, only: cp_or_cv_dycore_at_start_of_physics_timestep
use physics_grid, only: columns_on_task
use geopotential_temp, only: geopotential_temp_run
use static_energy, only: update_dry_static_energy_run
@@ -807,6 +808,8 @@ subroutine derived_phys_dry(cam_runtime_opts, phys_state, phys_tend)
cp_or_cv_dycore = cp_or_cv_dycore &
)
+ cp_or_cv_dycore_at_start_of_physics_timestep(:,:) = cp_or_cv_dycore(:,:)
+
!$omp parallel do num_threads(horz_num_threads) private (k, i)
do k = 1, nlev
do i = 1, pcols
diff --git a/tools/stdnames_to_inputnames_dictionary.xml b/tools/stdnames_to_inputnames_dictionary.xml
index dbd84b994..bbe5d9fba 100644
--- a/tools/stdnames_to_inputnames_dictionary.xml
+++ b/tools/stdnames_to_inputnames_dictionary.xml
@@ -196,7 +196,7 @@
state_tw_cur
-
+
cp_or_cv_dycore