/[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.114 - (hide annotations) (download)
Wed Apr 2 23:41:22 2008 UTC (15 years, 11 months ago) by jmc
Branch: MAIN
Changes since 1.113: +2 -2 lines
minor change

1 edhill 1.19 #! /usr/bin/env bash
2 edhill 1.1 #
3 jmc 1.114 # $Header: /u/gcmpack/MITgcm/verification/testreport,v 1.113 2008/03/12 02:20:04 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.83 echo " (-mth) run multi threaded (using eedata.mth)"
15     echo " (-mpi) compile and run using MPI"
16 edhill 1.10 echo " (-ieee|-noieee) if possible, use IEEE compiler flags"
17 edhill 1.41 echo " (DEF=\"-ieee\")"
18 jmc 1.109 echo " (-gsl) compile with \"-gsl\" flag"
19 jmc 1.89 echo " (-of=|-optfile=)STRING list of optfiles to use"
20 edhill 1.20 echo " (-a|-addr) STRING list of email recipients"
21 jmc 1.108 echo " (DEF=\"\" no email is sent)"
22 jmc 1.113 echo " (-mpd|-mpackdir) DIR location of the mpack utility"
23     echo " (DEF=\"../tools/mpack-1.6\")"
24 jmc 1.84 echo " (-t|-tdir) STRING list of group and/or exp. dirs to test"
25     echo " (recognized groups: basic, tutorials)"
26     echo " (DEF=\"\" which test all)"
27 jmc 1.89 echo " (-skd|-skipdir) STRING list of exp. dirs to skip"
28     echo " (DEF=\"\" which test all)"
29 edhill 1.20 echo " (-b|-bash) STRING preferred location of a \"bash\" or"
30     echo " Bourne-compatible \"sh\" shell"
31     echo " (DEF=\"\" for \"bash\")"
32 edhill 1.24 echo " (-adm|-ad) perform an adjoint run"
33 edhill 1.20 echo " (-command) STRING command to run"
34 edhill 1.6 echo " (DEF=\"make output.txt\")"
35 edhill 1.20 echo " (-m|-make) STRING command to use for \"make\""
36 edhill 1.8 echo " (DEF=\"make\")"
37 jmc 1.70 echo " (-odir) STRING used to build output directory name"
38     echo " (DEF=\"hostname\")"
39 jmc 1.89 echo " (-ptr|-ptracers) STRING specify which ptracers to test"
40 edhill 1.50 echo " (DEF=\"1 2 3 4 5\")"
41 jmc 1.92 echo " (-match) NUMBER Matching Criteria (number of digits)"
42     echo " (DEF=\"12\")"
43 edhill 1.43 echo " (-j) JOBS use \"make -j JOBS\" for parallel builds"
44 edhill 1.10 echo " (-clean) *ONLY* run \"make CLEAN\""
45 ce107 1.90 echo " (-quick|-q) same as \"-nogenmake -noclean -nodepend\""
46     echo " (-nogenmake|-ng) skip the genmake stage"
47     echo " (-noclean|-nc) skip the \"make clean\" stage"
48     echo " (-nodepend|-nd) skip the \"make depend\" stage"
49     echo " (-deldir|-dd) on success, delete the output directory"
50     echo " (-ts) provide timing information per timestep"
51     echo " (-papis) provide MFlop/s per timestep using PAPI"
52     echo " (-pcls) provide MFlop/s per timestep using PCL"
53 edhill 1.6 echo
54 edhill 1.50 echo "and where STRING can be a whitespace-delimited list"
55 edhill 1.6 echo "such as:"
56 edhill 1.50 echo
57 edhill 1.6 echo " -t 'exp0 exp2 exp3' "
58     echo " -addr='abc@123.com testing@home.org'"
59 edhill 1.1 echo
60 edhill 1.50 echo "provided that the expression is properly quoted within the current"
61     echo "shell (note the use of single quotes to protect white space)."
62     echo
63 edhill 1.1 exit 1
64     }
65    
66     # build the mpack utility
67     build_mpack()
68     {
69 edhill 1.34 printf "building the mpack utility... "
70 jmc 1.113 MPACK="$MPACKDIR/mpack"
71     if test ! -x $MPACK ; then
72 edhill 1.1 if test ! -d $MPACKDIR ; then
73 edhill 1.20 echo
74 edhill 1.1 echo "Error: can't find \"$MPACKDIR\""
75     echo " are you sure this program is being run in the correct "
76     echo " (that is, \"MITGCM_ROOT\verification\") directory?"
77 edhill 1.20 echo
78     HAVE_MPACK=f
79 edhill 1.1 fi
80 edhill 1.26 if test "x$CC" = x ; then
81     export CC=cc
82     fi
83 jmc 1.112 printf "building mpack (using CC=$CC)... "
84 edhill 1.25 ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1
85 edhill 1.1 RETVAL=$?
86     if test "x$RETVAL" != x0 ; then
87     echo
88     echo "Error building the mpack tools at: $MPACK_DIR"
89 edhill 1.20 echo
90     HAVE_MPACK=f
91     else
92 edhill 1.25 rm -f tr_build_mpack.out
93 edhill 1.20 HAVE_MPACK=t
94 jmc 1.113 echo "done"
95 edhill 1.1 fi
96 edhill 1.20 else
97     HAVE_MPACK=t
98 jmc 1.113 echo "already exist"
99 edhill 1.1 fi
100     }
101    
102 jmc 1.93 testoutput_var()
103 edhill 1.1 {
104 jmc 1.99 # testoutput_var dir s1 label subdir reference_output
105 edhill 1.1 #
106 jmc 1.93 # compares 1 variable output selected from file $dir/$subdir/$OUTPUTFILE
107 jmc 1.99 # with same output from reference file $dir/results/$reference_output
108 jmc 1.93 # using search strings s1 and text label
109 edhill 1.1
110     if [ $debug -gt 0 ]; then
111 jmc 1.93 echo testoutput_var: grep "$2" $1/$4/$OUTPUTFILE 1>&2
112 edhill 1.1 fi
113 jmc 1.87 if [ -r $1/$4/$OUTPUTFILE ]; then
114     grep "$2" $1/$4/$OUTPUTFILE | sed 's/.*=//' | cat -n > tmp1.txt
115 jmc 1.67 lncntA=`wc -l tmp1.txt | awk '{print $1}' `
116 jmc 1.100 if [ $lncntA -lt 2 ]; then
117 edhill 1.1 if [ $verbose -gt 0 ]; then
118     echo Not enough lines of output when searching for "$2" 1>&2
119     fi
120     return 99
121     fi
122     else
123 jmc 1.93 echo testoutput_var: $OUTPUTFILE from model run was not readable 1>&2
124 edhill 1.1 return 99
125     fi
126     if [ $debug -gt 0 ]; then
127 jmc 1.99 echo testoutput_var: grep "$2" $1/results/$5 1>&2
128 edhill 1.1 fi
129 jmc 1.99 grep "$2" $1/results/$5 | sed 's/.*=//' | cat -n > tmp2.txt
130 jmc 1.67 lncntB=`wc -l tmp2.txt | awk '{print $1}' `
131 jmc 1.100 if [ $lncntB -lt 2 ]; then
132 edhill 1.1 if [ $verbose -gt 0 ]; then
133     echo Not enough lines of output when searching for "$2" 1>&2
134     fi
135     return 99
136     fi
137 jmc 1.67 if [ $lncntA -ne $lncntB ]; then
138     if [ $verbose -gt 0 ]; then
139     echo Not same Nb of lines when searching for "$2" ":" $lncntA $lncntB 1>&2
140     fi
141     return 99
142     fi
143 edhill 1.72 has_nan=`cat tmp1.txt | grep -i nan | wc -l`
144     if [ $has_nan -gt 0 ] ; then
145 jmc 1.93 echo testoutput_var: $OUTPUTFILE contains $has_nan NaN values 1>&2
146 edhill 1.72 return 99
147     fi
148     has_inf=`cat tmp1.txt | grep -i inf | wc -l`
149     if [ $has_inf -gt 0 ] ; then
150 jmc 1.93 echo testoutput_var: $OUTPUTFILE contains $has_inf Inf values 1>&2
151 jmc 1.71 return 99
152     fi
153 edhill 1.1 if [ $debug -gt 0 ]; then
154 jmc 1.93 echo testoutput_var: join tmp1.txt tmp2.txt 1>&2
155 edhill 1.1 fi
156     join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt
157     if [ $debug -gt 0 ]; then
158 jmc 1.93 echo testoutput_var: compare_lines 1>&2
159 edhill 1.1 fi
160 edhill 1.22 if [ $verbose -gt 1 ]; then
161     cat tmp3.txt 1>&2
162     fi
163     echo "-1" >> tmp3.txt
164 edhill 1.23 # On the SGI O3K (*not* the O2K), "cat -n" inserts a ":" after the line number
165     cat tmp3.txt | sed -e 's|:||g' > tmp4.txt
166 jmc 1.91 digits_of_similarity=`./tr_cmpnum < tmp4.txt`
167 edhill 1.1 if [ $digits_of_similarity -eq 99 ]; then
168     if [ $verbose -gt 0 ]; then
169 jmc 1.99 echo testoutput_var: No comparison was available for \"$3\" 1>&2
170 edhill 1.1 fi
171     digits_of_similarity=99
172     else
173     if [ $verbose -gt 0 ]; then
174 jmc 1.99 echo There were $digits_of_similarity decimal places of similarity for \"$3\" 1>&2
175 edhill 1.1 fi
176     fi
177 edhill 1.23 rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt
178 edhill 1.1
179     return $digits_of_similarity
180     }
181    
182 edhill 1.49 check_for_add_mon_output()
183     {
184     # Check for additional types of monitor output
185     if test "x$1" = x ; then
186     return
187     fi
188    
189 edhill 1.50 for ii in $PTRACERS_NUM ; do
190     eval "HAVE_PTR0"$ii"=f"
191     done
192    
193 edhill 1.49 ptr_add="trcstat_ptracerXX_min trcstat_ptracerXX_max"
194     ptr_add="$ptr_add trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
195 edhill 1.50 for ii in $PTRACERS_NUM ; do
196 edhill 1.49 for jj in $ptr_add ; do
197     name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
198     tst=`grep $name $1 | wc -l | awk '{print $1}'`
199     if test ! "x$tst" = x0 ; then
200     eval "HAVE_PTR0"$ii"=t"
201     fi
202     done
203     # eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"'
204     done
205     }
206    
207 jmc 1.93 testoutput_run()
208 edhill 1.1 {
209 jmc 1.99 # testoutput_run directory subdir reference_output
210 edhill 1.1 #
211 jmc 1.93 # test output from 1 run in "directory"
212 jmc 1.103 # --> same processing for adjoint & forward test
213 jmc 1.94 # default list of output variables to be checked:
214     # 1rst : main variable used to decide if it pass or FAIL
215     # others : number of matching digits to be printed in summary.txt
216     listChk=$DEF_CHECK_LIST
217     # load experiment-specific list from file "tr_checklist" (if it exist)
218     if test -r $1/$2/tr_checklist ; then listChk=`cat $1/$2/tr_checklist` ; fi
219     sVar=`echo $listChk | awk '{print $1}'`
220     # remove 1rst var and expand the list: + => min max mean s.d
221 jmc 1.97 listVar=`echo $listChk | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' \
222     | sed 's/+//g' | sed "s/^$sVar//"`
223 jmc 1.94 if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(I)='$listVar'" 1>&2 ; fi
224     for ii in 1 2 3 4 5 6 7 8 9 ; do
225     tst=`eval 'echo "$HAVE_PTR0'$ii'"'`
226     #echo "-- ptr test=" $tst "number of var=" `echo $listVar | awk '{print NF}'` 1>&2
227     if test "x$tst" != xt ; then listVar=`echo "$listVar" | sed "s/ pt$ii..//g"` ; fi
228     done
229     tst=`echo $sVar $listVar | awk '{ for(i=2;i<=NF;i++){t+=($i==$1)}; print t }'`
230     if test $tst != 1 ; then
231     if test $tst = 0 ; then echo "==> WARNING: selected var >$sVar< not found" 1>&2
232     else echo "==> WARNING: found selected var >$sVar< $tst times" 1>&2 ; fi
233     echo "==> WARNING: in checked list:" $listVar 1>&2
234     #- put it back once:
235     listVar=" $sVar "`echo "$listVar " | sed "s/ $sVar / /g"`
236     fi
237     if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(M)='$listVar'" 1>&2 ; fi
238     echo "listVar='$listVar'" > $CDIR"/summary.txt"
239     allargs=""
240     for xx in $listVar
241     do
242     case $xx in
243     'PS') if [ $debug -gt 0 ]
244     then echo testoutput_run: testoutput_var $1 cg2d_init_res 1>&2 ; fi
245 jmc 1.99 testoutput_var $1 "cg2d_init_res" "Press. Solver (cg2d)" $2 $3; yy=$?
246 jmc 1.94 if [ $debug -gt 0 ] ; then echo testoutput_run: cg2dres=$yy 1>&2 ; fi ;;
247 jmc 1.101 'Cost') testoutput_var $1 "ADM precision_derivative_cost" "ADM Cost" $2 $3; yy=$? ;;
248     'Grad') testoutput_var $1 "ADM precision_derivative_grad" "ADM Grad" $2 $3; yy=$? ;;
249 jmc 1.99 'Tmn') testoutput_var $1 "dynstat_theta_min" "Theta minimum" $2 $3; yy=$? ;;
250     'Tmx') testoutput_var $1 "dynstat_theta_max" "Theta maximum" $2 $3; yy=$? ;;
251     'Tav') testoutput_var $1 "dynstat_theta_mean" "Theta mean" $2 $3; yy=$? ;;
252     'Tsd') testoutput_var $1 "dynstat_theta_sd" "Theta Std.Dev" $2 $3; yy=$? ;;
253     'Smn') testoutput_var $1 "dynstat_salt_min" "Salt minimum" $2 $3; yy=$? ;;
254     'Smx') testoutput_var $1 "dynstat_salt_max" "Salt maximum" $2 $3; yy=$? ;;
255     'Sav') testoutput_var $1 "dynstat_salt_mean" "Salt mean" $2 $3; yy=$? ;;
256     'Ssd') testoutput_var $1 "dynstat_salt_sd" "Salt Std.Dev" $2 $3; yy=$? ;;
257 jmc 1.94 'Umn') testoutput_var $1 "dynstat_uvel_min" "U minimum" $2 $3; yy=$? ;;
258     'Umx') testoutput_var $1 "dynstat_uvel_max" "U maximum" $2 $3; yy=$? ;;
259     'Uav') testoutput_var $1 "dynstat_uvel_mean" "U mean" $2 $3; yy=$? ;;
260 jmc 1.99 'Usd') testoutput_var $1 "dynstat_uvel_sd" "U Std.Dev" $2 $3; yy=$? ;;
261 jmc 1.94 'Vmn') testoutput_var $1 "dynstat_vvel_min" "V minimum" $2 $3; yy=$? ;;
262     'Vmx') testoutput_var $1 "dynstat_vvel_max" "V maximum" $2 $3; yy=$? ;;
263     'Vav') testoutput_var $1 "dynstat_vvel_mean" "V mean" $2 $3; yy=$? ;;
264 jmc 1.99 'Vsd') testoutput_var $1 "dynstat_vvel_sd" "V Std.Dev" $2 $3; yy=$? ;;
265 jmc 1.94 'pt1mn'|'pt2mn'|'pt3mn'|'pt4mn'|'pt5mn') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
266     testoutput_var $1 "trcstat_ptracer0"$ii"_min" "p0"$ii"_min" $2 $3; yy=$? ;;
267     'pt1mx'|'pt2mx'|'pt3mx'|'pt4mx'|'pt5mx') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
268     testoutput_var $1 "trcstat_ptracer0"$ii"_max" "p0"$ii"_max" $2 $3; yy=$? ;;
269     'pt1av'|'pt2av'|'pt3av'|'pt4av'|'pt5av') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
270     testoutput_var $1 "trcstat_ptracer0"$ii"_mean" "p0"$ii"_mean" $2 $3; yy=$? ;;
271     'pt1sd'|'pt2sd'|'pt3sd'|'pt4sd'|'pt5sd') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
272 jmc 1.99 testoutput_var $1 "trcstat_ptracer0"$ii"_sd" "p0"$ii"_StDv" $2 $3; yy=$? ;;
273 jmc 1.101 'Qntmn') testoutput_var $1 "extforcing_qnet_min" "Qnet minimum" $2 $3; yy=$? ;;
274     'Qntmx') testoutput_var $1 "extforcing_qnet_max" "Qnet maximum" $2 $3; yy=$? ;;
275     'Qntav') testoutput_var $1 "extforcing_qnet_mean" "Qnet mean" $2 $3; yy=$? ;;
276     'Qntsd') testoutput_var $1 "extforcing_qnet_sd" "Qnet Std.Dev" $2 $3; yy=$? ;;
277     'aSImn') testoutput_var $1 "seaice_area_min" "SIce Area min" $2 $3; yy=$? ;;
278     'aSImx') testoutput_var $1 "seaice_area_max" "SIce Area max" $2 $3; yy=$? ;;
279     'aSIav') testoutput_var $1 "seaice_area_mean" "SIce Area mean" $2 $3; yy=$? ;;
280     'aSIsd') testoutput_var $1 "seaice_area_sd" "SIce Area StDv" $2 $3; yy=$? ;;
281     'hSImn') testoutput_var $1 "seaice_heff_min" "SIce Heff min" $2 $3; yy=$? ;;
282     'hSImx') testoutput_var $1 "seaice_heff_max" "SIce Hell max" $2 $3; yy=$? ;;
283     'hSIav') testoutput_var $1 "seaice_heff_mean" "SIce Hell mean" $2 $3; yy=$? ;;
284     'hSIsd') testoutput_var $1 "seaice_heff_sd" "SIce Hell StDv" $2 $3; yy=$? ;;
285     'AthSiG') testoutput_var $1 "thSI_Ice_Area_G" "thSIc Area Global" $2 $3; yy=$? ;;
286     'AthSiS') testoutput_var $1 "thSI_Ice_Area_S" "thSIc Area South" $2 $3; yy=$? ;;
287     'AthSiN') testoutput_var $1 "thSI_Ice_Area_N" "thSIc Area North" $2 $3; yy=$? ;;
288     'HthSiG') testoutput_var $1 "thSI_IceH_ave_G" "thSIc H Global" $2 $3; yy=$? ;;
289     'HthSiS') testoutput_var $1 "thSI_IceH_ave_S" "thSIc H South" $2 $3; yy=$? ;;
290     'HthSiN') testoutput_var $1 "thSI_IceH_ave_N" "thSIc H North" $2 $3; yy=$? ;;
291 jmc 1.94 *) yy=99; echo "WARNING: asking for var=$xx : not recognized !" 1>&2 ;;
292     esac
293     if test $xx = $sVar
294     then allargs="$allargs > $yy <"
295     else allargs="$allargs $yy"
296     fi
297     done
298    
299     nbVar=`echo $listVar | awk '{print NF}'`
300 jmc 1.97 if [ $nbVar -lt $LEN_CHECK_LIST ] ; then
301 jmc 1.94 #-- fill line (up to standard length) with dot:
302 jmc 1.97 adNul=`expr $LEN_CHECK_LIST - $nbVar | awk '{for(i=1;i<=$1;i++){print "."}}'`
303 jmc 1.94 echo $allargs $adNul
304     else
305     echo $allargs
306     fi
307 jmc 1.103 # <-- same processing for adjoint & forward test
308 edhill 1.1 }
309    
310     genmakemodel()
311     {
312     # genmakemodel directory
313 edhill 1.10 if test "x$NOGENMAKE" = xt ; then
314     echo "genmake skipped!"
315     else
316 edhill 1.34 if test "x$BASH" = x ; then
317     GENMAKE2="../../../tools/genmake2"
318     else
319     GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
320     fi
321 edhill 1.10 (
322     cd $1;
323 edhill 1.24 command="$GENMAKE2 -ds -m $MAKE"
324     if test "x$ADM" = x ; then
325     command="$command --mods=../code"
326     else
327     command="$command --mods=../code_ad"
328     fi
329 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
330     command="$command --optfile=$OPTFILE"
331     fi
332     if test "x$IEEE" != x ; then
333     command="$command -ieee"
334     fi
335 jmc 1.109 if test "x$GSL" = xt ; then
336     command="$command -gsl"
337     fi
338 edhill 1.66 if test "x$MPI" = xt ; then
339     command="$command -mpi"
340     fi
341 ce107 1.90 if test "x$TS" = xt ; then
342     command="$command -ts"
343     fi
344     if test "x$PAPIS" = xt ; then
345     command="$command -papis"
346     else
347     if test "x$PCLS" = xt ; then
348     command="$command -pcls"
349     fi
350     fi
351 edhill 1.10 printf 'genmake ... ' 1>&2
352     $command > make.log 2>&1
353     RETVAL=$?
354 edhill 1.44 # Reduce the size of the testing emails!
355 edhill 1.47 head -100 Makefile > $CDIR/Makefile_head
356 edhill 1.10 if test "x$RETVAL" != x0 ; then
357     tail make.log
358     echo "genmakemodel: genmake failed" 1>&2
359 edhill 1.21 cp genmake_* make.log $CDIR
360 edhill 1.10 return 1
361     else
362 edhill 1.20 echo "successful" 1>&2
363 edhill 1.1 fi
364 edhill 1.10 )
365     fi
366 edhill 1.1 }
367    
368     makeclean()
369     {
370     # makeclean directory
371 edhill 1.10 if test "x$NOCLEAN" = xt ; then
372 jmc 1.83 echo "make Clean skipped!"
373 edhill 1.10 else
374     (
375     cd $1;
376 jmc 1.87 #if test -e $OUTPUTFILE ; then rm -f $OUTPUTFILE ; fi
377 edhill 1.10 if test -r Makefile ; then
378 jmc 1.83 printf 'clean build-dir: make Clean ... ' 2>&1
379     $MAKE Clean >> make.log 2>&1
380 edhill 1.10 RETVAL=$?
381     if test "x$RETVAL" != x0 ; then
382     tail make.log
383 jmc 1.83 echo "makeclean: \"make Clean\" failed" 1>&2
384 edhill 1.10 cp make.log $CDIR"/make.log"
385     return 1
386     fi
387     fi
388 edhill 1.20 echo successful 1>&2
389 edhill 1.10 exit 0
390     )
391     fi
392     }
393    
394 jmc 1.83 run_clean()
395 edhill 1.68 {
396 jmc 1.83 # run_clean directory
397     if test "x$NOCLEAN" = xt ; then
398     echo "run_clean skipped!"
399     else
400 edhill 1.68 (
401     cd $1;
402 jmc 1.83 printf 'clean run-dir ... ' 2>&1
403     # part of what is done after "make clean" when doing "make CLEAN"
404     find . -name "*.meta" -exec rm {} \;
405     find . -name "*.data" -exec rm {} \;
406     find . -name "fort.*" -exec rm {} \;
407     find . -type l -exec rm {} \;
408     rm -f $EXECUTABLE *.txt STD* *diagnostics.log datetime
409     rm -rf mnc_test_*
410 jmc 1.107 rm -f *_MIT_CE_000.opt0000 costfunction*0000
411 jmc 1.83 echo successful 1>&2
412 edhill 1.68 exit 0
413     )
414     fi
415     }
416    
417 edhill 1.10 makedependmodel()
418     {
419     # makedependmodel directory
420     if test "x$NODEPEND" = xt ; then
421     echo "make depend skipped!"
422     else
423     (
424     cd $1;
425     printf 'make depend ... ' 1>&2
426     $MAKE depend >> make.log 2>&1
427 edhill 1.1 RETVAL=$?
428     if test "x$RETVAL" != x0 ; then
429     tail make.log
430 edhill 1.10 echo "makedependmodel: make depend failed" 1>&2
431 edhill 1.1 cp make.log $CDIR"/make.log"
432     return 1
433 edhill 1.10 else
434 edhill 1.20 echo successful 1>&2
435 edhill 1.1 fi
436 edhill 1.10 )
437     fi
438 edhill 1.1 }
439    
440     makemodel()
441     {
442     # makemodel directory
443     (
444     cd $1;
445     if test -r Makefile ; then
446     printf 'make ... ' 1>&2
447 edhill 1.24 if test "x$ADM" = x ; then
448 edhill 1.43 if test "x$JOBS" = x ; then
449     $MAKE >> make.log 2>&1
450     else
451     $MAKE -j $JOBS >> make.log 2>&1
452     fi
453 edhill 1.24 else
454     $MAKE adall >> make.log 2>&1
455     fi
456 edhill 1.1 RETVAL=$?
457     if test "x$RETVAL" != x0 ; then
458     tail make.log
459     echo failed 1>&2
460     cp make.log $CDIR"/make.log"
461     return 1
462     else
463 edhill 1.20 echo successful 1>&2
464 edhill 1.1 fi
465     fi
466     )
467     }
468    
469 edhill 1.27 symlink_mpifiles()
470     {
471     # Put special links so that MPI specific files are used
472     # This MUST be invoked between makeclean and makelinks because
473     # the Makefile will link to non-mpi files by default
474    
475     dir=$1
476     code_dir=$2
477     BUILD_DIR=$dir/$3
478     CODE_DIR=$dir/$code_dir
479 edhill 1.45
480 edhill 1.27 # These are files that should replace their counter-part when using -mpi
481 mlosch 1.111 MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi" -print)`
482 edhill 1.27
483     # Is this an MPI run?
484     if test "x$MPI" = xt ; then
485     # YES: We symbolically link these files to the build
486     # dir so long as there is no real file in place
487     for ii in $MPI_FILES ; do
488     i=`echo $ii | sed 's:^\./::'`
489     name=`echo $i | sed 's:_mpi::' `
490     cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1
491     RETVAL=$?
492     if test "x$RETVAL" != x0 ; then
493     if ! test -f $BUILD_DIR/$i ; then
494 edhill 1.45 #echo Linking $name to $i
495 edhill 1.27 (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
496     fi
497     fi
498     done
499     else
500 edhill 1.45 # NO: We undo any _mpi symbolically linked files
501 edhill 1.27 for ii in $MPI_FILES ; do
502     i=`echo $ii | sed 's:^\./::'`
503     name=`echo $i | sed 's:_mpi::' `
504     if test -L $BUILD_DIR/$name ; then
505 edhill 1.45 cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
506     RETVAL=$?
507     if test "x$RETVAL" = x0 ; then
508     #echo Un-linking $name from $linktarg
509 edhill 1.27 rm -f $BUILD_DIR/$name
510     fi
511     fi
512     done
513     fi
514    
515     }
516    
517 edhill 1.1 linkdata()
518     {
519 jmc 1.83 # linkdata run_dir input_dir_1 input_dir_2 ...
520 edhill 1.1 #
521     # symbolically link data files to run directory
522 jmc 1.83 if test -d $1 ; then
523 edhill 1.12 (
524 jmc 1.83 cd $1 ; shift
525     if test -r "../"$1"/eedata.mth" ; then
526     # found eedata.mth in 1rst input dir and it is readable
527     if test "x$MULTI_THREAD" = "xt" ; then
528     # multi-threaded test: remove symbolic link & link eedata.mth
529     if test -h eedata ; then rm -f eedata ; fi
530     if test ! -r eedata ; then
531     ln -sf "../"$1"/eedata.mth" eedata ;
532     printf 'eedata.mth ' 1>&2
533 edhill 1.24 fi
534 jmc 1.83 else
535     # not multi-threaded test: remove eedata symbolic link
536     if test -h eedata ; then rm -f eedata ; fi
537     fi
538     fi
539 jmc 1.108 prevDir='NONE'
540 jmc 1.83 for ldir in $* ; do
541 jmc 1.108 if test -d "../"$ldir -a $ldir != $prevDir ; then
542 jmc 1.83 printf 'ldir='${ldir} 1>&2
543     files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
544     for i in $files ; do
545     if test ! -d "../"$ldir/$i ; then
546     if test ! -r $i ; then
547     printf ' '$i 1>&2
548     ln -sf "../"$ldir"/"$i $i
549     fi
550     fi
551     done
552     if test -x "../"$ldir"/"prepare_run ; then
553     "../"$ldir"/"prepare_run
554 edhill 1.24 fi
555 jmc 1.83 printf ' ; ' 1>&2
556 jmc 1.82 fi
557 jmc 1.108 prevDir=$ldir
558 jmc 1.83 done
559 edhill 1.12 )
560 edhill 1.1 fi
561     }
562    
563     runmodel()
564     {
565 edhill 1.6 # runmodel directory
566 edhill 1.1 #
567 edhill 1.24 # runs "$COMMAND in "directory"
568 edhill 1.6 # (where "$COMMAND" is relative to "directory")
569 edhill 1.1 (
570     cd $1
571 jmc 1.75 printf 'runmodel in %s ...' $1 1>&2
572 edhill 1.6 # make output.txt
573 edhill 1.38 echo
574 jmc 1.106 if test -L $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
575     diff -q $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
576     outD=$? ; if test $outD != 0 ; then rm -f $EXECUTABLE ; rm -f run.log ; fi
577     fi
578 jmc 1.83 if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
579 jmc 1.88 echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_00
580 jmc 1.83 ln -sf "../"$builddir"/"$EXECUTABLE .
581     fi
582     if test ! -x $EXECUTABLE ; then
583 jmc 1.88 rm -f run.log ; touch run.log
584     if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
585 jmc 1.83 echo " no executable:" $EXECUTABLE >> run.log
586     RETVAL=8
587 jmc 1.88 ENDVAL=-1
588 jmc 1.75 else
589 jmc 1.98 if test ! -f $OUTPUTFILE -o $OUTPUTFILE -ot $EXECUTABLE ; then
590     # output do not exist or is older than executable:
591 jmc 1.88 rm -f run.log ; touch run.log
592     if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
593 jmc 1.83 ( eval $COMMAND ) >> run.log 2>&1
594     RETVAL=$?
595     else
596     RETVAL=0
597 jmc 1.88 if test -f run.log ; then
598     if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
599     echo "---------->> $OUTPUTFILE is up to date " >> run.log 2>&1
600     else
601     touch run.log
602     if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
603     echo "---------->> $OUTPUTFILE is up to date " >> run.log 2>&1
604     echo " no previous run.log: assume NORMAL END" >> run.log 2>&1
605     fi
606 jmc 1.83 fi
607 jmc 1.88 ENDVAL=`cat run.log | grep -v 'ABNORMAL END' | grep -c 'NORMAL END'`
608 jmc 1.75 fi
609 jmc 1.88 rm -f run.log_00
610     #if test "x$RETVAL" = x0 ; then
611     if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
612 jmc 1.46 tail run.log
613 edhill 1.20 echo successful 1>&2
614 edhill 1.44 # === Reduce the size of the testing emails!
615 jmc 1.87 #cp $OUTPUTFILE $CDIR"/"$OUTPUTFILE
616 jmc 1.48 if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
617 edhill 1.6 return 0
618     else
619 edhill 1.20 tail run.log
620 jmc 1.88 echo failed '(run:' $RETVAL ' end:' $ENDVAL ')' 1>&2
621 edhill 1.20 cp run.log $CDIR"/run.log"
622 jmc 1.48 if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
623 edhill 1.6 return 1
624 edhill 1.1 fi
625     )
626     }
627    
628     createcodelet()
629     {
630     # create codelet for comparing model output
631    
632 jmc 1.112 printf "creating the comparison code (using CC=$CC)... "
633 jmc 1.91 cat > tr_cmpnum.c <<EOF
634 edhill 1.22 #include <stdio.h>
635     #include <math.h>
636     int main( int argc, char** argv ) {
637 jmc 1.91 int linnum,cmplin,best,lncnt;
638 edhill 1.52 double a,b,abave,relerr;
639 jmc 1.57 best = -22;
640 adcroft 1.33 lncnt = 0;
641 jmc 1.96 while( 1 & ( (lncnt+=1) < 999 ) ) {
642 edhill 1.22 scanf("%d", &linnum);
643     if (linnum == -1) break;
644     scanf("%lf", &a); scanf("%lf", &b);
645 edhill 1.52 abave = 0.5*(fabs(a)+fabs(b));
646 jmc 1.91 if ( abave == abave ) {
647     if (abave > 0.0) {
648     relerr=fabs(a-b)/abave;
649     if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
650     else { cmplin = -16 ; }
651     best = (best > cmplin) ? best : cmplin; }
652     else { cmplin = -22 ; }
653     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
654     }
655     else {
656     /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
657     break; }
658 edhill 1.22 }
659 adcroft 1.33 if (lncnt == 999) best=-29;
660 jmc 1.91 if (linnum != -1) best=-99;
661 edhill 1.22 printf("%d\n", -best);
662     return 0;
663     }
664     EOF
665 jmc 1.91 $CC -o tr_cmpnum tr_cmpnum.c -lm
666 edhill 1.1
667 jmc 1.91 if [ -x ./tr_cmpnum ]; then
668 edhill 1.1 echo "OK"
669     return 0
670     else
671     echo
672 edhill 1.58 echo "ERROR: failed to compile comparison code -- please specify"
673     echo " a C compiler using the CC environment variable."
674 edhill 1.1 exit 1
675     fi
676     }
677    
678     formatresults()
679     {
680     # formatresults expt genmake depend make run results*
681    
682     nm=$1
683     printf '%s %s %s %s' $2 $3 $4 $5
684     shift; shift; shift; shift; shift;
685 jmc 1.94 listPrt=$@
686     listRes=`echo $listPrt | sed 's/>//' | sed 's/<//'`
687     xx=`echo $listPrt | sed 's/.*>//' | sed 's/<.*//' | awk '{print $1}'`
688 jmc 1.97 printf '%3s' $listPrt
689 jmc 1.98 # line below does not work on hp-ux_ia64 : do those substitutions later on
690 jmc 1.95 # printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</'
691 edhill 1.1
692 jmc 1.94 if [ $xx = '..' ]; then
693     printf ' N/O '
694     elif [ $xx = '--' ]; then
695     printf ' N/O '
696     elif [ $xx = 99 ]; then
697 edhill 1.1 printf ' N/O '
698     else
699 jmc 1.94 if [ $xx -ge $MATCH_CRIT ]; then
700 edhill 1.1 printf ' pass'
701     else
702     printf ' FAIL'
703     fi
704     fi
705     printf ' %s' $nm
706     printf '\n'
707    
708     }
709    
710     scandirs()
711     {
712 jmc 1.81 if [ $# -eq 1 ]; then
713     for arg in * ; do
714 jmc 1.99 test -f $arg/$1 && echo $arg
715 jmc 1.81 done
716 edhill 1.1 else
717 jmc 1.81 echo $*
718 edhill 1.1 fi
719     }
720    
721    
722     ###############################################################################
723    
724    
725     # Default properties
726     debug=0
727     verbose=1
728     clean=0
729 edhill 1.10
730 edhill 1.40 IEEE=true
731 edhill 1.10 if test "x$MITGCM_IEEE" != x ; then
732     IEEE=$MITGCM_IEEE
733     fi
734 jmc 1.109 GSL=f
735 edhill 1.10
736     CLEANUP=f
737     QUICK=f
738     NOGENMAKE=f
739     NOCLEAN=f
740     NODEPEND=f
741 edhill 1.68 POSTCLEAN=f
742 edhill 1.1
743 edhill 1.4 BASH=
744 edhill 1.10 OPTFILE=NONE
745     ADDRESSES=
746 edhill 1.1 TESTDIRS=
747 jmc 1.89 SKIPDIRS=
748 edhill 1.1 MPACKDIR="../tools/mpack-1.6"
749 edhill 1.20 HAVE_MPACK=
750 jmc 1.113 MPACK=
751 edhill 1.24 COMMAND=
752 edhill 1.59 if test "x$MAKE" = x ; then
753     MAKE=make
754     fi
755     if test "x$CC" = x ; then
756     CC=cc
757     fi
758 edhill 1.43 JOBS=
759 edhill 1.7 MPI=f
760 jmc 1.83 MULTI_THREAD=f
761 jmc 1.70 OUTDIR=
762 edhill 1.40 DELDIR=
763 edhill 1.1
764 edhill 1.24 ADM=
765    
766 edhill 1.49 # Additional monitor types
767 edhill 1.50 PTRACERS_NUM="1 2 3 4 5"
768 edhill 1.49
769 jmc 1.92 MATCH_CRIT=13
770    
771 edhill 1.34 printf "parsing options... "
772 edhill 1.1
773     ac_prev=
774     for ac_option ; do
775    
776     # If the previous option needs an argument, assign it.
777     if test -n "$ac_prev"; then
778     eval "$ac_prev=\$ac_option"
779     ac_prev=
780     continue
781     fi
782    
783     ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
784    
785     case $ac_option in
786    
787     -help | --help | -h | --h)
788     usage ;;
789    
790 edhill 1.2 -optfile | --optfile | -of | --of)
791 edhill 1.10 ac_prev=OPTFILE ;;
792 edhill 1.2 -optfile=* | --optfile=* | -of=* | --of=*)
793 edhill 1.10 OPTFILE=$ac_optarg ;;
794 edhill 1.1
795     -addr | --addr | -a | --a)
796     ac_prev=ADDRESSES ;;
797     -addr=* | --addr=*)
798     ADDRESSES=$ac_optarg ;;
799 jmc 1.113 -mpackdir | --mpackdir | -mpd | --mpd)
800     ac_prev=MPACKDIR ;;
801     -mpackdir=* | --mpackdir=* | -mpd=* | --mpd=*)
802     MPACKDIR=$ac_optarg ;;
803 edhill 1.1
804     -tdir | --tdir | -t | --t)
805     ac_prev=TESTDIRS ;;
806     -tdir=* | --tdir=*)
807     TESTDIRS=$ac_optarg ;;
808 edhill 1.4
809 jmc 1.89 -skipdir | --skipdir | -skd | --skd)
810     ac_prev=SKIPDIRS ;;
811     -skipdir=* | --skipdir=*)
812     SKIPDIRS=$ac_optarg ;;
813    
814 edhill 1.4 -bash | --bash | -b | --b)
815     ac_prev=BASH ;;
816     -bash=* | --bash=*)
817     BASH=$ac_optarg ;;
818 edhill 1.5
819 edhill 1.6 -command | --command | -c | --c)
820     ac_prev=COMMAND ;;
821     -command=* | --command=*)
822     COMMAND=$ac_optarg ;;
823 edhill 1.8
824     -make | --make | -m | --m)
825     ac_prev=MAKE ;;
826     -make=* | --make=*)
827     MAKE=$ac_optarg ;;
828 edhill 1.1
829 jmc 1.70 -odir | --odir)
830     ac_prev=OUTDIR ;;
831     -odir=* | --odir=*)
832     OUTDIR=$ac_optarg ;;
833    
834 edhill 1.50 -ptracers | --ptracers | -ptr | --ptr)
835     ac_prev=PTRACERS_NUM ;;
836     -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
837     PTRACERS_NUM=$ac_optarg ;;
838    
839 jmc 1.92 -match | --match ) ac_prev=MATCH_CRIT ;;
840     -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
841    
842 edhill 1.43 -j) ac_prev=JOBS ;;
843     -j=*) JOBS=$ac_optarg ;;
844    
845 edhill 1.10 -clean | --clean)
846 jmc 1.69 CLEANUP=t ; DELDIR=t ;;
847 edhill 1.10
848     -quick | --quick | -q | --q)
849     QUICK=t ;;
850     -nogenmake | --nogenmake | -ng | --ng)
851     NOGENMAKE=t ;;
852     -noclean | --noclean | -nc | --nc)
853     NOCLEAN=t ;;
854     -nodepend | --nodepend | -nd | --nd)
855     NODEPEND=t ;;
856    
857 edhill 1.68 -postclean | --postclean | -pc | --pc)
858     POSTCLEAN=t ;;
859    
860 edhill 1.18 -mpi) MPI=t ;;
861 edhill 1.10
862 jmc 1.83 -mth) MULTI_THREAD=t ;;
863    
864 edhill 1.24 -adm | -ad) ADM=t ;;
865    
866 edhill 1.10 -ieee) IEEE=true ;;
867     -noieee) IEEE= ;;
868 jmc 1.109 -gsl) GSL=t ;;
869 edhill 1.10
870 edhill 1.1 -verbose) verbose=2 ;;
871     -debug) debug=1 ;;
872     -quiet) verbose=0 ;;
873    
874 edhill 1.40 -deldir | -dd) DELDIR=t ;;
875    
876 ce107 1.90 -ts) TS=t;;
877    
878     -papis) PAPIS=t;;
879    
880     -pcls) PCL=t;;
881    
882 edhill 1.1 -*)
883     echo "Error: unrecognized option: "$ac_option
884     usage
885     ;;
886    
887     *)
888     echo "Error: unrecognized argument: "$ac_option
889     usage
890     ;;
891    
892     esac
893    
894     done
895    
896 edhill 1.10 if test "x$QUICK" = xt ; then
897     NOGENMAKE=t
898     NOCLEAN=t
899     NODEPEND=t
900     fi
901    
902 jmc 1.99 #- setting for forward or ADM testing
903     if test "x$ADM" = xt ; then
904     code_dir=code_ad
905 jmc 1.108 inputdir=input_ad
906 jmc 1.99 ref_outp="output_adm.txt"
907     EXECUTABLE="mitgcmuv_ad"
908     else
909     code_dir=code
910 jmc 1.108 inputdir=input
911 jmc 1.99 ref_outp="output.txt"
912     EXECUTABLE="mitgcmuv"
913     fi
914    
915 edhill 1.1 if test "x$TESTDIRS" = x ; then
916 jmc 1.103 LIST=`scandirs results/$ref_outp`
917 jmc 1.84 else
918     #- expand group of experiments:
919     LIST=" "
920     for xx in $TESTDIRS
921     do
922     case $xx in
923 jmc 1.86 'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
924     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
925     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
926 jmc 1.84 ;;
927     'tutorials')
928     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
929     *) LIST=${LIST}" "$xx ;;
930     esac
931     done
932 jmc 1.89 fi
933     #echo 'LIST='${LIST}'<'
934     #- skip dirs, remove duplicate and non-directory:
935     TESTDIRS=" "
936     count=0
937     for xx in $LIST
938     do
939     yy=`echo $SKIPDIRS | grep -c $xx`
940     if test $yy = 0 ; then
941 jmc 1.84 if test -d $xx ; then
942     yy=`echo $TESTDIRS | grep -c $xx`
943     if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
944 jmc 1.89 else count=1 ;
945     echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
946     fi
947     else
948     if test $count = 1 ; then echo -n ", \"$xx\""
949     else count=1 ; echo "" ; echo -n " skip: \"$xx\""
950 jmc 1.84 fi
951 jmc 1.89 fi
952     done
953     if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
954 jmc 1.84 #echo 'TESTDIRS='${TESTDIRS}'<'
955 edhill 1.1
956 edhill 1.10 if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
957     OPTFILE=$MITGCM_OF
958     fi
959    
960 jmc 1.99 OUTPUTFILE=$ref_outp
961 jmc 1.87 if test "x$COMMAND" = x ; then
962 jmc 1.77 COMMAND="./$EXECUTABLE > $OUTPUTFILE"
963 edhill 1.24 fi
964 jmc 1.87 if test "x$MPI" = xt ; then
965     OUTPUTFILE="STDOUT.0000"
966 edhill 1.24 fi
967    
968 jmc 1.76 echo "OK (COMMAND= $COMMAND )"
969 edhill 1.1
970 jmc 1.94 # set the Default List of output variables to be checked:
971     # (use default or load experiment-specific list from file "tr_checklist")
972     # content : 1rst = main variable used to decide if it pass or FAIL
973     # others = number of matching digits to be printed in summary.txt
974 jmc 1.99 if test "x$ADM" = x ; then
975 jmc 1.94 DEF_CHECK_LIST='PS PS T+ S+ U+ V+ pt1+ pt2+ pt3+ pt4+ pt5+'
976     EMPTY_RESULTS='.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..'
977 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}'`
978 jmc 1.94 ii=`echo $EMPTY_RESULTS | awk '{print NF}'`
979 jmc 1.97 EMPTY_RESULTS=$EMPTY_RESULTS`expr $LEN_CHECK_LIST - $ii | awk 'BEGIN{FS=":"}{for(i=1;i<=$1;i++){printf " ."}}'`
980 jmc 1.99 else
981 jmc 1.103 DEF_CHECK_LIST='Grad Cost Grad'
982 jmc 1.99 EMPTY_RESULTS='.. ..'
983     LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
984 jmc 1.94 fi
985    
986 edhill 1.1 # create the FORTRAN comparison code
987     createcodelet
988    
989 jmc 1.112 # build the mpack utility (if ADDRESSES = NONE, do it to test the build)
990     if test "x$ADDRESSES" = x ; then
991 edhill 1.32 echo "skipping mpack build"
992     else
993 edhill 1.31 build_mpack
994     fi
995 edhill 1.1
996     # Create a uniquely named directory to store results
997 jmc 1.110 CMDLINE=$0
998     for xx in "$@" ; do CMDLINE="$CMDLINE '$xx'" ; done
999 edhill 1.1 MACH=`hostname`
1000 edhill 1.2 UNAMEA=`uname -a`
1001 edhill 1.1 DATE=`date +%Y%m%d`
1002 edhill 1.25 BASE="tr_"$MACH"_"$DATE"_"
1003 jmc 1.70 if test "x$OUTDIR" != x ; then
1004     BASE="tr_"$OUTDIR"_"$DATE"_"
1005     fi
1006 edhill 1.1 DNUM=0
1007     DRESULTS="$BASE$DNUM"
1008     while test -e $DRESULTS ; do
1009     DNUM=$(( $DNUM + 1 ))
1010     DRESULTS="$BASE$DNUM"
1011     done
1012     mkdir $DRESULTS
1013     RETVAL=$?
1014     if test "x$RETVAL" != x0 ; then
1015 edhill 1.20 echo "ERROR: Can't create results directory \"./$DRESULTS\""
1016 edhill 1.1 exit 1
1017     fi
1018     SUMMARY="$DRESULTS/summary.txt"
1019 edhill 1.16 start_date=`date`
1020 edhill 1.17 echo $start_date > $SUMMARY
1021 jmc 1.110 echo 'run:' $CMDLINE >> $SUMMARY
1022     echo 'on :' $UNAMEA >> $SUMMARY
1023 edhill 1.1
1024 edhill 1.11 of_path=
1025 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
1026     if test -r $OPTFILE ; then
1027 edhill 1.11 # get the path
1028     path=${OPTFILE%/*}
1029     if test "x$path" = x ; then
1030     of_path=`pwd`
1031     else
1032     of_path=`( cd $path > /dev/null 2>&1 ; pwd )`
1033     fi
1034     file=${OPTFILE##*/}
1035     OPTFILE=$of_path/$file
1036 edhill 1.21 cp $OPTFILE $DRESULTS
1037     echo >> $SUMMARY
1038     echo " OPTFILE=$OPTFILE" >> $SUMMARY
1039 edhill 1.11 else
1040 edhill 1.21 echo | tee $SUMMARY
1041     echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
1042     exit 1
1043 edhill 1.10 fi
1044 edhill 1.21 else
1045     echo >> $SUMMARY
1046     echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
1047     echo " so the genmake default will be used." >> $SUMMARY
1048 edhill 1.10 fi
1049     echo
1050     echo >> $SUMMARY
1051 edhill 1.24 if test "x$ADM" = x ; then
1052 jmc 1.92 if [ $MATCH_CRIT -lt 10 ] ;
1053 jmc 1.94 then line_0="default "$MATCH_CRIT ;
1054     else line_0="default "$MATCH_CRIT ; fi
1055     line_0="$line_0 ----T----- ----S----- ----U----- ----V-----"
1056 jmc 1.92 # line_0=" ----T----- ----S----- ----U----- ----V-----"
1057 edhill 1.49 line_1="G D M c m s m s m s m s"
1058     line_2="E p a R g m m e . m m e . m m e . m m e ."
1059     line_3="N n k u 2 i a a d i a a d i a a d i a a d"
1060     line_4="2 d e n d n x n . n x n . n x n . n x n ."
1061 edhill 1.50 for ii in $PTRACERS_NUM ; do
1062 edhill 1.49 # tst=`eval 'echo $HAVE_PTR0'$ii`
1063     # if test "x$tst" = xt ; then
1064     line_0="$line_0 --PTR 0"$ii"--"
1065     line_1="$line_1 m s"
1066     line_2="$line_2 m m e ."
1067     line_3="$line_3 i a a d"
1068     line_4="$line_4 n x n ."
1069     # fi
1070     done
1071     echo "$line_0" | tee -a $SUMMARY
1072     echo "$line_1" | tee -a $SUMMARY
1073     echo "$line_2" | tee -a $SUMMARY
1074     echo "$line_3" | tee -a $SUMMARY
1075     echo "$line_4" | tee -a $SUMMARY
1076     echo " " | tee -a $SUMMARY
1077 edhill 1.24 else
1078     echo "ADJOINT=true" >> $SUMMARY
1079     echo >> $SUMMARY
1080 jmc 1.100 if [ $MATCH_CRIT -lt 10 ] ;
1081 jmc 1.103 then line_0="default "$MATCH_CRIT ;
1082     else line_0="default "$MATCH_CRIT ; fi
1083 jmc 1.100 echo "$line_0" | tee -a $SUMMARY
1084 edhill 1.24 cat << EOF | tee -a $SUMMARY
1085     G D M C G
1086     E p a R o r
1087     N n k u s a
1088     2 d e n t d
1089    
1090     EOF
1091     fi
1092 edhill 1.1
1093 edhill 1.10 # ...and each test directory...
1094     for dir in $TESTDIRS ; do
1095    
1096 jmc 1.106 # set builddir & rundir:
1097     builddir="build"
1098     if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1099     rundir="run"
1100     if test ! -d $dir/$rundir ; then
1101     rundir=$builddir
1102     fi
1103     CODE_DIR=$dir/$code_dir
1104     BUILD_DIR=$dir/$builddir
1105    
1106 edhill 1.10 # Cleanup only!
1107     if test "x$CLEANUP" = xt ; then
1108 jmc 1.106 if test -r $BUILD_DIR/Makefile ; then
1109 jmc 1.83 echo ' ------ clean dir:' $dir/build
1110 jmc 1.106 ( cd $BUILD_DIR ; make CLEAN )
1111 edhill 1.10 fi
1112 jmc 1.106 if test -d $dir/$rundir/CVS ; then
1113     echo ' ------ clean dir:' $dir/$rundir
1114     run_clean $dir/$rundir
1115 edhill 1.10 fi
1116 edhill 1.62 (
1117     cd $dir
1118     rm -rf tr_run.*
1119     )
1120 edhill 1.10 continue
1121 edhill 1.1 fi
1122 edhill 1.3
1123 edhill 1.10 # Verify that the testdir exists and contains previous
1124     # results in the correct location--or skip this directory!
1125 jmc 1.104 fout=$dir"/results/"$ref_outp
1126 edhill 1.24 if test ! -r $fout ; then
1127     echo "can't read \"$fout\" -- skipping $dir"
1128 edhill 1.10 continue
1129     fi
1130 edhill 1.53 if test "x$ADM" = x ; then
1131     check_for_add_mon_output $fout
1132     fi
1133 edhill 1.7
1134 edhill 1.49 # Check for additional types of monitor output
1135    
1136 edhill 1.30 if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1137 edhill 1.28 echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1138     continue
1139     fi
1140 jmc 1.83 if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1141     echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1142     continue
1143     fi
1144    
1145     # Check whether there are "extra runs" for this testdir
1146     extra_runs=
1147 jmc 1.108 ex_run_dirs=`( cd $dir ; echo $inputdir.* )`
1148     #echo "ex_run_dirs='$ex_run_dirs'"
1149     for exd in $ex_run_dirs ; do
1150     name=`echo $exd | sed -e "s/$inputdir\.//"`
1151     refExOut=`echo $ref_outp | sed "s/\./.${name}./"`
1152     outf="$dir/results/$refExOut"
1153     if test -f $outf -a -r $outf ; then
1154     if test "x$MULTI_THREAD" = "xt" ; then
1155     if test -r $dir"/"$exd"/eedata.mth" ; then
1156 jmc 1.83 extra_runs="$extra_runs $name"
1157 jmc 1.108 #else echo $dir"/"$exd"/eedata.mth: not found"
1158 jmc 1.83 fi
1159 jmc 1.108 else
1160     extra_runs="$extra_runs $name"
1161 jmc 1.83 fi
1162 jmc 1.108 fi
1163     done
1164 edhill 1.28
1165     echo "-------------------------------------------------------------------------------"
1166     echo
1167 jmc 1.83 if test "x$extra_runs" = "x" ; then
1168     echo "Experiment: $dir"
1169     else
1170     echo "Experiment: $dir ; extra_runs=$extra_runs"
1171     fi
1172 edhill 1.28 echo
1173     unset genmake makedepend make run
1174 jmc 1.94 results=$EMPTY_RESULTS
1175 edhill 1.10
1176     # Create an output dir for each OPTFILE/tdir combination
1177 edhill 1.20 rel_CDIR=$DRESULTS"/"$dir
1178     mkdir $rel_CDIR
1179     CDIR=`pwd`"/$rel_CDIR"
1180 edhill 1.10
1181     if test "x$CLEANUP" = xt ; then
1182 jmc 1.83 echo '====>>> this is to check that we never go through this part <<< ==='
1183     makeclean $dir/$builddir \
1184     && run_clean $dir/$rundir
1185 edhill 1.10 else
1186 edhill 1.1 genmakemodel $dir/$builddir && genmake=Y \
1187     && makeclean $dir/$builddir \
1188 jmc 1.83 && run_clean $dir/$rundir \
1189 edhill 1.27 && symlink_mpifiles $dir $code_dir $builddir \
1190 edhill 1.1 && makedependmodel $dir/$builddir && makedepend=Y \
1191     && makemodel $dir/$builddir && make=Y \
1192 jmc 1.108 && linkdata $dir/$rundir $inputdir input \
1193 edhill 1.12 && runmodel $dir/$rundir && run=Y \
1194 jmc 1.99 && results=`testoutput_run $dir $rundir $ref_outp`
1195 edhill 1.10 fi
1196    
1197     echo
1198 edhill 1.24 fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1199 edhill 1.34 echo
1200 jmc 1.98 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</' >> $SUMMARY
1201 jmc 1.100 touch $CDIR"/summary.txt"
1202 jmc 1.97 echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1203 edhill 1.34 echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1204     echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1205     echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1206     echo "tdir='$dir'" >> $CDIR"/summary.txt"
1207 jmc 1.108 if test "x$ADM" = xt ; then
1208     head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt"
1209     grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1210     >> $CDIR"/summary.txt"
1211     fi
1212 edhill 1.34
1213     for ex in $extra_runs ; do
1214 jmc 1.73 unset run
1215 jmc 1.94 results=$EMPTY_RESULTS
1216 jmc 1.106 # reference output file
1217     refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1218 jmc 1.73 # Create an output dir for each OPTFILE/tdir.ex combination
1219     rel_CDIR=$DRESULTS"/"$dir"."$ex
1220     mkdir $rel_CDIR
1221     CDIR=`pwd`"/$rel_CDIR"
1222 edhill 1.61 test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1223 jmc 1.106 run_clean $dir/tr_run.$ex
1224 jmc 1.108 linkdata $dir/tr_run.$ex $inputdir.$ex $inputdir input
1225 jmc 1.42 runmodel $dir/tr_run.$ex && run=Y \
1226 jmc 1.106 && results=`testoutput_run $dir tr_run.$ex $refExOut`
1227 edhill 1.34 fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1228     fres="$fres.$ex"
1229     echo
1230 jmc 1.100 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</' >> $SUMMARY
1231     touch $CDIR"/summary.txt"
1232 jmc 1.97 echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1233 edhill 1.34 echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1234     echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1235     echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1236 jmc 1.73 echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1237 jmc 1.108 if test "x$ADM" = xt ; then
1238     head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt"
1239     grep -A3 'Seconds in section "ALL' $dir/tr_run.$ex/$OUTPUTFILE \
1240     >> $CDIR"/summary.txt"
1241     fi
1242 jmc 1.83 if test "x$POSTCLEAN" = xt ; then
1243 jmc 1.100 run_clean $dir/tr_run.$ex
1244 jmc 1.83 fi
1245 edhill 1.34 done
1246 edhill 1.68
1247 jmc 1.83 #postclean $dir/$builddir
1248     if test "x$POSTCLEAN" = xt ; then
1249     makeclean $dir/$builddir \
1250     && run_clean $dir/$rundir
1251     fi
1252 edhill 1.10
1253     echo "-------------------------------------------------------------------------------"
1254    
1255 edhill 1.1 done
1256    
1257 edhill 1.34 printf "Start time: " >> $SUMMARY
1258 jmc 1.114 echo "$start_date" >> $SUMMARY
1259 edhill 1.34 printf "End time: " >> $SUMMARY
1260 edhill 1.13 date >> $SUMMARY
1261 edhill 1.20
1262     # If addresses were supplied and mpack built successfully, then try
1263     # to send email using mpack.
1264     if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1265     echo "No results email was sent."
1266     else
1267     if test "x$HAVE_MPACK" = xt ; then
1268     tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1269     && gzip $DRESULTS".tar" \
1270 edhill 1.44 && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1271 edhill 1.20 RETVAL=$?
1272     if test "x$RETVAL" != x0 ; then
1273     echo
1274     echo "Warning: The tar, gzip, & mpack step failed. Please send email"
1275     echo " to <MITgcm-support@mitgcm.org> for help. You may copy the "
1276     echo " summary of results from the directory \"$DRESULTS\"."
1277     echo
1278     else
1279     echo
1280     echo "An email containing results was sent to the following addresses:"
1281     echo " \"$ADDRESSES\""
1282     echo
1283     fi
1284     test -f $DRESULTS".tar" && rm -f $DRESULTS".tar"
1285     test -f $DRESULTS".tar.gz" && rm -f $DRESULTS".tar.gz"
1286     fi
1287     fi
1288 edhill 1.13
1289 jmc 1.91 rm -f tr_cmpnum.c tr_cmpnum
1290 edhill 1.1
1291 edhill 1.12 if test "x$CLEANUP" != xt ; then
1292 jmc 1.102 cat $SUMMARY | sed 's/ \. \. \. \. \. \. \. \. \. \. \. \. //'
1293 edhill 1.25 if test -e tr_out.txt ; then
1294     mv tr_out.txt tr_out.txt.old
1295 edhill 1.14 fi
1296 jmc 1.103 cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1297 edhill 1.12 fi
1298 edhill 1.1
1299 edhill 1.40 if test "x$DELDIR" = xt ; then
1300     rm -rf $DRESULTS
1301     fi
1302    

  ViewVC Help
Powered by ViewVC 1.1.22