/[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.93 - (hide annotations) (download)
Wed Sep 5 16:09:31 2007 UTC (16 years, 7 months ago) by jmc
Branch: MAIN
Changes since 1.92: +42 -41 lines
cosmetic changes: rename some functions to make it easier to grep for

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

  ViewVC Help
Powered by ViewVC 1.1.22