/[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.142 - (hide annotations) (download)
Thu Oct 7 20:59:39 2010 UTC (13 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62m
Changes since 1.141: +5 -1 lines
a hack to resume testreport after it stopped (-t 'start_from $experiment')

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

  ViewVC Help
Powered by ViewVC 1.1.22