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 bfa8af38..0e998bee 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 845b30b6..f1541329 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 d6f5e523..170e18c9 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 e41625d0..721582a6 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 0e4f840a..22482fd3 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 c9fe2caa..9c1fcf8e 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 dabd3e4d..b2fa0f90 100755 --- a/test/var_compatibility_test/run_test +++ b/test/var_compatibility_test/run_test @@ -147,6 +147,7 @@ required_vars_var_compatibility="${required_vars_var_compatibility},scalar_varia required_vars_var_compatibility="${required_vars_var_compatibility},scalar_variable_for_testing_a" required_vars_var_compatibility="${required_vars_var_compatibility},scalar_variable_for_testing_b" required_vars_var_compatibility="${required_vars_var_compatibility},scalar_variable_for_testing_c" +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" @@ -163,6 +164,7 @@ input_vars_var_compatibility="${input_vars_var_compatibility},scalar_variable_fo input_vars_var_compatibility="${input_vars_var_compatibility},scalar_variable_for_testing_a" input_vars_var_compatibility="${input_vars_var_compatibility},scalar_variable_for_testing_b" input_vars_var_compatibility="${input_vars_var_compatibility},scalar_variable_for_testing_c" +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" @@ -171,6 +173,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 bbd77641..14b80a60 100644 --- a/test/var_compatibility_test/test_host.F90 +++ b/test/var_compatibility_test/test_host.F90 @@ -351,7 +351,7 @@ program test character(len=cs), target :: test_parts1(1) = (/ 'radiation ' /) - character(len=cm), target :: test_invars1(11) = (/ & + character(len=cm), target :: test_invars1(12) = (/ & 'effective_radius_of_stratiform_cloud_rain_particle ', & 'effective_radius_of_stratiform_cloud_liquid_water_particle', & 'effective_radius_of_stratiform_cloud_snow_particle ', & @@ -361,10 +361,11 @@ program test 'scalar_variable_for_testing_a ', & 'scalar_variable_for_testing_b ', & 'scalar_variable_for_testing_c ', & + '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 ', & @@ -372,9 +373,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(15) = (/ & + character(len=cm), target :: test_reqvars1(16) = (/ & 'ccpp_error_code ', & 'ccpp_error_message ', & 'effective_radius_of_stratiform_cloud_rain_particle ', & @@ -388,6 +391,7 @@ program test 'scalar_variable_for_testing_a ', & 'scalar_variable_for_testing_b ', & 'scalar_variable_for_testing_c ', & + '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 8c40ec5d..2dcba006 100644 --- a/test/var_compatibility_test/test_host_data.F90 +++ b/test/var_compatibility_test/test_host_data.F90 @@ -16,6 +16,8 @@ module test_host_data real(kind_phys) :: scalar_varA real(kind_phys) :: scalar_varB real(kind_phys) :: scalar_varC + integer :: scheme_order + end type physics_state public allocate_physics_state @@ -65,6 +67,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 5a209277..358b5f20 100644 --- a/test/var_compatibility_test/test_host_data.meta +++ b/test/var_compatibility_test/test_host_data.meta @@ -79,4 +79,10 @@ units = m dimensions = () type = real - kind = kind_phys \ No newline at end of file + 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 23dddb29..47f8e33b 100755 --- a/test/var_compatibility_test/test_reports.py +++ b/test/var_compatibility_test/test_reports.py @@ -77,6 +77,7 @@ def usage(errmsg=None): "scalar_variable_for_testing_a", "scalar_variable_for_testing_b", "scalar_variable_for_testing_c", + "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", @@ -85,7 +86,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):