/[MITgcm]/MITgcm/tools/do_tst_2+2
ViewVC logotype

Contents of /MITgcm/tools/do_tst_2+2

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.16 - (show annotations) (download)
Thu Oct 11 16:30:56 2012 UTC (11 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f
Changes since 1.15: +16 -15 lines
fix previous modif

1 #! /usr/bin/env bash
2
3 # $Header: /u/gcmpack/MITgcm/tools/do_tst_2+2,v 1.15 2012/08/18 18:59:14 jmc Exp $
4 # $Name: $
5
6 usage()
7 {
8 echo "Usage: `basename $0` [OPTIONS]"
9 echo " -> perform test 2+2=4 for several experiments"
10 echo ""
11 echo "where possible OPTIONS are:"
12 echo " -help : print usage"
13 echo " -t LIST_EXP : only check experiments in LIST_EXP"
14 echo " -skd LIST_EXP : skip experiments in LIST_EXP"
15 echo " -exe COMMAND : use COMMAND to run the tests"
16 echo " -mpi : run the tests using MPI"
17 echo " -mf STRING :(MPI) file with list of possible machines to run on"
18 echo " -o STRING : used to build output directory name"
19 echo " (DEF=\"hostname\")"
20 echo " -a,-A STRING : email address to send output to"
21 echo " (DEF=\"\" no email is sent)"
22 echo " (-A: + save each log file)"
23 echo " -clean : clean output & reset"
24 exit
25 }
26
27 CLEAN=0
28 TESTDIRS=
29 SKIPDIRS=
30 SCRIPT='../tools/tst_2+2'
31 LOGFILE='tst_2+2_out.log'
32 scrArg='All'
33 COMMAND=
34 mpi=0
35 MPI_MFILE=
36 OUTDIR=`hostname | sed 's/\..*$//'`
37 SAVELOG=0
38 ADDRESS=
39 MPACK="../tools/mpack-1.6/mpack"
40 here=`pwd`
41 yy=
42 for xx
43 do
44 if test -n "$yy"; then
45 eval "$yy=\$xx"
46 yy=
47 else
48 case $xx in
49 -help ) usage ;;
50 -clean) CLEAN=1 ;;
51 -t ) yy=TESTDIRS ;;
52 -skd ) yy=SKIPDIRS ;;
53 -exe ) yy=COMMAND ;;
54 -mpi ) mpi=1 ;;
55 -mf ) yy=MPI_MFILE ;;
56 -a ) yy=ADDRESS ;;
57 -A ) yy=ADDRESS ; SAVELOG=1 ;;
58 -o ) yy=OUTDIR ;;
59 *) echo "Error: unrecognized option: "$xx ; usage ; exit ;;
60 esac
61 fi
62 done
63 #------------------------
64
65 if test "x$TESTDIRS" = x ; then TESTDIRS=`ls ` ; fi
66 LIST=""
67 for xx in $TESTDIRS
68 do
69 yy=`echo $SKIPDIRS | grep -c $xx`
70 if test $yy = 0 ; then
71 if test -f $xx/results/output.txt ; then
72 LIST=${LIST}" "$xx
73 # else
74 # echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
75 fi
76 # else
77 # echo ""; echo -n " -- skip \"$xx\" (excluded)"
78 fi
79 done
80
81 if test -x $SCRIPT ; then
82 if test $CLEAN = 1 ; then
83 echo "clean output from script '$SCRIPT' for experiment in:"
84 else
85 echo "run script '$SCRIPT' for experiment in:"
86 fi
87 echo " $LIST"
88 echo ""
89 yy=`echo $SCRIPT | grep -c '^\/'`
90 if test $yy = 0 ; then SCRIPT="../../$SCRIPT" ; fi
91 else
92 echo "ERROR: script '$SCRIPT' not found or not executable"
93 exit
94 fi
95 #------------------------
96
97 if test $CLEAN = 1 ; then
98 for xx in $LIST
99 do
100 listD='run '`(cd $xx/results ; ls output.*.txt 2> /dev/null | sed 's/^output\./tr_run./g' | sed 's/\.txt$//g' )`
101 for yy in $listD
102 do
103 if test -r $xx/$yy/data.tst ; then
104 echo "clean dir:" $xx/$yy
105 cd $xx/$yy
106 echo ' ' >> $LOGFILE
107 echo $SCRIPT 4 >> $LOGFILE
108 $SCRIPT 4 >> $LOGFILE 2>&1
109 cd $here
110 fi
111 done
112 done
113 exit
114 fi
115 #------------------------
116 # Create a uniquely named directory to store results
117 CMDLINE=$0
118 for xx in "$@" ; do nw=`echo $xx | wc -w`
119 if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
120 else CMDLINE="$CMDLINE '$xx'" ; fi
121 done
122 #for xx in "$@" ; do CMDLINE="$CMDLINE '$xx'" ; done
123 DATE=''
124 if test -f tr_out.txt ; then
125 # try to use the date corresponding to 'Start time:' in file "tr_out.txt" :
126 sTime=`grep '^Start time: ' tr_out.txt 2>/dev/null | sed 's/Start time: //'`
127 if test "x$sTime" != x ; then DATE=`date -d "$sTime" "+%Y%m%d" 2>/dev/null` ; fi
128 fi
129 # otherwise, use current date:
130 if test "x$DATE" = x ; then DATE=`date +%Y%m%d`; fi
131 BASE="rs_"$OUTDIR"_"$DATE"_"
132 xx=0
133 DRESULTS="$BASE$xx"
134 while test -e $DRESULTS ; do
135 xx=$(( $xx + 1 ))
136 DRESULTS="$BASE$xx"
137 done
138 mkdir $DRESULTS
139 out=$?
140 if test "x$out" != x0 ; then
141 echo "ERROR: Can't create results directory \"./$DRESULTS\""
142 exit 1
143 fi
144 SUMMARY="$DRESULTS/summary.txt"
145 OPTFILE=
146
147 printf "Start time: " > $SUMMARY
148 date >> $SUMMARY
149 echo 'run:' $CMDLINE >> $SUMMARY
150 if test -f tr_out.txt ; then
151 echo ' using output from:' >> $SUMMARY
152 sed -n '2,/^ OPTFILE=/ p' tr_out.txt >> $SUMMARY
153 echo >> $SUMMARY
154 fi
155 echo 'test 2+2=4 summary :' >> $SUMMARY
156 echo >> $SUMMARY
157 echo 'P. Run Result experiment' >> $SUMMARY
158 echo ' 1 2 3' >> $SUMMARY
159
160 #-- For MPI test:
161 LOC_MFILE='tr_mpi_mfile'
162 RUNOUTP="output.txt"
163 if [ $mpi -ge 1 ] ; then
164 SCRIPT="$SCRIPT -mpi"
165 RUNOUTP="STDOUT.0000"
166 fi
167
168 for xx in $LIST
169 do
170 echo '------------------------------------------------------------------------------'
171 if [ $mpi -le 0 ] ; then
172 rCommand=$COMMAND
173 else
174 LOC_NPROC=2
175 mpi_size=$xx/build/SIZE.h.mpi
176 if test -f $mpi_size ; then
177 px=`grep '^ & *nPx *=' $mpi_size | sed 's/^ & *nPx *= *//' | sed 's/, *$//'`
178 py=`grep '^ & *nPy *=' $mpi_size | sed 's/^ & *nPy *= *//' | sed 's/, *$//'`
179 pp=`expr $px \* $py` > /dev/null 2>&1 ; out=$?
180 if test "x$out" = x0 ; then LOC_NPROC=$pp ; fi
181 fi
182 rCommand=`echo $COMMAND | sed "s/ TR_NPROC / $LOC_NPROC /"`
183 if test "x$MPI_MFILE" != x ; then
184 #- create new MPI machine-file with the right number of Procs
185 rm -f $LOC_MFILE
186 cat $MPI_MFILE | sort | uniq | head -$LOC_NPROC > $LOC_MFILE
187 nl=`wc -l $LOC_MFILE | awk '{print $1}'`
188 if [ $nl -lt $LOC_NPROC ] ; then
189 rm -f $LOC_MFILE
190 cat $MPI_MFILE | head -$LOC_NPROC > $LOC_MFILE
191 fi
192 rCommand=`echo $rCommand | sed "s/ TR_MFILE / ..\/..\/$LOC_MFILE /"`
193 fi
194 fi
195
196 listD='run '`(cd $xx/results ; ls output.*.txt 2> /dev/null | sed 's/^output\./tr_run./g' | sed 's/\.txt$//g' )`
197 for yy in $listD
198 do
199 if test -f $xx/$yy/$RUNOUTP ; then
200 if test "x$OPTFILE" = x -a -f $xx/build/Makefile ; then
201 comm=`grep '^# OPTFILE=' $xx/build/Makefile 2>/dev/null | head -1 | sed 's/^# //'`
202 echo "from '$xx/build/Makefile', extract:" > $DRESULTS/genmake_state
203 sed -n '/^# executed by:/,+1 p' $xx/build/Makefile >> $DRESULTS/genmake_state
204 echo " $comm" >> $DRESULTS/genmake_state
205 eval $comm
206 gmkLog=$xx/build/genmake.log
207 grep '^Get compiler version using:' $gmkLog > /dev/null 2>&1
208 out=$?
209 if test "x$out" = x0 ; then
210 echo "from '$gmkLog', extract compiler version:" >> $DRESULTS/genmake_state
211 sed -n '/Get compiler version/,/<-- compiler version/p' $gmkLog \
212 | grep -v '^... compiler version ' > tr_vers.tmp_log
213 sed -n '1,/^$/p' tr_vers.tmp_log | sed '/^$/d' | sed 's/^./ &/' \
214 >> $DRESULTS/genmake_state
215 rm -f tr_vers.tmp_log
216 fi
217 fi
218 if test $yy = 'run' ; then nam=$xx
219 else nam=$xx`echo $yy | sed 's/tr_run//'` ; fi
220 echo -n "Entering $xx/$yy :"
221 cd $xx/$yy
222 pwd > $LOGFILE
223 if test "x$COMMAND" = x ; then
224 echo $SCRIPT $scrArg >> $LOGFILE ; echo ' ' >> $LOGFILE
225 $SCRIPT $scrArg >> $LOGFILE 2>&1
226 out=$?
227 else
228 echo "$SCRIPT $scrArg -command \"$rCommand\"" >> $LOGFILE
229 echo ' ' >> $LOGFILE
230 $SCRIPT $scrArg -command "$rCommand" >> $LOGFILE 2>&1
231 out=$?
232 fi
233 case $out in
234 0 ) echo ' pass test 2+2=4'
235 echo "Y Y Y Y pass <- $nam" >> ../../$SUMMARY ;;
236 4|5) echo "Y Y Y Y FAIL ($out) - $nam" >> ../../$SUMMARY ;;
237 3 ) echo "Y Y Y N FAIL ($out) - $nam" >> ../../$SUMMARY ;;
238 2 ) echo "Y Y N N FAIL ($out) - $nam" >> ../../$SUMMARY ;;
239 1 ) echo "Y N N N FAIL ($out) - $nam" >> ../../$SUMMARY ;;
240 * ) echo "N N N N FAIL ($out) - $nam" >> ../../$SUMMARY ;;
241 esac
242 if test $out != '0' ; then
243 echo " test 2+2=4 FAIL (exit $out)"
244 echo " "
245 tail -5 $LOGFILE
246 echo " "
247 cp -p $LOGFILE ../../$DRESULTS/$nam.log
248 elif test $SAVELOG = 1 ; then
249 cp -p $LOGFILE ../../$DRESULTS/$nam.log
250 fi
251 cd $here
252 fi
253 done
254 if test "x$mpi" != x0 -a "x$MPI_MFILE" != x ; then rm -f $LOC_MFILE ; fi
255 done
256 printf "End time: " >> $SUMMARY
257 date >> $SUMMARY
258
259 # If address was supplied and mpack exist, then send email using mpack.
260 if test "x$ADDRESS" != xNONE -a "x$ADDRESS" != x ; then
261 if test -x $MPACK ; then
262 tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
263 && gzip $DRESULTS".tar" \
264 && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESS
265 out=$?
266 if test "x$out" != x0 ; then
267 echo
268 echo "Warning: The tar, gzip, & mpack step failed. Please send email"
269 echo " to <MITgcm-support@mitgcm.org> for help. You may copy the "
270 echo " summary of results from the directory \"$DRESULTS\"."
271 echo
272 else
273 echo
274 echo "An email containing results was sent to the following address:"
275 echo " \"$ADDRESS\""
276 echo
277 fi
278 test -f $DRESULTS".tar" && rm -f $DRESULTS".tar"
279 test -f $DRESULTS".tar.gz" && rm -f $DRESULTS".tar.gz"
280 else
281 echo "Warning: $MPACK is not executable => no email was sent"
282 echo
283 fi
284 fi
285
286 # save output and remove output Dir (if no address was provided)
287 # note: to keep the output Dir without sending email, use option "-a NONE"
288 if test -f tst_2+2_out.txt ; then mv -f tst_2+2_out.txt tst_2+2_out.old ; fi
289 cp -p $SUMMARY tst_2+2_out.txt
290 if test "x$ADDRESS" = x ; then
291 rm -rf $DRESULTS
292 fi

  ViewVC Help
Powered by ViewVC 1.1.22