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