/[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.92 - (hide annotations) (download)
Wed Sep 5 01:46:37 2007 UTC (16 years, 6 months ago) by jmc
Branch: MAIN
Changes since 1.91: +14 -3 lines
add argument "MATCH_CRIT" (option: -match $Number) = number of matching
 digits to get a "pass"

1 edhill 1.19 #! /usr/bin/env bash
2 edhill 1.1 #
3 jmc 1.92 # $Header: /u/gcmpack/MITgcm/verification/testreport,v 1.91 2007/09/05 00:07:25 jmc 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 jmc 1.83 echo " (-mth) run multi threaded (using eedata.mth)"
15     echo " (-mpi) compile and run using MPI"
16 edhill 1.10 echo " (-ieee|-noieee) if possible, use IEEE compiler flags"
17 edhill 1.41 echo " (DEF=\"-ieee\")"
18 jmc 1.89 echo " (-of=|-optfile=)STRING list of optfiles to use"
19 edhill 1.20 echo " (-a|-addr) STRING list of email recipients"
20 edhill 1.6 echo " (DEF=\"edhill@mitgcm.org\")"
21 jmc 1.84 echo " (-t|-tdir) STRING list of group and/or exp. dirs to test"
22     echo " (recognized groups: basic, tutorials)"
23     echo " (DEF=\"\" which test all)"
24 jmc 1.89 echo " (-skd|-skipdir) STRING list of exp. dirs to skip"
25     echo " (DEF=\"\" which test all)"
26 edhill 1.20 echo " (-b|-bash) STRING preferred location of a \"bash\" or"
27     echo " Bourne-compatible \"sh\" shell"
28     echo " (DEF=\"\" for \"bash\")"
29 edhill 1.24 echo " (-adm|-ad) perform an adjoint run"
30 edhill 1.20 echo " (-command) STRING command to run"
31 edhill 1.6 echo " (DEF=\"make output.txt\")"
32 edhill 1.20 echo " (-m|-make) STRING command to use for \"make\""
33 edhill 1.8 echo " (DEF=\"make\")"
34 jmc 1.70 echo " (-odir) STRING used to build output directory name"
35     echo " (DEF=\"hostname\")"
36 jmc 1.89 echo " (-ptr|-ptracers) STRING specify which ptracers to test"
37 edhill 1.50 echo " (DEF=\"1 2 3 4 5\")"
38 jmc 1.92 echo " (-match) NUMBER Matching Criteria (number of digits)"
39     echo " (DEF=\"12\")"
40 edhill 1.43 echo " (-j) JOBS use \"make -j JOBS\" for parallel builds"
41 edhill 1.10 echo " (-clean) *ONLY* run \"make CLEAN\""
42 ce107 1.90 echo " (-quick|-q) same as \"-nogenmake -noclean -nodepend\""
43     echo " (-nogenmake|-ng) skip the genmake stage"
44     echo " (-noclean|-nc) skip the \"make clean\" stage"
45     echo " (-nodepend|-nd) skip the \"make depend\" stage"
46     echo " (-deldir|-dd) on success, delete the output directory"
47     echo " (-ts) provide timing information per timestep"
48     echo " (-papis) provide MFlop/s per timestep using PAPI"
49     echo " (-pcls) provide MFlop/s per timestep using PCL"
50 edhill 1.6 echo
51 edhill 1.50 echo "and where STRING can be a whitespace-delimited list"
52 edhill 1.6 echo "such as:"
53 edhill 1.50 echo
54 edhill 1.6 echo " -t 'exp0 exp2 exp3' "
55     echo " -addr='abc@123.com testing@home.org'"
56 edhill 1.1 echo
57 edhill 1.50 echo "provided that the expression is properly quoted within the current"
58     echo "shell (note the use of single quotes to protect white space)."
59     echo
60 edhill 1.1 exit 1
61     }
62    
63     # build the mpack utility
64     build_mpack()
65     {
66 edhill 1.34 printf "building the mpack utility... "
67 edhill 1.1 if test ! -x "$MPACKDIR/mpack" ; then
68     if test ! -d $MPACKDIR ; then
69 edhill 1.20 echo
70 edhill 1.1 echo "Error: can't find \"$MPACKDIR\""
71     echo " are you sure this program is being run in the correct "
72     echo " (that is, \"MITGCM_ROOT\verification\") directory?"
73 edhill 1.20 echo
74     HAVE_MPACK=f
75 edhill 1.1 fi
76 edhill 1.34 printf "building mpack... "
77 edhill 1.26 if test "x$CC" = x ; then
78     export CC=cc
79     fi
80 edhill 1.25 ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1
81 edhill 1.1 RETVAL=$?
82     if test "x$RETVAL" != x0 ; then
83     echo
84     echo "Error building the mpack tools at: $MPACK_DIR"
85 edhill 1.20 echo
86     HAVE_MPACK=f
87     else
88 edhill 1.25 rm -f tr_build_mpack.out
89 edhill 1.20 HAVE_MPACK=t
90 edhill 1.1 fi
91 edhill 1.20 else
92     HAVE_MPACK=t
93 edhill 1.1 fi
94     echo "OK"
95     }
96    
97     testoutput_for_prop()
98     {
99 edhill 1.34 # testoutput_for_prop dir s1 label subdir extension
100 edhill 1.1 #
101 jmc 1.87 # compares files $dir/$subdir/$OUTPUTFILE and $dir/results/output.txt
102 edhill 1.1 # using search strings s1 and text label
103    
104     if [ $debug -gt 0 ]; then
105 jmc 1.87 echo testoutput_for_prop: grep "$2" $1/$4/$OUTPUTFILE 1>&2
106 edhill 1.1 fi
107 jmc 1.87 if [ -r $1/$4/$OUTPUTFILE ]; then
108     grep "$2" $1/$4/$OUTPUTFILE | sed 's/.*=//' | cat -n > tmp1.txt
109 jmc 1.67 lncntA=`wc -l tmp1.txt | awk '{print $1}' `
110     if [ $lncntA -lt 3 ]; then
111 edhill 1.1 if [ $verbose -gt 0 ]; then
112     echo Not enough lines of output when searching for "$2" 1>&2
113     fi
114     return 99
115     fi
116     else
117 jmc 1.87 echo testoutput_for_prop: $OUTPUTFILE from model run was not readable 1>&2
118 edhill 1.1 return 99
119     fi
120     if [ $debug -gt 0 ]; then
121 jmc 1.85 echo testoutput_for_prop: grep "$2" $1/results/output.$5 1>&2
122 edhill 1.1 fi
123 jmc 1.85 grep "$2" $1/results/output.$5 | sed 's/.*=//' | cat -n > tmp2.txt
124 jmc 1.67 lncntB=`wc -l tmp2.txt | awk '{print $1}' `
125     if [ $lncntB -lt 3 ]; then
126 edhill 1.1 if [ $verbose -gt 0 ]; then
127     echo Not enough lines of output when searching for "$2" 1>&2
128     fi
129     return 99
130     fi
131 jmc 1.67 if [ $lncntA -ne $lncntB ]; then
132     if [ $verbose -gt 0 ]; then
133     echo Not same Nb of lines when searching for "$2" ":" $lncntA $lncntB 1>&2
134     fi
135     return 99
136     fi
137 edhill 1.72 has_nan=`cat tmp1.txt | grep -i nan | wc -l`
138     if [ $has_nan -gt 0 ] ; then
139 jmc 1.87 echo testoutput_for_prop: $OUTPUTFILE contains $has_nan NaN values 1>&2
140 edhill 1.72 return 99
141     fi
142     has_inf=`cat tmp1.txt | grep -i inf | wc -l`
143     if [ $has_inf -gt 0 ] ; then
144 jmc 1.87 echo testoutput_for_prop: $OUTPUTFILE contains $has_inf Inf values 1>&2
145 jmc 1.71 return 99
146     fi
147 edhill 1.1 if [ $debug -gt 0 ]; then
148     echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2
149     fi
150     join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt
151     if [ $debug -gt 0 ]; then
152     echo testoutput_for_prop: compare_lines 1>&2
153     fi
154 edhill 1.22 if [ $verbose -gt 1 ]; then
155     cat tmp3.txt 1>&2
156     fi
157     echo "-1" >> tmp3.txt
158 edhill 1.23 # On the SGI O3K (*not* the O2K), "cat -n" inserts a ":" after the line number
159     cat tmp3.txt | sed -e 's|:||g' > tmp4.txt
160 jmc 1.91 digits_of_similarity=`./tr_cmpnum < tmp4.txt`
161 edhill 1.1 if [ $digits_of_similarity -eq 99 ]; then
162     if [ $verbose -gt 0 ]; then
163     echo testoutput_for_prop: No comparison was available for \"$2\" 1>&2
164     fi
165     digits_of_similarity=99
166     else
167     if [ $verbose -gt 0 ]; then
168     echo There were $digits_of_similarity decimal places of similarity for \"$2\" 1>&2
169     fi
170     fi
171 edhill 1.23 rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt
172 edhill 1.1
173     return $digits_of_similarity
174     }
175    
176     dashnum()
177     {
178     # dashnum n1 n2 n3 ...
179     #
180     # print numbers using %3i format or "--" if number = 99
181    
182     for num in $@ ; do
183     if [ $num = 99 ]; then
184     printf ' --'
185     else
186     printf '%3i' $num
187     fi
188     done
189     }
190    
191 edhill 1.24 testoutput_ad()
192     {
193 jmc 1.78 grep $3 $1/results_ad/output_adm.txt | awk '{print NR " " $5}' > t05.txt
194 jmc 1.87 grep $3 $1/$2/$OUTPUTFILE | awk '{print NR " " $5}' > t15.txt
195 jmc 1.78 grep $3 $1/results_ad/output_adm.txt | awk '{print NR " " $6}' > t06.txt
196 jmc 1.87 grep $3 $1/$2/$OUTPUTFILE | awk '{print NR " " $6}' > t16.txt
197 edhill 1.24 join t05.txt t15.txt > t5.txt
198     join t06.txt t16.txt > t6.txt
199     echo "-1" >> t5.txt
200     echo "-1" >> t6.txt
201 jmc 1.91 digits_5=`./tr_cmpnum < t5.txt`
202     digits_6=`./tr_cmpnum < t6.txt`
203 edhill 1.24 dashnum $digits_5 $digits_6
204     rm -f t[01][56].txt t[56].txt
205     }
206    
207 edhill 1.49 check_for_add_mon_output()
208     {
209     # Check for additional types of monitor output
210     if test "x$1" = x ; then
211     return
212     fi
213    
214 edhill 1.50 for ii in $PTRACERS_NUM ; do
215     eval "HAVE_PTR0"$ii"=f"
216     done
217    
218 edhill 1.49 ptr_add="trcstat_ptracerXX_min trcstat_ptracerXX_max"
219     ptr_add="$ptr_add trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
220 edhill 1.50 for ii in $PTRACERS_NUM ; do
221 edhill 1.49 for jj in $ptr_add ; do
222     name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
223     tst=`grep $name $1 | wc -l | awk '{print $1}'`
224     if test ! "x$tst" = x0 ; then
225     eval "HAVE_PTR0"$ii"=t"
226     fi
227     done
228     # eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"'
229     done
230     }
231    
232 edhill 1.1 testoutput()
233     {
234 edhill 1.34 # testoutput directory subdir extension
235 edhill 1.1 #
236     # test output in "directory"
237 edhill 1.24 if test "x$ADM" = x ; then
238     if [ $debug -gt 0 ]; then
239     echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2
240     fi
241 edhill 1.34 testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2 $3; cg2dres=$?
242 edhill 1.24 if [ $debug -gt 0 ]; then
243     echo testoutput: cg2dres=$cg2dres 1>&2
244     fi
245 edhill 1.34 testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2 $3; tmin=$?
246     testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2 $3; tmax=$?
247     testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2 $3; tmean=$?
248     testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2 $3; tsd=$?
249     testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2 $3; smin=$?
250     testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2 $3; smax=$?
251     testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2 $3; smean=$?
252     testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2 $3; ssd=$?
253     testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2 $3; umin=$?
254     testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2 $3; umax=$?
255     testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2 $3; umean=$?
256     testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2 $3; usd=$?
257     testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2 $3; vmin=$?
258     testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2 $3; vmax=$?
259     testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2 $3; vmean=$?
260     testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2 $3; vsd=$?
261 edhill 1.49
262 edhill 1.50 # This is for PTRACERS
263     for ii in $PTRACERS_NUM ; do
264     eval `echo "p0"$ii"_min=99"`
265     eval `echo "p0"$ii"_max=99"`
266     eval `echo "p0"$ii"_mean=99"`
267     eval `echo "p0"$ii"_sd=99"`
268     tst=`eval 'echo "$HAVE_PTR0'$ii'"'`
269     #echo 'tst = '$tst
270     if test "x$tst" = xt ; then
271     a="trcstat_ptracer0"
272     testoutput_for_prop $1 "$a"$ii"_min" "p0"$ii"_min" $2 $3
273     RETVAL=$? ; eval `echo "p0"$ii"_min="$RETVAL`
274     testoutput_for_prop $1 "$a"$ii"_max" "p0"$ii"_max" $2 $3
275     RETVAL=$? ; eval `echo "p0"$ii"_max="$RETVAL`
276     testoutput_for_prop $1 "$a"$ii"_mean" "p0"$ii"_mean" $2 $3
277     RETVAL=$? ; eval `echo "p0"$ii"_mean="$RETVAL`
278     testoutput_for_prop $1 "$a"$ii"_sd" "p0"$ii"_sd" $2 $3
279     RETVAL=$? ; eval `echo "p0"$ii"_sd="$RETVAL`
280     fi
281 edhill 1.49 done
282    
283     allargs="$cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd"
284     allargs="$allargs $umin $umax $umean $usd $vmin $vmax $vmean $vsd"
285     allargs="$allargs $p01_min $p01_max $p01_mean $p01_sd"
286     allargs="$allargs $p02_min $p02_max $p02_mean $p02_sd"
287     allargs="$allargs $p03_min $p03_max $p03_mean $p03_sd"
288     allargs="$allargs $p04_min $p04_max $p04_mean $p04_sd"
289     allargs="$allargs $p05_min $p05_max $p05_mean $p05_sd"
290    
291     eval "dashnum $allargs"
292    
293 edhill 1.24 else
294     testoutput_ad $1 $2 "precision_grdchk_result"
295 edhill 1.1 fi
296     }
297    
298     genmakemodel()
299     {
300     # genmakemodel directory
301 edhill 1.10 if test "x$NOGENMAKE" = xt ; then
302     echo "genmake skipped!"
303     else
304 edhill 1.34 if test "x$BASH" = x ; then
305     GENMAKE2="../../../tools/genmake2"
306     else
307     GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
308     fi
309 edhill 1.10 (
310     cd $1;
311 edhill 1.24 command="$GENMAKE2 -ds -m $MAKE"
312     if test "x$ADM" = x ; then
313     command="$command --mods=../code"
314     else
315     command="$command --mods=../code_ad"
316     fi
317 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
318     command="$command --optfile=$OPTFILE"
319     fi
320     if test "x$IEEE" != x ; then
321     command="$command -ieee"
322     fi
323 edhill 1.66 if test "x$MPI" = xt ; then
324     command="$command -mpi"
325     fi
326 ce107 1.90 if test "x$TS" = xt ; then
327     command="$command -ts"
328     fi
329     if test "x$PAPIS" = xt ; then
330     command="$command -papis"
331     else
332     if test "x$PCLS" = xt ; then
333     command="$command -pcls"
334     fi
335     fi
336 edhill 1.10 printf 'genmake ... ' 1>&2
337     $command > make.log 2>&1
338     RETVAL=$?
339 edhill 1.44 # Reduce the size of the testing emails!
340 edhill 1.47 head -100 Makefile > $CDIR/Makefile_head
341 edhill 1.10 if test "x$RETVAL" != x0 ; then
342     tail make.log
343     echo "genmakemodel: genmake failed" 1>&2
344 edhill 1.21 cp genmake_* make.log $CDIR
345 edhill 1.10 return 1
346     else
347 edhill 1.20 echo "successful" 1>&2
348 edhill 1.1 fi
349 edhill 1.10 )
350     fi
351 edhill 1.1 }
352    
353     makeclean()
354     {
355     # makeclean directory
356 edhill 1.10 if test "x$NOCLEAN" = xt ; then
357 jmc 1.83 echo "make Clean skipped!"
358 edhill 1.10 else
359     (
360     cd $1;
361 jmc 1.87 #if test -e $OUTPUTFILE ; then rm -f $OUTPUTFILE ; fi
362 edhill 1.10 if test -r Makefile ; then
363 jmc 1.83 printf 'clean build-dir: make Clean ... ' 2>&1
364     $MAKE Clean >> make.log 2>&1
365 edhill 1.10 RETVAL=$?
366     if test "x$RETVAL" != x0 ; then
367     tail make.log
368 jmc 1.83 echo "makeclean: \"make Clean\" failed" 1>&2
369 edhill 1.10 cp make.log $CDIR"/make.log"
370     return 1
371     fi
372     fi
373 edhill 1.20 echo successful 1>&2
374 edhill 1.10 exit 0
375     )
376     fi
377     }
378    
379 jmc 1.83 run_clean()
380 edhill 1.68 {
381 jmc 1.83 # run_clean directory
382     if test "x$NOCLEAN" = xt ; then
383     echo "run_clean skipped!"
384     else
385 edhill 1.68 (
386     cd $1;
387 jmc 1.83 printf 'clean run-dir ... ' 2>&1
388     # part of what is done after "make clean" when doing "make CLEAN"
389     find . -name "*.meta" -exec rm {} \;
390     find . -name "*.data" -exec rm {} \;
391     find . -name "fort.*" -exec rm {} \;
392     find . -type l -exec rm {} \;
393     rm -f $EXECUTABLE *.txt STD* *diagnostics.log datetime
394     rm -rf mnc_test_*
395     echo successful 1>&2
396 edhill 1.68 exit 0
397     )
398     fi
399     }
400    
401 edhill 1.10 makedependmodel()
402     {
403     # makedependmodel directory
404     if test "x$NODEPEND" = xt ; then
405     echo "make depend skipped!"
406     else
407     (
408     cd $1;
409     printf 'make depend ... ' 1>&2
410     $MAKE depend >> make.log 2>&1
411 edhill 1.1 RETVAL=$?
412     if test "x$RETVAL" != x0 ; then
413     tail make.log
414 edhill 1.10 echo "makedependmodel: make depend failed" 1>&2
415 edhill 1.1 cp make.log $CDIR"/make.log"
416     return 1
417 edhill 1.10 else
418 edhill 1.20 echo successful 1>&2
419 edhill 1.1 fi
420 edhill 1.10 )
421     fi
422 edhill 1.1 }
423    
424     makemodel()
425     {
426     # makemodel directory
427     (
428     cd $1;
429     if test -r Makefile ; then
430     printf 'make ... ' 1>&2
431 edhill 1.24 if test "x$ADM" = x ; then
432 edhill 1.43 if test "x$JOBS" = x ; then
433     $MAKE >> make.log 2>&1
434     else
435     $MAKE -j $JOBS >> make.log 2>&1
436     fi
437 edhill 1.24 else
438     $MAKE adall >> make.log 2>&1
439     fi
440 edhill 1.1 RETVAL=$?
441     if test "x$RETVAL" != x0 ; then
442     tail make.log
443     echo failed 1>&2
444     cp make.log $CDIR"/make.log"
445     return 1
446     else
447 edhill 1.20 echo successful 1>&2
448 edhill 1.1 fi
449     fi
450     )
451     }
452    
453 edhill 1.27 symlink_mpifiles()
454     {
455     # Put special links so that MPI specific files are used
456     # This MUST be invoked between makeclean and makelinks because
457     # the Makefile will link to non-mpi files by default
458    
459     dir=$1
460     code_dir=$2
461     BUILD_DIR=$dir/$3
462     CODE_DIR=$dir/$code_dir
463 edhill 1.45
464 edhill 1.27 # These are files that should replace their counter-part when using -mpi
465     MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`
466    
467     # Is this an MPI run?
468     if test "x$MPI" = xt ; then
469     # YES: We symbolically link these files to the build
470     # dir so long as there is no real file in place
471     for ii in $MPI_FILES ; do
472     i=`echo $ii | sed 's:^\./::'`
473     name=`echo $i | sed 's:_mpi::' `
474     cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1
475     RETVAL=$?
476     if test "x$RETVAL" != x0 ; then
477     if ! test -f $BUILD_DIR/$i ; then
478 edhill 1.45 #echo Linking $name to $i
479 edhill 1.27 (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
480     fi
481     fi
482     done
483     else
484 edhill 1.45 # NO: We undo any _mpi symbolically linked files
485 edhill 1.27 for ii in $MPI_FILES ; do
486     i=`echo $ii | sed 's:^\./::'`
487     name=`echo $i | sed 's:_mpi::' `
488     if test -L $BUILD_DIR/$name ; then
489 edhill 1.45 cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
490     RETVAL=$?
491     if test "x$RETVAL" = x0 ; then
492     #echo Un-linking $name from $linktarg
493 edhill 1.27 rm -f $BUILD_DIR/$name
494     fi
495     fi
496     done
497     fi
498    
499     }
500    
501 edhill 1.1 linkdata()
502     {
503 jmc 1.83 # linkdata run_dir input_dir_1 input_dir_2 ...
504 edhill 1.1 #
505     # symbolically link data files to run directory
506 jmc 1.83 if test -d $1 ; then
507 edhill 1.12 (
508 jmc 1.83 cd $1 ; shift
509     if test -r "../"$1"/eedata.mth" ; then
510     # found eedata.mth in 1rst input dir and it is readable
511     if test "x$MULTI_THREAD" = "xt" ; then
512     # multi-threaded test: remove symbolic link & link eedata.mth
513     if test -h eedata ; then rm -f eedata ; fi
514     if test ! -r eedata ; then
515     ln -sf "../"$1"/eedata.mth" eedata ;
516     printf 'eedata.mth ' 1>&2
517 edhill 1.24 fi
518 jmc 1.83 else
519     # not multi-threaded test: remove eedata symbolic link
520     if test -h eedata ; then rm -f eedata ; fi
521     fi
522     fi
523     for ldir in $* ; do
524     if test -d "../"$ldir ; then
525     printf 'ldir='${ldir} 1>&2
526     files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
527     for i in $files ; do
528     if test ! -d "../"$ldir/$i ; then
529     if test ! -r $i ; then
530     printf ' '$i 1>&2
531     ln -sf "../"$ldir"/"$i $i
532     fi
533     fi
534     done
535     if test -x "../"$ldir"/"prepare_run ; then
536     "../"$ldir"/"prepare_run
537 edhill 1.24 fi
538 jmc 1.83 printf ' ; ' 1>&2
539 jmc 1.82 fi
540 jmc 1.83 done
541 edhill 1.12 )
542 edhill 1.1 fi
543     }
544    
545     runmodel()
546     {
547 edhill 1.6 # runmodel directory
548 edhill 1.1 #
549 edhill 1.24 # runs "$COMMAND in "directory"
550 edhill 1.6 # (where "$COMMAND" is relative to "directory")
551 edhill 1.1 (
552     cd $1
553 jmc 1.75 printf 'runmodel in %s ...' $1 1>&2
554 edhill 1.6 # make output.txt
555 edhill 1.38 echo
556 jmc 1.83 if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
557 jmc 1.88 echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_00
558 jmc 1.83 ln -sf "../"$builddir"/"$EXECUTABLE .
559     fi
560     if test ! -x $EXECUTABLE ; then
561 jmc 1.88 rm -f run.log ; touch run.log
562     if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
563 jmc 1.83 echo " no executable:" $EXECUTABLE >> run.log
564     RETVAL=8
565 jmc 1.88 ENDVAL=-1
566 jmc 1.75 else
567 jmc 1.83 if test $OUTPUTFILE -ot $EXECUTABLE ; then
568 jmc 1.88 rm -f run.log ; touch run.log
569     if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
570 jmc 1.83 ( eval $COMMAND ) >> run.log 2>&1
571     RETVAL=$?
572     else
573     RETVAL=0
574 jmc 1.88 if test -f run.log ; then
575     if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
576     echo "---------->> $OUTPUTFILE is up to date " >> run.log 2>&1
577     else
578     touch run.log
579     if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
580     echo "---------->> $OUTPUTFILE is up to date " >> run.log 2>&1
581     echo " no previous run.log: assume NORMAL END" >> run.log 2>&1
582     fi
583 jmc 1.83 fi
584 jmc 1.88 ENDVAL=`cat run.log | grep -v 'ABNORMAL END' | grep -c 'NORMAL END'`
585 jmc 1.75 fi
586 jmc 1.88 rm -f run.log_00
587     #if test "x$RETVAL" = x0 ; then
588     if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
589 jmc 1.46 tail run.log
590 edhill 1.20 echo successful 1>&2
591 edhill 1.44 # === Reduce the size of the testing emails!
592 jmc 1.87 #cp $OUTPUTFILE $CDIR"/"$OUTPUTFILE
593 jmc 1.48 if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
594 edhill 1.6 return 0
595     else
596 edhill 1.20 tail run.log
597 jmc 1.88 echo failed '(run:' $RETVAL ' end:' $ENDVAL ')' 1>&2
598 edhill 1.20 cp run.log $CDIR"/run.log"
599 jmc 1.48 if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
600 edhill 1.6 return 1
601 edhill 1.1 fi
602     )
603     }
604    
605     createcodelet()
606     {
607     # create codelet for comparing model output
608    
609 edhill 1.34 printf "creating the comparison code... "
610 jmc 1.91 cat > tr_cmpnum.c <<EOF
611 edhill 1.22 #include <stdio.h>
612     #include <math.h>
613     int main( int argc, char** argv ) {
614 jmc 1.91 int linnum,cmplin,best,lncnt;
615 edhill 1.52 double a,b,abave,relerr;
616 jmc 1.57 best = -22;
617 adcroft 1.33 lncnt = 0;
618     while( 1 & (lncnt+=1) < 999 ) {
619 edhill 1.22 scanf("%d", &linnum);
620     if (linnum == -1) break;
621     scanf("%lf", &a); scanf("%lf", &b);
622 edhill 1.52 abave = 0.5*(fabs(a)+fabs(b));
623 jmc 1.91 if ( abave == abave ) {
624     if (abave > 0.0) {
625     relerr=fabs(a-b)/abave;
626     if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
627     else { cmplin = -16 ; }
628     best = (best > cmplin) ? best : cmplin; }
629     else { cmplin = -22 ; }
630     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
631     }
632     else {
633     /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
634     break; }
635 edhill 1.22 }
636 adcroft 1.33 if (lncnt == 999) best=-29;
637 jmc 1.91 if (linnum != -1) best=-99;
638 edhill 1.22 printf("%d\n", -best);
639     return 0;
640     }
641     EOF
642 jmc 1.91 $CC -o tr_cmpnum tr_cmpnum.c -lm
643 edhill 1.1
644 jmc 1.91 if [ -x ./tr_cmpnum ]; then
645 edhill 1.1 echo "OK"
646     return 0
647     else
648     echo
649 edhill 1.58 echo "ERROR: failed to compile comparison code -- please specify"
650     echo " a C compiler using the CC environment variable."
651 edhill 1.1 exit 1
652     fi
653     }
654    
655     formatresults()
656     {
657     # formatresults expt genmake depend make run results*
658    
659     nm=$1
660     printf '%s %s %s %s' $2 $3 $4 $5
661     shift; shift; shift; shift; shift;
662     printf '%3s' $@
663    
664     if [ $1 = '--' ]; then
665     printf ' N/O '
666     else
667 jmc 1.92 if [ $1 -ge $MATCH_CRIT ]; then
668 edhill 1.1 printf ' pass'
669     else
670     printf ' FAIL'
671     fi
672     fi
673     printf ' %s' $nm
674     printf '\n'
675    
676     }
677    
678     scandirs()
679     {
680 jmc 1.81 if [ $# -eq 1 ]; then
681     for arg in * ; do
682     test -d $arg/$1 && echo $arg
683     done
684 edhill 1.1 else
685 jmc 1.81 echo $*
686 edhill 1.1 fi
687     }
688    
689    
690     ###############################################################################
691    
692    
693     # Default properties
694     debug=0
695     verbose=1
696     clean=0
697     expts=''
698 edhill 1.6 # ieee=1
699 edhill 1.10
700 edhill 1.40 IEEE=true
701 edhill 1.10 if test "x$MITGCM_IEEE" != x ; then
702     IEEE=$MITGCM_IEEE
703     fi
704    
705    
706     CLEANUP=f
707     QUICK=f
708     NOGENMAKE=f
709     NOCLEAN=f
710     NODEPEND=f
711 edhill 1.68 POSTCLEAN=f
712 edhill 1.1
713 edhill 1.4 BASH=
714 edhill 1.10 OPTFILE=NONE
715     ADDRESSES=
716 edhill 1.1 TESTDIRS=
717 jmc 1.89 SKIPDIRS=
718 edhill 1.1 MPACKDIR="../tools/mpack-1.6"
719 edhill 1.20 HAVE_MPACK=
720 edhill 1.1 MPACK="$MPACKDIR/mpack"
721 edhill 1.24 COMMAND=
722 edhill 1.59 if test "x$MAKE" = x ; then
723     MAKE=make
724     fi
725     if test "x$CC" = x ; then
726     CC=cc
727     fi
728 edhill 1.43 JOBS=
729 edhill 1.7 MPI=f
730 jmc 1.83 MULTI_THREAD=f
731 jmc 1.70 OUTDIR=
732 edhill 1.40 DELDIR=
733 edhill 1.1
734 edhill 1.24 ADM=
735    
736 edhill 1.49 # Additional monitor types
737 edhill 1.50 PTRACERS_NUM="1 2 3 4 5"
738 edhill 1.49
739 jmc 1.92 MATCH_CRIT=13
740    
741 edhill 1.34 printf "parsing options... "
742 edhill 1.1
743     ac_prev=
744     for ac_option ; do
745    
746     # If the previous option needs an argument, assign it.
747     if test -n "$ac_prev"; then
748     eval "$ac_prev=\$ac_option"
749     ac_prev=
750     continue
751     fi
752    
753     ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
754    
755     case $ac_option in
756    
757     -help | --help | -h | --h)
758     usage ;;
759    
760 edhill 1.2 -optfile | --optfile | -of | --of)
761 edhill 1.10 ac_prev=OPTFILE ;;
762 edhill 1.2 -optfile=* | --optfile=* | -of=* | --of=*)
763 edhill 1.10 OPTFILE=$ac_optarg ;;
764 edhill 1.1
765     -addr | --addr | -a | --a)
766     ac_prev=ADDRESSES ;;
767     -addr=* | --addr=*)
768     ADDRESSES=$ac_optarg ;;
769    
770     -tdir | --tdir | -t | --t)
771     ac_prev=TESTDIRS ;;
772     -tdir=* | --tdir=*)
773     TESTDIRS=$ac_optarg ;;
774 edhill 1.4
775 jmc 1.89 -skipdir | --skipdir | -skd | --skd)
776     ac_prev=SKIPDIRS ;;
777     -skipdir=* | --skipdir=*)
778     SKIPDIRS=$ac_optarg ;;
779    
780 edhill 1.4 -bash | --bash | -b | --b)
781     ac_prev=BASH ;;
782     -bash=* | --bash=*)
783     BASH=$ac_optarg ;;
784 edhill 1.5
785 edhill 1.6 -command | --command | -c | --c)
786     ac_prev=COMMAND ;;
787     -command=* | --command=*)
788     COMMAND=$ac_optarg ;;
789 edhill 1.8
790     -make | --make | -m | --m)
791     ac_prev=MAKE ;;
792     -make=* | --make=*)
793     MAKE=$ac_optarg ;;
794 edhill 1.1
795 jmc 1.70 -odir | --odir)
796     ac_prev=OUTDIR ;;
797     -odir=* | --odir=*)
798     OUTDIR=$ac_optarg ;;
799    
800 edhill 1.50 -ptracers | --ptracers | -ptr | --ptr)
801     ac_prev=PTRACERS_NUM ;;
802     -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
803     PTRACERS_NUM=$ac_optarg ;;
804    
805 jmc 1.92 -match | --match ) ac_prev=MATCH_CRIT ;;
806     -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
807    
808 edhill 1.43 -j) ac_prev=JOBS ;;
809     -j=*) JOBS=$ac_optarg ;;
810    
811 edhill 1.10 -clean | --clean)
812 jmc 1.69 CLEANUP=t ; DELDIR=t ;;
813 edhill 1.10
814     -quick | --quick | -q | --q)
815     QUICK=t ;;
816     -nogenmake | --nogenmake | -ng | --ng)
817     NOGENMAKE=t ;;
818     -noclean | --noclean | -nc | --nc)
819     NOCLEAN=t ;;
820     -nodepend | --nodepend | -nd | --nd)
821     NODEPEND=t ;;
822    
823 edhill 1.68 -postclean | --postclean | -pc | --pc)
824     POSTCLEAN=t ;;
825    
826 edhill 1.18 -mpi) MPI=t ;;
827 edhill 1.10
828 jmc 1.83 -mth) MULTI_THREAD=t ;;
829    
830 edhill 1.24 -adm | -ad) ADM=t ;;
831    
832 edhill 1.10 -ieee) IEEE=true ;;
833     -noieee) IEEE= ;;
834    
835 edhill 1.1 -verbose) verbose=2 ;;
836     -debug) debug=1 ;;
837     -quiet) verbose=0 ;;
838    
839 edhill 1.40 -deldir | -dd) DELDIR=t ;;
840    
841 ce107 1.90 -ts) TS=t;;
842    
843     -papis) PAPIS=t;;
844    
845     -pcls) PCL=t;;
846    
847 edhill 1.1 -*)
848     echo "Error: unrecognized option: "$ac_option
849     usage
850     ;;
851    
852     *)
853     echo "Error: unrecognized argument: "$ac_option
854     usage
855     ;;
856    
857     esac
858    
859     done
860    
861 edhill 1.10 if test "x$QUICK" = xt ; then
862     NOGENMAKE=t
863     NOCLEAN=t
864     NODEPEND=t
865     fi
866    
867 edhill 1.1 if test "x$TESTDIRS" = x ; then
868 jmc 1.81 if test "x$ADM" = xt ; then
869 jmc 1.89 LIST=`scandirs results_ad`
870 jmc 1.81 else
871 jmc 1.89 LIST=`scandirs results`
872 jmc 1.81 fi
873 jmc 1.84 else
874     #- expand group of experiments:
875     LIST=" "
876     for xx in $TESTDIRS
877     do
878     case $xx in
879 jmc 1.86 'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
880     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
881     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
882 jmc 1.84 ;;
883     'tutorials')
884     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
885     *) LIST=${LIST}" "$xx ;;
886     esac
887     done
888 jmc 1.89 fi
889     #echo 'LIST='${LIST}'<'
890     #- skip dirs, remove duplicate and non-directory:
891     TESTDIRS=" "
892     count=0
893     for xx in $LIST
894     do
895     yy=`echo $SKIPDIRS | grep -c $xx`
896     if test $yy = 0 ; then
897 jmc 1.84 if test -d $xx ; then
898     yy=`echo $TESTDIRS | grep -c $xx`
899     if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
900 jmc 1.89 else count=1 ;
901     echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
902     fi
903     else
904     if test $count = 1 ; then echo -n ", \"$xx\""
905     else count=1 ; echo "" ; echo -n " skip: \"$xx\""
906 jmc 1.84 fi
907 jmc 1.89 fi
908     done
909     if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
910 jmc 1.84 #echo 'TESTDIRS='${TESTDIRS}'<'
911 edhill 1.1
912 edhill 1.10 if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
913     OPTFILE=$MITGCM_OF
914     fi
915    
916 jmc 1.76 if test "x$ADM" = xt ; then
917     EXECUTABLE="mitgcmuv_ad"
918 jmc 1.78 OUTPUTFILE="output_adm.txt"
919 jmc 1.76 else
920     EXECUTABLE="mitgcmuv"
921     OUTPUTFILE="output.txt"
922     fi
923    
924 jmc 1.87 if test "x$COMMAND" = x ; then
925 jmc 1.77 COMMAND="./$EXECUTABLE > $OUTPUTFILE"
926 edhill 1.24 fi
927 jmc 1.87 if test "x$MPI" = xt ; then
928     OUTPUTFILE="STDOUT.0000"
929 edhill 1.24 fi
930    
931 jmc 1.76 #echo "OK"
932     echo "OK (COMMAND= $COMMAND )"
933 edhill 1.1
934     # create the FORTRAN comparison code
935     createcodelet
936    
937     # build the mpack utility
938 edhill 1.31 if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
939 edhill 1.32 echo "skipping mpack build"
940     else
941 edhill 1.31 build_mpack
942     fi
943 edhill 1.1
944     # Create a uniquely named directory to store results
945     MACH=`hostname`
946 edhill 1.2 UNAMEA=`uname -a`
947 edhill 1.1 DATE=`date +%Y%m%d`
948 edhill 1.25 BASE="tr_"$MACH"_"$DATE"_"
949 jmc 1.70 if test "x$OUTDIR" != x ; then
950     BASE="tr_"$OUTDIR"_"$DATE"_"
951     fi
952 edhill 1.1 DNUM=0
953     DRESULTS="$BASE$DNUM"
954     while test -e $DRESULTS ; do
955     DNUM=$(( $DNUM + 1 ))
956     DRESULTS="$BASE$DNUM"
957     done
958     mkdir $DRESULTS
959     RETVAL=$?
960     if test "x$RETVAL" != x0 ; then
961 edhill 1.20 echo "ERROR: Can't create results directory \"./$DRESULTS\""
962 edhill 1.1 exit 1
963     fi
964     SUMMARY="$DRESULTS/summary.txt"
965 edhill 1.34 printf "Start time: " >> $SUMMARY
966 edhill 1.16 start_date=`date`
967 edhill 1.17 echo $start_date > $SUMMARY
968 edhill 1.1
969 edhill 1.11 of_path=
970 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
971     if test -r $OPTFILE ; then
972 edhill 1.11 # get the path
973     path=${OPTFILE%/*}
974     if test "x$path" = x ; then
975     of_path=`pwd`
976     else
977     of_path=`( cd $path > /dev/null 2>&1 ; pwd )`
978     fi
979     file=${OPTFILE##*/}
980     OPTFILE=$of_path/$file
981 edhill 1.21 cp $OPTFILE $DRESULTS
982     echo >> $SUMMARY
983     echo " OPTFILE=$OPTFILE" >> $SUMMARY
984 edhill 1.11 else
985 edhill 1.21 echo | tee $SUMMARY
986     echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
987     exit 1
988 edhill 1.10 fi
989 edhill 1.21 else
990     echo >> $SUMMARY
991     echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
992     echo " so the genmake default will be used." >> $SUMMARY
993 edhill 1.10 fi
994     echo
995     echo >> $SUMMARY
996 edhill 1.24 if test "x$ADM" = x ; then
997 jmc 1.92 if [ $MATCH_CRIT -lt 10 ] ;
998     then line_0=" "$MATCH_CRIT ;
999     else line_0=" "$MATCH_CRIT ; fi
1000     line_0=" $line_0 ----T----- ----S----- ----U----- ----V-----"
1001     # line_0=" ----T----- ----S----- ----U----- ----V-----"
1002 edhill 1.49 line_1="G D M c m s m s m s m s"
1003     line_2="E p a R g m m e . m m e . m m e . m m e ."
1004     line_3="N n k u 2 i a a d i a a d i a a d i a a d"
1005     line_4="2 d e n d n x n . n x n . n x n . n x n ."
1006 edhill 1.50 for ii in $PTRACERS_NUM ; do
1007 edhill 1.49 # tst=`eval 'echo $HAVE_PTR0'$ii`
1008     # if test "x$tst" = xt ; then
1009     line_0="$line_0 --PTR 0"$ii"--"
1010     line_1="$line_1 m s"
1011     line_2="$line_2 m m e ."
1012     line_3="$line_3 i a a d"
1013     line_4="$line_4 n x n ."
1014     # fi
1015     done
1016     echo "$line_0" | tee -a $SUMMARY
1017     echo "$line_1" | tee -a $SUMMARY
1018     echo "$line_2" | tee -a $SUMMARY
1019     echo "$line_3" | tee -a $SUMMARY
1020     echo "$line_4" | tee -a $SUMMARY
1021     echo " " | tee -a $SUMMARY
1022 edhill 1.24 else
1023     echo "ADJOINT=true" >> $SUMMARY
1024     echo >> $SUMMARY
1025     cat << EOF | tee -a $SUMMARY
1026     G D M C G
1027     E p a R o r
1028     N n k u s a
1029     2 d e n t d
1030    
1031     EOF
1032     fi
1033 edhill 1.1
1034 edhill 1.10 # ...and each test directory...
1035     for dir in $TESTDIRS ; do
1036    
1037     # Cleanup only!
1038     if test "x$CLEANUP" = xt ; then
1039     if test -r $dir/build/Makefile ; then
1040 jmc 1.83 echo ' ------ clean dir:' $dir/build
1041 edhill 1.10 ( cd $dir/build ; make CLEAN )
1042     fi
1043 jmc 1.83 if test -d $dir/run/CVS ; then
1044     echo ' ------ clean dir:' $dir/run
1045     run_clean $dir/run
1046 edhill 1.10 fi
1047 edhill 1.62 (
1048     cd $dir
1049     rm -rf tr_run.*
1050     )
1051 edhill 1.10 continue
1052 edhill 1.1 fi
1053 edhill 1.3
1054 edhill 1.10 # Verify that the testdir exists and contains previous
1055     # results in the correct location--or skip this directory!
1056 edhill 1.24 fout=
1057     if test "x$ADM" = x ; then
1058     fout=$dir"/results/output.txt"
1059     else
1060 jmc 1.78 fout=$dir"/results_ad/output_adm.txt"
1061 edhill 1.24 fi
1062     if test ! -r $fout ; then
1063     echo "can't read \"$fout\" -- skipping $dir"
1064 edhill 1.10 continue
1065     fi
1066 edhill 1.53 if test "x$ADM" = x ; then
1067     check_for_add_mon_output $fout
1068     fi
1069 edhill 1.7
1070 edhill 1.49 # Check for additional types of monitor output
1071    
1072 jmc 1.83 builddir="build"
1073     if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1074     rundir="run"
1075     #rundir=$builddir
1076     if test ! -d $dir/$rundir ; then
1077     rundir=$builddir
1078 edhill 1.10 fi
1079    
1080 edhill 1.24 if test "x$ADM" = x ; then
1081 edhill 1.27 code_dir=code
1082 edhill 1.24 CODE_DIR=$dir/code
1083 jmc 1.83 input_dirs='input'
1084 edhill 1.24 else
1085 edhill 1.27 code_dir=code_ad
1086 edhill 1.24 CODE_DIR=$dir/code_ad
1087 jmc 1.83 input_dirs='input_ad input'
1088 edhill 1.24 fi
1089 edhill 1.10 BUILD_DIR=$dir/$builddir
1090 edhill 1.28
1091 edhill 1.30 if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1092 edhill 1.28 echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1093     continue
1094     fi
1095 jmc 1.83 if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1096     echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1097     continue
1098     fi
1099    
1100     # Check whether there are "extra runs" for this testdir
1101     extra_runs=
1102     if test "x$ADM" = x ; then
1103     ex_run_dirs=`( cd $dir ; echo input.* )`
1104     #echo "ex_run_dirs='$ex_run_dirs'"
1105     for exd in $ex_run_dirs ; do
1106     name=`echo $exd | sed -e 's/input.//g'`
1107 jmc 1.85 outf="$dir/results/output.$name.txt"
1108 jmc 1.83 if test -f $outf -a -r $outf ; then
1109     if test "x$MULTI_THREAD" = "xt" ; then
1110     if test -r $dir"/"$exd"/eedata.mth" ; then
1111     extra_runs="$extra_runs $name"
1112     #else echo $dir"/"$exd"/eedata.mth: not found"
1113     fi
1114     else
1115     extra_runs="$extra_runs $name"
1116     fi
1117     fi
1118     done
1119     fi
1120 edhill 1.28
1121     echo "-------------------------------------------------------------------------------"
1122     echo
1123 jmc 1.83 if test "x$extra_runs" = "x" ; then
1124     echo "Experiment: $dir"
1125     else
1126     echo "Experiment: $dir ; extra_runs=$extra_runs"
1127     fi
1128 edhill 1.28 echo
1129     unset genmake makedepend make run
1130 jmc 1.73 results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1131 edhill 1.10
1132     # Create an output dir for each OPTFILE/tdir combination
1133 edhill 1.20 rel_CDIR=$DRESULTS"/"$dir
1134     mkdir $rel_CDIR
1135     CDIR=`pwd`"/$rel_CDIR"
1136 edhill 1.10
1137     if test "x$CLEANUP" = xt ; then
1138 jmc 1.83 echo '====>>> this is to check that we never go through this part <<< ==='
1139     makeclean $dir/$builddir \
1140     && run_clean $dir/$rundir
1141 edhill 1.10 else
1142 edhill 1.1 genmakemodel $dir/$builddir && genmake=Y \
1143     && makeclean $dir/$builddir \
1144 jmc 1.83 && run_clean $dir/$rundir \
1145 edhill 1.27 && symlink_mpifiles $dir $code_dir $builddir \
1146 edhill 1.1 && makedependmodel $dir/$builddir && makedepend=Y \
1147     && makemodel $dir/$builddir && make=Y \
1148 jmc 1.83 && linkdata $dir/$rundir $input_dirs \
1149 edhill 1.12 && runmodel $dir/$rundir && run=Y \
1150 jmc 1.85 && results=`testoutput $dir $rundir "txt"`
1151 edhill 1.10 fi
1152    
1153     echo
1154 edhill 1.24 if test "x$ADM" = x ; then
1155     fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1156 edhill 1.34 echo
1157     echo "$fres" >> $SUMMARY
1158     echo "fresults='$fres'" > $CDIR"/summary.txt"
1159     echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1160     echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1161     echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1162     echo "tdir='$dir'" >> $CDIR"/summary.txt"
1163    
1164     for ex in $extra_runs ; do
1165 jmc 1.73 unset run
1166     results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1167     # Create an output dir for each OPTFILE/tdir.ex combination
1168     rel_CDIR=$DRESULTS"/"$dir"."$ex
1169     mkdir $rel_CDIR
1170     CDIR=`pwd`"/$rel_CDIR"
1171 edhill 1.61 test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1172 jmc 1.83 run_clean $dir/tr_run.$ex
1173     linkdata $dir/tr_run.$ex input.$ex input
1174 jmc 1.42 runmodel $dir/tr_run.$ex && run=Y \
1175 jmc 1.85 && results=`testoutput $dir tr_run.$ex ${ex}".txt"`
1176 edhill 1.34 fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1177     fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1178     fres="$fres.$ex"
1179     echo
1180     echo "$fres" >> $SUMMARY
1181     echo "fresults='$fres'" > $CDIR"/summary.txt"
1182     echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1183     echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1184     echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1185 jmc 1.73 echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1186 jmc 1.83 if test "x$POSTCLEAN" = xt ; then
1187     run_clean $dir/tr_run.$ex
1188     fi
1189 edhill 1.34 done
1190 edhill 1.24 else
1191     fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1192     fres=$fres"$results $dir"
1193 edhill 1.34 echo
1194     echo "$fres" >> $SUMMARY
1195     echo "fresults='$fres'" > $CDIR"/summary.txt"
1196     echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1197     echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1198     echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1199     echo "tdir='$dir'" >> $CDIR"/summary.txt"
1200 jmc 1.77 grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1201     >> $CDIR"/summary.txt"
1202 edhill 1.24 fi
1203 edhill 1.68
1204 jmc 1.83 #postclean $dir/$builddir
1205     if test "x$POSTCLEAN" = xt ; then
1206     makeclean $dir/$builddir \
1207     && run_clean $dir/$rundir
1208     fi
1209 edhill 1.10
1210     echo "-------------------------------------------------------------------------------"
1211    
1212 edhill 1.1 done
1213    
1214 edhill 1.34 printf "Start time: " >> $SUMMARY
1215 edhill 1.16 echo $start_date >> $SUMMARY
1216 edhill 1.34 printf "End time: " >> $SUMMARY
1217 edhill 1.13 date >> $SUMMARY
1218 edhill 1.20
1219     # If addresses were supplied and mpack built successfully, then try
1220     # to send email using mpack.
1221     if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1222     echo "No results email was sent."
1223     else
1224     if test "x$HAVE_MPACK" = xt ; then
1225     tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1226     && gzip $DRESULTS".tar" \
1227 edhill 1.44 && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1228 edhill 1.20 RETVAL=$?
1229     if test "x$RETVAL" != x0 ; then
1230     echo
1231     echo "Warning: The tar, gzip, & mpack step failed. Please send email"
1232     echo " to <MITgcm-support@mitgcm.org> for help. You may copy the "
1233     echo " summary of results from the directory \"$DRESULTS\"."
1234     echo
1235     else
1236     echo
1237     echo "An email containing results was sent to the following addresses:"
1238     echo " \"$ADDRESSES\""
1239     echo
1240     fi
1241     test -f $DRESULTS".tar" && rm -f $DRESULTS".tar"
1242     test -f $DRESULTS".tar.gz" && rm -f $DRESULTS".tar.gz"
1243     fi
1244     fi
1245 edhill 1.13
1246 jmc 1.91 rm -f tr_cmpnum.c tr_cmpnum
1247 edhill 1.1
1248 edhill 1.12 if test "x$CLEANUP" != xt ; then
1249 jmc 1.65 cat $SUMMARY | sed 's/ -- -- -- --//g'
1250 edhill 1.25 if test -e tr_out.txt ; then
1251     mv tr_out.txt tr_out.txt.old
1252 edhill 1.14 fi
1253 jmc 1.65 cat $SUMMARY | sed 's/ -- -- -- --//g' > tr_out.txt
1254 edhill 1.12 fi
1255 edhill 1.1
1256 edhill 1.40 if test "x$DELDIR" = xt ; then
1257     rm -rf $DRESULTS
1258     fi
1259    

  ViewVC Help
Powered by ViewVC 1.1.22