Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
New actions for the time independent trace replay framework:
[simgrid.git] / examples / smpi / NAS / SP / 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
28
29 c---------------------------------------------------------------------
30 c   compute the error norm and the residual norm, and exit if not printing
31 c---------------------------------------------------------------------
32         call error_norm(xce)
33         call copy_faces
34
35         call rhs_norm(xcr)
36
37         do m = 1, 5
38            xcr(m) = xcr(m) / dt
39         enddo
40
41         if (node .ne. 0) return
42
43         class = 'U'
44         verified = .true.
45
46         do m = 1,5
47            xcrref(m) = 1.0
48            xceref(m) = 1.0
49         end do
50
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
58
59            class = 'S'
60            dtref = 1.5d-2
61
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
70
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
79
80
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
88
89            class = 'W'
90            dtref = 1.5d-3
91
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
100
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
109
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
117
118            class = 'A'
119            dtref = 1.5d-3
120
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
129
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
138
139 c---------------------------------------------------------------------
140 c    reference data for 102X102X102 grids after 400 time steps,
141 c    with DT = 1.0d-03
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
147
148            class = 'B'
149            dtref = 1.0d-3
150
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
159
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
168
169 c---------------------------------------------------------------------
170 c    reference data for 162X162X162 grids after 400 time steps,
171 c    with DT = 0.67d-03
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
177
178            class = 'C'
179            dtref = 0.67d-3
180
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
189
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
198
199 c---------------------------------------------------------------------
200 c    reference data for 408X408X408 grids after 500 time steps,
201 c    with DT = 0.3d-03
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
207
208            class = 'D'
209            dtref = 0.30d-3
210
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
219
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
228
229 c---------------------------------------------------------------------
230 c    reference data for 1020X1020X1020 grids after 500 time steps,
231 c    with DT = 0.1d-03
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
237
238            class = 'E'
239            dtref = 0.10d-3
240
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
249
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
258
259         else
260            verified = .false.
261         endif
262
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---------------------------------------------------------------------
267
268 c---------------------------------------------------------------------
269 c    Compute the difference of solution values and the known reference values.
270 c---------------------------------------------------------------------
271         do m = 1, 5
272            
273            xcrdif(m) = dabs((xcr(m)-xcrref(m))/xcrref(m)) 
274            xcedif(m) = dabs((xce(m)-xceref(m))/xceref(m))
275            
276         enddo
277
278 c---------------------------------------------------------------------
279 c    Output the comparison of computed results to known cases.
280 c---------------------------------------------------------------------
281
282         if (class .ne. 'U') then
283            write(*, 1990) class
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  
289               class = 'U'
290               write (*,1000) dtref
291  1000         format(' DT does not match the reference value of ', 
292      >                 E15.8)
293            endif
294         else 
295            write(*, 1995)
296  1995      format(' Unknown class')
297         endif
298
299
300         if (class .ne. 'U') then
301            write (*,2001) 
302         else
303            write (*, 2005)
304         endif
305
306  2001   format(' Comparison of RMS-norms of residual')
307  2005   format(' RMS-norms of residual')
308         do m = 1, 5
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)
313            else 
314               verified = .false.
315               write (*,2010) m,xcr(m),xcrref(m),xcrdif(m)
316            endif
317         enddo
318
319         if (class .ne. 'U') then
320            write (*,2002)
321         else
322            write (*,2006)
323         endif
324  2002   format(' Comparison of RMS-norms of solution error')
325  2006   format(' RMS-norms of solution error')
326         
327         do m = 1, 5
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)
332            else
333               verified = .false.
334               write (*,2010) m,xce(m),xceref(m),xcedif(m)
335            endif
336         enddo
337         
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)
341         
342         if (class .eq. 'U') then
343            write(*, 2022)
344            write(*, 2023)
345  2022      format(' No reference values provided')
346  2023      format(' No verification performed')
347         else if (verified) then
348            write(*, 2020)
349  2020      format(' Verification Successful')
350         else
351            write(*, 2021)
352  2021      format(' Verification failed')
353         endif
354
355         return
356
357
358         end