1module kgen_utils_mod
2
3INTEGER, PARAMETER :: kgen_dp = selected_real_kind(15, 307)
4
5type check_t
6    logical :: Passed
7    integer :: numFatal
8    integer :: numTotal
9    integer :: numIdentical
10    integer :: numWarning
11    integer :: VerboseLevel
12    real(kind=kgen_dp) :: tolerance
13    real(kind=kgen_dp) :: minvalue
14end type check_t
15
16public kgen_dp, check_t, kgen_init_check, kgen_print_check
17
18contains
19
20subroutine kgen_init_check(check, tolerance, minvalue)
21  type(check_t), intent(inout) :: check
22  real(kind=kgen_dp), intent(in), optional :: tolerance
23  real(kind=kgen_dp), intent(in), optional :: minvalue
24
25  check%Passed   = .TRUE.
26  check%numFatal = 0
27  check%numWarning = 0
28  check%numTotal = 0
29  check%numIdentical = 0
30  check%VerboseLevel = 1
31  if(present(tolerance)) then
32     check%tolerance = tolerance
33  else
34      check%tolerance = 1.0D-15
35  endif
36  if(present(minvalue)) then
37     check%minvalue = minvalue
38  else
39      check%minvalue = 1.0D-15
40  endif
41end subroutine kgen_init_check
42
43subroutine kgen_print_check(kname, check)
44   character(len=*) :: kname
45   type(check_t), intent(in) ::  check
46
47   write (*,*)
48   write (*,*) TRIM(kname),' KGENPrtCheck: Tolerance for normalized RMS: ',check%tolerance
49   write (*,*) TRIM(kname),' KGENPrtCheck: Number of variables checked: ',check%numTotal
50   write (*,*) TRIM(kname),' KGENPrtCheck: Number of Identical results: ',check%numIdentical
51   write (*,*) TRIM(kname),' KGENPrtCheck: Number of warnings detected: ',check%numWarning
52   write (*,*) TRIM(kname),' KGENPrtCheck: Number of fatal errors detected: ', check%numFatal
53
54   if (check%numFatal> 0) then
55        write(*,*) TRIM(kname),' KGENPrtCheck: verification FAILED'
56   else
57        write(*,*) TRIM(kname),' KGENPrtCheck: verification PASSED'
58   endif
59end subroutine kgen_print_check
60
61end module
62