/[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.192 - (hide annotations) (download)
Sun Aug 18 19:53:47 2013 UTC (10 years, 7 months ago) by jmc
Branch: MAIN
Changes since 1.191: +76 -50 lines
- pre-set temp-file names (enable to move them to /tmp ; but not yet active)
- add more options (2 new arguments) for sending results (output tar file)
  by mpack (enable to ssh to head node if compute node do not sendmail)

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

  ViewVC Help
Powered by ViewVC 1.1.22