The Elk Code
 
Loading...
Searching...
No Matches
testcheck.f90
Go to the documentation of this file.
1
2! Copyright (C) 2009 J. K. Dewhurst, S. Sharma and E. K. U. Gross
3! This file is distributed under the terms of the GNU Lesser General Public
4! License. See the file COPYING for license details.
5
6subroutine testcheck
7implicit none
8! local variables
9logical exist
10integer i,j,k,n
11integer nv_,nv,vt_,vt,iv_,iv
12real(8) rv_,rv,a,b
13real(8) tol,t1,t2
14complex(8) zv_,zv
15character(256) fname_,fname,descr
16n=0
17do i=0,999
18 write(fname_,'("TEST_",I3.3,".OUT_")') i
19 inquire(file=trim(fname_),exist=exist)
20 if (exist) then
21 write(fname,'("TEST_",I3.3,".OUT")') i
22 inquire(file=trim(fname),exist=exist)
23 if (.not.exist) then
24 write(*,*)
25 write(*,'("Error(testcheck): file ",A," does not exist")') trim(fname)
26 write(*,*)
27 error stop
28 end if
29 open(91,file=trim(fname_),form='FORMATTED')
30 open(92,file=trim(fname),form='FORMATTED')
31 read(91,*,err=10) descr
32 read(92,*,err=20) descr
33 read(91,*,err=10) vt_,nv_
34 read(92,*,err=20) vt,nv
35 if (vt_ /= vt) then
36 write(*,*)
37 write(*,'("Error(testcheck): differing variable type")')
38 write(*,'(" for quantity ''",A,"''")') trim(descr)
39 write(*,'(" ",A," : ",I8)') trim(fname_),vt_
40 write(*,'(" ",A," : ",I8)') trim(fname),vt
41 write(*,*)
42 error stop
43 end if
44 if (nv_ /= nv) then
45 write(*,*)
46 write(*,'("Error(testcheck): differing number of variables")')
47 write(*,'(" for quantity ''",A,"''")') trim(descr)
48 write(*,'(" ",A," : ",I8)') trim(fname_),nv_
49 write(*,'(" ",A," : ",I8)') trim(fname),nv
50 write(*,*)
51 error stop
52 end if
53 if (nv < 1) then
54 write(*,*)
55 write(*,'("Error(testcheck): nv < 1 : ",I8)') nv
56 write(*,*)
57 error stop
58 end if
59 if (vt == 1) then
60! integer variables
61 do j=1,nv
62 read(91,*,err=10) k,iv_
63 if (j /= k) goto 10
64 read(92,*,err=20) k,iv
65 if (j /= k) goto 20
66 if (iv /= iv_) then
67 write(*,*)
68 write(*,'("Error(testcheck): variable ",I8," is different")') j
69 write(*,'(" for quantity ''",A,"''")') trim(descr)
70 write(*,'(" ",A," : ",I8)') trim(fname_),iv_
71 write(*,'(" ",A," : ",I8)') trim(fname),iv
72 write(*,*)
73 error stop
74 end if
75 end do
76 else if (vt == 2) then
77! real variables
78 read(91,*,err=10) tol
79 read(92,*,err=20) tol
80 do j=1,nv
81 read(91,*,err=10) k,rv_
82 if (j /= k) goto 10
83 read(92,*,err=20) k,rv
84 if (j /= k) goto 20
85 t1=abs(rv_-rv)
86 t2=abs(rv_)*tol
87 if ((t1 > t2).and.(abs(rv_) > 1.d-4)) then
88 write(*,*)
89 write(*,'("Error(testcheck): variable ",I8," outside tolerance")') j
90 write(*,'(" for quantity ''",A,"''")') trim(descr)
91 write(*,'(" ",A," (correct value)",T40," : ",G24.14)') trim(fname_), &
92 rv_
93 write(*,'(" ",A,T40," : ",G24.14)') trim(fname),rv
94 write(*,'(" absolute difference",T40," : ",G24.14)') t1
95 write(*,'(" required relative tolerance",T40," : ",G24.14)') tol
96 write(*,'(" required absolute tolerance",T40," : ",G24.14)') t2
97 write(*,*)
98 error stop
99 end if
100 end do
101 else if (vt == 3) then
102! complex variables
103 read(91,*,err=10) tol
104 read(92,*,err=20) tol
105 do j=1,nv
106 read(91,*,err=10) k,a,b
107 zv_=cmplx(a,b,8)
108 if (j /= k) goto 10
109 read(92,*,err=20) k,a,b
110 zv=cmplx(a,b,8)
111 if (j /= k) goto 20
112 t1=abs(zv_-zv)
113 t2=abs(zv_)*tol
114 if ((t1 > t2).and.(abs(zv_) > 1.d-4)) then
115 write(*,*)
116 write(*,'("Error(testcheck): variable ",I8," outside tolerance")') j
117 write(*,'(" for quantity ''",A,"''")') trim(descr)
118 write(*,'(" ",A," (correct value)",T40," : ",2G24.14)') &
119 trim(fname_),zv_
120 write(*,'(" ",A,T40," : ",2G24.14)') trim(fname),zv
121 write(*,'(" difference",T40," : ",G24.14)') t1
122 write(*,'(" required relative tolerance",T40," : ",G24.14)') tol
123 write(*,'(" required absolute tolerance",T40," : ",G24.14)') t2
124 write(*,*)
125 error stop
126 end if
127 end do
128 else
129 write(*,*)
130 write(*,'("Error(testcheck): variable type not defined : ",I8)') vt
131 write(*,*)
132 error stop
133 end if
134 close(91)
135 close(92)
136 n=n+1
137 end if
138end do
139if (n == 0) then
140 write(*,*)
141 write(*,'("Warning(testcheck): no tests found")')
142else
143 write(*,*)
144 write(*,'("Info(testcheck): passed all tests")')
145end if
146return
14710 continue
148write(*,*)
149write(*,'("Error(testcheck): error reading from ",A)') trim(fname_)
150write(*,*)
151error stop
15220 continue
153write(*,*)
154write(*,'("Error(testcheck): error reading from ",A)') trim(fname)
155write(*,*)
156error stop
157end subroutine
158
subroutine testcheck
Definition testcheck.f90:7