/[MITgcm]/mitgcm.org/scripts/check_outp
ViewVC logotype

Annotation of /mitgcm.org/scripts/check_outp

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


Revision 1.20 - (hide annotations) (download)
Wed Dec 23 17:15:22 2009 UTC (14 years, 9 months ago) by jmc
Branch: MAIN
Changes since 1.19: +2 -2 lines
add pleiades in list of machines

1 jmc 1.1 #! /usr/bin/env bash
2    
3 jmc 1.20 # $Header: /u/gcmpack/mitgcm.org/scripts/check_outp,v 1.19 2009/09/01 20:27:24 jmc Exp $
4 jmc 1.1 #
5     # The purpose of this script is to compare
6     # the latest output with the previous one (from the same platform with
7     # same optfile)
8    
9    
10     usage()
11     {
12     echo
13     echo "Usage: $0 [OPTIONS]"
14     echo
15     echo "where possible OPTIONS are:"
16     echo " (-h|-help) print usage"
17     echo " (-v|-verbose) verbose mode"
18     echo " (-l |-list )MACHINES check platforms from this list"
19     echo " [def=\"$MACHINES\"]"
20     echo " (-d |-day )FIRSTDAY select output from day=\"YYYYMMDD\""
21 jmc 1.5 echo " (argument of \"date -d\" is allowed)"
22 jmc 1.1 echo " [def=\"$FIRSTDAY\"]"
23     echo " (-u |-upto )LASTDAY until last day=\"YYYYMMDD\" (=selected period)"
24     echo " [def=\"FIRSTDAY\"]"
25     echo " (-o |-outp )OUTPFIL output file (-1 removed when exit)"
26     echo " [def=\"$OUTPFIL\"]"
27     echo " (-n |-nldf )NBLDIFF max number of diff lines to echo"
28     echo " [def=\"$NBLDIFF\"]"
29     echo " (-a |-addr )ADDRESS send summary to mail ADDRESS list"
30     echo " [def=\"$ADDRESS\"]"
31     echo
32     exit 1
33     }
34    
35 jmc 1.16 # create list of results dir for one platform:
36     make_resdir_list()
37     {
38     if test $monthDir == 1 ; then
39     dir_list=`grep $mname ./dir_all`
40     else
41     dir_list=`( cd $INDIR ; ls -1 -t ../$PREV_P/*${mname}*/summary.txt 2> /dev/null | sed 's/\/summary.txt//' )`
42     #echo "dir_list='$dir_list'"
43     fi
44     for i in $dir_list ; do
45    
46     dir=$INDIR"/"$i
47     OPTFILE=
48     if test -r $dir/summary.txt ; then
49     comm=`grep 'OPTFILE=' $dir/summary.txt`
50     eval $comm
51     OPTFILE=${OPTFILE##*/}
52     fi
53     if test "x$OPTFILE" = x -a -r "$dir/genmake_state" ; then
54     comm=`grep 'OPTFILE=' $dir/genmake_state 2>/dev/null`
55     eval $comm
56     OPTFILE=${OPTFILE##*/}
57     fi
58     if test "x$OPTFILE" = x ; then
59     comm=`grep '^# OPTFILE=' $dir/*/Makefile* 2>/dev/null | head -1`
60     comm=${comm##*#}
61     eval $comm
62     OPTFILE=${OPTFILE##*/}
63     fi
64     if test "x$OPTFILE" = x ; then
65     OPTFILE="not_explicitly_specified"
66     fi
67    
68     ADJOINT=
69     RESTART=0
70     NOI3E=0
71     MTH=0
72     if test -r $dir/summary.txt ; then
73     comm=`grep 'ADJOINT=true' $dir/summary.txt 2>/dev/null`
74     eval $comm
75     RESTART=`grep -c 'test 2+2=4 summary' $dir/summary.txt`
76     NOI3E=`grep -c "^run: .*testreport.* '*-noieee'*" $dir/summary.txt`
77     MTH=`grep -c "^run: .*testreport.* -mth" $dir/summary.txt`
78     fi
79     if test "x$RESTART" = x0 ; then
80     kind="forward"
81     test "x$ADJOINT" = xtrue && kind="adjoint"
82     else
83     kind="restart"
84     fi
85     if test "x$MTH" = x1 ; then
86     yy=`echo $OPTFILE | grep -c '+mth$'`
87     if test $yy = 0 ; then OPTFILE="${OPTFILE}+mth" ; fi
88     fi
89     if test "x$NOI3E" = x1 ; then
90     OPTFILE="${OPTFILE}.noieee"
91     fi
92     day=`echo $i | sed -e 's/_[0-9]$//' | sed -e 's/_[0-9][0-9]$//'`
93     ttt=`echo $day | sed -e 's/_[0-9]$//' | sed -e 's/_[0-9][0-9]$//'`
94     day=`echo $ttt | sed -e 's|_| |g' |awk '{print $NF}'`
95    
96     if [ $day -lt $FIRSTDAY ] ; then
97     echo "$OPTFILE$kind $day $OPTFILE $kind $i" >> ./plist
98     elif [ $day -le $LASTDAY ] ; then
99     echo "$OPTFILE$kind $day $OPTFILE $kind $i" >> ./slist
100     else
101     if test $dBug = 't' ; then
102     echo "discard day='$day' from: $i" | tee -a $OUTPFIL
103     fi
104     fi
105    
106     done
107     if test $dBug = 't' ; then
108     if test $monthDir == 1 ; then
109     echo "---- current list (n=$monthDir) :" | tee -a $OUTPFIL
110     cat ./slist | tee -a $OUTPFIL
111     fi
112     num1=`wc -l ./slist | awk '{print $1}'`
113     if test $num1 -gt 0 ; then
114     echo ".... previous list (n=$monthDir):" | tee -a $OUTPFIL
115     cat ./plist | tee -a $OUTPFIL | head -20
116     fi
117     echo "----" | tee -a $OUTPFIL
118     fi
119     }
120    
121     #--------------------------------------------------------------------------
122     # here starts the sequential part of the script:
123    
124 jmc 1.1 #CURR_PER=`date +%Y`"_"`date +%m`
125     CURR_DAY=`date +%Y%m%d`
126     # defaults
127     MACHINES='_All_'
128     FIRSTDAY=$CURR_DAY
129     LASTDAY="30000000"
130     OUTPFIL=`basename $0`'.log'
131     NBLDIFF=5
132     ADDRESS='none'
133     dBug=f
134     sTime=`date`
135 jmc 1.12 #- to get case insensitive "ls" (and order of tested experiments)
136     export LC_ALL="en_US.UTF-8"
137 jmc 1.1
138     # Parse options
139     ac_prev=
140     for ac_option ; do
141    
142     # If the previous option needs an argument, assign it.
143     if test -n "$ac_prev"; then
144     eval "$ac_prev=\$ac_option"
145     ac_prev=
146     continue
147     fi
148    
149     ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
150    
151     case $ac_option in
152    
153     -help | --help | -h | --h)
154     usage ;;
155     -verbose | --verbose | -v | --v)
156     dBug=t ;;
157    
158     -list | --list | -l | --l)
159     ac_prev=MACHINES ;;
160     -list=* | --list=*)
161     MACHINES=$ac_optarg ;;
162    
163     -day | --day | -d | --d)
164     ac_prev=FIRSTDAY ;;
165     -day=* | --day=*)
166     FIRSTDAY=$ac_optarg ;;
167    
168     -upto | --upto | -u | --u)
169     ac_prev=LASTDAY ;;
170     -upto=* | --upto=*)
171     LASTDAY=$ac_optarg ;;
172    
173     -outp | --outp | -o | --o)
174     ac_prev=OUTPFIL ;;
175     -outp=* | --outp=*)
176     OUTPFIL=$ac_optarg ;;
177    
178     -nldf | --nldf | -n | --n)
179     ac_prev=NBLDIFF ;;
180     -nldf=* | --nldf=*)
181     NBLDIFF=$ac_optarg ;;
182    
183     -addr | --addr | -a | --a)
184     ac_prev=ADDRESS ;;
185     -addr=* | --addr=*)
186     ADDRESS=$ac_optarg ;;
187    
188     *)
189     echo "Error: don't understand argument \"$ac_option\""
190     usage
191     ;;
192    
193     esac
194    
195     done
196 jmc 1.5 #-- test FIRSTDAY content ; interpret as "date -d" arg. if not YYYYMMDD
197     ttt=`echo "y$FIRSTDAY" | sed 's/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/z/'`
198     if test "x$ttt" != 'xyz' ; then
199     FIRSTDAY=`date -d "$FIRSTDAY" +%Y%m%d`
200     fi
201     ttt=`echo "y$FIRSTDAY" | sed 's/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/z/'`
202     if test "x$ttt" != 'xyz' ; then
203     echo "Error: FIRSTDAY='$FIRSDAY' not recognized"
204     exit 2
205     fi
206 jmc 1.1 if test $LASTDAY = "30000000" ; then LASTDAY=$FIRSTDAY ; fi
207     CMDLINE=$0
208     for xx in "$@" ; do nw=`echo $xx | wc -w`
209     if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
210     else CMDLINE="$CMDLINE '$xx'" ; fi
211     done
212    
213     PERIOD=`echo $FIRSTDAY | sed 's/[0-9][0-9]$//'`
214     PP=`expr $PERIOD - 1`
215     PM=`echo $PP | sed 's/^[0-9][0-9][0-9][0-9]//'`
216     PY=`echo $PP | sed 's/[0-9][0-9]$//'`
217     if test $PM == '00' ; then PM='12' ; PY=`expr $PY - 1` ; fi
218     PREV_P="${PY}_${PM}";
219     PERIOD=`echo $PERIOD | sed 's/^[0-9][0-9][0-9][0-9]/&_/'`
220    
221     #INDIR="/net/orwell/export/export-9/mitgcm-testing/results/$PERIOD"
222     INDIR="/u/u0/httpd/html/testing/results/$PERIOD"
223     #INDIR="/export/export-7/u/u2/jmc/mitgcm/test_web/results/$PERIOD"
224    
225     if test $OUTPFIL = '-1' ; then
226     OUTPFIL='TTT.'$$
227     elif test -e $OUTPFIL ; then
228     mv -f $OUTPFIL $OUTPFIL'_bak'
229     fi
230     echo "CMDLINE='$CMDLINE'" > $OUTPFIL
231     echo "PERIOD='$PERIOD' , PREV_P='$PREV_P'" >> $OUTPFIL
232     echo "INDIR='$INDIR'" >> $OUTPFIL
233     echo "Checking latest output from $FIRSTDAY until $LASTDAY" >> $OUTPFIL
234    
235     if test $dBug = 't' ; then
236     echo "PERIOD='$PERIOD' , PREV_P='$PREV_P'"
237     echo "FIRSTDAY='$FIRSTDAY' , LASTDAY='$LASTDAY'"
238     fi
239     if test -d $INDIR ; then
240     dirP=`echo $INDIR | sed "s/$PERIOD/$PREV_P/"`
241     if test -d $dirP ; then
242     listNum='1 2'
243     else
244     echo "$dirP is not a directory"
245     listNum='1'
246     fi
247     else
248     echo "$INDIR is not a directory"
249 jmc 1.5 exit 3
250 jmc 1.1 fi
251    
252     #- a short summary of this checking :
253     OUTPSUM=`echo $FIRSTDAY | sed 's/^20../_/'`
254     OUTPSUM=`basename $0`"$OUTPSUM.txt"
255     if test -e $OUTPSUM ; then mv -f $OUTPSUM $OUTPSUM'_bak' ; fi
256     echo ' '$CMDLINE > $OUTPSUM
257    
258     if test $FIRSTDAY = $LASTDAY ; then
259     echo -n "Checking latest output from $FIRSTDAY" | tee -a $OUTPSUM
260     else
261     echo -n "Checking latest output from $FIRSTDAY until $LASTDAY" | tee -a $OUTPSUM
262     fi
263     echo " versus latest prior to this period" | tee -a $OUTPSUM
264     echo " Machine Tot. Nb. no Nb with Nb diff" >> $OUTPSUM
265     echo " name checked comp Diff lines" >> $OUTPSUM
266    
267     ( cd $INDIR ; ls -1 -t */summary.txt | sed 's/\/summary.txt//' ) > ./dir_all
268    
269     if test "x$MACHINES" = "x_All_" ; then
270 jmc 1.14 MACHINES="faulks meander lagoon harbor dickens danton aces"
271 jmc 1.20 MACHINES="$MACHINES beagle columbia pleiades edvir rays solasrv sx8 xd1"
272 jmc 1.14 MACHINES="$MACHINES bigred starp"
273 jmc 1.1
274     MALL=`cat ./dir_all | sed -e 's|_| |g' | awk '{print $2}' | sort | uniq`
275     for madd in $MALL ; do
276     present=0
277     for m in $MACHINES ; do
278     echo $madd | grep $m > /dev/null 2>&1
279     RETVAL=$?
280     test $RETVAL = 0 && present=1
281     continue
282     done
283     test $present = 0 && MACHINES="$MACHINES $madd"
284     done
285     fi
286    
287     for mname in $MACHINES ; do
288    
289     if test $dBug = 't' ; then echo " $mname" ; fi
290     echo " name='$mname'" >> $OUTPFIL
291     ctot=0 ; cmis=0 ; cdif=0
292    
293     # put results from selected period in "slist",
294     # results from previous period in "plist"
295     rm -f ./plist ./slist ; touch ./plist ./slist
296    
297 jmc 1.16 #- create list of results (slist & plist) from current month directory
298     monthDir=1
299     make_resdir_list
300 jmc 1.1
301     # Do we have any data? If so, create the latest pointer.
302     num=`wc -l ./slist | awk '{print $1}'`
303     if test $num -gt 0 ; then
304    
305     keys=`cat ./slist | cut -d " " -f 1 | sort | uniq`
306    
307     for key in $keys ; do
308     ctot=`expr $ctot + 1`
309     sline=`grep "^$key " ./slist | head -1`
310     sdir=`echo $sline | cut -d " " -f 5`
311 jmc 1.17 type=`echo $sline | cut -d " " -f 4`
312 jmc 1.1 optf=`echo $sline | cut -d " " -f 3`
313     num=`grep -c "^$key" ./plist`
314 jmc 1.16 if test $num = 0 -a $monthDir = 1 ; then
315     #- add results from previous month directory to "plist".
316     monthDir=2
317     make_resdir_list
318     num=`grep -c "^$key" ./plist`
319     fi
320 jmc 1.1 #- discard unsafe test:
321 jmc 1.18 dd=`echo $optf | grep -c 'gfortran+mth'`
322 jmc 1.13 #if test $mname = 'lagoon' -a $dd = 1 ; then num=-1 ; fi
323     #if test $mname = 'harbor' -a $dd = 1 ; then num=-1 ; fi
324     #if test $mname = 'aces' -a $optf = 'linux_ia32_open64' ; then num=-1 ; fi
325     #if test $mname = 'aces' -a $optf = 'linux_ia32_g95' ; then num=-1 ; fi
326 jmc 1.18 dd=`echo $optf | grep -c 'bigred.*+mth'`
327     #if test $mname = 'bigred' -a $dd = 1 ; then num=-1 ; fi
328     if test $num -lt 0 ; then
329     echo " discard $sdir : $type , of='$optf'" | tee -a $OUTPFIL
330     cmis=`expr $cmis + 1`
331     elif test $num = '0' ; then
332     echo "no previous test for:" $key | tee -a $OUTPFIL
333     cmis=`expr $cmis + 1`
334     else
335 jmc 1.1 pline=`grep "^$key " ./plist | head -1`
336     if test $dBug = 't' ; then
337     echo "s='$sline'" | tee -a $OUTPFIL
338     echo "p='$pline'" | tee -a $OUTPFIL
339     fi
340     pdir=`echo $pline | cut -d " " -f 5`
341     outs="$INDIR/$sdir/summary.txt"
342     sed -n "5,$ p" $outs | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' \
343 jmc 1.4 | sed 's/ OPTFILE=.*\// OPTFILE=/g' \
344 jmc 1.1 | grep -v '^[A-S][a-t]* time: ' > tmpfs
345     outp="$INDIR/$pdir/summary.txt"
346     sed -n "5,$ p" $outp | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' \
347 jmc 1.4 | sed 's/ OPTFILE=.*\// OPTFILE=/g' \
348 jmc 1.1 | grep -v '^[A-S][a-t]* time: ' > tmpfp
349 jmc 1.11 #-- re-order list of exp (according to local "sort" order)
350 jmc 1.19 listD=`grep '^[YN] [YN] [YN] [YN]' tmpfs | awk '{print $NF}' | sort`
351 jmc 1.11 for xx in $listD
352     do
353     sed "/ $xx\$/d" tmpfs > tmpfn
354     sed -n "/ $xx\$/p" tmpfs >> tmpfn
355     mv tmpfn tmpfs
356     done
357 jmc 1.19 listD=`grep '^[YN] [YN] [YN] [YN]' tmpfp | awk '{print $NF}' | sort`
358 jmc 1.11 for xx in $listD
359     do
360     sed "/ $xx\$/d" tmpfp > tmpfn
361     sed -n "/ $xx\$/p" tmpfp >> tmpfn
362     mv tmpfn tmpfp
363     done
364 jmc 1.1 echo -n "=== diff $sdir $pdir :" | tee -a $OUTPFIL
365     diff tmpfs tmpfp > tmpdf
366     yy=$?
367     if test $yy != '0' ; then
368 jmc 1.17 echo " $type , of='$optf'" | tee -a $OUTPFIL
369 jmc 1.1 #grep '^run: ' $outp
370     #grep '^run: ' $outs
371     #-- score for each test:
372     grep '^[YN] [YN] [YN] [YN]' tmpfs > tmploc 2>/dev/null
373     t_tot=`cat tmploc | wc -l | sed -e 's| ||g'`
374     t_pass=`grep '^Y Y Y Y' tmploc | grep 'pass ' | wc -l | sed -e 's| ||g'`
375     score_s=`printf '%2i' $t_pass`":$t_tot"
376     grep '^[YN] [YN] [YN] [YN]' tmpfp > tmploc 2>/dev/null
377     t_tot=`cat tmploc | wc -l | sed -e 's| ||g'`
378     t_pass=`grep '^Y Y Y Y' tmploc | grep 'pass ' | wc -l | sed -e 's| ||g'`
379     score_p=`printf '%2i' $t_pass`":$t_tot"
380     rm -f tmploc
381     #-- count Nb of different lines
382     ndf=`wc -l tmpdf | awk '{print $1}'`
383     ndf=`expr $ndf / 2`
384     nn=`grep -c '^---' tmpdf`
385     ndf=`expr $ndf - $nn`
386     if [ $ndf -le $NBLDIFF ] ; then
387     cat tmpdf
388     else
389     echo " $ndf lines differ ( $score_s , $score_p )"
390     fi
391     echo "< "`head -1 $outs`" ( $score_s )" >> $OUTPFIL
392     echo "> "`head -1 $outp`" ( $score_p )" >> $OUTPFIL
393     cat tmpdf >> $OUTPFIL
394     if [ $cdif -eq 0 ] ; then
395     clin=`printf '%3i (%5s,%5s)' $ndf $score_s $score_p`
396     else
397     clin="$clin,"`printf '%3i (%5s,%5s)' $ndf $score_s $score_p`
398     fi
399     cdif=`expr $cdif + 1`
400     echo '----------------------------------------' | tee -a $OUTPFIL
401     else
402 jmc 1.18 echo " $type , of='$optf'" | tee -a $OUTPFIL
403 jmc 1.1 fi
404     rm -f tmpfs tmpfp tmpdf
405     fi
406     done
407     if [ $cmis -gt 0 ] ; then tmis='(-'$cmis')' ; else tmis='(--)' ; fi
408     printf '%11s : %3i %4s %3i ' $mname $ctot $tmis $cdif >> $OUTPSUM
409     if [ $cdif -gt 0 ] ; then
410     echo " $clin" >> $OUTPSUM
411     else echo "" >> $OUTPSUM ; fi
412     fi
413    
414     done
415    
416     echo "Start time: $sTime" | tee -a $OUTPFIL
417     echo "End time: "`date` | tee -a $OUTPFIL | tee -a $OUTPSUM
418    
419     rm -f ./dir_all ./slist ./plist
420     if test $OUTPFIL = "TTT.$$" ; then rm -f $OUTPFIL ; fi
421     if test "x$ADDRESS" != 'xnone' ; then
422     echo ".. send $OUTPSUM to $ADDRESS"
423     mail -s $OUTPSUM $ADDRESS < $OUTPSUM
424     fi
425     echo ".. cat $OUTPSUM"
426     cat $OUTPSUM
427 jmc 1.5 exit 0

  ViewVC Help
Powered by ViewVC 1.1.22