Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Added our tweaked version of NAS benchmarks.
[simgrid.git] / examples / smpi / NAS / BT / verify.f
1
2 c---------------------------------------------------------------------
3 c---------------------------------------------------------------------
4
5         subroutine verify(no_time_steps, class, verified)
6
7 c---------------------------------------------------------------------
8 c---------------------------------------------------------------------
9
10 c---------------------------------------------------------------------
11 c  verification routine                         
12 c---------------------------------------------------------------------
13
14         include 'header.h'
15         include 'mpinpb.h'
16
17         double precision xcrref(5),xceref(5),xcrdif(5),xcedif(5), 
18      >                   epsilon, xce(5), xcr(5), dtref
19         integer m, no_time_steps
20         character class
21         logical verified
22
23 c---------------------------------------------------------------------
24 c   tolerance level
25 c---------------------------------------------------------------------
26         epsilon = 1.0d-08
27         verified = .true.
28
29 c---------------------------------------------------------------------
30 c   compute the error norm and the residual norm, and exit if not printing
31 c---------------------------------------------------------------------
32
33         if (iotype .ne. 0) then
34            call accumulate_norms(xce)
35         else
36            call error_norm(xce)
37         endif
38
39         call copy_faces
40
41         call rhs_norm(xcr)
42
43         do m = 1, 5
44            xcr(m) = xcr(m) / dt
45         enddo
46
47         if (node .ne. 0) return
48
49         class = 'U'
50
51         do m = 1,5
52            xcrref(m) = 1.0
53            xceref(m) = 1.0
54         end do
55
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
63
64            class = 'S'
65            dtref = 1.0d-2
66
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
75
76 c---------------------------------------------------------------------
77 c  Reference values of RMS-norms of solution error.
78 c---------------------------------------------------------------------
79
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
86          else
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
92          endif
93
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
101
102            class = 'W'
103            dtref = 0.8d-3
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
112
113 c---------------------------------------------------------------------
114 c  Reference values of RMS-norms of solution error.
115 c---------------------------------------------------------------------
116
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
123          else
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
129          endif
130
131
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
139
140            class = 'A'
141            dtref = 0.8d-3
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
150
151 c---------------------------------------------------------------------
152 c  Reference values of RMS-norms of solution error.
153 c---------------------------------------------------------------------
154
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
161          else
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
167          endif
168
169 c---------------------------------------------------------------------
170 c    reference data for 102X102X102 grids after 200 time steps,
171 c    with DT = 3.0d-04
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
177
178            class = 'B'
179            dtref = 3.0d-4
180
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
189
190 c---------------------------------------------------------------------
191 c  Reference values of RMS-norms of solution error.
192 c---------------------------------------------------------------------
193
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
200          else
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
206          endif
207
208 c---------------------------------------------------------------------
209 c    reference data for 162X162X162 grids after 200 time steps,
210 c    with DT = 1.0d-04
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
216
217            class = 'C'
218            dtref = 1.0d-4
219
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
228
229 c---------------------------------------------------------------------
230 c  Reference values of RMS-norms of solution error.
231 c---------------------------------------------------------------------
232
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
239          else
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
245          endif 
246
247
248 c---------------------------------------------------------------------
249 c    reference data for 408x408x408 grids after 250 time steps,
250 c    with DT = 0.2d-04
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
256
257            class = 'D'
258            dtref = 0.2d-4
259
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
268
269 c---------------------------------------------------------------------
270 c  Reference values of RMS-norms of solution error.
271 c---------------------------------------------------------------------
272
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
279          else
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
285          endif
286
287
288 c---------------------------------------------------------------------
289 c    reference data for 1020x1020x1020 grids after 250 time steps,
290 c    with DT = 0.4d-05
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
296
297            class = 'E'
298            dtref = 0.4d-5
299
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
308
309 c---------------------------------------------------------------------
310 c  Reference values of RMS-norms of solution error.
311 c---------------------------------------------------------------------
312
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
319          else
320 c  wr_interval = 5
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
326 c  wr_interval = 10
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
332         endif
333
334         else
335            verified = .false.
336         endif
337
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---------------------------------------------------------------------
342
343 c---------------------------------------------------------------------
344 c    Compute the difference of solution values and the known reference 
345 c    values.
346 c---------------------------------------------------------------------
347         do m = 1, 5
348            
349            xcrdif(m) = dabs((xcr(m)-xcrref(m))/xcrref(m)) 
350            xcedif(m) = dabs((xce(m)-xceref(m))/xceref(m))
351            
352         enddo
353
354 c---------------------------------------------------------------------
355 c    Output the comparison of computed results to known cases.
356 c---------------------------------------------------------------------
357
358         if (class .ne. 'U') then
359            write(*, 1990) class
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  
365               verified = .false.
366               class = 'U'
367               write (*,1000) dtref
368  1000         format(' DT does not match the reference value of ', 
369      >                 E15.8)
370            endif
371         else 
372            write(*, 1995)
373  1995      format(' Unknown class')
374         endif
375
376
377         if (class .ne. 'U') then
378            write (*,2001) 
379         else
380            write (*, 2005)
381         endif
382
383  2001   format(' Comparison of RMS-norms of residual')
384  2005   format(' RMS-norms of residual')
385         do m = 1, 5
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)
390            else 
391               verified = .false.
392               write (*,2010) m,xcr(m),xcrref(m),xcrdif(m)
393            endif
394         enddo
395
396         if (class .ne. 'U') then
397            write (*,2002)
398         else
399            write (*,2006)
400         endif
401  2002   format(' Comparison of RMS-norms of solution error')
402  2006   format(' RMS-norms of solution error')
403         
404         do m = 1, 5
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)
409            else
410               verified = .false.
411               write (*,2010) m,xce(m),xceref(m),xcedif(m)
412            endif
413         enddo
414         
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)
418         
419         if (class .eq. 'U') then
420            write(*, 2022)
421            write(*, 2023)
422  2022      format(' No reference values provided')
423  2023      format(' No verification performed')
424         else if (verified) then
425            write(*, 2020)
426  2020      format(' Verification Successful')
427         else
428            write(*, 2021)
429  2021      format(' Verification failed')
430         endif
431
432         return
433
434
435         end