/[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.148 - (hide annotations) (download)
Fri Nov 5 16:45:02 2010 UTC (13 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62n
Changes since 1.147: +5 -5 lines
when built fails, save also genmake.log & genmake.tr_log

1 edhill 1.19 #! /usr/bin/env bash
2 edhill 1.1 #
3 jmc 1.148 # $Header: /u/gcmpack/MITgcm/verification/testreport,v 1.147 2010/11/03 19:28:18 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 jmc 1.146 eval $command > genmake.tr_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 jmc 1.146 tail genmake.tr_log
367 jmc 1.139 echo "genmakemodel: genmake failed"
368 jmc 1.148 cp genmake.log genmake_* genmake.tr_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 jmc 1.146 if test "x$NODEPEND" = xf ; then rm -f $1/make.tr_log ; fi
381 edhill 1.10 if test "x$NOCLEAN" = xt ; then
382 jmc 1.83 echo "make Clean skipped!"
383 edhill 1.10 else
384     (
385     cd $1;
386 jmc 1.87 #if test -e $OUTPUTFILE ; then rm -f $OUTPUTFILE ; fi
387 edhill 1.10 if test -r Makefile ; then
388 jmc 1.139 printf 'clean build-dir: make Clean ... '
389 jmc 1.145 rm -f Makefile.old
390 jmc 1.146 $MAKE Clean >> make.tr_log 2>&1
391 edhill 1.10 RETVAL=$?
392     if test "x$RETVAL" != x0 ; then
393 jmc 1.146 tail make.tr_log
394 jmc 1.139 echo "makeclean: \"make Clean\" failed"
395 jmc 1.148 cp make.tr_log genmake.log genmake.tr_log $CDIR
396 edhill 1.10 return 1
397     fi
398 jmc 1.139 echo successful
399 jmc 1.127 else
400     echo ''
401 edhill 1.10 fi
402     exit 0
403     )
404     fi
405     }
406    
407 jmc 1.83 run_clean()
408 edhill 1.68 {
409 jmc 1.83 # run_clean directory
410     if test "x$NOCLEAN" = xt ; then
411     echo "run_clean skipped!"
412     else
413 edhill 1.68 (
414     cd $1;
415 jmc 1.139 printf 'clean run-dir ... '
416 jmc 1.83 # part of what is done after "make clean" when doing "make CLEAN"
417     find . -name "*.meta" -exec rm {} \;
418     find . -name "*.data" -exec rm {} \;
419     find . -name "fort.*" -exec rm {} \;
420     find . -type l -exec rm {} \;
421 jmc 1.145 rm -f $EXECUTABLE $RUNLOG *.txt STD* *diagnostics.log datetime
422 jmc 1.83 rm -rf mnc_test_*
423 jmc 1.107 rm -f *_MIT_CE_000.opt0000 costfunction*0000
424 jmc 1.139 echo successful
425 edhill 1.68 exit 0
426     )
427     fi
428     }
429    
430 edhill 1.10 makedependmodel()
431     {
432     # makedependmodel directory
433     if test "x$NODEPEND" = xt ; then
434     echo "make depend skipped!"
435     else
436     (
437     cd $1;
438 jmc 1.139 printf 'make depend ... '
439 jmc 1.146 $MAKE depend >> make.tr_log 2>&1
440 edhill 1.1 RETVAL=$?
441     if test "x$RETVAL" != x0 ; then
442 jmc 1.146 tail make.tr_log
443 jmc 1.139 echo "makedependmodel: make depend failed"
444 jmc 1.148 cp make.tr_log genmake.log genmake.tr_log $CDIR
445 edhill 1.1 return 1
446 edhill 1.10 else
447 jmc 1.139 echo successful
448 edhill 1.1 fi
449 edhill 1.10 )
450     fi
451 edhill 1.1 }
452    
453     makemodel()
454     {
455     # makemodel directory
456     (
457 jmc 1.136 if test "x$NOMAKE" = xt ; then
458     cd $1;
459     if test -x $EXECUTABLE ; then
460     echo "make skipped!"
461     else
462     echo "no executable!"
463     return 2
464     fi
465     else
466 edhill 1.1 cd $1;
467     if test -r Makefile ; then
468 jmc 1.139 printf 'make ... '
469 utke 1.120 if test "x$ADM" = xt ; then
470 jmc 1.146 $MAKE adall >> make.tr_log 2>&1
471 utke 1.120 elif test "x$OADM" = xt ; then
472 jmc 1.146 $MAKE adAll >> make.tr_log 2>&1
473 utke 1.120 else
474 edhill 1.43 if test "x$JOBS" = x ; then
475 jmc 1.146 $MAKE >> make.tr_log 2>&1
476 edhill 1.43 else
477 jmc 1.146 $MAKE -j $JOBS >> make.tr_log 2>&1
478 edhill 1.43 fi
479 edhill 1.24 fi
480 edhill 1.1 RETVAL=$?
481     if test "x$RETVAL" != x0 ; then
482 jmc 1.146 tail make.tr_log
483 jmc 1.139 echo failed
484 jmc 1.148 cp make.tr_log genmake.log genmake.tr_log $CDIR
485 jmc 1.131 rm -f $EXECUTABLE
486 edhill 1.1 return 1
487     else
488 jmc 1.139 echo successful
489 edhill 1.1 fi
490     fi
491 jmc 1.136 fi
492 edhill 1.1 )
493     }
494    
495 edhill 1.27 symlink_mpifiles()
496     {
497     # Put special links so that MPI specific files are used
498     # This MUST be invoked between makeclean and makelinks because
499     # the Makefile will link to non-mpi files by default
500    
501     dir=$1
502     code_dir=$2
503     BUILD_DIR=$dir/$3
504     CODE_DIR=$dir/$code_dir
505 jmc 1.135
506 edhill 1.27 # These are files that should replace their counter-part when using -mpi
507 mlosch 1.111 MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi" -print)`
508 edhill 1.27
509     # Is this an MPI run?
510     if test "x$MPI" = xt ; then
511     # YES: We symbolically link these files to the build
512     # dir so long as there is no real file in place
513     for ii in $MPI_FILES ; do
514     i=`echo $ii | sed 's:^\./::'`
515     name=`echo $i | sed 's:_mpi::' `
516     cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1
517     RETVAL=$?
518     if test "x$RETVAL" != x0 ; then
519     if ! test -f $BUILD_DIR/$i ; then
520 edhill 1.45 #echo Linking $name to $i
521 edhill 1.27 (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
522     fi
523     fi
524     done
525     else
526 edhill 1.45 # NO: We undo any _mpi symbolically linked files
527 edhill 1.27 for ii in $MPI_FILES ; do
528     i=`echo $ii | sed 's:^\./::'`
529     name=`echo $i | sed 's:_mpi::' `
530     if test -L $BUILD_DIR/$name ; then
531 edhill 1.45 cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
532     RETVAL=$?
533     if test "x$RETVAL" = x0 ; then
534     #echo Un-linking $name from $linktarg
535 edhill 1.27 rm -f $BUILD_DIR/$name
536     fi
537     fi
538     done
539     fi
540 jmc 1.135
541 edhill 1.27 }
542    
543 edhill 1.1 linkdata()
544     {
545 jmc 1.83 # linkdata run_dir input_dir_1 input_dir_2 ...
546 edhill 1.1 #
547     # symbolically link data files to run directory
548 jmc 1.83 if test -d $1 ; then
549 edhill 1.12 (
550 jmc 1.83 cd $1 ; shift
551 jmc 1.139 echo 'linkdata from dirs:' $*
552 jmc 1.125 inpMPI=`(cd ../$1 ; find . -name "*.mpi" -print | sed 's:^\./::')`
553     for xx in $inpMPI ; do
554     if test -r "../"$1"/"$xx ; then
555     # found 1 _mpi sfx file in 1rst input dir and it is readable
556     yy=`echo $xx | sed 's:\.mpi$::'`
557     if test "x$MPI" = "xt" ; then
558     # mpi test: remove symbolic link & link _mpi sfx file
559     if test -h $yy ; then rm -f $yy ; fi
560 jmc 1.135 if test ! -r $yy ; then
561 jmc 1.125 ln -sf "../"$1"/"$xx $yy ;
562 jmc 1.139 printf " $xx" 1>&2
563 jmc 1.125 fi
564     else
565     # not mpi test: remove symbolic link
566     if test -h $yy ; then rm -f $yy ; fi
567     fi
568     fi
569     done
570 jmc 1.83 if test -r "../"$1"/eedata.mth" ; then
571     # found eedata.mth in 1rst input dir and it is readable
572     if test "x$MULTI_THREAD" = "xt" ; then
573     # multi-threaded test: remove symbolic link & link eedata.mth
574     if test -h eedata ; then rm -f eedata ; fi
575 jmc 1.135 if test ! -r eedata ; then
576 jmc 1.83 ln -sf "../"$1"/eedata.mth" eedata ;
577 jmc 1.139 printf ' eedata.mth' 1>&2
578 edhill 1.24 fi
579 jmc 1.83 else
580     # not multi-threaded test: remove eedata symbolic link
581     if test -h eedata ; then rm -f eedata ; fi
582     fi
583     fi
584 jmc 1.108 prevDir='NONE'
585 jmc 1.83 for ldir in $* ; do
586 jmc 1.108 if test -d "../"$ldir -a $ldir != $prevDir ; then
587 jmc 1.139 printf " ldir=${ldir}:" 1>&2
588 jmc 1.83 files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
589     for i in $files ; do
590     if test ! -d "../"$ldir/$i ; then
591     if test ! -r $i ; then
592     printf ' '$i 1>&2
593     ln -sf "../"$ldir"/"$i $i
594     fi
595     fi
596     done
597 jmc 1.139 printf ' ;' 1>&2
598 jmc 1.83 if test -x "../"$ldir"/"prepare_run ; then
599 jmc 1.139 "../"$ldir"/"prepare_run 1>&2
600     else
601     echo '' 1>&2
602 edhill 1.24 fi
603 jmc 1.82 fi
604 jmc 1.108 prevDir=$ldir
605 jmc 1.83 done
606 edhill 1.12 )
607 edhill 1.1 fi
608     }
609    
610     runmodel()
611     {
612 edhill 1.6 # runmodel directory
613 edhill 1.1 #
614 jmc 1.135 # runs "$COMMAND in "directory"
615 edhill 1.6 # (where "$COMMAND" is relative to "directory")
616 edhill 1.1 (
617     cd $1
618 jmc 1.139 printf 'runmodel in %s ... ' $1
619 jmc 1.134 if test -L $EXECUTABLE ; then
620     if test -x "../"$builddir"/"$EXECUTABLE ; then
621 jmc 1.106 diff -q $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
622 jmc 1.119 outD=$? ; if test $outD != 0 ; then rm -f $EXECUTABLE ; fi
623 jmc 1.134 else rm -f $EXECUTABLE
624     fi
625 jmc 1.106 fi
626 jmc 1.83 if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
627 jmc 1.119 echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_tmp
628 jmc 1.83 ln -sf "../"$builddir"/"$EXECUTABLE .
629     fi
630     if test ! -x $EXECUTABLE ; then
631 jmc 1.119 rm -f $RUNLOG ; touch $RUNLOG
632     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
633     echo " no executable:" $EXECUTABLE >> $RUNLOG
634 jmc 1.83 RETVAL=8
635 jmc 1.88 ENDVAL=-1
636 jmc 1.75 else
637 jmc 1.98 if test ! -f $OUTPUTFILE -o $OUTPUTFILE -ot $EXECUTABLE ; then
638     # output do not exist or is older than executable:
639 jmc 1.119 rm -f $RUNLOG ; touch $RUNLOG
640     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
641     ( eval $COMMAND ) >> $RUNLOG 2>&1
642 jmc 1.83 RETVAL=$?
643     else
644     RETVAL=0
645 jmc 1.119 if test -f $RUNLOG ; then
646     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
647     echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
648 jmc 1.135 else
649 jmc 1.119 touch $RUNLOG
650     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
651     echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
652     echo " no previous $RUNLOG: assume NORMAL END" >> $RUNLOG 2>&1
653 jmc 1.88 fi
654 jmc 1.83 fi
655 jmc 1.119 ENDVAL=`cat $RUNLOG | grep -v 'ABNORMAL END' | grep -c 'NORMAL END'`
656 jmc 1.75 fi
657 jmc 1.119 rm -f run.log_tmp
658 jmc 1.88 if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
659 jmc 1.139 echo successful
660     printf '=> output from running in %s :\n' $1 1>&2
661     tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
662 edhill 1.44 # === Reduce the size of the testing emails!
663 jmc 1.87 #cp $OUTPUTFILE $CDIR"/"$OUTPUTFILE
664 jmc 1.48 if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
665 edhill 1.6 return 0
666 jmc 1.132 elif [ $RETVAL -ne 0 -a $ENDVAL -gt 0 ] ; then
667     #-- for some weird cases (run is finihed but with error code)
668 jmc 1.139 echo 'finished with error (run:' $RETVAL ' end:' $ENDVAL ')'
669     printf '=> output from running in %s :\n' $1 1>&2
670     tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
671 jmc 1.132 return 0
672 edhill 1.6 else
673 jmc 1.139 echo 'failed (run:' $RETVAL ' end:' $ENDVAL ')'
674     printf '=> output from running in %s :\n' $1 1>&2
675     tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
676 jmc 1.119 cp $RUNLOG $CDIR"/"$RUNLOG
677 jmc 1.48 if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
678 edhill 1.6 return 1
679 edhill 1.1 fi
680     )
681     }
682    
683     createcodelet()
684     {
685     # create codelet for comparing model output
686    
687 jmc 1.112 printf "creating the comparison code (using CC=$CC)... "
688 jmc 1.91 cat > tr_cmpnum.c <<EOF
689 edhill 1.22 #include <stdio.h>
690     #include <math.h>
691     int main( int argc, char** argv ) {
692 jmc 1.91 int linnum,cmplin,best,lncnt;
693 edhill 1.52 double a,b,abave,relerr;
694 jmc 1.57 best = -22;
695 adcroft 1.33 lncnt = 0;
696 jmc 1.96 while( 1 & ( (lncnt+=1) < 999 ) ) {
697 edhill 1.22 scanf("%d", &linnum);
698     if (linnum == -1) break;
699     scanf("%lf", &a); scanf("%lf", &b);
700 edhill 1.52 abave = 0.5*(fabs(a)+fabs(b));
701 jmc 1.91 if ( abave == abave ) {
702     if (abave > 0.0) {
703     relerr=fabs(a-b)/abave;
704     if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
705     else { cmplin = -16 ; }
706     best = (best > cmplin) ? best : cmplin; }
707     else { cmplin = -22 ; }
708     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
709     }
710     else {
711     /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
712     break; }
713 edhill 1.22 }
714 adcroft 1.33 if (lncnt == 999) best=-29;
715 jmc 1.91 if (linnum != -1) best=-99;
716 edhill 1.22 printf("%d\n", -best);
717     return 0;
718     }
719     EOF
720 jmc 1.91 $CC -o tr_cmpnum tr_cmpnum.c -lm
721 edhill 1.1
722 jmc 1.91 if [ -x ./tr_cmpnum ]; then
723 edhill 1.1 echo "OK"
724     return 0
725     else
726     echo
727 jmc 1.135 echo "ERROR: failed to compile comparison code -- please specify"
728 edhill 1.58 echo " a C compiler using the CC environment variable."
729 edhill 1.1 exit 1
730     fi
731     }
732    
733     formatresults()
734     {
735     # formatresults expt genmake depend make run results*
736    
737     nm=$1
738     printf '%s %s %s %s' $2 $3 $4 $5
739     shift; shift; shift; shift; shift;
740 jmc 1.94 listPrt=$@
741     listRes=`echo $listPrt | sed 's/>//' | sed 's/<//'`
742     xx=`echo $listPrt | sed 's/.*>//' | sed 's/<.*//' | awk '{print $1}'`
743 jmc 1.97 printf '%3s' $listPrt
744 jmc 1.98 # line below does not work on hp-ux_ia64 : do those substitutions later on
745 jmc 1.95 # printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</'
746 jmc 1.135
747 jmc 1.94 if [ $xx = '..' ]; then
748     printf ' N/O '
749     elif [ $xx = '--' ]; then
750     printf ' N/O '
751     elif [ $xx = 99 ]; then
752 edhill 1.1 printf ' N/O '
753     else
754 jmc 1.94 if [ $xx -ge $MATCH_CRIT ]; then
755 edhill 1.1 printf ' pass'
756     else
757     printf ' FAIL'
758     fi
759     fi
760     printf ' %s' $nm
761     printf '\n'
762 jmc 1.135
763 edhill 1.1 }
764    
765     scandirs()
766     {
767 jmc 1.81 if [ $# -eq 1 ]; then
768     for arg in * ; do
769 jmc 1.99 test -f $arg/$1 && echo $arg
770 jmc 1.81 done
771 edhill 1.1 else
772 jmc 1.81 echo $*
773 edhill 1.1 fi
774     }
775    
776    
777 jmc 1.123 check_eedata()
778     {
779     # check_eedata size.h eedata
780     if [ $# -eq 2 ] ; then
781     if test -f $1 -a -f $2 ; then
782     sx=`grep "^ & *nSx *=" $1 | sed "s/^ & *nSx *=//" | sed 's/, *$//'`
783     nx=`grep "^ *nTx *=" $2 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
784     if test "x$nx" = x ; then
785     rx=10
786     else
787     rx=`expr $sx % $nx`
788     fi
789     sy=`grep "^ & *nSy *=" $1 | sed "s/^ & *nSy *=//" | sed 's/, *$//'`
790     ny=`grep "^ *nTy *=" $2 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
791     if test "x$ny" = x ; then
792     ry=20
793     else
794     ry=`expr $sy % $ny`
795     fi
796     echo `expr $rx + $ry`
797     else
798     echo '-1'
799     fi
800     else
801     echo '-2'
802     fi
803    
804     }
805    
806 edhill 1.1 ###############################################################################
807    
808    
809     # Default properties
810     debug=0
811     verbose=1
812     clean=0
813 edhill 1.10
814 edhill 1.40 IEEE=true
815 edhill 1.10 if test "x$MITGCM_IEEE" != x ; then
816     IEEE=$MITGCM_IEEE
817     fi
818 jmc 1.109 GSL=f
819 edhill 1.10
820     CLEANUP=f
821 jmc 1.133 NORUN=f
822 edhill 1.10 QUICK=f
823 jmc 1.136 NOMAKE=f
824 edhill 1.10 NOGENMAKE=f
825     NOCLEAN=f
826     NODEPEND=f
827 edhill 1.68 POSTCLEAN=f
828 edhill 1.1
829 edhill 1.4 BASH=
830 edhill 1.10 OPTFILE=NONE
831     ADDRESSES=
832 edhill 1.1 TESTDIRS=
833 jmc 1.89 SKIPDIRS=
834 edhill 1.1 MPACKDIR="../tools/mpack-1.6"
835 edhill 1.20 HAVE_MPACK=
836 jmc 1.113 MPACK=
837 edhill 1.24 COMMAND=
838 jmc 1.141 MKDEPEND=
839 edhill 1.59 if test "x$MAKE" = x ; then
840     MAKE=make
841     fi
842     if test "x$CC" = x ; then
843     CC=cc
844     fi
845 edhill 1.43 JOBS=
846 edhill 1.7 MPI=f
847 jmc 1.83 MULTI_THREAD=f
848 jmc 1.70 OUTDIR=
849 edhill 1.40 DELDIR=
850 jmc 1.135 USE_R4=
851 edhill 1.1
852 edhill 1.24 ADM=
853 utke 1.120 OADM=
854 edhill 1.24
855 jmc 1.117 # list of pTracers to check for monitor output
856 edhill 1.50 PTRACERS_NUM="1 2 3 4 5"
857 edhill 1.49
858 jmc 1.147 MATCH_CRIT=10
859 jmc 1.92
860 edhill 1.34 printf "parsing options... "
861 edhill 1.1
862     ac_prev=
863     for ac_option ; do
864    
865     # If the previous option needs an argument, assign it.
866     if test -n "$ac_prev"; then
867     eval "$ac_prev=\$ac_option"
868     ac_prev=
869     continue
870     fi
871    
872     ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
873 jmc 1.135
874 edhill 1.1 case $ac_option in
875    
876     -help | --help | -h | --h)
877     usage ;;
878    
879 edhill 1.2 -optfile | --optfile | -of | --of)
880 edhill 1.10 ac_prev=OPTFILE ;;
881 edhill 1.2 -optfile=* | --optfile=* | -of=* | --of=*)
882 edhill 1.10 OPTFILE=$ac_optarg ;;
883 edhill 1.1
884     -addr | --addr | -a | --a)
885     ac_prev=ADDRESSES ;;
886 jmc 1.136 -addr=* | --addr=* | -a=* | --a=*)
887 edhill 1.1 ADDRESSES=$ac_optarg ;;
888 jmc 1.113 -mpackdir | --mpackdir | -mpd | --mpd)
889     ac_prev=MPACKDIR ;;
890     -mpackdir=* | --mpackdir=* | -mpd=* | --mpd=*)
891     MPACKDIR=$ac_optarg ;;
892 edhill 1.1
893     -tdir | --tdir | -t | --t)
894     ac_prev=TESTDIRS ;;
895 jmc 1.136 -tdir=* | --tdir=* | -t=* | --t=*)
896 edhill 1.1 TESTDIRS=$ac_optarg ;;
897 edhill 1.4
898 jmc 1.89 -skipdir | --skipdir | -skd | --skd)
899     ac_prev=SKIPDIRS ;;
900 jmc 1.136 -skipdir=* | --skipdir=* | -skd=* | --skd=*)
901 jmc 1.89 SKIPDIRS=$ac_optarg ;;
902    
903 edhill 1.4 -bash | --bash | -b | --b)
904     ac_prev=BASH ;;
905 jmc 1.136 -bash=* | --bash=* | -b=* | --b=*)
906 edhill 1.4 BASH=$ac_optarg ;;
907 edhill 1.5
908 edhill 1.6 -command | --command | -c | --c)
909     ac_prev=COMMAND ;;
910 jmc 1.136 -command=* | --command=* | -c=* | --c=*)
911 edhill 1.6 COMMAND=$ac_optarg ;;
912 edhill 1.8
913 jmc 1.141 -makedepend | --makedepend | -md | --md)
914     ac_prev=MKDEPEND ;;
915     -makedepend=* | --makedepend=* | -md=* | --md=*)
916     MKDEPEND=$ac_optarg ;;
917    
918 edhill 1.8 -make | --make | -m | --m)
919     ac_prev=MAKE ;;
920 jmc 1.136 -make=* | --make=* | -m=* | --m=*)
921 edhill 1.8 MAKE=$ac_optarg ;;
922 edhill 1.1
923 jmc 1.70 -odir | --odir)
924     ac_prev=OUTDIR ;;
925     -odir=* | --odir=*)
926     OUTDIR=$ac_optarg ;;
927    
928 edhill 1.50 -ptracers | --ptracers | -ptr | --ptr)
929     ac_prev=PTRACERS_NUM ;;
930     -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
931     PTRACERS_NUM=$ac_optarg ;;
932    
933 jmc 1.92 -match | --match ) ac_prev=MATCH_CRIT ;;
934     -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
935    
936 jmc 1.136 -j | --j) ac_prev=JOBS ;;
937     -j=* | --j=*) JOBS=$ac_optarg ;;
938 edhill 1.43
939 edhill 1.10 -clean | --clean)
940 jmc 1.69 CLEANUP=t ; DELDIR=t ;;
941 edhill 1.10
942 jmc 1.133 -norun | --norun | -nr | --nr)
943     NORUN=t ;;
944 jmc 1.136 -runonly | --runonly | -ro | --ro)
945     QUICK=t ; NOMAKE=t ;;
946 edhill 1.10 -quick | --quick | -q | --q)
947     QUICK=t ;;
948     -nogenmake | --nogenmake | -ng | --ng)
949     NOGENMAKE=t ;;
950     -noclean | --noclean | -nc | --nc)
951     NOCLEAN=t ;;
952     -nodepend | --nodepend | -nd | --nd)
953     NODEPEND=t ;;
954    
955 edhill 1.68 -postclean | --postclean | -pc | --pc)
956     POSTCLEAN=t ;;
957    
958 edhill 1.18 -mpi) MPI=t ;;
959 edhill 1.10
960 jmc 1.83 -mth) MULTI_THREAD=t ;;
961    
962 edhill 1.24 -adm | -ad) ADM=t ;;
963    
964 utke 1.120 -oad) OADM=t; NODEPEND=t ;;
965    
966 edhill 1.10 -ieee) IEEE=true ;;
967     -noieee) IEEE= ;;
968 jmc 1.109 -gsl) GSL=t ;;
969 edhill 1.10
970 edhill 1.1 -verbose) verbose=2 ;;
971     -debug) debug=1 ;;
972     -quiet) verbose=0 ;;
973    
974 edhill 1.40 -deldir | -dd) DELDIR=t ;;
975    
976 jmc 1.136 -use_r4|-ur4) USE_R4=t ;;
977 jmc 1.135
978 ce107 1.90 -ts) TS=t;;
979     -papis) PAPIS=t;;
980     -pcls) PCL=t;;
981    
982 edhill 1.1 -*)
983     echo "Error: unrecognized option: "$ac_option
984     usage
985     ;;
986 jmc 1.135
987 edhill 1.1 *)
988     echo "Error: unrecognized argument: "$ac_option
989     usage
990     ;;
991 jmc 1.135
992 edhill 1.1 esac
993 jmc 1.135
994 edhill 1.1 done
995    
996 edhill 1.10 if test "x$QUICK" = xt ; then
997     NOGENMAKE=t
998     NOCLEAN=t
999     NODEPEND=t
1000     fi
1001    
1002 jmc 1.99 #- setting for forward or ADM testing
1003     if test "x$ADM" = xt ; then
1004     code_dir=code_ad
1005 jmc 1.108 inputdir=input_ad
1006 jmc 1.99 ref_outp="output_adm.txt"
1007     EXECUTABLE="mitgcmuv_ad"
1008 utke 1.120 elif test "x$OADM" = xt ; then
1009     code_dir=code_oad
1010     inputdir=input_oad
1011     ref_outp="output_oadm.txt"
1012     EXECUTABLE="mitgcmuv_ad"
1013 jmc 1.99 else
1014     code_dir=code
1015 jmc 1.108 inputdir=input
1016 jmc 1.99 ref_outp="output.txt"
1017     EXECUTABLE="mitgcmuv"
1018     fi
1019    
1020 jmc 1.142 xx=`echo $TESTDIRS | awk '{print $1}'`
1021 edhill 1.1 if test "x$TESTDIRS" = x ; then
1022 jmc 1.103 LIST=`scandirs results/$ref_outp`
1023 jmc 1.142 elif test $xx = 'start_from' ; then
1024     xx=`echo $TESTDIRS | awk '{print $2}'`
1025     LIST=`scandirs results/$ref_outp | sed -n "/$xx/,$ p"`
1026 jmc 1.84 else
1027     #- expand group of experiments:
1028     LIST=" "
1029     for xx in $TESTDIRS
1030     do
1031     case $xx in
1032 jmc 1.86 'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
1033     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
1034     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
1035 jmc 1.84 ;;
1036     'tutorials')
1037     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
1038     *) LIST=${LIST}" "$xx ;;
1039     esac
1040 jmc 1.135 done
1041 jmc 1.89 fi
1042     #echo 'LIST='${LIST}'<'
1043     #- skip dirs, remove duplicate and non-directory:
1044     TESTDIRS=" "
1045     count=0
1046     for xx in $LIST
1047     do
1048     yy=`echo $SKIPDIRS | grep -c $xx`
1049     if test $yy = 0 ; then
1050 jmc 1.84 if test -d $xx ; then
1051     yy=`echo $TESTDIRS | grep -c $xx`
1052     if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
1053 jmc 1.89 else count=1 ;
1054     echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
1055     fi
1056     else
1057     if test $count = 1 ; then echo -n ", \"$xx\""
1058     else count=1 ; echo "" ; echo -n " skip: \"$xx\""
1059 jmc 1.84 fi
1060 jmc 1.89 fi
1061 jmc 1.135 done
1062 jmc 1.89 if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
1063 jmc 1.84 #echo 'TESTDIRS='${TESTDIRS}'<'
1064 edhill 1.1
1065 edhill 1.10 if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
1066     OPTFILE=$MITGCM_OF
1067     fi
1068    
1069 jmc 1.146 RUNLOG="run.tr_log"
1070 jmc 1.99 OUTPUTFILE=$ref_outp
1071 jmc 1.87 if test "x$COMMAND" = x ; then
1072 jmc 1.77 COMMAND="./$EXECUTABLE > $OUTPUTFILE"
1073 edhill 1.24 fi
1074 jmc 1.87 if test "x$MPI" = xt ; then
1075     OUTPUTFILE="STDOUT.0000"
1076 edhill 1.24 fi
1077    
1078 jmc 1.76 echo "OK (COMMAND= $COMMAND )"
1079 edhill 1.1
1080 jmc 1.94 # set the Default List of output variables to be checked:
1081     # (use default or load experiment-specific list from file "tr_checklist")
1082     # content : 1rst = main variable used to decide if it pass or FAIL
1083     # others = number of matching digits to be printed in summary.txt
1084 utke 1.120 if test "x$ADM" = x -a "x$OADM" = x; then
1085 jmc 1.94 DEF_CHECK_LIST='PS PS T+ S+ U+ V+ pt1+ pt2+ pt3+ pt4+ pt5+'
1086     EMPTY_RESULTS='.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..'
1087 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}'`
1088 jmc 1.94 ii=`echo $EMPTY_RESULTS | awk '{print NF}'`
1089 jmc 1.97 EMPTY_RESULTS=$EMPTY_RESULTS`expr $LEN_CHECK_LIST - $ii | awk 'BEGIN{FS=":"}{for(i=1;i<=$1;i++){printf " ."}}'`
1090 jmc 1.99 else
1091 jmc 1.103 DEF_CHECK_LIST='Grad Cost Grad'
1092 jmc 1.99 EMPTY_RESULTS='.. ..'
1093     LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1094 jmc 1.94 fi
1095    
1096 edhill 1.1 # create the FORTRAN comparison code
1097 jmc 1.133 if test -x tr_cmpnum ; then
1098     echo "skipping comparison code build"
1099     else
1100     createcodelet
1101     fi
1102 edhill 1.1
1103 jmc 1.112 # build the mpack utility (if ADDRESSES = NONE, do it to test the build)
1104     if test "x$ADDRESSES" = x ; then
1105 edhill 1.32 echo "skipping mpack build"
1106     else
1107 edhill 1.31 build_mpack
1108     fi
1109 edhill 1.1
1110     # Create a uniquely named directory to store results
1111 jmc 1.110 CMDLINE=$0
1112 jmc 1.118 for xx in "$@" ; do nw=`echo $xx | wc -w`
1113     if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
1114     else CMDLINE="$CMDLINE '$xx'" ; fi
1115     done
1116     #for xx in "$@" ; do CMDLINE="$CMDLINE '$xx'" ; done
1117 edhill 1.1 MACH=`hostname`
1118 edhill 1.2 UNAMEA=`uname -a`
1119 edhill 1.1 DATE=`date +%Y%m%d`
1120 edhill 1.25 BASE="tr_"$MACH"_"$DATE"_"
1121 jmc 1.70 if test "x$OUTDIR" != x ; then
1122     BASE="tr_"$OUTDIR"_"$DATE"_"
1123 jmc 1.121 else
1124     short_name=`hostname | sed 's/\..*$//'`
1125     BASE="tr_"$short_name"_"$DATE"_"
1126 jmc 1.70 fi
1127 edhill 1.1 DNUM=0
1128     DRESULTS="$BASE$DNUM"
1129     while test -e $DRESULTS ; do
1130     DNUM=$(( $DNUM + 1 ))
1131     DRESULTS="$BASE$DNUM"
1132     done
1133     mkdir $DRESULTS
1134     RETVAL=$?
1135     if test "x$RETVAL" != x0 ; then
1136 edhill 1.20 echo "ERROR: Can't create results directory \"./$DRESULTS\""
1137 edhill 1.1 exit 1
1138     fi
1139     SUMMARY="$DRESULTS/summary.txt"
1140 edhill 1.16 start_date=`date`
1141 edhill 1.17 echo $start_date > $SUMMARY
1142 jmc 1.110 echo 'run:' $CMDLINE >> $SUMMARY
1143     echo 'on :' $UNAMEA >> $SUMMARY
1144 edhill 1.1
1145 edhill 1.11 of_path=
1146 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
1147     if test -r $OPTFILE ; then
1148 edhill 1.11 # get the path
1149     path=${OPTFILE%/*}
1150     if test "x$path" = x ; then
1151     of_path=`pwd`
1152     else
1153     of_path=`( cd $path > /dev/null 2>&1 ; pwd )`
1154     fi
1155     file=${OPTFILE##*/}
1156     OPTFILE=$of_path/$file
1157 edhill 1.21 cp $OPTFILE $DRESULTS
1158     echo >> $SUMMARY
1159     echo " OPTFILE=$OPTFILE" >> $SUMMARY
1160 edhill 1.11 else
1161 edhill 1.21 echo | tee $SUMMARY
1162     echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
1163     exit 1
1164 edhill 1.10 fi
1165 edhill 1.21 else
1166     echo >> $SUMMARY
1167     echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
1168     echo " so the genmake default will be used." >> $SUMMARY
1169 edhill 1.10 fi
1170     echo
1171     echo >> $SUMMARY
1172 utke 1.120 if test "x$ADM" = x -a "x$OADM" = x; then
1173 jmc 1.135 if [ $MATCH_CRIT -lt 10 ] ;
1174     then line_0="default "$MATCH_CRIT ;
1175 jmc 1.94 else line_0="default "$MATCH_CRIT ; fi
1176     line_0="$line_0 ----T----- ----S----- ----U----- ----V-----"
1177 edhill 1.49 line_1="G D M c m s m s m s m s"
1178     line_2="E p a R g m m e . m m e . m m e . m m e ."
1179     line_3="N n k u 2 i a a d i a a d i a a d i a a d"
1180     line_4="2 d e n d n x n . n x n . n x n . n x n ."
1181 edhill 1.50 for ii in $PTRACERS_NUM ; do
1182 edhill 1.49 line_0="$line_0 --PTR 0"$ii"--"
1183     line_1="$line_1 m s"
1184     line_2="$line_2 m m e ."
1185     line_3="$line_3 i a a d"
1186     line_4="$line_4 n x n ."
1187     done
1188     echo "$line_0" | tee -a $SUMMARY
1189     echo "$line_1" | tee -a $SUMMARY
1190     echo "$line_2" | tee -a $SUMMARY
1191     echo "$line_3" | tee -a $SUMMARY
1192     echo "$line_4" | tee -a $SUMMARY
1193     echo " " | tee -a $SUMMARY
1194 edhill 1.24 else
1195     echo "ADJOINT=true" >> $SUMMARY
1196     echo >> $SUMMARY
1197 jmc 1.135 if [ $MATCH_CRIT -lt 10 ] ;
1198     then line_0="default "$MATCH_CRIT ;
1199 jmc 1.103 else line_0="default "$MATCH_CRIT ; fi
1200 jmc 1.100 echo "$line_0" | tee -a $SUMMARY
1201 edhill 1.24 cat << EOF | tee -a $SUMMARY
1202     G D M C G
1203     E p a R o r
1204     N n k u s a
1205     2 d e n t d
1206    
1207     EOF
1208     fi
1209 jmc 1.139 echo "-------------------------------------------------------------------------------"
1210 edhill 1.1
1211 edhill 1.10 # ...and each test directory...
1212     for dir in $TESTDIRS ; do
1213 jmc 1.135
1214 jmc 1.106 # set builddir & rundir:
1215     builddir="build"
1216     if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1217     rundir="run"
1218 jmc 1.143 pfxdir="tr_$rundir"
1219 jmc 1.106 if test ! -d $dir/$rundir ; then
1220     rundir=$builddir
1221     fi
1222     CODE_DIR=$dir/$code_dir
1223     BUILD_DIR=$dir/$builddir
1224    
1225 edhill 1.10 # Cleanup only!
1226     if test "x$CLEANUP" = xt ; then
1227 jmc 1.127 echo -n ' --- dir:' $BUILD_DIR ': '
1228     makeclean $BUILD_DIR
1229 jmc 1.145 ( cd $BUILD_DIR
1230     rm -f $EXECUTABLE *.bak
1231 jmc 1.146 rm -f genmake_state genmake_*optfile genmake.log
1232     rm -f genmake.tr_log make.tr_log
1233 jmc 1.145 )
1234 jmc 1.106 if test -d $dir/$rundir/CVS ; then
1235 jmc 1.127 echo -n ' --- dir:' $dir/$rundir ': '
1236 jmc 1.106 run_clean $dir/$rundir
1237 edhill 1.10 fi
1238 jmc 1.143 trdir=`( cd $dir ; find . -type d -name "$pfxdir.*" -print | sed 's/^.\///')`
1239 jmc 1.127 ttd=`echo $trdir | wc -w`
1240     if test $ttd != 0 ; then
1241     echo ' --- rm dir:' $trdir
1242     ( cd $dir ; rm -rf $trdir )
1243     fi
1244 edhill 1.10 continue
1245 edhill 1.1 fi
1246 edhill 1.3
1247 jmc 1.135 # Verify that the testdir exists and contains previous
1248 edhill 1.10 # results in the correct location--or skip this directory!
1249 jmc 1.104 fout=$dir"/results/"$ref_outp
1250 edhill 1.24 if test ! -r $fout ; then
1251     echo "can't read \"$fout\" -- skipping $dir"
1252 edhill 1.10 continue
1253     fi
1254 edhill 1.7
1255 jmc 1.117 # Check for specific files for particular type of run
1256 edhill 1.49
1257 edhill 1.30 if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1258 edhill 1.28 echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1259     continue
1260     fi
1261 jmc 1.83 if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1262     echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1263     continue
1264     fi
1265 jmc 1.123 if test "x$MPI" = "xt" -a "x$MULTI_THREAD" = "xt" ; then
1266     retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/input/eedata.mth"`
1267     if test $retv != 0 ; then
1268     echo "input/eedata.mth tiling misfit -- skipping $dir"
1269     continue
1270     fi
1271     fi
1272 jmc 1.83
1273     # Check whether there are "extra runs" for this testdir
1274     extra_runs=
1275 jmc 1.133 if test "x$NORUN" = xf ; then
1276     ex_run_dirs=`( cd $dir ; echo $inputdir.* )`
1277     fi
1278 jmc 1.108 #echo "ex_run_dirs='$ex_run_dirs'"
1279     for exd in $ex_run_dirs ; do
1280     name=`echo $exd | sed -e "s/$inputdir\.//"`
1281     refExOut=`echo $ref_outp | sed "s/\./.${name}./"`
1282     outf="$dir/results/$refExOut"
1283     if test -f $outf -a -r $outf ; then
1284 jmc 1.135 if test "x$MULTI_THREAD" = "xt" ; then
1285 jmc 1.123 if test -r $dir"/"$exd"/eedata.mth" ; then
1286     if test "x$MPI" = "xt" ; then
1287     retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/"$exd"/eedata.mth"`
1288     if test $retv = 0 ; then
1289 jmc 1.83 extra_runs="$extra_runs $name"
1290 jmc 1.123 else
1291     echo $exd"/eedata.mth tiling misfit -- skipping $dir"
1292 jmc 1.83 fi
1293 jmc 1.123 else
1294 jmc 1.108 extra_runs="$extra_runs $name"
1295 jmc 1.123 fi
1296     #else echo $dir"/"$exd"/eedata.mth: not found"
1297 jmc 1.83 fi
1298 jmc 1.123 else
1299     extra_runs="$extra_runs $name"
1300     fi
1301 jmc 1.108 fi
1302     done
1303 edhill 1.28
1304     echo
1305 jmc 1.135 if test "x$extra_runs" = "x" ; then
1306 jmc 1.83 echo "Experiment: $dir"
1307     else
1308     echo "Experiment: $dir ; extra_runs=$extra_runs"
1309     fi
1310 edhill 1.28 echo
1311     unset genmake makedepend make run
1312 jmc 1.94 results=$EMPTY_RESULTS
1313 edhill 1.10
1314     # Create an output dir for each OPTFILE/tdir combination
1315 jmc 1.138 locDIR=$DRESULTS"/"$dir
1316     mkdir $locDIR
1317     CDIR=`pwd`"/$locDIR"
1318 jmc 1.135
1319 jmc 1.133 if test "x$NORUN" = xt ; then
1320     run=N
1321     genmakemodel $dir/$builddir && genmake=Y \
1322     && makeclean $dir/$builddir \
1323     && symlink_mpifiles $dir $code_dir $builddir \
1324     && makedependmodel $dir/$builddir && makedepend=Y \
1325     && makemodel $dir/$builddir && make=Y
1326 edhill 1.10 else
1327 edhill 1.1 genmakemodel $dir/$builddir && genmake=Y \
1328     && makeclean $dir/$builddir \
1329 edhill 1.27 && symlink_mpifiles $dir $code_dir $builddir \
1330 edhill 1.1 && makedependmodel $dir/$builddir && makedepend=Y \
1331     && makemodel $dir/$builddir && make=Y \
1332 jmc 1.139 && run_clean $dir/$rundir \
1333 jmc 1.140 && linkdata $dir/$rundir $inputdir \
1334 edhill 1.12 && runmodel $dir/$rundir && run=Y \
1335 jmc 1.99 && results=`testoutput_run $dir $rundir $ref_outp`
1336 edhill 1.10 fi
1337 jmc 1.139 #echo "results='$results'"
1338 jmc 1.135
1339 edhill 1.24 fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1340 jmc 1.139 echo 1>&2
1341 jmc 1.98 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</' >> $SUMMARY
1342 jmc 1.138 touch $locDIR"/summary.txt"
1343     echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1344     echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1345     echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1346     echo "DATE='$DATE'" >> $locDIR"/summary.txt"
1347     echo "tdir='$dir'" >> $locDIR"/summary.txt"
1348 jmc 1.108 if test "x$ADM" = xt ; then
1349 jmc 1.138 head -1 $dir/$builddir/taf_ad.log >> $locDIR"/summary.txt"
1350 jmc 1.108 grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1351 jmc 1.138 >> $locDIR"/summary.txt"
1352 jmc 1.108 fi
1353 edhill 1.34
1354     for ex in $extra_runs ; do
1355 jmc 1.73 unset run
1356 jmc 1.94 results=$EMPTY_RESULTS
1357 jmc 1.106 # reference output file
1358     refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1359 jmc 1.73 # Create an output dir for each OPTFILE/tdir.ex combination
1360 jmc 1.138 locDIR=$DRESULTS"/"$dir"."$ex
1361     mkdir $locDIR
1362     CDIR=`pwd`"/$locDIR"
1363 jmc 1.143 test ! -e "$dir/$pfxdir.$ex" && mkdir "$dir/$pfxdir.$ex"
1364     run_clean $dir/$pfxdir.$ex
1365     linkdata $dir/$pfxdir.$ex $inputdir.$ex $inputdir
1366     runmodel $dir/$pfxdir.$ex && run=Y \
1367     && results=`testoutput_run $dir $pfxdir.$ex $refExOut`
1368 edhill 1.34 fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1369     fres="$fres.$ex"
1370 jmc 1.139 echo 1>&2
1371 jmc 1.100 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</' >> $SUMMARY
1372 jmc 1.138 touch $locDIR"/summary.txt"
1373     echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1374     echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1375     echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1376     echo "DATE='$DATE'" >> $locDIR"/summary.txt"
1377     echo "tdir='$dir.$ex'" >> $locDIR"/summary.txt"
1378 jmc 1.108 if test "x$ADM" = xt ; then
1379 jmc 1.138 head -1 $dir/$builddir/taf_ad.log >> $locDIR"/summary.txt"
1380 jmc 1.143 grep -A3 'Seconds in section "ALL' $dir/$pfxdir.$ex/$OUTPUTFILE \
1381 jmc 1.138 >> $locDIR"/summary.txt"
1382 jmc 1.108 fi
1383 jmc 1.83 if test "x$POSTCLEAN" = xt ; then
1384 jmc 1.143 run_clean $dir/$pfxdir.$ex
1385 jmc 1.83 fi
1386 edhill 1.34 done
1387 edhill 1.68
1388 jmc 1.139 if test -f $DRESULTS"/"genmake_state ; then : ; else
1389 jmc 1.137 if test -f $dir/$builddir/Makefile ; then
1390     mkOpt=`grep '^# OPTFILE=' $dir/$builddir/Makefile 2>/dev/null | head -1 | sed 's/^# //'`
1391     echo "from '$dir/$builddir/Makefile', extract:" > $DRESULTS/genmake_state
1392     sed -n '/^# executed by:/,+1 p' $dir/$builddir/Makefile >> $DRESULTS/genmake_state
1393     echo $mkOpt >> $DRESULTS/genmake_state
1394     fi
1395     fi
1396 jmc 1.83 #postclean $dir/$builddir
1397     if test "x$POSTCLEAN" = xt ; then
1398     makeclean $dir/$builddir \
1399     && run_clean $dir/$rundir
1400     fi
1401 jmc 1.135
1402 edhill 1.10 echo "-------------------------------------------------------------------------------"
1403 jmc 1.135
1404 edhill 1.1 done
1405    
1406 edhill 1.34 printf "Start time: " >> $SUMMARY
1407 jmc 1.114 echo "$start_date" >> $SUMMARY
1408 edhill 1.34 printf "End time: " >> $SUMMARY
1409 edhill 1.13 date >> $SUMMARY
1410 edhill 1.20
1411     # If addresses were supplied and mpack built successfully, then try
1412     # to send email using mpack.
1413     if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1414     echo "No results email was sent."
1415     else
1416     if test "x$HAVE_MPACK" = xt ; then
1417     tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1418     && gzip $DRESULTS".tar" \
1419 edhill 1.44 && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1420 edhill 1.20 RETVAL=$?
1421     if test "x$RETVAL" != x0 ; then
1422     echo
1423     echo "Warning: The tar, gzip, & mpack step failed. Please send email"
1424     echo " to <MITgcm-support@mitgcm.org> for help. You may copy the "
1425     echo " summary of results from the directory \"$DRESULTS\"."
1426     echo
1427     else
1428     echo
1429     echo "An email containing results was sent to the following addresses:"
1430     echo " \"$ADDRESSES\""
1431     echo
1432 jmc 1.129 test -f $DRESULTS".tar" && rm -f $DRESULTS".tar"
1433     test -f $DRESULTS".tar.gz" && rm -f $DRESULTS".tar.gz"
1434 edhill 1.20 fi
1435     fi
1436     fi
1437 edhill 1.13
1438 jmc 1.133 if test "x$QUICK" = xf -a "x$NORUN" = xf ; then
1439     rm -f tr_cmpnum.c tr_cmpnum
1440     fi
1441 edhill 1.1
1442 edhill 1.12 if test "x$CLEANUP" != xt ; then
1443 jmc 1.102 cat $SUMMARY | sed 's/ \. \. \. \. \. \. \. \. \. \. \. \. //'
1444 edhill 1.25 if test -e tr_out.txt ; then
1445     mv tr_out.txt tr_out.txt.old
1446 edhill 1.14 fi
1447 jmc 1.103 cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1448 edhill 1.12 fi
1449 edhill 1.1
1450 edhill 1.40 if test "x$DELDIR" = xt ; then
1451     rm -rf $DRESULTS
1452     fi
1453    

  ViewVC Help
Powered by ViewVC 1.1.22