diff --git a/schemes/check_energy/check_energy_chng.F90 b/schemes/check_energy/check_energy_chng.F90 index 91af5151..7f7780f8 100644 --- a/schemes/check_energy/check_energy_chng.F90 +++ b/schemes/check_energy/check_energy_chng.F90 @@ -89,6 +89,9 @@ subroutine check_energy_chng_timestep_init( & character(len=512), intent(out) :: errmsg ! error message integer, intent(out) :: errflg ! error flag + errmsg = '' + errflg = 0 + !------------------------------------------------ ! Physics total energy. !------------------------------------------------ @@ -276,6 +279,9 @@ subroutine check_energy_chng_run( & integer :: i + errmsg = '' + errflg = 0 + !------------------------------------------------ ! Physics total energy. !------------------------------------------------ diff --git a/schemes/check_energy/check_energy_fix.F90 b/schemes/check_energy/check_energy_fix.F90 index 1bdc7ae8..5a3163c8 100644 --- a/schemes/check_energy/check_energy_fix.F90 +++ b/schemes/check_energy/check_energy_fix.F90 @@ -11,7 +11,7 @@ module check_energy_fix ! Add heating rate required for global mean total energy conservation !> \section arg_table_check_energy_fix_run Argument Table !! \htmlinclude arg_table_check_energy_fix_run.html - subroutine check_energy_fix_run(ncol, pver, pint, gravit, heat_glob, ptend_s, eshflx, scheme_name) + subroutine check_energy_fix_run(ncol, pver, pint, gravit, heat_glob, ptend_s, eshflx, scheme_name, errmsg, errflg) ! Input arguments integer, intent(in) :: ncol ! number of atmospheric columns integer, intent(in) :: pver ! number of vertical layers @@ -22,11 +22,17 @@ subroutine check_energy_fix_run(ncol, pver, pint, gravit, heat_glob, ptend_s, es real(kind_phys), intent(out) :: eshflx(:) ! effective sensible heat flux [W m-2] ! for check_energy_chng + ! Output arguments character(len=64), intent(out) :: scheme_name ! scheme name + character(len=512), intent(out) :: errmsg ! error message + integer, intent(out) :: errflg ! error flag ! Local variables integer :: i + errmsg = '' + errflg = 0 + ! Set scheme name for check_energy_chng scheme_name = "check_energy_fix" diff --git a/schemes/check_energy/check_energy_fix.meta b/schemes/check_energy/check_energy_fix.meta index b5f935fb..176a57d7 100644 --- a/schemes/check_energy/check_energy_fix.meta +++ b/schemes/check_energy/check_energy_fix.meta @@ -53,3 +53,15 @@ type = character | kind = len=64 dimensions = () intent = out +[ 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/check_energy/check_energy_gmean/check_energy_gmean.F90 b/schemes/check_energy/check_energy_gmean/check_energy_gmean.F90 index 4d50c428..7aa37f98 100644 --- a/schemes/check_energy/check_energy_gmean/check_energy_gmean.F90 +++ b/schemes/check_energy/check_energy_gmean/check_energy_gmean.F90 @@ -19,7 +19,8 @@ subroutine check_energy_gmean_run( & pint, & te_ini_dyn, teout, & tedif_glob, heat_glob, & - teinp_glob, teout_glob, psurf_glob, ptopb_glob) + teinp_glob, teout_glob, psurf_glob, ptopb_glob, & + errmsg, errflg) ! This scheme is non-portable due to dependency: Global mean module gmean from src/utils use gmean_mod, only: gmean @@ -43,10 +44,16 @@ subroutine check_energy_gmean_run( & real(kind_phys), intent(out) :: psurf_glob ! global mean surface pressure [Pa] real(kind_phys), intent(out) :: ptopb_glob ! global mean top boundary pressure [Pa] + character(len=512), intent(out) :: errmsg ! error message + integer, intent(out) :: errflg ! error flag + ! Local variables real(kind_phys) :: te(ncol, 4) ! total energy of input/output states (copy) real(kind_phys) :: te_glob(4) ! global means of total energy + errmsg = '' + errflg = 0 + ! Copy total energy out of input and output states. ! These four fields will have their global means calculated respectively te(:ncol, 1) = te_ini_dyn(:ncol) ! Input energy using dycore energy formula [J m-2] diff --git a/schemes/check_energy/check_energy_gmean/check_energy_gmean.meta b/schemes/check_energy/check_energy_gmean/check_energy_gmean.meta index 8ebf6f83..9aa7b57d 100644 --- a/schemes/check_energy/check_energy_gmean/check_energy_gmean.meta +++ b/schemes/check_energy/check_energy_gmean/check_energy_gmean.meta @@ -84,3 +84,15 @@ type = real | kind = kind_phys dimensions = () intent = out +[ 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/check_energy/check_energy_save_teout.F90 b/schemes/check_energy/check_energy_save_teout.F90 index 6ccdc15c..6f60eb3a 100644 --- a/schemes/check_energy/check_energy_save_teout.F90 +++ b/schemes/check_energy/check_energy_save_teout.F90 @@ -13,7 +13,7 @@ module check_energy_save_teout !> \section arg_table_check_energy_save_teout_run Argument Table !! \htmlinclude arg_table_check_energy_save_teout_run.html - subroutine check_energy_save_teout_run(ncol, te_cur_dyn, teout) + subroutine check_energy_save_teout_run(ncol, te_cur_dyn, teout, errmsg, errflg) ! Input arguments integer, intent(in) :: ncol ! number of atmospheric columns @@ -21,6 +21,11 @@ subroutine check_energy_save_teout_run(ncol, te_cur_dyn, teout) ! Output arguments real(kind_phys), intent(out) :: teout(:) ! total energy for global fixer in next timestep [J m-2] + character(len=512), intent(out) :: errmsg ! error message + integer, intent(out) :: errflg ! error flag + + errmsg = '' + errflg = 0 ! nb hplin: note that in physpkg.F90, the pbuf is updated to the previous dyn timestep ! through itim_old. Need to check if we need to replicate such pbuf functionality diff --git a/schemes/check_energy/check_energy_save_teout.meta b/schemes/check_energy/check_energy_save_teout.meta index 57a712a0..d587b6f7 100644 --- a/schemes/check_energy/check_energy_save_teout.meta +++ b/schemes/check_energy/check_energy_save_teout.meta @@ -23,3 +23,15 @@ type = real | kind = kind_phys dimensions = (horizontal_loop_extent) intent = out +[ 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/check_energy/check_energy_zero_fluxes.F90 b/schemes/check_energy/check_energy_zero_fluxes.F90 index bda0d74c..52a444e2 100644 --- a/schemes/check_energy/check_energy_zero_fluxes.F90 +++ b/schemes/check_energy/check_energy_zero_fluxes.F90 @@ -12,7 +12,7 @@ module check_energy_zero_fluxes !> \section arg_table_check_energy_zero_fluxes_run Argument Table !! \htmlinclude arg_table_check_energy_zero_fluxes_run.html - subroutine check_energy_zero_fluxes_run(ncol, name, flx_vap, flx_cnd, flx_ice, flx_sen) + subroutine check_energy_zero_fluxes_run(ncol, name, flx_vap, flx_cnd, flx_ice, flx_sen, errmsg, errflg) ! Input arguments integer, intent(in) :: ncol ! number of atmospheric columns @@ -22,6 +22,11 @@ subroutine check_energy_zero_fluxes_run(ncol, name, flx_vap, flx_cnd, flx_ice, f real(kind_phys), intent(out) :: flx_cnd(:) ! boundary flux of liquid+ice (precip?) [m s-1] real(kind_phys), intent(out) :: flx_ice(:) ! boundary flux of ice (snow?) [m s-1] real(kind_phys), intent(out) :: flx_sen(:) ! boundary flux of sensible heat [W m-2] + character(len=512), intent(out) :: errmsg ! error message + integer, intent(out) :: errflg ! error flag + + errmsg = '' + errflg = 0 ! reset values to zero name = '' diff --git a/schemes/check_energy/check_energy_zero_fluxes.meta b/schemes/check_energy/check_energy_zero_fluxes.meta index 65782599..2c40e524 100644 --- a/schemes/check_energy/check_energy_zero_fluxes.meta +++ b/schemes/check_energy/check_energy_zero_fluxes.meta @@ -41,3 +41,15 @@ type = real | kind = kind_phys dimensions = (horizontal_loop_extent) intent = out +[ 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/check_energy/dycore_energy_consistency_adjust.F90 b/schemes/check_energy/dycore_energy_consistency_adjust.F90 index 14fce382..4eaa6d97 100644 --- a/schemes/check_energy/dycore_energy_consistency_adjust.F90 +++ b/schemes/check_energy/dycore_energy_consistency_adjust.F90 @@ -16,7 +16,8 @@ subroutine dycore_energy_consistency_adjust_run( & do_consistency_adjust, & scaling_dycore, & tend_dTdt, & - tend_dTdt_local) + tend_dTdt_local, & + errmsg, errflg) ! Input arguments integer, intent(in) :: ncol ! number of atmospheric columns @@ -26,7 +27,12 @@ subroutine dycore_energy_consistency_adjust_run( & real(kind_phys), intent(in) :: tend_dTdt(:,:) ! model physics temperature tendency [K s-1] ! Output arguments - real(kind_phys), intent(out) :: tend_dTdt_local(:,:) ! (scheme) temperature tendency [K s-1] + real(kind_phys), intent(out) :: tend_dTdt_local(:,:) ! (scheme) temperature tendency [K s-1] + character(len=512), intent(out) :: errmsg ! error message + integer, intent(out) :: errflg ! error flag + + errmsg = '' + errflg = 0 if (do_consistency_adjust) then ! original formula for scaling of temperature: diff --git a/schemes/check_energy/dycore_energy_consistency_adjust.meta b/schemes/check_energy/dycore_energy_consistency_adjust.meta index e1afb294..05593fd3 100644 --- a/schemes/check_energy/dycore_energy_consistency_adjust.meta +++ b/schemes/check_energy/dycore_energy_consistency_adjust.meta @@ -41,3 +41,15 @@ type = real | kind = kind_phys dimensions = (horizontal_loop_extent, vertical_layer_dimension) intent = out +[ 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