/[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.209 - (hide annotations) (download)
Wed Aug 3 19:42:31 2016 UTC (7 years, 7 months ago) by jmc
Branch: MAIN
Changes since 1.208: +4 -4 lines
minor adjustment to printed msg

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