/[MITgcm]/MITgcm/verification/testreport
ViewVC logotype

Annotation of /MITgcm/verification/testreport

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


Revision 1.24 - (hide annotations) (download)
Sun Nov 30 01:28:51 2003 UTC (20 years, 4 months ago) by edhill
Branch: MAIN
CVS Tags: branch-netcdf
Changes since 1.23: +131 -44 lines
 o added an "-adm" option that runs an adjoint test instead of the normal
   forward tests
   - confirmed to work with global_ocean.90x40x15 in checkpoint52a_post
     since the current HEAD seems to be broken for the adjoint
   - used staf for the above test
   - produces same results for the forward tests

1 edhill 1.19 #! /usr/bin/env bash
2 edhill 1.1 #
3 edhill 1.24 # $Header: /u/u3/gcmpack/MITgcm/verification/testreport,v 1.23 2003/11/29 01:45:25 edhill Exp $
4 edhill 1.12 # $Name: $
5 edhill 1.1 #
6    
7     usage()
8     {
9     echo
10     echo "Usage: $0 [OPTIONS]"
11     echo
12     echo "where possible OPTIONS are:"
13     echo " (-help|-h) print usage"
14 edhill 1.7 echo " (-mpi) use MPI input files"
15 edhill 1.10 echo " (-ieee|-noieee) if possible, use IEEE compiler flags"
16 edhill 1.20 echo " (DEF=\"noieee\")"
17 edhill 1.6 echo " (-optfile=|-of=)STRING list of optfiles to use"
18 edhill 1.20 echo " (-a|-addr) STRING list of email recipients"
19 edhill 1.6 echo " (DEF=\"edhill@mitgcm.org\")"
20 edhill 1.20 echo " (-t|-tdir) STRING list of test dirs to use"
21 edhill 1.6 echo " (DEF=\"\" which builds all)"
22 edhill 1.20 echo " (-b|-bash) STRING preferred location of a \"bash\" or"
23     echo " Bourne-compatible \"sh\" shell"
24     echo " (DEF=\"\" for \"bash\")"
25 edhill 1.24 echo " (-adm|-ad) perform an adjoint run"
26 edhill 1.20 echo " (-command) STRING command to run"
27 edhill 1.6 echo " (DEF=\"make output.txt\")"
28 edhill 1.20 echo " (-m|-make) STRING command to use for \"make\""
29 edhill 1.8 echo " (DEF=\"make\")"
30 edhill 1.10 echo " (-clean) *ONLY* run \"make CLEAN\""
31     echo " (-quick|-q) same as \"-nogenmake -noclean -nodepend\""
32     echo " (-nogenmake|-ng) skip the genmake stage"
33     echo " (-noclean|-nc) skip the \"make clean\" stage"
34     echo " (-nodepend|-nd) skip the \"make depend\" stage"
35 edhill 1.6 echo
36     echo "and where STRING follows a whitespace-delimited format"
37     echo "such as:"
38     echo " -t 'exp0 exp2 exp3' "
39     echo " -addr='abc@123.com testing@home.org'"
40 edhill 1.1 echo
41     exit 1
42     }
43    
44     # build the mpack utility
45     build_mpack()
46     {
47     echo -n "building the mpack utility... "
48     if test ! -x "$MPACKDIR/mpack" ; then
49     if test ! -d $MPACKDIR ; then
50 edhill 1.20 echo
51 edhill 1.1 echo "Error: can't find \"$MPACKDIR\""
52     echo " are you sure this program is being run in the correct "
53     echo " (that is, \"MITGCM_ROOT\verification\") directory?"
54 edhill 1.20 echo
55     HAVE_MPACK=f
56 edhill 1.1 fi
57     echo -n "building mpack... "
58 edhill 1.8 ( cd $MPACKDIR && ./configure && $MAKE ) > build_mpack.out 2>&1
59 edhill 1.1 RETVAL=$?
60     if test "x$RETVAL" != x0 ; then
61     echo
62     echo "Error building the mpack tools at: $MPACK_DIR"
63 edhill 1.20 echo
64     HAVE_MPACK=f
65     else
66     HAVE_MPACK=t
67 edhill 1.1 fi
68 edhill 1.20 else
69     HAVE_MPACK=t
70 edhill 1.1 fi
71     echo "OK"
72     }
73    
74     testoutput_for_prop()
75     {
76     # testoutput_for_prop dir s1 label subdir
77     #
78     # compares files in $dir/$subdir/output.txt and $dir/results/output.txt
79     # using search strings s1 and text label
80    
81     if [ $debug -gt 0 ]; then
82     echo testoutput_for_prop: grep "$2" $1/$4/output.txt 1>&2
83     fi
84     if [ -r $1/$4/output.txt ]; then
85 edhill 1.15 grep "$2" $1/$4/output.txt | sed 's/.*=//' | cat -n > tmp1.txt
86 edhill 1.1 lncnt=`wc -l tmp1.txt | awk '{print $1}' `
87     if [ $lncnt -lt 3 ]; then
88     if [ $verbose -gt 0 ]; then
89     echo Not enough lines of output when searching for "$2" 1>&2
90     fi
91     return 99
92     fi
93     else
94     echo testoutput_for_prop: output.txt from model run was not readable 1>&2
95     return 99
96     fi
97     if [ $debug -gt 0 ]; then
98     echo testoutput_for_prop: grep "$2" $1/results/output.txt 1>&2
99     fi
100 edhill 1.15 grep "$2" $1/results/output.txt | sed 's/.*=//' | cat -n > tmp2.txt
101 edhill 1.1 lncnt=`wc -l tmp2.txt | awk '{print $1}' `
102     if [ $lncnt -lt 3 ]; then
103     if [ $verbose -gt 0 ]; then
104     echo Not enough lines of output when searching for "$2" 1>&2
105     fi
106     return 99
107     fi
108     if [ $debug -gt 0 ]; then
109     echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2
110     fi
111     join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt
112     if [ $debug -gt 0 ]; then
113     echo testoutput_for_prop: compare_lines 1>&2
114     fi
115 edhill 1.22 if [ $verbose -gt 1 ]; then
116     cat tmp3.txt 1>&2
117     fi
118     echo "-1" >> tmp3.txt
119 edhill 1.23 # On the SGI O3K (*not* the O2K), "cat -n" inserts a ":" after the line number
120     cat tmp3.txt | sed -e 's|:||g' > tmp4.txt
121     digits_of_similarity=`./tmp_cmpnum < tmp4.txt`
122 edhill 1.1 if [ $digits_of_similarity -eq 99 ]; then
123     if [ $verbose -gt 0 ]; then
124     echo testoutput_for_prop: No comparison was available for \"$2\" 1>&2
125     fi
126     digits_of_similarity=99
127     else
128     if [ $verbose -gt 0 ]; then
129     echo There were $digits_of_similarity decimal places of similarity for \"$2\" 1>&2
130     fi
131     fi
132 edhill 1.23 rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt
133 edhill 1.1
134     return $digits_of_similarity
135     }
136    
137     dashnum()
138     {
139     # dashnum n1 n2 n3 ...
140     #
141     # print numbers using %3i format or "--" if number = 99
142    
143     for num in $@ ; do
144     if [ $num = 99 ]; then
145     printf ' --'
146     else
147     printf '%3i' $num
148     fi
149     done
150     }
151    
152 edhill 1.24 testoutput_ad()
153     {
154     grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $5}' > t05.txt
155     grep $3 $1/$2/output.txt_adm | awk '{print NR " " $5}' > t15.txt
156     grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $6}' > t06.txt
157     grep $3 $1/$2/output.txt_adm | awk '{print NR " " $6}' > t16.txt
158     join t05.txt t15.txt > t5.txt
159     join t06.txt t16.txt > t6.txt
160     echo "-1" >> t5.txt
161     echo "-1" >> t6.txt
162     digits_5=`./tmp_cmpnum < t5.txt`
163     digits_6=`./tmp_cmpnum < t6.txt`
164     dashnum $digits_5 $digits_6
165     rm -f t[01][56].txt t[56].txt
166     }
167    
168 edhill 1.1 testoutput()
169     {
170 edhill 1.24 # testoutput directory subdir
171 edhill 1.1 #
172     # test output in "directory"
173 edhill 1.24 if test "x$ADM" = x ; then
174     if [ $debug -gt 0 ]; then
175     echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2
176     fi
177     testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2; cg2dres=$?
178     if [ $debug -gt 0 ]; then
179     echo testoutput: cg2dres=$cg2dres 1>&2
180     fi
181     testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2; tmin=$?
182     testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2; tmax=$?
183     testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2; tmean=$?
184     testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2; tsd=$?
185     testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2; smin=$?
186     testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2; smax=$?
187     testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2; smean=$?
188     testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2; ssd=$?
189     testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2; umin=$?
190     testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2; umax=$?
191     testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2; umean=$?
192     testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2; usd=$?
193     testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2; vmin=$?
194     testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2; vmax=$?
195     testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2; vmean=$?
196     testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2; vsd=$?
197     dashnum $cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd \
198     $umin $umax $umean $usd $vmin $vmax $vmean $vsd
199     else
200     testoutput_ad $1 $2 "precision_grdchk_result"
201 edhill 1.1 fi
202     }
203    
204     genmakemodel()
205     {
206     # genmakemodel directory
207 edhill 1.10 if test "x$NOGENMAKE" = xt ; then
208     echo "genmake skipped!"
209     else
210     GENMAKE2="$BASH ../../../tools/genmake2"
211     (
212     cd $1;
213 edhill 1.24 command="$GENMAKE2 -ds -m $MAKE"
214     if test "x$ADM" = x ; then
215     command="$command --mods=../code"
216     else
217     command="$command --mods=../code_ad"
218     command="$command -adof=../../../tools/adjoint_options/adjoint_staf"
219     fi
220 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
221     command="$command --optfile=$OPTFILE"
222     fi
223     if test "x$IEEE" != x ; then
224     command="$command -ieee"
225     fi
226     printf 'genmake ... ' 1>&2
227     $command > make.log 2>&1
228     RETVAL=$?
229 edhill 1.21 cp Makefile $CDIR
230 edhill 1.10 if test "x$RETVAL" != x0 ; then
231     tail make.log
232     echo "genmakemodel: genmake failed" 1>&2
233 edhill 1.21 cp genmake_* make.log $CDIR
234 edhill 1.10 return 1
235     else
236 edhill 1.20 echo "successful" 1>&2
237 edhill 1.1 fi
238 edhill 1.10 )
239     fi
240 edhill 1.1 }
241    
242     makeclean()
243     {
244     # makeclean directory
245 edhill 1.10 if test "x$NOCLEAN" = xt ; then
246     echo "make CLEAN skipped!"
247     else
248     (
249     cd $1;
250     if test -e output.txt ; then
251     rm -f output.txt
252     fi
253     printf 'make CLEAN ... ' 2>&1
254     if test -r Makefile ; then
255     $MAKE CLEAN >> make.log 2>&1
256     RETVAL=$?
257     if test "x$RETVAL" != x0 ; then
258     tail make.log
259     echo "makeclean: \"make CLEAN\" failed" 1>&2
260     cp make.log $CDIR"/make.log"
261     return 1
262     fi
263     fi
264 edhill 1.20 echo successful 1>&2
265 edhill 1.10 exit 0
266     )
267     fi
268     }
269    
270     makedependmodel()
271     {
272     # makedependmodel directory
273     if test "x$NODEPEND" = xt ; then
274     echo "make depend skipped!"
275     else
276     (
277     cd $1;
278     printf 'make depend ... ' 1>&2
279     $MAKE depend >> make.log 2>&1
280 edhill 1.1 RETVAL=$?
281     if test "x$RETVAL" != x0 ; then
282     tail make.log
283 edhill 1.10 echo "makedependmodel: make depend failed" 1>&2
284 edhill 1.1 cp make.log $CDIR"/make.log"
285     return 1
286 edhill 1.10 else
287 edhill 1.20 echo successful 1>&2
288 edhill 1.1 fi
289 edhill 1.10 )
290     fi
291 edhill 1.1 }
292    
293     makemodel()
294     {
295     # makemodel directory
296     (
297     cd $1;
298     if test -r Makefile ; then
299     printf 'make ... ' 1>&2
300 edhill 1.24 if test "x$ADM" = x ; then
301     $MAKE >> make.log 2>&1
302     else
303     $MAKE adall >> make.log 2>&1
304     fi
305 edhill 1.1 RETVAL=$?
306     if test "x$RETVAL" != x0 ; then
307     tail make.log
308     echo failed 1>&2
309     cp make.log $CDIR"/make.log"
310     return 1
311     else
312 edhill 1.20 echo successful 1>&2
313 edhill 1.1 fi
314     fi
315     )
316     }
317    
318     linkdata()
319     {
320     # linkdata flag
321     #
322     # symbolically link data files to run directory
323 edhill 1.12 if test "x$1" = x1 ; then
324     (
325     cd $2
326 edhill 1.24 if test "x$ADM" = x ; then
327     files=`( cd ../input ; ls -1 | grep -v CVS )`
328     for i in $files ; do
329     if test ! -d "../input/"$i ; then
330     ln -sf "../input/"$i $i
331     fi
332     done
333     else
334     files=`( cd ../input ; ls -1 *.bin | grep -v CVS )`
335     for i in $files ; do
336     if test ! -d "../input/"$i ; then
337     ln -sf "../input/"$i $i
338     fi
339     done
340     files=`( cd ../input_ad ; ls -1 | grep -v CVS )`
341     for i in $files ; do
342     if test ! -d "../input_ad/"$i ; then
343     ln -sf "../input_ad/"$i $i
344     fi
345     done
346     fi
347 edhill 1.12 )
348 edhill 1.1 fi
349     }
350    
351     runmodel()
352     {
353 edhill 1.6 # runmodel directory
354 edhill 1.1 #
355 edhill 1.24 # runs "$COMMAND in "directory"
356 edhill 1.6 # (where "$COMMAND" is relative to "directory")
357 edhill 1.1 (
358     cd $1
359 edhill 1.20 printf 'runmodel ... ' 1>&2
360 edhill 1.6 # make output.txt
361 edhill 1.20 $COMMAND >> run.log 2>&1
362 edhill 1.6 RETVAL=$?
363     if test "x$RETVAL" = x0 ; then
364 edhill 1.20 echo successful 1>&2
365 edhill 1.24 if test "x$ADM" = x ; then
366     cp output.txt $CDIR"/output.txt"
367     else
368     cp output.txt_adm $CDIR"/output.txt_adm"
369     fi
370 edhill 1.6 return 0
371     else
372 edhill 1.20 tail run.log
373     echo failed 1>&2
374     cp run.log $CDIR"/run.log"
375 edhill 1.6 return 1
376 edhill 1.1 fi
377     )
378     }
379    
380     createcodelet()
381     {
382     # create codelet for comparing model output
383    
384     echo -n "creating the comparison code... "
385 edhill 1.22 cat > tmp_cmpnum.c <<EOF
386     #include <stdio.h>
387     #include <math.h>
388     int main( int argc, char** argv ) {
389     int linnum,best;
390     double a,b,diff;
391     best = -16;
392     while( 1 ) {
393     scanf("%d", &linnum);
394     if (linnum == -1) break;
395     scanf("%lf", &a); scanf("%lf", &b);
396     diff = 0.5*(fabs(a)+fabs(b));
397     if (diff > 1.e-12) {
398     diff=fabs(a-b)/diff;
399     if (diff > 0.0) {
400     linnum = (int)log10(diff);
401     best = (best > linnum) ? best : linnum;
402     }
403     else {
404     if (best == -16 && diff != 0) best = -22;
405     }
406     }
407     }
408     printf("%d\n", -best);
409     return 0;
410     }
411     EOF
412     cc -o tmp_cmpnum tmp_cmpnum.c -lm
413 edhill 1.1
414 edhill 1.22 if [ -x ./tmp_cmpnum ]; then
415 edhill 1.1 echo "OK"
416     return 0
417     else
418     echo
419 edhill 1.21 echo "ERROR: failed to compile comparison code"
420 edhill 1.1 exit 1
421     fi
422     }
423    
424     formatresults()
425     {
426     # formatresults expt genmake depend make run results*
427    
428     nm=$1
429     printf '%s %s %s %s' $2 $3 $4 $5
430     shift; shift; shift; shift; shift;
431     printf '%3s' $@
432    
433     if [ $1 = '--' ]; then
434     printf ' N/O '
435     else
436     if [ $1 -gt 12 ]; then
437     printf ' pass'
438     else
439     printf ' FAIL'
440     fi
441     fi
442     printf ' %s' $nm
443     printf '\n'
444    
445     }
446    
447     show_help()
448     {
449     cat - << EOF
450     $0 [-help] [-quick] [-verbose] dir1 [dir2] [...]
451 edhill 1.10
452     -help|-h Show this help message
453 edhill 1.1 -quiet Reduce the amount of output
454     -verbose Produce copious amounts of output
455     -debug Produce even more output which will mean nothing to most
456     -force Do "make CLEAN" before compiling. This forces a complete rebuild.
457     -clean Do "make CLEAN" after compiling and testing.
458     -cleanup Aggresively removes all model output, executables and object files
459     and then exits. Use with care.
460    
461     Normal usage:
462     $0 * Configure, compile, run and analyze in all experiment directories
463     EOF
464     }
465    
466     scandirs()
467     {
468     if [ $# -eq 0 ]; then
469     for arg in * ; do
470     test -d $arg/input && echo $arg
471     done
472     else
473     echo $*
474     fi
475     }
476    
477    
478     ###############################################################################
479    
480    
481     # Default properties
482     debug=0
483     verbose=1
484     clean=0
485     expts=''
486 edhill 1.6 # ieee=1
487 edhill 1.10
488     IEEE=
489     if test "x$MITGCM_IEEE" != x ; then
490     IEEE=$MITGCM_IEEE
491     fi
492    
493    
494     CLEANUP=f
495     QUICK=f
496     NOGENMAKE=f
497     NOCLEAN=f
498     NODEPEND=f
499 edhill 1.1
500 edhill 1.4 BASH=
501 edhill 1.10 OPTFILE=NONE
502     ADDRESSES=
503 edhill 1.1 TESTDIRS=
504     MPACKDIR="../tools/mpack-1.6"
505 edhill 1.20 HAVE_MPACK=
506 edhill 1.1 MPACK="$MPACKDIR/mpack"
507 edhill 1.24 COMMAND=
508 edhill 1.8 MAKE=make
509 edhill 1.7 MPI=f
510 edhill 1.1
511 edhill 1.24 ADM=
512    
513 edhill 1.1 echo -n "parsing options... "
514    
515     ac_prev=
516     for ac_option ; do
517    
518     # If the previous option needs an argument, assign it.
519     if test -n "$ac_prev"; then
520     eval "$ac_prev=\$ac_option"
521     ac_prev=
522     continue
523     fi
524    
525     ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
526    
527     case $ac_option in
528    
529     -help | --help | -h | --h)
530     usage ;;
531    
532 edhill 1.2 -optfile | --optfile | -of | --of)
533 edhill 1.10 ac_prev=OPTFILE ;;
534 edhill 1.2 -optfile=* | --optfile=* | -of=* | --of=*)
535 edhill 1.10 OPTFILE=$ac_optarg ;;
536 edhill 1.1
537     -addr | --addr | -a | --a)
538     ac_prev=ADDRESSES ;;
539     -addr=* | --addr=*)
540     ADDRESSES=$ac_optarg ;;
541    
542     -tdir | --tdir | -t | --t)
543     ac_prev=TESTDIRS ;;
544     -tdir=* | --tdir=*)
545     TESTDIRS=$ac_optarg ;;
546 edhill 1.4
547     -bash | --bash | -b | --b)
548     ac_prev=BASH ;;
549     -bash=* | --bash=*)
550     BASH=$ac_optarg ;;
551 edhill 1.5
552 edhill 1.6 -command | --command | -c | --c)
553     ac_prev=COMMAND ;;
554     -command=* | --command=*)
555     COMMAND=$ac_optarg ;;
556 edhill 1.8
557     -make | --make | -m | --m)
558     ac_prev=MAKE ;;
559     -make=* | --make=*)
560     MAKE=$ac_optarg ;;
561 edhill 1.1
562 edhill 1.10 -clean | --clean)
563     CLEANUP=t ;;
564    
565     -quick | --quick | -q | --q)
566     QUICK=t ;;
567     -nogenmake | --nogenmake | -ng | --ng)
568     NOGENMAKE=t ;;
569     -noclean | --noclean | -nc | --nc)
570     NOCLEAN=t ;;
571     -nodepend | --nodepend | -nd | --nd)
572     NODEPEND=t ;;
573    
574 edhill 1.18 -mpi) MPI=t ;;
575 edhill 1.10
576 edhill 1.24 -adm | -ad) ADM=t ;;
577    
578 edhill 1.10 -ieee) IEEE=true ;;
579     -noieee) IEEE= ;;
580    
581 edhill 1.1 -verbose) verbose=2 ;;
582     -debug) debug=1 ;;
583     -quiet) verbose=0 ;;
584    
585     -*)
586     echo "Error: unrecognized option: "$ac_option
587     usage
588     ;;
589    
590     *)
591     echo "Error: unrecognized argument: "$ac_option
592     usage
593     ;;
594    
595     esac
596    
597     done
598    
599 edhill 1.10 if test "x$QUICK" = xt ; then
600     NOGENMAKE=t
601     NOCLEAN=t
602     NODEPEND=t
603     fi
604    
605 edhill 1.1 if test "x$TESTDIRS" = x ; then
606     TESTDIRS=`scandirs`
607     fi
608    
609 edhill 1.10 if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
610     OPTFILE=$MITGCM_OF
611     fi
612    
613 edhill 1.24 if test "x$ADM" = xt -a "x$COMMAND" = x ; then
614     COMMAND="./mitgcmuv_ad > output.txt_adm 2>&1"
615     fi
616    
617     if test "x$COMMAND" = x ; then
618     COMMAND="make output.txt"
619     fi
620    
621 edhill 1.1 echo "OK"
622    
623     # create the FORTRAN comparison code
624     createcodelet
625    
626     # build the mpack utility
627     build_mpack
628    
629     # Create a uniquely named directory to store results
630     MACH=`hostname`
631 edhill 1.2 UNAMEA=`uname -a`
632 edhill 1.1 DATE=`date +%Y%m%d`
633     BASE=$MACH"_"$DATE"_"
634     DNUM=0
635     DRESULTS="$BASE$DNUM"
636     while test -e $DRESULTS ; do
637     DNUM=$(( $DNUM + 1 ))
638     DRESULTS="$BASE$DNUM"
639     done
640     mkdir $DRESULTS
641     RETVAL=$?
642     if test "x$RETVAL" != x0 ; then
643 edhill 1.20 echo "ERROR: Can't create results directory \"./$DRESULTS\""
644 edhill 1.1 exit 1
645     fi
646     SUMMARY="$DRESULTS/summary.txt"
647 edhill 1.13 echo -n "Start time: " >> $SUMMARY
648 edhill 1.16 start_date=`date`
649 edhill 1.17 echo $start_date > $SUMMARY
650 edhill 1.1
651 edhill 1.11 of_path=
652 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
653     if test -r $OPTFILE ; then
654 edhill 1.11 # get the path
655     path=${OPTFILE%/*}
656     if test "x$path" = x ; then
657     of_path=`pwd`
658     else
659     of_path=`( cd $path > /dev/null 2>&1 ; pwd )`
660     fi
661     file=${OPTFILE##*/}
662     OPTFILE=$of_path/$file
663 edhill 1.21 cp $OPTFILE $DRESULTS
664     echo >> $SUMMARY
665     echo " OPTFILE=$OPTFILE" >> $SUMMARY
666 edhill 1.11 else
667 edhill 1.21 echo | tee $SUMMARY
668     echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
669     exit 1
670 edhill 1.10 fi
671 edhill 1.21 else
672     echo >> $SUMMARY
673     echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
674     echo " so the genmake default will be used." >> $SUMMARY
675 edhill 1.10 fi
676     echo
677     echo >> $SUMMARY
678 edhill 1.24 if test "x$ADM" = x ; then
679     cat << EOF | tee -a $SUMMARY
680 edhill 1.21 T S U V
681     G D M c m s m s m s m s
682     E p a R g m m e . m m e . m m e . m m e .
683     N n k u 2 i a a d i a a d i a a d i a a d
684     2 d e n d n x n . n x n . n x n . n x n .
685    
686     EOF
687 edhill 1.24 else
688     echo "ADJOINT=true" >> $SUMMARY
689     echo >> $SUMMARY
690     cat << EOF | tee -a $SUMMARY
691     G D M C G
692     E p a R o r
693     N n k u s a
694     2 d e n t d
695    
696     EOF
697     fi
698 edhill 1.1
699 edhill 1.10 # ...and each test directory...
700     for dir in $TESTDIRS ; do
701    
702     # Cleanup only!
703     if test "x$CLEANUP" = xt ; then
704     if test -r $dir/build/Makefile ; then
705     ( cd $dir/build ; make CLEAN )
706     fi
707     if test -r $dir/input/Makefile ; then
708     ( cd $dir/input ; make CLEAN )
709     fi
710     continue
711 edhill 1.1 fi
712 edhill 1.3
713 edhill 1.10 # Verify that the testdir exists and contains previous
714     # results in the correct location--or skip this directory!
715 edhill 1.24 fout=
716     if test "x$ADM" = x ; then
717     fout=$dir"/results/output.txt"
718     else
719     fout=$dir"/results_ad/output.txt_adm"
720     fi
721     if test ! -r $fout ; then
722     echo "can't read \"$fout\" -- skipping $dir"
723 edhill 1.10 continue
724     fi
725 edhill 1.7
726 edhill 1.10 echo "-------------------------------------------------------------------------------"
727     echo
728     echo "Experiment: $dir"
729     echo
730     unset genmake makedepend make run
731     results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
732 edhill 1.1
733 edhill 1.12 builddir="input"
734     rundir="input"
735     use_seperate_build=0
736     if test -d $dir/build -a -r $dir/build ; then
737     builddir="build"
738     rundir="build"
739     use_seperate_build=1
740     linkdata $use_seperate_build $dir/$rundir
741 edhill 1.10 fi
742    
743 edhill 1.24 if test "x$ADM" = x ; then
744     CODE_DIR=$dir/code
745     else
746     CODE_DIR=$dir/code_ad
747     fi
748 edhill 1.10 BUILD_DIR=$dir/$builddir
749     MPI_FILES="CPP_EEOPTIONS.h_mpi SIZE.h_mpi"
750     NOMPI_FILES="CPP_EEOPTIONS.h_nompi SIZE.h_nompi"
751    
752     # Is this an MPI run?
753     if test "x$MPI" = xt ; then
754     FILES=$MPI_FILES
755     endings="_mpi"
756     else
757     FILES=$NOMPI_FILES
758     endings="_nompi"
759     fi
760    
761     # Check to see that we have the files
762     have_files=t
763     for i in $FILES ; do
764     if test ! -r $CODE_DIR/$i ; then
765     echo "Warning: can't read file $CODE_DIR/$i"
766     have_files=f
767 edhill 1.2 fi
768 edhill 1.10 done
769     if test "x$have_files" != xt -a "x$MPI" = xt ; then
770     echo "Skipping $dir due to lack of input files (see above warning)"
771     continue
772     fi
773    
774     # If we have the $FILES and they differ, copy the $FILES to $BUILD_DIR
775     if test "x$have_files" = xt ; then
776     for i in $FILES ; do
777     sstr="s|$endings||"
778     name=`echo $i | sed -e $sstr `
779     cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1
780     RETVAL=$?
781     if test "x$RETVAL" != x0 ; then
782     cp $CODE_DIR/$i $BUILD_DIR/$name
783     fi
784     done
785     fi
786    
787     # Create an output dir for each OPTFILE/tdir combination
788 edhill 1.20 rel_CDIR=$DRESULTS"/"$dir
789     mkdir $rel_CDIR
790     CDIR=`pwd`"/$rel_CDIR"
791 edhill 1.10
792     if test "x$CLEANUP" = xt ; then
793     makeclean $dir/$builddir
794     else
795 edhill 1.1 genmakemodel $dir/$builddir && genmake=Y \
796     && makeclean $dir/$builddir \
797     && makedependmodel $dir/$builddir && makedepend=Y \
798     && makemodel $dir/$builddir && make=Y \
799 edhill 1.12 && linkdata $use_seperate_build $dir/$rundir \
800     && runmodel $dir/$rundir && run=Y \
801 edhill 1.1 && results=`testoutput $dir $rundir`
802 edhill 1.10 fi
803    
804     echo
805 edhill 1.24 if test "x$ADM" = x ; then
806     fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
807     else
808     fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
809     fres=$fres"$results $dir"
810     fi
811 edhill 1.10 echo
812 edhill 1.21 echo "$fres" >> $SUMMARY
813     echo "fresults='$fres'" > $CDIR"/summary.txt"
814 edhill 1.10 echo "MACH='$MACH'" >> $CDIR"/summary.txt"
815     echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
816     echo "DATE='$DATE'" >> $CDIR"/summary.txt"
817     echo "tdir='$dir'" >> $CDIR"/summary.txt"
818    
819     echo "-------------------------------------------------------------------------------"
820    
821 edhill 1.1 done
822    
823 edhill 1.13 echo -n "Start time: " >> $SUMMARY
824 edhill 1.16 echo $start_date >> $SUMMARY
825 edhill 1.13 echo -n "End time: " >> $SUMMARY
826     date >> $SUMMARY
827 edhill 1.20
828     # If addresses were supplied and mpack built successfully, then try
829     # to send email using mpack.
830     if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
831     echo "No results email was sent."
832     else
833     if test "x$HAVE_MPACK" = xt ; then
834     tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
835     && gzip $DRESULTS".tar" \
836     && $MPACK -s MITgcm-test -m 1500000 $DRESULTS".tar.gz" $ADDRESSES
837     RETVAL=$?
838     if test "x$RETVAL" != x0 ; then
839     echo
840     echo "Warning: The tar, gzip, & mpack step failed. Please send email"
841     echo " to <MITgcm-support@mitgcm.org> for help. You may copy the "
842     echo " summary of results from the directory \"$DRESULTS\"."
843     echo
844     else
845     echo
846     echo "An email containing results was sent to the following addresses:"
847     echo " \"$ADDRESSES\""
848     echo
849     fi
850     test -f $DRESULTS".tar" && rm -f $DRESULTS".tar"
851     test -f $DRESULTS".tar.gz" && rm -f $DRESULTS".tar.gz"
852     fi
853     fi
854 edhill 1.13
855 edhill 1.22 # rm -f tmp_cmpnum.f a.out
856     rm -f tmp_cmpnum.c tmp_cmpnum
857 edhill 1.1
858 edhill 1.12 if test "x$CLEANUP" != xt ; then
859     cat $SUMMARY
860 edhill 1.14 if test -e tr.out ; then
861     mv tr.out tr.out.old
862     fi
863     cat $SUMMARY > tr.out
864 edhill 1.12 fi
865 edhill 1.1

  ViewVC Help
Powered by ViewVC 1.1.22