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---------------------------------------------------------------------
33 if (iotype .ne. 0) then
34 call accumulate_norms(xce)
47 if (node .ne. 0) return
56 c---------------------------------------------------------------------
57 c reference data for 12X12X12 grids after 60 time steps, with DT = 1.0d-02
58 c---------------------------------------------------------------------
59 if ( (grid_points(1) .eq. 12 ) .and.
60 > (grid_points(2) .eq. 12 ) .and.
61 > (grid_points(3) .eq. 12 ) .and.
62 > (no_time_steps .eq. 60 )) then
67 c---------------------------------------------------------------------
68 c Reference values of RMS-norms of residual.
69 c---------------------------------------------------------------------
70 xcrref(1) = 1.7034283709541311d-01
71 xcrref(2) = 1.2975252070034097d-02
72 xcrref(3) = 3.2527926989486055d-02
73 xcrref(4) = 2.6436421275166801d-02
74 xcrref(5) = 1.9211784131744430d-01
76 c---------------------------------------------------------------------
77 c Reference values of RMS-norms of solution error.
78 c---------------------------------------------------------------------
80 if (iotype .eq. 0) then
81 xceref(1) = 4.9976913345811579d-04
82 xceref(2) = 4.5195666782961927d-05
83 xceref(3) = 7.3973765172921357d-05
84 xceref(4) = 7.3821238632439731d-05
85 xceref(5) = 8.9269630987491446d-04
87 xceref(1) = 0.1149036328945d+02
88 xceref(2) = 0.9156788904727d+00
89 xceref(3) = 0.2857899428614d+01
90 xceref(4) = 0.2598273346734d+01
91 xceref(5) = 0.2652795397547d+02
94 c---------------------------------------------------------------------
95 c reference data for 24X24X24 grids after 200 time steps, with DT = 0.8d-3
96 c---------------------------------------------------------------------
97 elseif ( (grid_points(1) .eq. 24) .and.
98 > (grid_points(2) .eq. 24) .and.
99 > (grid_points(3) .eq. 24) .and.
100 > (no_time_steps . eq. 200) ) then
104 c---------------------------------------------------------------------
105 c Reference values of RMS-norms of residual.
106 c---------------------------------------------------------------------
107 xcrref(1) = 0.1125590409344d+03
108 xcrref(2) = 0.1180007595731d+02
109 xcrref(3) = 0.2710329767846d+02
110 xcrref(4) = 0.2469174937669d+02
111 xcrref(5) = 0.2638427874317d+03
113 c---------------------------------------------------------------------
114 c Reference values of RMS-norms of solution error.
115 c---------------------------------------------------------------------
117 if (iotype .eq. 0) then
118 xceref(1) = 0.4419655736008d+01
119 xceref(2) = 0.4638531260002d+00
120 xceref(3) = 0.1011551749967d+01
121 xceref(4) = 0.9235878729944d+00
122 xceref(5) = 0.1018045837718d+02
124 xceref(1) = 0.6729594398612d+02
125 xceref(2) = 0.5264523081690d+01
126 xceref(3) = 0.1677107142637d+02
127 xceref(4) = 0.1508721463436d+02
128 xceref(5) = 0.1477018363393d+03
132 c---------------------------------------------------------------------
133 c reference data for 64X64X64 grids after 200 time steps, with DT = 0.8d-3
134 c---------------------------------------------------------------------
135 elseif ( (grid_points(1) .eq. 64) .and.
136 > (grid_points(2) .eq. 64) .and.
137 > (grid_points(3) .eq. 64) .and.
138 > (no_time_steps . eq. 200) ) then
142 c---------------------------------------------------------------------
143 c Reference values of RMS-norms of residual.
144 c---------------------------------------------------------------------
145 xcrref(1) = 1.0806346714637264d+02
146 xcrref(2) = 1.1319730901220813d+01
147 xcrref(3) = 2.5974354511582465d+01
148 xcrref(4) = 2.3665622544678910d+01
149 xcrref(5) = 2.5278963211748344d+02
151 c---------------------------------------------------------------------
152 c Reference values of RMS-norms of solution error.
153 c---------------------------------------------------------------------
155 if (iotype .eq. 0) then
156 xceref(1) = 4.2348416040525025d+00
157 xceref(2) = 4.4390282496995698d-01
158 xceref(3) = 9.6692480136345650d-01
159 xceref(4) = 8.8302063039765474d-01
160 xceref(5) = 9.7379901770829278d+00
162 xceref(1) = 0.6482218724961d+02
163 xceref(2) = 0.5066461714527d+01
164 xceref(3) = 0.1613931961359d+02
165 xceref(4) = 0.1452010201481d+02
166 xceref(5) = 0.1420099377681d+03
169 c---------------------------------------------------------------------
170 c reference data for 102X102X102 grids after 200 time steps,
172 c---------------------------------------------------------------------
173 elseif ( (grid_points(1) .eq. 102) .and.
174 > (grid_points(2) .eq. 102) .and.
175 > (grid_points(3) .eq. 102) .and.
176 > (no_time_steps . eq. 200) ) then
181 c---------------------------------------------------------------------
182 c Reference values of RMS-norms of residual.
183 c---------------------------------------------------------------------
184 xcrref(1) = 1.4233597229287254d+03
185 xcrref(2) = 9.9330522590150238d+01
186 xcrref(3) = 3.5646025644535285d+02
187 xcrref(4) = 3.2485447959084092d+02
188 xcrref(5) = 3.2707541254659363d+03
190 c---------------------------------------------------------------------
191 c Reference values of RMS-norms of solution error.
192 c---------------------------------------------------------------------
194 if (iotype .eq. 0) then
195 xceref(1) = 5.2969847140936856d+01
196 xceref(2) = 4.4632896115670668d+00
197 xceref(3) = 1.3122573342210174d+01
198 xceref(4) = 1.2006925323559144d+01
199 xceref(5) = 1.2459576151035986d+02
201 xceref(1) = 0.1477545106464d+03
202 xceref(2) = 0.1108895555053d+02
203 xceref(3) = 0.3698065590331d+02
204 xceref(4) = 0.3310505581440d+02
205 xceref(5) = 0.3157928282563d+03
208 c---------------------------------------------------------------------
209 c reference data for 162X162X162 grids after 200 time steps,
211 c---------------------------------------------------------------------
212 elseif ( (grid_points(1) .eq. 162) .and.
213 > (grid_points(2) .eq. 162) .and.
214 > (grid_points(3) .eq. 162) .and.
215 > (no_time_steps . eq. 200) ) then
220 c---------------------------------------------------------------------
221 c Reference values of RMS-norms of residual.
222 c---------------------------------------------------------------------
223 xcrref(1) = 0.62398116551764615d+04
224 xcrref(2) = 0.50793239190423964d+03
225 xcrref(3) = 0.15423530093013596d+04
226 xcrref(4) = 0.13302387929291190d+04
227 xcrref(5) = 0.11604087428436455d+05
229 c---------------------------------------------------------------------
230 c Reference values of RMS-norms of solution error.
231 c---------------------------------------------------------------------
233 if (iotype .eq. 0) then
234 xceref(1) = 0.16462008369091265d+03
235 xceref(2) = 0.11497107903824313d+02
236 xceref(3) = 0.41207446207461508d+02
237 xceref(4) = 0.37087651059694167d+02
238 xceref(5) = 0.36211053051841265d+03
240 xceref(1) = 0.2597156483475d+03
241 xceref(2) = 0.1985384289495d+02
242 xceref(3) = 0.6517950485788d+02
243 xceref(4) = 0.5757235541520d+02
244 xceref(5) = 0.5215668188726d+03
248 c---------------------------------------------------------------------
249 c reference data for 408x408x408 grids after 250 time steps,
251 c---------------------------------------------------------------------
252 elseif ( (grid_points(1) .eq. 408) .and.
253 > (grid_points(2) .eq. 408) .and.
254 > (grid_points(3) .eq. 408) .and.
255 > (no_time_steps . eq. 250) ) then
260 c---------------------------------------------------------------------
261 c Reference values of RMS-norms of residual.
262 c---------------------------------------------------------------------
263 xcrref(1) = 0.2533188551738d+05
264 xcrref(2) = 0.2346393716980d+04
265 xcrref(3) = 0.6294554366904d+04
266 xcrref(4) = 0.5352565376030d+04
267 xcrref(5) = 0.3905864038618d+05
269 c---------------------------------------------------------------------
270 c Reference values of RMS-norms of solution error.
271 c---------------------------------------------------------------------
273 if (iotype .eq. 0) then
274 xceref(1) = 0.3100009377557d+03
275 xceref(2) = 0.2424086324913d+02
276 xceref(3) = 0.7782212022645d+02
277 xceref(4) = 0.6835623860116d+02
278 xceref(5) = 0.6065737200368d+03
280 xceref(1) = 0.3813781566713d+03
281 xceref(2) = 0.3160872966198d+02
282 xceref(3) = 0.9593576357290d+02
283 xceref(4) = 0.8363391989815d+02
284 xceref(5) = 0.7063466087423d+03
288 c---------------------------------------------------------------------
289 c reference data for 1020x1020x1020 grids after 250 time steps,
291 c---------------------------------------------------------------------
292 elseif ( (grid_points(1) .eq. 1020) .and.
293 > (grid_points(2) .eq. 1020) .and.
294 > (grid_points(3) .eq. 1020) .and.
295 > (no_time_steps . eq. 250) ) then
300 c---------------------------------------------------------------------
301 c Reference values of RMS-norms of residual.
302 c---------------------------------------------------------------------
303 xcrref(1) = 0.9795372484517d+05
304 xcrref(2) = 0.9739814511521d+04
305 xcrref(3) = 0.2467606342965d+05
306 xcrref(4) = 0.2092419572860d+05
307 xcrref(5) = 0.1392138856939d+06
309 c---------------------------------------------------------------------
310 c Reference values of RMS-norms of solution error.
311 c---------------------------------------------------------------------
313 if (iotype .eq. 0) then
314 xceref(1) = 0.4327562208414d+03
315 xceref(2) = 0.3699051964887d+02
316 xceref(3) = 0.1089845040954d+03
317 xceref(4) = 0.9462517622043d+02
318 xceref(5) = 0.7765512765309d+03
321 xceref(1) = 0.4729898413058d+03
322 xceref(2) = 0.4145899331704d+02
323 xceref(3) = 0.1192850917138d+03
324 xceref(4) = 0.1032746026932d+03
325 xceref(5) = 0.8270322177634d+03
327 c xceref(1) = 0.4718135916251d+03
328 c xceref(2) = 0.4132620259096d+02
329 c xceref(3) = 0.1189831133503d+03
330 c xceref(4) = 0.1030212798803d+03
331 c xceref(5) = 0.8255924078458d+03
338 c---------------------------------------------------------------------
339 c verification test for residuals if gridsize is one of
340 c the defined grid sizes above (class .ne. 'U')
341 c---------------------------------------------------------------------
343 c---------------------------------------------------------------------
344 c Compute the difference of solution values and the known reference
346 c---------------------------------------------------------------------
349 xcrdif(m) = dabs((xcr(m)-xcrref(m))/xcrref(m))
350 xcedif(m) = dabs((xce(m)-xceref(m))/xceref(m))
354 c---------------------------------------------------------------------
355 c Output the comparison of computed results to known cases.
356 c---------------------------------------------------------------------
358 if (class .ne. 'U') then
360 1990 format(' Verification being performed for class ', a)
361 write (*,2000) epsilon
362 2000 format(' accuracy setting for epsilon = ', E20.13)
363 verified = (dabs(dt-dtref) .le. epsilon)
364 if (.not.verified) then
368 1000 format(' DT does not match the reference value of ',
373 1995 format(' Unknown class')
377 if (class .ne. 'U') then
383 2001 format(' Comparison of RMS-norms of residual')
384 2005 format(' RMS-norms of residual')
386 if (class .eq. 'U') then
387 write(*, 2015) m, xcr(m)
388 else if (xcrdif(m) .le. epsilon) then
389 write (*,2011) m,xcr(m),xcrref(m),xcrdif(m)
392 write (*,2010) m,xcr(m),xcrref(m),xcrdif(m)
396 if (class .ne. 'U') then
401 2002 format(' Comparison of RMS-norms of solution error')
402 2006 format(' RMS-norms of solution error')
405 if (class .eq. 'U') then
406 write(*, 2015) m, xce(m)
407 else if (xcedif(m) .le. epsilon) then
408 write (*,2011) m,xce(m),xceref(m),xcedif(m)
411 write (*,2010) m,xce(m),xceref(m),xcedif(m)
415 2010 format(' FAILURE: ', i2, E20.13, E20.13, E20.13)
416 2011 format(' ', i2, E20.13, E20.13, E20.13)
417 2015 format(' ', i2, E20.13)
419 if (class .eq. 'U') then
422 2022 format(' No reference values provided')
423 2023 format(' No verification performed')
424 else if (verified) then
426 2020 format(' Verification Successful')
429 2021 format(' Verification failed')