/[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.79 - (hide annotations) (download)
Wed Jun 7 01:20:26 2006 UTC (17 years, 9 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint58h_post, checkpoint58g_post
Changes since 1.78: +1 -2 lines
o make staf default, rather than taf
o in testreport remover hard-wired adof

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

  ViewVC Help
Powered by ViewVC 1.1.22