[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