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

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

  ViewVC Help
Powered by ViewVC 1.1.22