/[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.137 - (hide annotations) (download)
Tue Mar 30 14:57:49 2010 UTC (14 years ago) by jmc
Branch: MAIN
Changes since 1.136: +13 -7 lines
- use relative path for CDIR (like all other dir)
- add a small "genmake_state" file in $DRESULTS dir.

1 edhill 1.19 #! /usr/bin/env bash
2 edhill 1.1 #
3 jmc 1.137 # $Header: /u/gcmpack/MITgcm/verification/testreport,v 1.136 2010/03/08 16:36:20 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.122 echo " (-mth) run multi-threaded (using eedata.mth)"
15 jmc 1.83 echo " (-mpi) compile and run using MPI"
16 jmc 1.136 echo " (-ieee/-noieee) if possible, use IEEE compiler flags"
17 edhill 1.41 echo " (DEF=\"-ieee\")"
18 jmc 1.109 echo " (-gsl) compile with \"-gsl\" flag"
19 jmc 1.136 echo " (-use_r4|-ur4) if allowed, use real*4 type for '_RS' variable"
20     echo " (-optfile|-of) STRING list of optfiles to use"
21     echo " (-addr|-a) STRING list of email recipients"
22 jmc 1.108 echo " (DEF=\"\" no email is sent)"
23 jmc 1.136 echo " (-mpackdir|-mpd) DIR location of the mpack utility"
24 jmc 1.113 echo " (DEF=\"../tools/mpack-1.6\")"
25 jmc 1.136 echo " (-tdir|-t) STRING list of group and/or exp. dirs to test"
26 jmc 1.84 echo " (recognized groups: basic, tutorials)"
27     echo " (DEF=\"\" which test all)"
28 jmc 1.136 echo " (-skipdir|-skd) STRING list of exp. dirs to skip"
29 jmc 1.89 echo " (DEF=\"\" which test all)"
30 jmc 1.136 echo " (-bash|-b) STRING preferred location of a \"bash\" or"
31 edhill 1.20 echo " Bourne-compatible \"sh\" shell"
32     echo " (DEF=\"\" for \"bash\")"
33 edhill 1.24 echo " (-adm|-ad) perform an adjoint run"
34 utke 1.120 echo " (-oad) perform an OpenAD adjoint run"
35 jmc 1.136 echo " (-command|-c) STRING command to run"
36     echo " (-make|-m) STRING command to use for \"make\""
37 edhill 1.8 echo " (DEF=\"make\")"
38 jmc 1.70 echo " (-odir) STRING used to build output directory name"
39     echo " (DEF=\"hostname\")"
40 jmc 1.136 echo " (-ptracers|-ptr) STRING specify which ptracers to test"
41 edhill 1.50 echo " (DEF=\"1 2 3 4 5\")"
42 jmc 1.92 echo " (-match) NUMBER Matching Criteria (number of digits)"
43     echo " (DEF=\"12\")"
44 edhill 1.43 echo " (-j) JOBS use \"make -j JOBS\" for parallel builds"
45 edhill 1.10 echo " (-clean) *ONLY* run \"make CLEAN\""
46 jmc 1.133 echo " (-norun|-nr) skip the \"runmodel\" stage (stop after make)"
47 jmc 1.136 echo " (-runonly|-ro) *ONLY* run stage (=\"-quick\" without make)"
48 ce107 1.90 echo " (-quick|-q) same as \"-nogenmake -noclean -nodepend\""
49     echo " (-nogenmake|-ng) skip the genmake stage"
50     echo " (-noclean|-nc) skip the \"make clean\" stage"
51     echo " (-nodepend|-nd) skip the \"make depend\" stage"
52     echo " (-deldir|-dd) on success, delete the output directory"
53     echo " (-ts) provide timing information per timestep"
54     echo " (-papis) provide MFlop/s per timestep using PAPI"
55     echo " (-pcls) provide MFlop/s per timestep using PCL"
56 edhill 1.6 echo
57 edhill 1.50 echo "and where STRING can be a whitespace-delimited list"
58 edhill 1.6 echo "such as:"
59 edhill 1.50 echo
60 edhill 1.6 echo " -t 'exp0 exp2 exp3' "
61     echo " -addr='abc@123.com testing@home.org'"
62 edhill 1.1 echo
63 edhill 1.50 echo "provided that the expression is properly quoted within the current"
64     echo "shell (note the use of single quotes to protect white space)."
65     echo
66 edhill 1.1 exit 1
67     }
68    
69     # build the mpack utility
70     build_mpack()
71     {
72 edhill 1.34 printf "building the mpack utility... "
73 jmc 1.113 MPACK="$MPACKDIR/mpack"
74     if test ! -x $MPACK ; then
75 edhill 1.1 if test ! -d $MPACKDIR ; then
76 edhill 1.20 echo
77 edhill 1.1 echo "Error: can't find \"$MPACKDIR\""
78     echo " are you sure this program is being run in the correct "
79     echo " (that is, \"MITGCM_ROOT\verification\") directory?"
80 edhill 1.20 echo
81     HAVE_MPACK=f
82 edhill 1.1 fi
83 edhill 1.26 if test "x$CC" = x ; then
84     export CC=cc
85     fi
86 jmc 1.112 printf "building mpack (using CC=$CC)... "
87 edhill 1.25 ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1
88 edhill 1.1 RETVAL=$?
89     if test "x$RETVAL" != x0 ; then
90     echo
91     echo "Error building the mpack tools at: $MPACK_DIR"
92 edhill 1.20 echo
93     HAVE_MPACK=f
94     else
95 edhill 1.25 rm -f tr_build_mpack.out
96 edhill 1.20 HAVE_MPACK=t
97 jmc 1.113 echo "done"
98 edhill 1.1 fi
99 edhill 1.20 else
100     HAVE_MPACK=t
101 jmc 1.113 echo "already exist"
102 edhill 1.1 fi
103     }
104    
105 jmc 1.93 testoutput_var()
106 edhill 1.1 {
107 jmc 1.99 # testoutput_var dir s1 label subdir reference_output
108 edhill 1.1 #
109 jmc 1.135 # compares 1 variable output selected from file $dir/$subdir/$OUTPUTFILE
110 jmc 1.99 # with same output from reference file $dir/results/$reference_output
111 jmc 1.93 # using search strings s1 and text label
112 edhill 1.1
113     if [ $debug -gt 0 ]; then
114 jmc 1.93 echo testoutput_var: grep "$2" $1/$4/$OUTPUTFILE 1>&2
115 edhill 1.1 fi
116 jmc 1.87 if [ -r $1/$4/$OUTPUTFILE ]; then
117     grep "$2" $1/$4/$OUTPUTFILE | sed 's/.*=//' | cat -n > tmp1.txt
118 jmc 1.67 lncntA=`wc -l tmp1.txt | awk '{print $1}' `
119 jmc 1.100 if [ $lncntA -lt 2 ]; then
120 edhill 1.1 if [ $verbose -gt 0 ]; then
121     echo Not enough lines of output when searching for "$2" 1>&2
122     fi
123     return 99
124     fi
125     else
126 jmc 1.93 echo testoutput_var: $OUTPUTFILE from model run was not readable 1>&2
127 edhill 1.1 return 99
128     fi
129     if [ $debug -gt 0 ]; then
130 jmc 1.99 echo testoutput_var: grep "$2" $1/results/$5 1>&2
131 edhill 1.1 fi
132 jmc 1.99 grep "$2" $1/results/$5 | sed 's/.*=//' | cat -n > tmp2.txt
133 jmc 1.67 lncntB=`wc -l tmp2.txt | awk '{print $1}' `
134 jmc 1.100 if [ $lncntB -lt 2 ]; then
135 edhill 1.1 if [ $verbose -gt 0 ]; then
136     echo Not enough lines of output when searching for "$2" 1>&2
137     fi
138     return 99
139     fi
140 jmc 1.67 if [ $lncntA -ne $lncntB ]; then
141     if [ $verbose -gt 0 ]; then
142     echo Not same Nb of lines when searching for "$2" ":" $lncntA $lncntB 1>&2
143     fi
144     return 99
145     fi
146 edhill 1.72 has_nan=`cat tmp1.txt | grep -i nan | wc -l`
147     if [ $has_nan -gt 0 ] ; then
148 jmc 1.93 echo testoutput_var: $OUTPUTFILE contains $has_nan NaN values 1>&2
149 edhill 1.72 return 99
150     fi
151     has_inf=`cat tmp1.txt | grep -i inf | wc -l`
152     if [ $has_inf -gt 0 ] ; then
153 jmc 1.93 echo testoutput_var: $OUTPUTFILE contains $has_inf Inf values 1>&2
154 jmc 1.71 return 99
155     fi
156 edhill 1.1 if [ $debug -gt 0 ]; then
157 jmc 1.93 echo testoutput_var: join tmp1.txt tmp2.txt 1>&2
158 edhill 1.1 fi
159     join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt
160     if [ $debug -gt 0 ]; then
161 jmc 1.93 echo testoutput_var: compare_lines 1>&2
162 edhill 1.1 fi
163 edhill 1.22 if [ $verbose -gt 1 ]; then
164     cat tmp3.txt 1>&2
165     fi
166     echo "-1" >> tmp3.txt
167 edhill 1.23 # On the SGI O3K (*not* the O2K), "cat -n" inserts a ":" after the line number
168     cat tmp3.txt | sed -e 's|:||g' > tmp4.txt
169 jmc 1.91 digits_of_similarity=`./tr_cmpnum < tmp4.txt`
170 edhill 1.1 if [ $digits_of_similarity -eq 99 ]; then
171     if [ $verbose -gt 0 ]; then
172 jmc 1.99 echo testoutput_var: No comparison was available for \"$3\" 1>&2
173 edhill 1.1 fi
174     digits_of_similarity=99
175     else
176     if [ $verbose -gt 0 ]; then
177 jmc 1.99 echo There were $digits_of_similarity decimal places of similarity for \"$3\" 1>&2
178 edhill 1.1 fi
179     fi
180 edhill 1.23 rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt
181 jmc 1.135
182 edhill 1.1 return $digits_of_similarity
183     }
184    
185 jmc 1.93 testoutput_run()
186 edhill 1.1 {
187 jmc 1.99 # testoutput_run directory subdir reference_output
188 edhill 1.1 #
189 jmc 1.93 # test output from 1 run in "directory"
190 jmc 1.103 # --> same processing for adjoint & forward test
191 jmc 1.94 # default list of output variables to be checked:
192     # 1rst : main variable used to decide if it pass or FAIL
193     # others : number of matching digits to be printed in summary.txt
194     listChk=$DEF_CHECK_LIST
195     # load experiment-specific list from file "tr_checklist" (if it exist)
196     if test -r $1/$2/tr_checklist ; then listChk=`cat $1/$2/tr_checklist` ; fi
197     sVar=`echo $listChk | awk '{print $1}'`
198     # remove 1rst var and expand the list: + => min max mean s.d
199 jmc 1.97 listVar=`echo $listChk | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' \
200     | sed 's/+//g' | sed "s/^$sVar//"`
201 jmc 1.94 if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(I)='$listVar'" 1>&2 ; fi
202 jmc 1.117 # check for ptracer output in reference_output file :
203     outpref=$1/results/$3
204     ptr_mon="trcstat_ptracerXX_min trcstat_ptracerXX_max"
205     ptr_mon="$ptr_mon trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
206     for ii in $PTRACERS_NUM ; do
207     ptrfound=0
208     for jj in $ptr_mon ; do
209     name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
210     tst=`grep $name $outpref | wc -l | awk '{print $1}'`
211     if test ! "x$tst" = x0 ; then ptrfound=1 ; fi
212     done
213     if test $ptrfound = '1' ; then
214     eval "HAVE_PTR0"$ii"=t"
215     else
216     eval "HAVE_PTR0"$ii"=f"
217 utke 1.120 if test "x$ADM" = x -a "x$OADM" = x; then
218 jmc 1.117 # remove this ptr from the list of output variable to check
219     # echo "-- ptr test=" $tst "number of var=" `echo $listVar | awk '{print NF}'` 1>&2
220     listVar=`echo "$listVar" | sed "s/ pt$ii..//g"`
221     fi
222     fi
223     # eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"' 1>&2
224     done
225 mlosch 1.116 tst=`echo $sVar $listVar | awk '{ for(i=2;i<=NF;i++){if($i==$1)t+=1}; print t }'`
226 jmc 1.94 if test $tst != 1 ; then
227     if test $tst = 0 ; then echo "==> WARNING: selected var >$sVar< not found" 1>&2
228     else echo "==> WARNING: found selected var >$sVar< $tst times" 1>&2 ; fi
229     echo "==> WARNING: in checked list:" $listVar 1>&2
230     #- put it back once:
231     listVar=" $sVar "`echo "$listVar " | sed "s/ $sVar / /g"`
232     fi
233     if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(M)='$listVar'" 1>&2 ; fi
234     echo "listVar='$listVar'" > $CDIR"/summary.txt"
235     allargs=""
236     for xx in $listVar
237     do
238     case $xx in
239     'PS') if [ $debug -gt 0 ]
240     then echo testoutput_run: testoutput_var $1 cg2d_init_res 1>&2 ; fi
241 jmc 1.99 testoutput_var $1 "cg2d_init_res" "Press. Solver (cg2d)" $2 $3; yy=$?
242 jmc 1.94 if [ $debug -gt 0 ] ; then echo testoutput_run: cg2dres=$yy 1>&2 ; fi ;;
243 jmc 1.101 'Cost') testoutput_var $1 "ADM precision_derivative_cost" "ADM Cost" $2 $3; yy=$? ;;
244     'Grad') testoutput_var $1 "ADM precision_derivative_grad" "ADM Grad" $2 $3; yy=$? ;;
245 jmc 1.99 'Tmn') testoutput_var $1 "dynstat_theta_min" "Theta minimum" $2 $3; yy=$? ;;
246     'Tmx') testoutput_var $1 "dynstat_theta_max" "Theta maximum" $2 $3; yy=$? ;;
247     'Tav') testoutput_var $1 "dynstat_theta_mean" "Theta mean" $2 $3; yy=$? ;;
248     'Tsd') testoutput_var $1 "dynstat_theta_sd" "Theta Std.Dev" $2 $3; yy=$? ;;
249     'Smn') testoutput_var $1 "dynstat_salt_min" "Salt minimum" $2 $3; yy=$? ;;
250     'Smx') testoutput_var $1 "dynstat_salt_max" "Salt maximum" $2 $3; yy=$? ;;
251     'Sav') testoutput_var $1 "dynstat_salt_mean" "Salt mean" $2 $3; yy=$? ;;
252     'Ssd') testoutput_var $1 "dynstat_salt_sd" "Salt Std.Dev" $2 $3; yy=$? ;;
253 jmc 1.94 'Umn') testoutput_var $1 "dynstat_uvel_min" "U minimum" $2 $3; yy=$? ;;
254     'Umx') testoutput_var $1 "dynstat_uvel_max" "U maximum" $2 $3; yy=$? ;;
255     'Uav') testoutput_var $1 "dynstat_uvel_mean" "U mean" $2 $3; yy=$? ;;
256 jmc 1.99 'Usd') testoutput_var $1 "dynstat_uvel_sd" "U Std.Dev" $2 $3; yy=$? ;;
257 jmc 1.94 'Vmn') testoutput_var $1 "dynstat_vvel_min" "V minimum" $2 $3; yy=$? ;;
258     'Vmx') testoutput_var $1 "dynstat_vvel_max" "V maximum" $2 $3; yy=$? ;;
259     'Vav') testoutput_var $1 "dynstat_vvel_mean" "V mean" $2 $3; yy=$? ;;
260 jmc 1.99 'Vsd') testoutput_var $1 "dynstat_vvel_sd" "V Std.Dev" $2 $3; yy=$? ;;
261 jmc 1.94 'pt1mn'|'pt2mn'|'pt3mn'|'pt4mn'|'pt5mn') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
262     testoutput_var $1 "trcstat_ptracer0"$ii"_min" "p0"$ii"_min" $2 $3; yy=$? ;;
263     'pt1mx'|'pt2mx'|'pt3mx'|'pt4mx'|'pt5mx') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
264     testoutput_var $1 "trcstat_ptracer0"$ii"_max" "p0"$ii"_max" $2 $3; yy=$? ;;
265     'pt1av'|'pt2av'|'pt3av'|'pt4av'|'pt5av') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
266     testoutput_var $1 "trcstat_ptracer0"$ii"_mean" "p0"$ii"_mean" $2 $3; yy=$? ;;
267     'pt1sd'|'pt2sd'|'pt3sd'|'pt4sd'|'pt5sd') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
268 jmc 1.99 testoutput_var $1 "trcstat_ptracer0"$ii"_sd" "p0"$ii"_StDv" $2 $3; yy=$? ;;
269 jmc 1.130 'Qntmn') testoutput_var $1 "forcing_qnet_min" "Qnet minimum" $2 $3; yy=$? ;;
270     'Qntmx') testoutput_var $1 "forcing_qnet_max" "Qnet maximum" $2 $3; yy=$? ;;
271     'Qntav') testoutput_var $1 "forcing_qnet_mean" "Qnet mean" $2 $3; yy=$? ;;
272     'Qntsd') testoutput_var $1 "forcing_qnet_sd" "Qnet Std.Dev" $2 $3; yy=$? ;;
273 jmc 1.101 'aSImn') testoutput_var $1 "seaice_area_min" "SIce Area min" $2 $3; yy=$? ;;
274     'aSImx') testoutput_var $1 "seaice_area_max" "SIce Area max" $2 $3; yy=$? ;;
275     'aSIav') testoutput_var $1 "seaice_area_mean" "SIce Area mean" $2 $3; yy=$? ;;
276     'aSIsd') testoutput_var $1 "seaice_area_sd" "SIce Area StDv" $2 $3; yy=$? ;;
277     'hSImn') testoutput_var $1 "seaice_heff_min" "SIce Heff min" $2 $3; yy=$? ;;
278 jmc 1.126 'hSImx') testoutput_var $1 "seaice_heff_max" "SIce Heff max" $2 $3; yy=$? ;;
279     'hSIav') testoutput_var $1 "seaice_heff_mean" "SIce Heff mean" $2 $3; yy=$? ;;
280     'hSIsd') testoutput_var $1 "seaice_heff_sd" "SIce Heff StDv" $2 $3; yy=$? ;;
281 jmc 1.101 'AthSiG') testoutput_var $1 "thSI_Ice_Area_G" "thSIc Area Global" $2 $3; yy=$? ;;
282     'AthSiS') testoutput_var $1 "thSI_Ice_Area_S" "thSIc Area South" $2 $3; yy=$? ;;
283     'AthSiN') testoutput_var $1 "thSI_Ice_Area_N" "thSIc Area North" $2 $3; yy=$? ;;
284     'HthSiG') testoutput_var $1 "thSI_IceH_ave_G" "thSIc H Global" $2 $3; yy=$? ;;
285     'HthSiS') testoutput_var $1 "thSI_IceH_ave_S" "thSIc H South" $2 $3; yy=$? ;;
286     'HthSiN') testoutput_var $1 "thSI_IceH_ave_N" "thSIc H North" $2 $3; yy=$? ;;
287 jmc 1.94 *) yy=99; echo "WARNING: asking for var=$xx : not recognized !" 1>&2 ;;
288     esac
289     if test $xx = $sVar
290     then allargs="$allargs > $yy <"
291     else allargs="$allargs $yy"
292     fi
293     done
294    
295     nbVar=`echo $listVar | awk '{print NF}'`
296 jmc 1.135 if [ $nbVar -lt $LEN_CHECK_LIST ] ; then
297 jmc 1.94 #-- fill line (up to standard length) with dot:
298 jmc 1.97 adNul=`expr $LEN_CHECK_LIST - $nbVar | awk '{for(i=1;i<=$1;i++){print "."}}'`
299 jmc 1.94 echo $allargs $adNul
300     else
301     echo $allargs
302 jmc 1.135 fi
303 jmc 1.103 # <-- same processing for adjoint & forward test
304 edhill 1.1 }
305    
306     genmakemodel()
307     {
308     # genmakemodel directory
309 edhill 1.10 if test "x$NOGENMAKE" = xt ; then
310     echo "genmake skipped!"
311     else
312 edhill 1.34 if test "x$BASH" = x ; then
313     GENMAKE2="../../../tools/genmake2"
314     else
315     GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
316     fi
317 edhill 1.10 (
318     cd $1;
319 edhill 1.24 command="$GENMAKE2 -ds -m $MAKE"
320 utke 1.120 if test "x$ADM" = xt ; then
321     command="$command --mods=../code_ad"
322     elif test "x$OADM" = xt ; then
323     command="$command -adof ../../../tools/adjoint_options/adjoint_oad -mods '../code_oad ../../OpenAD/code_oad_all'"
324     else
325 jmc 1.124 command="$command -mods=../code"
326 edhill 1.24 fi
327 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
328 jmc 1.124 command="$command -optfile=$OPTFILE"
329 edhill 1.10 fi
330     if test "x$IEEE" != x ; then
331     command="$command -ieee"
332     fi
333 jmc 1.109 if test "x$GSL" = xt ; then
334     command="$command -gsl"
335     fi
336 edhill 1.66 if test "x$MPI" = xt ; then
337     command="$command -mpi"
338     fi
339 jmc 1.122 if test "x$MULTI_THREAD" = xt ; then
340     #- run multi-threaded using OpenMP:
341     command="$command -omp"
342     fi
343 jmc 1.135 if test "x$USE_R4" = xt ; then
344     command="$command -use_r4"
345     fi
346 ce107 1.90 if test "x$TS" = xt ; then
347     command="$command -ts"
348     fi
349     if test "x$PAPIS" = xt ; then
350     command="$command -papis"
351 jmc 1.135 else
352 ce107 1.90 if test "x$PCLS" = xt ; then
353     command="$command -pcls"
354     fi
355     fi
356 edhill 1.10 printf 'genmake ... ' 1>&2
357 utke 1.120 # $command > make.log 2>&1
358     eval $command > make.log 2>&1
359 edhill 1.10 RETVAL=$?
360 edhill 1.44 # Reduce the size of the testing emails!
361 edhill 1.47 head -100 Makefile > $CDIR/Makefile_head
362 edhill 1.10 if test "x$RETVAL" != x0 ; then
363     tail make.log
364     echo "genmakemodel: genmake failed" 1>&2
365 edhill 1.21 cp genmake_* make.log $CDIR
366 edhill 1.10 return 1
367     else
368 edhill 1.20 echo "successful" 1>&2
369 edhill 1.1 fi
370 edhill 1.10 )
371     fi
372 edhill 1.1 }
373    
374     makeclean()
375     {
376     # makeclean directory
377 edhill 1.10 if test "x$NOCLEAN" = xt ; then
378 jmc 1.83 echo "make Clean skipped!"
379 edhill 1.10 else
380     (
381     cd $1;
382 jmc 1.87 #if test -e $OUTPUTFILE ; then rm -f $OUTPUTFILE ; fi
383 edhill 1.10 if test -r Makefile ; then
384 jmc 1.83 printf 'clean build-dir: make Clean ... ' 2>&1
385     $MAKE Clean >> make.log 2>&1
386 edhill 1.10 RETVAL=$?
387     if test "x$RETVAL" != x0 ; then
388     tail make.log
389 jmc 1.83 echo "makeclean: \"make Clean\" failed" 1>&2
390 edhill 1.10 cp make.log $CDIR"/make.log"
391     return 1
392     fi
393 jmc 1.127 echo successful 1>&2
394     else
395     echo ''
396 edhill 1.10 fi
397     exit 0
398     )
399     fi
400     }
401    
402 jmc 1.83 run_clean()
403 edhill 1.68 {
404 jmc 1.83 # run_clean directory
405     if test "x$NOCLEAN" = xt ; then
406     echo "run_clean skipped!"
407     else
408 edhill 1.68 (
409     cd $1;
410 jmc 1.83 printf 'clean run-dir ... ' 2>&1
411     # part of what is done after "make clean" when doing "make CLEAN"
412     find . -name "*.meta" -exec rm {} \;
413     find . -name "*.data" -exec rm {} \;
414     find . -name "fort.*" -exec rm {} \;
415     find . -type l -exec rm {} \;
416     rm -f $EXECUTABLE *.txt STD* *diagnostics.log datetime
417     rm -rf mnc_test_*
418 jmc 1.107 rm -f *_MIT_CE_000.opt0000 costfunction*0000
419 jmc 1.83 echo successful 1>&2
420 edhill 1.68 exit 0
421     )
422     fi
423     }
424    
425 edhill 1.10 makedependmodel()
426     {
427     # makedependmodel directory
428     if test "x$NODEPEND" = xt ; then
429     echo "make depend skipped!"
430     else
431     (
432     cd $1;
433     printf 'make depend ... ' 1>&2
434     $MAKE depend >> make.log 2>&1
435 edhill 1.1 RETVAL=$?
436     if test "x$RETVAL" != x0 ; then
437     tail make.log
438 edhill 1.10 echo "makedependmodel: make depend failed" 1>&2
439 edhill 1.1 cp make.log $CDIR"/make.log"
440     return 1
441 edhill 1.10 else
442 edhill 1.20 echo successful 1>&2
443 edhill 1.1 fi
444 edhill 1.10 )
445     fi
446 edhill 1.1 }
447    
448     makemodel()
449     {
450     # makemodel directory
451     (
452 jmc 1.136 if test "x$NOMAKE" = xt ; then
453     cd $1;
454     if test -x $EXECUTABLE ; then
455     echo "make skipped!"
456     else
457     echo "no executable!"
458     return 2
459     fi
460     else
461 edhill 1.1 cd $1;
462     if test -r Makefile ; then
463     printf 'make ... ' 1>&2
464 utke 1.120 if test "x$ADM" = xt ; then
465     $MAKE adall >> make.log 2>&1
466     elif test "x$OADM" = xt ; then
467     $MAKE adAll >> make.log 2>&1
468     else
469 edhill 1.43 if test "x$JOBS" = x ; then
470     $MAKE >> make.log 2>&1
471     else
472     $MAKE -j $JOBS >> make.log 2>&1
473     fi
474 edhill 1.24 fi
475 edhill 1.1 RETVAL=$?
476     if test "x$RETVAL" != x0 ; then
477     tail make.log
478     echo failed 1>&2
479     cp make.log $CDIR"/make.log"
480 jmc 1.131 rm -f $EXECUTABLE
481 edhill 1.1 return 1
482     else
483 edhill 1.20 echo successful 1>&2
484 edhill 1.1 fi
485     fi
486 jmc 1.136 fi
487 edhill 1.1 )
488     }
489    
490 edhill 1.27 symlink_mpifiles()
491     {
492     # Put special links so that MPI specific files are used
493     # This MUST be invoked between makeclean and makelinks because
494     # the Makefile will link to non-mpi files by default
495    
496     dir=$1
497     code_dir=$2
498     BUILD_DIR=$dir/$3
499     CODE_DIR=$dir/$code_dir
500 jmc 1.135
501 edhill 1.27 # These are files that should replace their counter-part when using -mpi
502 mlosch 1.111 MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi" -print)`
503 edhill 1.27
504     # Is this an MPI run?
505     if test "x$MPI" = xt ; then
506     # YES: We symbolically link these files to the build
507     # dir so long as there is no real file in place
508     for ii in $MPI_FILES ; do
509     i=`echo $ii | sed 's:^\./::'`
510     name=`echo $i | sed 's:_mpi::' `
511     cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1
512     RETVAL=$?
513     if test "x$RETVAL" != x0 ; then
514     if ! test -f $BUILD_DIR/$i ; then
515 edhill 1.45 #echo Linking $name to $i
516 edhill 1.27 (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
517     fi
518     fi
519     done
520     else
521 edhill 1.45 # NO: We undo any _mpi symbolically linked files
522 edhill 1.27 for ii in $MPI_FILES ; do
523     i=`echo $ii | sed 's:^\./::'`
524     name=`echo $i | sed 's:_mpi::' `
525     if test -L $BUILD_DIR/$name ; then
526 edhill 1.45 cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
527     RETVAL=$?
528     if test "x$RETVAL" = x0 ; then
529     #echo Un-linking $name from $linktarg
530 edhill 1.27 rm -f $BUILD_DIR/$name
531     fi
532     fi
533     done
534     fi
535 jmc 1.135
536 edhill 1.27 }
537    
538 edhill 1.1 linkdata()
539     {
540 jmc 1.83 # linkdata run_dir input_dir_1 input_dir_2 ...
541 edhill 1.1 #
542     # symbolically link data files to run directory
543 jmc 1.83 if test -d $1 ; then
544 edhill 1.12 (
545 jmc 1.83 cd $1 ; shift
546 jmc 1.125 inpMPI=`(cd ../$1 ; find . -name "*.mpi" -print | sed 's:^\./::')`
547     for xx in $inpMPI ; do
548     if test -r "../"$1"/"$xx ; then
549     # found 1 _mpi sfx file in 1rst input dir and it is readable
550     yy=`echo $xx | sed 's:\.mpi$::'`
551     if test "x$MPI" = "xt" ; then
552     # mpi test: remove symbolic link & link _mpi sfx file
553     if test -h $yy ; then rm -f $yy ; fi
554 jmc 1.135 if test ! -r $yy ; then
555 jmc 1.125 ln -sf "../"$1"/"$xx $yy ;
556     printf "$xx " 1>&2
557     fi
558     else
559     # not mpi test: remove symbolic link
560     if test -h $yy ; then rm -f $yy ; fi
561     fi
562     fi
563     done
564 jmc 1.83 if test -r "../"$1"/eedata.mth" ; then
565     # found eedata.mth in 1rst input dir and it is readable
566     if test "x$MULTI_THREAD" = "xt" ; then
567     # multi-threaded test: remove symbolic link & link eedata.mth
568     if test -h eedata ; then rm -f eedata ; fi
569 jmc 1.135 if test ! -r eedata ; then
570 jmc 1.83 ln -sf "../"$1"/eedata.mth" eedata ;
571     printf 'eedata.mth ' 1>&2
572 edhill 1.24 fi
573 jmc 1.83 else
574     # not multi-threaded test: remove eedata symbolic link
575     if test -h eedata ; then rm -f eedata ; fi
576     fi
577     fi
578 jmc 1.108 prevDir='NONE'
579 jmc 1.83 for ldir in $* ; do
580 jmc 1.108 if test -d "../"$ldir -a $ldir != $prevDir ; then
581 jmc 1.83 printf 'ldir='${ldir} 1>&2
582     files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
583     for i in $files ; do
584     if test ! -d "../"$ldir/$i ; then
585     if test ! -r $i ; then
586     printf ' '$i 1>&2
587     ln -sf "../"$ldir"/"$i $i
588     fi
589     fi
590     done
591     if test -x "../"$ldir"/"prepare_run ; then
592     "../"$ldir"/"prepare_run
593 edhill 1.24 fi
594 jmc 1.83 printf ' ; ' 1>&2
595 jmc 1.82 fi
596 jmc 1.108 prevDir=$ldir
597 jmc 1.83 done
598 edhill 1.12 )
599 edhill 1.1 fi
600     }
601    
602     runmodel()
603     {
604 edhill 1.6 # runmodel directory
605 edhill 1.1 #
606 jmc 1.135 # runs "$COMMAND in "directory"
607 edhill 1.6 # (where "$COMMAND" is relative to "directory")
608 edhill 1.1 (
609     cd $1
610 jmc 1.75 printf 'runmodel in %s ...' $1 1>&2
611 edhill 1.6 # make output.txt
612 edhill 1.38 echo
613 jmc 1.134 if test -L $EXECUTABLE ; then
614     if test -x "../"$builddir"/"$EXECUTABLE ; then
615 jmc 1.106 diff -q $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
616 jmc 1.119 outD=$? ; if test $outD != 0 ; then rm -f $EXECUTABLE ; fi
617 jmc 1.134 else rm -f $EXECUTABLE
618     fi
619 jmc 1.106 fi
620 jmc 1.83 if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
621 jmc 1.119 echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_tmp
622 jmc 1.83 ln -sf "../"$builddir"/"$EXECUTABLE .
623     fi
624     if test ! -x $EXECUTABLE ; then
625 jmc 1.119 rm -f $RUNLOG ; touch $RUNLOG
626     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
627     echo " no executable:" $EXECUTABLE >> $RUNLOG
628 jmc 1.83 RETVAL=8
629 jmc 1.88 ENDVAL=-1
630 jmc 1.75 else
631 jmc 1.98 if test ! -f $OUTPUTFILE -o $OUTPUTFILE -ot $EXECUTABLE ; then
632     # output do not exist or is older than executable:
633 jmc 1.119 rm -f $RUNLOG ; touch $RUNLOG
634     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
635     ( eval $COMMAND ) >> $RUNLOG 2>&1
636 jmc 1.83 RETVAL=$?
637     else
638     RETVAL=0
639 jmc 1.119 if test -f $RUNLOG ; then
640     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
641     echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
642 jmc 1.135 else
643 jmc 1.119 touch $RUNLOG
644     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
645     echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
646     echo " no previous $RUNLOG: assume NORMAL END" >> $RUNLOG 2>&1
647 jmc 1.88 fi
648 jmc 1.83 fi
649 jmc 1.119 ENDVAL=`cat $RUNLOG | grep -v 'ABNORMAL END' | grep -c 'NORMAL END'`
650 jmc 1.75 fi
651 jmc 1.119 rm -f run.log_tmp
652 jmc 1.88 if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
653 jmc 1.119 tail $RUNLOG
654 edhill 1.20 echo successful 1>&2
655 edhill 1.44 # === Reduce the size of the testing emails!
656 jmc 1.87 #cp $OUTPUTFILE $CDIR"/"$OUTPUTFILE
657 jmc 1.48 if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
658 edhill 1.6 return 0
659 jmc 1.132 elif [ $RETVAL -ne 0 -a $ENDVAL -gt 0 ] ; then
660     #-- for some weird cases (run is finihed but with error code)
661     tail $RUNLOG
662     echo finished with error '(run:' $RETVAL ' end:' $ENDVAL ')' 1>&2
663     return 0
664 edhill 1.6 else
665 jmc 1.119 tail $RUNLOG
666 jmc 1.88 echo failed '(run:' $RETVAL ' end:' $ENDVAL ')' 1>&2
667 jmc 1.119 cp $RUNLOG $CDIR"/"$RUNLOG
668 jmc 1.48 if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
669 edhill 1.6 return 1
670 edhill 1.1 fi
671     )
672     }
673    
674     createcodelet()
675     {
676     # create codelet for comparing model output
677    
678 jmc 1.112 printf "creating the comparison code (using CC=$CC)... "
679 jmc 1.91 cat > tr_cmpnum.c <<EOF
680 edhill 1.22 #include <stdio.h>
681     #include <math.h>
682     int main( int argc, char** argv ) {
683 jmc 1.91 int linnum,cmplin,best,lncnt;
684 edhill 1.52 double a,b,abave,relerr;
685 jmc 1.57 best = -22;
686 adcroft 1.33 lncnt = 0;
687 jmc 1.96 while( 1 & ( (lncnt+=1) < 999 ) ) {
688 edhill 1.22 scanf("%d", &linnum);
689     if (linnum == -1) break;
690     scanf("%lf", &a); scanf("%lf", &b);
691 edhill 1.52 abave = 0.5*(fabs(a)+fabs(b));
692 jmc 1.91 if ( abave == abave ) {
693     if (abave > 0.0) {
694     relerr=fabs(a-b)/abave;
695     if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
696     else { cmplin = -16 ; }
697     best = (best > cmplin) ? best : cmplin; }
698     else { cmplin = -22 ; }
699     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
700     }
701     else {
702     /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
703     break; }
704 edhill 1.22 }
705 adcroft 1.33 if (lncnt == 999) best=-29;
706 jmc 1.91 if (linnum != -1) best=-99;
707 edhill 1.22 printf("%d\n", -best);
708     return 0;
709     }
710     EOF
711 jmc 1.91 $CC -o tr_cmpnum tr_cmpnum.c -lm
712 edhill 1.1
713 jmc 1.91 if [ -x ./tr_cmpnum ]; then
714 edhill 1.1 echo "OK"
715     return 0
716     else
717     echo
718 jmc 1.135 echo "ERROR: failed to compile comparison code -- please specify"
719 edhill 1.58 echo " a C compiler using the CC environment variable."
720 edhill 1.1 exit 1
721     fi
722     }
723    
724     formatresults()
725     {
726     # formatresults expt genmake depend make run results*
727    
728     nm=$1
729     printf '%s %s %s %s' $2 $3 $4 $5
730     shift; shift; shift; shift; shift;
731 jmc 1.94 listPrt=$@
732     listRes=`echo $listPrt | sed 's/>//' | sed 's/<//'`
733     xx=`echo $listPrt | sed 's/.*>//' | sed 's/<.*//' | awk '{print $1}'`
734 jmc 1.97 printf '%3s' $listPrt
735 jmc 1.98 # line below does not work on hp-ux_ia64 : do those substitutions later on
736 jmc 1.95 # printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</'
737 jmc 1.135
738 jmc 1.94 if [ $xx = '..' ]; then
739     printf ' N/O '
740     elif [ $xx = '--' ]; then
741     printf ' N/O '
742     elif [ $xx = 99 ]; then
743 edhill 1.1 printf ' N/O '
744     else
745 jmc 1.94 if [ $xx -ge $MATCH_CRIT ]; then
746 edhill 1.1 printf ' pass'
747     else
748     printf ' FAIL'
749     fi
750     fi
751     printf ' %s' $nm
752     printf '\n'
753 jmc 1.135
754 edhill 1.1 }
755    
756     scandirs()
757     {
758 jmc 1.81 if [ $# -eq 1 ]; then
759     for arg in * ; do
760 jmc 1.99 test -f $arg/$1 && echo $arg
761 jmc 1.81 done
762 edhill 1.1 else
763 jmc 1.81 echo $*
764 edhill 1.1 fi
765     }
766    
767    
768 jmc 1.123 check_eedata()
769     {
770     # check_eedata size.h eedata
771     if [ $# -eq 2 ] ; then
772     if test -f $1 -a -f $2 ; then
773     sx=`grep "^ & *nSx *=" $1 | sed "s/^ & *nSx *=//" | sed 's/, *$//'`
774     nx=`grep "^ *nTx *=" $2 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
775     if test "x$nx" = x ; then
776     rx=10
777     else
778     rx=`expr $sx % $nx`
779     fi
780     sy=`grep "^ & *nSy *=" $1 | sed "s/^ & *nSy *=//" | sed 's/, *$//'`
781     ny=`grep "^ *nTy *=" $2 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
782     if test "x$ny" = x ; then
783     ry=20
784     else
785     ry=`expr $sy % $ny`
786     fi
787     echo `expr $rx + $ry`
788     else
789     echo '-1'
790     fi
791     else
792     echo '-2'
793     fi
794    
795     }
796    
797 edhill 1.1 ###############################################################################
798    
799    
800     # Default properties
801     debug=0
802     verbose=1
803     clean=0
804 edhill 1.10
805 edhill 1.40 IEEE=true
806 edhill 1.10 if test "x$MITGCM_IEEE" != x ; then
807     IEEE=$MITGCM_IEEE
808     fi
809 jmc 1.109 GSL=f
810 edhill 1.10
811     CLEANUP=f
812 jmc 1.133 NORUN=f
813 edhill 1.10 QUICK=f
814 jmc 1.136 NOMAKE=f
815 edhill 1.10 NOGENMAKE=f
816     NOCLEAN=f
817     NODEPEND=f
818 edhill 1.68 POSTCLEAN=f
819 edhill 1.1
820 edhill 1.4 BASH=
821 edhill 1.10 OPTFILE=NONE
822     ADDRESSES=
823 edhill 1.1 TESTDIRS=
824 jmc 1.89 SKIPDIRS=
825 edhill 1.1 MPACKDIR="../tools/mpack-1.6"
826 edhill 1.20 HAVE_MPACK=
827 jmc 1.113 MPACK=
828 edhill 1.24 COMMAND=
829 edhill 1.59 if test "x$MAKE" = x ; then
830     MAKE=make
831     fi
832     if test "x$CC" = x ; then
833     CC=cc
834     fi
835 edhill 1.43 JOBS=
836 edhill 1.7 MPI=f
837 jmc 1.83 MULTI_THREAD=f
838 jmc 1.70 OUTDIR=
839 edhill 1.40 DELDIR=
840 jmc 1.135 USE_R4=
841 edhill 1.1
842 edhill 1.24 ADM=
843 utke 1.120 OADM=
844 edhill 1.24
845 jmc 1.117 # list of pTracers to check for monitor output
846 edhill 1.50 PTRACERS_NUM="1 2 3 4 5"
847 edhill 1.49
848 jmc 1.92 MATCH_CRIT=13
849    
850 edhill 1.34 printf "parsing options... "
851 edhill 1.1
852     ac_prev=
853     for ac_option ; do
854    
855     # If the previous option needs an argument, assign it.
856     if test -n "$ac_prev"; then
857     eval "$ac_prev=\$ac_option"
858     ac_prev=
859     continue
860     fi
861    
862     ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
863 jmc 1.135
864 edhill 1.1 case $ac_option in
865    
866     -help | --help | -h | --h)
867     usage ;;
868    
869 edhill 1.2 -optfile | --optfile | -of | --of)
870 edhill 1.10 ac_prev=OPTFILE ;;
871 edhill 1.2 -optfile=* | --optfile=* | -of=* | --of=*)
872 edhill 1.10 OPTFILE=$ac_optarg ;;
873 edhill 1.1
874     -addr | --addr | -a | --a)
875     ac_prev=ADDRESSES ;;
876 jmc 1.136 -addr=* | --addr=* | -a=* | --a=*)
877 edhill 1.1 ADDRESSES=$ac_optarg ;;
878 jmc 1.113 -mpackdir | --mpackdir | -mpd | --mpd)
879     ac_prev=MPACKDIR ;;
880     -mpackdir=* | --mpackdir=* | -mpd=* | --mpd=*)
881     MPACKDIR=$ac_optarg ;;
882 edhill 1.1
883     -tdir | --tdir | -t | --t)
884     ac_prev=TESTDIRS ;;
885 jmc 1.136 -tdir=* | --tdir=* | -t=* | --t=*)
886 edhill 1.1 TESTDIRS=$ac_optarg ;;
887 edhill 1.4
888 jmc 1.89 -skipdir | --skipdir | -skd | --skd)
889     ac_prev=SKIPDIRS ;;
890 jmc 1.136 -skipdir=* | --skipdir=* | -skd=* | --skd=*)
891 jmc 1.89 SKIPDIRS=$ac_optarg ;;
892    
893 edhill 1.4 -bash | --bash | -b | --b)
894     ac_prev=BASH ;;
895 jmc 1.136 -bash=* | --bash=* | -b=* | --b=*)
896 edhill 1.4 BASH=$ac_optarg ;;
897 edhill 1.5
898 edhill 1.6 -command | --command | -c | --c)
899     ac_prev=COMMAND ;;
900 jmc 1.136 -command=* | --command=* | -c=* | --c=*)
901 edhill 1.6 COMMAND=$ac_optarg ;;
902 edhill 1.8
903     -make | --make | -m | --m)
904     ac_prev=MAKE ;;
905 jmc 1.136 -make=* | --make=* | -m=* | --m=*)
906 edhill 1.8 MAKE=$ac_optarg ;;
907 edhill 1.1
908 jmc 1.70 -odir | --odir)
909     ac_prev=OUTDIR ;;
910     -odir=* | --odir=*)
911     OUTDIR=$ac_optarg ;;
912    
913 edhill 1.50 -ptracers | --ptracers | -ptr | --ptr)
914     ac_prev=PTRACERS_NUM ;;
915     -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
916     PTRACERS_NUM=$ac_optarg ;;
917    
918 jmc 1.92 -match | --match ) ac_prev=MATCH_CRIT ;;
919     -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
920    
921 jmc 1.136 -j | --j) ac_prev=JOBS ;;
922     -j=* | --j=*) JOBS=$ac_optarg ;;
923 edhill 1.43
924 edhill 1.10 -clean | --clean)
925 jmc 1.69 CLEANUP=t ; DELDIR=t ;;
926 edhill 1.10
927 jmc 1.133 -norun | --norun | -nr | --nr)
928     NORUN=t ;;
929 jmc 1.136 -runonly | --runonly | -ro | --ro)
930     QUICK=t ; NOMAKE=t ;;
931 edhill 1.10 -quick | --quick | -q | --q)
932     QUICK=t ;;
933     -nogenmake | --nogenmake | -ng | --ng)
934     NOGENMAKE=t ;;
935     -noclean | --noclean | -nc | --nc)
936     NOCLEAN=t ;;
937     -nodepend | --nodepend | -nd | --nd)
938     NODEPEND=t ;;
939    
940 edhill 1.68 -postclean | --postclean | -pc | --pc)
941     POSTCLEAN=t ;;
942    
943 edhill 1.18 -mpi) MPI=t ;;
944 edhill 1.10
945 jmc 1.83 -mth) MULTI_THREAD=t ;;
946    
947 edhill 1.24 -adm | -ad) ADM=t ;;
948    
949 utke 1.120 -oad) OADM=t; NODEPEND=t ;;
950    
951 edhill 1.10 -ieee) IEEE=true ;;
952     -noieee) IEEE= ;;
953 jmc 1.109 -gsl) GSL=t ;;
954 edhill 1.10
955 edhill 1.1 -verbose) verbose=2 ;;
956     -debug) debug=1 ;;
957     -quiet) verbose=0 ;;
958    
959 edhill 1.40 -deldir | -dd) DELDIR=t ;;
960    
961 jmc 1.136 -use_r4|-ur4) USE_R4=t ;;
962 jmc 1.135
963 ce107 1.90 -ts) TS=t;;
964     -papis) PAPIS=t;;
965     -pcls) PCL=t;;
966    
967 edhill 1.1 -*)
968     echo "Error: unrecognized option: "$ac_option
969     usage
970     ;;
971 jmc 1.135
972 edhill 1.1 *)
973     echo "Error: unrecognized argument: "$ac_option
974     usage
975     ;;
976 jmc 1.135
977 edhill 1.1 esac
978 jmc 1.135
979 edhill 1.1 done
980    
981 edhill 1.10 if test "x$QUICK" = xt ; then
982     NOGENMAKE=t
983     NOCLEAN=t
984     NODEPEND=t
985     fi
986    
987 jmc 1.99 #- setting for forward or ADM testing
988     if test "x$ADM" = xt ; then
989     code_dir=code_ad
990 jmc 1.108 inputdir=input_ad
991 jmc 1.99 ref_outp="output_adm.txt"
992     EXECUTABLE="mitgcmuv_ad"
993 utke 1.120 elif test "x$OADM" = xt ; then
994     code_dir=code_oad
995     inputdir=input_oad
996     ref_outp="output_oadm.txt"
997     EXECUTABLE="mitgcmuv_ad"
998 jmc 1.99 else
999     code_dir=code
1000 jmc 1.108 inputdir=input
1001 jmc 1.99 ref_outp="output.txt"
1002     EXECUTABLE="mitgcmuv"
1003     fi
1004    
1005 edhill 1.1 if test "x$TESTDIRS" = x ; then
1006 jmc 1.103 LIST=`scandirs results/$ref_outp`
1007 jmc 1.84 else
1008     #- expand group of experiments:
1009     LIST=" "
1010     for xx in $TESTDIRS
1011     do
1012     case $xx in
1013 jmc 1.86 'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
1014     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
1015     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
1016 jmc 1.84 ;;
1017     'tutorials')
1018     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
1019     *) LIST=${LIST}" "$xx ;;
1020     esac
1021 jmc 1.135 done
1022 jmc 1.89 fi
1023     #echo 'LIST='${LIST}'<'
1024     #- skip dirs, remove duplicate and non-directory:
1025     TESTDIRS=" "
1026     count=0
1027     for xx in $LIST
1028     do
1029     yy=`echo $SKIPDIRS | grep -c $xx`
1030     if test $yy = 0 ; then
1031 jmc 1.84 if test -d $xx ; then
1032     yy=`echo $TESTDIRS | grep -c $xx`
1033     if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
1034 jmc 1.89 else count=1 ;
1035     echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
1036     fi
1037     else
1038     if test $count = 1 ; then echo -n ", \"$xx\""
1039     else count=1 ; echo "" ; echo -n " skip: \"$xx\""
1040 jmc 1.84 fi
1041 jmc 1.89 fi
1042 jmc 1.135 done
1043 jmc 1.89 if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
1044 jmc 1.84 #echo 'TESTDIRS='${TESTDIRS}'<'
1045 edhill 1.1
1046 edhill 1.10 if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
1047     OPTFILE=$MITGCM_OF
1048     fi
1049    
1050 jmc 1.119 RUNLOG="run.log"
1051 jmc 1.99 OUTPUTFILE=$ref_outp
1052 jmc 1.87 if test "x$COMMAND" = x ; then
1053 jmc 1.77 COMMAND="./$EXECUTABLE > $OUTPUTFILE"
1054 edhill 1.24 fi
1055 jmc 1.87 if test "x$MPI" = xt ; then
1056     OUTPUTFILE="STDOUT.0000"
1057 edhill 1.24 fi
1058    
1059 jmc 1.76 echo "OK (COMMAND= $COMMAND )"
1060 edhill 1.1
1061 jmc 1.94 # set the Default List of output variables to be checked:
1062     # (use default or load experiment-specific list from file "tr_checklist")
1063     # content : 1rst = main variable used to decide if it pass or FAIL
1064     # others = number of matching digits to be printed in summary.txt
1065 utke 1.120 if test "x$ADM" = x -a "x$OADM" = x; then
1066 jmc 1.94 DEF_CHECK_LIST='PS PS T+ S+ U+ V+ pt1+ pt2+ pt3+ pt4+ pt5+'
1067     EMPTY_RESULTS='.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..'
1068 jmc 1.97 LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1069 jmc 1.94 ii=`echo $EMPTY_RESULTS | awk '{print NF}'`
1070 jmc 1.97 EMPTY_RESULTS=$EMPTY_RESULTS`expr $LEN_CHECK_LIST - $ii | awk 'BEGIN{FS=":"}{for(i=1;i<=$1;i++){printf " ."}}'`
1071 jmc 1.99 else
1072 jmc 1.103 DEF_CHECK_LIST='Grad Cost Grad'
1073 jmc 1.99 EMPTY_RESULTS='.. ..'
1074     LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1075 jmc 1.94 fi
1076    
1077 edhill 1.1 # create the FORTRAN comparison code
1078 jmc 1.133 if test -x tr_cmpnum ; then
1079     echo "skipping comparison code build"
1080     else
1081     createcodelet
1082     fi
1083 edhill 1.1
1084 jmc 1.112 # build the mpack utility (if ADDRESSES = NONE, do it to test the build)
1085     if test "x$ADDRESSES" = x ; then
1086 edhill 1.32 echo "skipping mpack build"
1087     else
1088 edhill 1.31 build_mpack
1089     fi
1090 edhill 1.1
1091     # Create a uniquely named directory to store results
1092 jmc 1.110 CMDLINE=$0
1093 jmc 1.118 for xx in "$@" ; do nw=`echo $xx | wc -w`
1094     if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
1095     else CMDLINE="$CMDLINE '$xx'" ; fi
1096     done
1097     #for xx in "$@" ; do CMDLINE="$CMDLINE '$xx'" ; done
1098 edhill 1.1 MACH=`hostname`
1099 edhill 1.2 UNAMEA=`uname -a`
1100 edhill 1.1 DATE=`date +%Y%m%d`
1101 edhill 1.25 BASE="tr_"$MACH"_"$DATE"_"
1102 jmc 1.70 if test "x$OUTDIR" != x ; then
1103     BASE="tr_"$OUTDIR"_"$DATE"_"
1104 jmc 1.121 else
1105     short_name=`hostname | sed 's/\..*$//'`
1106     BASE="tr_"$short_name"_"$DATE"_"
1107 jmc 1.70 fi
1108 edhill 1.1 DNUM=0
1109     DRESULTS="$BASE$DNUM"
1110     while test -e $DRESULTS ; do
1111     DNUM=$(( $DNUM + 1 ))
1112     DRESULTS="$BASE$DNUM"
1113     done
1114     mkdir $DRESULTS
1115     RETVAL=$?
1116     if test "x$RETVAL" != x0 ; then
1117 edhill 1.20 echo "ERROR: Can't create results directory \"./$DRESULTS\""
1118 edhill 1.1 exit 1
1119     fi
1120     SUMMARY="$DRESULTS/summary.txt"
1121 edhill 1.16 start_date=`date`
1122 edhill 1.17 echo $start_date > $SUMMARY
1123 jmc 1.110 echo 'run:' $CMDLINE >> $SUMMARY
1124     echo 'on :' $UNAMEA >> $SUMMARY
1125 edhill 1.1
1126 edhill 1.11 of_path=
1127 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
1128     if test -r $OPTFILE ; then
1129 edhill 1.11 # get the path
1130     path=${OPTFILE%/*}
1131     if test "x$path" = x ; then
1132     of_path=`pwd`
1133     else
1134     of_path=`( cd $path > /dev/null 2>&1 ; pwd )`
1135     fi
1136     file=${OPTFILE##*/}
1137     OPTFILE=$of_path/$file
1138 edhill 1.21 cp $OPTFILE $DRESULTS
1139     echo >> $SUMMARY
1140     echo " OPTFILE=$OPTFILE" >> $SUMMARY
1141 edhill 1.11 else
1142 edhill 1.21 echo | tee $SUMMARY
1143     echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
1144     exit 1
1145 edhill 1.10 fi
1146 edhill 1.21 else
1147     echo >> $SUMMARY
1148     echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
1149     echo " so the genmake default will be used." >> $SUMMARY
1150 edhill 1.10 fi
1151     echo
1152     echo >> $SUMMARY
1153 utke 1.120 if test "x$ADM" = x -a "x$OADM" = x; then
1154 jmc 1.135 if [ $MATCH_CRIT -lt 10 ] ;
1155     then line_0="default "$MATCH_CRIT ;
1156 jmc 1.94 else line_0="default "$MATCH_CRIT ; fi
1157     line_0="$line_0 ----T----- ----S----- ----U----- ----V-----"
1158 jmc 1.92 # line_0=" ----T----- ----S----- ----U----- ----V-----"
1159 edhill 1.49 line_1="G D M c m s m s m s m s"
1160     line_2="E p a R g m m e . m m e . m m e . m m e ."
1161     line_3="N n k u 2 i a a d i a a d i a a d i a a d"
1162     line_4="2 d e n d n x n . n x n . n x n . n x n ."
1163 edhill 1.50 for ii in $PTRACERS_NUM ; do
1164 edhill 1.49 line_0="$line_0 --PTR 0"$ii"--"
1165     line_1="$line_1 m s"
1166     line_2="$line_2 m m e ."
1167     line_3="$line_3 i a a d"
1168     line_4="$line_4 n x n ."
1169     done
1170     echo "$line_0" | tee -a $SUMMARY
1171     echo "$line_1" | tee -a $SUMMARY
1172     echo "$line_2" | tee -a $SUMMARY
1173     echo "$line_3" | tee -a $SUMMARY
1174     echo "$line_4" | tee -a $SUMMARY
1175     echo " " | tee -a $SUMMARY
1176 edhill 1.24 else
1177     echo "ADJOINT=true" >> $SUMMARY
1178     echo >> $SUMMARY
1179 jmc 1.135 if [ $MATCH_CRIT -lt 10 ] ;
1180     then line_0="default "$MATCH_CRIT ;
1181 jmc 1.103 else line_0="default "$MATCH_CRIT ; fi
1182 jmc 1.100 echo "$line_0" | tee -a $SUMMARY
1183 edhill 1.24 cat << EOF | tee -a $SUMMARY
1184     G D M C G
1185     E p a R o r
1186     N n k u s a
1187     2 d e n t d
1188    
1189     EOF
1190     fi
1191 edhill 1.1
1192 edhill 1.10 # ...and each test directory...
1193     for dir in $TESTDIRS ; do
1194 jmc 1.135
1195 jmc 1.106 # set builddir & rundir:
1196     builddir="build"
1197     if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1198     rundir="run"
1199     if test ! -d $dir/$rundir ; then
1200     rundir=$builddir
1201     fi
1202     CODE_DIR=$dir/$code_dir
1203     BUILD_DIR=$dir/$builddir
1204    
1205 edhill 1.10 # Cleanup only!
1206     if test "x$CLEANUP" = xt ; then
1207 jmc 1.127 echo -n ' --- dir:' $BUILD_DIR ': '
1208     makeclean $BUILD_DIR
1209 jmc 1.128 rm -f $BUILD_DIR/$EXECUTABLE
1210 jmc 1.106 if test -d $dir/$rundir/CVS ; then
1211 jmc 1.127 echo -n ' --- dir:' $dir/$rundir ': '
1212 jmc 1.106 run_clean $dir/$rundir
1213 edhill 1.10 fi
1214 jmc 1.127 trdir=`( cd $dir ; find . -type d -name "tr_run.*" -print | sed 's/^.\///')`
1215     ttd=`echo $trdir | wc -w`
1216     if test $ttd != 0 ; then
1217     echo ' --- rm dir:' $trdir
1218     ( cd $dir ; rm -rf $trdir )
1219     fi
1220 edhill 1.10 continue
1221 edhill 1.1 fi
1222 edhill 1.3
1223 jmc 1.135 # Verify that the testdir exists and contains previous
1224 edhill 1.10 # results in the correct location--or skip this directory!
1225 jmc 1.104 fout=$dir"/results/"$ref_outp
1226 edhill 1.24 if test ! -r $fout ; then
1227     echo "can't read \"$fout\" -- skipping $dir"
1228 edhill 1.10 continue
1229     fi
1230 edhill 1.7
1231 jmc 1.117 # Check for specific files for particular type of run
1232 edhill 1.49
1233 edhill 1.30 if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1234 edhill 1.28 echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1235     continue
1236     fi
1237 jmc 1.83 if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1238     echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1239     continue
1240     fi
1241 jmc 1.123 if test "x$MPI" = "xt" -a "x$MULTI_THREAD" = "xt" ; then
1242     retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/input/eedata.mth"`
1243     if test $retv != 0 ; then
1244     echo "input/eedata.mth tiling misfit -- skipping $dir"
1245     continue
1246     fi
1247     fi
1248 jmc 1.83
1249     # Check whether there are "extra runs" for this testdir
1250     extra_runs=
1251 jmc 1.133 if test "x$NORUN" = xf ; then
1252     ex_run_dirs=`( cd $dir ; echo $inputdir.* )`
1253     fi
1254 jmc 1.108 #echo "ex_run_dirs='$ex_run_dirs'"
1255     for exd in $ex_run_dirs ; do
1256     name=`echo $exd | sed -e "s/$inputdir\.//"`
1257     refExOut=`echo $ref_outp | sed "s/\./.${name}./"`
1258     outf="$dir/results/$refExOut"
1259     if test -f $outf -a -r $outf ; then
1260 jmc 1.135 if test "x$MULTI_THREAD" = "xt" ; then
1261 jmc 1.123 if test -r $dir"/"$exd"/eedata.mth" ; then
1262     if test "x$MPI" = "xt" ; then
1263     retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/"$exd"/eedata.mth"`
1264     if test $retv = 0 ; then
1265 jmc 1.83 extra_runs="$extra_runs $name"
1266 jmc 1.123 else
1267     echo $exd"/eedata.mth tiling misfit -- skipping $dir"
1268 jmc 1.83 fi
1269 jmc 1.123 else
1270 jmc 1.108 extra_runs="$extra_runs $name"
1271 jmc 1.123 fi
1272     #else echo $dir"/"$exd"/eedata.mth: not found"
1273 jmc 1.83 fi
1274 jmc 1.123 else
1275     extra_runs="$extra_runs $name"
1276     fi
1277 jmc 1.108 fi
1278     done
1279 edhill 1.28
1280     echo "-------------------------------------------------------------------------------"
1281     echo
1282 jmc 1.135 if test "x$extra_runs" = "x" ; then
1283 jmc 1.83 echo "Experiment: $dir"
1284     else
1285     echo "Experiment: $dir ; extra_runs=$extra_runs"
1286     fi
1287 edhill 1.28 echo
1288     unset genmake makedepend make run
1289 jmc 1.94 results=$EMPTY_RESULTS
1290 edhill 1.10
1291     # Create an output dir for each OPTFILE/tdir combination
1292 jmc 1.137 CDIR=$DRESULTS"/"$dir
1293     mkdir $CDIR
1294 jmc 1.135
1295 jmc 1.133 if test "x$NORUN" = xt ; then
1296     run=N
1297     genmakemodel $dir/$builddir && genmake=Y \
1298     && makeclean $dir/$builddir \
1299     && run_clean $dir/$rundir \
1300     && symlink_mpifiles $dir $code_dir $builddir \
1301     && makedependmodel $dir/$builddir && makedepend=Y \
1302     && makemodel $dir/$builddir && make=Y
1303 edhill 1.10 else
1304 edhill 1.1 genmakemodel $dir/$builddir && genmake=Y \
1305     && makeclean $dir/$builddir \
1306 jmc 1.83 && run_clean $dir/$rundir \
1307 edhill 1.27 && symlink_mpifiles $dir $code_dir $builddir \
1308 edhill 1.1 && makedependmodel $dir/$builddir && makedepend=Y \
1309     && makemodel $dir/$builddir && make=Y \
1310 jmc 1.108 && linkdata $dir/$rundir $inputdir input \
1311 edhill 1.12 && runmodel $dir/$rundir && run=Y \
1312 jmc 1.99 && results=`testoutput_run $dir $rundir $ref_outp`
1313 edhill 1.10 fi
1314 jmc 1.135
1315 jmc 1.133 #echo "results='$results'"
1316 edhill 1.10 echo
1317 edhill 1.24 fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1318 edhill 1.34 echo
1319 jmc 1.98 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</' >> $SUMMARY
1320 jmc 1.100 touch $CDIR"/summary.txt"
1321 jmc 1.97 echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1322 edhill 1.34 echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1323     echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1324     echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1325     echo "tdir='$dir'" >> $CDIR"/summary.txt"
1326 jmc 1.108 if test "x$ADM" = xt ; then
1327     head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt"
1328     grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1329     >> $CDIR"/summary.txt"
1330     fi
1331 edhill 1.34
1332     for ex in $extra_runs ; do
1333 jmc 1.73 unset run
1334 jmc 1.94 results=$EMPTY_RESULTS
1335 jmc 1.106 # reference output file
1336     refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1337 jmc 1.73 # Create an output dir for each OPTFILE/tdir.ex combination
1338 jmc 1.137 CDIR=$DRESULTS"/"$dir"."$ex
1339     mkdir $CDIR
1340 edhill 1.61 test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1341 jmc 1.106 run_clean $dir/tr_run.$ex
1342 jmc 1.108 linkdata $dir/tr_run.$ex $inputdir.$ex $inputdir input
1343 jmc 1.42 runmodel $dir/tr_run.$ex && run=Y \
1344 jmc 1.106 && results=`testoutput_run $dir tr_run.$ex $refExOut`
1345 edhill 1.34 fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1346     fres="$fres.$ex"
1347     echo
1348 jmc 1.100 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</' >> $SUMMARY
1349     touch $CDIR"/summary.txt"
1350 jmc 1.97 echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1351 edhill 1.34 echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1352     echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1353     echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1354 jmc 1.73 echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1355 jmc 1.108 if test "x$ADM" = xt ; then
1356     head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt"
1357     grep -A3 'Seconds in section "ALL' $dir/tr_run.$ex/$OUTPUTFILE \
1358     >> $CDIR"/summary.txt"
1359     fi
1360 jmc 1.83 if test "x$POSTCLEAN" = xt ; then
1361 jmc 1.100 run_clean $dir/tr_run.$ex
1362 jmc 1.83 fi
1363 edhill 1.34 done
1364 edhill 1.68
1365 jmc 1.137 if test -f $DRESULTS"/"genmake_state ; then : ; else
1366     if test -f $dir/$builddir/Makefile ; then
1367     mkOpt=`grep '^# OPTFILE=' $dir/$builddir/Makefile 2>/dev/null | head -1 | sed 's/^# //'`
1368     echo "from '$dir/$builddir/Makefile', extract:" > $DRESULTS/genmake_state
1369     sed -n '/^# executed by:/,+1 p' $dir/$builddir/Makefile >> $DRESULTS/genmake_state
1370     echo $mkOpt >> $DRESULTS/genmake_state
1371     fi
1372     fi
1373 jmc 1.83 #postclean $dir/$builddir
1374     if test "x$POSTCLEAN" = xt ; then
1375     makeclean $dir/$builddir \
1376     && run_clean $dir/$rundir
1377     fi
1378 jmc 1.135
1379 edhill 1.10 echo "-------------------------------------------------------------------------------"
1380 jmc 1.135
1381 edhill 1.1 done
1382    
1383 edhill 1.34 printf "Start time: " >> $SUMMARY
1384 jmc 1.114 echo "$start_date" >> $SUMMARY
1385 edhill 1.34 printf "End time: " >> $SUMMARY
1386 edhill 1.13 date >> $SUMMARY
1387 edhill 1.20
1388     # If addresses were supplied and mpack built successfully, then try
1389     # to send email using mpack.
1390     if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1391     echo "No results email was sent."
1392     else
1393     if test "x$HAVE_MPACK" = xt ; then
1394     tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1395     && gzip $DRESULTS".tar" \
1396 edhill 1.44 && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1397 edhill 1.20 RETVAL=$?
1398     if test "x$RETVAL" != x0 ; then
1399     echo
1400     echo "Warning: The tar, gzip, & mpack step failed. Please send email"
1401     echo " to <MITgcm-support@mitgcm.org> for help. You may copy the "
1402     echo " summary of results from the directory \"$DRESULTS\"."
1403     echo
1404     else
1405     echo
1406     echo "An email containing results was sent to the following addresses:"
1407     echo " \"$ADDRESSES\""
1408     echo
1409 jmc 1.129 test -f $DRESULTS".tar" && rm -f $DRESULTS".tar"
1410     test -f $DRESULTS".tar.gz" && rm -f $DRESULTS".tar.gz"
1411 edhill 1.20 fi
1412     fi
1413     fi
1414 edhill 1.13
1415 jmc 1.133 if test "x$QUICK" = xf -a "x$NORUN" = xf ; then
1416     rm -f tr_cmpnum.c tr_cmpnum
1417     fi
1418 edhill 1.1
1419 edhill 1.12 if test "x$CLEANUP" != xt ; then
1420 jmc 1.102 cat $SUMMARY | sed 's/ \. \. \. \. \. \. \. \. \. \. \. \. //'
1421 edhill 1.25 if test -e tr_out.txt ; then
1422     mv tr_out.txt tr_out.txt.old
1423 edhill 1.14 fi
1424 jmc 1.103 cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1425 edhill 1.12 fi
1426 edhill 1.1
1427 edhill 1.40 if test "x$DELDIR" = xt ; then
1428     rm -rf $DRESULTS
1429     fi
1430    

  ViewVC Help
Powered by ViewVC 1.1.22