/[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.196 - (hide annotations) (download)
Sat Jan 25 18:29:03 2014 UTC (10 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64x, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v
Changes since 1.195: +4 -6 lines
OpenAD test: add "-oad" option to genmake2 command and use default
 AD optfile (which has been changed accordingly in genmake2).

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

  ViewVC Help
Powered by ViewVC 1.1.22