/[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.207 - (hide annotations) (download)
Fri Jan 15 22:14:22 2016 UTC (8 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u
Changes since 1.206: +2 -2 lines
fix a comment

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

  ViewVC Help
Powered by ViewVC 1.1.22