From 419bc0ee46db57918e240db22b8ea70911132bf9 Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Fri, 15 Nov 2024 16:35:40 -0500 Subject: [PATCH] As suggested use tendencies for dycore_energy_consistency_adjust --- .../dycore_energy_consistency_adjust.F90 | 31 ++++++++++++------- .../dycore_energy_consistency_adjust.meta | 12 +++---- suites/suite_kessler.xml | 12 ++++++- suites/suite_tj2016.xml | 12 ++++++- 4 files changed, 47 insertions(+), 20 deletions(-) diff --git a/schemes/check_energy/dycore_energy_consistency_adjust.F90 b/schemes/check_energy/dycore_energy_consistency_adjust.F90 index 13015f20..96706ef3 100644 --- a/schemes/check_energy/dycore_energy_consistency_adjust.F90 +++ b/schemes/check_energy/dycore_energy_consistency_adjust.F90 @@ -15,26 +15,33 @@ subroutine dycore_energy_consistency_adjust_run( & ncol, pver, & do_consistency_adjust, & scaling_dycore, & - temp_ini, & - t, & - tend_dtdt) + tend_dTdt, & + T, & + tend_dTdt_local) ! Input arguments integer, intent(in) :: ncol ! number of atmospheric columns integer, intent(in) :: pver ! number of vertical layers logical, intent(in) :: do_consistency_adjust ! do energy consistency adjustment? real(kind_phys), intent(in) :: scaling_dycore(:,:) ! scaling for conversion of temperature increment [1] - real(kind_phys), intent(in) :: temp_ini(:,:) ! initial temperature [K] + real(kind_phys), intent(in) :: tend_dTdt(:,:) ! model physics temperature tendency [K s-1] ! Input/output arguments - real(kind_phys), intent(inout) :: T(:,:) ! temperature [K] - real(kind_phys), intent(inout) :: tend_dtdt(:,:) ! model phys temperature tendency [K s-1] - - if(do_consistency_adjust) then - T(:ncol,:) = temp_ini(:ncol,:) + & - scaling_dycore(:ncol,:) * (T(:ncol,:) - temp_ini(:ncol,:)) - - tend_dtdt(:ncol,:) = scaling_dycore(:ncol,:) * tend_dtdt(:ncol,:) + real(kind_phys), intent(inout) :: T(:,:) ! air temperature [K] + + ! Output arguments + real(kind_phys), intent(out) :: tend_dTdt_local(:,:) ! (scheme) temperature tendency [K s-1] + + if (do_consistency_adjust) then + ! original formula for scaling of temperature: + ! T(:ncol,:) = temp_ini(:ncol,:) + & + ! scaling_dycore(:ncol,:) * (T(:ncol,:) - temp_ini(:ncol,:)) + ! and temperature tendency due to model physics: + ! tend_dTdt(:ncol,:) = scaling_dycore(:ncol,:) * tend_dTdt(:ncol,:) + ! + ! the terms can be arranged for this scaling to be applied through scheme tendencies + ! at the cost of a round-off level difference + tend_dTdt_local(:ncol,:) = (scaling_dycore(:ncol,:) - 1._kind_phys) * tend_dTdt(:ncol,:) endif ! do nothing for dynamical cores with energy consistent with CAM physics diff --git a/schemes/check_energy/dycore_energy_consistency_adjust.meta b/schemes/check_energy/dycore_energy_consistency_adjust.meta index 6a44354a..067a8996 100644 --- a/schemes/check_energy/dycore_energy_consistency_adjust.meta +++ b/schemes/check_energy/dycore_energy_consistency_adjust.meta @@ -29,9 +29,9 @@ type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = in -[ temp_ini ] - standard_name = air_temperature_at_start_of_physics_timestep - units = K +[ tend_dTdt ] + standard_name = tendency_of_air_temperature_due_to_model_physics + units = K s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = in @@ -41,9 +41,9 @@ type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = inout -[ tend_dtdt ] - standard_name = tendency_of_air_temperature_due_to_model_physics +[ tend_dTdt_local ] + standard_name = tendency_of_air_temperature units = K s-1 type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) - intent = inout + intent = out diff --git a/suites/suite_kessler.xml b/suites/suite_kessler.xml index 02d78c68..792c6ee3 100644 --- a/suites/suite_kessler.xml +++ b/suites/suite_kessler.xml @@ -17,6 +17,14 @@ qneg geopotential_temp + + check_energy_zero_fluxes + check_energy_scaling + check_energy_chng + sima_state_diagnostics kessler_diagnostics @@ -26,9 +34,11 @@ + Then, perform the temperature and temperature tendency scaling, + and apply tendencies resulting from such adjustment --> check_energy_scaling dycore_energy_consistency_adjust + apply_tendency_of_air_temperature sima_tend_diagnostics diff --git a/suites/suite_tj2016.xml b/suites/suite_tj2016.xml index f3ca019b..a99bca79 100644 --- a/suites/suite_tj2016.xml +++ b/suites/suite_tj2016.xml @@ -6,6 +6,14 @@ apply_heating_rate qneg + + check_energy_zero_fluxes + check_energy_scaling + check_energy_chng + sima_state_diagnostics @@ -20,9 +28,11 @@ + Then, perform the temperature and temperature tendency scaling, + and apply tendencies resulting from such adjustment --> check_energy_scaling dycore_energy_consistency_adjust + apply_tendency_of_air_temperature sima_tend_diagnostics