/[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.208 - (hide annotations) (download)
Fri May 20 19:34:38 2016 UTC (7 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint65x, checkpoint65y
Changes since 1.207: +18 -11 lines
allow to get up to 9 ptracers stats in summary

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

  ViewVC Help
Powered by ViewVC 1.1.22