/[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.107 - (hide annotations) (download)
Mon Oct 29 19:14:12 2007 UTC (16 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint59k, checkpoint59j
Changes since 1.106: +2 -1 lines
run_clean also remove AD output files

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

  ViewVC Help
Powered by ViewVC 1.1.22