/[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.111 - (hide annotations) (download)
Wed Feb 6 21:06:03 2008 UTC (16 years, 1 month ago) by mlosch
Branch: MAIN
CVS Tags: checkpoint59n
Changes since 1.110: +2 -2 lines
add a -print to a find, as some find implementations require an action
(on SX8!!!); let's hope
that this does not break testreport on other systems (it doesn't on "mine")
this is the change:
<     MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`
---
>     MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi" -print)`

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

  ViewVC Help
Powered by ViewVC 1.1.22