From d73512a0a5b0dc330f5fa9f6092645e242662318 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Wed, 29 Jan 2025 19:57:07 +0000 Subject: [PATCH] Expand to test for correct scheme order in caps. --- test/var_compatibility_test/effr_calc.F90 | 13 +++++++++++-- test/var_compatibility_test/effr_calc.meta | 7 +++++++ test/var_compatibility_test/effr_diag.F90 | 11 ++++++++++- test/var_compatibility_test/effr_diag.meta | 7 +++++++ test/var_compatibility_test/effr_post.F90 | 11 ++++++++++- test/var_compatibility_test/effr_post.meta | 7 +++++++ test/var_compatibility_test/effr_pre.F90 | 11 ++++++++++- test/var_compatibility_test/effr_pre.meta | 7 +++++++ test/var_compatibility_test/run_test | 3 +++ test/var_compatibility_test/test_host.F90 | 12 ++++++++---- test/var_compatibility_test/test_host_data.F90 | 4 ++++ test/var_compatibility_test/test_host_data.meta | 6 ++++++ test/var_compatibility_test/test_reports.py | 4 +++- 13 files changed, 93 insertions(+), 10 deletions(-) diff --git a/test/var_compatibility_test/effr_calc.F90 b/test/var_compatibility_test/effr_calc.F90 index 34f9d1eb..1b075a3c 100644 --- a/test/var_compatibility_test/effr_calc.F90 +++ b/test/var_compatibility_test/effr_calc.F90 @@ -14,13 +14,22 @@ module effr_calc !> \section arg_table_effr_calc_init Argument Table !! \htmlinclude arg_table_effr_calc_init.html !! - subroutine effr_calc_init(errmsg, errflg) + subroutine effr_calc_init(scheme_order, errmsg, errflg) character(len=512), intent(out) :: errmsg integer, intent(out) :: errflg - + integer, intent(inout) :: scheme_order + errmsg = '' errflg = 0 + if (scheme_order .ne. 2) then + errflg = 1 + errmsg = 'ERROR: effr_calc_init() needs to be called second' + return + else + scheme_order = scheme_order + 1 + endif + end subroutine effr_calc_init !> \section arg_table_effr_calc_run Argument Table diff --git a/test/var_compatibility_test/effr_calc.meta b/test/var_compatibility_test/effr_calc.meta index 0530574f..ec074f4d 100644 --- a/test/var_compatibility_test/effr_calc.meta +++ b/test/var_compatibility_test/effr_calc.meta @@ -6,6 +6,13 @@ [ccpp-arg-table] name = effr_calc_init type = scheme +[ scheme_order ] + standard_name = scheme_order_in_suite + long_name = scheme order in suite definition file + units = None + dimensions = () + type = integer + intent = inout [ errmsg ] standard_name = ccpp_error_message long_name = Error message for error handling in CCPP diff --git a/test/var_compatibility_test/effr_diag.F90 b/test/var_compatibility_test/effr_diag.F90 index 463b7be9..23993f5e 100644 --- a/test/var_compatibility_test/effr_diag.F90 +++ b/test/var_compatibility_test/effr_diag.F90 @@ -15,13 +15,22 @@ module effr_diag !> \section arg_table_effr_diag_init Argument Table !! \htmlinclude arg_table_effr_diag_init.html !! - subroutine effr_diag_init(errmsg, errflg) + subroutine effr_diag_init(scheme_order, errmsg, errflg) character(len=512), intent(out) :: errmsg integer, intent(out) :: errflg + integer, intent(inout) :: scheme_order errmsg = '' errflg = 0 + if (scheme_order .ne. 4) then + errflg = 1 + errmsg = 'ERROR: effr_diag_init() needs to be called fourth' + return + else + scheme_order = scheme_order + 1 + endif + end subroutine effr_diag_init !> \section arg_table_effr_diag_run Argument Table diff --git a/test/var_compatibility_test/effr_diag.meta b/test/var_compatibility_test/effr_diag.meta index 3a83e154..1855fd89 100644 --- a/test/var_compatibility_test/effr_diag.meta +++ b/test/var_compatibility_test/effr_diag.meta @@ -6,6 +6,13 @@ [ccpp-arg-table] name = effr_diag_init type = scheme +[ scheme_order ] + standard_name = scheme_order_in_suite + long_name = scheme order in suite definition file + units = None + dimensions = () + type = integer + intent = inout [ errmsg ] standard_name = ccpp_error_message long_name = Error message for error handling in CCPP diff --git a/test/var_compatibility_test/effr_post.F90 b/test/var_compatibility_test/effr_post.F90 index c40b5df5..17c63cc0 100644 --- a/test/var_compatibility_test/effr_post.F90 +++ b/test/var_compatibility_test/effr_post.F90 @@ -15,13 +15,22 @@ module effr_post !> \section arg_table_effr_post_init Argument Table !! \htmlinclude arg_table_effr_post_init.html !! - subroutine effr_post_init(errmsg, errflg) + subroutine effr_post_init(scheme_order, errmsg, errflg) character(len=512), intent(out) :: errmsg integer, intent(out) :: errflg + integer, intent(inout) :: scheme_order errmsg = '' errflg = 0 + if (scheme_order .ne. 3) then + errflg = 1 + errmsg = 'ERROR: effr_post_init() needs to be called third' + return + else + scheme_order = scheme_order + 1 + endif + end subroutine effr_post_init !> \section arg_table_effr_post_run Argument Table diff --git a/test/var_compatibility_test/effr_post.meta b/test/var_compatibility_test/effr_post.meta index 2440a86e..fd1d554e 100644 --- a/test/var_compatibility_test/effr_post.meta +++ b/test/var_compatibility_test/effr_post.meta @@ -6,6 +6,13 @@ [ccpp-arg-table] name = effr_post_init type = scheme +[ scheme_order ] + standard_name = scheme_order_in_suite + long_name = scheme order in suite definition file + units = None + dimensions = () + type = integer + intent = inout [ errmsg ] standard_name = ccpp_error_message long_name = Error message for error handling in CCPP diff --git a/test/var_compatibility_test/effr_pre.F90 b/test/var_compatibility_test/effr_pre.F90 index c744f1fc..dcd3363a 100644 --- a/test/var_compatibility_test/effr_pre.F90 +++ b/test/var_compatibility_test/effr_pre.F90 @@ -14,13 +14,22 @@ module effr_pre !> \section arg_table_effr_pre_init Argument Table !! \htmlinclude arg_table_effr_pre_init.html !! - subroutine effr_pre_init(errmsg, errflg) + subroutine effr_pre_init(scheme_order, errmsg, errflg) character(len=512), intent(out) :: errmsg integer, intent(out) :: errflg + integer, intent(inout) :: scheme_order errmsg = '' errflg = 0 + if (scheme_order .ne. 1) then + errflg = 1 + errmsg = 'ERROR: effr_pre_init() needs to be called first' + return + else + scheme_order = scheme_order + 1 + endif + end subroutine effr_pre_init !> \section arg_table_effr_pre_run Argument Table diff --git a/test/var_compatibility_test/effr_pre.meta b/test/var_compatibility_test/effr_pre.meta index b24e8db6..2dc982e6 100644 --- a/test/var_compatibility_test/effr_pre.meta +++ b/test/var_compatibility_test/effr_pre.meta @@ -6,6 +6,13 @@ [ccpp-arg-table] name = effr_pre_init type = scheme +[ scheme_order ] + standard_name = scheme_order_in_suite + long_name = scheme order in suite definition file + units = None + dimensions = () + type = integer + intent = inout [ errmsg ] standard_name = ccpp_error_message long_name = Error message for error handling in CCPP diff --git a/test/var_compatibility_test/run_test b/test/var_compatibility_test/run_test index 5a1d6b5c..26e33a3a 100755 --- a/test/var_compatibility_test/run_test +++ b/test/var_compatibility_test/run_test @@ -144,6 +144,7 @@ required_vars_var_compatibility="${required_vars_var_compatibility},horizontal_d required_vars_var_compatibility="${required_vars_var_compatibility},horizontal_loop_begin" required_vars_var_compatibility="${required_vars_var_compatibility},horizontal_loop_end" required_vars_var_compatibility="${required_vars_var_compatibility},scalar_variable_for_testing" +required_vars_var_compatibility="${required_vars_var_compatibility},scheme_order_in_suite" required_vars_var_compatibility="${required_vars_var_compatibility},vertical_layer_dimension" input_vars_var_compatibility="cloud_graupel_number_concentration" #input_vars_var_compatibility="${input_vars_var_compatibility},cloud_ice_number_concentration" @@ -157,6 +158,7 @@ input_vars_var_compatibility="${input_vars_var_compatibility},horizontal_dimensi input_vars_var_compatibility="${input_vars_var_compatibility},horizontal_loop_begin" input_vars_var_compatibility="${input_vars_var_compatibility},horizontal_loop_end" input_vars_var_compatibility="${input_vars_var_compatibility},scalar_variable_for_testing" +input_vars_var_compatibility="${input_vars_var_compatibility},scheme_order_in_suite" input_vars_var_compatibility="${input_vars_var_compatibility},vertical_layer_dimension" output_vars_var_compatibility="ccpp_error_code,ccpp_error_message" output_vars_var_compatibility="${output_vars_var_compatibility},cloud_ice_number_concentration" @@ -165,6 +167,7 @@ output_vars_var_compatibility="${output_vars_var_compatibility},effective_radius output_vars_var_compatibility="${output_vars_var_compatibility},effective_radius_of_stratiform_cloud_rain_particle" output_vars_var_compatibility="${output_vars_var_compatibility},effective_radius_of_stratiform_cloud_snow_particle" output_vars_var_compatibility="${output_vars_var_compatibility},scalar_variable_for_testing" +output_vars_var_compatibility="${output_vars_var_compatibility},scheme_order_in_suite" ## ## Run a database report and check the return string diff --git a/test/var_compatibility_test/test_host.F90 b/test/var_compatibility_test/test_host.F90 index 3bb50da4..721fc5f9 100644 --- a/test/var_compatibility_test/test_host.F90 +++ b/test/var_compatibility_test/test_host.F90 @@ -351,17 +351,18 @@ program test character(len=cs), target :: test_parts1(1) = (/ 'radiation ' /) - character(len=cm), target :: test_invars1(8) = (/ & + character(len=cm), target :: test_invars1(9) = (/ & 'effective_radius_of_stratiform_cloud_rain_particle ', & 'effective_radius_of_stratiform_cloud_liquid_water_particle', & 'effective_radius_of_stratiform_cloud_snow_particle ', & 'effective_radius_of_stratiform_cloud_graupel ', & 'cloud_graupel_number_concentration ', & 'scalar_variable_for_testing ', & + 'scheme_order_in_suite ', & 'flag_indicating_cloud_microphysics_has_graupel ', & 'flag_indicating_cloud_microphysics_has_ice '/) - character(len=cm), target :: test_outvars1(8) = (/ & + character(len=cm), target :: test_outvars1(9) = (/ & 'ccpp_error_code ', & 'ccpp_error_message ', & 'effective_radius_of_stratiform_cloud_ice_particle ', & @@ -369,9 +370,11 @@ program test 'effective_radius_of_stratiform_cloud_rain_particle ', & 'effective_radius_of_stratiform_cloud_snow_particle ', & 'cloud_ice_number_concentration ', & - 'scalar_variable_for_testing ' /) + 'scalar_variable_for_testing ', & + 'scheme_order_in_suite '/) + - character(len=cm), target :: test_reqvars1(12) = (/ & + character(len=cm), target :: test_reqvars1(13) = (/ & 'ccpp_error_code ', & 'ccpp_error_message ', & 'effective_radius_of_stratiform_cloud_rain_particle ', & @@ -382,6 +385,7 @@ program test 'cloud_graupel_number_concentration ', & 'cloud_ice_number_concentration ', & 'scalar_variable_for_testing ', & + 'scheme_order_in_suite ', & 'flag_indicating_cloud_microphysics_has_graupel ', & 'flag_indicating_cloud_microphysics_has_ice '/) diff --git a/test/var_compatibility_test/test_host_data.F90 b/test/var_compatibility_test/test_host_data.F90 index 9d0ca306..b6552e68 100644 --- a/test/var_compatibility_test/test_host_data.F90 +++ b/test/var_compatibility_test/test_host_data.F90 @@ -13,6 +13,7 @@ module test_host_data ncg, & ! number concentration of cloud graupel nci ! number concentration of cloud ice real(kind_phys) :: scalar_var + integer :: scheme_order end type physics_state public allocate_physics_state @@ -62,6 +63,9 @@ subroutine allocate_physics_state(cols, levels, state, has_graupel, has_ice) allocate(state%nci(cols, levels)) endif + ! Initialize scheme counter. + state%scheme_order = 1 + end subroutine allocate_physics_state end module test_host_data diff --git a/test/var_compatibility_test/test_host_data.meta b/test/var_compatibility_test/test_host_data.meta index d3bca89b..db9d8b16 100644 --- a/test/var_compatibility_test/test_host_data.meta +++ b/test/var_compatibility_test/test_host_data.meta @@ -59,3 +59,9 @@ dimensions = () type = real kind = kind_phys +[scheme_order] + standard_name = scheme_order_in_suite + long_name = scheme order in suite definition file + units = None + dimensions = () + type = integer diff --git a/test/var_compatibility_test/test_reports.py b/test/var_compatibility_test/test_reports.py index 6f10fc6d..eb4a5a4b 100755 --- a/test/var_compatibility_test/test_reports.py +++ b/test/var_compatibility_test/test_reports.py @@ -74,6 +74,7 @@ def usage(errmsg=None): "effective_radius_of_stratiform_cloud_graupel", "cloud_graupel_number_concentration", "scalar_variable_for_testing", + "scheme_order_in_suite", "flag_indicating_cloud_microphysics_has_graupel", "flag_indicating_cloud_microphysics_has_ice"] _OUTPUT_VARS_VAR_ACTION = ["ccpp_error_code", "ccpp_error_message", @@ -82,7 +83,8 @@ def usage(errmsg=None): "effective_radius_of_stratiform_cloud_snow_particle", "cloud_ice_number_concentration", "effective_radius_of_stratiform_cloud_rain_particle", - "scalar_variable_for_testing"] + "scalar_variable_for_testing", + "scheme_order_in_suite"] _REQUIRED_VARS_VAR_ACTION = _INPUT_VARS_VAR_ACTION + _OUTPUT_VARS_VAR_ACTION def fields_string(field_type, field_list, sep):