/[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.199 - (hide annotations) (download)
Wed Feb 18 16:11:31 2015 UTC (9 years, 2 months ago) by mlosch
Branch: MAIN
Changes since 1.198: +16 -6 lines
  - fix two non-POSIX sed statements so that there are no error messages
    on Mac OS X
  - replace hostname -s with hostname | sed 's/\..*$//'

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

  ViewVC Help
Powered by ViewVC 1.1.22