/[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.123 - (hide annotations) (download)
Thu Apr 16 18:46:59 2009 UTC (14 years, 11 months ago) by jmc
Branch: MAIN
Changes since 1.122: +50 -5 lines
mpi+mth: skip tests were number of tiles do not match

1 edhill 1.19 #! /usr/bin/env bash
2 edhill 1.1 #
3 jmc 1.123 # $Header: /u/gcmpack/MITgcm/verification/testreport,v 1.122 2009/04/15 22:22:36 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.122 echo " (-mth) run multi-threaded (using eedata.mth)"
15 jmc 1.83 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 jmc 1.122 if test "x$MULTI_THREAD" = xt ; then
338     #- run multi-threaded using OpenMP:
339     command="$command -omp"
340     fi
341 ce107 1.90 if test "x$TS" = xt ; then
342     command="$command -ts"
343     fi
344     if test "x$PAPIS" = xt ; then
345     command="$command -papis"
346     else
347     if test "x$PCLS" = xt ; then
348     command="$command -pcls"
349     fi
350     fi
351 edhill 1.10 printf 'genmake ... ' 1>&2
352 utke 1.120 # $command > make.log 2>&1
353     eval $command > make.log 2>&1
354 edhill 1.10 RETVAL=$?
355 edhill 1.44 # Reduce the size of the testing emails!
356 edhill 1.47 head -100 Makefile > $CDIR/Makefile_head
357 edhill 1.10 if test "x$RETVAL" != x0 ; then
358     tail make.log
359     echo "genmakemodel: genmake failed" 1>&2
360 edhill 1.21 cp genmake_* make.log $CDIR
361 edhill 1.10 return 1
362     else
363 edhill 1.20 echo "successful" 1>&2
364 edhill 1.1 fi
365 edhill 1.10 )
366     fi
367 edhill 1.1 }
368    
369     makeclean()
370     {
371     # makeclean directory
372 edhill 1.10 if test "x$NOCLEAN" = xt ; then
373 jmc 1.83 echo "make Clean skipped!"
374 edhill 1.10 else
375     (
376     cd $1;
377 jmc 1.87 #if test -e $OUTPUTFILE ; then rm -f $OUTPUTFILE ; fi
378 edhill 1.10 if test -r Makefile ; then
379 jmc 1.83 printf 'clean build-dir: make Clean ... ' 2>&1
380     $MAKE Clean >> make.log 2>&1
381 edhill 1.10 RETVAL=$?
382     if test "x$RETVAL" != x0 ; then
383     tail make.log
384 jmc 1.83 echo "makeclean: \"make Clean\" failed" 1>&2
385 edhill 1.10 cp make.log $CDIR"/make.log"
386     return 1
387     fi
388     fi
389 edhill 1.20 echo successful 1>&2
390 edhill 1.10 exit 0
391     )
392     fi
393     }
394    
395 jmc 1.83 run_clean()
396 edhill 1.68 {
397 jmc 1.83 # run_clean directory
398     if test "x$NOCLEAN" = xt ; then
399     echo "run_clean skipped!"
400     else
401 edhill 1.68 (
402     cd $1;
403 jmc 1.83 printf 'clean run-dir ... ' 2>&1
404     # part of what is done after "make clean" when doing "make CLEAN"
405     find . -name "*.meta" -exec rm {} \;
406     find . -name "*.data" -exec rm {} \;
407     find . -name "fort.*" -exec rm {} \;
408     find . -type l -exec rm {} \;
409     rm -f $EXECUTABLE *.txt STD* *diagnostics.log datetime
410     rm -rf mnc_test_*
411 jmc 1.107 rm -f *_MIT_CE_000.opt0000 costfunction*0000
412 jmc 1.83 echo successful 1>&2
413 edhill 1.68 exit 0
414     )
415     fi
416     }
417    
418 edhill 1.10 makedependmodel()
419     {
420     # makedependmodel directory
421     if test "x$NODEPEND" = xt ; then
422     echo "make depend skipped!"
423     else
424     (
425     cd $1;
426     printf 'make depend ... ' 1>&2
427     $MAKE depend >> make.log 2>&1
428 edhill 1.1 RETVAL=$?
429     if test "x$RETVAL" != x0 ; then
430     tail make.log
431 edhill 1.10 echo "makedependmodel: make depend failed" 1>&2
432 edhill 1.1 cp make.log $CDIR"/make.log"
433     return 1
434 edhill 1.10 else
435 edhill 1.20 echo successful 1>&2
436 edhill 1.1 fi
437 edhill 1.10 )
438     fi
439 edhill 1.1 }
440    
441     makemodel()
442     {
443     # makemodel directory
444     (
445     cd $1;
446     if test -r Makefile ; then
447     printf 'make ... ' 1>&2
448 utke 1.120 if test "x$ADM" = xt ; then
449     $MAKE adall >> make.log 2>&1
450     elif test "x$OADM" = xt ; then
451     $MAKE adAll >> make.log 2>&1
452     else
453 edhill 1.43 if test "x$JOBS" = x ; then
454     $MAKE >> make.log 2>&1
455     else
456     $MAKE -j $JOBS >> make.log 2>&1
457     fi
458 edhill 1.24 fi
459 edhill 1.1 RETVAL=$?
460     if test "x$RETVAL" != x0 ; then
461     tail make.log
462     echo failed 1>&2
463     cp make.log $CDIR"/make.log"
464     return 1
465     else
466 edhill 1.20 echo successful 1>&2
467 edhill 1.1 fi
468     fi
469     )
470     }
471    
472 edhill 1.27 symlink_mpifiles()
473     {
474     # Put special links so that MPI specific files are used
475     # This MUST be invoked between makeclean and makelinks because
476     # the Makefile will link to non-mpi files by default
477    
478     dir=$1
479     code_dir=$2
480     BUILD_DIR=$dir/$3
481     CODE_DIR=$dir/$code_dir
482 edhill 1.45
483 edhill 1.27 # These are files that should replace their counter-part when using -mpi
484 mlosch 1.111 MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi" -print)`
485 edhill 1.27
486     # Is this an MPI run?
487     if test "x$MPI" = xt ; then
488     # YES: We symbolically link these files to the build
489     # dir so long as there is no real file in place
490     for ii in $MPI_FILES ; do
491     i=`echo $ii | sed 's:^\./::'`
492     name=`echo $i | sed 's:_mpi::' `
493     cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1
494     RETVAL=$?
495     if test "x$RETVAL" != x0 ; then
496     if ! test -f $BUILD_DIR/$i ; then
497 edhill 1.45 #echo Linking $name to $i
498 edhill 1.27 (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
499     fi
500     fi
501     done
502     else
503 edhill 1.45 # NO: We undo any _mpi symbolically linked files
504 edhill 1.27 for ii in $MPI_FILES ; do
505     i=`echo $ii | sed 's:^\./::'`
506     name=`echo $i | sed 's:_mpi::' `
507     if test -L $BUILD_DIR/$name ; then
508 edhill 1.45 cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
509     RETVAL=$?
510     if test "x$RETVAL" = x0 ; then
511     #echo Un-linking $name from $linktarg
512 edhill 1.27 rm -f $BUILD_DIR/$name
513     fi
514     fi
515     done
516     fi
517    
518     }
519    
520 edhill 1.1 linkdata()
521     {
522 jmc 1.83 # linkdata run_dir input_dir_1 input_dir_2 ...
523 edhill 1.1 #
524     # symbolically link data files to run directory
525 jmc 1.83 if test -d $1 ; then
526 edhill 1.12 (
527 jmc 1.83 cd $1 ; shift
528     if test -r "../"$1"/eedata.mth" ; then
529     # found eedata.mth in 1rst input dir and it is readable
530     if test "x$MULTI_THREAD" = "xt" ; then
531     # multi-threaded test: remove symbolic link & link eedata.mth
532     if test -h eedata ; then rm -f eedata ; fi
533     if test ! -r eedata ; then
534     ln -sf "../"$1"/eedata.mth" eedata ;
535     printf 'eedata.mth ' 1>&2
536 edhill 1.24 fi
537 jmc 1.83 else
538     # not multi-threaded test: remove eedata symbolic link
539     if test -h eedata ; then rm -f eedata ; fi
540     fi
541     fi
542 jmc 1.108 prevDir='NONE'
543 jmc 1.83 for ldir in $* ; do
544 jmc 1.108 if test -d "../"$ldir -a $ldir != $prevDir ; then
545 jmc 1.83 printf 'ldir='${ldir} 1>&2
546     files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
547     for i in $files ; do
548     if test ! -d "../"$ldir/$i ; then
549     if test ! -r $i ; then
550     printf ' '$i 1>&2
551     ln -sf "../"$ldir"/"$i $i
552     fi
553     fi
554     done
555     if test -x "../"$ldir"/"prepare_run ; then
556     "../"$ldir"/"prepare_run
557 edhill 1.24 fi
558 jmc 1.83 printf ' ; ' 1>&2
559 jmc 1.82 fi
560 jmc 1.108 prevDir=$ldir
561 jmc 1.83 done
562 edhill 1.12 )
563 edhill 1.1 fi
564     }
565    
566     runmodel()
567     {
568 edhill 1.6 # runmodel directory
569 edhill 1.1 #
570 edhill 1.24 # runs "$COMMAND in "directory"
571 edhill 1.6 # (where "$COMMAND" is relative to "directory")
572 edhill 1.1 (
573     cd $1
574 jmc 1.75 printf 'runmodel in %s ...' $1 1>&2
575 edhill 1.6 # make output.txt
576 edhill 1.38 echo
577 jmc 1.106 if test -L $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
578     diff -q $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
579 jmc 1.119 outD=$? ; if test $outD != 0 ; then rm -f $EXECUTABLE ; fi
580 jmc 1.106 fi
581 jmc 1.83 if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
582 jmc 1.119 echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_tmp
583 jmc 1.83 ln -sf "../"$builddir"/"$EXECUTABLE .
584     fi
585     if test ! -x $EXECUTABLE ; then
586 jmc 1.119 rm -f $RUNLOG ; touch $RUNLOG
587     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
588     echo " no executable:" $EXECUTABLE >> $RUNLOG
589 jmc 1.83 RETVAL=8
590 jmc 1.88 ENDVAL=-1
591 jmc 1.75 else
592 jmc 1.98 if test ! -f $OUTPUTFILE -o $OUTPUTFILE -ot $EXECUTABLE ; then
593     # output do not exist or is older than executable:
594 jmc 1.119 rm -f $RUNLOG ; touch $RUNLOG
595     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
596     ( eval $COMMAND ) >> $RUNLOG 2>&1
597 jmc 1.83 RETVAL=$?
598     else
599     RETVAL=0
600 jmc 1.119 if test -f $RUNLOG ; then
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 jmc 1.88 else
604 jmc 1.119 touch $RUNLOG
605     if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
606     echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
607     echo " no previous $RUNLOG: assume NORMAL END" >> $RUNLOG 2>&1
608 jmc 1.88 fi
609 jmc 1.83 fi
610 jmc 1.119 ENDVAL=`cat $RUNLOG | grep -v 'ABNORMAL END' | grep -c 'NORMAL END'`
611 jmc 1.75 fi
612 jmc 1.119 rm -f run.log_tmp
613 jmc 1.88 #if test "x$RETVAL" = x0 ; then
614     if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
615 jmc 1.119 tail $RUNLOG
616 edhill 1.20 echo successful 1>&2
617 edhill 1.44 # === Reduce the size of the testing emails!
618 jmc 1.87 #cp $OUTPUTFILE $CDIR"/"$OUTPUTFILE
619 jmc 1.48 if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
620 edhill 1.6 return 0
621     else
622 jmc 1.119 tail $RUNLOG
623 jmc 1.88 echo failed '(run:' $RETVAL ' end:' $ENDVAL ')' 1>&2
624 jmc 1.119 cp $RUNLOG $CDIR"/"$RUNLOG
625 jmc 1.48 if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
626 edhill 1.6 return 1
627 edhill 1.1 fi
628     )
629     }
630    
631     createcodelet()
632     {
633     # create codelet for comparing model output
634    
635 jmc 1.112 printf "creating the comparison code (using CC=$CC)... "
636 jmc 1.91 cat > tr_cmpnum.c <<EOF
637 edhill 1.22 #include <stdio.h>
638     #include <math.h>
639     int main( int argc, char** argv ) {
640 jmc 1.91 int linnum,cmplin,best,lncnt;
641 edhill 1.52 double a,b,abave,relerr;
642 jmc 1.57 best = -22;
643 adcroft 1.33 lncnt = 0;
644 jmc 1.96 while( 1 & ( (lncnt+=1) < 999 ) ) {
645 edhill 1.22 scanf("%d", &linnum);
646     if (linnum == -1) break;
647     scanf("%lf", &a); scanf("%lf", &b);
648 edhill 1.52 abave = 0.5*(fabs(a)+fabs(b));
649 jmc 1.91 if ( abave == abave ) {
650     if (abave > 0.0) {
651     relerr=fabs(a-b)/abave;
652     if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
653     else { cmplin = -16 ; }
654     best = (best > cmplin) ? best : cmplin; }
655     else { cmplin = -22 ; }
656     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
657     }
658     else {
659     /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
660     break; }
661 edhill 1.22 }
662 adcroft 1.33 if (lncnt == 999) best=-29;
663 jmc 1.91 if (linnum != -1) best=-99;
664 edhill 1.22 printf("%d\n", -best);
665     return 0;
666     }
667     EOF
668 jmc 1.91 $CC -o tr_cmpnum tr_cmpnum.c -lm
669 edhill 1.1
670 jmc 1.91 if [ -x ./tr_cmpnum ]; then
671 edhill 1.1 echo "OK"
672     return 0
673     else
674     echo
675 edhill 1.58 echo "ERROR: failed to compile comparison code -- please specify"
676     echo " a C compiler using the CC environment variable."
677 edhill 1.1 exit 1
678     fi
679     }
680    
681     formatresults()
682     {
683     # formatresults expt genmake depend make run results*
684    
685     nm=$1
686     printf '%s %s %s %s' $2 $3 $4 $5
687     shift; shift; shift; shift; shift;
688 jmc 1.94 listPrt=$@
689     listRes=`echo $listPrt | sed 's/>//' | sed 's/<//'`
690     xx=`echo $listPrt | sed 's/.*>//' | sed 's/<.*//' | awk '{print $1}'`
691 jmc 1.97 printf '%3s' $listPrt
692 jmc 1.98 # line below does not work on hp-ux_ia64 : do those substitutions later on
693 jmc 1.95 # printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</'
694 edhill 1.1
695 jmc 1.94 if [ $xx = '..' ]; then
696     printf ' N/O '
697     elif [ $xx = '--' ]; then
698     printf ' N/O '
699     elif [ $xx = 99 ]; then
700 edhill 1.1 printf ' N/O '
701     else
702 jmc 1.94 if [ $xx -ge $MATCH_CRIT ]; then
703 edhill 1.1 printf ' pass'
704     else
705     printf ' FAIL'
706     fi
707     fi
708     printf ' %s' $nm
709     printf '\n'
710    
711     }
712    
713     scandirs()
714     {
715 jmc 1.81 if [ $# -eq 1 ]; then
716     for arg in * ; do
717 jmc 1.99 test -f $arg/$1 && echo $arg
718 jmc 1.81 done
719 edhill 1.1 else
720 jmc 1.81 echo $*
721 edhill 1.1 fi
722     }
723    
724    
725 jmc 1.123 check_eedata()
726     {
727     # check_eedata size.h eedata
728     if [ $# -eq 2 ] ; then
729     if test -f $1 -a -f $2 ; then
730     sx=`grep "^ & *nSx *=" $1 | sed "s/^ & *nSx *=//" | sed 's/, *$//'`
731     nx=`grep "^ *nTx *=" $2 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
732     if test "x$nx" = x ; then
733     rx=10
734     else
735     rx=`expr $sx % $nx`
736     fi
737     sy=`grep "^ & *nSy *=" $1 | sed "s/^ & *nSy *=//" | sed 's/, *$//'`
738     ny=`grep "^ *nTy *=" $2 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
739     if test "x$ny" = x ; then
740     ry=20
741     else
742     ry=`expr $sy % $ny`
743     fi
744     echo `expr $rx + $ry`
745     else
746     echo '-1'
747     fi
748     else
749     echo '-2'
750     fi
751    
752     }
753    
754 edhill 1.1 ###############################################################################
755    
756    
757     # Default properties
758     debug=0
759     verbose=1
760     clean=0
761 edhill 1.10
762 edhill 1.40 IEEE=true
763 edhill 1.10 if test "x$MITGCM_IEEE" != x ; then
764     IEEE=$MITGCM_IEEE
765     fi
766 jmc 1.109 GSL=f
767 edhill 1.10
768     CLEANUP=f
769     QUICK=f
770     NOGENMAKE=f
771     NOCLEAN=f
772     NODEPEND=f
773 edhill 1.68 POSTCLEAN=f
774 edhill 1.1
775 edhill 1.4 BASH=
776 edhill 1.10 OPTFILE=NONE
777     ADDRESSES=
778 edhill 1.1 TESTDIRS=
779 jmc 1.89 SKIPDIRS=
780 edhill 1.1 MPACKDIR="../tools/mpack-1.6"
781 edhill 1.20 HAVE_MPACK=
782 jmc 1.113 MPACK=
783 edhill 1.24 COMMAND=
784 edhill 1.59 if test "x$MAKE" = x ; then
785     MAKE=make
786     fi
787     if test "x$CC" = x ; then
788     CC=cc
789     fi
790 edhill 1.43 JOBS=
791 edhill 1.7 MPI=f
792 jmc 1.83 MULTI_THREAD=f
793 jmc 1.70 OUTDIR=
794 edhill 1.40 DELDIR=
795 edhill 1.1
796 edhill 1.24 ADM=
797 utke 1.120 OADM=
798 edhill 1.24
799 jmc 1.117 # list of pTracers to check for monitor output
800 edhill 1.50 PTRACERS_NUM="1 2 3 4 5"
801 edhill 1.49
802 jmc 1.92 MATCH_CRIT=13
803    
804 edhill 1.34 printf "parsing options... "
805 edhill 1.1
806     ac_prev=
807     for ac_option ; do
808    
809     # If the previous option needs an argument, assign it.
810     if test -n "$ac_prev"; then
811     eval "$ac_prev=\$ac_option"
812     ac_prev=
813     continue
814     fi
815    
816     ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
817    
818     case $ac_option in
819    
820     -help | --help | -h | --h)
821     usage ;;
822    
823 edhill 1.2 -optfile | --optfile | -of | --of)
824 edhill 1.10 ac_prev=OPTFILE ;;
825 edhill 1.2 -optfile=* | --optfile=* | -of=* | --of=*)
826 edhill 1.10 OPTFILE=$ac_optarg ;;
827 edhill 1.1
828     -addr | --addr | -a | --a)
829     ac_prev=ADDRESSES ;;
830     -addr=* | --addr=*)
831     ADDRESSES=$ac_optarg ;;
832 jmc 1.113 -mpackdir | --mpackdir | -mpd | --mpd)
833     ac_prev=MPACKDIR ;;
834     -mpackdir=* | --mpackdir=* | -mpd=* | --mpd=*)
835     MPACKDIR=$ac_optarg ;;
836 edhill 1.1
837     -tdir | --tdir | -t | --t)
838     ac_prev=TESTDIRS ;;
839     -tdir=* | --tdir=*)
840     TESTDIRS=$ac_optarg ;;
841 edhill 1.4
842 jmc 1.89 -skipdir | --skipdir | -skd | --skd)
843     ac_prev=SKIPDIRS ;;
844     -skipdir=* | --skipdir=*)
845     SKIPDIRS=$ac_optarg ;;
846    
847 edhill 1.4 -bash | --bash | -b | --b)
848     ac_prev=BASH ;;
849     -bash=* | --bash=*)
850     BASH=$ac_optarg ;;
851 edhill 1.5
852 edhill 1.6 -command | --command | -c | --c)
853     ac_prev=COMMAND ;;
854     -command=* | --command=*)
855     COMMAND=$ac_optarg ;;
856 edhill 1.8
857     -make | --make | -m | --m)
858     ac_prev=MAKE ;;
859     -make=* | --make=*)
860     MAKE=$ac_optarg ;;
861 edhill 1.1
862 jmc 1.70 -odir | --odir)
863     ac_prev=OUTDIR ;;
864     -odir=* | --odir=*)
865     OUTDIR=$ac_optarg ;;
866    
867 edhill 1.50 -ptracers | --ptracers | -ptr | --ptr)
868     ac_prev=PTRACERS_NUM ;;
869     -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
870     PTRACERS_NUM=$ac_optarg ;;
871    
872 jmc 1.92 -match | --match ) ac_prev=MATCH_CRIT ;;
873     -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
874    
875 edhill 1.43 -j) ac_prev=JOBS ;;
876     -j=*) JOBS=$ac_optarg ;;
877    
878 edhill 1.10 -clean | --clean)
879 jmc 1.69 CLEANUP=t ; DELDIR=t ;;
880 edhill 1.10
881     -quick | --quick | -q | --q)
882     QUICK=t ;;
883     -nogenmake | --nogenmake | -ng | --ng)
884     NOGENMAKE=t ;;
885     -noclean | --noclean | -nc | --nc)
886     NOCLEAN=t ;;
887     -nodepend | --nodepend | -nd | --nd)
888     NODEPEND=t ;;
889    
890 edhill 1.68 -postclean | --postclean | -pc | --pc)
891     POSTCLEAN=t ;;
892    
893 edhill 1.18 -mpi) MPI=t ;;
894 edhill 1.10
895 jmc 1.83 -mth) MULTI_THREAD=t ;;
896    
897 edhill 1.24 -adm | -ad) ADM=t ;;
898    
899 utke 1.120 -oad) OADM=t; NODEPEND=t ;;
900    
901 edhill 1.10 -ieee) IEEE=true ;;
902     -noieee) IEEE= ;;
903 jmc 1.109 -gsl) GSL=t ;;
904 edhill 1.10
905 edhill 1.1 -verbose) verbose=2 ;;
906     -debug) debug=1 ;;
907     -quiet) verbose=0 ;;
908    
909 edhill 1.40 -deldir | -dd) DELDIR=t ;;
910    
911 ce107 1.90 -ts) TS=t;;
912    
913     -papis) PAPIS=t;;
914    
915     -pcls) PCL=t;;
916    
917 edhill 1.1 -*)
918     echo "Error: unrecognized option: "$ac_option
919     usage
920     ;;
921    
922     *)
923     echo "Error: unrecognized argument: "$ac_option
924     usage
925     ;;
926    
927     esac
928    
929     done
930    
931 edhill 1.10 if test "x$QUICK" = xt ; then
932     NOGENMAKE=t
933     NOCLEAN=t
934     NODEPEND=t
935     fi
936    
937 jmc 1.99 #- setting for forward or ADM testing
938     if test "x$ADM" = xt ; then
939     code_dir=code_ad
940 jmc 1.108 inputdir=input_ad
941 jmc 1.99 ref_outp="output_adm.txt"
942     EXECUTABLE="mitgcmuv_ad"
943 utke 1.120 elif test "x$OADM" = xt ; then
944     code_dir=code_oad
945     inputdir=input_oad
946     ref_outp="output_oadm.txt"
947     EXECUTABLE="mitgcmuv_ad"
948 jmc 1.99 else
949     code_dir=code
950 jmc 1.108 inputdir=input
951 jmc 1.99 ref_outp="output.txt"
952     EXECUTABLE="mitgcmuv"
953     fi
954    
955 edhill 1.1 if test "x$TESTDIRS" = x ; then
956 jmc 1.103 LIST=`scandirs results/$ref_outp`
957 jmc 1.84 else
958     #- expand group of experiments:
959     LIST=" "
960     for xx in $TESTDIRS
961     do
962     case $xx in
963 jmc 1.86 'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
964     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
965     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
966 jmc 1.84 ;;
967     'tutorials')
968     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
969     *) LIST=${LIST}" "$xx ;;
970     esac
971     done
972 jmc 1.89 fi
973     #echo 'LIST='${LIST}'<'
974     #- skip dirs, remove duplicate and non-directory:
975     TESTDIRS=" "
976     count=0
977     for xx in $LIST
978     do
979     yy=`echo $SKIPDIRS | grep -c $xx`
980     if test $yy = 0 ; then
981 jmc 1.84 if test -d $xx ; then
982     yy=`echo $TESTDIRS | grep -c $xx`
983     if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
984 jmc 1.89 else count=1 ;
985     echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
986     fi
987     else
988     if test $count = 1 ; then echo -n ", \"$xx\""
989     else count=1 ; echo "" ; echo -n " skip: \"$xx\""
990 jmc 1.84 fi
991 jmc 1.89 fi
992     done
993     if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
994 jmc 1.84 #echo 'TESTDIRS='${TESTDIRS}'<'
995 edhill 1.1
996 edhill 1.10 if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
997     OPTFILE=$MITGCM_OF
998     fi
999    
1000 jmc 1.119 RUNLOG="run.log"
1001 jmc 1.99 OUTPUTFILE=$ref_outp
1002 jmc 1.87 if test "x$COMMAND" = x ; then
1003 jmc 1.77 COMMAND="./$EXECUTABLE > $OUTPUTFILE"
1004 edhill 1.24 fi
1005 jmc 1.87 if test "x$MPI" = xt ; then
1006     OUTPUTFILE="STDOUT.0000"
1007 edhill 1.24 fi
1008    
1009 jmc 1.76 echo "OK (COMMAND= $COMMAND )"
1010 edhill 1.1
1011 jmc 1.94 # set the Default List of output variables to be checked:
1012     # (use default or load experiment-specific list from file "tr_checklist")
1013     # content : 1rst = main variable used to decide if it pass or FAIL
1014     # others = number of matching digits to be printed in summary.txt
1015 utke 1.120 if test "x$ADM" = x -a "x$OADM" = x; then
1016 jmc 1.94 DEF_CHECK_LIST='PS PS T+ S+ U+ V+ pt1+ pt2+ pt3+ pt4+ pt5+'
1017     EMPTY_RESULTS='.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..'
1018 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}'`
1019 jmc 1.94 ii=`echo $EMPTY_RESULTS | awk '{print NF}'`
1020 jmc 1.97 EMPTY_RESULTS=$EMPTY_RESULTS`expr $LEN_CHECK_LIST - $ii | awk 'BEGIN{FS=":"}{for(i=1;i<=$1;i++){printf " ."}}'`
1021 jmc 1.99 else
1022 jmc 1.103 DEF_CHECK_LIST='Grad Cost Grad'
1023 jmc 1.99 EMPTY_RESULTS='.. ..'
1024     LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1025 jmc 1.94 fi
1026    
1027 edhill 1.1 # create the FORTRAN comparison code
1028     createcodelet
1029    
1030 jmc 1.112 # build the mpack utility (if ADDRESSES = NONE, do it to test the build)
1031     if test "x$ADDRESSES" = x ; then
1032 edhill 1.32 echo "skipping mpack build"
1033     else
1034 edhill 1.31 build_mpack
1035     fi
1036 edhill 1.1
1037     # Create a uniquely named directory to store results
1038 jmc 1.110 CMDLINE=$0
1039 jmc 1.118 for xx in "$@" ; do nw=`echo $xx | wc -w`
1040     if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
1041     else CMDLINE="$CMDLINE '$xx'" ; fi
1042     done
1043     #for xx in "$@" ; do CMDLINE="$CMDLINE '$xx'" ; done
1044 edhill 1.1 MACH=`hostname`
1045 edhill 1.2 UNAMEA=`uname -a`
1046 edhill 1.1 DATE=`date +%Y%m%d`
1047 edhill 1.25 BASE="tr_"$MACH"_"$DATE"_"
1048 jmc 1.70 if test "x$OUTDIR" != x ; then
1049     BASE="tr_"$OUTDIR"_"$DATE"_"
1050 jmc 1.121 else
1051     short_name=`hostname | sed 's/\..*$//'`
1052     BASE="tr_"$short_name"_"$DATE"_"
1053 jmc 1.70 fi
1054 edhill 1.1 DNUM=0
1055     DRESULTS="$BASE$DNUM"
1056     while test -e $DRESULTS ; do
1057     DNUM=$(( $DNUM + 1 ))
1058     DRESULTS="$BASE$DNUM"
1059     done
1060     mkdir $DRESULTS
1061     RETVAL=$?
1062     if test "x$RETVAL" != x0 ; then
1063 edhill 1.20 echo "ERROR: Can't create results directory \"./$DRESULTS\""
1064 edhill 1.1 exit 1
1065     fi
1066     SUMMARY="$DRESULTS/summary.txt"
1067 edhill 1.16 start_date=`date`
1068 edhill 1.17 echo $start_date > $SUMMARY
1069 jmc 1.110 echo 'run:' $CMDLINE >> $SUMMARY
1070     echo 'on :' $UNAMEA >> $SUMMARY
1071 edhill 1.1
1072 edhill 1.11 of_path=
1073 edhill 1.10 if test "x$OPTFILE" != xNONE ; then
1074     if test -r $OPTFILE ; then
1075 edhill 1.11 # get the path
1076     path=${OPTFILE%/*}
1077     if test "x$path" = x ; then
1078     of_path=`pwd`
1079     else
1080     of_path=`( cd $path > /dev/null 2>&1 ; pwd )`
1081     fi
1082     file=${OPTFILE##*/}
1083     OPTFILE=$of_path/$file
1084 edhill 1.21 cp $OPTFILE $DRESULTS
1085     echo >> $SUMMARY
1086     echo " OPTFILE=$OPTFILE" >> $SUMMARY
1087 edhill 1.11 else
1088 edhill 1.21 echo | tee $SUMMARY
1089     echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
1090     exit 1
1091 edhill 1.10 fi
1092 edhill 1.21 else
1093     echo >> $SUMMARY
1094     echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
1095     echo " so the genmake default will be used." >> $SUMMARY
1096 edhill 1.10 fi
1097     echo
1098     echo >> $SUMMARY
1099 utke 1.120 if test "x$ADM" = x -a "x$OADM" = x; then
1100 jmc 1.92 if [ $MATCH_CRIT -lt 10 ] ;
1101 jmc 1.94 then line_0="default "$MATCH_CRIT ;
1102     else line_0="default "$MATCH_CRIT ; fi
1103     line_0="$line_0 ----T----- ----S----- ----U----- ----V-----"
1104 jmc 1.92 # line_0=" ----T----- ----S----- ----U----- ----V-----"
1105 edhill 1.49 line_1="G D M c m s m s m s m s"
1106     line_2="E p a R g m m e . m m e . m m e . m m e ."
1107     line_3="N n k u 2 i a a d i a a d i a a d i a a d"
1108     line_4="2 d e n d n x n . n x n . n x n . n x n ."
1109 edhill 1.50 for ii in $PTRACERS_NUM ; do
1110 edhill 1.49 line_0="$line_0 --PTR 0"$ii"--"
1111     line_1="$line_1 m s"
1112     line_2="$line_2 m m e ."
1113     line_3="$line_3 i a a d"
1114     line_4="$line_4 n x n ."
1115     done
1116     echo "$line_0" | tee -a $SUMMARY
1117     echo "$line_1" | tee -a $SUMMARY
1118     echo "$line_2" | tee -a $SUMMARY
1119     echo "$line_3" | tee -a $SUMMARY
1120     echo "$line_4" | tee -a $SUMMARY
1121     echo " " | tee -a $SUMMARY
1122 edhill 1.24 else
1123     echo "ADJOINT=true" >> $SUMMARY
1124     echo >> $SUMMARY
1125 jmc 1.100 if [ $MATCH_CRIT -lt 10 ] ;
1126 jmc 1.103 then line_0="default "$MATCH_CRIT ;
1127     else line_0="default "$MATCH_CRIT ; fi
1128 jmc 1.100 echo "$line_0" | tee -a $SUMMARY
1129 edhill 1.24 cat << EOF | tee -a $SUMMARY
1130     G D M C G
1131     E p a R o r
1132     N n k u s a
1133     2 d e n t d
1134    
1135     EOF
1136     fi
1137 edhill 1.1
1138 edhill 1.10 # ...and each test directory...
1139     for dir in $TESTDIRS ; do
1140    
1141 jmc 1.106 # set builddir & rundir:
1142     builddir="build"
1143     if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1144     rundir="run"
1145     if test ! -d $dir/$rundir ; then
1146     rundir=$builddir
1147     fi
1148     CODE_DIR=$dir/$code_dir
1149     BUILD_DIR=$dir/$builddir
1150    
1151 edhill 1.10 # Cleanup only!
1152     if test "x$CLEANUP" = xt ; then
1153 jmc 1.106 if test -r $BUILD_DIR/Makefile ; then
1154 jmc 1.115 echo ' ------ clean dir:' $dir/$builddir
1155 jmc 1.106 ( cd $BUILD_DIR ; make CLEAN )
1156 edhill 1.10 fi
1157 jmc 1.106 if test -d $dir/$rundir/CVS ; then
1158     echo ' ------ clean dir:' $dir/$rundir
1159     run_clean $dir/$rundir
1160 edhill 1.10 fi
1161 edhill 1.62 (
1162     cd $dir
1163     rm -rf tr_run.*
1164     )
1165 edhill 1.10 continue
1166 edhill 1.1 fi
1167 edhill 1.3
1168 edhill 1.10 # Verify that the testdir exists and contains previous
1169     # results in the correct location--or skip this directory!
1170 jmc 1.104 fout=$dir"/results/"$ref_outp
1171 edhill 1.24 if test ! -r $fout ; then
1172     echo "can't read \"$fout\" -- skipping $dir"
1173 edhill 1.10 continue
1174     fi
1175 edhill 1.7
1176 jmc 1.117 # Check for specific files for particular type of run
1177 edhill 1.49
1178 edhill 1.30 if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1179 edhill 1.28 echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1180     continue
1181     fi
1182 jmc 1.83 if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1183     echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1184     continue
1185     fi
1186 jmc 1.123 if test "x$MPI" = "xt" -a "x$MULTI_THREAD" = "xt" ; then
1187     retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/input/eedata.mth"`
1188     if test $retv != 0 ; then
1189     echo "input/eedata.mth tiling misfit -- skipping $dir"
1190     continue
1191     fi
1192     fi
1193 jmc 1.83
1194     # Check whether there are "extra runs" for this testdir
1195     extra_runs=
1196 jmc 1.108 ex_run_dirs=`( cd $dir ; echo $inputdir.* )`
1197     #echo "ex_run_dirs='$ex_run_dirs'"
1198     for exd in $ex_run_dirs ; do
1199     name=`echo $exd | sed -e "s/$inputdir\.//"`
1200     refExOut=`echo $ref_outp | sed "s/\./.${name}./"`
1201     outf="$dir/results/$refExOut"
1202     if test -f $outf -a -r $outf ; then
1203 jmc 1.123 if test "x$MULTI_THREAD" = "xt" ; then
1204     if test -r $dir"/"$exd"/eedata.mth" ; then
1205     if test "x$MPI" = "xt" ; then
1206     retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/"$exd"/eedata.mth"`
1207     if test $retv = 0 ; then
1208 jmc 1.83 extra_runs="$extra_runs $name"
1209 jmc 1.123 else
1210     echo $exd"/eedata.mth tiling misfit -- skipping $dir"
1211 jmc 1.83 fi
1212 jmc 1.123 else
1213 jmc 1.108 extra_runs="$extra_runs $name"
1214 jmc 1.123 fi
1215     #else echo $dir"/"$exd"/eedata.mth: not found"
1216 jmc 1.83 fi
1217 jmc 1.123 else
1218     extra_runs="$extra_runs $name"
1219     fi
1220 jmc 1.108 fi
1221     done
1222 edhill 1.28
1223     echo "-------------------------------------------------------------------------------"
1224     echo
1225 jmc 1.83 if test "x$extra_runs" = "x" ; then
1226     echo "Experiment: $dir"
1227     else
1228     echo "Experiment: $dir ; extra_runs=$extra_runs"
1229     fi
1230 edhill 1.28 echo
1231     unset genmake makedepend make run
1232 jmc 1.94 results=$EMPTY_RESULTS
1233 edhill 1.10
1234     # Create an output dir for each OPTFILE/tdir combination
1235 edhill 1.20 rel_CDIR=$DRESULTS"/"$dir
1236     mkdir $rel_CDIR
1237     CDIR=`pwd`"/$rel_CDIR"
1238 edhill 1.10
1239     if test "x$CLEANUP" = xt ; then
1240 jmc 1.83 echo '====>>> this is to check that we never go through this part <<< ==='
1241     makeclean $dir/$builddir \
1242     && run_clean $dir/$rundir
1243 edhill 1.10 else
1244 edhill 1.1 genmakemodel $dir/$builddir && genmake=Y \
1245     && makeclean $dir/$builddir \
1246 jmc 1.83 && run_clean $dir/$rundir \
1247 edhill 1.27 && symlink_mpifiles $dir $code_dir $builddir \
1248 edhill 1.1 && makedependmodel $dir/$builddir && makedepend=Y \
1249     && makemodel $dir/$builddir && make=Y \
1250 jmc 1.108 && linkdata $dir/$rundir $inputdir input \
1251 edhill 1.12 && runmodel $dir/$rundir && run=Y \
1252 jmc 1.99 && results=`testoutput_run $dir $rundir $ref_outp`
1253 edhill 1.10 fi
1254    
1255     echo
1256 edhill 1.24 fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1257 edhill 1.34 echo
1258 jmc 1.98 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</' >> $SUMMARY
1259 jmc 1.100 touch $CDIR"/summary.txt"
1260 jmc 1.97 echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1261 edhill 1.34 echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1262     echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1263     echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1264     echo "tdir='$dir'" >> $CDIR"/summary.txt"
1265 jmc 1.108 if test "x$ADM" = xt ; then
1266     head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt"
1267     grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1268     >> $CDIR"/summary.txt"
1269     fi
1270 edhill 1.34
1271     for ex in $extra_runs ; do
1272 jmc 1.73 unset run
1273 jmc 1.94 results=$EMPTY_RESULTS
1274 jmc 1.106 # reference output file
1275     refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1276 jmc 1.73 # Create an output dir for each OPTFILE/tdir.ex combination
1277     rel_CDIR=$DRESULTS"/"$dir"."$ex
1278     mkdir $rel_CDIR
1279     CDIR=`pwd`"/$rel_CDIR"
1280 edhill 1.61 test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1281 jmc 1.106 run_clean $dir/tr_run.$ex
1282 jmc 1.108 linkdata $dir/tr_run.$ex $inputdir.$ex $inputdir input
1283 jmc 1.42 runmodel $dir/tr_run.$ex && run=Y \
1284 jmc 1.106 && results=`testoutput_run $dir tr_run.$ex $refExOut`
1285 edhill 1.34 fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1286     fres="$fres.$ex"
1287     echo
1288 jmc 1.100 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /</' >> $SUMMARY
1289     touch $CDIR"/summary.txt"
1290 jmc 1.97 echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1291 edhill 1.34 echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1292     echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1293     echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1294 jmc 1.73 echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1295 jmc 1.108 if test "x$ADM" = xt ; then
1296     head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt"
1297     grep -A3 'Seconds in section "ALL' $dir/tr_run.$ex/$OUTPUTFILE \
1298     >> $CDIR"/summary.txt"
1299     fi
1300 jmc 1.83 if test "x$POSTCLEAN" = xt ; then
1301 jmc 1.100 run_clean $dir/tr_run.$ex
1302 jmc 1.83 fi
1303 edhill 1.34 done
1304 edhill 1.68
1305 jmc 1.83 #postclean $dir/$builddir
1306     if test "x$POSTCLEAN" = xt ; then
1307     makeclean $dir/$builddir \
1308     && run_clean $dir/$rundir
1309     fi
1310 edhill 1.10
1311     echo "-------------------------------------------------------------------------------"
1312    
1313 edhill 1.1 done
1314    
1315 edhill 1.34 printf "Start time: " >> $SUMMARY
1316 jmc 1.114 echo "$start_date" >> $SUMMARY
1317 edhill 1.34 printf "End time: " >> $SUMMARY
1318 edhill 1.13 date >> $SUMMARY
1319 edhill 1.20
1320     # If addresses were supplied and mpack built successfully, then try
1321     # to send email using mpack.
1322     if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1323     echo "No results email was sent."
1324     else
1325     if test "x$HAVE_MPACK" = xt ; then
1326     tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1327     && gzip $DRESULTS".tar" \
1328 edhill 1.44 && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1329 edhill 1.20 RETVAL=$?
1330     if test "x$RETVAL" != x0 ; then
1331     echo
1332     echo "Warning: The tar, gzip, & mpack step failed. Please send email"
1333     echo " to <MITgcm-support@mitgcm.org> for help. You may copy the "
1334     echo " summary of results from the directory \"$DRESULTS\"."
1335     echo
1336     else
1337     echo
1338     echo "An email containing results was sent to the following addresses:"
1339     echo " \"$ADDRESSES\""
1340     echo
1341     fi
1342     test -f $DRESULTS".tar" && rm -f $DRESULTS".tar"
1343     test -f $DRESULTS".tar.gz" && rm -f $DRESULTS".tar.gz"
1344     fi
1345     fi
1346 edhill 1.13
1347 jmc 1.91 rm -f tr_cmpnum.c tr_cmpnum
1348 edhill 1.1
1349 edhill 1.12 if test "x$CLEANUP" != xt ; then
1350 jmc 1.102 cat $SUMMARY | sed 's/ \. \. \. \. \. \. \. \. \. \. \. \. //'
1351 edhill 1.25 if test -e tr_out.txt ; then
1352     mv tr_out.txt tr_out.txt.old
1353 edhill 1.14 fi
1354 jmc 1.103 cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1355 edhill 1.12 fi
1356 edhill 1.1
1357 edhill 1.40 if test "x$DELDIR" = xt ; then
1358     rm -rf $DRESULTS
1359     fi
1360    

  ViewVC Help
Powered by ViewVC 1.1.22