From 25b60e6b3e32537ab77d52c6be3822c7dbb0983e Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Thu, 4 Dec 2025 15:05:28 -0500 Subject: [PATCH 1/4] gw_drag_diags push for PR --- .../gravity_wave_drag_common_diagnostics.F90 | 54 ++++++ .../gravity_wave_drag_common_diagnostics.meta | 36 ++++ ..._wave_drag_convection_deep_diagnostics.F90 | 103 +++++++++++ ...wave_drag_convection_deep_diagnostics.meta | 113 ++++++++++++ ...ty_wave_drag_frontogenesis_diagnostics.F90 | 126 ++++++++++++++ ...y_wave_drag_frontogenesis_diagnostics.meta | 137 +++++++++++++++ ..._wave_drag_moving_mountain_diagnostics.F90 | 125 ++++++++++++++ ...wave_drag_moving_mountain_diagnostics.meta | 161 ++++++++++++++++++ ...avity_wave_drag_orographic_diagnostics.F90 | 92 ++++++++++ ...vity_wave_drag_orographic_diagnostics.meta | 89 ++++++++++ ...avity_wave_drag_ridge_beta_diagnostics.F90 | 108 ++++++++++++ ...vity_wave_drag_ridge_beta_diagnostics.meta | 113 ++++++++++++ suites/suite_cam4.xml | 1 + suites/suite_cam7.xml | 4 + test/test_suites/suite_gw_cam4.xml | 1 + test/test_suites/suite_gw_cam7_se.xml | 4 + 16 files changed, 1267 insertions(+) create mode 100644 schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.F90 create mode 100644 schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.meta create mode 100644 schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.F90 create mode 100644 schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.meta create mode 100644 schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.F90 create mode 100644 schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.meta create mode 100644 schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.F90 create mode 100644 schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.meta create mode 100644 schemes/sima_diagnostics/gravity_wave_drag_ridge_beta_diagnostics.F90 create mode 100644 schemes/sima_diagnostics/gravity_wave_drag_ridge_beta_diagnostics.meta diff --git a/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.F90 b/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.F90 index f152feba..14626402 100644 --- a/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.F90 +++ b/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.F90 @@ -27,29 +27,83 @@ subroutine gravity_wave_drag_common_diagnostics_init(errmsg, errflg) ! History add field calls call history_add_field('EKGW', 'effective_diffusivity_coefficient_at_interfaces_due_to_gravity_wave_drag', 'ilev', 'avg', 'm2 s-1') + call history_add_field('TTGW', 'tendency_of_air_temperature_due_to_gravity_wave_drag', 'lev', 'avg', 'K s-1') + call history_add_field('UTGW_TOTAL', 'tendency_of_eastward_wind_due_to_gravity_wave_drag', 'lev', 'avg', 'm s-2') + call history_add_field('VTGW_TOTAL', 'tendency_of_northward_wind_due_to_gravity_wave_drag', 'lev', 'avg', 'm s-2') + call history_add_field('QTGW', 'tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_due_to_gravity_wave_drag', 'lev', 'avg', 'kg kg-1 s-1') + call history_add_field('CLDLIQTGW', 'tendency_of_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water_due_to_gravity_wave_drag', 'lev', 'avg', 'kg kg-1 s-1') + call history_add_field('CLDICETGW', 'tendency_of_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water_due_to_gravity_wave_drag', 'lev', 'avg', 'kg kg-1 s-1') end subroutine gravity_wave_drag_common_diagnostics_init !> \section arg_table_gravity_wave_drag_common_diagnostics_run Argument Table !! \htmlinclude gravity_wave_drag_common_diagnostics_run.html subroutine gravity_wave_drag_common_diagnostics_run( & + const_props, & + cpairv, & egwdffi_tot, & + tend_q, & ! all ccpp constituent tendencies + tend_u, tend_v, tend_s, & errmsg, errflg) use cam_history, only: history_out_field + use runtime_obj, only: wv_stdname + + use ccpp_const_utils, only: ccpp_const_get_idx + + ! framework dependency for const_props + use ccpp_constituent_prop_mod, only: ccpp_constituent_prop_ptr_t + ! Input parameters + type(ccpp_constituent_prop_ptr_t), intent(in) :: const_props(:) + real(kind_phys), intent(in) :: cpairv(:,:) real(kind_phys), intent(in) :: egwdffi_tot(:,:) + real(kind_phys), intent(in) :: tend_q(:,:,:) + real(kind_phys), intent(in) :: tend_u(:,:) + real(kind_phys), intent(in) :: tend_v(:,:) + real(kind_phys), intent(in) :: tend_s(:,:) ! CCPP error handling variables character(len=512), intent(out) :: errmsg integer, intent(out) :: errflg + ! Local variables for constituent indices + integer :: const_wv_idx, const_cldliq_idx, const_cldice_idx + errmsg = '' errflg = 0 + ! Get constituent indices for wv, cldliq, cldice + call ccpp_const_get_idx(const_props, & + wv_stdname, & + const_wv_idx, errmsg, errflg) + if (errflg /= 0) return + + call ccpp_const_get_idx(const_props, & + 'cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water', & + const_cldliq_idx, errmsg, errflg) + if (errflg /= 0) return + + call ccpp_const_get_idx(const_props, & + 'cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water', & + const_cldice_idx, errmsg, errflg) + if (errflg /= 0) return + ! History out field calls call history_out_field('EKGW', egwdffi_tot) + call history_out_field('TTGW', tend_s/cpairv) + call history_out_field('UTGW_TOTAL', tend_u) + call history_out_field('VTGW_TOTAL', tend_v) + + call history_out_field('QTGW', tend_q(:,:,const_wv_idx)) + if(const_cldliq_idx > 0) then + call history_out_field('CLDLIQTGW', tend_q(:,:,const_cldliq_idx)) + endif + + if(const_cldice_idx > 0) then + call history_out_field('CLDICETGW', tend_q(:,:,const_cldice_idx)) + endif end subroutine gravity_wave_drag_common_diagnostics_run diff --git a/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.meta b/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.meta index d447ea8f..5b02adc2 100644 --- a/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.meta +++ b/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.meta @@ -21,12 +21,48 @@ [ccpp-arg-table] name = gravity_wave_drag_common_diagnostics_run type = scheme +[ const_props ] + standard_name = ccpp_constituent_properties + units = none + type = ccpp_constituent_prop_ptr_t + dimensions = (number_of_ccpp_constituents) + intent = in +[ cpairv ] + standard_name = composition_dependent_specific_heat_of_dry_air_at_constant_pressure + units = J kg-1 K-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in [ egwdffi_tot ] standard_name = effective_diffusivity_coefficient_at_interfaces_due_to_gravity_wave_drag units = m2 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_interface_dimension) intent = in +[ tend_q ] + standard_name = ccpp_constituent_tendencies + units = none + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension, number_of_ccpp_constituents) + intent = in +[ tend_u ] + standard_name = tendency_of_eastward_wind + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ tend_v ] + standard_name = tendency_of_northward_wind + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ tend_s ] + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure + units = J kg-1 s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in [ errmsg ] standard_name = ccpp_error_message units = none diff --git a/schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.F90 b/schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.F90 new file mode 100644 index 00000000..a30af61e --- /dev/null +++ b/schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.F90 @@ -0,0 +1,103 @@ +! Diagnostics for gravity wave drag from deep convection (Beres scheme) +module gravity_wave_drag_convection_deep_diagnostics + use ccpp_kinds, only: kind_phys + + implicit none + private + + public :: gravity_wave_drag_convection_deep_diagnostics_init + public :: gravity_wave_drag_convection_deep_diagnostics_run + +contains + +!> \section arg_table_gravity_wave_drag_convection_deep_diagnostics_init Argument Table +!! \htmlinclude gravity_wave_drag_convection_deep_diagnostics_init.html + subroutine gravity_wave_drag_convection_deep_diagnostics_init(errmsg, errflg) + use cam_history, only: history_add_field + use cam_history_support, only: horiz_only + + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errflg + + errmsg = '' + errflg = 0 + + call history_add_field('BTTGWSDF', 'tendency_of_air_temperature_due_to_diffusion_due_to_deep_convective_gravity_wave_drag', 'lev', 'avg', 'K s-1') + call history_add_field('BTTGWSKE', 'tendency_of_air_temperature_due_to_kinetic_energy_dissipation_due_to_deep_convective_gravity_wave_drag', 'lev', 'avg', 'K s-1') + + ! Wind tendencies + ! These are vector fields. + ! TODO: register_vector_field equivalent in CAM-SIMA? + call history_add_field('BUTGWSPEC', 'tendency_of_eastward_wind_due_to_deep_convective_gravity_wave_drag', 'lev', 'avg', 'm s-2') + call history_add_field('BVTGWSPEC', 'tendency_of_northward_wind_due_to_deep_convective_gravity_wave_drag', 'lev', 'avg', 'm s-2') + + call history_add_field('BTTGWSPEC', 'tendency_of_air_temperature_due_to_deep_convective_gravity_wave_drag', 'lev', 'avg', 'K s-1') + + call history_add_field('BTAUE', 'eastward_reynolds_stress_due_to_deep_convective_gravity_wave_drag', 'ilev', 'avg', 'Pa') + call history_add_field('BTAUW', 'westward_reynolds_stress_due_to_deep_convective_gravity_wave_drag', 'ilev', 'avg', 'Pa') + call history_add_field('BTAUN', 'northward_reynolds_stress_due_to_deep_convective_gravity_wave_drag', 'ilev', 'avg', 'Pa') + call history_add_field('BTAUS', 'southward_reynolds_stress_due_to_deep_convective_gravity_wave_drag', 'ilev', 'avg', 'Pa') + call history_add_field('BTAUNET', 'net_eastward_reynolds_stress_due_to_deep_convective_gravity_wave_drag', 'ilev', 'avg', 'Pa') + + call history_add_field('NETDT', 'tendency_of_air_temperature_due_to_deep_convection', 'lev', 'avg', 'K s-1') + call history_add_field('HDEPTH', 'convective_heating_depth_due_to_deep_convective_gravity_wave_drag', horiz_only, 'avg', 'km') + call history_add_field('MAXQ0', 'maximum_column_heating_rate_due_to_deep_convective_gravity_wave_drag', horiz_only, 'avg', 'K day-1') + + end subroutine gravity_wave_drag_convection_deep_diagnostics_init + +!> \section arg_table_gravity_wave_drag_convection_deep_diagnostics_run Argument Table +!! \htmlinclude gravity_wave_drag_convection_deep_diagnostics_run.html + subroutine gravity_wave_drag_convection_deep_diagnostics_run( & + cpair, & + dttdf, dttke, & + utgw, vtgw, ttgw, & + taucd_east, taucd_west, taucd_north, taucd_south, & + ttend_dp, hdepth, maxq0, & + errmsg, errflg) + + use cam_history, only: history_out_field + + real(kind_phys), intent(in) :: cpair + real(kind_phys), intent(in) :: dttdf(:,:) + real(kind_phys), intent(in) :: dttke(:,:) + real(kind_phys), intent(in) :: utgw(:,:) + real(kind_phys), intent(in) :: vtgw(:,:) + real(kind_phys), intent(in) :: ttgw(:,:) + real(kind_phys), intent(in) :: taucd_east(:,:) + real(kind_phys), intent(in) :: taucd_west(:,:) + real(kind_phys), intent(in) :: taucd_north(:,:) + real(kind_phys), intent(in) :: taucd_south(:,:) + real(kind_phys), intent(in) :: ttend_dp(:,:) ! [K s-1] + real(kind_phys), intent(in) :: hdepth(:) ! [m] + real(kind_phys), intent(in) :: maxq0(:) ! [K day-1] + + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errflg + + errmsg = '' + errflg = 0 + + ! Output temperature tendencies (convert from J/kg/s to K/s) + ! Note: this uses cpair instead of cpairv. + ! Also see atmospheric_physics issue #320. + call history_out_field('BTTGWSDF', dttdf / cpair) + call history_out_field('BTTGWSKE', dttke / cpair) + + call history_out_field('BUTGWSPEC', utgw) + call history_out_field('BVTGWSPEC', vtgw) + call history_out_field('BTTGWSPEC', ttgw) + + call history_out_field('BTAUE', taucd_east) + call history_out_field('BTAUW', taucd_west) + call history_out_field('BTAUN', taucd_north) + call history_out_field('BTAUS', taucd_south) + call history_out_field('BTAUNET', taucd_east + taucd_west) + + call history_out_field('NETDT', ttend_dp) + ! Output heating diagnostics (convert depth to km) + call history_out_field('HDEPTH', hdepth / 1000.0_kind_phys) + call history_out_field('MAXQ0', maxq0) + + end subroutine gravity_wave_drag_convection_deep_diagnostics_run + +end module gravity_wave_drag_convection_deep_diagnostics diff --git a/schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.meta b/schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.meta new file mode 100644 index 00000000..5113fb42 --- /dev/null +++ b/schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.meta @@ -0,0 +1,113 @@ +[ccpp-table-properties] + name = gravity_wave_drag_convection_deep_diagnostics + type = scheme + +[ccpp-arg-table] + name = gravity_wave_drag_convection_deep_diagnostics_init + type = scheme +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=512 + dimensions = () + intent = out +[ errflg ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out + +[ccpp-arg-table] + name = gravity_wave_drag_convection_deep_diagnostics_run + type = scheme +[ cpair ] + standard_name = specific_heat_of_dry_air_at_constant_pressure + units = J kg-1 K-1 + type = real | kind = kind_phys + dimensions = () + intent = in +[ dttdf ] + standard_name = tendency_of_air_temperature_due_to_diffusion_due_to_deep_convective_gravity_wave_drag + units = J kg-1 s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ dttke ] + standard_name = tendency_of_air_temperature_due_to_kinetic_energy_dissipation_due_to_deep_convective_gravity_wave_drag + units = J kg-1 s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ utgw ] + standard_name = tendency_of_eastward_wind_due_to_deep_convective_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ vtgw ] + standard_name = tendency_of_northward_wind_due_to_deep_convective_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ ttgw ] + standard_name = tendency_of_air_temperature_due_to_deep_convective_gravity_wave_drag + units = J kg-1 s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ taucd_east ] + standard_name = eastward_reynolds_stress_due_to_deep_convective_gravity_wave_drag + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ taucd_west ] + standard_name = westward_reynolds_stress_due_to_deep_convective_gravity_wave_drag + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ taucd_north ] + standard_name = northward_reynolds_stress_due_to_deep_convective_gravity_wave_drag + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ taucd_south ] + standard_name = southward_reynolds_stress_due_to_deep_convective_gravity_wave_drag + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ ttend_dp ] + standard_name = tendency_of_air_temperature_due_to_deep_convection + units = K s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ hdepth ] + standard_name = convective_heating_depth_due_to_deep_convective_gravity_wave_drag + units = km + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ maxq0 ] + standard_name = maximum_column_heating_rate_due_to_deep_convective_gravity_wave_drag + units = K day-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=512 + dimensions = () + intent = out +[ errflg ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out diff --git a/schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.F90 b/schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.F90 new file mode 100644 index 00000000..234de8da --- /dev/null +++ b/schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.F90 @@ -0,0 +1,126 @@ +! Diagnostics for gravity wave drag from frontogenesis. +module gravity_wave_drag_frontogenesis_diagnostics + use ccpp_kinds, only: kind_phys + + implicit none + private + + public :: gravity_wave_drag_frontogenesis_diagnostics_init + public :: gravity_wave_drag_frontogenesis_diagnostics_run + +contains + +!> \section arg_table_gravity_wave_drag_frontogenesis_diagnostics_init Argument Table +!! \htmlinclude gravity_wave_drag_frontogenesis_diagnostics_init.html + subroutine gravity_wave_drag_frontogenesis_diagnostics_init(errmsg, errflg) + use cam_history, only: history_add_field + + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errflg + + errmsg = '' + errflg = 0 + + ! Frontogenesis function + call history_add_field('FRONTGF', 'frontogenesis_function', 'lev', 'avg', 'K2 m-2 s-1') + call history_add_field('FRONTGFA', 'frontogenesis_angle', 'lev', 'avg', 'radians') + + ! Wind tendency bins + call history_add_field('UTEND1', 'wind_tendency_in_first_speed_bin_due_to_frontogenesis_gravity_wave_drag c<-40', 'lev', 'avg', 'm s-2') + call history_add_field('UTEND2', 'wind_tendency_in_second_speed_bin_due_to_frontogenesis_gravity_wave_drag -4040', 'lev', 'avg', 'm s-2') + + ! Temperature tendencies (converted from J kg-1 s-1 to K s-1 for output) + call history_add_field('TTGWSDF', 'tendency_of_air_temperature_due_to_diffusion_due_to_frontogenesis_gravity_wave_drag', 'lev', 'avg', 'K s-1') + call history_add_field('TTGWSKE', 'tendency_of_air_temperature_due_to_kinetic_energy_dissipation_due_to_frontogenesis_gravity_wave_drag', 'lev', 'avg', 'K s-1') + + ! Total wind tendencies + call history_add_field('UTGWSPEC', 'tendency_of_eastward_wind_due_to_frontogenesis_gravity_wave_drag', 'lev', 'avg', 'm s-2') + call history_add_field('VTGWSPEC', 'tendency_of_northward_wind_due_to_frontogenesis_gravity_wave_drag', 'lev', 'avg', 'm s-2') + call history_add_field('TTGWSPEC', 'tendency_of_air_temperature_due_to_frontogenesis_gravity_wave_drag', 'lev', 'avg', 'K s-1') + + ! Directional momentum flux + call history_add_field('TAUE', 'eastward_reynolds_stress_due_to_frontogenesis_gravity_wave_drag', 'ilev', 'avg', 'N m-2') + call history_add_field('TAUW', 'westward_reynolds_stress_due_to_frontogenesis_gravity_wave_drag', 'ilev', 'avg', 'N m-2') + call history_add_field('TAUN', 'northward_reynolds_stress_due_to_frontogenesis_gravity_wave_drag', 'ilev', 'avg', 'N m-2') + call history_add_field('TAUS', 'southward_reynolds_stress_due_to_frontogenesis_gravity_wave_drag', 'ilev', 'avg', 'N m-2') + call history_add_field('TAUNET', 'net_eastward_reynolds_stress_due_to_frontogenesis_gravity_wave_drag', 'ilev', 'avg', 'N m-2') + + end subroutine gravity_wave_drag_frontogenesis_diagnostics_init + +!> \section arg_table_gravity_wave_drag_frontogenesis_diagnostics_run Argument Table +!! \htmlinclude gravity_wave_drag_frontogenesis_diagnostics_run.html + subroutine gravity_wave_drag_frontogenesis_diagnostics_run( & + cpair, & + frontgf, frontga, & + utend1, utend2, utend3, utend4, utend5, & + dttdf, dttke, & + utgw, vtgw, ttgw, & + taucd_east, taucd_west, taucd_north, taucd_south, & + errmsg, errflg) + + use cam_history, only: history_out_field + + real(kind_phys), intent(in) :: cpair + + real(kind_phys), intent(in) :: frontgf(:,:) + real(kind_phys), intent(in) :: frontga(:,:) + + real(kind_phys), intent(in) :: utend1(:,:) + real(kind_phys), intent(in) :: utend2(:,:) + real(kind_phys), intent(in) :: utend3(:,:) + real(kind_phys), intent(in) :: utend4(:,:) + real(kind_phys), intent(in) :: utend5(:,:) + + real(kind_phys), intent(in) :: dttdf(:,:) + real(kind_phys), intent(in) :: dttke(:,:) + + real(kind_phys), intent(in) :: utgw(:,:) + real(kind_phys), intent(in) :: vtgw(:,:) + real(kind_phys), intent(in) :: ttgw(:,:) + + real(kind_phys), intent(in) :: taucd_east(:,:) + real(kind_phys), intent(in) :: taucd_west(:,:) + real(kind_phys), intent(in) :: taucd_north(:,:) + real(kind_phys), intent(in) :: taucd_south(:,:) + + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errflg + + errmsg = '' + errflg = 0 + + ! Output frontogenesis function and angle. + call history_out_field('FRONTGF', frontgf) + call history_out_field('FRONTGFA', frontga) + + ! Output wind tendency bins + call history_out_field('UTEND1', utend1) + call history_out_field('UTEND2', utend2) + call history_out_field('UTEND3', utend3) + call history_out_field('UTEND4', utend4) + call history_out_field('UTEND5', utend5) + + ! Output temperature tendencies (convert from J/kg/s to K/s) + ! Note: this uses cpair instead of cpairv. + ! Also see atmospheric_physics issue #320. + call history_out_field('TTGWSDF', dttdf / cpair) + call history_out_field('TTGWSKE', dttke / cpair) + + ! Output wind and temperature tendencies + call history_out_field('UTGWSPEC', utgw) + call history_out_field('VTGWSPEC', vtgw) + call history_out_field('TTGWSPEC', ttgw) + + ! Output directional momentum flux + call history_out_field('TAUE', taucd_east) + call history_out_field('TAUW', taucd_west) + call history_out_field('TAUN', taucd_north) + call history_out_field('TAUS', taucd_south) + call history_out_field('TAUNET', taucd_east + taucd_west) + + end subroutine gravity_wave_drag_frontogenesis_diagnostics_run + +end module gravity_wave_drag_frontogenesis_diagnostics diff --git a/schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.meta b/schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.meta new file mode 100644 index 00000000..47c7ee44 --- /dev/null +++ b/schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.meta @@ -0,0 +1,137 @@ +[ccpp-table-properties] + name = gravity_wave_drag_frontogenesis_diagnostics + type = scheme + +[ccpp-arg-table] + name = gravity_wave_drag_frontogenesis_diagnostics_init + type = scheme +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=512 + dimensions = () + intent = out +[ errflg ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out + +[ccpp-arg-table] + name = gravity_wave_drag_frontogenesis_diagnostics_run + type = scheme +[ cpair ] + standard_name = specific_heat_of_dry_air_at_constant_pressure + units = J kg-1 K-1 + type = real | kind = kind_phys + dimensions = () + intent = in +[ frontgf ] + standard_name = frontogenesis_function + units = K2 m-2 s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ frontga ] + standard_name = frontogenesis_angle + units = radians + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ utend1 ] + standard_name = wind_tendency_in_first_speed_bin_due_to_frontogenesis_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ utend2 ] + standard_name = wind_tendency_in_second_speed_bin_due_to_frontogenesis_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ utend3 ] + standard_name = wind_tendency_in_third_speed_bin_due_to_frontogenesis_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ utend4 ] + standard_name = wind_tendency_in_fourth_speed_bin_due_to_frontogenesis_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ utend5 ] + standard_name = wind_tendency_in_fifth_speed_bin_due_to_frontogenesis_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ dttdf ] + standard_name = tendency_of_air_temperature_due_to_diffusion_due_to_frontogenesis_gravity_wave_drag + units = J kg-1 s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ dttke ] + standard_name = tendency_of_air_temperature_due_to_kinetic_energy_dissipation_due_to_frontogenesis_gravity_wave_drag + units = J kg-1 s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ utgw ] + standard_name = tendency_of_eastward_wind_due_to_frontogenesis_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ vtgw ] + standard_name = tendency_of_northward_wind_due_to_frontogenesis_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ ttgw ] + standard_name = tendency_of_air_temperature_due_to_frontogenesis_gravity_wave_drag + units = K s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ taucd_east ] + standard_name = eastward_reynolds_stress_due_to_frontogenesis_gravity_wave_drag + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ taucd_west ] + standard_name = westward_reynolds_stress_due_to_frontogenesis_gravity_wave_drag + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ taucd_north ] + standard_name = northward_reynolds_stress_due_to_frontogenesis_gravity_wave_drag + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ taucd_south ] + standard_name = southward_reynolds_stress_due_to_frontogenesis_gravity_wave_drag + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=512 + dimensions = () + intent = out +[ errflg ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out diff --git a/schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.F90 b/schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.F90 new file mode 100644 index 00000000..0025d82f --- /dev/null +++ b/schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.F90 @@ -0,0 +1,125 @@ +! Diagnostics for gravity wave drag from moving mountain parameterization +module gravity_wave_drag_moving_mountain_diagnostics + use ccpp_kinds, only: kind_phys + + implicit none + private + + public :: gravity_wave_drag_moving_mountain_diagnostics_init + public :: gravity_wave_drag_moving_mountain_diagnostics_run + +contains + +!> \section arg_table_gravity_wave_drag_moving_mountain_diagnostics_init Argument Table +!! \htmlinclude gravity_wave_drag_moving_mountain_diagnostics_init.html + subroutine gravity_wave_drag_moving_mountain_diagnostics_init(errmsg, errflg) + use cam_history, only: history_add_field + use cam_history_support, only: horiz_only + + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errflg + + errmsg = '' + errflg = 0 + + call history_add_field('U_MOVMTN_IN', 'eastward_wind_before_moving_mountain_gravity_wave_drag', 'lev', 'avg', 'm s-1') + call history_add_field('V_MOVMTN_IN', 'northward_wind_before_moving_mountain_gravity_wave_drag', 'lev', 'avg', 'm s-1') + + call history_add_field('SRC_LEVEL_MOVMTN', 'vertical_index_of_gravity_wave_source_level', horiz_only, 'avg', 'index') + call history_add_field('TND_LEVEL_MOVMTN', 'vertical_index_of_lowest_gravity_wave_tendency_level', horiz_only, 'avg', 'index') + call history_add_field('STEER_LEVEL_MOVMTN', 'index_of_steering_level_due_to_moving_mountain_gravity_wave_drag', horiz_only, 'avg', 'index') + + call history_add_field('UBI_MOVMTN', 'wind_speed_along_gravity_wave_source_direction_at_interfaces', 'ilev', 'inst', 'm s-1') + call history_add_field('UBM_MOVMTN', 'wind_speed_along_gravity_wave_source_direction', 'lev', 'inst', 'm s-1') + + call history_add_field('TAU_MOVMTN', 'total_stress_at_interface_from_reference_wavenumber_due_to_moving_mountain_gravity_wave_drag', 'ilev', 'inst', 'N m-2') + call history_add_field('GWUT_MOVMTN', 'wind_tendency_in_source_direction_due_to_moving_mountain_gravity_wave_drag', 'lev', 'inst', 'm s-2') + call history_add_field('UTGW_MOVMTN', 'tendency_of_eastward_wind_due_to_moving_mountain_gravity_wave_drag', 'lev', 'inst', 'm s-2') + call history_add_field('VTGW_MOVMTN', 'tendency_of_northward_wind_due_to_moving_mountain_gravity_wave_drag', 'lev', 'inst', 'm s-2') + + call history_add_field('HDEPTH_MOVMTN', 'convective_heating_depth_due_to_moving_mountain_gravity_wave_drag', horiz_only, 'inst', 'km') + call history_add_field('NETDT_MOVMTN', 'tendency_of_air_temperature_due_to_deep_convection', 'lev', 'inst', 'K s-1') + + call history_add_field('TTEND_CLUBB', 'tendency_of_air_temperature_due_to_clubb', 'lev', 'avg', 'K s-1') + call history_add_field('UPWP_CLUBB_GW', 'X-momflux from CLUBB to GW', 'ilev', 'avg', 'm2 s-2') + call history_add_field('VPWP_CLUBB_GW', 'Y-momflux from CLUBB to GW', 'ilev', 'avg', 'm2 s-2') + call history_add_field('VORT4GW', 'relative_vorticity', 'lev', 'avg', 's-1') + + call history_add_field('UCELL_MOVMTN', 'eastward_wind_at_steering_level_due_to_moving_mountain_gravity_wave_drag', horiz_only, 'inst', 'm s-1') + call history_add_field('VCELL_MOVMTN', 'northward_wind_at_steering_level_due_to_moving_mountain_gravity_wave_drag', horiz_only, 'inst', 'm s-1') + call history_add_field('CS_MOVMTN', 'gravity_wave_phase_speed_in_source_direction_due_to_moving_mountain_gravity_wave_drag', horiz_only, 'inst', 'm s-1') + call history_add_field('XPWP_SRC_MOVMTN', 'momentum_flux_source_due_to_moving_mountain_gravity_wave_drag', horiz_only, 'inst', 'm2 s-2') + + end subroutine gravity_wave_drag_moving_mountain_diagnostics_init + +!> \section arg_table_gravity_wave_drag_moving_mountain_diagnostics_run Argument Table +!! \htmlinclude gravity_wave_drag_moving_mountain_diagnostics_run.html + subroutine gravity_wave_drag_moving_mountain_diagnostics_run( & + u, v, & + src_level, tend_level, steer_level, & + ubi, ubm, & + tau0, gwut0, utgw, vtgw, & + hdepth, ttend_dp, & + ttend_clubb, & + upwp_clubb, vpwp_clubb, vorticity, & + usteer, vsteer, CS, xpwp_src, & + errmsg, errflg) + + use cam_history, only: history_out_field + + ! Input winds [m s-1] + real(kind_phys), intent(in) :: u(:,:) + real(kind_phys), intent(in) :: v(:,:) + + ! Outputs from gravity wave scheme, including inputs from CLUBB: + integer, intent(in) :: src_level(:) + integer, intent(in) :: tend_level(:) + real(kind_phys), intent(in) :: steer_level(:) + real(kind_phys), intent(in) :: ubi(:,:) + real(kind_phys), intent(in) :: ubm(:,:) + real(kind_phys), intent(in) :: tau0(:,:) + real(kind_phys), intent(in) :: gwut0(:,:) + real(kind_phys), intent(in) :: utgw(:,:) + real(kind_phys), intent(in) :: vtgw(:,:) + real(kind_phys), intent(in) :: hdepth(:) + real(kind_phys), intent(in) :: ttend_dp(:,:) + real(kind_phys), intent(in) :: ttend_clubb(:,:) ! [K s-1] + real(kind_phys), intent(in) :: upwp_clubb(:,:) ! [m2 s-2] + real(kind_phys), intent(in) :: vpwp_clubb(:,:) ! [m2 s-2] + real(kind_phys), intent(in) :: vorticity(:,:) ! [s-1] + + real(kind_phys), intent(in) :: usteer(:) ! [m s-1] + real(kind_phys), intent(in) :: vsteer(:) ! [m s-1] + real(kind_phys), intent(in) :: CS(:) ! [m s-1] + real(kind_phys), intent(in) :: xpwp_src(:) ! [m2 s-2] + + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errflg + + errmsg = '' + errflg = 0 + + call history_out_field('U_MOVMTN_IN', u) + call history_out_field('V_MOVMTN_IN', v) + call history_out_field('SRC_LEVEL_MOVMTN', real(src_level, kind_phys)) + call history_out_field('TND_LEVEL_MOVMTN', real(tend_level, kind_phys)) + call history_out_field('STEER_LEVEL_MOVMTN', steer_level) + call history_out_field('UBI_MOVMTN', ubi) + call history_out_field('UBM_MOVMTN', ubm) + call history_out_field('TAU_MOVMTN', tau0) + call history_out_field('GWUT_MOVMTN', gwut0) + call history_out_field('UTGW_MOVMTN', utgw) + call history_out_field('VTGW_MOVMTN', vtgw) + call history_out_field('HDEPTH_MOVMTN', hdepth / 1000.0_kind_phys) + call history_out_field('NETDT_MOVMTN', ttend_dp) + call history_out_field('TTEND_CLUBB', ttend_clubb) + call history_out_field('UPWP_CLUBB_GW', upwp_clubb) + call history_out_field('VPWP_CLUBB_GW', vpwp_clubb) + call history_out_field('VORT4GW', vorticity) + call history_out_field('UCELL_MOVMTN', usteer) + call history_out_field('VCELL_MOVMTN', vsteer) + call history_out_field('CS_MOVMTN', CS) + call history_out_field('XPWP_SRC_MOVMTN', xpwp_src) + + end subroutine gravity_wave_drag_moving_mountain_diagnostics_run +end module gravity_wave_drag_moving_mountain_diagnostics diff --git a/schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.meta b/schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.meta new file mode 100644 index 00000000..fa56f5ff --- /dev/null +++ b/schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.meta @@ -0,0 +1,161 @@ +[ccpp-table-properties] + name = gravity_wave_drag_moving_mountain_diagnostics + type = scheme + +[ccpp-arg-table] + name = gravity_wave_drag_moving_mountain_diagnostics_init + type = scheme +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=512 + dimensions = () + intent = out +[ errflg ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out + +[ccpp-arg-table] + name = gravity_wave_drag_moving_mountain_diagnostics_run + type = scheme +[ u ] + standard_name = eastward_wind + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ v ] + standard_name = northward_wind + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ src_level ] + standard_name = vertical_index_of_gravity_wave_source_level + units = index + type = integer + dimensions = (horizontal_loop_extent) + intent = in +[ tend_level ] + standard_name = vertical_index_of_lowest_gravity_wave_tendency_level + units = index + type = integer + dimensions = (horizontal_loop_extent) + intent = in +[ steer_level ] + standard_name = index_of_steering_level_due_to_moving_mountain_gravity_wave_drag + units = index + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ ubi ] + standard_name = wind_speed_along_gravity_wave_source_direction_at_interfaces + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ ubm ] + standard_name = wind_speed_along_gravity_wave_source_direction + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ tau0 ] + standard_name = total_stress_at_interface_from_reference_wavenumber_due_to_moving_mountain_gravity_wave_drag + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ gwut0 ] + standard_name = wind_tendency_in_source_direction_due_to_moving_mountain_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ utgw ] + standard_name = tendency_of_eastward_wind_due_to_moving_mountain_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ vtgw ] + standard_name = tendency_of_northward_wind_due_to_moving_mountain_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ hdepth ] + standard_name = convective_heating_depth_due_to_moving_mountain_gravity_wave_drag + units = km + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ ttend_dp ] + standard_name = tendency_of_air_temperature_due_to_deep_convection + units = K s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ ttend_clubb ] + standard_name = tendency_of_air_temperature_due_to_clubb + units = K s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ upwp_clubb ] + standard_name = upwp_clubb_gw_tbd + units = m2 s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ vpwp_clubb ] + standard_name = vpwp_clubb_gw_tbd + units = m2 s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ vorticity ] + standard_name = relative_vorticity + units = s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ usteer ] + standard_name = eastward_wind_at_steering_level_due_to_moving_mountain_gravity_wave_drag + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ vsteer ] + standard_name = northward_wind_at_steering_level_due_to_moving_mountain_gravity_wave_drag + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ CS ] + standard_name = gravity_wave_phase_speed_in_source_direction_due_to_moving_mountain_gravity_wave_drag + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ xpwp_src ] + standard_name = momentum_flux_source_due_to_moving_mountain_gravity_wave_drag + units = m2 s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=512 + dimensions = () + intent = out +[ errflg ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out diff --git a/schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.F90 b/schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.F90 new file mode 100644 index 00000000..f2513443 --- /dev/null +++ b/schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.F90 @@ -0,0 +1,92 @@ +! Diagnostics for orographic gravity wave drag +module gravity_wave_drag_orographic_diagnostics + use ccpp_kinds, only: kind_phys + + implicit none + private + + public :: gravity_wave_drag_orographic_diagnostics_init + public :: gravity_wave_drag_orographic_diagnostics_run + +contains + +!> \section arg_table_gravity_wave_drag_orographic_diagnostics_init Argument Table +!! \htmlinclude gravity_wave_drag_orographic_diagnostics_init.html + subroutine gravity_wave_drag_orographic_diagnostics_init(errmsg, errflg) + use cam_history, only: history_add_field + use cam_history_support, only: horiz_only + + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errflg + + errmsg = '' + errflg = 0 + + call history_add_field('TAUAORO', 'total_stress_at_interface_from_reference_wavenumber_due_to_orographic_gravity_wave_drag', 'ilev', 'inst', 'N m-2') + + call history_add_field('UTGWORO', 'tendency_of_eastward_wind_due_to_orographic_gravity_wave_drag', 'lev', 'avg', 'm s-2') + call history_add_field('VTGWORO', 'tendency_of_northward_wind_due_to_orographic_gravity_wave_drag', 'lev', 'avg', 'm s-2') + call history_add_field('TTGWORO', 'tendency_of_air_temperature_due_to_orographic_gravity_wave_drag', 'lev', 'avg', 'K s-1') + + call history_add_field('TTGWSDFORO', 'tendency_of_air_temperature_due_to_diffusion_due_to_orographic_gravity_wave_drag', 'lev', 'avg', 'K s-1') + call history_add_field('TTGWSKEORO', 'tendency_of_air_temperature_due_to_kinetic_energy_dissipation_due_to_orographic_gravity_wave_drag', 'lev', 'avg', 'K s-1') + + call history_add_field('TAUGWX', 'eastward_stress_at_surface_due_to_orographic_gravity_wave_drag', horiz_only, 'avg', 'N m-2') + call history_add_field('TAUGWY', 'northward_stress_at_surface_due_to_orographic_gravity_wave_drag', horiz_only, 'avg', 'N m-2') + + end subroutine gravity_wave_drag_orographic_diagnostics_init + +!> \section arg_table_gravity_wave_drag_orographic_diagnostics_run Argument Table +!! \htmlinclude gravity_wave_drag_orographic_diagnostics_run.html + subroutine gravity_wave_drag_orographic_diagnostics_run( & + cpair, & + taua, & + utgw, vtgw, ttgw, & + dttdf, dttke, & + tau0x, tau0y, & + errmsg, errflg) + + use cam_history, only: history_out_field + + ! Thermodynamic constant [J kg-1 K-1] + real(kind_phys), intent(in) :: cpair + + ! Momentum flux profile [N m-2] + real(kind_phys), intent(in) :: taua(:,:) + + real(kind_phys), intent(in) :: utgw(:,:) + real(kind_phys), intent(in) :: vtgw(:,:) + real(kind_phys), intent(in) :: ttgw(:,:) ! [K s-1] converted inside gw scheme using cpairv. + + ! Temperature tendency components [J kg-1 s-1] -- unit converted for output. + real(kind_phys), intent(in) :: dttdf(:,:) + real(kind_phys), intent(in) :: dttke(:,:) + + ! Surface stress components [N m-2] + real(kind_phys), intent(in) :: tau0x(:) + real(kind_phys), intent(in) :: tau0y(:) + + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errflg + + errmsg = '' + errflg = 0 + + call history_out_field('TAUAORO', taua) + + call history_out_field('UTGWORO', utgw) + call history_out_field('VTGWORO', vtgw) + call history_out_field('TTGWORO', ttgw) + + ! Output temperature tendency components (convert from J/kg/s to K/s) + ! Note: this uses cpair instead of cpairv (inconsistent with ttgw, but consistent with other gw schemes). + ! Also see atmospheric_physics issue #320. + call history_out_field('TTGWSDFORO', dttdf / cpair) + call history_out_field('TTGWSKEORO', dttke / cpair) + + call history_out_field('TAUGWX', tau0x) + call history_out_field('TAUGWY', tau0y) + + end subroutine gravity_wave_drag_orographic_diagnostics_run + +end module gravity_wave_drag_orographic_diagnostics diff --git a/schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.meta b/schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.meta new file mode 100644 index 00000000..a80f214c --- /dev/null +++ b/schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.meta @@ -0,0 +1,89 @@ +[ccpp-table-properties] + name = gravity_wave_drag_orographic_diagnostics + type = scheme + +[ccpp-arg-table] + name = gravity_wave_drag_orographic_diagnostics_init + type = scheme +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=512 + dimensions = () + intent = out +[ errflg ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out + +[ccpp-arg-table] + name = gravity_wave_drag_orographic_diagnostics_run + type = scheme +[ cpair ] + standard_name = specific_heat_of_dry_air_at_constant_pressure + units = J kg-1 K-1 + type = real | kind = kind_phys + dimensions = () + intent = in +[ taua ] + standard_name = total_stress_at_interface_from_reference_wavenumber_due_to_orographic_gravity_wave_drag + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ utgw ] + standard_name = tendency_of_eastward_wind_due_to_orographic_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ vtgw ] + standard_name = tendency_of_northward_wind_due_to_orographic_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ ttgw ] + standard_name = tendency_of_air_temperature_due_to_orographic_gravity_wave_drag + units = K s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ dttdf ] + standard_name = tendency_of_air_temperature_due_to_diffusion_due_to_orographic_gravity_wave_drag + units = J kg-1 s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ dttke ] + standard_name = tendency_of_air_temperature_due_to_kinetic_energy_dissipation_due_to_orographic_gravity_wave_drag + units = J kg-1 s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ tau0x ] + standard_name = eastward_stress_at_surface_due_to_orographic_gravity_wave_drag + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ tau0y ] + standard_name = northward_stress_at_surface_due_to_orographic_gravity_wave_drag + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=512 + dimensions = () + intent = out +[ errflg ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out diff --git a/schemes/sima_diagnostics/gravity_wave_drag_ridge_beta_diagnostics.F90 b/schemes/sima_diagnostics/gravity_wave_drag_ridge_beta_diagnostics.F90 new file mode 100644 index 00000000..a7bc5fc4 --- /dev/null +++ b/schemes/sima_diagnostics/gravity_wave_drag_ridge_beta_diagnostics.F90 @@ -0,0 +1,108 @@ +! Diagnostics for ridge-based gravity wave drag (meso-Beta) +module gravity_wave_drag_ridge_beta_diagnostics + use ccpp_kinds, only: kind_phys + + implicit none + private + + public :: gravity_wave_drag_ridge_beta_diagnostics_init + public :: gravity_wave_drag_ridge_beta_diagnostics_run + +contains + +!> \section arg_table_gravity_wave_drag_ridge_beta_diagnostics_init Argument Table +!! \htmlinclude gravity_wave_drag_ridge_beta_diagnostics_init.html + subroutine gravity_wave_drag_ridge_beta_diagnostics_init(errmsg, errflg) + use cam_history, only: history_add_field + use cam_history_support, only: horiz_only + + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errflg + + errmsg = '' + errflg = 0 + + ! State at entry to GW scheme + call history_add_field('UEGW', 'eastward_wind_before_beta_ridge_gravity_wave_drag', 'lev', 'avg', 'm s-1') + call history_add_field('VEGW', 'northward_wind_before_beta_ridge_gravity_wave_drag', 'lev', 'avg', 'm s-1') + call history_add_field('TEGW', 'air_temperature_before_beta_ridge_gravity_wave_drag', 'lev', 'avg', 'K') + call history_add_field('ZEGW', 'geopotential_height_wrt_surface_at_interfaces_before_beta_ridge_gravity_wave_drag', 'ilev', 'avg', 'm') + call history_add_field('ZMGW', 'geopotential_height_wrt_surface_before_beta_ridge_gravity_wave_drag', 'lev', 'avg', 'm') + + ! Momentum flux profile + call history_add_field('TAUARDGBETAX', 'eastward_stress_at_interfaces_due_to_beta_ridge_gravity_wave_drag_before_residual', 'ilev', 'inst', 'N m-2') + call history_add_field('TAUARDGBETAY', 'northward_stress_at_interfaces_due_to_beta_ridge_gravity_wave_drag_before_residual', 'ilev', 'inst', 'N m-2') + + ! Wind tendencies + call history_add_field('UTGWORO', 'tendency_of_eastward_wind_due_to_beta_ridge_gravity_wave_drag', 'lev', 'avg', 'm s-2') + call history_add_field('VTGWORO', 'tendency_of_northward_wind_due_to_beta_ridge_gravity_wave_drag', 'lev', 'avg', 'm s-2') + call history_add_field('TTGWORO', 'tendency_of_air_temperature_due_to_beta_ridge_gravity_wave_drag', 'lev', 'avg', 'K s-1') + + ! Surface stress (retrieved from surface layer of stress at interfaces output from scheme.) + call history_add_field('TAUGWX', 'eastward_stress_at_surface_due_to_beta_ridge_gravity_wave_drag', horiz_only, 'avg', 'N m-2') + call history_add_field('TAUGWY', 'northward_stress_at_surface_due_to_beta_ridge_gravity_wave_drag', horiz_only, 'avg', 'N m-2') + + end subroutine gravity_wave_drag_ridge_beta_diagnostics_init + +!> \section arg_table_gravity_wave_drag_ridge_beta_diagnostics_run Argument Table +!! \htmlinclude gravity_wave_drag_ridge_beta_diagnostics_run.html + subroutine gravity_wave_drag_ridge_beta_diagnostics_run( & + pverp, & + u, v, t, zi, zm, & + taurx, taury, & + tauardgx, tauardgy, & + utgw, vtgw, ttgw, & + errmsg, errflg) + + use cam_history, only: history_out_field + + integer, intent(in) :: pverp + + ! State variables at entry [m s-1], [K], [m] + real(kind_phys), intent(in) :: u(:,:) + real(kind_phys), intent(in) :: v(:,:) + real(kind_phys), intent(in) :: t(:,:) + real(kind_phys), intent(in) :: zi(:,:) + real(kind_phys), intent(in) :: zm(:,:) + + ! Total momentum flux [N m-2] + real(kind_phys), intent(in) :: taurx(:,:) + real(kind_phys), intent(in) :: taury(:,:) + + ! Ridge-based momentum flux [N m-2] + real(kind_phys), intent(in) :: tauardgx(:,:) + real(kind_phys), intent(in) :: tauardgy(:,:) + + real(kind_phys), intent(in) :: utgw(:,:) + real(kind_phys), intent(in) :: vtgw(:,:) + real(kind_phys), intent(in) :: ttgw(:,:) + + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errflg + + errmsg = '' + errflg = 0 + + ! Output state before gravity wave drag parameterization. + call history_out_field('UEGW', u) + call history_out_field('VEGW', v) + call history_out_field('TEGW', t) + call history_out_field('ZEGW', zi) + call history_out_field('ZMGW', zm) + + ! Output momentum flux profiles + call history_out_field('TAUARDGBETAX', tauardgx) + call history_out_field('TAUARDGBETAY', tauardgy) + + ! Output wind and temperature tendencies + call history_out_field('UTGWORO', utgw) + call history_out_field('VTGWORO', vtgw) + call history_out_field('TTGWORO', ttgw) + + ! Output surface stress (bottom level) + call history_out_field('TAUGWX', taurx(:,pverp)) + call history_out_field('TAUGWY', taury(:,pverp)) + + end subroutine gravity_wave_drag_ridge_beta_diagnostics_run + +end module gravity_wave_drag_ridge_beta_diagnostics diff --git a/schemes/sima_diagnostics/gravity_wave_drag_ridge_beta_diagnostics.meta b/schemes/sima_diagnostics/gravity_wave_drag_ridge_beta_diagnostics.meta new file mode 100644 index 00000000..d95c837b --- /dev/null +++ b/schemes/sima_diagnostics/gravity_wave_drag_ridge_beta_diagnostics.meta @@ -0,0 +1,113 @@ +[ccpp-table-properties] + name = gravity_wave_drag_ridge_beta_diagnostics + type = scheme + +[ccpp-arg-table] + name = gravity_wave_drag_ridge_beta_diagnostics_init + type = scheme +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=512 + dimensions = () + intent = out +[ errflg ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out + +[ccpp-arg-table] + name = gravity_wave_drag_ridge_beta_diagnostics_run + type = scheme +[ pverp ] + standard_name = vertical_interface_dimension + units = count + type = integer + dimensions = () + intent = in +[ u ] + standard_name = eastward_wind + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ v ] + standard_name = northward_wind + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ t ] + standard_name = air_temperature + units = K + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ zi ] + standard_name = geopotential_height_wrt_surface_at_interface + units = m + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ zm ] + standard_name = geopotential_height_wrt_surface + units = m + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ taurx ] + standard_name = eastward_stress_at_interfaces_due_to_beta_ridge_gravity_wave_drag + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ taury ] + standard_name = northward_stress_at_interfaces_due_to_beta_ridge_gravity_wave_drag + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ tauardgx ] + standard_name = eastward_stress_at_interfaces_due_to_beta_ridge_gravity_wave_drag_before_residual + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ tauardgy ] + standard_name = northward_stress_at_interfaces_due_to_beta_ridge_gravity_wave_drag_before_residual + units = N m-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ utgw ] + standard_name = tendency_of_eastward_wind_due_to_beta_ridge_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ vtgw ] + standard_name = tendency_of_northward_wind_due_to_beta_ridge_gravity_wave_drag + units = m s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ ttgw ] + standard_name = tendency_of_air_temperature_due_to_beta_ridge_gravity_wave_drag + units = K s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=512 + dimensions = () + intent = out +[ errflg ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out diff --git a/suites/suite_cam4.xml b/suites/suite_cam4.xml index 4111d947..7333ed2b 100644 --- a/suites/suite_cam4.xml +++ b/suites/suite_cam4.xml @@ -326,6 +326,7 @@ gravity_wave_drag_orographic + gravity_wave_drag_orographic_diagnostics convert_dry_constituent_tendencies_to_dry_air_basis diff --git a/suites/suite_cam7.xml b/suites/suite_cam7.xml index b39cebe4..8d1a23f2 100644 --- a/suites/suite_cam7.xml +++ b/suites/suite_cam7.xml @@ -109,16 +109,20 @@ gravity_wave_drag_moving_mountain + gravity_wave_drag_moving_mountain_diagnostics gravity_wave_drag_convection_deep + gravity_wave_drag_convection_deep_diagnostics gravity_wave_drag_frontogenesis + gravity_wave_drag_frontogenesis_diagnostics gravity_wave_drag_ridge gravity_wave_drag_ridge_beta + gravity_wave_drag_ridge_beta_diagnostics convert_dry_constituent_tendencies_to_dry_air_basis diff --git a/test/test_suites/suite_gw_cam4.xml b/test/test_suites/suite_gw_cam4.xml index 45f88710..d14add3b 100644 --- a/test/test_suites/suite_gw_cam4.xml +++ b/test/test_suites/suite_gw_cam4.xml @@ -34,6 +34,7 @@ gravity_wave_drag_orographic + gravity_wave_drag_orographic_diagnostics convert_dry_constituent_tendencies_to_dry_air_basis diff --git a/test/test_suites/suite_gw_cam7_se.xml b/test/test_suites/suite_gw_cam7_se.xml index 3f4a0141..8521296b 100644 --- a/test/test_suites/suite_gw_cam7_se.xml +++ b/test/test_suites/suite_gw_cam7_se.xml @@ -37,16 +37,20 @@ gravity_wave_drag_moving_mountain + gravity_wave_drag_moving_mountain_diagnostics gravity_wave_drag_convection_deep + gravity_wave_drag_convection_deep_diagnostics gravity_wave_drag_frontogenesis + gravity_wave_drag_frontogenesis_diagnostics gravity_wave_drag_ridge gravity_wave_drag_ridge_beta + gravity_wave_drag_ridge_beta_diagnostics convert_dry_constituent_tendencies_to_dry_air_basis From bdc226dad2fb58c8751bab4de85b3970b1512409 Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Thu, 22 Jan 2026 09:17:24 -0500 Subject: [PATCH 2/4] Update schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.F90 Co-authored-by: Jesse Nusbaumer --- .../sima_diagnostics/gravity_wave_drag_common_diagnostics.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.F90 b/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.F90 index 14626402..a1afb6ac 100644 --- a/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.F90 +++ b/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.F90 @@ -99,11 +99,11 @@ subroutine gravity_wave_drag_common_diagnostics_run( & call history_out_field('QTGW', tend_q(:,:,const_wv_idx)) if(const_cldliq_idx > 0) then call history_out_field('CLDLIQTGW', tend_q(:,:,const_cldliq_idx)) - endif + end if if(const_cldice_idx > 0) then call history_out_field('CLDICETGW', tend_q(:,:,const_cldice_idx)) - endif + end if end subroutine gravity_wave_drag_common_diagnostics_run From 7cd41c23a5452c33096077d294cf9df54a0d8b11 Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Thu, 22 Jan 2026 10:00:05 -0500 Subject: [PATCH 3/4] Address reviewer comments. --- .../gravity_wave_drag_convection.meta | 16 ++++++++-------- .../gravity_wave_drag_frontogenesis.F90 | 4 ++-- .../gravity_wave_drag_frontogenesis.meta | 4 ++-- .../gravity_wave_drag_moving_mountain.meta | 10 +++++----- .../gravity_wave_drag_orographic.F90 | 4 ++-- .../gravity_wave_drag_orographic.meta | 4 ++-- .../gravity_wave_drag_common_diagnostics.F90 | 4 ++-- ...ity_wave_drag_convection_deep_diagnostics.F90 | 6 +++--- ...ty_wave_drag_convection_deep_diagnostics.meta | 10 +++++----- ...avity_wave_drag_frontogenesis_diagnostics.F90 | 3 ++- ...vity_wave_drag_frontogenesis_diagnostics.meta | 4 ++-- ...ity_wave_drag_moving_mountain_diagnostics.F90 | 7 ++++--- ...ty_wave_drag_moving_mountain_diagnostics.meta | 6 +++--- .../gravity_wave_drag_orographic_diagnostics.F90 | 8 ++++---- ...gravity_wave_drag_orographic_diagnostics.meta | 4 ++-- .../gravity_wave_drag_ridge_beta_diagnostics.F90 | 4 ++-- 16 files changed, 50 insertions(+), 48 deletions(-) diff --git a/schemes/gravity_wave_drag/gravity_wave_drag_convection.meta b/schemes/gravity_wave_drag/gravity_wave_drag_convection.meta index 3498ac5d..d16cc9b6 100644 --- a/schemes/gravity_wave_drag/gravity_wave_drag_convection.meta +++ b/schemes/gravity_wave_drag/gravity_wave_drag_convection.meta @@ -275,8 +275,8 @@ dimensions = (horizontal_loop_extent) intent = out [ hdepth ] - standard_name = convective_heating_depth_due_to_deep_convective_gravity_wave_drag - units = km + standard_name = convective_heating_depth_for_deep_convective_gravity_wave_drag + units = m type = real | kind = kind_phys dimensions = (horizontal_loop_extent) intent = out @@ -317,13 +317,13 @@ dimensions = (horizontal_loop_extent, vertical_interface_dimension) intent = inout [ dttdf ] - standard_name = tendency_of_air_temperature_due_to_diffusion_due_to_deep_convective_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_diffusion_due_to_deep_convective_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = out [ dttke ] - standard_name = tendency_of_air_temperature_due_to_kinetic_energy_dissipation_due_to_deep_convective_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_due_to_kinetic_energy_dissipation_due_to_deep_convective_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) @@ -642,7 +642,7 @@ dimensions = (horizontal_loop_extent) intent = out [ hdepth ] - standard_name = convective_heating_depth_due_to_shallow_convective_gravity_wave_drag + standard_name = convective_heating_depth_for_shallow_convective_gravity_wave_drag units = km type = real | kind = kind_phys dimensions = (horizontal_loop_extent) @@ -667,7 +667,7 @@ intent = out [ ttgw ] standard_name = tendency_of_air_temperature_due_to_shallow_convective_gravity_wave_drag - units = J kg-1 s-1 + units = K s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = out @@ -684,13 +684,13 @@ dimensions = (horizontal_loop_extent, vertical_interface_dimension) intent = inout [ dttdf ] - standard_name = tendency_of_air_temperature_due_to_diffusion_due_to_shallow_convective_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_diffusion_due_to_shallow_convective_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = out [ dttke ] - standard_name = tendency_of_air_temperature_due_to_kinetic_energy_dissipation_due_to_shallow_convective_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_kinetic_energy_dissipation_due_to_shallow_convective_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) diff --git a/schemes/gravity_wave_drag/gravity_wave_drag_frontogenesis.F90 b/schemes/gravity_wave_drag/gravity_wave_drag_frontogenesis.F90 index f1cc7c7b..ec4eaa10 100644 --- a/schemes/gravity_wave_drag/gravity_wave_drag_frontogenesis.F90 +++ b/schemes/gravity_wave_drag/gravity_wave_drag_frontogenesis.F90 @@ -505,8 +505,8 @@ subroutine gravity_wave_drag_frontogenesis_inertial_run( & real(kind_phys), intent(out) :: vtgw(:, :) ! Meridional wind tendency from gravity waves [m s-2] real(kind_phys), intent(out) :: ttgw(:, :) ! Temperature tendency from gravity waves [K s-1] real(kind_phys), intent(out) :: qtgw(:, :, :) ! Constituent tendencies from gravity waves [kg kg-1 s-1] - real(kind_phys), intent(out) :: dttdf(:, :) ! Temperature tendency from diffusion [K s-1] - real(kind_phys), intent(out) :: dttke(:, :) ! Temperature tendency from kinetic energy dissipation [K s-1] + real(kind_phys), intent(out) :: dttdf(:, :) ! Dry air enthalpy tendency from diffusion [J kg-1 s-1] + real(kind_phys), intent(out) :: dttke(:, :) ! Dry air tendency from kinetic energy dissipation [J kg-1 s-1] character(len=512), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/schemes/gravity_wave_drag/gravity_wave_drag_frontogenesis.meta b/schemes/gravity_wave_drag/gravity_wave_drag_frontogenesis.meta index 03b770a6..1f49d1aa 100644 --- a/schemes/gravity_wave_drag/gravity_wave_drag_frontogenesis.meta +++ b/schemes/gravity_wave_drag/gravity_wave_drag_frontogenesis.meta @@ -317,13 +317,13 @@ dimensions = (horizontal_loop_extent, vertical_layer_dimension, number_of_ccpp_constituents) intent = out [ dttdf ] - standard_name = tendency_of_air_temperature_due_to_diffusion_due_to_frontogenesis_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_diffusion_due_to_frontogenesis_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = out [ dttke ] - standard_name = tendency_of_air_temperature_due_to_kinetic_energy_dissipation_due_to_frontogenesis_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_kinetic_energy_dissipation_due_to_frontogenesis_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) diff --git a/schemes/gravity_wave_drag/gravity_wave_drag_moving_mountain.meta b/schemes/gravity_wave_drag/gravity_wave_drag_moving_mountain.meta index 7c28862a..b120a39e 100644 --- a/schemes/gravity_wave_drag/gravity_wave_drag_moving_mountain.meta +++ b/schemes/gravity_wave_drag/gravity_wave_drag_moving_mountain.meta @@ -306,8 +306,8 @@ dimensions = (horizontal_loop_extent) intent = out [ hdepth ] - standard_name = convective_heating_depth_due_to_moving_mountain_gravity_wave_drag - units = km + standard_name = convective_heating_depth_for_moving_mountain_gravity_wave_drag + units = m type = real | kind = kind_phys dimensions = (horizontal_loop_extent) intent = out @@ -342,13 +342,13 @@ dimensions = (horizontal_loop_extent, vertical_interface_dimension) intent = inout [ dttdf ] - standard_name = tendency_of_air_temperature_due_to_diffusion_due_to_moving_mountain_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_diffusion_due_to_moving_mountain_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = out [ dttke ] - standard_name = tendency_of_air_temperature_due_to_kinetic_energy_dissipation_due_to_moving_mountain_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_kinetic_energy_dissipation_due_to_moving_mountain_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) @@ -390,7 +390,7 @@ dimensions = (horizontal_loop_extent) intent = out [ xpwp_src ] - standard_name = momentum_flux_source_due_to_moving_mountain_gravity_wave_drag + standard_name = momentum_flux_source_for_moving_mountain_gravity_wave_drag units = m2 s-2 type = real | kind = kind_phys dimensions = (horizontal_loop_extent) diff --git a/schemes/gravity_wave_drag/gravity_wave_drag_orographic.F90 b/schemes/gravity_wave_drag/gravity_wave_drag_orographic.F90 index 4e17088f..be8d507e 100644 --- a/schemes/gravity_wave_drag/gravity_wave_drag_orographic.F90 +++ b/schemes/gravity_wave_drag/gravity_wave_drag_orographic.F90 @@ -125,8 +125,8 @@ subroutine gravity_wave_drag_orographic_run( & real(kind_phys), intent(out) :: vtgw(:, :) ! Meridional wind tendency from gravity waves [m s-2] real(kind_phys), intent(out) :: ttgw(:, :) ! Temperature tendency from gravity waves [K s-1] real(kind_phys), intent(out) :: qtgw(:, :, :) ! Constituent tendencies from gravity waves [kg kg-1 s-1] - real(kind_phys), intent(out) :: dttdf(:, :) ! Temperature tendency from diffusion [K s-1] - real(kind_phys), intent(out) :: dttke(:, :) ! Temperature tendency from kinetic energy dissipation [K s-1] + real(kind_phys), intent(out) :: dttdf(:, :) ! Dry air enthalpy tendency from diffusion [J kg-1 s-1] + real(kind_phys), intent(out) :: dttke(:, :) ! Dry air enthalpy tendency from kinetic energy dissipation [J kg-1 s-1] real(kind_phys), intent(inout) :: egwdffi_tot(:, :) ! Effective diffusivity coefficient from gravity waves, interfaces [m2 s-1] real(kind_phys), intent(out) :: flx_heat(:) ! Surface heat flux for energy conservation check [W m-2] real(kind_phys), intent(out) :: tau0x(:) ! Zonal gravity wave surface stress [N m-2] diff --git a/schemes/gravity_wave_drag/gravity_wave_drag_orographic.meta b/schemes/gravity_wave_drag/gravity_wave_drag_orographic.meta index 951b8350..f4cabe6e 100644 --- a/schemes/gravity_wave_drag/gravity_wave_drag_orographic.meta +++ b/schemes/gravity_wave_drag/gravity_wave_drag_orographic.meta @@ -276,13 +276,13 @@ dimensions = (horizontal_loop_extent, vertical_layer_dimension, number_of_ccpp_constituents) intent = out [ dttdf ] - standard_name = tendency_of_air_temperature_due_to_diffusion_due_to_orographic_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_diffusion_due_to_orographic_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = out [ dttke ] - standard_name = tendency_of_air_temperature_due_to_kinetic_energy_dissipation_due_to_orographic_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_kinetic_energy_dissipation_due_to_orographic_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) diff --git a/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.F90 b/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.F90 index a1afb6ac..c618e3ca 100644 --- a/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.F90 +++ b/schemes/sima_diagnostics/gravity_wave_drag_common_diagnostics.F90 @@ -1,8 +1,6 @@ ! Diagnostics for all gravity wave drag parameterizations ! (used to output total diagnostics in the end of all gravity wave drag schemes) module gravity_wave_drag_common_diagnostics - use ccpp_kinds, only: kind_phys - implicit none private @@ -46,6 +44,8 @@ subroutine gravity_wave_drag_common_diagnostics_run( & tend_u, tend_v, tend_s, & errmsg, errflg) + use ccpp_kinds, only: kind_phys + use cam_history, only: history_out_field use runtime_obj, only: wv_stdname diff --git a/schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.F90 b/schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.F90 index a30af61e..0792634c 100644 --- a/schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.F90 +++ b/schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.F90 @@ -1,7 +1,5 @@ ! Diagnostics for gravity wave drag from deep convection (Beres scheme) module gravity_wave_drag_convection_deep_diagnostics - use ccpp_kinds, only: kind_phys - implicit none private @@ -40,7 +38,7 @@ subroutine gravity_wave_drag_convection_deep_diagnostics_init(errmsg, errflg) call history_add_field('BTAUNET', 'net_eastward_reynolds_stress_due_to_deep_convective_gravity_wave_drag', 'ilev', 'avg', 'Pa') call history_add_field('NETDT', 'tendency_of_air_temperature_due_to_deep_convection', 'lev', 'avg', 'K s-1') - call history_add_field('HDEPTH', 'convective_heating_depth_due_to_deep_convective_gravity_wave_drag', horiz_only, 'avg', 'km') + call history_add_field('HDEPTH', 'convective_heating_depth_for_deep_convective_gravity_wave_drag', horiz_only, 'avg', 'km') call history_add_field('MAXQ0', 'maximum_column_heating_rate_due_to_deep_convective_gravity_wave_drag', horiz_only, 'avg', 'K day-1') end subroutine gravity_wave_drag_convection_deep_diagnostics_init @@ -55,6 +53,7 @@ subroutine gravity_wave_drag_convection_deep_diagnostics_run( & ttend_dp, hdepth, maxq0, & errmsg, errflg) + use ccpp_kinds, only: kind_phys use cam_history, only: history_out_field real(kind_phys), intent(in) :: cpair @@ -94,6 +93,7 @@ subroutine gravity_wave_drag_convection_deep_diagnostics_run( & call history_out_field('BTAUNET', taucd_east + taucd_west) call history_out_field('NETDT', ttend_dp) + ! Output heating diagnostics (convert depth to km) call history_out_field('HDEPTH', hdepth / 1000.0_kind_phys) call history_out_field('MAXQ0', maxq0) diff --git a/schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.meta b/schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.meta index 5113fb42..210e8124 100644 --- a/schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.meta +++ b/schemes/sima_diagnostics/gravity_wave_drag_convection_deep_diagnostics.meta @@ -28,13 +28,13 @@ dimensions = () intent = in [ dttdf ] - standard_name = tendency_of_air_temperature_due_to_diffusion_due_to_deep_convective_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_diffusion_due_to_deep_convective_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = in [ dttke ] - standard_name = tendency_of_air_temperature_due_to_kinetic_energy_dissipation_due_to_deep_convective_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_due_to_kinetic_energy_dissipation_due_to_deep_convective_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) @@ -53,7 +53,7 @@ intent = in [ ttgw ] standard_name = tendency_of_air_temperature_due_to_deep_convective_gravity_wave_drag - units = J kg-1 s-1 + units = K s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = in @@ -88,8 +88,8 @@ dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = in [ hdepth ] - standard_name = convective_heating_depth_due_to_deep_convective_gravity_wave_drag - units = km + standard_name = convective_heating_depth_for_deep_convective_gravity_wave_drag + units = m type = real | kind = kind_phys dimensions = (horizontal_loop_extent) intent = in diff --git a/schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.F90 b/schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.F90 index 234de8da..d66e75a9 100644 --- a/schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.F90 +++ b/schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.F90 @@ -1,6 +1,5 @@ ! Diagnostics for gravity wave drag from frontogenesis. module gravity_wave_drag_frontogenesis_diagnostics - use ccpp_kinds, only: kind_phys implicit none private @@ -61,6 +60,8 @@ subroutine gravity_wave_drag_frontogenesis_diagnostics_run( & taucd_east, taucd_west, taucd_north, taucd_south, & errmsg, errflg) + use ccpp_kinds, only: kind_phys + use cam_history, only: history_out_field real(kind_phys), intent(in) :: cpair diff --git a/schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.meta b/schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.meta index 47c7ee44..87350cf6 100644 --- a/schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.meta +++ b/schemes/sima_diagnostics/gravity_wave_drag_frontogenesis_diagnostics.meta @@ -70,13 +70,13 @@ dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = in [ dttdf ] - standard_name = tendency_of_air_temperature_due_to_diffusion_due_to_frontogenesis_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_diffusion_due_to_frontogenesis_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = in [ dttke ] - standard_name = tendency_of_air_temperature_due_to_kinetic_energy_dissipation_due_to_frontogenesis_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_kinetic_energy_dissipation_due_to_frontogenesis_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) diff --git a/schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.F90 b/schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.F90 index 0025d82f..5c12f2d3 100644 --- a/schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.F90 +++ b/schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.F90 @@ -1,6 +1,5 @@ ! Diagnostics for gravity wave drag from moving mountain parameterization module gravity_wave_drag_moving_mountain_diagnostics - use ccpp_kinds, only: kind_phys implicit none private @@ -37,7 +36,7 @@ subroutine gravity_wave_drag_moving_mountain_diagnostics_init(errmsg, errflg) call history_add_field('UTGW_MOVMTN', 'tendency_of_eastward_wind_due_to_moving_mountain_gravity_wave_drag', 'lev', 'inst', 'm s-2') call history_add_field('VTGW_MOVMTN', 'tendency_of_northward_wind_due_to_moving_mountain_gravity_wave_drag', 'lev', 'inst', 'm s-2') - call history_add_field('HDEPTH_MOVMTN', 'convective_heating_depth_due_to_moving_mountain_gravity_wave_drag', horiz_only, 'inst', 'km') + call history_add_field('HDEPTH_MOVMTN', 'convective_heating_depth_for_moving_mountain_gravity_wave_drag', horiz_only, 'inst', 'km') call history_add_field('NETDT_MOVMTN', 'tendency_of_air_temperature_due_to_deep_convection', 'lev', 'inst', 'K s-1') call history_add_field('TTEND_CLUBB', 'tendency_of_air_temperature_due_to_clubb', 'lev', 'avg', 'K s-1') @@ -48,7 +47,7 @@ subroutine gravity_wave_drag_moving_mountain_diagnostics_init(errmsg, errflg) call history_add_field('UCELL_MOVMTN', 'eastward_wind_at_steering_level_due_to_moving_mountain_gravity_wave_drag', horiz_only, 'inst', 'm s-1') call history_add_field('VCELL_MOVMTN', 'northward_wind_at_steering_level_due_to_moving_mountain_gravity_wave_drag', horiz_only, 'inst', 'm s-1') call history_add_field('CS_MOVMTN', 'gravity_wave_phase_speed_in_source_direction_due_to_moving_mountain_gravity_wave_drag', horiz_only, 'inst', 'm s-1') - call history_add_field('XPWP_SRC_MOVMTN', 'momentum_flux_source_due_to_moving_mountain_gravity_wave_drag', horiz_only, 'inst', 'm2 s-2') + call history_add_field('XPWP_SRC_MOVMTN', 'momentum_flux_source_for_moving_mountain_gravity_wave_drag', horiz_only, 'inst', 'm2 s-2') end subroutine gravity_wave_drag_moving_mountain_diagnostics_init @@ -65,6 +64,8 @@ subroutine gravity_wave_drag_moving_mountain_diagnostics_run( & usteer, vsteer, CS, xpwp_src, & errmsg, errflg) + use ccpp_kinds, only: kind_phys + use cam_history, only: history_out_field ! Input winds [m s-1] diff --git a/schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.meta b/schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.meta index fa56f5ff..594f19cc 100644 --- a/schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.meta +++ b/schemes/sima_diagnostics/gravity_wave_drag_moving_mountain_diagnostics.meta @@ -88,8 +88,8 @@ dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = in [ hdepth ] - standard_name = convective_heating_depth_due_to_moving_mountain_gravity_wave_drag - units = km + standard_name = convective_heating_depth_for_moving_mountain_gravity_wave_drag + units = m type = real | kind = kind_phys dimensions = (horizontal_loop_extent) intent = in @@ -142,7 +142,7 @@ dimensions = (horizontal_loop_extent) intent = in [ xpwp_src ] - standard_name = momentum_flux_source_due_to_moving_mountain_gravity_wave_drag + standard_name = momentum_flux_source_for_moving_mountain_gravity_wave_drag units = m2 s-2 type = real | kind = kind_phys dimensions = (horizontal_loop_extent) diff --git a/schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.F90 b/schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.F90 index f2513443..c5ac841d 100644 --- a/schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.F90 +++ b/schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.F90 @@ -1,7 +1,5 @@ ! Diagnostics for orographic gravity wave drag module gravity_wave_drag_orographic_diagnostics - use ccpp_kinds, only: kind_phys - implicit none private @@ -46,6 +44,8 @@ subroutine gravity_wave_drag_orographic_diagnostics_run( & tau0x, tau0y, & errmsg, errflg) + use ccpp_kinds, only: kind_phys + use cam_history, only: history_out_field ! Thermodynamic constant [J kg-1 K-1] @@ -58,7 +58,7 @@ subroutine gravity_wave_drag_orographic_diagnostics_run( & real(kind_phys), intent(in) :: vtgw(:,:) real(kind_phys), intent(in) :: ttgw(:,:) ! [K s-1] converted inside gw scheme using cpairv. - ! Temperature tendency components [J kg-1 s-1] -- unit converted for output. + ! Dry air enthalpy tendencies due to diffusion and KE dissipation [J kg-1 s-1] -- unit converted for output. real(kind_phys), intent(in) :: dttdf(:,:) real(kind_phys), intent(in) :: dttke(:,:) @@ -78,7 +78,7 @@ subroutine gravity_wave_drag_orographic_diagnostics_run( & call history_out_field('VTGWORO', vtgw) call history_out_field('TTGWORO', ttgw) - ! Output temperature tendency components (convert from J/kg/s to K/s) + ! Output temperature tendencies from diffusion (convert from J/kg/s to K/s) ! Note: this uses cpair instead of cpairv (inconsistent with ttgw, but consistent with other gw schemes). ! Also see atmospheric_physics issue #320. call history_out_field('TTGWSDFORO', dttdf / cpair) diff --git a/schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.meta b/schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.meta index a80f214c..0357ca9a 100644 --- a/schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.meta +++ b/schemes/sima_diagnostics/gravity_wave_drag_orographic_diagnostics.meta @@ -52,13 +52,13 @@ dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = in [ dttdf ] - standard_name = tendency_of_air_temperature_due_to_diffusion_due_to_orographic_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_diffusion_due_to_orographic_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = in [ dttke ] - standard_name = tendency_of_air_temperature_due_to_kinetic_energy_dissipation_due_to_orographic_gravity_wave_drag + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_kinetic_energy_dissipation_due_to_orographic_gravity_wave_drag units = J kg-1 s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) diff --git a/schemes/sima_diagnostics/gravity_wave_drag_ridge_beta_diagnostics.F90 b/schemes/sima_diagnostics/gravity_wave_drag_ridge_beta_diagnostics.F90 index a7bc5fc4..b4a15876 100644 --- a/schemes/sima_diagnostics/gravity_wave_drag_ridge_beta_diagnostics.F90 +++ b/schemes/sima_diagnostics/gravity_wave_drag_ridge_beta_diagnostics.F90 @@ -1,7 +1,5 @@ ! Diagnostics for ridge-based gravity wave drag (meso-Beta) module gravity_wave_drag_ridge_beta_diagnostics - use ccpp_kinds, only: kind_phys - implicit none private @@ -54,6 +52,8 @@ subroutine gravity_wave_drag_ridge_beta_diagnostics_run( & utgw, vtgw, ttgw, & errmsg, errflg) + use ccpp_kinds, only: kind_phys + use cam_history, only: history_out_field integer, intent(in) :: pverp From d357db524a3c86b29757c5a2ee0a42250c6a002b Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Tue, 10 Feb 2026 14:31:43 -0500 Subject: [PATCH 4/4] Fix comments for dttdf, dttke --- .../gravity_wave_drag/gravity_wave_drag_convection.F90 | 8 ++++---- .../gravity_wave_drag/gravity_wave_drag_frontogenesis.F90 | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/schemes/gravity_wave_drag/gravity_wave_drag_convection.F90 b/schemes/gravity_wave_drag/gravity_wave_drag_convection.F90 index 5df011c6..ac1902e1 100644 --- a/schemes/gravity_wave_drag/gravity_wave_drag_convection.F90 +++ b/schemes/gravity_wave_drag/gravity_wave_drag_convection.F90 @@ -184,8 +184,8 @@ subroutine gravity_wave_drag_convection_deep_run(& real(kind_phys), intent(out) :: ttgw(:, :) ! Temperature tendency from gravity waves [K s-1] real(kind_phys), intent(out) :: qtgw(:, :, :) ! Constituent tendencies from gravity waves [kg kg-1 s-1] real(kind_phys), intent(inout) :: egwdffi_tot(:, :) ! Effective diffusivity coefficient from gravity waves, interfaces [m2 s-1] - real(kind_phys), intent(out) :: dttdf(:, :) ! Temperature tendency from diffusion [K s-1] - real(kind_phys), intent(out) :: dttke(:, :) ! Temperature tendency from kinetic energy dissipation [K s-1] + real(kind_phys), intent(out) :: dttdf(:, :) ! Dry air enthalpy tendency from diffusion [J kg-1 s-1] + real(kind_phys), intent(out) :: dttke(:, :) ! Dry air enthalpy tendency from kinetic energy dissipation [J kg-1 s-1] ! Copies of taucd in each direction for diagnostic. real(kind_phys), intent(out) :: taucd_west(:, :) ! Reynolds stress for waves in W direction, interfaces [N m-2] @@ -478,8 +478,8 @@ subroutine gravity_wave_drag_convection_shallow_run(& real(kind_phys), intent(out) :: ttgw(:, :) ! Temperature tendency from gravity waves [K s-1] real(kind_phys), intent(out) :: qtgw(:, :, :) ! Constituent tendencies from gravity waves [kg kg-1 s-1] real(kind_phys), intent(inout) :: egwdffi_tot(:, :) ! Effective diffusivity coefficient from gravity waves, interfaces [m2 s-1] - real(kind_phys), intent(out) :: dttdf(:, :) ! Temperature tendency from diffusion [K s-1] - real(kind_phys), intent(out) :: dttke(:, :) ! Temperature tendency from kinetic energy dissipation [K s-1] + real(kind_phys), intent(out) :: dttdf(:, :) ! Dry air enthalpy tendency from diffusion [J kg-1 s-1] + real(kind_phys), intent(out) :: dttke(:, :) ! Dry air enthalpy tendency from kinetic energy dissipation [J kg-1 s-1] character(len=512), intent(out) :: errmsg integer, intent(out) :: errflg diff --git a/schemes/gravity_wave_drag/gravity_wave_drag_frontogenesis.F90 b/schemes/gravity_wave_drag/gravity_wave_drag_frontogenesis.F90 index ec4eaa10..24dd28da 100644 --- a/schemes/gravity_wave_drag/gravity_wave_drag_frontogenesis.F90 +++ b/schemes/gravity_wave_drag/gravity_wave_drag_frontogenesis.F90 @@ -302,8 +302,8 @@ subroutine gravity_wave_drag_frontogenesis_run( & real(kind_phys), intent(out) :: vtgw(:, :) ! Meridional wind tendency from gravity waves [m s-2] real(kind_phys), intent(out) :: ttgw(:, :) ! Temperature tendency from gravity waves [K s-1] real(kind_phys), intent(out) :: qtgw(:, :, :) ! Constituent tendencies from gravity waves [kg kg-1 s-1] - real(kind_phys), intent(out) :: dttdf(:, :) ! Temperature tendency from diffusion [K s-1] - real(kind_phys), intent(out) :: dttke(:, :) ! Temperature tendency from kinetic energy dissipation [K s-1] + real(kind_phys), intent(out) :: dttdf(:, :) ! Dry air enthalpy tendency from diffusion [J kg-1 s-1] + real(kind_phys), intent(out) :: dttke(:, :) ! Dry air enthalpy tendency from kinetic energy dissipation [J kg-1 s-1] ! Copies of taucd in each direction for diagnostic. real(kind_phys), intent(out) :: taucd_west(:, :) ! Reynolds stress for waves in W direction, interfaces [N m-2] @@ -506,7 +506,7 @@ subroutine gravity_wave_drag_frontogenesis_inertial_run( & real(kind_phys), intent(out) :: ttgw(:, :) ! Temperature tendency from gravity waves [K s-1] real(kind_phys), intent(out) :: qtgw(:, :, :) ! Constituent tendencies from gravity waves [kg kg-1 s-1] real(kind_phys), intent(out) :: dttdf(:, :) ! Dry air enthalpy tendency from diffusion [J kg-1 s-1] - real(kind_phys), intent(out) :: dttke(:, :) ! Dry air tendency from kinetic energy dissipation [J kg-1 s-1] + real(kind_phys), intent(out) :: dttke(:, :) ! Dry air enthalpy tendency from kinetic energy dissipation [J kg-1 s-1] character(len=512), intent(out) :: errmsg integer, intent(out) :: errflg