/[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.108 - (hide annotations) (download)
Thu Dec 6 04:04:38 2007 UTC (16 years, 3 months ago) by jmc
Branch: MAIN
Changes since 1.107: +33 -44 lines
allows to run several Adjoint tests (with input files from input_ad.[xx])
with the same executable and compare output to results/output_adm.[xx].txt

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

  ViewVC Help
Powered by ViewVC 1.1.22