/[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.195 - (hide annotations) (download)
Sun Sep 22 23:35:56 2013 UTC (10 years, 6 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64o
Changes since 1.194: +10 -9 lines
for MPI test, set default COMMAND to 'mpirun -v -np TR_NPROC ./{executable}'

1 edhill 1.19 #! /usr/bin/env bash
2 edhill 1.1 #
3 jmc 1.195 # $Header: /u/gcmpack/MITgcm/verification/testreport,v 1.194 2013/08/22 19:34:15 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.192 echo " ---- type of test : ----"
15     echo " (-tlm) perform a Tangent Linear run"
16     echo " (-adm|-ad) perform an adjoint run"
17     echo " (-oad) perform an OpenAD adjoint run"
18 jmc 1.122 echo " (-mth) run multi-threaded (using eedata.mth)"
19 jmc 1.154 echo " (-mpi) use MPI to compile and run on 2 processors"
20     echo " (-MPI) NUMBER use MPI to compile and run on max NUMBER procs"
21 jmc 1.156 echo " (-mfile|-mf) STRING MPI: file with list of possible machines to run on"
22 jmc 1.195 echo " (-command|-c) STRING command to run (e.g., if non-standard MPI setting)"
23     echo " DEF='mitgcmuv' or ='mpirun -np TR_NPROC mitgcmuv'"
24 jmc 1.192 echo " ---- testing options : ----"
25     echo " (-optfile|-of) STRING list of optfiles to use"
26 jmc 1.164 echo " (-fast) use optfile default for compiler flags (no '-ieee')"
27     echo " DEF=off => use IEEE numerics option (if available)"
28     echo " (-devel) use optfile developement flags (if available)"
29 jmc 1.109 echo " (-gsl) compile with \"-gsl\" flag"
30 jmc 1.136 echo " (-use_r4|-ur4) if allowed, use real*4 type for '_RS' variable"
31     echo " (-tdir|-t) STRING list of group and/or exp. dirs to test"
32 jmc 1.84 echo " (recognized groups: basic, tutorials)"
33     echo " (DEF=\"\" which test all)"
34 jmc 1.149 echo " (if list= 'start_from THIS_EXP' then"
35     echo " test THIS_EXP + all the following)"
36 jmc 1.136 echo " (-skipdir|-skd) STRING list of exp. dirs to skip"
37 jmc 1.89 echo " (DEF=\"\" which test all)"
38 jmc 1.192 echo " (-ts) provide timing information per timestep"
39     echo " (-papis) provide MFlop/s per timestep using PAPI"
40     echo " (-pcls) provide MFlop/s per timestep using PCL"
41     echo " ---- system options : ----"
42     echo " (-bash|-b) STRING preferred location of a \"bash\" or \"sh\" shell"
43 edhill 1.20 echo " (DEF=\"\" for \"bash\")"
44 jmc 1.192 echo " (-ef) STRING used as genmake2 \"-extra_flag\" argument"
45 jmc 1.141 echo " (-makedepend|-md) STRING command to use for \"makedepend\""
46 jmc 1.136 echo " (-make|-m) STRING command to use for \"make\""
47 edhill 1.8 echo " (DEF=\"make\")"
48 jmc 1.192 echo " (-j) JOBS use \"make -j JOBS\" for parallel builds"
49     echo " ---- output options : ----"
50     echo " (-match) NUMBER Matching Criteria (number of digits)"
51     echo " (DEF=\"$MATCH_CRIT\")"
52 jmc 1.70 echo " (-odir) STRING used to build output directory name"
53     echo " (DEF=\"hostname\")"
54 jmc 1.192 echo " (-addr|-a) STRING list of email recipients"
55     echo " (DEF=\"\" no email is sent)"
56     echo " (-send) STRING sending command (instead of using mpack)"
57     echo " (-savdir|-sd) STRING location to save output tar file to send (DEF='$SAVDIR')"
58     echo " (-mpackdir|-mpd) DIR location of the mpack utility"
59     echo " (DEF=\"../tools/mpack-1.6\")"
60     echo " -- do only some parts: --"
61 jmc 1.156 echo " (-clean) *ONLY* run \"make CLEAN\" & clean run-dir"
62 jmc 1.133 echo " (-norun|-nr) skip the \"runmodel\" stage (stop after make)"
63 jmc 1.165 echo " (-obj) only produces objects (=norun & no executable)"
64 jmc 1.136 echo " (-runonly|-ro) *ONLY* run stage (=\"-quick\" without make)"
65 ce107 1.90 echo " (-quick|-q) same as \"-nogenmake -noclean -nodepend\""
66     echo " (-nogenmake|-ng) skip the genmake stage"
67     echo " (-noclean|-nc) skip the \"make clean\" stage"
68     echo " (-nodepend|-nd) skip the \"make depend\" stage"
69 jmc 1.156 echo " (-postclean|-pc) after each exp. test, clean build-dir & run-dir"
70     echo " (-deloutp|-do) delete output files after successful run"
71 ce107 1.90 echo " (-deldir|-dd) on success, delete the output directory"
72 edhill 1.6 echo
73 edhill 1.50 echo "and where STRING can be a whitespace-delimited list"
74 edhill 1.6 echo "such as:"
75 edhill 1.50 echo
76 edhill 1.6 echo " -t 'exp0 exp2 exp3' "
77     echo " -addr='abc@123.com testing@home.org'"
78 edhill 1.1 echo
79 edhill 1.50 echo "provided that the expression is properly quoted within the current"
80     echo "shell (note the use of single quotes to protect white space)."
81     echo
82 edhill 1.1 exit 1
83     }
84    
85     # build the mpack utility
86     build_mpack()
87     {
88 edhill 1.34 printf "building the mpack utility... "
89 jmc 1.113 MPACK="$MPACKDIR/mpack"
90     if test ! -x $MPACK ; then
91 edhill 1.1 if test ! -d $MPACKDIR ; then
92 edhill 1.20 echo
93 edhill 1.1 echo "Error: can't find \"$MPACKDIR\""
94     echo " are you sure this program is being run in the correct "
95     echo " (that is, \"MITGCM_ROOT\verification\") directory?"
96 edhill 1.20 echo
97     HAVE_MPACK=f
98 edhill 1.1 fi
99 edhill 1.26 if test "x$CC" = x ; then
100     export CC=cc
101     fi
102 jmc 1.112 printf "building mpack (using CC=$CC)... "
103 edhill 1.25 ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1
104 edhill 1.1 RETVAL=$?
105     if test "x$RETVAL" != x0 ; then
106     echo
107     echo "Error building the mpack tools at: $MPACK_DIR"
108 edhill 1.20 echo
109     HAVE_MPACK=f
110     else
111 edhill 1.25 rm -f tr_build_mpack.out
112 edhill 1.20 HAVE_MPACK=t
113 jmc 1.113 echo "done"
114 edhill 1.1 fi
115 edhill 1.20 else
116     HAVE_MPACK=t
117 jmc 1.113 echo "already exist"
118 edhill 1.1 fi
119     }
120    
121 jmc 1.93 testoutput_var()
122 edhill 1.1 {
123 jmc 1.99 # testoutput_var dir s1 label subdir reference_output
124 edhill 1.1 #
125 jmc 1.135 # compares 1 variable output selected from file $dir/$subdir/$OUTPUTFILE
126 jmc 1.175 # with same output from reference file $dir/$reference_output
127 jmc 1.93 # using search strings s1 and text label
128 edhill 1.1
129     if [ $debug -gt 0 ]; then
130 jmc 1.93 echo testoutput_var: grep "$2" $1/$4/$OUTPUTFILE 1>&2
131 edhill 1.1 fi
132 jmc 1.87 if [ -r $1/$4/$OUTPUTFILE ]; then
133 jmc 1.192 grep "$2" $1/$4/$OUTPUTFILE | sed 's/.*=//' | cat -n > ${TMP}a.txt
134     lncntA=`wc -l ${TMP}a.txt | awk '{print $1}' `
135 jmc 1.100 if [ $lncntA -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 jmc 1.192 rm -f ${TMP}a.txt ; return 99
140 edhill 1.1 fi
141     else
142 jmc 1.93 echo testoutput_var: $OUTPUTFILE from model run was not readable 1>&2
143 edhill 1.1 return 99
144     fi
145     if [ $debug -gt 0 ]; then
146 jmc 1.175 echo testoutput_var: grep "$2" $1/$5 1>&2
147 edhill 1.1 fi
148 jmc 1.192 grep "$2" $1/$5 | sed 's/.*=//' | cat -n > ${TMP}b.txt
149     lncntB=`wc -l ${TMP}b.txt | awk '{print $1}' `
150 jmc 1.100 if [ $lncntB -lt 2 ]; then
151 edhill 1.1 if [ $verbose -gt 0 ]; then
152     echo Not enough lines of output when searching for "$2" 1>&2
153     fi
154 jmc 1.192 rm -f ${TMP}a.txt ${TMP}b.txt ; return 99
155 edhill 1.1 fi
156 jmc 1.67 if [ $lncntA -ne $lncntB ]; then
157 jmc 1.175 if [ $verbose -gt 0 ]; then
158     echo Not same Nb of lines when searching for "$2" ":" $lncntA $lncntB 1>&2
159     fi
160 jmc 1.192 rm -f ${TMP}a.txt ${TMP}b.txt ; return 99
161 jmc 1.67 fi
162 jmc 1.192 has_nan=`cat ${TMP}a.txt | grep -i nan | wc -l`
163 edhill 1.72 if [ $has_nan -gt 0 ] ; then
164 jmc 1.93 echo testoutput_var: $OUTPUTFILE contains $has_nan NaN values 1>&2
165 jmc 1.192 rm -f ${TMP}a.txt ${TMP}b.txt ; return 99
166 edhill 1.72 fi
167 jmc 1.192 has_inf=`cat ${TMP}a.txt | grep -i inf | wc -l`
168 edhill 1.72 if [ $has_inf -gt 0 ] ; then
169 jmc 1.93 echo testoutput_var: $OUTPUTFILE contains $has_inf Inf values 1>&2
170 jmc 1.192 rm -f ${TMP}a.txt ${TMP}b.txt ; return 99
171 jmc 1.71 fi
172 edhill 1.1 if [ $debug -gt 0 ]; then
173 jmc 1.192 echo testoutput_var: join ${TMP}a.txt ${TMP}b.txt 1>&2
174 edhill 1.1 fi
175 jmc 1.192 # On the SGI O3K (*not* the O2K), "cat -n" inserts a ":" after the line number
176     join ${TMP}a.txt ${TMP}b.txt | awk '{print $1 " " $2 " " $3}' | sed -e 's|:||g' > ${TMP}c.txt
177 edhill 1.1 if [ $debug -gt 0 ]; then
178 jmc 1.93 echo testoutput_var: compare_lines 1>&2
179 edhill 1.1 fi
180 edhill 1.22 if [ $verbose -gt 1 ]; then
181 jmc 1.192 cat ${TMP}c.txt 1>&2
182 edhill 1.22 fi
183 jmc 1.192 echo "-1" >> ${TMP}c.txt
184     digits_of_similarity=`./tr_cmpnum < ${TMP}c.txt`
185 edhill 1.1 if [ $digits_of_similarity -eq 99 ]; then
186     if [ $verbose -gt 0 ]; then
187 jmc 1.99 echo testoutput_var: No comparison was available for \"$3\" 1>&2
188 edhill 1.1 fi
189     digits_of_similarity=99
190     else
191     if [ $verbose -gt 0 ]; then
192 jmc 1.99 echo There were $digits_of_similarity decimal places of similarity for \"$3\" 1>&2
193 edhill 1.1 fi
194     fi
195 jmc 1.192 rm -f ${TMP}a.txt ${TMP}b.txt ${TMP}c.txt
196 jmc 1.135
197 edhill 1.1 return $digits_of_similarity
198     }
199    
200 jmc 1.93 testoutput_run()
201 edhill 1.1 {
202 jmc 1.99 # testoutput_run directory subdir reference_output
203 edhill 1.1 #
204 jmc 1.93 # test output from 1 run in "directory"
205 jmc 1.103 # --> same processing for adjoint & forward test
206 jmc 1.175 # default list of output variables to be checked:
207     # 1rst : main variable used to decide if it pass or FAIL
208     # others : number of matching digits to be printed in summary.txt
209     listChk=$DEF_CHECK_LIST
210 jmc 1.94 # load experiment-specific list from file "tr_checklist" (if it exist)
211 jmc 1.175 if test -r $1/$2/tr_checklist ; then listChk=`cat $1/$2/tr_checklist` ; fi
212     sVar=`echo $listChk | awk '{print $1}'`
213     # remove 1rst var and expand the list: + => min max mean s.d
214     listVar=`echo $listChk | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' \
215     | sed 's/+//g' | sed "s/^$sVar//"`
216 jmc 1.94 if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(I)='$listVar'" 1>&2 ; fi
217 jmc 1.175 # set ref.outp file-name and, if compressed, uncompress it into subdir
218     refoutp=results/$3
219     if test ! -r $1/results/$3 ; then
220     if test -r $1/results/${3}.gz ; then
221     tmpNam1=$3
222     tmpNam2=`echo $tmpNam1 | sed 's/\..*\././'`
223     if test "x$tmpNam1" = "x$tmpNam2" ; then
224     tmpNam1=`echo $tmpNam2 | sed 's/\./.std./'`
225     fi
226     refoutp=$2/$tmpNam1
227     if [ $debug -gt 0 ]; then
228     echo "testoutput_run: gunzip 'results/$3.gz' into '$refoutp'" 1>&2
229     fi
230     gzip -cd $1/results/${3}.gz > $1/$refoutp
231     else
232     echo "missing reference output file '$3' (.gz) in '$1/results/'"
233     fi
234     fi
235     # check for ptracer output in reference_output file :
236     if test $KIND = 0 ; then
237     ptr_mon="trcstat_ptracerXX_min trcstat_ptracerXX_max"
238     ptr_mon="$ptr_mon trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
239     for ii in $PTRACERS_NUM ; do
240 jmc 1.117 ptrfound=0
241     for jj in $ptr_mon ; do
242     name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
243 jmc 1.175 tst=`grep $name $1/$refoutp | wc -l | awk '{print $1}'`
244 jmc 1.117 if test ! "x$tst" = x0 ; then ptrfound=1 ; fi
245     done
246     if test $ptrfound = '1' ; then
247     eval "HAVE_PTR0"$ii"=t"
248     else
249     eval "HAVE_PTR0"$ii"=f"
250     # remove this ptr from the list of output variable to check
251     # echo "-- ptr test=" $tst "number of var=" `echo $listVar | awk '{print NF}'` 1>&2
252     listVar=`echo "$listVar" | sed "s/ pt$ii..//g"`
253     fi
254 jmc 1.175 # eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"' 1>&2
255     done
256     fi
257     tst=`echo $sVar $listVar | awk '{ for(i=2;i<=NF;i++){if($i==$1)t+=1}; print t }'`
258     if test $tst != 1 ; then
259     if test $tst = 0 ; then echo "==> WARNING: selected var >$sVar< not found" 1>&2
260     else echo "==> WARNING: found selected var >$sVar< $tst times" 1>&2 ; fi
261     echo "==> WARNING: in checked list:" $listVar 1>&2
262     #- put it back once:
263     listVar=" $sVar "`echo "$listVar " | sed "s/ $sVar / /g"`
264     fi
265 jmc 1.94 if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(M)='$listVar'" 1>&2 ; fi
266 jmc 1.154 echo "listVar='$listVar'" >> $locDIR"/summary.txt"
267 jmc 1.175 #---
268     allargs=""
269     for xx in $listVar
270     do
271     case $xx in
272 jmc 1.94 'PS') if [ $debug -gt 0 ]
273     then echo testoutput_run: testoutput_var $1 cg2d_init_res 1>&2 ; fi
274 jmc 1.175 testoutput_var $1 "cg2d_init_res" "Press. Solver (cg2d)" $2 $refoutp ; yy=$?
275 jmc 1.94 if [ $debug -gt 0 ] ; then echo testoutput_run: cg2dres=$yy 1>&2 ; fi ;;
276 jmc 1.175 'Cost') testoutput_var $1 "ADM ref_cost_function" "ADM CostFct" $2 $refoutp ; yy=$? ;;
277     'AdGrd') testoutput_var $1 "ADM adjoint_gradient" "ADM Ad Grad" $2 $refoutp ; yy=$? ;;
278     'FDGrd') testoutput_var $1 "ADM finite-diff_grad" "ADM FD Grad" $2 $refoutp ; yy=$? ;;
279     'tlmCst') testoutput_var $1 "TLM ref_cost_function" "TLM CostFct" $2 $refoutp ; yy=$? ;;
280     'tlmGrd') testoutput_var $1 "TLM tangent-lin_grad" "TLM TL Grad" $2 $refoutp ; yy=$? ;;
281     'fwdGrd') testoutput_var $1 "TLM finite-diff_grad" "TLM FD Grad" $2 $refoutp ; yy=$? ;;
282     'Tmn') testoutput_var $1 "dynstat_theta_min" "Theta minimum" $2 $refoutp ; yy=$? ;;
283     'Tmx') testoutput_var $1 "dynstat_theta_max" "Theta maximum" $2 $refoutp ; yy=$? ;;
284     'Tav') testoutput_var $1 "dynstat_theta_mean" "Theta mean" $2 $refoutp ; yy=$? ;;
285     'Tsd') testoutput_var $1 "dynstat_theta_sd" "Theta Std.Dev" $2 $refoutp ; yy=$? ;;
286     'Smn') testoutput_var $1 "dynstat_salt_min" "Salt minimum" $2 $refoutp ; yy=$? ;;
287     'Smx') testoutput_var $1 "dynstat_salt_max" "Salt maximum" $2 $refoutp ; yy=$? ;;
288     'Sav') testoutput_var $1 "dynstat_salt_mean" "Salt mean" $2 $refoutp ; yy=$? ;;
289     'Ssd') testoutput_var $1 "dynstat_salt_sd" "Salt Std.Dev" $2 $refoutp ; yy=$? ;;
290     'Umn') testoutput_var $1 "dynstat_uvel_min" "U minimum" $2 $refoutp ; yy=$? ;;
291     'Umx') testoutput_var $1 "dynstat_uvel_max" "U maximum" $2 $refoutp ; yy=$? ;;
292     'Uav') testoutput_var $1 "dynstat_uvel_mean" "U mean" $2 $refoutp ; yy=$? ;;
293     'Usd') testoutput_var $1 "dynstat_uvel_sd" "U Std.Dev" $2 $refoutp ; yy=$? ;;
294     'Vmn') testoutput_var $1 "dynstat_vvel_min" "V minimum" $2 $refoutp ; yy=$? ;;
295     'Vmx') testoutput_var $1 "dynstat_vvel_max" "V maximum" $2 $refoutp ; yy=$? ;;
296     'Vav') testoutput_var $1 "dynstat_vvel_mean" "V mean" $2 $refoutp ; yy=$? ;;
297     'Vsd') testoutput_var $1 "dynstat_vvel_sd" "V Std.Dev" $2 $refoutp ; yy=$? ;;
298 jmc 1.94 'pt1mn'|'pt2mn'|'pt3mn'|'pt4mn'|'pt5mn') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
299 jmc 1.175 testoutput_var $1 "trcstat_ptracer0"$ii"_min" "p0"$ii"_min" $2 $refoutp ; yy=$? ;;
300 jmc 1.94 'pt1mx'|'pt2mx'|'pt3mx'|'pt4mx'|'pt5mx') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
301 jmc 1.175 testoutput_var $1 "trcstat_ptracer0"$ii"_max" "p0"$ii"_max" $2 $refoutp ; yy=$? ;;
302 jmc 1.94 'pt1av'|'pt2av'|'pt3av'|'pt4av'|'pt5av') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
303 jmc 1.175 testoutput_var $1 "trcstat_ptracer0"$ii"_mean" "p0"$ii"_mean" $2 $refoutp ; yy=$? ;;
304 jmc 1.94 'pt1sd'|'pt2sd'|'pt3sd'|'pt4sd'|'pt5sd') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
305 jmc 1.175 testoutput_var $1 "trcstat_ptracer0"$ii"_sd" "p0"$ii"_StDv" $2 $refoutp ; yy=$? ;;
306     'Qntmn') testoutput_var $1 "forcing_qnet_min" "Qnet minimum" $2 $refoutp ; yy=$? ;;
307     'Qntmx') testoutput_var $1 "forcing_qnet_max" "Qnet maximum" $2 $refoutp ; yy=$? ;;
308     'Qntav') testoutput_var $1 "forcing_qnet_mean" "Qnet mean" $2 $refoutp ; yy=$? ;;
309     'Qntsd') testoutput_var $1 "forcing_qnet_sd" "Qnet Std.Dev" $2 $refoutp ; yy=$? ;;
310     'aSImn') testoutput_var $1 "seaice_area_min" "SIce Area min" $2 $refoutp ; yy=$? ;;
311     'aSImx') testoutput_var $1 "seaice_area_max" "SIce Area max" $2 $refoutp ; yy=$? ;;
312     'aSIav') testoutput_var $1 "seaice_area_mean" "SIce Area mean" $2 $refoutp ; yy=$? ;;
313     'aSIsd') testoutput_var $1 "seaice_area_sd" "SIce Area StDv" $2 $refoutp ; yy=$? ;;
314     'hSImn') testoutput_var $1 "seaice_heff_min" "SIce Heff min" $2 $refoutp ; yy=$? ;;
315     'hSImx') testoutput_var $1 "seaice_heff_max" "SIce Heff max" $2 $refoutp ; yy=$? ;;
316     'hSIav') testoutput_var $1 "seaice_heff_mean" "SIce Heff mean" $2 $refoutp ; yy=$? ;;
317     'hSIsd') testoutput_var $1 "seaice_heff_sd" "SIce Heff StDv" $2 $refoutp ; yy=$? ;;
318     'uSImn') testoutput_var $1 "seaice_uice_min" "SIce Uice min" $2 $refoutp ; yy=$? ;;
319     'uSImx') testoutput_var $1 "seaice_uice_max" "SIce Uice max" $2 $refoutp ; yy=$? ;;
320     'uSIav') testoutput_var $1 "seaice_uice_mean" "SIce Uice mean" $2 $refoutp ; yy=$? ;;
321     'uSIsd') testoutput_var $1 "seaice_uice_sd" "SIce Uice StDv" $2 $refoutp ; yy=$? ;;
322     'vSImn') testoutput_var $1 "seaice_vice_min" "SIce Vice min" $2 $refoutp ; yy=$? ;;
323     'vSImx') testoutput_var $1 "seaice_vice_max" "SIce Vice max" $2 $refoutp ; yy=$? ;;
324     'vSIav') testoutput_var $1 "seaice_vice_mean" "SIce Vice mean" $2 $refoutp ; yy=$? ;;
325     'vSIsd') testoutput_var $1 "seaice_vice_sd" "SIce Vice StDv" $2 $refoutp ; yy=$? ;;
326     'AthSiG') testoutput_var $1 "thSI_Ice_Area_G" "thSIc Area Global" $2 $refoutp ; yy=$? ;;
327     'AthSiS') testoutput_var $1 "thSI_Ice_Area_S" "thSIc Area South" $2 $refoutp ; yy=$? ;;
328     'AthSiN') testoutput_var $1 "thSI_Ice_Area_N" "thSIc Area North" $2 $refoutp ; yy=$? ;;
329 jmc 1.182 'HthSiG') testoutput_var $1 "thSI_IceH_ave_G" "thSIc H Glob-ave" $2 $refoutp ; yy=$? ;;
330     'HthSiS') testoutput_var $1 "thSI_IceH_ave_S" "thSIc H South-av" $2 $refoutp ; yy=$? ;;
331     'HthSiN') testoutput_var $1 "thSI_IceH_ave_N" "thSIc H North-av" $2 $refoutp ; yy=$? ;;
332     'HthMxS') testoutput_var $1 "thSI_IceH_max_S" "thSIc H South-max" $2 $refoutp ; yy=$? ;;
333     'HthMxN') testoutput_var $1 "thSI_IceH_max_N" "thSIc H North-max" $2 $refoutp ; yy=$? ;;
334 jmc 1.184 'StrmIc') testoutput_var $1 "STREAMICE_FP_ERR" "StreamIce Solver" $2 $refoutp ; yy=$? ;;
335 jmc 1.175 *) yy=99; echo "WARNING: asking for var=$xx : not recognized !" 1>&2 ;;
336     esac
337     if test $xx = $sVar
338     then allargs="$allargs > $yy <"
339     else allargs="$allargs $yy"
340     fi
341     done
342 jmc 1.94
343     nbVar=`echo $listVar | awk '{print NF}'`
344 jmc 1.175 if [ $nbVar -lt $LEN_CHECK_LIST ] ; then
345     #-- fill line (up to standard length) with dot:
346     adNul=`expr $LEN_CHECK_LIST - $nbVar | awk '{for(i=1;i<=$1;i++){print "."}}'`
347 jmc 1.94 echo $allargs $adNul
348 jmc 1.175 else
349 jmc 1.94 echo $allargs
350 jmc 1.135 fi
351 jmc 1.103 # <-- same processing for adjoint & forward test
352 edhill 1.1 }
353    
354     genmakemodel()
355     {
356     # genmakemodel directory
357 edhill 1.10 if test "x$NOGENMAKE" = xt ; then
358     echo "genmake skipped!"
359     else
360 edhill 1.34 if test "x$BASH" = x ; then
361     GENMAKE2="../../../tools/genmake2"
362     else
363     GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
364     fi
365 edhill 1.10 (
366     cd $1;
367 edhill 1.24 command="$GENMAKE2 -ds -m $MAKE"
368 jmc 1.141 if test "x$MKDEPEND" != x ; then
369     command="$command -makedepend=$MKDEPEND"
370     fi
371 jmc 1.175 if test $KIND = 1 -o $KIND = 2 ; then
372 utke 1.120 command="$command --mods=../code_ad"
373 jmc 1.175 elif test $KIND = 4 ; then
374 jahn 1.193 command="$command -adof ../../../tools/adjoint_options/adjoint_oad -mods ../code_oad"
375 utke 1.120 else
376 jmc 1.124 command="$command -mods=../code"
377 edhill 1.24 fi
378 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
379 jmc 1.124 command="$command -optfile=$OPTFILE"
380 edhill 1.10 fi
381 jmc 1.164 if test $OptLev = 1 ; then
382 jmc 1.175 command="$command -ieee"
383     fi
384 jmc 1.164 if test $OptLev = 0 ; then
385     command="$command -devel"
386 edhill 1.10 fi
387 jmc 1.109 if test "x$GSL" = xt ; then
388     command="$command -gsl"
389     fi
390 jmc 1.154 if test "x$MPI" != x0 ; then
391 edhill 1.66 command="$command -mpi"
392     fi
393 jmc 1.122 if test "x$MULTI_THREAD" = xt ; then
394     #- run multi-threaded using OpenMP:
395     command="$command -omp"
396     fi
397 jmc 1.135 if test "x$USE_R4" = xt ; then
398     command="$command -use_r4"
399     fi
400 jmc 1.165 if test "x$EXTRFLG" != x ; then
401     command="$command -extra_flag $EXTRFLG"
402     fi
403 ce107 1.90 if test "x$TS" = xt ; then
404     command="$command -ts"
405     fi
406     if test "x$PAPIS" = xt ; then
407     command="$command -papis"
408 jmc 1.135 else
409 ce107 1.90 if test "x$PCLS" = xt ; then
410     command="$command -pcls"
411     fi
412     fi
413 jmc 1.139 printf 'genmake ... '
414 jmc 1.146 eval $command > genmake.tr_log 2>&1
415 edhill 1.10 RETVAL=$?
416 edhill 1.44 # Reduce the size of the testing emails!
417 edhill 1.47 head -100 Makefile > $CDIR/Makefile_head
418 edhill 1.10 if test "x$RETVAL" != x0 ; then
419 jmc 1.146 tail genmake.tr_log
420 jmc 1.139 echo "genmakemodel: genmake failed"
421 jmc 1.148 cp genmake.log genmake_* genmake.tr_log $CDIR
422 edhill 1.10 return 1
423     else
424 jmc 1.139 echo "successful"
425 edhill 1.1 fi
426 edhill 1.10 )
427     fi
428 edhill 1.1 }
429    
430     makeclean()
431     {
432     # makeclean directory
433 jmc 1.194 if test "x$NOGENMAKE" = xf ; then rm -f $1/make.tr_log ; fi
434 edhill 1.10 if test "x$NOCLEAN" = xt ; then
435 jmc 1.83 echo "make Clean skipped!"
436 edhill 1.10 else
437     (
438     cd $1;
439 jmc 1.87 #if test -e $OUTPUTFILE ; then rm -f $OUTPUTFILE ; fi
440 edhill 1.10 if test -r Makefile ; then
441 jmc 1.139 printf 'clean build-dir: make Clean ... '
442 jmc 1.146 $MAKE Clean >> make.tr_log 2>&1
443 edhill 1.10 RETVAL=$?
444     if test "x$RETVAL" != x0 ; then
445 jmc 1.146 tail make.tr_log
446 jmc 1.139 echo "makeclean: \"make Clean\" failed"
447 jmc 1.148 cp make.tr_log genmake.log genmake.tr_log $CDIR
448 edhill 1.10 return 1
449     fi
450 jmc 1.139 echo successful
451 jmc 1.127 else
452     echo ''
453 edhill 1.10 fi
454     exit 0
455     )
456     fi
457     }
458    
459 jmc 1.83 run_clean()
460 edhill 1.68 {
461 jmc 1.83 # run_clean directory
462     if test "x$NOCLEAN" = xt ; then
463     echo "run_clean skipped!"
464     else
465 jmc 1.190 (
466     cd $1;
467     printf 'clean run-dir ... '
468     # part of what is done after "make clean" when doing "make CLEAN"
469     find . -name "*.meta" -exec rm {} \;
470     find . -name "*.data" -exec rm {} \;
471     find . -name "fort.*" -exec rm {} \;
472     find . -type l -exec rm {} \;
473     #- should remove executable only if sym-link (already done above)
474     rm -f $RUNLOG *.txt STDOUT.* STDERR.* *diagnostics.log *.[0-9][0-9][0-9][0-9].log
475     rm -f datetime costfinal divided.ctrl snapshot* output_adm.*.diva_*
476     rm -f *_MIT_CE_000.opt0000 costfunction*0000
477 jmc 1.191 rm -f oad_cp.[0-9][0-9][0-9].?????
478 jmc 1.190 rm -rf mnc_test_*
479     echo successful
480     exit 0
481     )
482 edhill 1.68 fi
483     }
484    
485 edhill 1.10 makedependmodel()
486     {
487     # makedependmodel directory
488     if test "x$NODEPEND" = xt ; then
489     echo "make depend skipped!"
490     else
491     (
492     cd $1;
493 jmc 1.139 printf 'make depend ... '
494 jmc 1.146 $MAKE depend >> make.tr_log 2>&1
495 edhill 1.1 RETVAL=$?
496     if test "x$RETVAL" != x0 ; then
497 jmc 1.146 tail make.tr_log
498 jmc 1.139 echo "makedependmodel: make depend failed"
499 jmc 1.148 cp make.tr_log genmake.log genmake.tr_log $CDIR
500 edhill 1.1 return 1
501 edhill 1.10 else
502 jmc 1.139 echo successful
503 edhill 1.1 fi
504 edhill 1.10 )
505     fi
506 edhill 1.1 }
507    
508     makemodel()
509     {
510     # makemodel directory
511     (
512 jmc 1.159 mk_fail=0
513 jmc 1.136 if test "x$NOMAKE" = xt ; then
514     cd $1;
515     if test -x $EXECUTABLE ; then
516     echo "make skipped!"
517     else
518     echo "no executable!"
519 jmc 1.159 mk_fail=3
520 jmc 1.136 fi
521     else
522 edhill 1.1 cd $1;
523     if test -r Makefile ; then
524 jmc 1.139 printf 'make ... '
525 jmc 1.171 if test "x$REPLMAKE" = x ; then
526     $MAKE $TARG >> make.tr_log 2>&1
527     else
528     $REPLMAKE $TARG >> make.tr_log 2>&1
529     fi
530 edhill 1.1 RETVAL=$?
531     if test "x$RETVAL" != x0 ; then
532 jmc 1.146 tail make.tr_log
533 jmc 1.139 echo failed
534 jmc 1.163 cp genmake.log genmake.tr_log $CDIR
535     tail -$NBLINES_MKLOG make.tr_log > $CDIR"/make.tr_log_tail"
536 jmc 1.131 rm -f $EXECUTABLE
537 jmc 1.159 mk_fail=1
538 edhill 1.1 else
539 jmc 1.139 echo successful
540 edhill 1.1 fi
541 jmc 1.159 else
542     echo "no Makefile !"
543     mk_fail=2
544 edhill 1.1 fi
545 jmc 1.136 fi
546 jmc 1.177 if test $KIND = 1 -a -f taf_ftl.log ; then
547 jmc 1.186 head -1 taf_ftl.log >> $CDIR"/summary.txt"
548 jmc 1.177 fi
549 jmc 1.175 if test $KIND = 2 -a -f taf_ad.log ; then
550 jmc 1.186 head -1 taf_ad.log >> $CDIR"/summary.txt"
551     nerr=`grep -c 'TAF *.* ERROR ' taf_ad.log`
552     nwar=`grep -c 'TAF RECOMPUTATION *.* WARNING ' taf_ad.log`
553     if test -f taf_output ; then
554     n2er=`grep -c 'TAF *.* ERROR ' taf_output`
555 jmc 1.189 n3er=`grep -c '\*ERROR\* ' taf_output`
556     nerr=`expr $nerr + $n2er + $n3er`
557 jmc 1.186 fi
558     echo " TAF reports $nerr Errors and $nwar Recomputation Warnings" \
559 jmc 1.158 >> $CDIR"/summary.txt"
560     fi
561 jmc 1.159 if test $mk_fail != 0 ; then return $mk_fail ; fi
562 edhill 1.1 )
563     }
564    
565 jmc 1.154 mk_mpi_size()
566     {
567 jmc 1.173 # mk_mpi_size input_file output_file proc_Nb threads_Nb_X threads_Nb_Y
568 jmc 1.154 #
569 jmc 1.173 # make new SIZE.h (=output_file) from SIZE.h_mpi (=input_file)
570 jmc 1.154 # for an MPI build with no more than proc_Nb processors ;
571 jmc 1.173 # ensure that enough tiles per proc (nSx,nSy) remain for the given
572     # number of threads (nTx,nTy) ;
573     # return the effective number of processors.
574 jmc 1.154
575     inp=$1
576     out=$2
577     np=$3
578 jmc 1.173 tx=$4
579     ty=$5
580 jmc 1.154 tmp=TTT.$$
581    
582 jmc 1.173 # dirX : select with direction to favor in MPI process repartition
583     # dirX=1 : prefer to put more proc in X direction
584     # dirX=0 : prefer to put more proc in Y direction
585     dirX=0
586    
587 jmc 1.154 px=`grep "^ & *nPx *=" $inp | sed "s/^ & *nPx *= *//" | sed 's/, *$//'`
588     py=`grep "^ & *nPy *=" $inp | sed "s/^ & *nPy *= *//" | sed 's/, *$//'`
589     sx=`grep "^ & *nSx *=" $inp | sed "s/^ & *nSx *= *//" | sed 's/, *$//'`
590     sy=`grep "^ & *nSy *=" $inp | sed "s/^ & *nSy *= *//" | sed 's/, *$//'`
591    
592 jmc 1.173 #- for each direction, assume # of threads is a multiple of total number of tiles
593     nx=$px
594     if [ `expr $sx % $tx` -ne 0 -a `expr $sx \* $px % $tx` -eq 0 ] ; then
595     nx=`expr $sx \* $px / $tx`
596     if [ $verbose -gt 1 ]; then
597     echo " change px from $px to $nx to accommodate $tx threads"
598     fi
599     fi
600     ny=$py
601     if [ `expr $sy % $ty` -ne 0 -a `expr $sy \* $py % $ty` -eq 0 ] ; then
602     ny=`expr $sy \* $py / $ty`
603     if [ $verbose -gt 1 ]; then
604     echo " change py from $py to $ny to accommodate $ty threads"
605     fi
606     fi
607 jmc 1.154 #- find the largest divisor of input_file proc Nb, but not larger than $np
608     pp=0
609 jmc 1.155 i=1
610 jmc 1.173 while [ $i -le $nx ] ; do
611     if [ `expr $nx % $i` -eq 0 ] ; then
612 jmc 1.155 j=1
613 jmc 1.173 while [ $j -le $ny ] ; do
614     if [ `expr $ny % $j` -eq 0 ] ; then
615 jmc 1.155 ij=`expr $i \* $j`
616     if [ $ij -gt $pp ] ; then
617 jmc 1.161 flag=1
618     elif [ $ij -eq $pp ] ; then
619     flag=$dirX
620     else
621     flag=0
622     fi
623     if test $flag = 1 ; then
624 jmc 1.155 if [ $ij -le $np ] ; then
625     ix=$i ; jy=$j ; pp=$ij
626     #echo " ix,jy= $ix,$jy"
627     fi
628     fi
629     fi
630     j=`expr $j + 1`
631     done
632 jmc 1.154 fi
633 jmc 1.155 i=`expr $i + 1`
634 jmc 1.154 done
635    
636     #- create new SIZE.h type file:
637     sx=`expr $sx \* $px / $ix`
638     sy=`expr $sy \* $py / $jy`
639     if [ $verbose -gt 1 ]; then
640     echo " px,py,np= $px,$py,$np : New MPI size: px,py= $ix,$jy : sx,sy= $sx,$sy"
641     fi
642     sed "/^ \& *nPx *=/s/[0-9]*,/$ix,/" $inp > $tmp
643     sed "/^ \& *nPy *=/s/[0-9]*,/$jy,/" $tmp > $out
644     sed "/^ \& *nSx *=/s/[0-9]*,/$sx,/" $out > $tmp
645     sed "/^ \& *nSy *=/s/[0-9]*,/$sy,/" $tmp > $out
646     rm -f $tmp
647     return $pp
648     }
649    
650 edhill 1.27 symlink_mpifiles()
651     {
652     # Put special links so that MPI specific files are used
653     # This MUST be invoked between makeclean and makelinks because
654     # the Makefile will link to non-mpi files by default
655    
656     dir=$1
657     code_dir=$2
658 jmc 1.154 build_dir=$dir/$3
659 jmc 1.135
660 edhill 1.27 # These are files that should replace their counter-part when using -mpi
661 jmc 1.154 MPI_FILES=`(cd $dir/$code_dir; find . -name "*_mpi" -print)`
662 edhill 1.27
663 jmc 1.154 for ii in $MPI_FILES ; do
664     i=`echo $ii | sed 's:^\./::'`
665     name=`echo $i | sed 's:_mpi::'`
666     file="../$code_dir/$i"
667     if test $name = 'SIZE.h' ; then file="SIZE.h.mpi" ; fi
668    
669     # Is this an MPI run?
670     if test "x$MPI" = x0 ; then
671     # NO: We undo any _mpi symbolically linked files
672     if test -L $build_dir/$name ; then
673     ( cd $build_dir ; cmp $name $file > /dev/null 2>&1 )
674     RETVAL=$?
675     if test "x$RETVAL" = x0 ; then
676     if [ $verbose -gt 1 ]; then
677     echo " Un-linking $name from ../$code_dir" ; fi
678     rm -f $build_dir/$name
679     fi
680     fi
681     else
682     # YES: We symbolically link these files to the build
683     # dir so long as there is no real file in place
684     ( cd $build_dir ; cmp $name $file > /dev/null 2>&1 )
685 edhill 1.27 RETVAL=$?
686 jmc 1.154 if [ $verbose -gt 1 ]; then echo " cmp $name $file returns: $RETVAL" ; fi
687 edhill 1.27 if test "x$RETVAL" != x0 ; then
688 jmc 1.154 if test -h $build_dir/$name ; then rm -f $build_dir/$name ; fi
689     if test ! -r $build_dir/$name ; then
690     if [ $verbose -gt 1 ]; then echo " Linking $name to $file" ; fi
691     (cd $build_dir; ln -sf $file $name)
692 edhill 1.27 fi
693     fi
694 jmc 1.154 fi
695     done
696 edhill 1.27 }
697    
698 edhill 1.1 linkdata()
699     {
700 jmc 1.83 # linkdata run_dir input_dir_1 input_dir_2 ...
701 edhill 1.1 #
702     # symbolically link data files to run directory
703 jmc 1.83 if test -d $1 ; then
704 edhill 1.12 (
705 jmc 1.83 cd $1 ; shift
706 jmc 1.139 echo 'linkdata from dirs:' $*
707 jmc 1.175 inpMPI=`(cd ../$1 ; find . -name "*.mpi" -print | sed 's:^\./::')`
708 jmc 1.125 for xx in $inpMPI ; do
709     if test -r "../"$1"/"$xx ; then
710 jmc 1.175 # found 1 _mpi sfx file in 1rst input dir and it is readable
711 jmc 1.125 yy=`echo $xx | sed 's:\.mpi$::'`
712 jmc 1.154 if test "x$MPI" = "x0" ; then
713     # not mpi test: remove symbolic link
714     if test -h $yy ; then rm -f $yy ; fi
715     else
716     # mpi test: remove symbolic link & link .mpi sfx file
717 jmc 1.125 if test -h $yy ; then rm -f $yy ; fi
718 jmc 1.135 if test ! -r $yy ; then
719 jmc 1.125 ln -sf "../"$1"/"$xx $yy ;
720 jmc 1.139 printf " $xx" 1>&2
721 jmc 1.125 fi
722     fi
723     fi
724     done
725 jmc 1.83 if test -r "../"$1"/eedata.mth" ; then
726     # found eedata.mth in 1rst input dir and it is readable
727     if test "x$MULTI_THREAD" = "xt" ; then
728     # multi-threaded test: remove symbolic link & link eedata.mth
729     if test -h eedata ; then rm -f eedata ; fi
730 jmc 1.135 if test ! -r eedata ; then
731 jmc 1.83 ln -sf "../"$1"/eedata.mth" eedata ;
732 jmc 1.139 printf ' eedata.mth' 1>&2
733 edhill 1.24 fi
734 jmc 1.83 else
735     # not multi-threaded test: remove eedata symbolic link
736     if test -h eedata ; then rm -f eedata ; fi
737     fi
738     fi
739 jmc 1.108 prevDir='NONE'
740 jmc 1.83 for ldir in $* ; do
741 jmc 1.108 if test -d "../"$ldir -a $ldir != $prevDir ; then
742 jmc 1.175 printf " ldir=${ldir}:" 1>&2
743 jmc 1.83 files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
744     for i in $files ; do
745     if test ! -d "../"$ldir/$i ; then
746     if test ! -r $i ; then
747     printf ' '$i 1>&2
748     ln -sf "../"$ldir"/"$i $i
749     fi
750     fi
751     done
752 jmc 1.139 printf ' ;' 1>&2
753 jmc 1.83 if test -x "../"$ldir"/"prepare_run ; then
754 jmc 1.139 "../"$ldir"/"prepare_run 1>&2
755     else
756     echo '' 1>&2
757 edhill 1.24 fi
758 jmc 1.82 fi
759 jmc 1.108 prevDir=$ldir
760 jmc 1.83 done
761 edhill 1.12 )
762 edhill 1.1 fi
763     }
764    
765     runmodel()
766     {
767 edhill 1.6 # runmodel directory
768 edhill 1.1 #
769 jmc 1.154 # runs $COMMAND in "directory"
770 edhill 1.6 # (where "$COMMAND" is relative to "directory")
771 edhill 1.1 (
772     cd $1
773 jmc 1.139 printf 'runmodel in %s ... ' $1
774 jmc 1.158 if test "x$MPI" != x0 ; then
775     #- adjust the MPI run command with the right number of Procs
776     #echo '' ; echo " COMMAND='$COMMAND'"
777     COMMAND=`echo $COMMAND | sed "s/ TR_NPROC / $LOC_NPROC /"`
778     if test "x$MPI_MFILE" != x ; then
779     COMMAND=`echo $COMMAND | sed "s/ TR_MFILE / ..\/..\/$LOC_MFILE /"`
780     fi
781     #echo " COMMAND='$COMMAND'"
782     fi
783 jmc 1.134 if test -L $EXECUTABLE ; then
784     if test -x "../"$builddir"/"$EXECUTABLE ; then
785 jmc 1.154 cmp $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
786     outD=$? ; if test "x$outD" != x0 ; then rm -f $EXECUTABLE ; fi
787 jmc 1.134 else rm -f $EXECUTABLE
788     fi
789 jmc 1.106 fi
790 jmc 1.175 if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
791 jmc 1.119 echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_tmp
792 jmc 1.83 ln -sf "../"$builddir"/"$EXECUTABLE .
793     fi
794 jmc 1.175 if test ! -x $EXECUTABLE ; then
795 jmc 1.156 rm -f $RUNLOG ; touch $RUNLOG
796     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
797     echo " no executable:" $EXECUTABLE >> $RUNLOG
798     RETVAL=8
799     ENDVAL=-1
800 jmc 1.75 else
801 jmc 1.175 if test ! -f $OUTPUTFILE -o $OUTPUTFILE -ot $EXECUTABLE ; then
802     # output do not exist or is older than executable:
803 jmc 1.162 rm -f $OUTPUTFILE $RUNLOG ; touch $RUNLOG
804 jmc 1.156 if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
805 jmc 1.188 #- Divided Adjoint Run:
806     # get the number of additional runs (add_DIVA_runs) from file "run_ADM_DIVA"
807     if test $KIND = 2 -a -f run_ADM_DIVA ; then
808     adm_diva_nb=`sed -n '/^ *add_DIVA_runs\>.*=/p' run_ADM_DIVA | sed 's/ //g'`
809     echo " Divided Adjoint Run: $adm_diva_nb" >> $RUNLOG
810     eval "let $adm_diva_nb"
811     if [ $add_DIVA_runs -ge 1 ] ; then
812     rm -f costf* divided.ctrl snapshot*
813     echo -n "(add_DIVA_runs=$add_DIVA_runs) ... "
814     for ii in `seq 1 $add_DIVA_runs` ; do
815     ( eval $COMMAND ) >> $RUNLOG 2>&1
816     echo " additional DIVA run # $ii : done" >> $RUNLOG
817     mv -f $OUTPUTFILE ${OUTPUTFILE}.diva_${ii}
818     done
819     fi
820     fi
821     #- special DIVA processing ends here
822 jmc 1.156 ( eval $COMMAND ) >> $RUNLOG 2>&1
823     RETVAL=$?
824     ENDVAL=`tail $OUTPUTFILE | grep -c 'PROGRAM MAIN: Execution ended Normally'`
825     if [ $POSTCLEAN -eq 1 -a $ENDVAL -gt 0 ] ; then
826     find . -name "*.meta" -exec rm {} \;
827     find . -name "*.data" -exec rm {} \;
828     rm -rf mnc_test_*
829 jmc 1.83 fi
830 jmc 1.156 else
831     RETVAL=0
832 jmc 1.153 ENDVAL=`tail $OUTPUTFILE | grep -c 'PROGRAM MAIN: Execution ended Normally'`
833 jmc 1.156 touch $RUNLOG
834     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
835 jmc 1.175 echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
836 jmc 1.156 fi
837 jmc 1.75 fi
838 jmc 1.119 rm -f run.log_tmp
839 jmc 1.177 #- in all cases where OutputFile exists, report SIZE and time
840 jmc 1.158 if test -f $OUTPUTFILE ; then
841     grep '(PID\.TID 0000\.0001) n.. =' $OUTPUTFILE \
842 jmc 1.177 | sed 's/(PID.TID 0000.0001) //' >> $CDIR"/summary.txt"
843     grep -A3 'Seconds in section "ALL' $OUTPUTFILE \
844     | sed 's/(PID.TID 0000.0001) //' >> $CDIR"/summary.txt"
845 jmc 1.158 fi
846     if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
847 jmc 1.88 if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
848 jmc 1.139 echo successful
849     printf '=> output from running in %s :\n' $1 1>&2
850     tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
851 edhill 1.6 return 0
852 jmc 1.132 elif [ $RETVAL -ne 0 -a $ENDVAL -gt 0 ] ; then
853     #-- for some weird cases (run is finihed but with error code)
854 jmc 1.139 echo 'finished with error (run:' $RETVAL ' end:' $ENDVAL ')'
855     printf '=> output from running in %s :\n' $1 1>&2
856     tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
857 jmc 1.132 return 0
858 edhill 1.6 else
859 jmc 1.139 echo 'failed (run:' $RETVAL ' end:' $ENDVAL ')'
860     printf '=> output from running in %s :\n' $1 1>&2
861     tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
862 jmc 1.119 cp $RUNLOG $CDIR"/"$RUNLOG
863 edhill 1.6 return 1
864 edhill 1.1 fi
865     )
866     }
867    
868     createcodelet()
869     {
870     # create codelet for comparing model output
871    
872 jmc 1.112 printf "creating the comparison code (using CC=$CC)... "
873 jmc 1.91 cat > tr_cmpnum.c <<EOF
874 edhill 1.22 #include <stdio.h>
875     #include <math.h>
876     int main( int argc, char** argv ) {
877 jmc 1.91 int linnum,cmplin,best,lncnt;
878 edhill 1.52 double a,b,abave,relerr;
879 jmc 1.57 best = -22;
880 adcroft 1.33 lncnt = 0;
881 jmc 1.96 while( 1 & ( (lncnt+=1) < 999 ) ) {
882 edhill 1.22 scanf("%d", &linnum);
883     if (linnum == -1) break;
884     scanf("%lf", &a); scanf("%lf", &b);
885 edhill 1.52 abave = 0.5*(fabs(a)+fabs(b));
886 jmc 1.91 if ( abave == abave ) {
887     if (abave > 0.0) {
888     relerr=fabs(a-b)/abave;
889     if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
890     else { cmplin = -16 ; }
891     best = (best > cmplin) ? best : cmplin; }
892     else { cmplin = -22 ; }
893     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
894     }
895     else {
896     /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
897     break; }
898 edhill 1.22 }
899 adcroft 1.33 if (lncnt == 999) best=-29;
900 jmc 1.91 if (linnum != -1) best=-99;
901 edhill 1.22 printf("%d\n", -best);
902     return 0;
903     }
904     EOF
905 jmc 1.91 $CC -o tr_cmpnum tr_cmpnum.c -lm
906 edhill 1.1
907 jmc 1.91 if [ -x ./tr_cmpnum ]; then
908 edhill 1.1 echo "OK"
909     return 0
910     else
911     echo
912 jmc 1.135 echo "ERROR: failed to compile comparison code -- please specify"
913 edhill 1.58 echo " a C compiler using the CC environment variable."
914 edhill 1.1 exit 1
915     fi
916     }
917    
918     formatresults()
919     {
920     # formatresults expt genmake depend make run results*
921    
922     nm=$1
923     printf '%s %s %s %s' $2 $3 $4 $5
924     shift; shift; shift; shift; shift;
925 jmc 1.94 listPrt=$@
926     listRes=`echo $listPrt | sed 's/>//' | sed 's/<//'`
927     xx=`echo $listPrt | sed 's/.*>//' | sed 's/<.*//' | awk '{print $1}'`
928 jmc 1.97 printf '%3s' $listPrt
929 jmc 1.98 # line below does not work on hp-ux_ia64 : do those substitutions later on
930 jmc 1.95 # printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</'
931 jmc 1.135
932 jmc 1.94 if [ $xx = '..' ]; then
933     printf ' N/O '
934     elif [ $xx = '--' ]; then
935     printf ' N/O '
936     elif [ $xx = 99 ]; then
937 edhill 1.1 printf ' N/O '
938     else
939 jmc 1.94 if [ $xx -ge $MATCH_CRIT ]; then
940 edhill 1.1 printf ' pass'
941     else
942     printf ' FAIL'
943     fi
944     fi
945     printf ' %s' $nm
946 jmc 1.186 if test $KIND = 2 ; then
947     #-- apppend taf repport summary:
948     tafrep=`grep -c '^ TAF reports ' $CDIR/summary.txt`
949     if test $tafrep = 1 ; then
950     grep '^ TAF reports ' $CDIR/summary.txt | awk '{printf " (e=%i, w=%i)",$3,$6}'
951     fi
952     fi
953 edhill 1.1 printf '\n'
954 jmc 1.135
955 edhill 1.1 }
956    
957     scandirs()
958     {
959 jmc 1.81 if [ $# -eq 1 ]; then
960     for arg in * ; do
961 jmc 1.175 #test -f $arg/$1 && echo $arg
962     test -f $arg/$1 -o -f $arg/$1.gz && echo $arg
963 jmc 1.81 done
964 edhill 1.1 else
965 jmc 1.81 echo $*
966 edhill 1.1 fi
967     }
968    
969    
970 jmc 1.123 check_eedata()
971     {
972 jmc 1.161 # check_eedata eedata size.h
973 jmc 1.123 if [ $# -eq 2 ] ; then
974 jmc 1.161 if test -f $1 -a -f $2 ; then
975     nx=`grep "^ *nTx *=" $1 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
976     sx=`grep "^ & *nSx *=" $2 | sed "s/^ & *nSx *=//" | sed 's/, *$//'`
977 jmc 1.123 if test "x$nx" = x ; then
978     rx=10
979     else
980     rx=`expr $sx % $nx`
981     fi
982 jmc 1.161 ny=`grep "^ *nTy *=" $1 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
983     sy=`grep "^ & *nSy *=" $2 | sed "s/^ & *nSy *=//" | sed 's/, *$//'`
984 jmc 1.123 if test "x$ny" = x ; then
985     ry=20
986     else
987     ry=`expr $sy % $ny`
988     fi
989     echo `expr $rx + $ry`
990 jmc 1.161 else
991     echo '-1'
992     fi
993     elif [ $# -eq 1 ] ; then
994     if test -f $1 ; then
995     nx=`grep "^ *nTx *=" $1 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
996     if test "x$nx" = x ; then nx=1 ; fi
997     ny=`grep "^ *nTy *=" $1 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
998     if test "x$ny" = x ; then ny=1 ; fi
999     #echo $nx $ny
1000     echo $nx
1001     else
1002 jmc 1.123 echo '-1'
1003 jmc 1.161 fi
1004 jmc 1.123 else
1005     echo '-2'
1006     fi
1007    
1008     }
1009    
1010 edhill 1.1 ###############################################################################
1011    
1012    
1013     # Default properties
1014     debug=0
1015     verbose=1
1016 jmc 1.163 NBLINES_MKLOG=16000
1017 edhill 1.10
1018 jmc 1.164 OptLev=1
1019 jmc 1.109 GSL=f
1020 edhill 1.10
1021     CLEANUP=f
1022 jmc 1.133 NORUN=f
1023 edhill 1.10 QUICK=f
1024 jmc 1.136 NOMAKE=f
1025 edhill 1.10 NOGENMAKE=f
1026     NOCLEAN=f
1027     NODEPEND=f
1028 jmc 1.156 POSTCLEAN=0
1029 edhill 1.1
1030 edhill 1.4 BASH=
1031 edhill 1.10 OPTFILE=NONE
1032     ADDRESSES=
1033 edhill 1.1 TESTDIRS=
1034 jmc 1.89 SKIPDIRS=
1035 edhill 1.1 MPACKDIR="../tools/mpack-1.6"
1036 edhill 1.20 HAVE_MPACK=
1037 jmc 1.113 MPACK=
1038 jmc 1.192 SENDCMD=
1039     SAVDIR='.'
1040 edhill 1.24 COMMAND=
1041 jmc 1.141 MKDEPEND=
1042 edhill 1.59 if test "x$MAKE" = x ; then
1043     MAKE=make
1044     fi
1045 jmc 1.171 REPLMAKE=
1046 edhill 1.59 if test "x$CC" = x ; then
1047     CC=cc
1048     fi
1049 edhill 1.43 JOBS=
1050 jmc 1.165 TARG=
1051 jmc 1.154 MPI=0
1052 jmc 1.156 MPI_MFILE=
1053 jmc 1.83 MULTI_THREAD=f
1054 jmc 1.70 OUTDIR=
1055 edhill 1.40 DELDIR=
1056 jmc 1.135 USE_R4=
1057 jmc 1.165 EXTRFLG=
1058 edhill 1.1
1059 jmc 1.175 #- type of testing (KIND):
1060     # KIND=0 : forward (= default) ; KIND=1 : Tangent Linear with TAF ;
1061     # KIND=2 : Adjoint with TAF ; KIND=4 : Adjoint with OpenAD
1062     KIND=0
1063 edhill 1.24
1064 jmc 1.117 # list of pTracers to check for monitor output
1065 edhill 1.50 PTRACERS_NUM="1 2 3 4 5"
1066 edhill 1.49
1067 jmc 1.147 MATCH_CRIT=10
1068 jmc 1.92
1069 edhill 1.34 printf "parsing options... "
1070 edhill 1.1
1071     ac_prev=
1072     for ac_option ; do
1073    
1074     # If the previous option needs an argument, assign it.
1075     if test -n "$ac_prev"; then
1076     eval "$ac_prev=\$ac_option"
1077     ac_prev=
1078     continue
1079     fi
1080    
1081     ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
1082 jmc 1.135
1083 edhill 1.1 case $ac_option in
1084    
1085 jmc 1.156 -help | --help | -h | --h) usage ;;
1086    
1087     -optfile | --optfile | -of | --of) ac_prev=OPTFILE ;;
1088     -optfile=* | --optfile=* | -of=* | --of=*) OPTFILE=$ac_optarg ;;
1089    
1090     -addr | --addr | -a | --a) ac_prev=ADDRESSES ;;
1091     -addr=* | --addr=* | -a=* | --a=*) ADDRESSES=$ac_optarg ;;
1092     -mpackdir | --mpackdir | -mpd | --mpd) ac_prev=MPACKDIR ;;
1093     -mpackdir=* | --mpackdir=* | -mpd=* | --mpd=*) MPACKDIR=$ac_optarg ;;
1094    
1095 jmc 1.192 -send | --send ) ac_prev=SENDCMD ;;
1096     -send=* | --send=* ) SENDCMD=$ac_optarg ;;
1097     -savdir | --savdir | -sd | --sd ) ac_prev=SAVDIR ;;
1098     -savdir=* | --savdir=* | -sd=* | --sd=* ) SAVDIR=$ac_optarg ;;
1099    
1100 jmc 1.156 -tdir | --tdir | -t | --t) ac_prev=TESTDIRS ;;
1101     -tdir=* | --tdir=* | -t=* | --t=*) TESTDIRS=$ac_optarg ;;
1102     -skipdir | --skipdir | -skd | --skd) ac_prev=SKIPDIRS ;;
1103     -skipdir=* | --skipdir=* | -skd=* | --skd=*) SKIPDIRS=$ac_optarg ;;
1104    
1105     -bash | --bash | -b | --b) ac_prev=BASH ;;
1106     -bash=* | --bash=* | -b=* | --b=*) BASH=$ac_optarg ;;
1107    
1108     -command | --command | -c | --c) ac_prev=COMMAND ;;
1109     -command=* | --command=* | -c=* | --c=*) COMMAND=$ac_optarg ;;
1110    
1111     -makedepend | --makedepend | -md | --md) ac_prev=MKDEPEND ;;
1112     -makedepend=* | --makedepend=* | -md=* | --md=*) MKDEPEND=$ac_optarg ;;
1113    
1114     -make | --make | -m | --m) ac_prev=MAKE ;;
1115     -make=* | --make=* | -m=* | --m=*) MAKE=$ac_optarg ;;
1116    
1117 jmc 1.171 -repl_mk | --repl_mk ) ac_prev=REPLMAKE ;;
1118     -repl_mk=* | --repl_mk=*) REPLMAKE=$ac_optarg ;;
1119    
1120 jmc 1.156 -odir | --odir) ac_prev=OUTDIR ;;
1121     -odir=* | --odir=*) OUTDIR=$ac_optarg ;;
1122    
1123     -ptracers | --ptracers | -ptr | --ptr) ac_prev=PTRACERS_NUM ;;
1124     -ptracers=* | --ptracers=* | -ptr=* | --ptr=*) PTRACERS_NUM=$ac_optarg ;;
1125 edhill 1.50
1126 jmc 1.92 -match | --match ) ac_prev=MATCH_CRIT ;;
1127     -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
1128    
1129 jmc 1.136 -j | --j) ac_prev=JOBS ;;
1130     -j=* | --j=*) JOBS=$ac_optarg ;;
1131 edhill 1.43
1132 jmc 1.165 -ef | --ef) ac_prev=EXTRFLG ;;
1133     -ef=* | --ef=*) EXTRFLG=$ac_optarg ;;
1134    
1135 jmc 1.156 -clean | --clean) CLEANUP=t ; DELDIR=t ;;
1136 edhill 1.10
1137 jmc 1.156 -norun | --norun | -nr | --nr) NORUN=t ;;
1138 jmc 1.165 -obj | --obj ) TARG='obj' ; NORUN=t ;;
1139 jmc 1.156 -runonly | --runonly | -ro | --ro) QUICK=t ; NOMAKE=t ;;
1140     -quick | --quick | -q | --q) QUICK=t ;;
1141     -nogenmake | --nogenmake | -ng | --ng) NOGENMAKE=t ;;
1142     -noclean | --noclean | -nc | --nc) NOCLEAN=t ;;
1143     -nodepend | --nodepend | -nd | --nd) NODEPEND=t ;;
1144 edhill 1.10
1145 jmc 1.156 -postclean | --postclean | -pc | --pc) POSTCLEAN=2 ;;
1146     -deloutp | --deloutp | -do | --do) POSTCLEAN=1 ;;
1147 edhill 1.68
1148 jmc 1.154 -mpi | --mpi) MPI=2 ;;
1149     -MPI | --MPI) ac_prev=MPI ;;
1150     -MPI=* | --MPI=*) MPI=$ac_optarg ;;
1151 edhill 1.10
1152 jmc 1.156 -mfile | --mfile | -mf | --mf) ac_prev=MPI_MFILE ;;
1153     -mfile=* | --mfile=* | -mf=* | --mf=*) MPI_MFILE=$ac_optarg ;;
1154    
1155 jmc 1.83 -mth) MULTI_THREAD=t ;;
1156    
1157 jmc 1.175 -tlm) if test $KIND = 0 ; then KIND=1 ; else
1158     echo "Error: '-tlm', '-adm' and '-oad' are exclusive" ; usage
1159     fi ;;
1160     -adm | -ad) if test $KIND = 0 ; then KIND=2 ; else
1161     echo "Error: '-tlm', '-adm' and '-oad' are exclusive" ; usage
1162     fi ;;
1163     -oad) if test $KIND = 0 ; then KIND=4 ; NODEPEND=t ; else
1164     echo "Error: '-tlm', '-adm' and '-oad' are exclusive" ; usage
1165     fi ;;
1166 utke 1.120
1167 jmc 1.164 -ieee) echo "Warning: ignore option '-ieee' (already the default)"
1168 jmc 1.175 printf " ... " ;;
1169 jmc 1.164 -noieee) echo "Warning: will use option '-fast' instead of '-noieee' (obsolete)"
1170 jmc 1.175 printf " ... " ; OptLev=`expr $OptLev \* 2` ;;
1171 jmc 1.164 -fast) OptLev=`expr $OptLev \* 2` ;;
1172     -devel) OptLev=0 ;;
1173 jmc 1.156 -gsl) GSL=t ;;
1174 edhill 1.10
1175 edhill 1.1 -verbose) verbose=2 ;;
1176     -debug) debug=1 ;;
1177     -quiet) verbose=0 ;;
1178    
1179 edhill 1.40 -deldir | -dd) DELDIR=t ;;
1180    
1181 jmc 1.136 -use_r4|-ur4) USE_R4=t ;;
1182 jmc 1.135
1183 ce107 1.90 -ts) TS=t;;
1184     -papis) PAPIS=t;;
1185     -pcls) PCL=t;;
1186    
1187 jmc 1.156 -*) echo "Error: unrecognized option: "$ac_option
1188     usage ;;
1189     *) echo "Error: unrecognized argument: "$ac_option
1190     usage ;;
1191 jmc 1.135
1192 edhill 1.1 esac
1193 jmc 1.135
1194 edhill 1.1 done
1195    
1196 edhill 1.10 if test "x$QUICK" = xt ; then
1197     NOGENMAKE=t
1198     NOCLEAN=t
1199     NODEPEND=t
1200     fi
1201    
1202 jmc 1.156 #- check length of MPI machine file:
1203     if test "x$MPI" != x0 -a "x$MPI_MFILE" != x ; then
1204     if test -r $MPI_MFILE ; then
1205     nl=`wc -l $MPI_MFILE | awk '{print $1}'`
1206     if [ $nl -lt $MPI ] ; then
1207 jmc 1.175 echo "Error: need at least $MPI nodes (currently only $nl) in MPI_MFILE=$MPI_FILE"
1208     usage
1209 jmc 1.156 fi
1210     if [ $verbose -gt 1 ]; then
1211     echo " MPI_MFILE=$MPI_MFILE : $nl procs for MPI=$MPI run"
1212     fi
1213     else
1214 jmc 1.175 echo "Error: cannot access MPI_MFILE=$MPI_FILE"
1215     usage
1216 jmc 1.156 fi
1217     fi
1218    
1219 jmc 1.99 #- setting for forward or ADM testing
1220 jmc 1.175 if test $KIND = 1 ; then
1221     TARG=ftlall
1222     code_dir=code_ad
1223     inputdir=input_ad
1224     ref_outp="output_tlm.txt"
1225     EXECUTABLE="mitgcmuv_ftl"
1226     elif test $KIND = 2 ; then
1227 jmc 1.168 if test "x$TARG" = xobj ; then TARG=adobj ; else TARG=adall ; fi
1228 jmc 1.99 code_dir=code_ad
1229 jmc 1.108 inputdir=input_ad
1230 jmc 1.99 ref_outp="output_adm.txt"
1231     EXECUTABLE="mitgcmuv_ad"
1232 jmc 1.175 elif test $KIND = 4 ; then
1233 jmc 1.168 TARG=adAll
1234 utke 1.120 code_dir=code_oad
1235     inputdir=input_oad
1236     ref_outp="output_oadm.txt"
1237     EXECUTABLE="mitgcmuv_ad"
1238 jmc 1.99 else
1239 jmc 1.168 if test "x$JOBS" != x ; then TARG="-j $JOBS $TARG" ; fi
1240 jmc 1.99 code_dir=code
1241 jmc 1.108 inputdir=input
1242 jmc 1.99 ref_outp="output.txt"
1243     EXECUTABLE="mitgcmuv"
1244     fi
1245    
1246 jmc 1.142 xx=`echo $TESTDIRS | awk '{print $1}'`
1247 edhill 1.1 if test "x$TESTDIRS" = x ; then
1248 jmc 1.103 LIST=`scandirs results/$ref_outp`
1249 jmc 1.142 elif test $xx = 'start_from' ; then
1250     xx=`echo $TESTDIRS | awk '{print $2}'`
1251     LIST=`scandirs results/$ref_outp | sed -n "/$xx/,$ p"`
1252 jmc 1.84 else
1253     #- expand group of experiments:
1254     LIST=" "
1255     for xx in $TESTDIRS
1256     do
1257     case $xx in
1258 jmc 1.86 'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
1259     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
1260     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
1261 jmc 1.84 ;;
1262     'tutorials')
1263     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
1264     *) LIST=${LIST}" "$xx ;;
1265     esac
1266 jmc 1.135 done
1267 jmc 1.89 fi
1268     #echo 'LIST='${LIST}'<'
1269     #- skip dirs, remove duplicate and non-directory:
1270     TESTDIRS=" "
1271     count=0
1272     for xx in $LIST
1273     do
1274     yy=`echo $SKIPDIRS | grep -c $xx`
1275     if test $yy = 0 ; then
1276 jmc 1.84 if test -d $xx ; then
1277     yy=`echo $TESTDIRS | grep -c $xx`
1278     if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
1279 jmc 1.89 else count=1 ;
1280     echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
1281     fi
1282     else
1283 jmc 1.175 if test $count = 1 ; then echo -n ", \"$xx\""
1284 jmc 1.89 else count=1 ; echo "" ; echo -n " skip: \"$xx\""
1285 jmc 1.84 fi
1286 jmc 1.89 fi
1287 jmc 1.135 done
1288 jmc 1.89 if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
1289 jmc 1.84 #echo 'TESTDIRS='${TESTDIRS}'<'
1290 edhill 1.1
1291 edhill 1.10 if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
1292     OPTFILE=$MITGCM_OF
1293     fi
1294    
1295 jmc 1.156 LOC_MFILE='tr_mpi_mfile'
1296 jmc 1.146 RUNLOG="run.tr_log"
1297 jmc 1.195 if test "x$MPI" = x0 ; then
1298     OUTPUTFILE=$ref_outp
1299     if test "x$COMMAND" = x ; then COMMAND="./$EXECUTABLE > $OUTPUTFILE" ; fi
1300     else
1301     OUTPUTFILE="STDOUT.0000"
1302     if test "x$COMMAND" = x ; then COMMAND="mpirun -v -np TR_NPROC ./$EXECUTABLE" ; fi
1303 edhill 1.24 fi
1304    
1305 jmc 1.195 echo "OK (COMMAND='$COMMAND')"
1306 edhill 1.1
1307 jmc 1.192 TMP=./tr_$$
1308     #- try to put temporary files in system-local /tmp dir
1309     #TMP=/tmp/tr_$$
1310     #touch $TMP ; retVal=$?
1311     #if [ $retVal -eq 0 ] ; then
1312     # if test ! -r $TMP ; then TMP=./tr_$$ ; fi
1313     #else
1314     # TMP=./tr_$$
1315     #fi
1316     #rm -f $TMP
1317     #if [ $verbose -gt 1 ]; then echo " temp files: $TMP" ; fi
1318    
1319 jmc 1.94 # set the Default List of output variables to be checked:
1320     # (use default or load experiment-specific list from file "tr_checklist")
1321     # content : 1rst = main variable used to decide if it pass or FAIL
1322     # others = number of matching digits to be printed in summary.txt
1323 jmc 1.175 if test $KIND = 1 ; then
1324     DEF_CHECK_LIST='tlmGrd tlmCst tlmGrd fwdGrd'
1325     EMPTY_RESULTS='.. .. ..'
1326     LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1327     elif test $KIND = 2 -o $KIND = 4 ; then
1328     DEF_CHECK_LIST='AdGrd Cost AdGrd FDGrd'
1329     EMPTY_RESULTS='.. .. ..'
1330     LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1331     else
1332 jmc 1.94 DEF_CHECK_LIST='PS PS T+ S+ U+ V+ pt1+ pt2+ pt3+ pt4+ pt5+'
1333     EMPTY_RESULTS='.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..'
1334 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}'`
1335 jmc 1.94 ii=`echo $EMPTY_RESULTS | awk '{print NF}'`
1336 jmc 1.97 EMPTY_RESULTS=$EMPTY_RESULTS`expr $LEN_CHECK_LIST - $ii | awk 'BEGIN{FS=":"}{for(i=1;i<=$1;i++){printf " ."}}'`
1337 jmc 1.94 fi
1338    
1339 edhill 1.1 # create the FORTRAN comparison code
1340 jmc 1.178 if test "x$CLEANUP" = xt -o -x tr_cmpnum ; then
1341 jmc 1.133 echo "skipping comparison code build"
1342     else
1343     createcodelet
1344     fi
1345 edhill 1.1
1346 jmc 1.112 # build the mpack utility (if ADDRESSES = NONE, do it to test the build)
1347 jmc 1.192 if test "x$ADDRESSES" = x -o "x$SENDCMD" != x ; then
1348 edhill 1.32 echo "skipping mpack build"
1349     else
1350 edhill 1.31 build_mpack
1351 jmc 1.192 if test "x$HAVE_MPACK" = xt ; then SENDCMD=$MPACK ; fi
1352 edhill 1.31 fi
1353 edhill 1.1
1354     # Create a uniquely named directory to store results
1355 jmc 1.110 CMDLINE=$0
1356 jmc 1.118 for xx in "$@" ; do nw=`echo $xx | wc -w`
1357 jmc 1.180 if test $nw = '1' ; then CMDLINE="$CMDLINE $xx" ; else
1358     nb=`echo $xx | grep -c '='`
1359     if test $nb = 0 ; then CMDLINE="$CMDLINE '$xx'"
1360     else yy=`echo "$xx'" | sed "s/=/='/"` ;
1361     CMDLINE="$CMDLINE $yy" ; fi
1362     fi
1363 jmc 1.118 done
1364     #for xx in "$@" ; do CMDLINE="$CMDLINE '$xx'" ; done
1365 edhill 1.1 MACH=`hostname`
1366 edhill 1.2 UNAMEA=`uname -a`
1367 edhill 1.1 DATE=`date +%Y%m%d`
1368 edhill 1.25 BASE="tr_"$MACH"_"$DATE"_"
1369 jmc 1.70 if test "x$OUTDIR" != x ; then
1370     BASE="tr_"$OUTDIR"_"$DATE"_"
1371 jmc 1.121 else
1372     short_name=`hostname | sed 's/\..*$//'`
1373     BASE="tr_"$short_name"_"$DATE"_"
1374 jmc 1.70 fi
1375 edhill 1.1 DNUM=0
1376     DRESULTS="$BASE$DNUM"
1377     while test -e $DRESULTS ; do
1378     DNUM=$(( $DNUM + 1 ))
1379     DRESULTS="$BASE$DNUM"
1380     done
1381     mkdir $DRESULTS
1382     RETVAL=$?
1383     if test "x$RETVAL" != x0 ; then
1384 edhill 1.20 echo "ERROR: Can't create results directory \"./$DRESULTS\""
1385 edhill 1.1 exit 1
1386     fi
1387     SUMMARY="$DRESULTS/summary.txt"
1388 edhill 1.16 start_date=`date`
1389 edhill 1.17 echo $start_date > $SUMMARY
1390 jmc 1.110 echo 'run:' $CMDLINE >> $SUMMARY
1391     echo 'on :' $UNAMEA >> $SUMMARY
1392 edhill 1.1
1393 edhill 1.11 of_path=
1394 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
1395     if test -r $OPTFILE ; then
1396 edhill 1.11 # get the path
1397     path=${OPTFILE%/*}
1398     if test "x$path" = x ; then
1399     of_path=`pwd`
1400     else
1401     of_path=`( cd $path > /dev/null 2>&1 ; pwd )`
1402     fi
1403     file=${OPTFILE##*/}
1404     OPTFILE=$of_path/$file
1405 edhill 1.21 cp $OPTFILE $DRESULTS
1406     echo >> $SUMMARY
1407     echo " OPTFILE=$OPTFILE" >> $SUMMARY
1408 edhill 1.11 else
1409 jmc 1.179 echo | tee -a $SUMMARY
1410     echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee -a $SUMMARY
1411 edhill 1.21 exit 1
1412 edhill 1.10 fi
1413 edhill 1.21 else
1414     echo >> $SUMMARY
1415 jmc 1.152 echo "No \"OPTFILE\" was specified ; genmake2 found and uses:" >> $SUMMARY
1416     #-note: to be filled later after 1rst run
1417 edhill 1.10 fi
1418     echo
1419     echo >> $SUMMARY
1420 jmc 1.175 if test $KIND = 0 ; then
1421     line_0=`printf '%s %2i' 'default' $MATCH_CRIT`
1422 jmc 1.94 line_0="$line_0 ----T----- ----S----- ----U----- ----V-----"
1423 edhill 1.49 line_1="G D M c m s m s m s m s"
1424 jmc 1.167 line_2="e p a R g m m e . m m e . m m e . m m e ."
1425     line_3="n n k u 2 i a a d i a a d i a a d i a a d"
1426 edhill 1.49 line_4="2 d e n d n x n . n x n . n x n . n x n ."
1427 edhill 1.50 for ii in $PTRACERS_NUM ; do
1428 edhill 1.49 line_0="$line_0 --PTR 0"$ii"--"
1429     line_1="$line_1 m s"
1430     line_2="$line_2 m m e ."
1431     line_3="$line_3 i a a d"
1432     line_4="$line_4 n x n ."
1433     done
1434 jmc 1.175 else
1435     line_0=`printf '%s %2i' 'default ' $MATCH_CRIT`
1436     if test $KIND = 1 ; then
1437 jmc 1.181 #echo "TANGLIN=true" >> $SUMMARY
1438     echo "TangLin generated by TAF" >> $SUMMARY
1439     elif test $KIND = 3 ; then
1440     echo "TangLin generated by OpenAD" >> $SUMMARY
1441     elif test $KIND = 2 ; then
1442     #echo "ADJOINT=true" >> $SUMMARY
1443     echo "Adjoint generated by TAF" >> $SUMMARY
1444     else
1445     echo "Adjoint generated by OpenAD" >> $SUMMARY
1446     fi
1447     if test $KIND = 1 -o $KIND = 3 ; then
1448 jmc 1.175 line_1="G D M C T F"
1449     line_2="e p a R o L D"
1450     else
1451     line_1="G D M C A F"
1452     line_2="e p a R o d D"
1453     fi
1454     line_3="n n k u s G G"
1455     line_4="2 d e n t r r"
1456     echo >> $SUMMARY
1457     fi
1458 jmc 1.178 if test "x$CLEANUP" != xt ; then
1459 edhill 1.49 echo "$line_0" | tee -a $SUMMARY
1460     echo "$line_1" | tee -a $SUMMARY
1461     echo "$line_2" | tee -a $SUMMARY
1462     echo "$line_3" | tee -a $SUMMARY
1463     echo "$line_4" | tee -a $SUMMARY
1464 jmc 1.175 echo "" | tee -a $SUMMARY
1465 jmc 1.178 fi
1466 jmc 1.139 echo "-------------------------------------------------------------------------------"
1467 edhill 1.1
1468 edhill 1.10 # ...and each test directory...
1469     for dir in $TESTDIRS ; do
1470 jmc 1.135
1471 jmc 1.106 # set builddir & rundir:
1472     builddir="build"
1473     if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1474     rundir="run"
1475 jmc 1.143 pfxdir="tr_$rundir"
1476 jmc 1.106 if test ! -d $dir/$rundir ; then
1477     rundir=$builddir
1478     fi
1479     CODE_DIR=$dir/$code_dir
1480     BUILD_DIR=$dir/$builddir
1481    
1482 edhill 1.10 # Cleanup only!
1483     if test "x$CLEANUP" = xt ; then
1484 jmc 1.127 echo -n ' --- dir:' $BUILD_DIR ': '
1485     makeclean $BUILD_DIR
1486 jmc 1.145 ( cd $BUILD_DIR
1487     rm -f $EXECUTABLE *.bak
1488 jmc 1.146 rm -f genmake_state genmake_*optfile genmake.log
1489 jmc 1.154 rm -f SIZE.h.mpi genmake.tr_log make.tr_log
1490 jmc 1.190 rm -rf mpi_headers
1491 jmc 1.145 )
1492 jmc 1.106 if test -d $dir/$rundir/CVS ; then
1493 jmc 1.175 echo -n ' --- dir:' $dir/$rundir ': '
1494 jmc 1.106 run_clean $dir/$rundir
1495 edhill 1.10 fi
1496 jmc 1.143 trdir=`( cd $dir ; find . -type d -name "$pfxdir.*" -print | sed 's/^.\///')`
1497 jmc 1.127 ttd=`echo $trdir | wc -w`
1498     if test $ttd != 0 ; then
1499     echo ' --- rm dir:' $trdir
1500     ( cd $dir ; rm -rf $trdir )
1501     fi
1502 edhill 1.10 continue
1503 edhill 1.1 fi
1504 edhill 1.3
1505 jmc 1.135 # Verify that the testdir exists and contains previous
1506 edhill 1.10 # results in the correct location--or skip this directory!
1507 jmc 1.104 fout=$dir"/results/"$ref_outp
1508 jmc 1.175 #if test ! -r $fout ; then
1509     if test ! -r $fout -a ! -r ${fout}.gz ; then
1510 edhill 1.24 echo "can't read \"$fout\" -- skipping $dir"
1511 edhill 1.10 continue
1512     fi
1513 edhill 1.7
1514 jmc 1.117 # Check for specific files for particular type of run
1515 edhill 1.49
1516 jmc 1.161 if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" != "x0" ; then
1517     echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1518     continue
1519     fi
1520     if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1521     echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1522     continue
1523     fi
1524    
1525 jmc 1.154 if test "x$MPI" != "x0" ; then
1526 jmc 1.173 ntx=1 ; nty=1
1527 jmc 1.161 if test "x$MULTI_THREAD" = "xt" ; then
1528 jmc 1.174 ff=$dir"/input/eedata.mth"
1529     ntx=`grep "^ *nTx *=" $ff | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
1530     nty=`grep "^ *nTy *=" $ff | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
1531     if test "x$ntx" = x ; then ntx=1 ; fi
1532     if test "x$nty" = x ; then nty=1 ; fi
1533 jmc 1.161 fi
1534     #- create new SIZE.h with no more than '$MPI' Procs
1535 jmc 1.173 mk_mpi_size $CODE_DIR"/SIZE.h_mpi" $BUILD_DIR"/tr_size.mpi" $MPI $ntx $nty
1536 jmc 1.161 LOC_NPROC=$?
1537     ( cd $BUILD_DIR
1538     if test -r SIZE.h.mpi ; then
1539     cmp tr_size.mpi SIZE.h.mpi > /dev/null 2>&1 ; RETVAL=$?
1540     else RETVAL=1
1541     fi
1542     if test "x$RETVAL" = x0 ; then
1543     rm -f tr_size.mpi
1544     else
1545     rm -f SIZE.h.mpi ; mv tr_size.mpi SIZE.h.mpi
1546     fi
1547     )
1548 jmc 1.156 if test "x$MPI_MFILE" != x ; then
1549     #- create new MPI machine-file with the right number of Procs
1550     rm -f $LOC_MFILE
1551     cat $MPI_MFILE | sort | uniq | head -$LOC_NPROC > $LOC_MFILE
1552     nl=`wc -l $LOC_MFILE | awk '{print $1}'`
1553     if [ $nl -lt $LOC_NPROC ] ; then
1554     rm -f $LOC_MFILE
1555     cat $MPI_MFILE | head -$LOC_NPROC > $LOC_MFILE
1556     #sed -n "1,$LOC_NPROC p" $MPI_MFILE > $LOC_MFILE
1557     fi
1558     if [ $verbose -gt 1 ]; then
1559     nl=`wc -l $LOC_MFILE | awk '{print $1}'`
1560     echo " new LOC_MFILE=$LOC_MFILE : $nl procs for LOC_NPROC=$LOC_NPROC"
1561     fi
1562     fi
1563 jmc 1.161 if test "x$MULTI_THREAD" = "xt" ; then
1564     retv=`check_eedata $dir"/input/eedata.mth" $BUILD_DIR"/SIZE.h.mpi"`
1565     if test $retv != 0 ; then
1566     echo "input/eedata.mth tiling misfit -- skipping $dir"
1567     continue
1568     fi
1569 jmc 1.154 fi
1570 jmc 1.123 fi
1571 jmc 1.83
1572     # Check whether there are "extra runs" for this testdir
1573     extra_runs=
1574 jmc 1.133 if test "x$NORUN" = xf ; then
1575 jmc 1.183 ex_run_dirs=`( cd $dir ; ls -d $inputdir.* 2> /dev/null )`
1576 jmc 1.133 fi
1577 jmc 1.108 #echo "ex_run_dirs='$ex_run_dirs'"
1578     for exd in $ex_run_dirs ; do
1579     name=`echo $exd | sed -e "s/$inputdir\.//"`
1580     refExOut=`echo $ref_outp | sed "s/\./.${name}./"`
1581     outf="$dir/results/$refExOut"
1582 jmc 1.175 if test -r $outf -o -r ${outf}.gz ; then
1583 jmc 1.135 if test "x$MULTI_THREAD" = "xt" ; then
1584 jmc 1.123 if test -r $dir"/"$exd"/eedata.mth" ; then
1585 jmc 1.154 if test "x$MPI" = "x0" ; then
1586     extra_runs="$extra_runs $name"
1587     else
1588 jmc 1.161 retv=`check_eedata $dir"/"$exd"/eedata.mth" $BUILD_DIR"/SIZE.h.mpi"`
1589 jmc 1.123 if test $retv = 0 ; then
1590 jmc 1.83 extra_runs="$extra_runs $name"
1591 jmc 1.123 else
1592     echo $exd"/eedata.mth tiling misfit -- skipping $dir"
1593 jmc 1.83 fi
1594 jmc 1.123 fi
1595     #else echo $dir"/"$exd"/eedata.mth: not found"
1596 jmc 1.83 fi
1597 jmc 1.123 else
1598     extra_runs="$extra_runs $name"
1599     fi
1600 jmc 1.108 fi
1601     done
1602 edhill 1.28
1603     echo
1604 jmc 1.135 if test "x$extra_runs" = "x" ; then
1605 jmc 1.175 echo "Experiment: $dir"
1606 jmc 1.83 else
1607 jmc 1.175 echo "Experiment: $dir ; extra_runs=$extra_runs"
1608 jmc 1.83 fi
1609 edhill 1.28 echo
1610     unset genmake makedepend make run
1611 jmc 1.94 results=$EMPTY_RESULTS
1612 edhill 1.10
1613 jmc 1.158 # Create an output dir & summary.txt file for each tested experiment (tdir)
1614 jmc 1.138 locDIR=$DRESULTS"/"$dir
1615     mkdir $locDIR
1616 jmc 1.158 #- report to this experiment local summary file ---
1617     echo "DATE='$DATE' ; tdir='$dir'" > $locDIR"/summary.txt"
1618     echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1619     echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1620 jmc 1.138 CDIR=`pwd`"/$locDIR"
1621 jmc 1.135
1622 jmc 1.133 if test "x$NORUN" = xt ; then
1623     run=N
1624     genmakemodel $dir/$builddir && genmake=Y \
1625     && makeclean $dir/$builddir \
1626 jmc 1.175 && symlink_mpifiles $dir $code_dir $builddir \
1627 jmc 1.133 && makedependmodel $dir/$builddir && makedepend=Y \
1628     && makemodel $dir/$builddir && make=Y
1629 edhill 1.10 else
1630 edhill 1.1 genmakemodel $dir/$builddir && genmake=Y \
1631     && makeclean $dir/$builddir \
1632 jmc 1.175 && symlink_mpifiles $dir $code_dir $builddir \
1633 edhill 1.1 && makedependmodel $dir/$builddir && makedepend=Y \
1634     && makemodel $dir/$builddir && make=Y \
1635 jmc 1.139 && run_clean $dir/$rundir \
1636 jmc 1.140 && linkdata $dir/$rundir $inputdir \
1637 edhill 1.12 && runmodel $dir/$rundir && run=Y \
1638 jmc 1.99 && results=`testoutput_run $dir $rundir $ref_outp`
1639 edhill 1.10 fi
1640 jmc 1.139 #echo "results='$results'"
1641 jmc 1.135
1642 edhill 1.24 fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1643 jmc 1.139 echo 1>&2
1644 jmc 1.175 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</' >> $SUMMARY
1645 jmc 1.138 echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1646 edhill 1.34
1647     for ex in $extra_runs ; do
1648 jmc 1.73 unset run
1649 jmc 1.175 results=$EMPTY_RESULTS
1650 jmc 1.106 # reference output file
1651     refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1652 jmc 1.158 # Create an output dir & summary.txt file for each extra run (tdir.ex)
1653 jmc 1.138 locDIR=$DRESULTS"/"$dir"."$ex
1654     mkdir $locDIR
1655 jmc 1.158 #- report to this experiment local summary file ---
1656     echo "DATE='$DATE' ; tdir='$dir.$ex'" > $locDIR"/summary.txt"
1657     #echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1658     #echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1659 jmc 1.138 CDIR=`pwd`"/$locDIR"
1660 jmc 1.143 test ! -e "$dir/$pfxdir.$ex" && mkdir "$dir/$pfxdir.$ex"
1661     run_clean $dir/$pfxdir.$ex
1662     linkdata $dir/$pfxdir.$ex $inputdir.$ex $inputdir
1663     runmodel $dir/$pfxdir.$ex && run=Y \
1664     && results=`testoutput_run $dir $pfxdir.$ex $refExOut`
1665 jmc 1.186 fres=`formatresults $dir.$ex ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1666 jmc 1.139 echo 1>&2
1667 jmc 1.100 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</' >> $SUMMARY
1668 jmc 1.138 echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1669 jmc 1.156 if test "x$POSTCLEAN" = x2 ; then
1670 jmc 1.143 run_clean $dir/$pfxdir.$ex
1671 jmc 1.83 fi
1672 edhill 1.34 done
1673 edhill 1.68
1674 jmc 1.176 if test ! -f $DRESULTS"/"genmake_state ; then
1675 jmc 1.137 if test -f $dir/$builddir/Makefile ; then
1676     mkOpt=`grep '^# OPTFILE=' $dir/$builddir/Makefile 2>/dev/null | head -1 | sed 's/^# //'`
1677     echo "from '$dir/$builddir/Makefile', extract:" > $DRESULTS/genmake_state
1678     sed -n '/^# executed by:/,+1 p' $dir/$builddir/Makefile >> $DRESULTS/genmake_state
1679 jmc 1.151 echo " $mkOpt" >> $DRESULTS/genmake_state
1680 jmc 1.152 if test "x$OPTFILE" = xNONE ; then
1681     eval $mkOpt
1682     sed "/^No \"OPTFILE\" was specified ; genmake2/a\ OPTFILE=${OPTFILE}"\
1683 jmc 1.176 $SUMMARY > tmp.tr_log
1684 jmc 1.152 RETVAL=$?
1685 jmc 1.192 if test "x$RETVAL" = x0 ; then
1686     cp -f tmp.tr_log $SUMMARY
1687 jmc 1.152 fi
1688 jmc 1.192 rm -f tmp.tr_log
1689 jmc 1.152 fi
1690 jmc 1.150 gmkLog=$dir/$builddir/genmake.log
1691 jmc 1.176 if test -r $gmkLog ; then
1692     grep '^Get compiler version using:' $gmkLog > /dev/null 2>&1
1693     RETVAL=$?
1694     if test "x$RETVAL" = x0 ; then
1695     echo -n "from '$gmkLog', " >> $DRESULTS/genmake_state
1696     echo "extract compiler version:" >> $DRESULTS/genmake_state
1697     sed -n '/Get compiler version/,/<-- compiler version/p' \
1698     $gmkLog | grep -v '^... compiler version ' > tmp.tr_log
1699     sed -n '1p' tmp.tr_log >> $DRESULTS/genmake_state
1700     sed -n '2,/^$/p' tmp.tr_log | sed '/^$/d' | sed 's/^./ &/' \
1701     >> $DRESULTS/genmake_state
1702     rm -f tmp.tr_log
1703     fi
1704     echo -n "from '$gmkLog', " >> $DRESULTS/genmake_state
1705     echo "get NETCDF & LAPACK settings:" >> $DRESULTS/genmake_state
1706     sed -n '/set HAVE_NETCDF=/p' $gmkLog >> $DRESULTS/genmake_state
1707     sed -n '/set HAVE_LAPACK=/p' $gmkLog >> $DRESULTS/genmake_state
1708 jmc 1.150 fi
1709 jmc 1.137 fi
1710     fi
1711 jmc 1.83 #postclean $dir/$builddir
1712 jmc 1.156 if test "x$POSTCLEAN" = x2 ; then
1713 jmc 1.175 makeclean $dir/$builddir \
1714     && run_clean $dir/$rundir
1715 jmc 1.83 fi
1716 jmc 1.156 if test "x$MPI" != x0 -a "x$MPI_MFILE" != x ; then rm -f $LOC_MFILE ; fi
1717 jmc 1.135
1718 edhill 1.10 echo "-------------------------------------------------------------------------------"
1719 jmc 1.135
1720 edhill 1.1 done
1721    
1722 edhill 1.34 printf "Start time: " >> $SUMMARY
1723 jmc 1.114 echo "$start_date" >> $SUMMARY
1724 edhill 1.34 printf "End time: " >> $SUMMARY
1725 edhill 1.13 date >> $SUMMARY
1726 edhill 1.20
1727     # If addresses were supplied and mpack built successfully, then try
1728     # to send email using mpack.
1729     if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1730     echo "No results email was sent."
1731     else
1732 jmc 1.192 if test "x$SENDCMD" != x ; then
1733     if [ $verbose -gt 1 ]; then
1734     echo " run: $SENDCMD -s MITgcm-test -m 3555000 ${SAVDIR}/${DRESULTS}".tar.gz" $ADDRESSES"
1735     fi
1736     tar -cf ${SAVDIR}/${DRESULTS}".tar" $DRESULTS > /dev/null 2>&1 \
1737     && gzip ${SAVDIR}/${DRESULTS}".tar" \
1738     && $SENDCMD -s MITgcm-test -m 3555000 ${SAVDIR}/${DRESULTS}".tar.gz" $ADDRESSES
1739 edhill 1.20 RETVAL=$?
1740     if test "x$RETVAL" != x0 ; then
1741     echo
1742     echo "Warning: The tar, gzip, & mpack step failed. Please send email"
1743     echo " to <MITgcm-support@mitgcm.org> for help. You may copy the "
1744     echo " summary of results from the directory \"$DRESULTS\"."
1745     echo
1746     else
1747     echo
1748     echo "An email containing results was sent to the following addresses:"
1749     echo " \"$ADDRESSES\""
1750     echo
1751 jmc 1.192 test -f ${SAVDIR}/${DRESULTS}".tar" && rm -f ${SAVDIR}/${DRESULTS}".tar"
1752     test -f ${SAVDIR}/${DRESULTS}".tar.gz" && rm -f ${SAVDIR}/${DRESULTS}".tar.gz"
1753 edhill 1.20 fi
1754     fi
1755     fi
1756 edhill 1.13
1757 jmc 1.133 if test "x$QUICK" = xf -a "x$NORUN" = xf ; then
1758     rm -f tr_cmpnum.c tr_cmpnum
1759     fi
1760 edhill 1.1
1761 edhill 1.12 if test "x$CLEANUP" != xt ; then
1762 jmc 1.102 cat $SUMMARY | sed 's/ \. \. \. \. \. \. \. \. \. \. \. \. //'
1763 edhill 1.25 if test -e tr_out.txt ; then
1764 jmc 1.175 mv tr_out.txt tr_out.txt.old
1765 edhill 1.14 fi
1766 jmc 1.103 cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1767 edhill 1.12 fi
1768 edhill 1.1
1769 edhill 1.40 if test "x$DELDIR" = xt ; then
1770     rm -rf $DRESULTS
1771     fi
1772 jmc 1.178 echo "======== End of testreport execution ========"

  ViewVC Help
Powered by ViewVC 1.1.22