/[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.134 - (hide annotations) (download)
Sun Jan 17 21:52:01 2010 UTC (14 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62c, checkpoint62b
Changes since 1.133: +5 -2 lines
small modif in case no executable was build

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

  ViewVC Help
Powered by ViewVC 1.1.22