/[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.80 - (hide annotations) (download)
Thu Jun 8 21:39:35 2006 UTC (17 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58i_post
Changes since 1.79: +9 -7 lines
ad testing: start to link files from ../input_ad and then from ../input
 (and not the reverse)

1 edhill 1.19 #! /usr/bin/env bash
2 edhill 1.1 #
3 jmc 1.80 # $Header: /u/gcmpack/MITgcm/verification/testreport,v 1.79 2006/06/07 01:20:26 heimbach 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 jmc 1.80 files=`( cd ../input_ad ; ls -1 | grep -v CVS )`
493 edhill 1.24 for i in $files ; do
494 jmc 1.80 if test ! -d "../input_ad/"$i ; then
495     ln -sf "../input_ad/"$i $i
496 edhill 1.24 fi
497     done
498 jmc 1.80 files=`( cd ../input ; ls -1 | grep -v CVS )`
499 edhill 1.24 for i in $files ; do
500 jmc 1.80 if test ! -d "../input/"$i ; then
501     if test ! -r $i ; then
502     ln -sf "../input/"$i $i
503     fi
504 edhill 1.24 fi
505     done
506     fi
507 edhill 1.12 )
508 edhill 1.1 fi
509     }
510    
511     runmodel()
512     {
513 edhill 1.6 # runmodel directory
514 edhill 1.1 #
515 edhill 1.24 # runs "$COMMAND in "directory"
516 edhill 1.6 # (where "$COMMAND" is relative to "directory")
517 edhill 1.1 (
518     cd $1
519 jmc 1.75 printf 'runmodel in %s ...' $1 1>&2
520 edhill 1.6 # make output.txt
521 edhill 1.38 echo
522 jmc 1.46 rm -f run.log
523 jmc 1.76 if test $OUTPUTFILE -ot $EXECUTABLE ; then
524 jmc 1.75 ( eval $COMMAND ) > run.log 2>&1
525     RETVAL=$?
526     else
527 jmc 1.76 echo " $OUTPUTFILE is up to date " > run.log 2>&1
528 jmc 1.75 RETVAL=0
529     fi
530 edhill 1.39 # echo "COMMAND='$COMMAND'"
531     # echo "pwd='"`pwd`"'"
532 edhill 1.6 if test "x$RETVAL" = x0 ; then
533 jmc 1.46 tail run.log
534 edhill 1.20 echo successful 1>&2
535 edhill 1.44 # === Reduce the size of the testing emails!
536     # if test "x$ADM" = x ; then
537     # cp output.txt $CDIR"/output.txt"
538     # else
539 jmc 1.78 # cp output_adm.txt $CDIR"/output_adm.txt"
540 edhill 1.44 # fi
541 jmc 1.48 if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
542 edhill 1.6 return 0
543     else
544 edhill 1.20 tail run.log
545     echo failed 1>&2
546     cp run.log $CDIR"/run.log"
547 jmc 1.48 if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
548 edhill 1.6 return 1
549 edhill 1.1 fi
550     )
551     }
552    
553     createcodelet()
554     {
555     # create codelet for comparing model output
556    
557 edhill 1.34 printf "creating the comparison code... "
558 edhill 1.22 cat > tmp_cmpnum.c <<EOF
559     #include <stdio.h>
560     #include <math.h>
561     int main( int argc, char** argv ) {
562 adcroft 1.33 int linnum,best,lncnt;
563 edhill 1.52 double a,b,abave,relerr;
564 jmc 1.57 best = -22;
565 adcroft 1.33 lncnt = 0;
566     while( 1 & (lncnt+=1) < 999 ) {
567 edhill 1.22 scanf("%d", &linnum);
568     if (linnum == -1) break;
569     scanf("%lf", &a); scanf("%lf", &b);
570 edhill 1.52 abave = 0.5*(fabs(a)+fabs(b));
571     if (abave > 0.0) {
572     relerr=fabs(a-b)/abave;
573 edhill 1.64 if (relerr > 0.0) { linnum = (int)rint(log10(relerr)); }
574 jmc 1.57 else { linnum = -16 ; }
575     best = (best > linnum) ? best : linnum;
576 edhill 1.22 }
577     }
578 adcroft 1.33 if (lncnt == 999) best=-29;
579 edhill 1.22 printf("%d\n", -best);
580     return 0;
581     }
582     EOF
583 edhill 1.58 $CC -o tmp_cmpnum tmp_cmpnum.c -lm
584 edhill 1.1
585 edhill 1.22 if [ -x ./tmp_cmpnum ]; then
586 edhill 1.1 echo "OK"
587     return 0
588     else
589     echo
590 edhill 1.58 echo "ERROR: failed to compile comparison code -- please specify"
591     echo " a C compiler using the CC environment variable."
592 edhill 1.1 exit 1
593     fi
594     }
595    
596     formatresults()
597     {
598     # formatresults expt genmake depend make run results*
599    
600     nm=$1
601     printf '%s %s %s %s' $2 $3 $4 $5
602     shift; shift; shift; shift; shift;
603     printf '%3s' $@
604    
605     if [ $1 = '--' ]; then
606     printf ' N/O '
607     else
608     if [ $1 -gt 12 ]; then
609     printf ' pass'
610     else
611     printf ' FAIL'
612     fi
613     fi
614     printf ' %s' $nm
615     printf '\n'
616    
617     }
618    
619     show_help()
620     {
621     cat - << EOF
622     $0 [-help] [-quick] [-verbose] dir1 [dir2] [...]
623 edhill 1.10
624     -help|-h Show this help message
625 edhill 1.1 -quiet Reduce the amount of output
626     -verbose Produce copious amounts of output
627     -debug Produce even more output which will mean nothing to most
628     -force Do "make CLEAN" before compiling. This forces a complete rebuild.
629     -clean Do "make CLEAN" after compiling and testing.
630     -cleanup Aggresively removes all model output, executables and object files
631     and then exits. Use with care.
632    
633     Normal usage:
634     $0 * Configure, compile, run and analyze in all experiment directories
635     EOF
636     }
637    
638     scandirs()
639     {
640     if [ $# -eq 0 ]; then
641     for arg in * ; do
642     test -d $arg/input && echo $arg
643     done
644     else
645     echo $*
646     fi
647     }
648    
649    
650     ###############################################################################
651    
652    
653     # Default properties
654     debug=0
655     verbose=1
656     clean=0
657     expts=''
658 edhill 1.6 # ieee=1
659 edhill 1.10
660 edhill 1.40 IEEE=true
661 edhill 1.10 if test "x$MITGCM_IEEE" != x ; then
662     IEEE=$MITGCM_IEEE
663     fi
664    
665    
666     CLEANUP=f
667     QUICK=f
668     NOGENMAKE=f
669     NOCLEAN=f
670     NODEPEND=f
671 edhill 1.68 POSTCLEAN=f
672 edhill 1.1
673 edhill 1.4 BASH=
674 edhill 1.10 OPTFILE=NONE
675     ADDRESSES=
676 edhill 1.1 TESTDIRS=
677     MPACKDIR="../tools/mpack-1.6"
678 edhill 1.20 HAVE_MPACK=
679 edhill 1.1 MPACK="$MPACKDIR/mpack"
680 edhill 1.24 COMMAND=
681 edhill 1.59 if test "x$MAKE" = x ; then
682     MAKE=make
683     fi
684     if test "x$CC" = x ; then
685     CC=cc
686     fi
687 edhill 1.43 JOBS=
688 edhill 1.7 MPI=f
689 jmc 1.70 OUTDIR=
690 edhill 1.40 DELDIR=
691 edhill 1.1
692 edhill 1.24 ADM=
693    
694 edhill 1.49 # Additional monitor types
695 edhill 1.50 PTRACERS_NUM="1 2 3 4 5"
696 edhill 1.49
697 edhill 1.34 printf "parsing options... "
698 edhill 1.1
699     ac_prev=
700     for ac_option ; do
701    
702     # If the previous option needs an argument, assign it.
703     if test -n "$ac_prev"; then
704     eval "$ac_prev=\$ac_option"
705     ac_prev=
706     continue
707     fi
708    
709     ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
710    
711     case $ac_option in
712    
713     -help | --help | -h | --h)
714     usage ;;
715    
716 edhill 1.2 -optfile | --optfile | -of | --of)
717 edhill 1.10 ac_prev=OPTFILE ;;
718 edhill 1.2 -optfile=* | --optfile=* | -of=* | --of=*)
719 edhill 1.10 OPTFILE=$ac_optarg ;;
720 edhill 1.1
721     -addr | --addr | -a | --a)
722     ac_prev=ADDRESSES ;;
723     -addr=* | --addr=*)
724     ADDRESSES=$ac_optarg ;;
725    
726     -tdir | --tdir | -t | --t)
727     ac_prev=TESTDIRS ;;
728     -tdir=* | --tdir=*)
729     TESTDIRS=$ac_optarg ;;
730 edhill 1.4
731     -bash | --bash | -b | --b)
732     ac_prev=BASH ;;
733     -bash=* | --bash=*)
734     BASH=$ac_optarg ;;
735 edhill 1.5
736 edhill 1.6 -command | --command | -c | --c)
737     ac_prev=COMMAND ;;
738     -command=* | --command=*)
739     COMMAND=$ac_optarg ;;
740 edhill 1.8
741     -make | --make | -m | --m)
742     ac_prev=MAKE ;;
743     -make=* | --make=*)
744     MAKE=$ac_optarg ;;
745 edhill 1.1
746 jmc 1.70 -odir | --odir)
747     ac_prev=OUTDIR ;;
748     -odir=* | --odir=*)
749     OUTDIR=$ac_optarg ;;
750    
751 edhill 1.50 -ptracers | --ptracers | -ptr | --ptr)
752     ac_prev=PTRACERS_NUM ;;
753     -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
754     PTRACERS_NUM=$ac_optarg ;;
755    
756 edhill 1.43 -j) ac_prev=JOBS ;;
757     -j=*) JOBS=$ac_optarg ;;
758    
759 edhill 1.10 -clean | --clean)
760 jmc 1.69 CLEANUP=t ; DELDIR=t ;;
761 edhill 1.10
762     -quick | --quick | -q | --q)
763     QUICK=t ;;
764     -nogenmake | --nogenmake | -ng | --ng)
765     NOGENMAKE=t ;;
766     -noclean | --noclean | -nc | --nc)
767     NOCLEAN=t ;;
768     -nodepend | --nodepend | -nd | --nd)
769     NODEPEND=t ;;
770    
771 edhill 1.68 -postclean | --postclean | -pc | --pc)
772     POSTCLEAN=t ;;
773    
774 edhill 1.18 -mpi) MPI=t ;;
775 edhill 1.10
776 edhill 1.24 -adm | -ad) ADM=t ;;
777    
778 edhill 1.10 -ieee) IEEE=true ;;
779     -noieee) IEEE= ;;
780    
781 edhill 1.1 -verbose) verbose=2 ;;
782     -debug) debug=1 ;;
783     -quiet) verbose=0 ;;
784    
785 edhill 1.40 -deldir | -dd) DELDIR=t ;;
786    
787 edhill 1.1 -*)
788     echo "Error: unrecognized option: "$ac_option
789     usage
790     ;;
791    
792     *)
793     echo "Error: unrecognized argument: "$ac_option
794     usage
795     ;;
796    
797     esac
798    
799     done
800    
801 edhill 1.10 if test "x$QUICK" = xt ; then
802     NOGENMAKE=t
803     NOCLEAN=t
804     NODEPEND=t
805     fi
806    
807 edhill 1.1 if test "x$TESTDIRS" = x ; then
808     TESTDIRS=`scandirs`
809     fi
810    
811 edhill 1.10 if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
812     OPTFILE=$MITGCM_OF
813     fi
814    
815 jmc 1.76 if test "x$ADM" = xt ; then
816     EXECUTABLE="mitgcmuv_ad"
817 jmc 1.78 OUTPUTFILE="output_adm.txt"
818 jmc 1.76 else
819     EXECUTABLE="mitgcmuv"
820     OUTPUTFILE="output.txt"
821     fi
822    
823 edhill 1.24 if test "x$ADM" = xt -a "x$COMMAND" = x ; then
824 jmc 1.77 COMMAND="./$EXECUTABLE > $OUTPUTFILE"
825 edhill 1.24 fi
826    
827     if test "x$COMMAND" = x ; then
828 jmc 1.76 COMMAND="./$EXECUTABLE > $OUTPUTFILE"
829 edhill 1.24 fi
830    
831 jmc 1.76 #echo "OK"
832     echo "OK (COMMAND= $COMMAND )"
833 edhill 1.1
834     # create the FORTRAN comparison code
835     createcodelet
836    
837     # build the mpack utility
838 edhill 1.31 if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
839 edhill 1.32 echo "skipping mpack build"
840     else
841 edhill 1.31 build_mpack
842     fi
843 edhill 1.1
844     # Create a uniquely named directory to store results
845     MACH=`hostname`
846 edhill 1.2 UNAMEA=`uname -a`
847 edhill 1.1 DATE=`date +%Y%m%d`
848 edhill 1.25 BASE="tr_"$MACH"_"$DATE"_"
849 jmc 1.70 if test "x$OUTDIR" != x ; then
850     BASE="tr_"$OUTDIR"_"$DATE"_"
851     fi
852 edhill 1.1 DNUM=0
853     DRESULTS="$BASE$DNUM"
854     while test -e $DRESULTS ; do
855     DNUM=$(( $DNUM + 1 ))
856     DRESULTS="$BASE$DNUM"
857     done
858     mkdir $DRESULTS
859     RETVAL=$?
860     if test "x$RETVAL" != x0 ; then
861 edhill 1.20 echo "ERROR: Can't create results directory \"./$DRESULTS\""
862 edhill 1.1 exit 1
863     fi
864     SUMMARY="$DRESULTS/summary.txt"
865 edhill 1.34 printf "Start time: " >> $SUMMARY
866 edhill 1.16 start_date=`date`
867 edhill 1.17 echo $start_date > $SUMMARY
868 edhill 1.1
869 edhill 1.11 of_path=
870 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
871     if test -r $OPTFILE ; then
872 edhill 1.11 # get the path
873     path=${OPTFILE%/*}
874     if test "x$path" = x ; then
875     of_path=`pwd`
876     else
877     of_path=`( cd $path > /dev/null 2>&1 ; pwd )`
878     fi
879     file=${OPTFILE##*/}
880     OPTFILE=$of_path/$file
881 edhill 1.21 cp $OPTFILE $DRESULTS
882     echo >> $SUMMARY
883     echo " OPTFILE=$OPTFILE" >> $SUMMARY
884 edhill 1.11 else
885 edhill 1.21 echo | tee $SUMMARY
886     echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
887     exit 1
888 edhill 1.10 fi
889 edhill 1.21 else
890     echo >> $SUMMARY
891     echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
892     echo " so the genmake default will be used." >> $SUMMARY
893 edhill 1.10 fi
894     echo
895     echo >> $SUMMARY
896 edhill 1.24 if test "x$ADM" = x ; then
897 edhill 1.49 line_0=" ----T----- ----S----- ----U----- ----V-----"
898     line_1="G D M c m s m s m s m s"
899     line_2="E p a R g m m e . m m e . m m e . m m e ."
900     line_3="N n k u 2 i a a d i a a d i a a d i a a d"
901     line_4="2 d e n d n x n . n x n . n x n . n x n ."
902 edhill 1.50 for ii in $PTRACERS_NUM ; do
903 edhill 1.49 # tst=`eval 'echo $HAVE_PTR0'$ii`
904     # if test "x$tst" = xt ; then
905     line_0="$line_0 --PTR 0"$ii"--"
906     line_1="$line_1 m s"
907     line_2="$line_2 m m e ."
908     line_3="$line_3 i a a d"
909     line_4="$line_4 n x n ."
910     # fi
911     done
912     echo "$line_0" | tee -a $SUMMARY
913     echo "$line_1" | tee -a $SUMMARY
914     echo "$line_2" | tee -a $SUMMARY
915     echo "$line_3" | tee -a $SUMMARY
916     echo "$line_4" | tee -a $SUMMARY
917     echo " " | tee -a $SUMMARY
918 edhill 1.24 else
919     echo "ADJOINT=true" >> $SUMMARY
920     echo >> $SUMMARY
921     cat << EOF | tee -a $SUMMARY
922     G D M C G
923     E p a R o r
924     N n k u s a
925     2 d e n t d
926    
927     EOF
928     fi
929 edhill 1.1
930 edhill 1.10 # ...and each test directory...
931     for dir in $TESTDIRS ; do
932    
933     # Cleanup only!
934     if test "x$CLEANUP" = xt ; then
935     if test -r $dir/build/Makefile ; then
936     ( cd $dir/build ; make CLEAN )
937     fi
938     if test -r $dir/input/Makefile ; then
939     ( cd $dir/input ; make CLEAN )
940     fi
941 edhill 1.62 (
942     cd $dir
943     rm -rf tr_run.*
944     )
945 edhill 1.10 continue
946 edhill 1.1 fi
947 edhill 1.3
948 edhill 1.10 # Verify that the testdir exists and contains previous
949     # results in the correct location--or skip this directory!
950 edhill 1.24 fout=
951     if test "x$ADM" = x ; then
952     fout=$dir"/results/output.txt"
953     else
954 jmc 1.78 fout=$dir"/results_ad/output_adm.txt"
955 edhill 1.24 fi
956     if test ! -r $fout ; then
957     echo "can't read \"$fout\" -- skipping $dir"
958 edhill 1.10 continue
959     fi
960 edhill 1.53 if test "x$ADM" = x ; then
961     check_for_add_mon_output $fout
962     fi
963 edhill 1.7
964 edhill 1.49 # Check for additional types of monitor output
965    
966 edhill 1.12 builddir="input"
967     rundir="input"
968     use_seperate_build=0
969     if test -d $dir/build -a -r $dir/build ; then
970     builddir="build"
971     rundir="build"
972     use_seperate_build=1
973     linkdata $use_seperate_build $dir/$rundir
974 edhill 1.10 fi
975    
976 edhill 1.34 # Check whether there are "extra runs" for this testdir
977     extra_runs=
978     if test "x$ADM" = x -a "x$use_seperate_build" = x1 ; then
979     ex_run_dirs=`( cd $dir ; echo input.* )`
980     echo "ex_run_dirs='$ex_run_dirs'"
981     for exd in $ex_run_dirs ; do
982     name=`echo $exd | sed -e 's/input.//g'`
983     outf="$dir/results/output.txt.$name"
984     if test -f $outf -a -r $outf ; then
985     extra_runs="$extra_runs $name"
986     fi
987     done
988     fi
989    
990 edhill 1.24 if test "x$ADM" = x ; then
991 edhill 1.27 code_dir=code
992 edhill 1.24 CODE_DIR=$dir/code
993     else
994 edhill 1.27 code_dir=code_ad
995 edhill 1.24 CODE_DIR=$dir/code_ad
996     fi
997 edhill 1.10 BUILD_DIR=$dir/$builddir
998 edhill 1.28
999 edhill 1.30 if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1000 edhill 1.28 echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1001     continue
1002     fi
1003    
1004     echo "-------------------------------------------------------------------------------"
1005     echo
1006     echo "Experiment: $dir"
1007     echo
1008     unset genmake makedepend make run
1009 jmc 1.73 results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1010 edhill 1.10
1011     # Create an output dir for each OPTFILE/tdir combination
1012 edhill 1.20 rel_CDIR=$DRESULTS"/"$dir
1013     mkdir $rel_CDIR
1014     CDIR=`pwd`"/$rel_CDIR"
1015 edhill 1.10
1016     if test "x$CLEANUP" = xt ; then
1017     makeclean $dir/$builddir
1018     else
1019 edhill 1.1 genmakemodel $dir/$builddir && genmake=Y \
1020     && makeclean $dir/$builddir \
1021 edhill 1.27 && symlink_mpifiles $dir $code_dir $builddir \
1022 edhill 1.1 && makedependmodel $dir/$builddir && makedepend=Y \
1023     && makemodel $dir/$builddir && make=Y \
1024 edhill 1.12 && linkdata $use_seperate_build $dir/$rundir \
1025     && runmodel $dir/$rundir && run=Y \
1026 edhill 1.1 && results=`testoutput $dir $rundir`
1027 edhill 1.10 fi
1028    
1029     echo
1030 edhill 1.24 if test "x$ADM" = x ; then
1031     fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1032 edhill 1.34 echo
1033     echo "$fres" >> $SUMMARY
1034     echo "fresults='$fres'" > $CDIR"/summary.txt"
1035     echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1036     echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1037     echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1038     echo "tdir='$dir'" >> $CDIR"/summary.txt"
1039    
1040     for ex in $extra_runs ; do
1041 jmc 1.73 unset run
1042     results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1043     # Create an output dir for each OPTFILE/tdir.ex combination
1044     rel_CDIR=$DRESULTS"/"$dir"."$ex
1045     mkdir $rel_CDIR
1046     CDIR=`pwd`"/$rel_CDIR"
1047 edhill 1.61 test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1048 edhill 1.62 for ldir in input.$ex input ; do
1049 edhill 1.61 (
1050     cd "$dir/$ldir" > /dev/null 2>&1
1051     ls -1 2>/dev/null \
1052     | sed -e 's|^CVS$||g' | sed -e 's|^output.txt$||g'
1053     ) > tr_exrun_links
1054     (
1055     cd "$dir/tr_run.$ex"
1056     cat ../../tr_exrun_links | while read i ; do
1057     if test ! "x$i" = x ; then
1058 edhill 1.62 test ! -r $i && ln -s "../"$ldir"/"$i $i
1059 edhill 1.61 fi
1060     done
1061     )
1062     test -e tr_exrun_links && rm -f tr_exrun_links
1063     done
1064 edhill 1.62 ldir=build
1065     (
1066 jmc 1.75 cd $dir/tr_run.$ex
1067     test ! -e mitgcmuv && ln -s "../"$ldir"/"mitgcmuv .
1068 edhill 1.62 )
1069 jmc 1.42 runmodel $dir/tr_run.$ex && run=Y \
1070     && results=`testoutput $dir tr_run.$ex "."$ex`
1071 edhill 1.34 fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1072     fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1073     fres="$fres.$ex"
1074     echo
1075     echo "$fres" >> $SUMMARY
1076     echo "fresults='$fres'" > $CDIR"/summary.txt"
1077     echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1078     echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1079     echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1080 jmc 1.73 echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1081 edhill 1.34 done
1082 edhill 1.24 else
1083     fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1084     fres=$fres"$results $dir"
1085 edhill 1.34 echo
1086     echo "$fres" >> $SUMMARY
1087     echo "fresults='$fres'" > $CDIR"/summary.txt"
1088     echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1089     echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1090     echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1091     echo "tdir='$dir'" >> $CDIR"/summary.txt"
1092 jmc 1.77 grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1093     >> $CDIR"/summary.txt"
1094 edhill 1.24 fi
1095 edhill 1.68
1096     postclean $dir/$builddir
1097 edhill 1.10
1098     echo "-------------------------------------------------------------------------------"
1099    
1100 edhill 1.1 done
1101    
1102 edhill 1.34 printf "Start time: " >> $SUMMARY
1103 edhill 1.16 echo $start_date >> $SUMMARY
1104 edhill 1.34 printf "End time: " >> $SUMMARY
1105 edhill 1.13 date >> $SUMMARY
1106 edhill 1.20
1107     # If addresses were supplied and mpack built successfully, then try
1108     # to send email using mpack.
1109     if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1110     echo "No results email was sent."
1111     else
1112     if test "x$HAVE_MPACK" = xt ; then
1113     tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1114     && gzip $DRESULTS".tar" \
1115 edhill 1.44 && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1116 edhill 1.20 RETVAL=$?
1117     if test "x$RETVAL" != x0 ; then
1118     echo
1119     echo "Warning: The tar, gzip, & mpack step failed. Please send email"
1120     echo " to <MITgcm-support@mitgcm.org> for help. You may copy the "
1121     echo " summary of results from the directory \"$DRESULTS\"."
1122     echo
1123     else
1124     echo
1125     echo "An email containing results was sent to the following addresses:"
1126     echo " \"$ADDRESSES\""
1127     echo
1128     fi
1129     test -f $DRESULTS".tar" && rm -f $DRESULTS".tar"
1130     test -f $DRESULTS".tar.gz" && rm -f $DRESULTS".tar.gz"
1131     fi
1132     fi
1133 edhill 1.13
1134 edhill 1.22 # rm -f tmp_cmpnum.f a.out
1135     rm -f tmp_cmpnum.c tmp_cmpnum
1136 edhill 1.1
1137 edhill 1.12 if test "x$CLEANUP" != xt ; then
1138 jmc 1.65 cat $SUMMARY | sed 's/ -- -- -- --//g'
1139 edhill 1.25 if test -e tr_out.txt ; then
1140     mv tr_out.txt tr_out.txt.old
1141 edhill 1.14 fi
1142 jmc 1.65 cat $SUMMARY | sed 's/ -- -- -- --//g' > tr_out.txt
1143 edhill 1.12 fi
1144 edhill 1.1
1145 edhill 1.40 if test "x$DELDIR" = xt ; then
1146     rm -rf $DRESULTS
1147     fi
1148    

  ViewVC Help
Powered by ViewVC 1.1.22