2 c---------------------------------------------------------------------
3 c---------------------------------------------------------------------
5 subroutine verify(no_time_steps, class, verified)
7 c---------------------------------------------------------------------
8 c---------------------------------------------------------------------
10 c---------------------------------------------------------------------
11 c verification routine
12 c---------------------------------------------------------------------
17 double precision xcrref(5),xceref(5),xcrdif(5),xcedif(5),
18 > epsilon, xce(5), xcr(5), dtref
19 integer m, no_time_steps
23 c---------------------------------------------------------------------
25 c---------------------------------------------------------------------
29 c---------------------------------------------------------------------
30 c compute the error norm and the residual norm, and exit if not printing
31 c---------------------------------------------------------------------
41 if (node .ne. 0) return
51 c---------------------------------------------------------------------
52 c reference data for 12X12X12 grids after 100 time steps, with DT = 1.50d-02
53 c---------------------------------------------------------------------
54 if ( (grid_points(1) .eq. 12 ) .and.
55 > (grid_points(2) .eq. 12 ) .and.
56 > (grid_points(3) .eq. 12 ) .and.
57 > (no_time_steps .eq. 100 )) then
62 c---------------------------------------------------------------------
63 c Reference values of RMS-norms of residual.
64 c---------------------------------------------------------------------
65 xcrref(1) = 2.7470315451339479d-02
66 xcrref(2) = 1.0360746705285417d-02
67 xcrref(3) = 1.6235745065095532d-02
68 xcrref(4) = 1.5840557224455615d-02
69 xcrref(5) = 3.4849040609362460d-02
71 c---------------------------------------------------------------------
72 c Reference values of RMS-norms of solution error.
73 c---------------------------------------------------------------------
74 xceref(1) = 2.7289258557377227d-05
75 xceref(2) = 1.0364446640837285d-05
76 xceref(3) = 1.6154798287166471d-05
77 xceref(4) = 1.5750704994480102d-05
78 xceref(5) = 3.4177666183390531d-05
81 c---------------------------------------------------------------------
82 c reference data for 36X36X36 grids after 400 time steps, with DT = 1.5d-03
83 c---------------------------------------------------------------------
84 elseif ( (grid_points(1) .eq. 36) .and.
85 > (grid_points(2) .eq. 36) .and.
86 > (grid_points(3) .eq. 36) .and.
87 > (no_time_steps . eq. 400) ) then
92 c---------------------------------------------------------------------
93 c Reference values of RMS-norms of residual.
94 c---------------------------------------------------------------------
95 xcrref(1) = 0.1893253733584d-02
96 xcrref(2) = 0.1717075447775d-03
97 xcrref(3) = 0.2778153350936d-03
98 xcrref(4) = 0.2887475409984d-03
99 xcrref(5) = 0.3143611161242d-02
101 c---------------------------------------------------------------------
102 c Reference values of RMS-norms of solution error.
103 c---------------------------------------------------------------------
104 xceref(1) = 0.7542088599534d-04
105 xceref(2) = 0.6512852253086d-05
106 xceref(3) = 0.1049092285688d-04
107 xceref(4) = 0.1128838671535d-04
108 xceref(5) = 0.1212845639773d-03
110 c---------------------------------------------------------------------
111 c reference data for 64X64X64 grids after 400 time steps, with DT = 1.5d-03
112 c---------------------------------------------------------------------
113 elseif ( (grid_points(1) .eq. 64) .and.
114 > (grid_points(2) .eq. 64) .and.
115 > (grid_points(3) .eq. 64) .and.
116 > (no_time_steps . eq. 400) ) then
121 c---------------------------------------------------------------------
122 c Reference values of RMS-norms of residual.
123 c---------------------------------------------------------------------
124 xcrref(1) = 2.4799822399300195d0
125 xcrref(2) = 1.1276337964368832d0
126 xcrref(3) = 1.5028977888770491d0
127 xcrref(4) = 1.4217816211695179d0
128 xcrref(5) = 2.1292113035138280d0
130 c---------------------------------------------------------------------
131 c Reference values of RMS-norms of solution error.
132 c---------------------------------------------------------------------
133 xceref(1) = 1.0900140297820550d-04
134 xceref(2) = 3.7343951769282091d-05
135 xceref(3) = 5.0092785406541633d-05
136 xceref(4) = 4.7671093939528255d-05
137 xceref(5) = 1.3621613399213001d-04
139 c---------------------------------------------------------------------
140 c reference data for 102X102X102 grids after 400 time steps,
142 c---------------------------------------------------------------------
143 elseif ( (grid_points(1) .eq. 102) .and.
144 > (grid_points(2) .eq. 102) .and.
145 > (grid_points(3) .eq. 102) .and.
146 > (no_time_steps . eq. 400) ) then
151 c---------------------------------------------------------------------
152 c Reference values of RMS-norms of residual.
153 c---------------------------------------------------------------------
154 xcrref(1) = 0.6903293579998d+02
155 xcrref(2) = 0.3095134488084d+02
156 xcrref(3) = 0.4103336647017d+02
157 xcrref(4) = 0.3864769009604d+02
158 xcrref(5) = 0.5643482272596d+02
160 c---------------------------------------------------------------------
161 c Reference values of RMS-norms of solution error.
162 c---------------------------------------------------------------------
163 xceref(1) = 0.9810006190188d-02
164 xceref(2) = 0.1022827905670d-02
165 xceref(3) = 0.1720597911692d-02
166 xceref(4) = 0.1694479428231d-02
167 xceref(5) = 0.1847456263981d-01
169 c---------------------------------------------------------------------
170 c reference data for 162X162X162 grids after 400 time steps,
172 c---------------------------------------------------------------------
173 elseif ( (grid_points(1) .eq. 162) .and.
174 > (grid_points(2) .eq. 162) .and.
175 > (grid_points(3) .eq. 162) .and.
176 > (no_time_steps . eq. 400) ) then
181 c---------------------------------------------------------------------
182 c Reference values of RMS-norms of residual.
183 c---------------------------------------------------------------------
184 xcrref(1) = 0.5881691581829d+03
185 xcrref(2) = 0.2454417603569d+03
186 xcrref(3) = 0.3293829191851d+03
187 xcrref(4) = 0.3081924971891d+03
188 xcrref(5) = 0.4597223799176d+03
190 c---------------------------------------------------------------------
191 c Reference values of RMS-norms of solution error.
192 c---------------------------------------------------------------------
193 xceref(1) = 0.2598120500183d+00
194 xceref(2) = 0.2590888922315d-01
195 xceref(3) = 0.5132886416320d-01
196 xceref(4) = 0.4806073419454d-01
197 xceref(5) = 0.5483377491301d+00
199 c---------------------------------------------------------------------
200 c reference data for 408X408X408 grids after 500 time steps,
202 c---------------------------------------------------------------------
203 elseif ( (grid_points(1) .eq. 408) .and.
204 > (grid_points(2) .eq. 408) .and.
205 > (grid_points(3) .eq. 408) .and.
206 > (no_time_steps . eq. 500) ) then
211 c---------------------------------------------------------------------
212 c Reference values of RMS-norms of residual.
213 c---------------------------------------------------------------------
214 xcrref(1) = 0.1044696216887d+05
215 xcrref(2) = 0.3204427762578d+04
216 xcrref(3) = 0.4648680733032d+04
217 xcrref(4) = 0.4238923283697d+04
218 xcrref(5) = 0.7588412036136d+04
220 c---------------------------------------------------------------------
221 c Reference values of RMS-norms of solution error.
222 c---------------------------------------------------------------------
223 xceref(1) = 0.5089471423669d+01
224 xceref(2) = 0.5323514855894d+00
225 xceref(3) = 0.1187051008971d+01
226 xceref(4) = 0.1083734951938d+01
227 xceref(5) = 0.1164108338568d+02
229 c---------------------------------------------------------------------
230 c reference data for 1020X1020X1020 grids after 500 time steps,
232 c---------------------------------------------------------------------
233 elseif ( (grid_points(1) .eq. 1020) .and.
234 > (grid_points(2) .eq. 1020) .and.
235 > (grid_points(3) .eq. 1020) .and.
236 > (no_time_steps . eq. 500) ) then
241 c---------------------------------------------------------------------
242 c Reference values of RMS-norms of residual.
243 c---------------------------------------------------------------------
244 xcrref(1) = 0.6255387422609d+05
245 xcrref(2) = 0.1495317020012d+05
246 xcrref(3) = 0.2347595750586d+05
247 xcrref(4) = 0.2091099783534d+05
248 xcrref(5) = 0.4770412841218d+05
250 c---------------------------------------------------------------------
251 c Reference values of RMS-norms of solution error.
252 c---------------------------------------------------------------------
253 xceref(1) = 0.6742735164909d+02
254 xceref(2) = 0.5390656036938d+01
255 xceref(3) = 0.1680647196477d+02
256 xceref(4) = 0.1536963126457d+02
257 xceref(5) = 0.1575330146156d+03
263 c---------------------------------------------------------------------
264 c verification test for residuals if gridsize is one of
265 c the defined grid sizes above (class .ne. 'U')
266 c---------------------------------------------------------------------
268 c---------------------------------------------------------------------
269 c Compute the difference of solution values and the known reference values.
270 c---------------------------------------------------------------------
273 xcrdif(m) = dabs((xcr(m)-xcrref(m))/xcrref(m))
274 xcedif(m) = dabs((xce(m)-xceref(m))/xceref(m))
278 c---------------------------------------------------------------------
279 c Output the comparison of computed results to known cases.
280 c---------------------------------------------------------------------
282 if (class .ne. 'U') then
284 1990 format(' Verification being performed for class ', a)
285 write (*,2000) epsilon
286 2000 format(' accuracy setting for epsilon = ', E20.13)
287 verified = (dabs(dt-dtref) .le. epsilon)
288 if (.not.verified) then
291 1000 format(' DT does not match the reference value of ',
296 1995 format(' Unknown class')
300 if (class .ne. 'U') then
306 2001 format(' Comparison of RMS-norms of residual')
307 2005 format(' RMS-norms of residual')
309 if (class .eq. 'U') then
310 write(*, 2015) m, xcr(m)
311 else if (xcrdif(m) .le. epsilon) then
312 write (*,2011) m,xcr(m),xcrref(m),xcrdif(m)
315 write (*,2010) m,xcr(m),xcrref(m),xcrdif(m)
319 if (class .ne. 'U') then
324 2002 format(' Comparison of RMS-norms of solution error')
325 2006 format(' RMS-norms of solution error')
328 if (class .eq. 'U') then
329 write(*, 2015) m, xce(m)
330 else if (xcedif(m) .le. epsilon) then
331 write (*,2011) m,xce(m),xceref(m),xcedif(m)
334 write (*,2010) m,xce(m),xceref(m),xcedif(m)
338 2010 format(' FAILURE: ', i2, E20.13, E20.13, E20.13)
339 2011 format(' ', i2, E20.13, E20.13, E20.13)
340 2015 format(' ', i2, E20.13)
342 if (class .eq. 'U') then
345 2022 format(' No reference values provided')
346 2023 format(' No verification performed')
347 else if (verified) then
349 2020 format(' Verification Successful')
352 2021 format(' Verification failed')