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

Diff of /MITgcm/tools/do_tst_2+2

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

revision 1.1 by jmc, Tue Dec 25 22:10:51 2007 UTC revision 1.10 by jmc, Fri Jan 21 02:18:46 2011 UTC
# Line 1  Line 1 
1  #!/bin/sh  #! /usr/bin/env bash
2    
3  # $Header$  # $Header$
4  # $Name$  # $Name$
# Line 12  usage() Line 12  usage()
12          echo "  -help         : print usage"          echo "  -help         : print usage"
13          echo "  -t   LIST_EXP : only check experiments in LIST_EXP"          echo "  -t   LIST_EXP : only check experiments in LIST_EXP"
14          echo "  -skd LIST_EXP : skip experiments in LIST_EXP"          echo "  -skd LIST_EXP : skip experiments in LIST_EXP"
15          echo "  (-o) STRING   : used to build output directory name"          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\")"          echo "                      (DEF=\"hostname\")"
20          echo "  (-a) STRING   : email address to send output to"          echo "  -a,-A  STRING : email address to send output to"
21          echo "                      (DEF=\"\" no email is sent)"          echo "                      (DEF=\"\" no email is sent)"
22            echo "                      (-A: + save each log file)"
23          echo "  -clean        : clean output & reset"          echo "  -clean        : clean output & reset"
24          exit          exit
25  }  }
# Line 23  usage() Line 27  usage()
27  CLEAN=0  CLEAN=0
28  TESTDIRS=  TESTDIRS=
29  SKIPDIRS=  SKIPDIRS=
 OUTDIR=`hostname`  
 ADDRESS=  
30  SCRIPT='../tools/tst_2+2'  SCRIPT='../tools/tst_2+2'
31    scrArg='All'
32    COMMAND=
33    mpi=0
34    MPI_MFILE=
35    OUTDIR=`hostname | sed 's/\..*$//'`
36    SAVELOG=0
37    ADDRESS=
38  MPACK="../tools/mpack-1.6/mpack"  MPACK="../tools/mpack-1.6/mpack"
39  here=`pwd`  here=`pwd`
40  yy=  yy=
# Line 40  do Line 49  do
49        -clean) CLEAN=1 ;;        -clean) CLEAN=1 ;;
50        -t    ) yy=TESTDIRS ;;        -t    ) yy=TESTDIRS ;;
51        -skd  ) yy=SKIPDIRS ;;        -skd  ) yy=SKIPDIRS ;;
52          -exe  ) yy=COMMAND ;;
53          -mpi  ) mpi=1 ;;
54          -mf   ) yy=MPI_MFILE ;;
55        -a    ) yy=ADDRESS ;;        -a    ) yy=ADDRESS ;;
56          -A    ) yy=ADDRESS ; SAVELOG=1 ;;
57        -o    ) yy=OUTDIR ;;        -o    ) yy=OUTDIR ;;
58          *) echo "Error: unrecognized option: "$xx ; usage ; exit ;;          *) echo "Error: unrecognized option: "$xx ; usage ; exit ;;
59        esac        esac
# Line 48  do Line 61  do
61  done  done
62  #------------------------  #------------------------
63    
64  if test "x$TESTDIRS" = x  if test "x$TESTDIRS" = x ; then TESTDIRS=`ls ` ; fi
 then  
  TESTDIRS=`ls `  
 fi  
65  LIST=""  LIST=""
66  for xx in $TESTDIRS  for xx in $TESTDIRS
67  do  do
68    yy=`echo $SKIPDIRS | grep -c $xx`    yy=`echo $SKIPDIRS | grep -c $xx`
69    if test $yy = 0 ; then    if test $yy = 0 ; then
70      if test -f $xx/results/output.txt      if test -f $xx/results/output.txt ; then
     then  
71         LIST=${LIST}" "$xx         LIST=${LIST}" "$xx
72  #   else  #   else
73  #      echo ""; echo -n " -- skip \"$xx\" (not a directory !)"  #      echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
# Line 71  done Line 80  done
80  if test -x $SCRIPT ; then  if test -x $SCRIPT ; then
81   echo "run script '$SCRIPT' for experiment in:"   echo "run script '$SCRIPT' for experiment in:"
82   echo " $LIST"   echo " $LIST"
83   yy=`echo $SCRIPT | grep -c '^\/'`   yy=`echo $SCRIPT | grep -c '^\/'`
84   if test $yy = 0 ; then SCRIPT="../../$SCRIPT" ; fi   if test $yy = 0 ; then SCRIPT="../../$SCRIPT" ; fi
85  else  else
86   echo "ERROR: script '$SCRIPT' not found or not executable"   echo "ERROR: script '$SCRIPT' not found or not executable"
# Line 86  if test $CLEAN = 1 ; then Line 95  if test $CLEAN = 1 ; then
95    listD='run '`(cd $xx/results ; ls output.*.txt 2> /dev/null | sed 's/^output\./tr_run./g' | sed 's/\.txt$//g' )`    listD='run '`(cd $xx/results ; ls output.*.txt 2> /dev/null | sed 's/^output\./tr_run./g' | sed 's/\.txt$//g' )`
96    for yy in $listD    for yy in $listD
97    do    do
98      if test -r $xx/$yy/data.tst      if test -r $xx/$yy/data.tst ; then
     then  
99        echo "clean dir:" $xx/$yy        echo "clean dir:" $xx/$yy
100        cd $xx/$yy        cd $xx/$yy
101        echo ' ' >> outp.tst_2+2.log        echo ' ' >> outp.tst_2+2.log
102        echo $SCRIPT 4 >> outp.tst_2+2.log        echo $SCRIPT 4 >> outp.tst_2+2.log
103        $SCRIPT 4 >> outp.tst_2+2.log 2>&1        $SCRIPT 4 >> outp.tst_2+2.log 2>&1
# Line 101  if test $CLEAN = 1 ; then Line 109  if test $CLEAN = 1 ; then
109  fi  fi
110  #------------------------  #------------------------
111  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
112    CMDLINE=$0
113    for xx in "$@" ; do nw=`echo $xx | wc -w`
114        if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
115                            else CMDLINE="$CMDLINE '$xx'" ; fi
116    done
117    #for xx in "$@" ; do CMDLINE="$CMDLINE '$xx'" ; done
118  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
119  BASE="rs_"$OUTDIR"_"$DATE"_"  BASE="rs_"$OUTDIR"_"$DATE"_"
120  xx=0  xx=0
# Line 120  OPTFILE= Line 134  OPTFILE=
134    
135  printf "Start time:  " >  $SUMMARY  printf "Start time:  " >  $SUMMARY
136  date  >> $SUMMARY  date  >> $SUMMARY
137    echo 'run:' $CMDLINE >> $SUMMARY
138  if test -f tr_out.txt ; then  if test -f tr_out.txt ; then
139   echo ' using output from:' >> $SUMMARY   echo ' using output from:' >> $SUMMARY
140   sed -n '2,/OPTFILE/ p' tr_out.txt >> $SUMMARY   sed -n '2,/OPTFILE/ p' tr_out.txt >> $SUMMARY
# Line 130  echo  >> $SUMMARY Line 145  echo  >> $SUMMARY
145  echo 'P. Run  Result     experiment'  >> $SUMMARY  echo 'P. Run  Result     experiment'  >> $SUMMARY
146  echo '  1 2 3'  >> $SUMMARY  echo '  1 2 3'  >> $SUMMARY
147    
148    #-- For MPI test:
149    LOC_MFILE='tr_mpi_mfile'
150    RUNOUTP="output.txt"
151    if [ $mpi -ge 1 ] ; then
152      SCRIPT="$SCRIPT -mpi"
153      RUNOUTP="STDOUT.0000"
154    fi
155    
156  for xx in $LIST  for xx in $LIST
157  do  do
158    echo ==============================================================================    echo ==============================================================================
159      if [ $mpi -le 0 ] ; then
160        rCommand=$COMMAND
161      else
162        LOC_NPROC=2
163        mpi_size=$xx/build/SIZE.h.mpi
164        if test -f $mpi_size ; then
165          px=`grep '^     & *nPx *=' $mpi_size | sed 's/^     & *nPx *= *//' | sed 's/, *$//'`
166          py=`grep '^     & *nPy *=' $mpi_size | sed 's/^     & *nPy *= *//' | sed 's/, *$//'`
167          pp=`expr $px \* $py` > /dev/null 2>&1 ; out=$?
168          if test "x$out" = x0 ; then LOC_NPROC=$pp ; fi
169        fi
170        rCommand=`echo $COMMAND | sed "s/ TR_NPROC / $LOC_NPROC /"`
171        if test "x$MPI_MFILE" != x ; then
172          #- create new MPI machine-file with the right number of Procs
173          rm -f $LOC_MFILE
174          cat $MPI_MFILE | sort | uniq | head -$LOC_NPROC > $LOC_MFILE
175          nl=`wc -l $LOC_MFILE | awk '{print $1}'`
176          if [ $nl -lt $LOC_NPROC ] ; then
177            rm -f $LOC_MFILE
178            cat $MPI_MFILE | head -$LOC_NPROC > $LOC_MFILE
179          fi
180          rCommand=`echo $rCommand | sed "s/ TR_MFILE / ..\/..\/$LOC_MFILE /"`
181        fi
182      fi
183    
184    listD='run '`(cd $xx/results ; ls output.*.txt 2> /dev/null | sed 's/^output\./tr_run./g' | sed 's/\.txt$//g' )`    listD='run '`(cd $xx/results ; ls output.*.txt 2> /dev/null | sed 's/^output\./tr_run./g' | sed 's/\.txt$//g' )`
185    for yy in $listD    for yy in $listD
186    do    do
187      if test -f $xx/$yy/output.txt      if test -f $xx/$yy/$RUNOUTP ; then
     then  
188        if test "x$OPTFILE" = x -a -f $xx/build/Makefile ; then        if test "x$OPTFILE" = x -a -f $xx/build/Makefile ; then
189          comm=`grep '^# OPTFILE=' $xx/build/Makefile 2>/dev/null | head -1 | sed 's/^# //'`          comm=`grep '^# OPTFILE=' $xx/build/Makefile 2>/dev/null | head -1 | sed 's/^# //'`
190          echo "from '$xx/build/Makefile', extract:" > $DRESULTS/genmake_state          echo "from '$xx/build/Makefile', extract:" > $DRESULTS/genmake_state
191          echo $comm >> $DRESULTS/genmake_state          sed -n '/^# executed by:/,+1 p' $xx/build/Makefile >> $DRESULTS/genmake_state
192            echo " $comm" >> $DRESULTS/genmake_state
193          eval $comm          eval $comm
194            gmkLog=$xx/build/genmake.log
195            grep '^Get compiler version using:' $gmkLog > /dev/null 2>&1
196            out=$?
197            if test "x$out" = x0 ; then
198                echo "from '$gmkLog', extract compiler version:" >> $DRESULTS/genmake_state
199                sed -n '/Get compiler version/,/<-- compiler version/p' $gmkLog \
200                           | grep -v '^... compiler version ' > tr_vers.tmp_log
201                sed -n '1,/^$/p' tr_vers.tmp_log | sed '/^$/d' | sed 's/^./ &/' \
202                          >> $DRESULTS/genmake_state
203                rm -f tr_vers.tmp_log
204            fi
205        fi        fi
206        if test $yy = 'run' ; then nam=$xx        if test $yy = 'run' ; then nam=$xx
207        else nam=$xx`echo $yy | sed 's/tr_run//'` ; fi        else nam=$xx`echo $yy | sed 's/tr_run//'` ; fi
208        echo -n "Entering $xx/$yy :"        echo -n "Entering $xx/$yy :"
209        cd $xx/$yy        cd $xx/$yy
210        echo $SCRIPT All > outp.tst_2+2.log ; echo ' ' >> outp.tst_2+2.log        pwd > outp.tst_2+2.log
211        $SCRIPT All >> outp.tst_2+2.log 2>&1        if test "x$COMMAND" = x ; then
212        out=$?          echo $SCRIPT $scrArg >> outp.tst_2+2.log ; echo ' ' >> outp.tst_2+2.log
213            $SCRIPT $scrArg >> outp.tst_2+2.log 2>&1
214            out=$?
215          else
216            echo "$SCRIPT $scrArg -command \"$rCommand\"" >> outp.tst_2+2.log
217            echo ' ' >> outp.tst_2+2.log
218            $SCRIPT $scrArg -command "$rCommand" >> outp.tst_2+2.log 2>&1
219            out=$?
220          fi
221        case $out in        case $out in
222         0 ) echo ' pass test 2+2=4'         0 ) echo ' pass test 2+2=4'
223             echo "Y Y Y Y  pass   <- $nam" >> ../../$SUMMARY ;;             echo "Y Y Y Y  pass   <- $nam" >> ../../$SUMMARY ;;
# Line 160  do Line 227  do
227         1 ) echo "Y N N N FAIL ($out) - $nam" >> ../../$SUMMARY ;;         1 ) echo "Y N N N FAIL ($out) - $nam" >> ../../$SUMMARY ;;
228         * ) echo "N N N N FAIL ($out) - $nam" >> ../../$SUMMARY ;;         * ) echo "N N N N FAIL ($out) - $nam" >> ../../$SUMMARY ;;
229        esac        esac
230        if test $out != '0'        if test $out != '0' ; then
       then  
231          echo " test 2+2=4 FAIL (exit $out)"          echo " test 2+2=4 FAIL (exit $out)"
232          echo " "          echo " "
233          tail -5 outp.tst_2+2.log          tail -5 outp.tst_2+2.log
234          echo " "          echo " "
235            cp -p outp.tst_2+2.log ../../$DRESULTS/$nam.log
236          elif test $SAVELOG = 1 ; then
237            cp -p outp.tst_2+2.log ../../$DRESULTS/$nam.log
238        fi        fi
239        cd $here        cd $here
240      fi      fi
241    done    done
242      if test "x$mpi" != x0 -a "x$MPI_MFILE" != x ; then rm -f $LOC_MFILE ; fi
243  done  done
244  printf "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
245  date >> $SUMMARY  date >> $SUMMARY

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.10

  ViewVC Help
Powered by ViewVC 1.1.22