/[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.212 - (hide annotations) (download)
Sun Mar 12 16:34:11 2017 UTC (7 years ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, HEAD
Changes since 1.211: +6 -4 lines
alternative way (instead of mpack) to send testreport results.

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

  ViewVC Help
Powered by ViewVC 1.1.22