/[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.200 - (hide annotations) (download)
Sun Feb 22 22:48:18 2015 UTC (9 years, 1 month ago) by jmc
Branch: MAIN
Changes since 1.199: +25 -23 lines
- fix typo in "-pcls" option (from the 1rst check-in, 8 years ago)
- put temp files in /tmp (instead of in local dir)
- add option "-ncad" to use genmake2 new option "-nocat4ad"
- allow to use "-j" option (for multi-procs make) for AD, OAD and TLM
  (previously only active in FWD testreport).

1 edhill 1.19 #! /usr/bin/env bash
2 edhill 1.1 #
3 jmc 1.200 # $Header: /u/gcmpack/MITgcm/verification/testreport,v 1.199 2015/02/18 16:11:31 mlosch 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 jmc 1.192 grep "$2" $1/$4/$OUTPUTFILE | sed 's/.*=//' | cat -n > ${TMP}a.txt
135     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 jmc 1.192 grep "$2" $1/$5 | sed 's/.*=//' | cat -n > ${TMP}b.txt
150     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     COMMAND=`echo $COMMAND | sed "s/ TR_NPROC / $LOC_NPROC /"`
780     if test "x$MPI_MFILE" != x ; then
781     COMMAND=`echo $COMMAND | sed "s/ TR_MFILE / ..\/..\/$LOC_MFILE /"`
782     fi
783     #echo " COMMAND='$COMMAND'"
784     fi
785 jmc 1.134 if test -L $EXECUTABLE ; then
786     if test -x "../"$builddir"/"$EXECUTABLE ; then
787 jmc 1.154 cmp $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
788     outD=$? ; if test "x$outD" != x0 ; then rm -f $EXECUTABLE ; fi
789 jmc 1.134 else rm -f $EXECUTABLE
790     fi
791 jmc 1.106 fi
792 jmc 1.175 if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
793 jmc 1.119 echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_tmp
794 jmc 1.83 ln -sf "../"$builddir"/"$EXECUTABLE .
795     fi
796 jmc 1.175 if test ! -x $EXECUTABLE ; then
797 jmc 1.156 rm -f $RUNLOG ; touch $RUNLOG
798     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
799     echo " no executable:" $EXECUTABLE >> $RUNLOG
800     RETVAL=8
801     ENDVAL=-1
802 jmc 1.75 else
803 jmc 1.175 if test ! -f $OUTPUTFILE -o $OUTPUTFILE -ot $EXECUTABLE ; then
804     # output do not exist or is older than executable:
805 jmc 1.162 rm -f $OUTPUTFILE $RUNLOG ; touch $RUNLOG
806 jmc 1.156 if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
807 jmc 1.188 #- Divided Adjoint Run:
808     # get the number of additional runs (add_DIVA_runs) from file "run_ADM_DIVA"
809     if test $KIND = 2 -a -f run_ADM_DIVA ; then
810     adm_diva_nb=`sed -n '/^ *add_DIVA_runs\>.*=/p' run_ADM_DIVA | sed 's/ //g'`
811     echo " Divided Adjoint Run: $adm_diva_nb" >> $RUNLOG
812     eval "let $adm_diva_nb"
813     if [ $add_DIVA_runs -ge 1 ] ; then
814     rm -f costf* divided.ctrl snapshot*
815     echo -n "(add_DIVA_runs=$add_DIVA_runs) ... "
816     for ii in `seq 1 $add_DIVA_runs` ; do
817     ( eval $COMMAND ) >> $RUNLOG 2>&1
818     echo " additional DIVA run # $ii : done" >> $RUNLOG
819     mv -f $OUTPUTFILE ${OUTPUTFILE}.diva_${ii}
820     done
821     fi
822     fi
823     #- special DIVA processing ends here
824 jmc 1.156 ( eval $COMMAND ) >> $RUNLOG 2>&1
825     RETVAL=$?
826     ENDVAL=`tail $OUTPUTFILE | grep -c 'PROGRAM MAIN: Execution ended Normally'`
827     if [ $POSTCLEAN -eq 1 -a $ENDVAL -gt 0 ] ; then
828     find . -name "*.meta" -exec rm {} \;
829     find . -name "*.data" -exec rm {} \;
830     rm -rf mnc_test_*
831 jmc 1.83 fi
832 jmc 1.156 else
833     RETVAL=0
834 jmc 1.153 ENDVAL=`tail $OUTPUTFILE | grep -c 'PROGRAM MAIN: Execution ended Normally'`
835 jmc 1.156 touch $RUNLOG
836     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
837 jmc 1.175 echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
838 jmc 1.156 fi
839 jmc 1.75 fi
840 jmc 1.119 rm -f run.log_tmp
841 jmc 1.177 #- in all cases where OutputFile exists, report SIZE and time
842 jmc 1.158 if test -f $OUTPUTFILE ; then
843     grep '(PID\.TID 0000\.0001) n.. =' $OUTPUTFILE \
844 jmc 1.177 | sed 's/(PID.TID 0000.0001) //' >> $CDIR"/summary.txt"
845     grep -A3 'Seconds in section "ALL' $OUTPUTFILE \
846     | sed 's/(PID.TID 0000.0001) //' >> $CDIR"/summary.txt"
847 jmc 1.158 fi
848     if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
849 jmc 1.88 if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
850 jmc 1.139 echo successful
851     printf '=> output from running in %s :\n' $1 1>&2
852     tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
853 edhill 1.6 return 0
854 jmc 1.132 elif [ $RETVAL -ne 0 -a $ENDVAL -gt 0 ] ; then
855     #-- for some weird cases (run is finihed but with error code)
856 jmc 1.139 echo 'finished with error (run:' $RETVAL ' end:' $ENDVAL ')'
857     printf '=> output from running in %s :\n' $1 1>&2
858     tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
859 jmc 1.132 return 0
860 edhill 1.6 else
861 jmc 1.139 echo 'failed (run:' $RETVAL ' end:' $ENDVAL ')'
862     printf '=> output from running in %s :\n' $1 1>&2
863     tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
864 jmc 1.119 cp $RUNLOG $CDIR"/"$RUNLOG
865 edhill 1.6 return 1
866 edhill 1.1 fi
867     )
868     }
869    
870     createcodelet()
871     {
872     # create codelet for comparing model output
873    
874 jmc 1.112 printf "creating the comparison code (using CC=$CC)... "
875 jmc 1.91 cat > tr_cmpnum.c <<EOF
876 edhill 1.22 #include <stdio.h>
877     #include <math.h>
878     int main( int argc, char** argv ) {
879 jmc 1.91 int linnum,cmplin,best,lncnt;
880 edhill 1.52 double a,b,abave,relerr;
881 jmc 1.57 best = -22;
882 adcroft 1.33 lncnt = 0;
883 jmc 1.96 while( 1 & ( (lncnt+=1) < 999 ) ) {
884 edhill 1.22 scanf("%d", &linnum);
885     if (linnum == -1) break;
886     scanf("%lf", &a); scanf("%lf", &b);
887 edhill 1.52 abave = 0.5*(fabs(a)+fabs(b));
888 jmc 1.91 if ( abave == abave ) {
889     if (abave > 0.0) {
890     relerr=fabs(a-b)/abave;
891     if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
892     else { cmplin = -16 ; }
893     best = (best > cmplin) ? best : cmplin; }
894     else { cmplin = -22 ; }
895     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
896     }
897     else {
898     /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
899     break; }
900 edhill 1.22 }
901 adcroft 1.33 if (lncnt == 999) best=-29;
902 jmc 1.91 if (linnum != -1) best=-99;
903 edhill 1.22 printf("%d\n", -best);
904     return 0;
905     }
906     EOF
907 jmc 1.91 $CC -o tr_cmpnum tr_cmpnum.c -lm
908 edhill 1.1
909 jmc 1.91 if [ -x ./tr_cmpnum ]; then
910 edhill 1.1 echo "OK"
911     return 0
912     else
913     echo
914 jmc 1.135 echo "ERROR: failed to compile comparison code -- please specify"
915 edhill 1.58 echo " a C compiler using the CC environment variable."
916 edhill 1.1 exit 1
917     fi
918     }
919    
920     formatresults()
921     {
922     # formatresults expt genmake depend make run results*
923    
924     nm=$1
925     printf '%s %s %s %s' $2 $3 $4 $5
926     shift; shift; shift; shift; shift;
927 jmc 1.94 listPrt=$@
928     listRes=`echo $listPrt | sed 's/>//' | sed 's/<//'`
929     xx=`echo $listPrt | sed 's/.*>//' | sed 's/<.*//' | awk '{print $1}'`
930 jmc 1.97 printf '%3s' $listPrt
931 jmc 1.98 # line below does not work on hp-ux_ia64 : do those substitutions later on
932 jmc 1.95 # printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</'
933 jmc 1.135
934 jmc 1.94 if [ $xx = '..' ]; then
935     printf ' N/O '
936     elif [ $xx = '--' ]; then
937     printf ' N/O '
938     elif [ $xx = 99 ]; then
939 edhill 1.1 printf ' N/O '
940     else
941 jmc 1.94 if [ $xx -ge $MATCH_CRIT ]; then
942 edhill 1.1 printf ' pass'
943     else
944     printf ' FAIL'
945     fi
946     fi
947     printf ' %s' $nm
948 jmc 1.186 if test $KIND = 2 ; then
949     #-- apppend taf repport summary:
950     tafrep=`grep -c '^ TAF reports ' $CDIR/summary.txt`
951     if test $tafrep = 1 ; then
952     grep '^ TAF reports ' $CDIR/summary.txt | awk '{printf " (e=%i, w=%i)",$3,$6}'
953     fi
954     fi
955 edhill 1.1 printf '\n'
956 jmc 1.135
957 edhill 1.1 }
958    
959     scandirs()
960     {
961 jmc 1.81 if [ $# -eq 1 ]; then
962     for arg in * ; do
963 jmc 1.175 #test -f $arg/$1 && echo $arg
964     test -f $arg/$1 -o -f $arg/$1.gz && echo $arg
965 jmc 1.81 done
966 edhill 1.1 else
967 jmc 1.81 echo $*
968 edhill 1.1 fi
969     }
970    
971    
972 jmc 1.123 check_eedata()
973     {
974 jmc 1.161 # check_eedata eedata size.h
975 jmc 1.123 if [ $# -eq 2 ] ; then
976 jmc 1.161 if test -f $1 -a -f $2 ; then
977     nx=`grep "^ *nTx *=" $1 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
978     sx=`grep "^ & *nSx *=" $2 | sed "s/^ & *nSx *=//" | sed 's/, *$//'`
979 jmc 1.123 if test "x$nx" = x ; then
980     rx=10
981     else
982     rx=`expr $sx % $nx`
983     fi
984 jmc 1.161 ny=`grep "^ *nTy *=" $1 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
985     sy=`grep "^ & *nSy *=" $2 | sed "s/^ & *nSy *=//" | sed 's/, *$//'`
986 jmc 1.123 if test "x$ny" = x ; then
987     ry=20
988     else
989     ry=`expr $sy % $ny`
990     fi
991     echo `expr $rx + $ry`
992 jmc 1.161 else
993     echo '-1'
994     fi
995     elif [ $# -eq 1 ] ; then
996     if test -f $1 ; then
997     nx=`grep "^ *nTx *=" $1 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
998     if test "x$nx" = x ; then nx=1 ; fi
999     ny=`grep "^ *nTy *=" $1 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
1000     if test "x$ny" = x ; then ny=1 ; fi
1001     #echo $nx $ny
1002     echo $nx
1003     else
1004 jmc 1.123 echo '-1'
1005 jmc 1.161 fi
1006 jmc 1.123 else
1007     echo '-2'
1008     fi
1009    
1010     }
1011    
1012 edhill 1.1 ###############################################################################
1013    
1014    
1015     # Default properties
1016     debug=0
1017     verbose=1
1018 jmc 1.163 NBLINES_MKLOG=16000
1019 edhill 1.10
1020 jmc 1.164 OptLev=1
1021 jmc 1.109 GSL=f
1022 edhill 1.10
1023     CLEANUP=f
1024 jmc 1.133 NORUN=f
1025 edhill 1.10 QUICK=f
1026 jmc 1.136 NOMAKE=f
1027 edhill 1.10 NOGENMAKE=f
1028     NOCLEAN=f
1029     NODEPEND=f
1030 jmc 1.156 POSTCLEAN=0
1031 edhill 1.1
1032 edhill 1.4 BASH=
1033 edhill 1.10 OPTFILE=NONE
1034     ADDRESSES=
1035 edhill 1.1 TESTDIRS=
1036 jmc 1.89 SKIPDIRS=
1037 edhill 1.1 MPACKDIR="../tools/mpack-1.6"
1038 edhill 1.20 HAVE_MPACK=
1039 jmc 1.113 MPACK=
1040 jmc 1.192 SENDCMD=
1041     SAVDIR='.'
1042 edhill 1.24 COMMAND=
1043 jmc 1.141 MKDEPEND=
1044 edhill 1.59 if test "x$MAKE" = x ; then
1045     MAKE=make
1046     fi
1047 jmc 1.200 MAKE_CMD=
1048 edhill 1.59 if test "x$CC" = x ; then
1049     CC=cc
1050     fi
1051 edhill 1.43 JOBS=
1052 jmc 1.165 TARG=
1053 jmc 1.154 MPI=0
1054 jmc 1.156 MPI_MFILE=
1055 jmc 1.83 MULTI_THREAD=f
1056 jmc 1.70 OUTDIR=
1057 edhill 1.40 DELDIR=
1058 jmc 1.135 USE_R4=
1059 jmc 1.165 EXTRFLG=
1060 jmc 1.200 NOCATAD=
1061 edhill 1.1
1062 jmc 1.175 #- type of testing (KIND):
1063     # KIND=0 : forward (= default) ; KIND=1 : Tangent Linear with TAF ;
1064     # KIND=2 : Adjoint with TAF ; KIND=4 : Adjoint with OpenAD
1065     KIND=0
1066 edhill 1.24
1067 jmc 1.117 # list of pTracers to check for monitor output
1068 edhill 1.50 PTRACERS_NUM="1 2 3 4 5"
1069 edhill 1.49
1070 jmc 1.147 MATCH_CRIT=10
1071 jmc 1.92
1072 edhill 1.34 printf "parsing options... "
1073 edhill 1.1
1074     ac_prev=
1075     for ac_option ; do
1076    
1077     # If the previous option needs an argument, assign it.
1078     if test -n "$ac_prev"; then
1079     eval "$ac_prev=\$ac_option"
1080     ac_prev=
1081     continue
1082     fi
1083    
1084     ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
1085 jmc 1.135
1086 edhill 1.1 case $ac_option in
1087    
1088 jmc 1.156 -help | --help | -h | --h) usage ;;
1089    
1090     -optfile | --optfile | -of | --of) ac_prev=OPTFILE ;;
1091     -optfile=* | --optfile=* | -of=* | --of=*) OPTFILE=$ac_optarg ;;
1092    
1093     -addr | --addr | -a | --a) ac_prev=ADDRESSES ;;
1094     -addr=* | --addr=* | -a=* | --a=*) ADDRESSES=$ac_optarg ;;
1095     -mpackdir | --mpackdir | -mpd | --mpd) ac_prev=MPACKDIR ;;
1096     -mpackdir=* | --mpackdir=* | -mpd=* | --mpd=*) MPACKDIR=$ac_optarg ;;
1097    
1098 jmc 1.192 -send | --send ) ac_prev=SENDCMD ;;
1099     -send=* | --send=* ) SENDCMD=$ac_optarg ;;
1100     -savdir | --savdir | -sd | --sd ) ac_prev=SAVDIR ;;
1101     -savdir=* | --savdir=* | -sd=* | --sd=* ) SAVDIR=$ac_optarg ;;
1102    
1103 jmc 1.156 -tdir | --tdir | -t | --t) ac_prev=TESTDIRS ;;
1104     -tdir=* | --tdir=* | -t=* | --t=*) TESTDIRS=$ac_optarg ;;
1105     -skipdir | --skipdir | -skd | --skd) ac_prev=SKIPDIRS ;;
1106     -skipdir=* | --skipdir=* | -skd=* | --skd=*) SKIPDIRS=$ac_optarg ;;
1107    
1108     -bash | --bash | -b | --b) ac_prev=BASH ;;
1109     -bash=* | --bash=* | -b=* | --b=*) BASH=$ac_optarg ;;
1110    
1111     -command | --command | -c | --c) ac_prev=COMMAND ;;
1112     -command=* | --command=* | -c=* | --c=*) COMMAND=$ac_optarg ;;
1113    
1114     -makedepend | --makedepend | -md | --md) ac_prev=MKDEPEND ;;
1115     -makedepend=* | --makedepend=* | -md=* | --md=*) MKDEPEND=$ac_optarg ;;
1116    
1117     -make | --make | -m | --m) ac_prev=MAKE ;;
1118     -make=* | --make=* | -m=* | --m=*) MAKE=$ac_optarg ;;
1119    
1120 jmc 1.200 -repl_mk | --repl_mk ) ac_prev=MAKE_CMD ;;
1121     -repl_mk=* | --repl_mk=*) MAKE_CMD=$ac_optarg ;;
1122 jmc 1.171
1123 jmc 1.156 -odir | --odir) ac_prev=OUTDIR ;;
1124     -odir=* | --odir=*) OUTDIR=$ac_optarg ;;
1125    
1126     -ptracers | --ptracers | -ptr | --ptr) ac_prev=PTRACERS_NUM ;;
1127     -ptracers=* | --ptracers=* | -ptr=* | --ptr=*) PTRACERS_NUM=$ac_optarg ;;
1128 edhill 1.50
1129 jmc 1.92 -match | --match ) ac_prev=MATCH_CRIT ;;
1130     -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
1131    
1132 jmc 1.136 -j | --j) ac_prev=JOBS ;;
1133     -j=* | --j=*) JOBS=$ac_optarg ;;
1134 edhill 1.43
1135 jmc 1.165 -ef | --ef) ac_prev=EXTRFLG ;;
1136     -ef=* | --ef=*) EXTRFLG=$ac_optarg ;;
1137    
1138 jmc 1.156 -clean | --clean) CLEANUP=t ; DELDIR=t ;;
1139 edhill 1.10
1140 jmc 1.156 -norun | --norun | -nr | --nr) NORUN=t ;;
1141 jmc 1.165 -obj | --obj ) TARG='obj' ; NORUN=t ;;
1142 jmc 1.156 -runonly | --runonly | -ro | --ro) QUICK=t ; NOMAKE=t ;;
1143     -quick | --quick | -q | --q) QUICK=t ;;
1144     -nogenmake | --nogenmake | -ng | --ng) NOGENMAKE=t ;;
1145     -noclean | --noclean | -nc | --nc) NOCLEAN=t ;;
1146     -nodepend | --nodepend | -nd | --nd) NODEPEND=t ;;
1147 edhill 1.10
1148 jmc 1.156 -postclean | --postclean | -pc | --pc) POSTCLEAN=2 ;;
1149     -deloutp | --deloutp | -do | --do) POSTCLEAN=1 ;;
1150 edhill 1.68
1151 jmc 1.154 -mpi | --mpi) MPI=2 ;;
1152     -MPI | --MPI) ac_prev=MPI ;;
1153     -MPI=* | --MPI=*) MPI=$ac_optarg ;;
1154 edhill 1.10
1155 jmc 1.156 -mfile | --mfile | -mf | --mf) ac_prev=MPI_MFILE ;;
1156     -mfile=* | --mfile=* | -mf=* | --mf=*) MPI_MFILE=$ac_optarg ;;
1157    
1158 jmc 1.83 -mth) MULTI_THREAD=t ;;
1159    
1160 jmc 1.175 -tlm) if test $KIND = 0 ; then KIND=1 ; else
1161     echo "Error: '-tlm', '-adm' and '-oad' are exclusive" ; usage
1162     fi ;;
1163     -adm | -ad) if test $KIND = 0 ; then KIND=2 ; else
1164     echo "Error: '-tlm', '-adm' and '-oad' are exclusive" ; usage
1165     fi ;;
1166     -oad) if test $KIND = 0 ; then KIND=4 ; NODEPEND=t ; else
1167     echo "Error: '-tlm', '-adm' and '-oad' are exclusive" ; usage
1168     fi ;;
1169 jmc 1.200 -ncad) NOCATAD=t ;;
1170 utke 1.120
1171 jmc 1.164 -ieee) echo "Warning: ignore option '-ieee' (already the default)"
1172 jmc 1.175 printf " ... " ;;
1173 jmc 1.164 -noieee) echo "Warning: will use option '-fast' instead of '-noieee' (obsolete)"
1174 jmc 1.175 printf " ... " ; OptLev=`expr $OptLev \* 2` ;;
1175 jmc 1.164 -fast) OptLev=`expr $OptLev \* 2` ;;
1176     -devel) OptLev=0 ;;
1177 jmc 1.156 -gsl) GSL=t ;;
1178 edhill 1.10
1179 edhill 1.1 -verbose) verbose=2 ;;
1180     -debug) debug=1 ;;
1181     -quiet) verbose=0 ;;
1182    
1183 edhill 1.40 -deldir | -dd) DELDIR=t ;;
1184    
1185 jmc 1.136 -use_r4|-ur4) USE_R4=t ;;
1186 jmc 1.135
1187 ce107 1.90 -ts) TS=t;;
1188     -papis) PAPIS=t;;
1189 jmc 1.200 -pcls) PCLS=t;;
1190 ce107 1.90
1191 jmc 1.156 -*) echo "Error: unrecognized option: "$ac_option
1192     usage ;;
1193     *) echo "Error: unrecognized argument: "$ac_option
1194     usage ;;
1195 jmc 1.135
1196 edhill 1.1 esac
1197 jmc 1.135
1198 edhill 1.1 done
1199    
1200 edhill 1.10 if test "x$QUICK" = xt ; then
1201     NOGENMAKE=t
1202     NOCLEAN=t
1203     NODEPEND=t
1204     fi
1205 jmc 1.200 if test "x$MAKE_CMD" = x ; then MAKE_CMD=$MAKE ; fi
1206 edhill 1.10
1207 jmc 1.156 #- check length of MPI machine file:
1208     if test "x$MPI" != x0 -a "x$MPI_MFILE" != x ; then
1209     if test -r $MPI_MFILE ; then
1210     nl=`wc -l $MPI_MFILE | awk '{print $1}'`
1211     if [ $nl -lt $MPI ] ; then
1212 jmc 1.175 echo "Error: need at least $MPI nodes (currently only $nl) in MPI_MFILE=$MPI_FILE"
1213     usage
1214 jmc 1.156 fi
1215     if [ $verbose -gt 1 ]; then
1216     echo " MPI_MFILE=$MPI_MFILE : $nl procs for MPI=$MPI run"
1217     fi
1218     else
1219 jmc 1.175 echo "Error: cannot access MPI_MFILE=$MPI_FILE"
1220     usage
1221 jmc 1.156 fi
1222     fi
1223    
1224 jmc 1.99 #- setting for forward or ADM testing
1225 jmc 1.175 if test $KIND = 1 ; then
1226     TARG=ftlall
1227     code_dir=code_ad
1228     inputdir=input_ad
1229     ref_outp="output_tlm.txt"
1230     EXECUTABLE="mitgcmuv_ftl"
1231     elif test $KIND = 2 ; then
1232 jmc 1.168 if test "x$TARG" = xobj ; then TARG=adobj ; else TARG=adall ; fi
1233 jmc 1.99 code_dir=code_ad
1234 jmc 1.108 inputdir=input_ad
1235 jmc 1.99 ref_outp="output_adm.txt"
1236     EXECUTABLE="mitgcmuv_ad"
1237 jmc 1.175 elif test $KIND = 4 ; then
1238 jmc 1.168 TARG=adAll
1239 utke 1.120 code_dir=code_oad
1240     inputdir=input_oad
1241     ref_outp="output_oadm.txt"
1242     EXECUTABLE="mitgcmuv_ad"
1243 jmc 1.99 else
1244     code_dir=code
1245 jmc 1.108 inputdir=input
1246 jmc 1.99 ref_outp="output.txt"
1247     EXECUTABLE="mitgcmuv"
1248     fi
1249 jmc 1.200 if test "x$JOBS" != x ; then TARG="-j $JOBS $TARG" ; fi
1250 jmc 1.99
1251 jmc 1.142 xx=`echo $TESTDIRS | awk '{print $1}'`
1252 edhill 1.1 if test "x$TESTDIRS" = x ; then
1253 jmc 1.103 LIST=`scandirs results/$ref_outp`
1254 jmc 1.142 elif test $xx = 'start_from' ; then
1255     xx=`echo $TESTDIRS | awk '{print $2}'`
1256     LIST=`scandirs results/$ref_outp | sed -n "/$xx/,$ p"`
1257 jmc 1.84 else
1258     #- expand group of experiments:
1259     LIST=" "
1260     for xx in $TESTDIRS
1261     do
1262     case $xx in
1263 jmc 1.86 'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
1264     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
1265     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
1266 jmc 1.84 ;;
1267     'tutorials')
1268     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
1269     *) LIST=${LIST}" "$xx ;;
1270     esac
1271 jmc 1.135 done
1272 jmc 1.89 fi
1273     #echo 'LIST='${LIST}'<'
1274     #- skip dirs, remove duplicate and non-directory:
1275     TESTDIRS=" "
1276     count=0
1277     for xx in $LIST
1278     do
1279     yy=`echo $SKIPDIRS | grep -c $xx`
1280     if test $yy = 0 ; then
1281 jmc 1.84 if test -d $xx ; then
1282     yy=`echo $TESTDIRS | grep -c $xx`
1283     if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
1284 jmc 1.89 else count=1 ;
1285     echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
1286     fi
1287     else
1288 jmc 1.175 if test $count = 1 ; then echo -n ", \"$xx\""
1289 jmc 1.89 else count=1 ; echo "" ; echo -n " skip: \"$xx\""
1290 jmc 1.84 fi
1291 jmc 1.89 fi
1292 jmc 1.135 done
1293 jmc 1.89 if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
1294 jmc 1.84 #echo 'TESTDIRS='${TESTDIRS}'<'
1295 edhill 1.1
1296 edhill 1.10 if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
1297     OPTFILE=$MITGCM_OF
1298     fi
1299    
1300 jmc 1.156 LOC_MFILE='tr_mpi_mfile'
1301 jmc 1.146 RUNLOG="run.tr_log"
1302 jmc 1.195 if test "x$MPI" = x0 ; then
1303     OUTPUTFILE=$ref_outp
1304     if test "x$COMMAND" = x ; then COMMAND="./$EXECUTABLE > $OUTPUTFILE" ; fi
1305     else
1306     OUTPUTFILE="STDOUT.0000"
1307     if test "x$COMMAND" = x ; then COMMAND="mpirun -v -np TR_NPROC ./$EXECUTABLE" ; fi
1308 edhill 1.24 fi
1309    
1310 jmc 1.195 echo "OK (COMMAND='$COMMAND')"
1311 edhill 1.1
1312 jmc 1.200 #TMP=./tr_$$
1313 jmc 1.192 #- try to put temporary files in system-local /tmp dir
1314 jmc 1.200 TMP=/tmp/tr_${USER}_$$
1315     touch $TMP ; retVal=$?
1316     if [ $retVal -eq 0 ] ; then
1317     if test ! -r $TMP ; then TMP=./tr_$$ ; fi
1318     else
1319     TMP=./tr_$$
1320     fi
1321     rm -f $TMP
1322     if [ $verbose -gt 1 ]; then echo " temp files: $TMP" ; fi
1323 jmc 1.192
1324 jmc 1.94 # set the Default List of output variables to be checked:
1325     # (use default or load experiment-specific list from file "tr_checklist")
1326     # content : 1rst = main variable used to decide if it pass or FAIL
1327     # others = number of matching digits to be printed in summary.txt
1328 jmc 1.175 if test $KIND = 1 ; then
1329     DEF_CHECK_LIST='tlmGrd tlmCst tlmGrd fwdGrd'
1330     EMPTY_RESULTS='.. .. ..'
1331     LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1332     elif test $KIND = 2 -o $KIND = 4 ; then
1333     DEF_CHECK_LIST='AdGrd Cost AdGrd FDGrd'
1334     EMPTY_RESULTS='.. .. ..'
1335     LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1336     else
1337 jmc 1.94 DEF_CHECK_LIST='PS PS T+ S+ U+ V+ pt1+ pt2+ pt3+ pt4+ pt5+'
1338     EMPTY_RESULTS='.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..'
1339 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}'`
1340 jmc 1.94 ii=`echo $EMPTY_RESULTS | awk '{print NF}'`
1341 jmc 1.97 EMPTY_RESULTS=$EMPTY_RESULTS`expr $LEN_CHECK_LIST - $ii | awk 'BEGIN{FS=":"}{for(i=1;i<=$1;i++){printf " ."}}'`
1342 jmc 1.94 fi
1343    
1344 edhill 1.1 # create the FORTRAN comparison code
1345 jmc 1.178 if test "x$CLEANUP" = xt -o -x tr_cmpnum ; then
1346 jmc 1.133 echo "skipping comparison code build"
1347     else
1348     createcodelet
1349     fi
1350 edhill 1.1
1351 jmc 1.112 # build the mpack utility (if ADDRESSES = NONE, do it to test the build)
1352 jmc 1.192 if test "x$ADDRESSES" = x -o "x$SENDCMD" != x ; then
1353 edhill 1.32 echo "skipping mpack build"
1354     else
1355 edhill 1.31 build_mpack
1356 jmc 1.192 if test "x$HAVE_MPACK" = xt ; then SENDCMD=$MPACK ; fi
1357 edhill 1.31 fi
1358 edhill 1.1
1359     # Create a uniquely named directory to store results
1360 jmc 1.110 CMDLINE=$0
1361 jmc 1.118 for xx in "$@" ; do nw=`echo $xx | wc -w`
1362 jmc 1.180 if test $nw = '1' ; then CMDLINE="$CMDLINE $xx" ; else
1363     nb=`echo $xx | grep -c '='`
1364     if test $nb = 0 ; then CMDLINE="$CMDLINE '$xx'"
1365     else yy=`echo "$xx'" | sed "s/=/='/"` ;
1366     CMDLINE="$CMDLINE $yy" ; fi
1367     fi
1368 jmc 1.118 done
1369 edhill 1.1 MACH=`hostname`
1370 edhill 1.2 UNAMEA=`uname -a`
1371 edhill 1.1 DATE=`date +%Y%m%d`
1372 edhill 1.25 BASE="tr_"$MACH"_"$DATE"_"
1373 jmc 1.70 if test "x$OUTDIR" != x ; then
1374     BASE="tr_"$OUTDIR"_"$DATE"_"
1375 jmc 1.121 else
1376 mlosch 1.199 #short_name=`hostname -s | tr '[:upper:]' '[:lower:]'`
1377     # hostname -s is not universal (does work on AIX system)
1378 jmc 1.200 short_name=`hostname | sed 's/\..*$//' | tr '[:upper:]' '[:lower:]'`
1379 jmc 1.121 BASE="tr_"$short_name"_"$DATE"_"
1380 jmc 1.70 fi
1381 edhill 1.1 DNUM=0
1382     DRESULTS="$BASE$DNUM"
1383     while test -e $DRESULTS ; do
1384     DNUM=$(( $DNUM + 1 ))
1385     DRESULTS="$BASE$DNUM"
1386     done
1387     mkdir $DRESULTS
1388     RETVAL=$?
1389     if test "x$RETVAL" != x0 ; then
1390 edhill 1.20 echo "ERROR: Can't create results directory \"./$DRESULTS\""
1391 edhill 1.1 exit 1
1392     fi
1393     SUMMARY="$DRESULTS/summary.txt"
1394 edhill 1.16 start_date=`date`
1395 edhill 1.17 echo $start_date > $SUMMARY
1396 jmc 1.110 echo 'run:' $CMDLINE >> $SUMMARY
1397     echo 'on :' $UNAMEA >> $SUMMARY
1398 edhill 1.1
1399 edhill 1.11 of_path=
1400 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
1401     if test -r $OPTFILE ; then
1402 edhill 1.11 # get the path
1403     path=${OPTFILE%/*}
1404     if test "x$path" = x ; then
1405     of_path=`pwd`
1406     else
1407     of_path=`( cd $path > /dev/null 2>&1 ; pwd )`
1408     fi
1409     file=${OPTFILE##*/}
1410     OPTFILE=$of_path/$file
1411 edhill 1.21 cp $OPTFILE $DRESULTS
1412     echo >> $SUMMARY
1413     echo " OPTFILE=$OPTFILE" >> $SUMMARY
1414 edhill 1.11 else
1415 jmc 1.179 echo | tee -a $SUMMARY
1416     echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee -a $SUMMARY
1417 edhill 1.21 exit 1
1418 edhill 1.10 fi
1419 edhill 1.21 else
1420     echo >> $SUMMARY
1421 jmc 1.152 echo "No \"OPTFILE\" was specified ; genmake2 found and uses:" >> $SUMMARY
1422     #-note: to be filled later after 1rst run
1423 edhill 1.10 fi
1424     echo
1425     echo >> $SUMMARY
1426 jmc 1.175 if test $KIND = 0 ; then
1427     line_0=`printf '%s %2i' 'default' $MATCH_CRIT`
1428 jmc 1.94 line_0="$line_0 ----T----- ----S----- ----U----- ----V-----"
1429 edhill 1.49 line_1="G D M c m s m s m s m s"
1430 jmc 1.167 line_2="e p a R g m m e . m m e . m m e . m m e ."
1431     line_3="n n k u 2 i a a d i a a d i a a d i a a d"
1432 edhill 1.49 line_4="2 d e n d n x n . n x n . n x n . n x n ."
1433 edhill 1.50 for ii in $PTRACERS_NUM ; do
1434 edhill 1.49 line_0="$line_0 --PTR 0"$ii"--"
1435     line_1="$line_1 m s"
1436     line_2="$line_2 m m e ."
1437     line_3="$line_3 i a a d"
1438     line_4="$line_4 n x n ."
1439     done
1440 jmc 1.175 else
1441     line_0=`printf '%s %2i' 'default ' $MATCH_CRIT`
1442     if test $KIND = 1 ; then
1443 jmc 1.181 #echo "TANGLIN=true" >> $SUMMARY
1444     echo "TangLin generated by TAF" >> $SUMMARY
1445     elif test $KIND = 3 ; then
1446     echo "TangLin generated by OpenAD" >> $SUMMARY
1447     elif test $KIND = 2 ; then
1448     #echo "ADJOINT=true" >> $SUMMARY
1449     echo "Adjoint generated by TAF" >> $SUMMARY
1450     else
1451     echo "Adjoint generated by OpenAD" >> $SUMMARY
1452     fi
1453     if test $KIND = 1 -o $KIND = 3 ; then
1454 jmc 1.175 line_1="G D M C T F"
1455     line_2="e p a R o L D"
1456     else
1457     line_1="G D M C A F"
1458     line_2="e p a R o d D"
1459     fi
1460     line_3="n n k u s G G"
1461     line_4="2 d e n t r r"
1462     echo >> $SUMMARY
1463     fi
1464 jmc 1.178 if test "x$CLEANUP" != xt ; then
1465 edhill 1.49 echo "$line_0" | tee -a $SUMMARY
1466     echo "$line_1" | tee -a $SUMMARY
1467     echo "$line_2" | tee -a $SUMMARY
1468     echo "$line_3" | tee -a $SUMMARY
1469     echo "$line_4" | tee -a $SUMMARY
1470 jmc 1.175 echo "" | tee -a $SUMMARY
1471 jmc 1.178 fi
1472 jmc 1.139 echo "-------------------------------------------------------------------------------"
1473 edhill 1.1
1474 edhill 1.10 # ...and each test directory...
1475     for dir in $TESTDIRS ; do
1476 jmc 1.135
1477 jmc 1.106 # set builddir & rundir:
1478     builddir="build"
1479     if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1480     rundir="run"
1481 jmc 1.143 pfxdir="tr_$rundir"
1482 jmc 1.106 if test ! -d $dir/$rundir ; then
1483     rundir=$builddir
1484     fi
1485     CODE_DIR=$dir/$code_dir
1486     BUILD_DIR=$dir/$builddir
1487    
1488 edhill 1.10 # Cleanup only!
1489     if test "x$CLEANUP" = xt ; then
1490 jmc 1.127 echo -n ' --- dir:' $BUILD_DIR ': '
1491     makeclean $BUILD_DIR
1492 jmc 1.145 ( cd $BUILD_DIR
1493     rm -f $EXECUTABLE *.bak
1494 jmc 1.146 rm -f genmake_state genmake_*optfile genmake.log
1495 jmc 1.154 rm -f SIZE.h.mpi genmake.tr_log make.tr_log
1496 jmc 1.190 rm -rf mpi_headers
1497 jmc 1.145 )
1498 jmc 1.106 if test -d $dir/$rundir/CVS ; then
1499 jmc 1.175 echo -n ' --- dir:' $dir/$rundir ': '
1500 jmc 1.106 run_clean $dir/$rundir
1501 edhill 1.10 fi
1502 jmc 1.143 trdir=`( cd $dir ; find . -type d -name "$pfxdir.*" -print | sed 's/^.\///')`
1503 jmc 1.127 ttd=`echo $trdir | wc -w`
1504     if test $ttd != 0 ; then
1505     echo ' --- rm dir:' $trdir
1506     ( cd $dir ; rm -rf $trdir )
1507     fi
1508 edhill 1.10 continue
1509 edhill 1.1 fi
1510 edhill 1.3
1511 jmc 1.135 # Verify that the testdir exists and contains previous
1512 edhill 1.10 # results in the correct location--or skip this directory!
1513 jmc 1.104 fout=$dir"/results/"$ref_outp
1514 jmc 1.175 #if test ! -r $fout ; then
1515     if test ! -r $fout -a ! -r ${fout}.gz ; then
1516 edhill 1.24 echo "can't read \"$fout\" -- skipping $dir"
1517 edhill 1.10 continue
1518     fi
1519 edhill 1.7
1520 jmc 1.117 # Check for specific files for particular type of run
1521 edhill 1.49
1522 jmc 1.161 if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" != "x0" ; then
1523     echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1524     continue
1525     fi
1526     if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1527     echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1528     continue
1529     fi
1530    
1531 jmc 1.154 if test "x$MPI" != "x0" ; then
1532 jmc 1.173 ntx=1 ; nty=1
1533 jmc 1.161 if test "x$MULTI_THREAD" = "xt" ; then
1534 jmc 1.174 ff=$dir"/input/eedata.mth"
1535     ntx=`grep "^ *nTx *=" $ff | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
1536     nty=`grep "^ *nTy *=" $ff | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
1537     if test "x$ntx" = x ; then ntx=1 ; fi
1538     if test "x$nty" = x ; then nty=1 ; fi
1539 jmc 1.161 fi
1540     #- create new SIZE.h with no more than '$MPI' Procs
1541 jmc 1.173 mk_mpi_size $CODE_DIR"/SIZE.h_mpi" $BUILD_DIR"/tr_size.mpi" $MPI $ntx $nty
1542 jmc 1.161 LOC_NPROC=$?
1543     ( cd $BUILD_DIR
1544     if test -r SIZE.h.mpi ; then
1545     cmp tr_size.mpi SIZE.h.mpi > /dev/null 2>&1 ; RETVAL=$?
1546     else RETVAL=1
1547     fi
1548     if test "x$RETVAL" = x0 ; then
1549     rm -f tr_size.mpi
1550     else
1551     rm -f SIZE.h.mpi ; mv tr_size.mpi SIZE.h.mpi
1552     fi
1553     )
1554 jmc 1.156 if test "x$MPI_MFILE" != x ; then
1555     #- create new MPI machine-file with the right number of Procs
1556     rm -f $LOC_MFILE
1557     cat $MPI_MFILE | sort | uniq | head -$LOC_NPROC > $LOC_MFILE
1558     nl=`wc -l $LOC_MFILE | awk '{print $1}'`
1559     if [ $nl -lt $LOC_NPROC ] ; then
1560     rm -f $LOC_MFILE
1561     cat $MPI_MFILE | head -$LOC_NPROC > $LOC_MFILE
1562     #sed -n "1,$LOC_NPROC p" $MPI_MFILE > $LOC_MFILE
1563     fi
1564     if [ $verbose -gt 1 ]; then
1565     nl=`wc -l $LOC_MFILE | awk '{print $1}'`
1566     echo " new LOC_MFILE=$LOC_MFILE : $nl procs for LOC_NPROC=$LOC_NPROC"
1567     fi
1568     fi
1569 jmc 1.161 if test "x$MULTI_THREAD" = "xt" ; then
1570     retv=`check_eedata $dir"/input/eedata.mth" $BUILD_DIR"/SIZE.h.mpi"`
1571     if test $retv != 0 ; then
1572     echo "input/eedata.mth tiling misfit -- skipping $dir"
1573     continue
1574     fi
1575 jmc 1.154 fi
1576 jmc 1.123 fi
1577 jmc 1.83
1578     # Check whether there are "extra runs" for this testdir
1579     extra_runs=
1580 jmc 1.133 if test "x$NORUN" = xf ; then
1581 jmc 1.183 ex_run_dirs=`( cd $dir ; ls -d $inputdir.* 2> /dev/null )`
1582 jmc 1.133 fi
1583 jmc 1.108 #echo "ex_run_dirs='$ex_run_dirs'"
1584     for exd in $ex_run_dirs ; do
1585     name=`echo $exd | sed -e "s/$inputdir\.//"`
1586     refExOut=`echo $ref_outp | sed "s/\./.${name}./"`
1587     outf="$dir/results/$refExOut"
1588 jmc 1.175 if test -r $outf -o -r ${outf}.gz ; then
1589 jmc 1.135 if test "x$MULTI_THREAD" = "xt" ; then
1590 jmc 1.123 if test -r $dir"/"$exd"/eedata.mth" ; then
1591 jmc 1.154 if test "x$MPI" = "x0" ; then
1592     extra_runs="$extra_runs $name"
1593     else
1594 jmc 1.161 retv=`check_eedata $dir"/"$exd"/eedata.mth" $BUILD_DIR"/SIZE.h.mpi"`
1595 jmc 1.123 if test $retv = 0 ; then
1596 jmc 1.83 extra_runs="$extra_runs $name"
1597 jmc 1.123 else
1598     echo $exd"/eedata.mth tiling misfit -- skipping $dir"
1599 jmc 1.83 fi
1600 jmc 1.123 fi
1601     #else echo $dir"/"$exd"/eedata.mth: not found"
1602 jmc 1.83 fi
1603 jmc 1.123 else
1604     extra_runs="$extra_runs $name"
1605     fi
1606 jmc 1.108 fi
1607     done
1608 edhill 1.28
1609     echo
1610 jmc 1.135 if test "x$extra_runs" = "x" ; then
1611 jmc 1.175 echo "Experiment: $dir"
1612 jmc 1.83 else
1613 jmc 1.175 echo "Experiment: $dir ; extra_runs=$extra_runs"
1614 jmc 1.83 fi
1615 edhill 1.28 echo
1616     unset genmake makedepend make run
1617 jmc 1.94 results=$EMPTY_RESULTS
1618 edhill 1.10
1619 jmc 1.158 # Create an output dir & summary.txt file for each tested experiment (tdir)
1620 jmc 1.138 locDIR=$DRESULTS"/"$dir
1621     mkdir $locDIR
1622 jmc 1.158 #- report to this experiment local summary file ---
1623     echo "DATE='$DATE' ; tdir='$dir'" > $locDIR"/summary.txt"
1624     echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1625     echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1626 jmc 1.138 CDIR=`pwd`"/$locDIR"
1627 jmc 1.135
1628 jmc 1.133 if test "x$NORUN" = xt ; then
1629     run=N
1630     genmakemodel $dir/$builddir && genmake=Y \
1631     && makeclean $dir/$builddir \
1632 jmc 1.175 && symlink_mpifiles $dir $code_dir $builddir \
1633 jmc 1.133 && makedependmodel $dir/$builddir && makedepend=Y \
1634     && makemodel $dir/$builddir && make=Y
1635 edhill 1.10 else
1636 edhill 1.1 genmakemodel $dir/$builddir && genmake=Y \
1637     && makeclean $dir/$builddir \
1638 jmc 1.175 && symlink_mpifiles $dir $code_dir $builddir \
1639 edhill 1.1 && makedependmodel $dir/$builddir && makedepend=Y \
1640     && makemodel $dir/$builddir && make=Y \
1641 jmc 1.139 && run_clean $dir/$rundir \
1642 jmc 1.140 && linkdata $dir/$rundir $inputdir \
1643 edhill 1.12 && runmodel $dir/$rundir && run=Y \
1644 jmc 1.99 && results=`testoutput_run $dir $rundir $ref_outp`
1645 edhill 1.10 fi
1646 jmc 1.139 #echo "results='$results'"
1647 jmc 1.135
1648 edhill 1.24 fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1649 jmc 1.139 echo 1>&2
1650 jmc 1.175 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</' >> $SUMMARY
1651 jmc 1.138 echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1652 edhill 1.34
1653     for ex in $extra_runs ; do
1654 jmc 1.73 unset run
1655 jmc 1.175 results=$EMPTY_RESULTS
1656 jmc 1.106 # reference output file
1657     refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1658 jmc 1.158 # Create an output dir & summary.txt file for each extra run (tdir.ex)
1659 jmc 1.138 locDIR=$DRESULTS"/"$dir"."$ex
1660     mkdir $locDIR
1661 jmc 1.158 #- report to this experiment local summary file ---
1662     echo "DATE='$DATE' ; tdir='$dir.$ex'" > $locDIR"/summary.txt"
1663     #echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1664     #echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1665 jmc 1.138 CDIR=`pwd`"/$locDIR"
1666 jmc 1.143 test ! -e "$dir/$pfxdir.$ex" && mkdir "$dir/$pfxdir.$ex"
1667     run_clean $dir/$pfxdir.$ex
1668     linkdata $dir/$pfxdir.$ex $inputdir.$ex $inputdir
1669     runmodel $dir/$pfxdir.$ex && run=Y \
1670     && results=`testoutput_run $dir $pfxdir.$ex $refExOut`
1671 jmc 1.186 fres=`formatresults $dir.$ex ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1672 jmc 1.139 echo 1>&2
1673 jmc 1.100 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</' >> $SUMMARY
1674 jmc 1.138 echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1675 jmc 1.156 if test "x$POSTCLEAN" = x2 ; then
1676 jmc 1.143 run_clean $dir/$pfxdir.$ex
1677 jmc 1.83 fi
1678 edhill 1.34 done
1679 edhill 1.68
1680 jmc 1.176 if test ! -f $DRESULTS"/"genmake_state ; then
1681 jmc 1.137 if test -f $dir/$builddir/Makefile ; then
1682     mkOpt=`grep '^# OPTFILE=' $dir/$builddir/Makefile 2>/dev/null | head -1 | sed 's/^# //'`
1683     echo "from '$dir/$builddir/Makefile', extract:" > $DRESULTS/genmake_state
1684 mlosch 1.199 # sed -n '/^# executed by:/,+1 p' $dir/$builddir/Makefile >> $DRESULTS/genmake_state
1685     # bsd-sed cannot do the above code
1686     cat $dir/$builddir/Makefile | \
1687     sed -n '/^# executed by:/{N
1688     p
1689     }' >> $DRESULTS/genmake_state
1690 jmc 1.151 echo " $mkOpt" >> $DRESULTS/genmake_state
1691 jmc 1.152 if test "x$OPTFILE" = xNONE ; then
1692     eval $mkOpt
1693 mlosch 1.199 # sed "/^No \"OPTFILE\" was specified ; genmake2/a\ OPTFILE=${OPTFILE}"\
1694     # $SUMMARY > tmp.tr_log
1695     # bsd-sed requires a newline after "a\":
1696     sed "/^No \"OPTFILE\" was specified ; genmake2/a\\
1697     OPTFILE=${OPTFILE}" $SUMMARY > tmp.tr_log
1698 jmc 1.152 RETVAL=$?
1699 jmc 1.192 if test "x$RETVAL" = x0 ; then
1700     cp -f tmp.tr_log $SUMMARY
1701 jmc 1.152 fi
1702 jmc 1.192 rm -f tmp.tr_log
1703 jmc 1.152 fi
1704 jmc 1.150 gmkLog=$dir/$builddir/genmake.log
1705 jmc 1.176 if test -r $gmkLog ; then
1706     grep '^Get compiler version using:' $gmkLog > /dev/null 2>&1
1707     RETVAL=$?
1708     if test "x$RETVAL" = x0 ; then
1709     echo -n "from '$gmkLog', " >> $DRESULTS/genmake_state
1710     echo "extract compiler version:" >> $DRESULTS/genmake_state
1711     sed -n '/Get compiler version/,/<-- compiler version/p' \
1712     $gmkLog | grep -v '^... compiler version ' > tmp.tr_log
1713     sed -n '1p' tmp.tr_log >> $DRESULTS/genmake_state
1714     sed -n '2,/^$/p' tmp.tr_log | sed '/^$/d' | sed 's/^./ &/' \
1715     >> $DRESULTS/genmake_state
1716     rm -f tmp.tr_log
1717     fi
1718     echo -n "from '$gmkLog', " >> $DRESULTS/genmake_state
1719     echo "get NETCDF & LAPACK settings:" >> $DRESULTS/genmake_state
1720     sed -n '/set HAVE_NETCDF=/p' $gmkLog >> $DRESULTS/genmake_state
1721     sed -n '/set HAVE_LAPACK=/p' $gmkLog >> $DRESULTS/genmake_state
1722 jmc 1.150 fi
1723 jmc 1.137 fi
1724     fi
1725 jmc 1.83 #postclean $dir/$builddir
1726 jmc 1.156 if test "x$POSTCLEAN" = x2 ; then
1727 jmc 1.175 makeclean $dir/$builddir \
1728     && run_clean $dir/$rundir
1729 jmc 1.83 fi
1730 jmc 1.156 if test "x$MPI" != x0 -a "x$MPI_MFILE" != x ; then rm -f $LOC_MFILE ; fi
1731 jmc 1.135
1732 edhill 1.10 echo "-------------------------------------------------------------------------------"
1733 jmc 1.135
1734 edhill 1.1 done
1735    
1736 edhill 1.34 printf "Start time: " >> $SUMMARY
1737 jmc 1.114 echo "$start_date" >> $SUMMARY
1738 edhill 1.34 printf "End time: " >> $SUMMARY
1739 edhill 1.13 date >> $SUMMARY
1740 edhill 1.20
1741     # If addresses were supplied and mpack built successfully, then try
1742     # to send email using mpack.
1743     if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1744     echo "No results email was sent."
1745     else
1746 jmc 1.192 if test "x$SENDCMD" != x ; then
1747     if [ $verbose -gt 1 ]; then
1748     echo " run: $SENDCMD -s MITgcm-test -m 3555000 ${SAVDIR}/${DRESULTS}".tar.gz" $ADDRESSES"
1749     fi
1750     tar -cf ${SAVDIR}/${DRESULTS}".tar" $DRESULTS > /dev/null 2>&1 \
1751     && gzip ${SAVDIR}/${DRESULTS}".tar" \
1752     && $SENDCMD -s MITgcm-test -m 3555000 ${SAVDIR}/${DRESULTS}".tar.gz" $ADDRESSES
1753 edhill 1.20 RETVAL=$?
1754     if test "x$RETVAL" != x0 ; then
1755     echo
1756     echo "Warning: The tar, gzip, & mpack step failed. Please send email"
1757     echo " to <MITgcm-support@mitgcm.org> for help. You may copy the "
1758     echo " summary of results from the directory \"$DRESULTS\"."
1759     echo
1760     else
1761     echo
1762     echo "An email containing results was sent to the following addresses:"
1763     echo " \"$ADDRESSES\""
1764     echo
1765 jmc 1.192 test -f ${SAVDIR}/${DRESULTS}".tar" && rm -f ${SAVDIR}/${DRESULTS}".tar"
1766     test -f ${SAVDIR}/${DRESULTS}".tar.gz" && rm -f ${SAVDIR}/${DRESULTS}".tar.gz"
1767 edhill 1.20 fi
1768     fi
1769     fi
1770 edhill 1.13
1771 jmc 1.133 if test "x$QUICK" = xf -a "x$NORUN" = xf ; then
1772     rm -f tr_cmpnum.c tr_cmpnum
1773     fi
1774 edhill 1.1
1775 edhill 1.12 if test "x$CLEANUP" != xt ; then
1776 jmc 1.102 cat $SUMMARY | sed 's/ \. \. \. \. \. \. \. \. \. \. \. \. //'
1777 edhill 1.25 if test -e tr_out.txt ; then
1778 jmc 1.175 mv tr_out.txt tr_out.txt.old
1779 edhill 1.14 fi
1780 jmc 1.103 cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1781 edhill 1.12 fi
1782 edhill 1.1
1783 edhill 1.40 if test "x$DELDIR" = xt ; then
1784     rm -rf $DRESULTS
1785     fi
1786 jmc 1.178 echo "======== End of testreport execution ========"

  ViewVC Help
Powered by ViewVC 1.1.22