/[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.197 - (hide annotations) (download)
Thu May 29 22:02:41 2014 UTC (9 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64z, checkpoint65, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65d, checkpoint65e
Changes since 1.196: +5 -1 lines
allows to collect few selected SBO output

1 edhill 1.19 #! /usr/bin/env bash
2 edhill 1.1 #
3 jmc 1.197 # $Header: /u/gcmpack/MITgcm/verification/testreport,v 1.196 2014/01/25 18:29:03 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.197 'sbo_M') testoutput_var $1 "sbo_mass" "SBO mass" $2 $refoutp ; yy=$? ;;
335     'sboFW') testoutput_var $1 "sbo_mass_fw" "SBO m-FW" $2 $refoutp ; yy=$? ;;
336     'sboAc') testoutput_var $1 "sbo_zoamc" "SBO AM-C" $2 $refoutp ; yy=$? ;;
337     'sboAp') testoutput_var $1 "sbo_zoamp" "SBO AM-P" $2 $refoutp ; yy=$? ;;
338 jmc 1.184 'StrmIc') testoutput_var $1 "STREAMICE_FP_ERR" "StreamIce Solver" $2 $refoutp ; yy=$? ;;
339 jmc 1.175 *) yy=99; echo "WARNING: asking for var=$xx : not recognized !" 1>&2 ;;
340     esac
341     if test $xx = $sVar
342     then allargs="$allargs > $yy <"
343     else allargs="$allargs $yy"
344     fi
345     done
346 jmc 1.94
347     nbVar=`echo $listVar | awk '{print NF}'`
348 jmc 1.175 if [ $nbVar -lt $LEN_CHECK_LIST ] ; then
349     #-- fill line (up to standard length) with dot:
350     adNul=`expr $LEN_CHECK_LIST - $nbVar | awk '{for(i=1;i<=$1;i++){print "."}}'`
351 jmc 1.94 echo $allargs $adNul
352 jmc 1.175 else
353 jmc 1.94 echo $allargs
354 jmc 1.135 fi
355 jmc 1.103 # <-- same processing for adjoint & forward test
356 edhill 1.1 }
357    
358     genmakemodel()
359     {
360     # genmakemodel directory
361 edhill 1.10 if test "x$NOGENMAKE" = xt ; then
362     echo "genmake skipped!"
363     else
364 edhill 1.34 if test "x$BASH" = x ; then
365     GENMAKE2="../../../tools/genmake2"
366     else
367     GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
368     fi
369 edhill 1.10 (
370     cd $1;
371 edhill 1.24 command="$GENMAKE2 -ds -m $MAKE"
372 jmc 1.141 if test "x$MKDEPEND" != x ; then
373     command="$command -makedepend=$MKDEPEND"
374     fi
375 jmc 1.196 if test $KIND = 4 ; then
376     command="$command -oad -mods=../$code_dir"
377 utke 1.120 else
378 jmc 1.196 command="$command -mods=../$code_dir"
379 edhill 1.24 fi
380 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
381 jmc 1.124 command="$command -optfile=$OPTFILE"
382 edhill 1.10 fi
383 jmc 1.164 if test $OptLev = 1 ; then
384 jmc 1.175 command="$command -ieee"
385     fi
386 jmc 1.164 if test $OptLev = 0 ; then
387     command="$command -devel"
388 edhill 1.10 fi
389 jmc 1.109 if test "x$GSL" = xt ; then
390     command="$command -gsl"
391     fi
392 jmc 1.154 if test "x$MPI" != x0 ; then
393 edhill 1.66 command="$command -mpi"
394     fi
395 jmc 1.122 if test "x$MULTI_THREAD" = xt ; then
396     #- run multi-threaded using OpenMP:
397     command="$command -omp"
398     fi
399 jmc 1.135 if test "x$USE_R4" = xt ; then
400     command="$command -use_r4"
401     fi
402 jmc 1.165 if test "x$EXTRFLG" != x ; then
403     command="$command -extra_flag $EXTRFLG"
404     fi
405 ce107 1.90 if test "x$TS" = xt ; then
406     command="$command -ts"
407     fi
408     if test "x$PAPIS" = xt ; then
409     command="$command -papis"
410 jmc 1.135 else
411 ce107 1.90 if test "x$PCLS" = xt ; then
412     command="$command -pcls"
413     fi
414     fi
415 jmc 1.139 printf 'genmake ... '
416 jmc 1.146 eval $command > genmake.tr_log 2>&1
417 edhill 1.10 RETVAL=$?
418 edhill 1.44 # Reduce the size of the testing emails!
419 edhill 1.47 head -100 Makefile > $CDIR/Makefile_head
420 edhill 1.10 if test "x$RETVAL" != x0 ; then
421 jmc 1.146 tail genmake.tr_log
422 jmc 1.139 echo "genmakemodel: genmake failed"
423 jmc 1.148 cp genmake.log genmake_* genmake.tr_log $CDIR
424 edhill 1.10 return 1
425     else
426 jmc 1.139 echo "successful"
427 edhill 1.1 fi
428 edhill 1.10 )
429     fi
430 edhill 1.1 }
431    
432     makeclean()
433     {
434     # makeclean directory
435 jmc 1.194 if test "x$NOGENMAKE" = xf ; then rm -f $1/make.tr_log ; fi
436 edhill 1.10 if test "x$NOCLEAN" = xt ; then
437 jmc 1.83 echo "make Clean skipped!"
438 edhill 1.10 else
439     (
440     cd $1;
441 jmc 1.87 #if test -e $OUTPUTFILE ; then rm -f $OUTPUTFILE ; fi
442 edhill 1.10 if test -r Makefile ; then
443 jmc 1.139 printf 'clean build-dir: make Clean ... '
444 jmc 1.146 $MAKE Clean >> make.tr_log 2>&1
445 edhill 1.10 RETVAL=$?
446     if test "x$RETVAL" != x0 ; then
447 jmc 1.146 tail make.tr_log
448 jmc 1.139 echo "makeclean: \"make Clean\" failed"
449 jmc 1.148 cp make.tr_log genmake.log genmake.tr_log $CDIR
450 edhill 1.10 return 1
451     fi
452 jmc 1.139 echo successful
453 jmc 1.127 else
454     echo ''
455 edhill 1.10 fi
456     exit 0
457     )
458     fi
459     }
460    
461 jmc 1.83 run_clean()
462 edhill 1.68 {
463 jmc 1.83 # run_clean directory
464     if test "x$NOCLEAN" = xt ; then
465     echo "run_clean skipped!"
466     else
467 jmc 1.190 (
468     cd $1;
469     printf 'clean run-dir ... '
470     # part of what is done after "make clean" when doing "make CLEAN"
471     find . -name "*.meta" -exec rm {} \;
472     find . -name "*.data" -exec rm {} \;
473     find . -name "fort.*" -exec rm {} \;
474     find . -type l -exec rm {} \;
475     #- should remove executable only if sym-link (already done above)
476     rm -f $RUNLOG *.txt STDOUT.* STDERR.* *diagnostics.log *.[0-9][0-9][0-9][0-9].log
477     rm -f datetime costfinal divided.ctrl snapshot* output_adm.*.diva_*
478     rm -f *_MIT_CE_000.opt0000 costfunction*0000
479 jmc 1.191 rm -f oad_cp.[0-9][0-9][0-9].?????
480 jmc 1.190 rm -rf mnc_test_*
481     echo successful
482     exit 0
483     )
484 edhill 1.68 fi
485     }
486    
487 edhill 1.10 makedependmodel()
488     {
489     # makedependmodel directory
490     if test "x$NODEPEND" = xt ; then
491     echo "make depend skipped!"
492     else
493     (
494     cd $1;
495 jmc 1.139 printf 'make depend ... '
496 jmc 1.146 $MAKE depend >> make.tr_log 2>&1
497 edhill 1.1 RETVAL=$?
498     if test "x$RETVAL" != x0 ; then
499 jmc 1.146 tail make.tr_log
500 jmc 1.139 echo "makedependmodel: make depend failed"
501 jmc 1.148 cp make.tr_log genmake.log genmake.tr_log $CDIR
502 edhill 1.1 return 1
503 edhill 1.10 else
504 jmc 1.139 echo successful
505 edhill 1.1 fi
506 edhill 1.10 )
507     fi
508 edhill 1.1 }
509    
510     makemodel()
511     {
512     # makemodel directory
513     (
514 jmc 1.159 mk_fail=0
515 jmc 1.136 if test "x$NOMAKE" = xt ; then
516     cd $1;
517     if test -x $EXECUTABLE ; then
518     echo "make skipped!"
519     else
520     echo "no executable!"
521 jmc 1.159 mk_fail=3
522 jmc 1.136 fi
523     else
524 edhill 1.1 cd $1;
525     if test -r Makefile ; then
526 jmc 1.139 printf 'make ... '
527 jmc 1.171 if test "x$REPLMAKE" = x ; then
528     $MAKE $TARG >> make.tr_log 2>&1
529     else
530     $REPLMAKE $TARG >> make.tr_log 2>&1
531     fi
532 edhill 1.1 RETVAL=$?
533     if test "x$RETVAL" != x0 ; then
534 jmc 1.146 tail make.tr_log
535 jmc 1.139 echo failed
536 jmc 1.163 cp genmake.log genmake.tr_log $CDIR
537     tail -$NBLINES_MKLOG make.tr_log > $CDIR"/make.tr_log_tail"
538 jmc 1.131 rm -f $EXECUTABLE
539 jmc 1.159 mk_fail=1
540 edhill 1.1 else
541 jmc 1.139 echo successful
542 edhill 1.1 fi
543 jmc 1.159 else
544     echo "no Makefile !"
545     mk_fail=2
546 edhill 1.1 fi
547 jmc 1.136 fi
548 jmc 1.177 if test $KIND = 1 -a -f taf_ftl.log ; then
549 jmc 1.186 head -1 taf_ftl.log >> $CDIR"/summary.txt"
550 jmc 1.177 fi
551 jmc 1.175 if test $KIND = 2 -a -f taf_ad.log ; then
552 jmc 1.186 head -1 taf_ad.log >> $CDIR"/summary.txt"
553     nerr=`grep -c 'TAF *.* ERROR ' taf_ad.log`
554     nwar=`grep -c 'TAF RECOMPUTATION *.* WARNING ' taf_ad.log`
555     if test -f taf_output ; then
556     n2er=`grep -c 'TAF *.* ERROR ' taf_output`
557 jmc 1.189 n3er=`grep -c '\*ERROR\* ' taf_output`
558     nerr=`expr $nerr + $n2er + $n3er`
559 jmc 1.186 fi
560     echo " TAF reports $nerr Errors and $nwar Recomputation Warnings" \
561 jmc 1.158 >> $CDIR"/summary.txt"
562     fi
563 jmc 1.159 if test $mk_fail != 0 ; then return $mk_fail ; fi
564 edhill 1.1 )
565     }
566    
567 jmc 1.154 mk_mpi_size()
568     {
569 jmc 1.173 # mk_mpi_size input_file output_file proc_Nb threads_Nb_X threads_Nb_Y
570 jmc 1.154 #
571 jmc 1.173 # make new SIZE.h (=output_file) from SIZE.h_mpi (=input_file)
572 jmc 1.154 # for an MPI build with no more than proc_Nb processors ;
573 jmc 1.173 # ensure that enough tiles per proc (nSx,nSy) remain for the given
574     # number of threads (nTx,nTy) ;
575     # return the effective number of processors.
576 jmc 1.154
577     inp=$1
578     out=$2
579     np=$3
580 jmc 1.173 tx=$4
581     ty=$5
582 jmc 1.154 tmp=TTT.$$
583    
584 jmc 1.173 # dirX : select with direction to favor in MPI process repartition
585     # dirX=1 : prefer to put more proc in X direction
586     # dirX=0 : prefer to put more proc in Y direction
587     dirX=0
588    
589 jmc 1.154 px=`grep "^ & *nPx *=" $inp | sed "s/^ & *nPx *= *//" | sed 's/, *$//'`
590     py=`grep "^ & *nPy *=" $inp | sed "s/^ & *nPy *= *//" | sed 's/, *$//'`
591     sx=`grep "^ & *nSx *=" $inp | sed "s/^ & *nSx *= *//" | sed 's/, *$//'`
592     sy=`grep "^ & *nSy *=" $inp | sed "s/^ & *nSy *= *//" | sed 's/, *$//'`
593    
594 jmc 1.173 #- for each direction, assume # of threads is a multiple of total number of tiles
595     nx=$px
596     if [ `expr $sx % $tx` -ne 0 -a `expr $sx \* $px % $tx` -eq 0 ] ; then
597     nx=`expr $sx \* $px / $tx`
598     if [ $verbose -gt 1 ]; then
599     echo " change px from $px to $nx to accommodate $tx threads"
600     fi
601     fi
602     ny=$py
603     if [ `expr $sy % $ty` -ne 0 -a `expr $sy \* $py % $ty` -eq 0 ] ; then
604     ny=`expr $sy \* $py / $ty`
605     if [ $verbose -gt 1 ]; then
606     echo " change py from $py to $ny to accommodate $ty threads"
607     fi
608     fi
609 jmc 1.154 #- find the largest divisor of input_file proc Nb, but not larger than $np
610     pp=0
611 jmc 1.155 i=1
612 jmc 1.173 while [ $i -le $nx ] ; do
613     if [ `expr $nx % $i` -eq 0 ] ; then
614 jmc 1.155 j=1
615 jmc 1.173 while [ $j -le $ny ] ; do
616     if [ `expr $ny % $j` -eq 0 ] ; then
617 jmc 1.155 ij=`expr $i \* $j`
618     if [ $ij -gt $pp ] ; then
619 jmc 1.161 flag=1
620     elif [ $ij -eq $pp ] ; then
621     flag=$dirX
622     else
623     flag=0
624     fi
625     if test $flag = 1 ; then
626 jmc 1.155 if [ $ij -le $np ] ; then
627     ix=$i ; jy=$j ; pp=$ij
628     #echo " ix,jy= $ix,$jy"
629     fi
630     fi
631     fi
632     j=`expr $j + 1`
633     done
634 jmc 1.154 fi
635 jmc 1.155 i=`expr $i + 1`
636 jmc 1.154 done
637    
638     #- create new SIZE.h type file:
639     sx=`expr $sx \* $px / $ix`
640     sy=`expr $sy \* $py / $jy`
641     if [ $verbose -gt 1 ]; then
642     echo " px,py,np= $px,$py,$np : New MPI size: px,py= $ix,$jy : sx,sy= $sx,$sy"
643     fi
644     sed "/^ \& *nPx *=/s/[0-9]*,/$ix,/" $inp > $tmp
645     sed "/^ \& *nPy *=/s/[0-9]*,/$jy,/" $tmp > $out
646     sed "/^ \& *nSx *=/s/[0-9]*,/$sx,/" $out > $tmp
647     sed "/^ \& *nSy *=/s/[0-9]*,/$sy,/" $tmp > $out
648     rm -f $tmp
649     return $pp
650     }
651    
652 edhill 1.27 symlink_mpifiles()
653     {
654     # Put special links so that MPI specific files are used
655     # This MUST be invoked between makeclean and makelinks because
656     # the Makefile will link to non-mpi files by default
657    
658     dir=$1
659     code_dir=$2
660 jmc 1.154 build_dir=$dir/$3
661 jmc 1.135
662 edhill 1.27 # These are files that should replace their counter-part when using -mpi
663 jmc 1.154 MPI_FILES=`(cd $dir/$code_dir; find . -name "*_mpi" -print)`
664 edhill 1.27
665 jmc 1.154 for ii in $MPI_FILES ; do
666     i=`echo $ii | sed 's:^\./::'`
667     name=`echo $i | sed 's:_mpi::'`
668     file="../$code_dir/$i"
669     if test $name = 'SIZE.h' ; then file="SIZE.h.mpi" ; fi
670    
671     # Is this an MPI run?
672     if test "x$MPI" = x0 ; then
673     # NO: We undo any _mpi symbolically linked files
674     if test -L $build_dir/$name ; then
675     ( cd $build_dir ; cmp $name $file > /dev/null 2>&1 )
676     RETVAL=$?
677     if test "x$RETVAL" = x0 ; then
678     if [ $verbose -gt 1 ]; then
679     echo " Un-linking $name from ../$code_dir" ; fi
680     rm -f $build_dir/$name
681     fi
682     fi
683     else
684     # YES: We symbolically link these files to the build
685     # dir so long as there is no real file in place
686     ( cd $build_dir ; cmp $name $file > /dev/null 2>&1 )
687 edhill 1.27 RETVAL=$?
688 jmc 1.154 if [ $verbose -gt 1 ]; then echo " cmp $name $file returns: $RETVAL" ; fi
689 edhill 1.27 if test "x$RETVAL" != x0 ; then
690 jmc 1.154 if test -h $build_dir/$name ; then rm -f $build_dir/$name ; fi
691     if test ! -r $build_dir/$name ; then
692     if [ $verbose -gt 1 ]; then echo " Linking $name to $file" ; fi
693     (cd $build_dir; ln -sf $file $name)
694 edhill 1.27 fi
695     fi
696 jmc 1.154 fi
697     done
698 edhill 1.27 }
699    
700 edhill 1.1 linkdata()
701     {
702 jmc 1.83 # linkdata run_dir input_dir_1 input_dir_2 ...
703 edhill 1.1 #
704     # symbolically link data files to run directory
705 jmc 1.83 if test -d $1 ; then
706 edhill 1.12 (
707 jmc 1.83 cd $1 ; shift
708 jmc 1.139 echo 'linkdata from dirs:' $*
709 jmc 1.175 inpMPI=`(cd ../$1 ; find . -name "*.mpi" -print | sed 's:^\./::')`
710 jmc 1.125 for xx in $inpMPI ; do
711     if test -r "../"$1"/"$xx ; then
712 jmc 1.175 # found 1 _mpi sfx file in 1rst input dir and it is readable
713 jmc 1.125 yy=`echo $xx | sed 's:\.mpi$::'`
714 jmc 1.154 if test "x$MPI" = "x0" ; then
715     # not mpi test: remove symbolic link
716     if test -h $yy ; then rm -f $yy ; fi
717     else
718     # mpi test: remove symbolic link & link .mpi sfx file
719 jmc 1.125 if test -h $yy ; then rm -f $yy ; fi
720 jmc 1.135 if test ! -r $yy ; then
721 jmc 1.125 ln -sf "../"$1"/"$xx $yy ;
722 jmc 1.139 printf " $xx" 1>&2
723 jmc 1.125 fi
724     fi
725     fi
726     done
727 jmc 1.83 if test -r "../"$1"/eedata.mth" ; then
728     # found eedata.mth in 1rst input dir and it is readable
729     if test "x$MULTI_THREAD" = "xt" ; then
730     # multi-threaded test: remove symbolic link & link eedata.mth
731     if test -h eedata ; then rm -f eedata ; fi
732 jmc 1.135 if test ! -r eedata ; then
733 jmc 1.83 ln -sf "../"$1"/eedata.mth" eedata ;
734 jmc 1.139 printf ' eedata.mth' 1>&2
735 edhill 1.24 fi
736 jmc 1.83 else
737     # not multi-threaded test: remove eedata symbolic link
738     if test -h eedata ; then rm -f eedata ; fi
739     fi
740     fi
741 jmc 1.108 prevDir='NONE'
742 jmc 1.83 for ldir in $* ; do
743 jmc 1.108 if test -d "../"$ldir -a $ldir != $prevDir ; then
744 jmc 1.175 printf " ldir=${ldir}:" 1>&2
745 jmc 1.83 files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
746     for i in $files ; do
747     if test ! -d "../"$ldir/$i ; then
748     if test ! -r $i ; then
749     printf ' '$i 1>&2
750     ln -sf "../"$ldir"/"$i $i
751     fi
752     fi
753     done
754 jmc 1.139 printf ' ;' 1>&2
755 jmc 1.83 if test -x "../"$ldir"/"prepare_run ; then
756 jmc 1.139 "../"$ldir"/"prepare_run 1>&2
757     else
758     echo '' 1>&2
759 edhill 1.24 fi
760 jmc 1.82 fi
761 jmc 1.108 prevDir=$ldir
762 jmc 1.83 done
763 edhill 1.12 )
764 edhill 1.1 fi
765     }
766    
767     runmodel()
768     {
769 edhill 1.6 # runmodel directory
770 edhill 1.1 #
771 jmc 1.154 # runs $COMMAND in "directory"
772 edhill 1.6 # (where "$COMMAND" is relative to "directory")
773 edhill 1.1 (
774     cd $1
775 jmc 1.139 printf 'runmodel in %s ... ' $1
776 jmc 1.158 if test "x$MPI" != x0 ; then
777     #- adjust the MPI run command with the right number of Procs
778     #echo '' ; echo " COMMAND='$COMMAND'"
779     COMMAND=`echo $COMMAND | sed "s/ TR_NPROC / $LOC_NPROC /"`
780     if test "x$MPI_MFILE" != x ; then
781     COMMAND=`echo $COMMAND | sed "s/ TR_MFILE / ..\/..\/$LOC_MFILE /"`
782     fi
783     #echo " COMMAND='$COMMAND'"
784     fi
785 jmc 1.134 if test -L $EXECUTABLE ; then
786     if test -x "../"$builddir"/"$EXECUTABLE ; then
787 jmc 1.154 cmp $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
788     outD=$? ; if test "x$outD" != x0 ; then rm -f $EXECUTABLE ; fi
789 jmc 1.134 else rm -f $EXECUTABLE
790     fi
791 jmc 1.106 fi
792 jmc 1.175 if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
793 jmc 1.119 echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_tmp
794 jmc 1.83 ln -sf "../"$builddir"/"$EXECUTABLE .
795     fi
796 jmc 1.175 if test ! -x $EXECUTABLE ; then
797 jmc 1.156 rm -f $RUNLOG ; touch $RUNLOG
798     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
799     echo " no executable:" $EXECUTABLE >> $RUNLOG
800     RETVAL=8
801     ENDVAL=-1
802 jmc 1.75 else
803 jmc 1.175 if test ! -f $OUTPUTFILE -o $OUTPUTFILE -ot $EXECUTABLE ; then
804     # output do not exist or is older than executable:
805 jmc 1.162 rm -f $OUTPUTFILE $RUNLOG ; touch $RUNLOG
806 jmc 1.156 if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
807 jmc 1.188 #- Divided Adjoint Run:
808     # get the number of additional runs (add_DIVA_runs) from file "run_ADM_DIVA"
809     if test $KIND = 2 -a -f run_ADM_DIVA ; then
810     adm_diva_nb=`sed -n '/^ *add_DIVA_runs\>.*=/p' run_ADM_DIVA | sed 's/ //g'`
811     echo " Divided Adjoint Run: $adm_diva_nb" >> $RUNLOG
812     eval "let $adm_diva_nb"
813     if [ $add_DIVA_runs -ge 1 ] ; then
814     rm -f costf* divided.ctrl snapshot*
815     echo -n "(add_DIVA_runs=$add_DIVA_runs) ... "
816     for ii in `seq 1 $add_DIVA_runs` ; do
817     ( eval $COMMAND ) >> $RUNLOG 2>&1
818     echo " additional DIVA run # $ii : done" >> $RUNLOG
819     mv -f $OUTPUTFILE ${OUTPUTFILE}.diva_${ii}
820     done
821     fi
822     fi
823     #- special DIVA processing ends here
824 jmc 1.156 ( eval $COMMAND ) >> $RUNLOG 2>&1
825     RETVAL=$?
826     ENDVAL=`tail $OUTPUTFILE | grep -c 'PROGRAM MAIN: Execution ended Normally'`
827     if [ $POSTCLEAN -eq 1 -a $ENDVAL -gt 0 ] ; then
828     find . -name "*.meta" -exec rm {} \;
829     find . -name "*.data" -exec rm {} \;
830     rm -rf mnc_test_*
831 jmc 1.83 fi
832 jmc 1.156 else
833     RETVAL=0
834 jmc 1.153 ENDVAL=`tail $OUTPUTFILE | grep -c 'PROGRAM MAIN: Execution ended Normally'`
835 jmc 1.156 touch $RUNLOG
836     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
837 jmc 1.175 echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
838 jmc 1.156 fi
839 jmc 1.75 fi
840 jmc 1.119 rm -f run.log_tmp
841 jmc 1.177 #- in all cases where OutputFile exists, report SIZE and time
842 jmc 1.158 if test -f $OUTPUTFILE ; then
843     grep '(PID\.TID 0000\.0001) n.. =' $OUTPUTFILE \
844 jmc 1.177 | sed 's/(PID.TID 0000.0001) //' >> $CDIR"/summary.txt"
845     grep -A3 'Seconds in section "ALL' $OUTPUTFILE \
846     | sed 's/(PID.TID 0000.0001) //' >> $CDIR"/summary.txt"
847 jmc 1.158 fi
848     if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
849 jmc 1.88 if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
850 jmc 1.139 echo successful
851     printf '=> output from running in %s :\n' $1 1>&2
852     tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
853 edhill 1.6 return 0
854 jmc 1.132 elif [ $RETVAL -ne 0 -a $ENDVAL -gt 0 ] ; then
855     #-- for some weird cases (run is finihed but with error code)
856 jmc 1.139 echo 'finished with error (run:' $RETVAL ' end:' $ENDVAL ')'
857     printf '=> output from running in %s :\n' $1 1>&2
858     tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
859 jmc 1.132 return 0
860 edhill 1.6 else
861 jmc 1.139 echo 'failed (run:' $RETVAL ' end:' $ENDVAL ')'
862     printf '=> output from running in %s :\n' $1 1>&2
863     tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
864 jmc 1.119 cp $RUNLOG $CDIR"/"$RUNLOG
865 edhill 1.6 return 1
866 edhill 1.1 fi
867     )
868     }
869    
870     createcodelet()
871     {
872     # create codelet for comparing model output
873    
874 jmc 1.112 printf "creating the comparison code (using CC=$CC)... "
875 jmc 1.91 cat > tr_cmpnum.c <<EOF
876 edhill 1.22 #include <stdio.h>
877     #include <math.h>
878     int main( int argc, char** argv ) {
879 jmc 1.91 int linnum,cmplin,best,lncnt;
880 edhill 1.52 double a,b,abave,relerr;
881 jmc 1.57 best = -22;
882 adcroft 1.33 lncnt = 0;
883 jmc 1.96 while( 1 & ( (lncnt+=1) < 999 ) ) {
884 edhill 1.22 scanf("%d", &linnum);
885     if (linnum == -1) break;
886     scanf("%lf", &a); scanf("%lf", &b);
887 edhill 1.52 abave = 0.5*(fabs(a)+fabs(b));
888 jmc 1.91 if ( abave == abave ) {
889     if (abave > 0.0) {
890     relerr=fabs(a-b)/abave;
891     if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
892     else { cmplin = -16 ; }
893     best = (best > cmplin) ? best : cmplin; }
894     else { cmplin = -22 ; }
895     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
896     }
897     else {
898     /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
899     break; }
900 edhill 1.22 }
901 adcroft 1.33 if (lncnt == 999) best=-29;
902 jmc 1.91 if (linnum != -1) best=-99;
903 edhill 1.22 printf("%d\n", -best);
904     return 0;
905     }
906     EOF
907 jmc 1.91 $CC -o tr_cmpnum tr_cmpnum.c -lm
908 edhill 1.1
909 jmc 1.91 if [ -x ./tr_cmpnum ]; then
910 edhill 1.1 echo "OK"
911     return 0
912     else
913     echo
914 jmc 1.135 echo "ERROR: failed to compile comparison code -- please specify"
915 edhill 1.58 echo " a C compiler using the CC environment variable."
916 edhill 1.1 exit 1
917     fi
918     }
919    
920     formatresults()
921     {
922     # formatresults expt genmake depend make run results*
923    
924     nm=$1
925     printf '%s %s %s %s' $2 $3 $4 $5
926     shift; shift; shift; shift; shift;
927 jmc 1.94 listPrt=$@
928     listRes=`echo $listPrt | sed 's/>//' | sed 's/<//'`
929     xx=`echo $listPrt | sed 's/.*>//' | sed 's/<.*//' | awk '{print $1}'`
930 jmc 1.97 printf '%3s' $listPrt
931 jmc 1.98 # line below does not work on hp-ux_ia64 : do those substitutions later on
932 jmc 1.95 # printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</'
933 jmc 1.135
934 jmc 1.94 if [ $xx = '..' ]; then
935     printf ' N/O '
936     elif [ $xx = '--' ]; then
937     printf ' N/O '
938     elif [ $xx = 99 ]; then
939 edhill 1.1 printf ' N/O '
940     else
941 jmc 1.94 if [ $xx -ge $MATCH_CRIT ]; then
942 edhill 1.1 printf ' pass'
943     else
944     printf ' FAIL'
945     fi
946     fi
947     printf ' %s' $nm
948 jmc 1.186 if test $KIND = 2 ; then
949     #-- apppend taf repport summary:
950     tafrep=`grep -c '^ TAF reports ' $CDIR/summary.txt`
951     if test $tafrep = 1 ; then
952     grep '^ TAF reports ' $CDIR/summary.txt | awk '{printf " (e=%i, w=%i)",$3,$6}'
953     fi
954     fi
955 edhill 1.1 printf '\n'
956 jmc 1.135
957 edhill 1.1 }
958    
959     scandirs()
960     {
961 jmc 1.81 if [ $# -eq 1 ]; then
962     for arg in * ; do
963 jmc 1.175 #test -f $arg/$1 && echo $arg
964     test -f $arg/$1 -o -f $arg/$1.gz && echo $arg
965 jmc 1.81 done
966 edhill 1.1 else
967 jmc 1.81 echo $*
968 edhill 1.1 fi
969     }
970    
971    
972 jmc 1.123 check_eedata()
973     {
974 jmc 1.161 # check_eedata eedata size.h
975 jmc 1.123 if [ $# -eq 2 ] ; then
976 jmc 1.161 if test -f $1 -a -f $2 ; then
977     nx=`grep "^ *nTx *=" $1 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
978     sx=`grep "^ & *nSx *=" $2 | sed "s/^ & *nSx *=//" | sed 's/, *$//'`
979 jmc 1.123 if test "x$nx" = x ; then
980     rx=10
981     else
982     rx=`expr $sx % $nx`
983     fi
984 jmc 1.161 ny=`grep "^ *nTy *=" $1 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
985     sy=`grep "^ & *nSy *=" $2 | sed "s/^ & *nSy *=//" | sed 's/, *$//'`
986 jmc 1.123 if test "x$ny" = x ; then
987     ry=20
988     else
989     ry=`expr $sy % $ny`
990     fi
991     echo `expr $rx + $ry`
992 jmc 1.161 else
993     echo '-1'
994     fi
995     elif [ $# -eq 1 ] ; then
996     if test -f $1 ; then
997     nx=`grep "^ *nTx *=" $1 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
998     if test "x$nx" = x ; then nx=1 ; fi
999     ny=`grep "^ *nTy *=" $1 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
1000     if test "x$ny" = x ; then ny=1 ; fi
1001     #echo $nx $ny
1002     echo $nx
1003     else
1004 jmc 1.123 echo '-1'
1005 jmc 1.161 fi
1006 jmc 1.123 else
1007     echo '-2'
1008     fi
1009    
1010     }
1011    
1012 edhill 1.1 ###############################################################################
1013    
1014    
1015     # Default properties
1016     debug=0
1017     verbose=1
1018 jmc 1.163 NBLINES_MKLOG=16000
1019 edhill 1.10
1020 jmc 1.164 OptLev=1
1021 jmc 1.109 GSL=f
1022 edhill 1.10
1023     CLEANUP=f
1024 jmc 1.133 NORUN=f
1025 edhill 1.10 QUICK=f
1026 jmc 1.136 NOMAKE=f
1027 edhill 1.10 NOGENMAKE=f
1028     NOCLEAN=f
1029     NODEPEND=f
1030 jmc 1.156 POSTCLEAN=0
1031 edhill 1.1
1032 edhill 1.4 BASH=
1033 edhill 1.10 OPTFILE=NONE
1034     ADDRESSES=
1035 edhill 1.1 TESTDIRS=
1036 jmc 1.89 SKIPDIRS=
1037 edhill 1.1 MPACKDIR="../tools/mpack-1.6"
1038 edhill 1.20 HAVE_MPACK=
1039 jmc 1.113 MPACK=
1040 jmc 1.192 SENDCMD=
1041     SAVDIR='.'
1042 edhill 1.24 COMMAND=
1043 jmc 1.141 MKDEPEND=
1044 edhill 1.59 if test "x$MAKE" = x ; then
1045     MAKE=make
1046     fi
1047 jmc 1.171 REPLMAKE=
1048 edhill 1.59 if test "x$CC" = x ; then
1049     CC=cc
1050     fi
1051 edhill 1.43 JOBS=
1052 jmc 1.165 TARG=
1053 jmc 1.154 MPI=0
1054 jmc 1.156 MPI_MFILE=
1055 jmc 1.83 MULTI_THREAD=f
1056 jmc 1.70 OUTDIR=
1057 edhill 1.40 DELDIR=
1058 jmc 1.135 USE_R4=
1059 jmc 1.165 EXTRFLG=
1060 edhill 1.1
1061 jmc 1.175 #- type of testing (KIND):
1062     # KIND=0 : forward (= default) ; KIND=1 : Tangent Linear with TAF ;
1063     # KIND=2 : Adjoint with TAF ; KIND=4 : Adjoint with OpenAD
1064     KIND=0
1065 edhill 1.24
1066 jmc 1.117 # list of pTracers to check for monitor output
1067 edhill 1.50 PTRACERS_NUM="1 2 3 4 5"
1068 edhill 1.49
1069 jmc 1.147 MATCH_CRIT=10
1070 jmc 1.92
1071 edhill 1.34 printf "parsing options... "
1072 edhill 1.1
1073     ac_prev=
1074     for ac_option ; do
1075    
1076     # If the previous option needs an argument, assign it.
1077     if test -n "$ac_prev"; then
1078     eval "$ac_prev=\$ac_option"
1079     ac_prev=
1080     continue
1081     fi
1082    
1083     ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
1084 jmc 1.135
1085 edhill 1.1 case $ac_option in
1086    
1087 jmc 1.156 -help | --help | -h | --h) usage ;;
1088    
1089     -optfile | --optfile | -of | --of) ac_prev=OPTFILE ;;
1090     -optfile=* | --optfile=* | -of=* | --of=*) OPTFILE=$ac_optarg ;;
1091    
1092     -addr | --addr | -a | --a) ac_prev=ADDRESSES ;;
1093     -addr=* | --addr=* | -a=* | --a=*) ADDRESSES=$ac_optarg ;;
1094     -mpackdir | --mpackdir | -mpd | --mpd) ac_prev=MPACKDIR ;;
1095     -mpackdir=* | --mpackdir=* | -mpd=* | --mpd=*) MPACKDIR=$ac_optarg ;;
1096    
1097 jmc 1.192 -send | --send ) ac_prev=SENDCMD ;;
1098     -send=* | --send=* ) SENDCMD=$ac_optarg ;;
1099     -savdir | --savdir | -sd | --sd ) ac_prev=SAVDIR ;;
1100     -savdir=* | --savdir=* | -sd=* | --sd=* ) SAVDIR=$ac_optarg ;;
1101    
1102 jmc 1.156 -tdir | --tdir | -t | --t) ac_prev=TESTDIRS ;;
1103     -tdir=* | --tdir=* | -t=* | --t=*) TESTDIRS=$ac_optarg ;;
1104     -skipdir | --skipdir | -skd | --skd) ac_prev=SKIPDIRS ;;
1105     -skipdir=* | --skipdir=* | -skd=* | --skd=*) SKIPDIRS=$ac_optarg ;;
1106    
1107     -bash | --bash | -b | --b) ac_prev=BASH ;;
1108     -bash=* | --bash=* | -b=* | --b=*) BASH=$ac_optarg ;;
1109    
1110     -command | --command | -c | --c) ac_prev=COMMAND ;;
1111     -command=* | --command=* | -c=* | --c=*) COMMAND=$ac_optarg ;;
1112    
1113     -makedepend | --makedepend | -md | --md) ac_prev=MKDEPEND ;;
1114     -makedepend=* | --makedepend=* | -md=* | --md=*) MKDEPEND=$ac_optarg ;;
1115    
1116     -make | --make | -m | --m) ac_prev=MAKE ;;
1117     -make=* | --make=* | -m=* | --m=*) MAKE=$ac_optarg ;;
1118    
1119 jmc 1.171 -repl_mk | --repl_mk ) ac_prev=REPLMAKE ;;
1120     -repl_mk=* | --repl_mk=*) REPLMAKE=$ac_optarg ;;
1121    
1122 jmc 1.156 -odir | --odir) ac_prev=OUTDIR ;;
1123     -odir=* | --odir=*) OUTDIR=$ac_optarg ;;
1124    
1125     -ptracers | --ptracers | -ptr | --ptr) ac_prev=PTRACERS_NUM ;;
1126     -ptracers=* | --ptracers=* | -ptr=* | --ptr=*) PTRACERS_NUM=$ac_optarg ;;
1127 edhill 1.50
1128 jmc 1.92 -match | --match ) ac_prev=MATCH_CRIT ;;
1129     -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
1130    
1131 jmc 1.136 -j | --j) ac_prev=JOBS ;;
1132     -j=* | --j=*) JOBS=$ac_optarg ;;
1133 edhill 1.43
1134 jmc 1.165 -ef | --ef) ac_prev=EXTRFLG ;;
1135     -ef=* | --ef=*) EXTRFLG=$ac_optarg ;;
1136    
1137 jmc 1.156 -clean | --clean) CLEANUP=t ; DELDIR=t ;;
1138 edhill 1.10
1139 jmc 1.156 -norun | --norun | -nr | --nr) NORUN=t ;;
1140 jmc 1.165 -obj | --obj ) TARG='obj' ; NORUN=t ;;
1141 jmc 1.156 -runonly | --runonly | -ro | --ro) QUICK=t ; NOMAKE=t ;;
1142     -quick | --quick | -q | --q) QUICK=t ;;
1143     -nogenmake | --nogenmake | -ng | --ng) NOGENMAKE=t ;;
1144     -noclean | --noclean | -nc | --nc) NOCLEAN=t ;;
1145     -nodepend | --nodepend | -nd | --nd) NODEPEND=t ;;
1146 edhill 1.10
1147 jmc 1.156 -postclean | --postclean | -pc | --pc) POSTCLEAN=2 ;;
1148     -deloutp | --deloutp | -do | --do) POSTCLEAN=1 ;;
1149 edhill 1.68
1150 jmc 1.154 -mpi | --mpi) MPI=2 ;;
1151     -MPI | --MPI) ac_prev=MPI ;;
1152     -MPI=* | --MPI=*) MPI=$ac_optarg ;;
1153 edhill 1.10
1154 jmc 1.156 -mfile | --mfile | -mf | --mf) ac_prev=MPI_MFILE ;;
1155     -mfile=* | --mfile=* | -mf=* | --mf=*) MPI_MFILE=$ac_optarg ;;
1156    
1157 jmc 1.83 -mth) MULTI_THREAD=t ;;
1158    
1159 jmc 1.175 -tlm) if test $KIND = 0 ; then KIND=1 ; else
1160     echo "Error: '-tlm', '-adm' and '-oad' are exclusive" ; usage
1161     fi ;;
1162     -adm | -ad) if test $KIND = 0 ; then KIND=2 ; else
1163     echo "Error: '-tlm', '-adm' and '-oad' are exclusive" ; usage
1164     fi ;;
1165     -oad) if test $KIND = 0 ; then KIND=4 ; NODEPEND=t ; else
1166     echo "Error: '-tlm', '-adm' and '-oad' are exclusive" ; usage
1167     fi ;;
1168 utke 1.120
1169 jmc 1.164 -ieee) echo "Warning: ignore option '-ieee' (already the default)"
1170 jmc 1.175 printf " ... " ;;
1171 jmc 1.164 -noieee) echo "Warning: will use option '-fast' instead of '-noieee' (obsolete)"
1172 jmc 1.175 printf " ... " ; OptLev=`expr $OptLev \* 2` ;;
1173 jmc 1.164 -fast) OptLev=`expr $OptLev \* 2` ;;
1174     -devel) OptLev=0 ;;
1175 jmc 1.156 -gsl) GSL=t ;;
1176 edhill 1.10
1177 edhill 1.1 -verbose) verbose=2 ;;
1178     -debug) debug=1 ;;
1179     -quiet) verbose=0 ;;
1180    
1181 edhill 1.40 -deldir | -dd) DELDIR=t ;;
1182    
1183 jmc 1.136 -use_r4|-ur4) USE_R4=t ;;
1184 jmc 1.135
1185 ce107 1.90 -ts) TS=t;;
1186     -papis) PAPIS=t;;
1187     -pcls) PCL=t;;
1188    
1189 jmc 1.156 -*) echo "Error: unrecognized option: "$ac_option
1190     usage ;;
1191     *) echo "Error: unrecognized argument: "$ac_option
1192     usage ;;
1193 jmc 1.135
1194 edhill 1.1 esac
1195 jmc 1.135
1196 edhill 1.1 done
1197    
1198 edhill 1.10 if test "x$QUICK" = xt ; then
1199     NOGENMAKE=t
1200     NOCLEAN=t
1201     NODEPEND=t
1202     fi
1203    
1204 jmc 1.156 #- check length of MPI machine file:
1205     if test "x$MPI" != x0 -a "x$MPI_MFILE" != x ; then
1206     if test -r $MPI_MFILE ; then
1207     nl=`wc -l $MPI_MFILE | awk '{print $1}'`
1208     if [ $nl -lt $MPI ] ; then
1209 jmc 1.175 echo "Error: need at least $MPI nodes (currently only $nl) in MPI_MFILE=$MPI_FILE"
1210     usage
1211 jmc 1.156 fi
1212     if [ $verbose -gt 1 ]; then
1213     echo " MPI_MFILE=$MPI_MFILE : $nl procs for MPI=$MPI run"
1214     fi
1215     else
1216 jmc 1.175 echo "Error: cannot access MPI_MFILE=$MPI_FILE"
1217     usage
1218 jmc 1.156 fi
1219     fi
1220    
1221 jmc 1.99 #- setting for forward or ADM testing
1222 jmc 1.175 if test $KIND = 1 ; then
1223     TARG=ftlall
1224     code_dir=code_ad
1225     inputdir=input_ad
1226     ref_outp="output_tlm.txt"
1227     EXECUTABLE="mitgcmuv_ftl"
1228     elif test $KIND = 2 ; then
1229 jmc 1.168 if test "x$TARG" = xobj ; then TARG=adobj ; else TARG=adall ; fi
1230 jmc 1.99 code_dir=code_ad
1231 jmc 1.108 inputdir=input_ad
1232 jmc 1.99 ref_outp="output_adm.txt"
1233     EXECUTABLE="mitgcmuv_ad"
1234 jmc 1.175 elif test $KIND = 4 ; then
1235 jmc 1.168 TARG=adAll
1236 utke 1.120 code_dir=code_oad
1237     inputdir=input_oad
1238     ref_outp="output_oadm.txt"
1239     EXECUTABLE="mitgcmuv_ad"
1240 jmc 1.99 else
1241 jmc 1.168 if test "x$JOBS" != x ; then TARG="-j $JOBS $TARG" ; fi
1242 jmc 1.99 code_dir=code
1243 jmc 1.108 inputdir=input
1244 jmc 1.99 ref_outp="output.txt"
1245     EXECUTABLE="mitgcmuv"
1246     fi
1247    
1248 jmc 1.142 xx=`echo $TESTDIRS | awk '{print $1}'`
1249 edhill 1.1 if test "x$TESTDIRS" = x ; then
1250 jmc 1.103 LIST=`scandirs results/$ref_outp`
1251 jmc 1.142 elif test $xx = 'start_from' ; then
1252     xx=`echo $TESTDIRS | awk '{print $2}'`
1253     LIST=`scandirs results/$ref_outp | sed -n "/$xx/,$ p"`
1254 jmc 1.84 else
1255     #- expand group of experiments:
1256     LIST=" "
1257     for xx in $TESTDIRS
1258     do
1259     case $xx in
1260 jmc 1.86 'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
1261     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
1262     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
1263 jmc 1.84 ;;
1264     'tutorials')
1265     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
1266     *) LIST=${LIST}" "$xx ;;
1267     esac
1268 jmc 1.135 done
1269 jmc 1.89 fi
1270     #echo 'LIST='${LIST}'<'
1271     #- skip dirs, remove duplicate and non-directory:
1272     TESTDIRS=" "
1273     count=0
1274     for xx in $LIST
1275     do
1276     yy=`echo $SKIPDIRS | grep -c $xx`
1277     if test $yy = 0 ; then
1278 jmc 1.84 if test -d $xx ; then
1279     yy=`echo $TESTDIRS | grep -c $xx`
1280     if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
1281 jmc 1.89 else count=1 ;
1282     echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
1283     fi
1284     else
1285 jmc 1.175 if test $count = 1 ; then echo -n ", \"$xx\""
1286 jmc 1.89 else count=1 ; echo "" ; echo -n " skip: \"$xx\""
1287 jmc 1.84 fi
1288 jmc 1.89 fi
1289 jmc 1.135 done
1290 jmc 1.89 if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
1291 jmc 1.84 #echo 'TESTDIRS='${TESTDIRS}'<'
1292 edhill 1.1
1293 edhill 1.10 if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
1294     OPTFILE=$MITGCM_OF
1295     fi
1296    
1297 jmc 1.156 LOC_MFILE='tr_mpi_mfile'
1298 jmc 1.146 RUNLOG="run.tr_log"
1299 jmc 1.195 if test "x$MPI" = x0 ; then
1300     OUTPUTFILE=$ref_outp
1301     if test "x$COMMAND" = x ; then COMMAND="./$EXECUTABLE > $OUTPUTFILE" ; fi
1302     else
1303     OUTPUTFILE="STDOUT.0000"
1304     if test "x$COMMAND" = x ; then COMMAND="mpirun -v -np TR_NPROC ./$EXECUTABLE" ; fi
1305 edhill 1.24 fi
1306    
1307 jmc 1.195 echo "OK (COMMAND='$COMMAND')"
1308 edhill 1.1
1309 jmc 1.192 TMP=./tr_$$
1310     #- try to put temporary files in system-local /tmp dir
1311     #TMP=/tmp/tr_$$
1312     #touch $TMP ; retVal=$?
1313     #if [ $retVal -eq 0 ] ; then
1314     # if test ! -r $TMP ; then TMP=./tr_$$ ; fi
1315     #else
1316     # TMP=./tr_$$
1317     #fi
1318     #rm -f $TMP
1319     #if [ $verbose -gt 1 ]; then echo " temp files: $TMP" ; fi
1320    
1321 jmc 1.94 # set the Default List of output variables to be checked:
1322     # (use default or load experiment-specific list from file "tr_checklist")
1323     # content : 1rst = main variable used to decide if it pass or FAIL
1324     # others = number of matching digits to be printed in summary.txt
1325 jmc 1.175 if test $KIND = 1 ; then
1326     DEF_CHECK_LIST='tlmGrd tlmCst tlmGrd fwdGrd'
1327     EMPTY_RESULTS='.. .. ..'
1328     LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1329     elif test $KIND = 2 -o $KIND = 4 ; then
1330     DEF_CHECK_LIST='AdGrd Cost AdGrd FDGrd'
1331     EMPTY_RESULTS='.. .. ..'
1332     LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1333     else
1334 jmc 1.94 DEF_CHECK_LIST='PS PS T+ S+ U+ V+ pt1+ pt2+ pt3+ pt4+ pt5+'
1335     EMPTY_RESULTS='.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..'
1336 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}'`
1337 jmc 1.94 ii=`echo $EMPTY_RESULTS | awk '{print NF}'`
1338 jmc 1.97 EMPTY_RESULTS=$EMPTY_RESULTS`expr $LEN_CHECK_LIST - $ii | awk 'BEGIN{FS=":"}{for(i=1;i<=$1;i++){printf " ."}}'`
1339 jmc 1.94 fi
1340    
1341 edhill 1.1 # create the FORTRAN comparison code
1342 jmc 1.178 if test "x$CLEANUP" = xt -o -x tr_cmpnum ; then
1343 jmc 1.133 echo "skipping comparison code build"
1344     else
1345     createcodelet
1346     fi
1347 edhill 1.1
1348 jmc 1.112 # build the mpack utility (if ADDRESSES = NONE, do it to test the build)
1349 jmc 1.192 if test "x$ADDRESSES" = x -o "x$SENDCMD" != x ; then
1350 edhill 1.32 echo "skipping mpack build"
1351     else
1352 edhill 1.31 build_mpack
1353 jmc 1.192 if test "x$HAVE_MPACK" = xt ; then SENDCMD=$MPACK ; fi
1354 edhill 1.31 fi
1355 edhill 1.1
1356     # Create a uniquely named directory to store results
1357 jmc 1.110 CMDLINE=$0
1358 jmc 1.118 for xx in "$@" ; do nw=`echo $xx | wc -w`
1359 jmc 1.180 if test $nw = '1' ; then CMDLINE="$CMDLINE $xx" ; else
1360     nb=`echo $xx | grep -c '='`
1361     if test $nb = 0 ; then CMDLINE="$CMDLINE '$xx'"
1362     else yy=`echo "$xx'" | sed "s/=/='/"` ;
1363     CMDLINE="$CMDLINE $yy" ; fi
1364     fi
1365 jmc 1.118 done
1366     #for xx in "$@" ; do CMDLINE="$CMDLINE '$xx'" ; done
1367 edhill 1.1 MACH=`hostname`
1368 edhill 1.2 UNAMEA=`uname -a`
1369 edhill 1.1 DATE=`date +%Y%m%d`
1370 edhill 1.25 BASE="tr_"$MACH"_"$DATE"_"
1371 jmc 1.70 if test "x$OUTDIR" != x ; then
1372     BASE="tr_"$OUTDIR"_"$DATE"_"
1373 jmc 1.121 else
1374     short_name=`hostname | sed 's/\..*$//'`
1375     BASE="tr_"$short_name"_"$DATE"_"
1376 jmc 1.70 fi
1377 edhill 1.1 DNUM=0
1378     DRESULTS="$BASE$DNUM"
1379     while test -e $DRESULTS ; do
1380     DNUM=$(( $DNUM + 1 ))
1381     DRESULTS="$BASE$DNUM"
1382     done
1383     mkdir $DRESULTS
1384     RETVAL=$?
1385     if test "x$RETVAL" != x0 ; then
1386 edhill 1.20 echo "ERROR: Can't create results directory \"./$DRESULTS\""
1387 edhill 1.1 exit 1
1388     fi
1389     SUMMARY="$DRESULTS/summary.txt"
1390 edhill 1.16 start_date=`date`
1391 edhill 1.17 echo $start_date > $SUMMARY
1392 jmc 1.110 echo 'run:' $CMDLINE >> $SUMMARY
1393     echo 'on :' $UNAMEA >> $SUMMARY
1394 edhill 1.1
1395 edhill 1.11 of_path=
1396 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
1397     if test -r $OPTFILE ; then
1398 edhill 1.11 # get the path
1399     path=${OPTFILE%/*}
1400     if test "x$path" = x ; then
1401     of_path=`pwd`
1402     else
1403     of_path=`( cd $path > /dev/null 2>&1 ; pwd )`
1404     fi
1405     file=${OPTFILE##*/}
1406     OPTFILE=$of_path/$file
1407 edhill 1.21 cp $OPTFILE $DRESULTS
1408     echo >> $SUMMARY
1409     echo " OPTFILE=$OPTFILE" >> $SUMMARY
1410 edhill 1.11 else
1411 jmc 1.179 echo | tee -a $SUMMARY
1412     echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee -a $SUMMARY
1413 edhill 1.21 exit 1
1414 edhill 1.10 fi
1415 edhill 1.21 else
1416     echo >> $SUMMARY
1417 jmc 1.152 echo "No \"OPTFILE\" was specified ; genmake2 found and uses:" >> $SUMMARY
1418     #-note: to be filled later after 1rst run
1419 edhill 1.10 fi
1420     echo
1421     echo >> $SUMMARY
1422 jmc 1.175 if test $KIND = 0 ; then
1423     line_0=`printf '%s %2i' 'default' $MATCH_CRIT`
1424 jmc 1.94 line_0="$line_0 ----T----- ----S----- ----U----- ----V-----"
1425 edhill 1.49 line_1="G D M c m s m s m s m s"
1426 jmc 1.167 line_2="e p a R g m m e . m m e . m m e . m m e ."
1427     line_3="n n k u 2 i a a d i a a d i a a d i a a d"
1428 edhill 1.49 line_4="2 d e n d n x n . n x n . n x n . n x n ."
1429 edhill 1.50 for ii in $PTRACERS_NUM ; do
1430 edhill 1.49 line_0="$line_0 --PTR 0"$ii"--"
1431     line_1="$line_1 m s"
1432     line_2="$line_2 m m e ."
1433     line_3="$line_3 i a a d"
1434     line_4="$line_4 n x n ."
1435     done
1436 jmc 1.175 else
1437     line_0=`printf '%s %2i' 'default ' $MATCH_CRIT`
1438     if test $KIND = 1 ; then
1439 jmc 1.181 #echo "TANGLIN=true" >> $SUMMARY
1440     echo "TangLin generated by TAF" >> $SUMMARY
1441     elif test $KIND = 3 ; then
1442     echo "TangLin generated by OpenAD" >> $SUMMARY
1443     elif test $KIND = 2 ; then
1444     #echo "ADJOINT=true" >> $SUMMARY
1445     echo "Adjoint generated by TAF" >> $SUMMARY
1446     else
1447     echo "Adjoint generated by OpenAD" >> $SUMMARY
1448     fi
1449     if test $KIND = 1 -o $KIND = 3 ; then
1450 jmc 1.175 line_1="G D M C T F"
1451     line_2="e p a R o L D"
1452     else
1453     line_1="G D M C A F"
1454     line_2="e p a R o d D"
1455     fi
1456     line_3="n n k u s G G"
1457     line_4="2 d e n t r r"
1458     echo >> $SUMMARY
1459     fi
1460 jmc 1.178 if test "x$CLEANUP" != xt ; then
1461 edhill 1.49 echo "$line_0" | tee -a $SUMMARY
1462     echo "$line_1" | tee -a $SUMMARY
1463     echo "$line_2" | tee -a $SUMMARY
1464     echo "$line_3" | tee -a $SUMMARY
1465     echo "$line_4" | tee -a $SUMMARY
1466 jmc 1.175 echo "" | tee -a $SUMMARY
1467 jmc 1.178 fi
1468 jmc 1.139 echo "-------------------------------------------------------------------------------"
1469 edhill 1.1
1470 edhill 1.10 # ...and each test directory...
1471     for dir in $TESTDIRS ; do
1472 jmc 1.135
1473 jmc 1.106 # set builddir & rundir:
1474     builddir="build"
1475     if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1476     rundir="run"
1477 jmc 1.143 pfxdir="tr_$rundir"
1478 jmc 1.106 if test ! -d $dir/$rundir ; then
1479     rundir=$builddir
1480     fi
1481     CODE_DIR=$dir/$code_dir
1482     BUILD_DIR=$dir/$builddir
1483    
1484 edhill 1.10 # Cleanup only!
1485     if test "x$CLEANUP" = xt ; then
1486 jmc 1.127 echo -n ' --- dir:' $BUILD_DIR ': '
1487     makeclean $BUILD_DIR
1488 jmc 1.145 ( cd $BUILD_DIR
1489     rm -f $EXECUTABLE *.bak
1490 jmc 1.146 rm -f genmake_state genmake_*optfile genmake.log
1491 jmc 1.154 rm -f SIZE.h.mpi genmake.tr_log make.tr_log
1492 jmc 1.190 rm -rf mpi_headers
1493 jmc 1.145 )
1494 jmc 1.106 if test -d $dir/$rundir/CVS ; then
1495 jmc 1.175 echo -n ' --- dir:' $dir/$rundir ': '
1496 jmc 1.106 run_clean $dir/$rundir
1497 edhill 1.10 fi
1498 jmc 1.143 trdir=`( cd $dir ; find . -type d -name "$pfxdir.*" -print | sed 's/^.\///')`
1499 jmc 1.127 ttd=`echo $trdir | wc -w`
1500     if test $ttd != 0 ; then
1501     echo ' --- rm dir:' $trdir
1502     ( cd $dir ; rm -rf $trdir )
1503     fi
1504 edhill 1.10 continue
1505 edhill 1.1 fi
1506 edhill 1.3
1507 jmc 1.135 # Verify that the testdir exists and contains previous
1508 edhill 1.10 # results in the correct location--or skip this directory!
1509 jmc 1.104 fout=$dir"/results/"$ref_outp
1510 jmc 1.175 #if test ! -r $fout ; then
1511     if test ! -r $fout -a ! -r ${fout}.gz ; then
1512 edhill 1.24 echo "can't read \"$fout\" -- skipping $dir"
1513 edhill 1.10 continue
1514     fi
1515 edhill 1.7
1516 jmc 1.117 # Check for specific files for particular type of run
1517 edhill 1.49
1518 jmc 1.161 if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" != "x0" ; then
1519     echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1520     continue
1521     fi
1522     if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1523     echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1524     continue
1525     fi
1526    
1527 jmc 1.154 if test "x$MPI" != "x0" ; then
1528 jmc 1.173 ntx=1 ; nty=1
1529 jmc 1.161 if test "x$MULTI_THREAD" = "xt" ; then
1530 jmc 1.174 ff=$dir"/input/eedata.mth"
1531     ntx=`grep "^ *nTx *=" $ff | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
1532     nty=`grep "^ *nTy *=" $ff | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
1533     if test "x$ntx" = x ; then ntx=1 ; fi
1534     if test "x$nty" = x ; then nty=1 ; fi
1535 jmc 1.161 fi
1536     #- create new SIZE.h with no more than '$MPI' Procs
1537 jmc 1.173 mk_mpi_size $CODE_DIR"/SIZE.h_mpi" $BUILD_DIR"/tr_size.mpi" $MPI $ntx $nty
1538 jmc 1.161 LOC_NPROC=$?
1539     ( cd $BUILD_DIR
1540     if test -r SIZE.h.mpi ; then
1541     cmp tr_size.mpi SIZE.h.mpi > /dev/null 2>&1 ; RETVAL=$?
1542     else RETVAL=1
1543     fi
1544     if test "x$RETVAL" = x0 ; then
1545     rm -f tr_size.mpi
1546     else
1547     rm -f SIZE.h.mpi ; mv tr_size.mpi SIZE.h.mpi
1548     fi
1549     )
1550 jmc 1.156 if test "x$MPI_MFILE" != x ; then
1551     #- create new MPI machine-file with the right number of Procs
1552     rm -f $LOC_MFILE
1553     cat $MPI_MFILE | sort | uniq | head -$LOC_NPROC > $LOC_MFILE
1554     nl=`wc -l $LOC_MFILE | awk '{print $1}'`
1555     if [ $nl -lt $LOC_NPROC ] ; then
1556     rm -f $LOC_MFILE
1557     cat $MPI_MFILE | head -$LOC_NPROC > $LOC_MFILE
1558     #sed -n "1,$LOC_NPROC p" $MPI_MFILE > $LOC_MFILE
1559     fi
1560     if [ $verbose -gt 1 ]; then
1561     nl=`wc -l $LOC_MFILE | awk '{print $1}'`
1562     echo " new LOC_MFILE=$LOC_MFILE : $nl procs for LOC_NPROC=$LOC_NPROC"
1563     fi
1564     fi
1565 jmc 1.161 if test "x$MULTI_THREAD" = "xt" ; then
1566     retv=`check_eedata $dir"/input/eedata.mth" $BUILD_DIR"/SIZE.h.mpi"`
1567     if test $retv != 0 ; then
1568     echo "input/eedata.mth tiling misfit -- skipping $dir"
1569     continue
1570     fi
1571 jmc 1.154 fi
1572 jmc 1.123 fi
1573 jmc 1.83
1574     # Check whether there are "extra runs" for this testdir
1575     extra_runs=
1576 jmc 1.133 if test "x$NORUN" = xf ; then
1577 jmc 1.183 ex_run_dirs=`( cd $dir ; ls -d $inputdir.* 2> /dev/null )`
1578 jmc 1.133 fi
1579 jmc 1.108 #echo "ex_run_dirs='$ex_run_dirs'"
1580     for exd in $ex_run_dirs ; do
1581     name=`echo $exd | sed -e "s/$inputdir\.//"`
1582     refExOut=`echo $ref_outp | sed "s/\./.${name}./"`
1583     outf="$dir/results/$refExOut"
1584 jmc 1.175 if test -r $outf -o -r ${outf}.gz ; then
1585 jmc 1.135 if test "x$MULTI_THREAD" = "xt" ; then
1586 jmc 1.123 if test -r $dir"/"$exd"/eedata.mth" ; then
1587 jmc 1.154 if test "x$MPI" = "x0" ; then
1588     extra_runs="$extra_runs $name"
1589     else
1590 jmc 1.161 retv=`check_eedata $dir"/"$exd"/eedata.mth" $BUILD_DIR"/SIZE.h.mpi"`
1591 jmc 1.123 if test $retv = 0 ; then
1592 jmc 1.83 extra_runs="$extra_runs $name"
1593 jmc 1.123 else
1594     echo $exd"/eedata.mth tiling misfit -- skipping $dir"
1595 jmc 1.83 fi
1596 jmc 1.123 fi
1597     #else echo $dir"/"$exd"/eedata.mth: not found"
1598 jmc 1.83 fi
1599 jmc 1.123 else
1600     extra_runs="$extra_runs $name"
1601     fi
1602 jmc 1.108 fi
1603     done
1604 edhill 1.28
1605     echo
1606 jmc 1.135 if test "x$extra_runs" = "x" ; then
1607 jmc 1.175 echo "Experiment: $dir"
1608 jmc 1.83 else
1609 jmc 1.175 echo "Experiment: $dir ; extra_runs=$extra_runs"
1610 jmc 1.83 fi
1611 edhill 1.28 echo
1612     unset genmake makedepend make run
1613 jmc 1.94 results=$EMPTY_RESULTS
1614 edhill 1.10
1615 jmc 1.158 # Create an output dir & summary.txt file for each tested experiment (tdir)
1616 jmc 1.138 locDIR=$DRESULTS"/"$dir
1617     mkdir $locDIR
1618 jmc 1.158 #- report to this experiment local summary file ---
1619     echo "DATE='$DATE' ; tdir='$dir'" > $locDIR"/summary.txt"
1620     echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1621     echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1622 jmc 1.138 CDIR=`pwd`"/$locDIR"
1623 jmc 1.135
1624 jmc 1.133 if test "x$NORUN" = xt ; then
1625     run=N
1626     genmakemodel $dir/$builddir && genmake=Y \
1627     && makeclean $dir/$builddir \
1628 jmc 1.175 && symlink_mpifiles $dir $code_dir $builddir \
1629 jmc 1.133 && makedependmodel $dir/$builddir && makedepend=Y \
1630     && makemodel $dir/$builddir && make=Y
1631 edhill 1.10 else
1632 edhill 1.1 genmakemodel $dir/$builddir && genmake=Y \
1633     && makeclean $dir/$builddir \
1634 jmc 1.175 && symlink_mpifiles $dir $code_dir $builddir \
1635 edhill 1.1 && makedependmodel $dir/$builddir && makedepend=Y \
1636     && makemodel $dir/$builddir && make=Y \
1637 jmc 1.139 && run_clean $dir/$rundir \
1638 jmc 1.140 && linkdata $dir/$rundir $inputdir \
1639 edhill 1.12 && runmodel $dir/$rundir && run=Y \
1640 jmc 1.99 && results=`testoutput_run $dir $rundir $ref_outp`
1641 edhill 1.10 fi
1642 jmc 1.139 #echo "results='$results'"
1643 jmc 1.135
1644 edhill 1.24 fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1645 jmc 1.139 echo 1>&2
1646 jmc 1.175 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</' >> $SUMMARY
1647 jmc 1.138 echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1648 edhill 1.34
1649     for ex in $extra_runs ; do
1650 jmc 1.73 unset run
1651 jmc 1.175 results=$EMPTY_RESULTS
1652 jmc 1.106 # reference output file
1653     refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1654 jmc 1.158 # Create an output dir & summary.txt file for each extra run (tdir.ex)
1655 jmc 1.138 locDIR=$DRESULTS"/"$dir"."$ex
1656     mkdir $locDIR
1657 jmc 1.158 #- report to this experiment local summary file ---
1658     echo "DATE='$DATE' ; tdir='$dir.$ex'" > $locDIR"/summary.txt"
1659     #echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1660     #echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1661 jmc 1.138 CDIR=`pwd`"/$locDIR"
1662 jmc 1.143 test ! -e "$dir/$pfxdir.$ex" && mkdir "$dir/$pfxdir.$ex"
1663     run_clean $dir/$pfxdir.$ex
1664     linkdata $dir/$pfxdir.$ex $inputdir.$ex $inputdir
1665     runmodel $dir/$pfxdir.$ex && run=Y \
1666     && results=`testoutput_run $dir $pfxdir.$ex $refExOut`
1667 jmc 1.186 fres=`formatresults $dir.$ex ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1668 jmc 1.139 echo 1>&2
1669 jmc 1.100 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</' >> $SUMMARY
1670 jmc 1.138 echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1671 jmc 1.156 if test "x$POSTCLEAN" = x2 ; then
1672 jmc 1.143 run_clean $dir/$pfxdir.$ex
1673 jmc 1.83 fi
1674 edhill 1.34 done
1675 edhill 1.68
1676 jmc 1.176 if test ! -f $DRESULTS"/"genmake_state ; then
1677 jmc 1.137 if test -f $dir/$builddir/Makefile ; then
1678     mkOpt=`grep '^# OPTFILE=' $dir/$builddir/Makefile 2>/dev/null | head -1 | sed 's/^# //'`
1679     echo "from '$dir/$builddir/Makefile', extract:" > $DRESULTS/genmake_state
1680     sed -n '/^# executed by:/,+1 p' $dir/$builddir/Makefile >> $DRESULTS/genmake_state
1681 jmc 1.151 echo " $mkOpt" >> $DRESULTS/genmake_state
1682 jmc 1.152 if test "x$OPTFILE" = xNONE ; then
1683     eval $mkOpt
1684     sed "/^No \"OPTFILE\" was specified ; genmake2/a\ OPTFILE=${OPTFILE}"\
1685 jmc 1.176 $SUMMARY > tmp.tr_log
1686 jmc 1.152 RETVAL=$?
1687 jmc 1.192 if test "x$RETVAL" = x0 ; then
1688     cp -f tmp.tr_log $SUMMARY
1689 jmc 1.152 fi
1690 jmc 1.192 rm -f tmp.tr_log
1691 jmc 1.152 fi
1692 jmc 1.150 gmkLog=$dir/$builddir/genmake.log
1693 jmc 1.176 if test -r $gmkLog ; then
1694     grep '^Get compiler version using:' $gmkLog > /dev/null 2>&1
1695     RETVAL=$?
1696     if test "x$RETVAL" = x0 ; then
1697     echo -n "from '$gmkLog', " >> $DRESULTS/genmake_state
1698     echo "extract compiler version:" >> $DRESULTS/genmake_state
1699     sed -n '/Get compiler version/,/<-- compiler version/p' \
1700     $gmkLog | grep -v '^... compiler version ' > tmp.tr_log
1701     sed -n '1p' tmp.tr_log >> $DRESULTS/genmake_state
1702     sed -n '2,/^$/p' tmp.tr_log | sed '/^$/d' | sed 's/^./ &/' \
1703     >> $DRESULTS/genmake_state
1704     rm -f tmp.tr_log
1705     fi
1706     echo -n "from '$gmkLog', " >> $DRESULTS/genmake_state
1707     echo "get NETCDF & LAPACK settings:" >> $DRESULTS/genmake_state
1708     sed -n '/set HAVE_NETCDF=/p' $gmkLog >> $DRESULTS/genmake_state
1709     sed -n '/set HAVE_LAPACK=/p' $gmkLog >> $DRESULTS/genmake_state
1710 jmc 1.150 fi
1711 jmc 1.137 fi
1712     fi
1713 jmc 1.83 #postclean $dir/$builddir
1714 jmc 1.156 if test "x$POSTCLEAN" = x2 ; then
1715 jmc 1.175 makeclean $dir/$builddir \
1716     && run_clean $dir/$rundir
1717 jmc 1.83 fi
1718 jmc 1.156 if test "x$MPI" != x0 -a "x$MPI_MFILE" != x ; then rm -f $LOC_MFILE ; fi
1719 jmc 1.135
1720 edhill 1.10 echo "-------------------------------------------------------------------------------"
1721 jmc 1.135
1722 edhill 1.1 done
1723    
1724 edhill 1.34 printf "Start time: " >> $SUMMARY
1725 jmc 1.114 echo "$start_date" >> $SUMMARY
1726 edhill 1.34 printf "End time: " >> $SUMMARY
1727 edhill 1.13 date >> $SUMMARY
1728 edhill 1.20
1729     # If addresses were supplied and mpack built successfully, then try
1730     # to send email using mpack.
1731     if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1732     echo "No results email was sent."
1733     else
1734 jmc 1.192 if test "x$SENDCMD" != x ; then
1735     if [ $verbose -gt 1 ]; then
1736     echo " run: $SENDCMD -s MITgcm-test -m 3555000 ${SAVDIR}/${DRESULTS}".tar.gz" $ADDRESSES"
1737     fi
1738     tar -cf ${SAVDIR}/${DRESULTS}".tar" $DRESULTS > /dev/null 2>&1 \
1739     && gzip ${SAVDIR}/${DRESULTS}".tar" \
1740     && $SENDCMD -s MITgcm-test -m 3555000 ${SAVDIR}/${DRESULTS}".tar.gz" $ADDRESSES
1741 edhill 1.20 RETVAL=$?
1742     if test "x$RETVAL" != x0 ; then
1743     echo
1744     echo "Warning: The tar, gzip, & mpack step failed. Please send email"
1745     echo " to <MITgcm-support@mitgcm.org> for help. You may copy the "
1746     echo " summary of results from the directory \"$DRESULTS\"."
1747     echo
1748     else
1749     echo
1750     echo "An email containing results was sent to the following addresses:"
1751     echo " \"$ADDRESSES\""
1752     echo
1753 jmc 1.192 test -f ${SAVDIR}/${DRESULTS}".tar" && rm -f ${SAVDIR}/${DRESULTS}".tar"
1754     test -f ${SAVDIR}/${DRESULTS}".tar.gz" && rm -f ${SAVDIR}/${DRESULTS}".tar.gz"
1755 edhill 1.20 fi
1756     fi
1757     fi
1758 edhill 1.13
1759 jmc 1.133 if test "x$QUICK" = xf -a "x$NORUN" = xf ; then
1760     rm -f tr_cmpnum.c tr_cmpnum
1761     fi
1762 edhill 1.1
1763 edhill 1.12 if test "x$CLEANUP" != xt ; then
1764 jmc 1.102 cat $SUMMARY | sed 's/ \. \. \. \. \. \. \. \. \. \. \. \. //'
1765 edhill 1.25 if test -e tr_out.txt ; then
1766 jmc 1.175 mv tr_out.txt tr_out.txt.old
1767 edhill 1.14 fi
1768 jmc 1.103 cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1769 edhill 1.12 fi
1770 edhill 1.1
1771 edhill 1.40 if test "x$DELDIR" = xt ; then
1772     rm -rf $DRESULTS
1773     fi
1774 jmc 1.178 echo "======== End of testreport execution ========"

  ViewVC Help
Powered by ViewVC 1.1.22