/[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.202 - (hide annotations) (download)
Tue Mar 3 15:55:51 2015 UTC (9 years, 1 month ago) by mlosch
Branch: MAIN
CVS Tags: checkpoint65k
Changes since 1.201: +15 -8 lines
replace "cat -n" by "nl" (two occurrences)
replace "grep -A3" by an "sed" command (one occurrence)

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

  ViewVC Help
Powered by ViewVC 1.1.22