/[MITgcm]/MITgcm/verification/testscript
ViewVC logotype

Contents of /MITgcm/verification/testscript

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.25 - (show annotations) (download)
Thu Oct 9 04:19:20 2003 UTC (20 years, 5 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint51k_post, checkpoint51l_post, checkpoint51o_pre, checkpoint51n_pre, branch-netcdf, checkpoint51r_post, checkpoint52b_pre, checkpoint51i_post, checkpoint51l_pre, checkpoint51o_post, checkpoint51q_post, checkpoint52, checkpoint52a_post, checkpoint52b_post, checkpoint52c_post, ecco_c52_e35, checkpoint52a_pre, checkpoint51m_post, checkpoint51t_post, checkpoint51p_post, checkpoint51n_post, checkpoint51u_post, checkpoint51s_post
Branch point for: branch-nonh, tg2-branch, checkpoint51n_branch
Changes since 1.24: +10 -7 lines
 o first check-in for the "branch-genmake2" merge
 o verification suite as run on shelley (gcc 3.2.2):

Wed Oct  8 23:42:29 EDT 2003
                T           S           U           V
G D M    c        m  s        m  s        m  s        m  s
E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .
N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d
2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .

OPTFILE=NONE

Y Y Y Y 13 16 16 16  0 16 16 16 16 16 16 16 16 13 12  0  0 pass  adjustment.128x64x1
Y Y Y Y 16 16 16 16  0 16 16 16 16 16 16  0  0 16 16  0  0 pass  adjustment.cs-32x32x1
Y Y Y Y 16 16 16 16  0 16 16 16 16 16 16 22  0 16 16 22  0 pass  adjust_nlfs.cs-32x32x1
Y Y Y Y -- 13 13 16 16 13 13 13 13 16 16 16 16 16 16 16 16 N/O   advect_cs
Y Y Y Y -- 22 16 16 16 16 16 16 13 16 16 16 16 16 16 16 16 N/O   advect_xy
Y Y Y Y -- 13 16 13 16 16 16 16 16 16 16 22 16 16 16 16 16 N/O   advect_xz
Y Y Y Y 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 pass  aim.5l_cs
Y Y Y Y 14 16 16 16 16 16 16 16 16 13 16 16 16 16 16 13 16 pass  aim.5l_Equatorial_Channel
Y Y Y Y 16 16 16 16 16 16 16 16 16 16 16 13 16 16 13 13 16 pass  aim.5l_LatLon
Y Y Y Y 13 16 16 16 16 16 16 16 16 16 13 12 13 13 16 13 16 pass  exp0
Y Y Y Y 14 16 16 16 16 16 16 16 22 16 16 16 13 16 16 22 16 pass  exp1
Y Y Y Y 13 13 16 13 16 16 16 16 16 13 13 16 16 13 13 13 13 pass  exp2
Y Y Y Y 16 16 16 16 16 16 16 16 22 16 16 16 16 16 16 16 16 pass  exp4
Y Y Y Y 16 16 16 16 16 16 16 16 16 16 16 22 16 16 16 22 16 pass  exp5
Y Y Y Y 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 pass  front_relax
Y Y Y Y 14 16 16 13 13 16 16 13 13 16 13 13 16 12 13 13 16 pass  global_ocean.90x40x15
Y Y Y Y 10 16 16 13 13 16 13 16 16 13 13 13 13 16 16 13 16 FAIL  global_ocean.cs32x15
Y Y Y Y  6 11 12 13 13 12 13 16 13  9  9  9  9 10  9  9 11 FAIL  global_ocean_pressure
Y Y Y Y 14 16 16 13 16 16 16 13 13 13 13 13 16 12 16 13 16 pass  global_with_exf
Y Y Y Y 14 16 16 16 16 16 16 16 16 11 13 22 13 16 16  9 16 pass  hs94.128x64x5
Y Y Y Y 13 16 16 16 16 16 16 16 16 11 16 16 16 13 16 22 13 pass  hs94.1x64x5
Y Y Y Y 14 16 16 16 16 16 16 16 16 13 16 13 13 16 16 22 13 pass  hs94.cs-32x32x5
Y Y Y Y 10 10 16 13 13 16 16 16 22 16 13 13 13 13 13 22 13 FAIL  ideal_2D_oce
Y Y Y Y  8 16 16 16 16 16 16 16 16 13 13  8 16 16 16 16 16 FAIL  internal_wave
Y Y Y Y 14 16 16 16 16 16 16 16 16 13 13 22 13 13 13 22 16 pass  inverted_barometer
Y Y Y Y 12 16 16 16 16 16 16 16 16 16 13 12 13 13 13 13 13 FAIL  lab_sea
Y Y Y Y 11 16 16 16 16 16 16 16 13 13 13 12 13 16 13 12 13 FAIL  natl_box
Y Y Y Y 16 16 16 16 16 16 16 16 22 16 16 16 16 16 16 16 16 pass  plume_on_slope
Y Y Y Y 13 16 16 16 16 13 16 16 16 16 16 16 16 13 16 16 16 pass  solid-body.cs-32x32x1

1 #!/bin/sh
2
3 compare_lines()
4 {
5 # use codelet to compare lines
6 if [ $verbose -gt 1 ]; then
7 cat tmp3.txt 1>&2
8 fi
9 return `./a.out < tmp3.txt`
10 }
11
12 testoutput_for_prop()
13 {
14 # testoutput_for_prop dir s1 label subdir
15 #
16 # compares files in $dir/$subdir/output.txt and $dir/results/output.txt
17 # using search strings s1 and text label
18
19 if [ $debug -gt 0 ]; then
20 echo testoutput_for_prop: grep "$2" $1/$4/output.txt 1>&2
21 fi
22 if [ -r $1/$4/output.txt ]; then
23 grep "$2" $1/$4/output.txt | sed 's/.*=//' | nl > tmp1.txt
24 lncnt=`wc -l tmp1.txt | awk '{print $1}' `
25 if [ $lncnt -lt 3 ]; then
26 if [ $verbose -gt 0 ]; then
27 echo Not enough lines of output when searching for "$2" 1>&2
28 fi
29 return 99
30 fi
31 else
32 echo testoutput_for_prop: output.txt from model run was not readable 1>&2
33 return 99
34 fi
35 if [ $debug -gt 0 ]; then
36 echo testoutput_for_prop: grep "$2" $1/results/output.txt 1>&2
37 fi
38 grep "$2" $1/results/output.txt | sed 's/.*=//' | nl > tmp2.txt
39 lncnt=`wc -l tmp2.txt | awk '{print $1}' `
40 if [ $lncnt -lt 3 ]; then
41 if [ $verbose -gt 0 ]; then
42 echo Not enough lines of output when searching for "$2" 1>&2
43 fi
44 return 99
45 fi
46 if [ $debug -gt 0 ]; then
47 echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2
48 fi
49 join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt
50 if [ $debug -gt 0 ]; then
51 echo testoutput_for_prop: compare_lines 1>&2
52 fi
53 compare_lines
54 digits_of_similarity=$?
55 if [ $digits_of_similarity -eq 99 ]; then
56 if [ $verbose -gt 0 ]; then
57 echo testoutput_for_prop: No comparison was available for \"$2\" 1>&2
58 fi
59 digits_of_similarity=99
60 else
61 if [ $verbose -gt 0 ]; then
62 echo There were $digits_of_similarity decimal places of similarity for \"$2\" 1>&2
63 fi
64 fi
65 rm tmp1.txt tmp2.txt tmp3.txt
66
67 return $digits_of_similarity
68 }
69
70 dashnum()
71 {
72 # dashnum n1 n2 n3 ...
73 #
74 # print numbers using %3i format or "--" if number = 99
75 for num in $@
76 do
77 if [ $num = 99 ]; then
78 printf ' --'
79 else
80 printf '%3i' $num
81 fi
82 done
83 }
84
85 testoutput()
86 {
87 # testoutput diretory subdir
88 #
89 # test output in "directory"
90
91 if [ $debug -gt 0 ]; then
92 echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2
93 fi
94 testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2; cg2dres=$?
95 if [ $debug -gt 0 ]; then
96 echo testoutput: cg2dres=$cg2dres 1>&2
97 fi
98
99 if [ $longtest -gt 0 ]; then
100 testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2; tmin=$?
101 testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2; tmax=$?
102 testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2; tmean=$?
103 testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2; tsd=$?
104 testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2; smin=$?
105 testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2; smax=$?
106 testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2; smean=$?
107 testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2; ssd=$?
108 testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2; umin=$?
109 testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2; umax=$?
110 testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2; umean=$?
111 testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2; usd=$?
112 testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2; vmin=$?
113 testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2; vmax=$?
114 testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2; vmean=$?
115 testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2; vsd=$?
116 else
117 testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2; tmin=$?
118 testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2; tmax=$?
119 testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2; smin=$?
120 testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2; smax=$?
121 testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2; umin=$?
122 testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2; umax=$?
123 testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2; vmin=$?
124 testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2; vmax=$?
125 fi
126
127 dashnum $cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd \
128 $umin $umax $umean $usd $vmin $vmax $vmean $vsd
129 #printf '%3i' $cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd \
130 # $umin $umax $umean $usd $vmin $vmax $vmean $vsd
131 }
132
133 genmakemodel()
134 {
135 # genmakemodel directory
136 ( cd $1;
137 if [ $quick -eq 0 -o ! -r Makefile ]; then
138 printf 'genmake ... ' 1>&2
139 if [ $ieee -eq 0 ]; then
140 ../../../tools/$genmake -mods=../code > make.log 2>&1
141 else
142 ../../../tools/$genmake -ieee -mods=../code > make.log 2>&1
143 fi
144 if [ $? -ne 0 ]; then
145 tail make.log
146 echo genmakemodel: $genmake failed 1>&2
147 return 1
148 else
149 echo succesful 1>&2
150 fi
151 fi
152 )
153 }
154
155 makecleancompile()
156 {
157 # makecleancompile directory
158 ( cd $1;
159 if [ $force -gt 0 ]; then
160 rm -f output.txt
161 printf 'make clean ... ' 2>&1
162 make CLEAN >> make.log 2>&1
163 if [ $? -ne 0 ]; then
164 tail make.log
165 echo makecleancompile: make clean failed 1>&2
166 return 1
167 else
168 echo succesful 1>&2
169 fi
170 fi
171 )
172 }
173
174 makecleanupafter()
175 {
176 # makeupafter directory
177 ( cd $1;
178 if [ $clean -gt 0 ]; then
179 rm -f output.txt
180 printf 'make clean ... ' 2>&1
181 make CLEAN >> make.log 2>&1
182 if [ $? -ne 0 ]; then
183 tail make.log
184 echo makeupafter: make clean failed 1>&2
185 return 1
186 else
187 echo succesful 1>&2
188 fi
189 fi
190 )
191 }
192
193 makedependmodel()
194 {
195 # makedependmodel directory
196 ( cd $1;
197 if [ $quick -eq 0 -o ! -r Makefile ]; then
198 printf 'make depend ... ' 1>&2
199 make cleanlinks >> make.log 2>&1
200 make depend >> make.log 2>&1
201 if [ $? -ne 0 ]; then
202 tail make.log
203 echo makemodel: make depend failed 1>&2
204 return 1
205 else
206 echo succesful 1>&2
207 fi
208 fi
209 )
210 }
211
212 makemodel()
213 {
214 # makemodel directory
215 ( cd $1;
216 if [ -r Makefile ]; then
217 printf 'make ... ' 1>&2
218 make >> make.log 2>&1
219 if [ $? -ne 0 ]; then
220 tail make.log
221 echo failed 1>&2
222 return 1
223 else
224 echo succesful 1>&2
225 fi
226 fi
227 )
228 }
229
230 linkdata()
231 {
232 # linkdata flag
233 # symbolically link data files to run directory
234 if [ $1 -ne 0 ]; then
235 # if [ ! -r $2 ]; then
236 # mkdir $2
237 # fi
238 ( cd $2; ln -sf ../input/* .)
239 fi
240 }
241
242 runmodel()
243 {
244 # runmodel directory exe
245 #
246 # runs the model "exe" in "directory" (exe is relative to directory)
247
248 ( cd $1
249 if [ -x $2 ]; then
250 if [ $quick -eq 0 ]; then
251 rm -f output.txt
252 fi
253 printf 'runmodel: ' 1>&2
254 make output.txt && return 0
255 return 1
256 fi
257 )
258 }
259
260 createcodelet()
261 {
262 # create codelet for comparing model output
263 cat > tmp_cmpnum.f <<EOFA
264 program cmpnum
265 implicit none
266 real*8 a,b,diff
267 integer linnum,best
268 best=-16
269 99 read(*,*,end=70,err=60) linnum,a,b
270 diff=0.5*(abs(a)+abs(b))
271 c print *,a,b,diff,abs(a-b)/diff
272 if (diff.gt.1.e-12) then
273 diff=abs(a-b)/diff
274 if (diff.gt.0.) then
275 c print *,int(log10(diff)),diff
276 linnum=int(log10(diff))
277 best=max(best,linnum)
278 endif
279 else
280 if (best.eq.-16.and.diff.ne.0.) best=-22
281 endif
282 goto 99
283 60 stop 'cmpnum: An error occured reading a,b'
284 70 print *,-best
285 end
286 EOFA
287 f77 tmp_cmpnum.f
288 if [ -x ./a.out ]; then
289 return 0
290 else
291 echo createcodelet: failed to compile codelet 1>&2
292 exit 1
293 fi
294 }
295
296 formatresults()
297 {
298 # formatresults expt genmake depend make run results*
299
300 nm=$1
301 printf '%s %s %s %s' $2 $3 $4 $5
302 shift; shift; shift; shift; shift;
303 printf '%3s' $@
304
305 if [ $1 = '--' ]; then
306 printf ' N/O '
307 else
308 if [ $1 -gt 12 ]; then
309 printf ' pass'
310 else
311 printf ' FAIL'
312 fi
313 fi
314 printf ' %s' $nm
315 printf '\n'
316
317 }
318
319 show_help()
320 {
321 cat - << EOF
322 $0 [-help] [-quick] [-verbose] dir1 [dir2] [...]
323 -help Show this help message
324 -quick Skip "genmake" and "make depend" if the Makefile exists
325 -quiet Reduce the amount of output
326 -verbose Produce copious amounts of output
327 -debug Produce even more output which will mean nothing to most
328 -force Do "make CLEAN" before compiling. This forces a complete rebuild.
329 -clean Do "make CLEAN" after compiling and testing.
330 -shorttest Don't compare numeric output for mean and s.d. of variables.
331 -noieee By default, $0 uses the -ieee option for genmake. This turns it off.
332 -cleanup Aggresively removes all model output, executables and object files
333 and then exits. Use with care.
334 -2 Use genmake2 rather than genmake
335
336 Normal usage:
337 $0 * Configure, compile, run and analyze in all experiment directories
338 EOF
339 }
340
341 scandirs()
342 {
343 if [ $# -eq 0 ]; then
344 for arg in *
345 do
346 test -d $arg/input && echo $arg
347 done
348 else
349 echo $*
350 fi
351 }
352
353 clean_up()
354 {
355 # Find all executables, object files, CPP'd source and model output
356 # and DELETE it.
357 for opt in '-name "mitgcmuv*"' '-name "*.o"' '-name "*.f"' '-name "*.c"' '-name "fort.*"' '-name "make.log"' '-path *results -prune -o -name "*.meta"' '-path *results -prune -o -name "*.data"' '-type l'
358 do
359 echo Cleaning: find . $opt -exec rm {} \;
360 find . $opt -exec rm {} \;
361 done
362 }
363
364 ###############################################################################
365 ###############################################################################
366 ###############################################################################
367
368 # Main function
369
370 # Default properties
371 debug=0
372 verbose=1
373 quick=0
374 force=0
375 clean=0
376 ieee=1
377 longtest=1
378 expts=''
379 genmake=genmake
380
381 # Process arguments
382 for arg in $@
383 do
384 case $arg in
385 -cleanup) clean_up; exit 0;;
386 -quick) quick=1;;
387 -verbose) verbose=2;;
388 -debug) debug=1;;
389 -force) force=1;;
390 -clean) clean=1;;
391 -2) genmake=genmake2;;
392 -noieee) ieee=0;;
393 -shorttest) longtest=0;;
394 -quiet) verbose=0;;
395 -help) show_help; exit 0;;
396 -*) echo Unrecognized option:$arg; exit 9;;
397 *) test -d $arg && expts=`echo $expts $arg`;;
398 esac
399 done
400
401 if [ $force -gt 0 -a $quick -gt 0 ]; then
402 echo You specified -quick and -force together which conflict.
403 echo Please specify either -quick or -force or neither but not both.
404 exit 1
405 fi
406
407 #if [ ${#expts} -eq 0 ]; then
408 # echo Scanning all directories
409 # for arg in *
410 # do
411 # test -d $arg && expts=`echo $expts $arg`
412 # done
413 #fi
414 expts=`scandirs $expts`
415
416 createcodelet
417
418 date > summary.txt
419 if [ $longtest -gt 0 ]; then
420 cat << EOF >> summary.txt
421 T S U V
422 C D M c m s m s m s m s
423 n p a R g m m e . m m e . m m e . m m e .
424 f n k u 2 i a a d i a a d i a a d i a a d
425 g d e n d n x n . n x n . n x n . n x n .
426
427 EOF
428 else
429 cat << EOF >> summary.txt
430 T S U V
431 C D M c
432 n p a R g m m m m m m m m
433 f n k u 2 i a i a i a i a
434 g d e n d n x n x n x n x
435
436 EOF
437 fi
438
439 # Now configue, make, run and test in each directory
440 for dir in $expts
441 do
442 if [ -r $dir/results/output.txt ]; then
443 echo -------------------------------------------------------------------------------
444 echo
445 echo Experiment: $dir
446 echo
447 unset genmakepass makedepend make run
448 if [ $longtest -gt 0 ]; then
449 results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
450 else
451 results='-- -- -- -- -- -- -- -- --'
452 fi
453 if [ -r $dir/build ]; then
454 seperatebuilddir=1
455 builddir=build
456 rundir=build
457 (cd $dir/input; rm -f *.{o,f,c,F} work* output.txt Make* make.log; )
458 (cd $dir/build; ln -sf ../input/* .)
459 else
460 seperatebuilddir=0
461 builddir=input
462 rundir=input
463 fi
464 genmakemodel $dir/$builddir && genmakepass=Y \
465 && makecleancompile $dir/$builddir \
466 && makedependmodel $dir/$builddir && makedepend=Y \
467 && makemodel $dir/$builddir && make=Y \
468 && linkdata $seperatebuilddir $dir/$rundir \
469 && runmodel $dir/$builddir mitgcmuv && run=Y \
470 && results=`testoutput $dir $rundir` \
471 && makecleanupafter $dir/$builddir
472 echo
473 formatresults $dir ${genmakepass:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results
474 echo
475 formatresults $dir ${genmakepass:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results >> summary.txt
476 fi
477 done
478
479 rm tmp_cmpnum.f a.out
480
481 echo -------------------------------------------------------------------------------
482 echo
483 date >> summary.txt
484 cat summary.txt

  ViewVC Help
Powered by ViewVC 1.1.22