/[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.102 - (hide annotations) (download)
Thu Sep 20 03:17:32 2007 UTC (16 years, 6 months ago) by jmc
Branch: MAIN
Changes since 1.101: +2 -2 lines
minor change

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

  ViewVC Help
Powered by ViewVC 1.1.22