/[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.121 - (hide annotations) (download)
Fri Jan 30 20:08:09 2009 UTC (15 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint61l, checkpoint61j, checkpoint61k, checkpoint61i
Changes since 1.120: +4 -1 lines
make default ouput dir name from "short" hostname

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

  ViewVC Help
Powered by ViewVC 1.1.22