[Dart-dev] DART/branches Revision: 12814
dart at ucar.edu
dart at ucar.edu
Fri Sep 7 16:03:11 MDT 2018
nancy at ucar.edu
2018-09-07 16:03:11 -0600 (Fri, 07 Sep 2018)
333
added a verify_consistent_istatus() routine to the
mmc utils module and had all the test_interpolate
modules call it after model_interpolate(). it will
complain (but not a fatal error) about bad combinations
of istatus and interpolated values. (e.g. good istatus
but missing_r8 interp val, or the converse, or a
negative istatus)
Modified: DART/branches/recam/models/model_mod_tools/model_check_utilities_mod.f90
===================================================================
--- DART/branches/recam/models/model_mod_tools/model_check_utilities_mod.f90 2018-09-05 20:59:59 UTC (rev 12813)
+++ DART/branches/recam/models/model_mod_tools/model_check_utilities_mod.f90 2018-09-07 22:03:11 UTC (rev 12814)
@@ -10,7 +10,7 @@
! support routines for interpolation tests
!-------------------------------------------------------------------------------
-use types_mod, only : r8, i8, metadatalength
+use types_mod, only : r8, i8, metadatalength, missing_r8
use utilities_mod, only : error_handler, E_MSG, do_output
@@ -35,7 +35,8 @@
public :: test_single_interpolation, &
find_closest_gridpoint, &
- count_error_codes
+ count_error_codes, &
+ verify_consistent_istatus
! version controlled file description for error handling, do not edit
character(len=*), parameter :: source = &
@@ -234,6 +235,40 @@
end subroutine find_closest_gridpoint
!-------------------------------------------------------------------------------
+
+subroutine verify_consistent_istatus(ens_size, field, ios_out)
+ integer, intent(in) :: ens_size
+ real(r8), intent(in) :: field(ens_size)
+ integer, intent(in) :: ios_out(ens_size)
+
+character(len=*), parameter :: routine = '' ! name not important in context
+integer :: i
+
+do i = 1, ens_size
+ if (ios_out(i) < 0) then
+ write(string1, *) 'ensemble member ', i, &
+ ' inconsistent return: istatus cannot be a negative value.'
+ call error_handler(E_MSG, routine, string1)
+ endif
+
+ if (ios_out(i) == 0 .and. field(i) == missing_r8) then
+ write(string1, *) 'ensemble member ', i, &
+ ' inconsistent return: istatus = ok but interpolation value = missing data.'
+ call error_handler(E_MSG, routine, string1)
+ endif
+
+ if (ios_out(i) > 0 .and. field(i) /= missing_r8) then
+ write(string1, *) 'ensemble member ', i, &
+ ' inconsistent return: istatus = error but interpolation value /= missing data.'
+ write(string2, *) ' istatus, interp_val = ', ios_out(i), field(i)
+ call error_handler(E_MSG, routine, string1, text2=string2)
+ endif
+enddo
+
+end subroutine verify_consistent_istatus
+
+
+!-------------------------------------------------------------------------------
! End of model_check_utilities_mod
!-------------------------------------------------------------------------------
Modified: DART/branches/recam/models/model_mod_tools/test_interpolate_oned.f90
===================================================================
--- DART/branches/recam/models/model_mod_tools/test_interpolate_oned.f90 2018-09-05 20:59:59 UTC (rev 12813)
+++ DART/branches/recam/models/model_mod_tools/test_interpolate_oned.f90 2018-09-07 22:03:11 UTC (rev 12814)
@@ -26,7 +26,8 @@
use model_check_utilities_mod, only : test_single_interpolation, &
find_closest_gridpoint, &
- count_error_codes
+ count_error_codes, &
+ verify_consistent_istatus
use model_mod, only : get_model_size, &
get_state_meta_data, &
@@ -140,6 +141,8 @@
call model_interpolate(ens_handle, ens_size, loc, quantity_index, field(i,:), ios_out)
+ call verify_consistent_istatus(ens_size, field(i,:), ios_out)
+
write(iunit,*) field(i,:)
if (any(ios_out /= 0)) then
Modified: DART/branches/recam/models/model_mod_tools/test_interpolate_threed_cartesian.f90
===================================================================
--- DART/branches/recam/models/model_mod_tools/test_interpolate_threed_cartesian.f90 2018-09-05 20:59:59 UTC (rev 12813)
+++ DART/branches/recam/models/model_mod_tools/test_interpolate_threed_cartesian.f90 2018-09-07 22:03:11 UTC (rev 12814)
@@ -26,7 +26,8 @@
use model_check_utilities_mod, only : test_single_interpolation, &
find_closest_gridpoint, &
- count_error_codes
+ count_error_codes, &
+ verify_consistent_istatus
More information about the Dart-dev
mailing list