--- MITgcm/verification/testreport 2010/03/04 21:26:27 1.135 +++ MITgcm/verification/testreport 2010/11/02 22:53:11 1.146 @@ -1,6 +1,6 @@ #! /usr/bin/env bash # -# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/verification/testreport,v 1.135 2010/03/04 21:26:27 jmc Exp $ +# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/verification/testreport,v 1.146 2010/11/02 22:53:11 jmc Exp $ # $Name: $ # @@ -13,38 +13,39 @@ echo " (-help|-h) print usage" echo " (-mth) run multi-threaded (using eedata.mth)" echo " (-mpi) compile and run using MPI" - echo " (-ieee|-noieee) if possible, use IEEE compiler flags" + echo " (-ieee/-noieee) if possible, use IEEE compiler flags" echo " (DEF=\"-ieee\")" echo " (-gsl) compile with \"-gsl\" flag" - echo " (-ur4|-use_r4) if allowed, use real*4 type for '_RS' variable" - echo " (-of=|-optfile=)STRING list of optfiles to use" - echo " (-a|-addr) STRING list of email recipients" + echo " (-use_r4|-ur4) if allowed, use real*4 type for '_RS' variable" + echo " (-optfile|-of) STRING list of optfiles to use" + echo " (-addr|-a) STRING list of email recipients" echo " (DEF=\"\" no email is sent)" - echo " (-mpd|-mpackdir) DIR location of the mpack utility" + echo " (-mpackdir|-mpd) DIR location of the mpack utility" echo " (DEF=\"../tools/mpack-1.6\")" - echo " (-t|-tdir) STRING list of group and/or exp. dirs to test" + echo " (-tdir|-t) STRING list of group and/or exp. dirs to test" echo " (recognized groups: basic, tutorials)" echo " (DEF=\"\" which test all)" - echo " (-skd|-skipdir) STRING list of exp. dirs to skip" + echo " (-skipdir|-skd) STRING list of exp. dirs to skip" echo " (DEF=\"\" which test all)" - echo " (-b|-bash) STRING preferred location of a \"bash\" or" + echo " (-bash|-b) STRING preferred location of a \"bash\" or" echo " Bourne-compatible \"sh\" shell" echo " (DEF=\"\" for \"bash\")" echo " (-adm|-ad) perform an adjoint run" echo " (-oad) perform an OpenAD adjoint run" - echo " (-command) STRING command to run" - echo " (DEF=\"make output.txt\")" - echo " (-m|-make) STRING command to use for \"make\"" + echo " (-command|-c) STRING command to run" + echo " (-makedepend|-md) STRING command to use for \"makedepend\"" + echo " (-make|-m) STRING command to use for \"make\"" echo " (DEF=\"make\")" echo " (-odir) STRING used to build output directory name" echo " (DEF=\"hostname\")" - echo " (-ptr|-ptracers) STRING specify which ptracers to test" + echo " (-ptracers|-ptr) STRING specify which ptracers to test" echo " (DEF=\"1 2 3 4 5\")" echo " (-match) NUMBER Matching Criteria (number of digits)" - echo " (DEF=\"12\")" + echo " (DEF=\"$MATCH_CRIT\")" echo " (-j) JOBS use \"make -j JOBS\" for parallel builds" echo " (-clean) *ONLY* run \"make CLEAN\"" echo " (-norun|-nr) skip the \"runmodel\" stage (stop after make)" + echo " (-runonly|-ro) *ONLY* run stage (=\"-quick\" without make)" echo " (-quick|-q) same as \"-nogenmake -noclean -nodepend\"" echo " (-nogenmake|-ng) skip the genmake stage" echo " (-noclean|-nc) skip the \"make clean\" stage" @@ -231,7 +232,7 @@ listVar=" $sVar "`echo "$listVar " | sed "s/ $sVar / /g"` fi if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(M)='$listVar'" 1>&2 ; fi - echo "listVar='$listVar'" > $CDIR"/summary.txt" + echo "listVar='$listVar'" > $locDIR"/summary.txt" allargs="" for xx in $listVar do @@ -317,6 +318,9 @@ ( cd $1; command="$GENMAKE2 -ds -m $MAKE" + if test "x$MKDEPEND" != x ; then + command="$command -makedepend=$MKDEPEND" + fi if test "x$ADM" = xt ; then command="$command --mods=../code_ad" elif test "x$OADM" = xt ; then @@ -353,19 +357,18 @@ command="$command -pcls" fi fi - printf 'genmake ... ' 1>&2 - # $command > make.log 2>&1 - eval $command > make.log 2>&1 + printf 'genmake ... ' + eval $command > genmake.tr_log 2>&1 RETVAL=$? # Reduce the size of the testing emails! head -100 Makefile > $CDIR/Makefile_head if test "x$RETVAL" != x0 ; then - tail make.log - echo "genmakemodel: genmake failed" 1>&2 - cp genmake_* make.log $CDIR + tail genmake.tr_log + echo "genmakemodel: genmake failed" + cp genmake_* genmake.tr_log $CDIR return 1 else - echo "successful" 1>&2 + echo "successful" fi ) fi @@ -374,6 +377,7 @@ makeclean() { # makeclean directory + if test "x$NODEPEND" = xf ; then rm -f $1/make.tr_log ; fi if test "x$NOCLEAN" = xt ; then echo "make Clean skipped!" else @@ -381,16 +385,17 @@ cd $1; #if test -e $OUTPUTFILE ; then rm -f $OUTPUTFILE ; fi if test -r Makefile ; then - printf 'clean build-dir: make Clean ... ' 2>&1 - $MAKE Clean >> make.log 2>&1 + printf 'clean build-dir: make Clean ... ' + rm -f Makefile.old + $MAKE Clean >> make.tr_log 2>&1 RETVAL=$? if test "x$RETVAL" != x0 ; then - tail make.log - echo "makeclean: \"make Clean\" failed" 1>&2 - cp make.log $CDIR"/make.log" + tail make.tr_log + echo "makeclean: \"make Clean\" failed" + cp make.tr_log $CDIR"/make.tr_log" return 1 fi - echo successful 1>&2 + echo successful else echo '' fi @@ -407,16 +412,16 @@ else ( cd $1; - printf 'clean run-dir ... ' 2>&1 + printf 'clean run-dir ... ' # part of what is done after "make clean" when doing "make CLEAN" find . -name "*.meta" -exec rm {} \; find . -name "*.data" -exec rm {} \; find . -name "fort.*" -exec rm {} \; find . -type l -exec rm {} \; - rm -f $EXECUTABLE *.txt STD* *diagnostics.log datetime + rm -f $EXECUTABLE $RUNLOG *.txt STD* *diagnostics.log datetime rm -rf mnc_test_* rm -f *_MIT_CE_000.opt0000 costfunction*0000 - echo successful 1>&2 + echo successful exit 0 ) fi @@ -430,16 +435,16 @@ else ( cd $1; - printf 'make depend ... ' 1>&2 - $MAKE depend >> make.log 2>&1 + printf 'make depend ... ' + $MAKE depend >> make.tr_log 2>&1 RETVAL=$? if test "x$RETVAL" != x0 ; then - tail make.log - echo "makedependmodel: make depend failed" 1>&2 - cp make.log $CDIR"/make.log" + tail make.tr_log + echo "makedependmodel: make depend failed" + cp make.tr_log $CDIR"/make.tr_log" return 1 else - echo successful 1>&2 + echo successful fi ) fi @@ -449,31 +454,41 @@ { # makemodel directory ( + if test "x$NOMAKE" = xt ; then + cd $1; + if test -x $EXECUTABLE ; then + echo "make skipped!" + else + echo "no executable!" + return 2 + fi + else cd $1; if test -r Makefile ; then - printf 'make ... ' 1>&2 + printf 'make ... ' if test "x$ADM" = xt ; then - $MAKE adall >> make.log 2>&1 + $MAKE adall >> make.tr_log 2>&1 elif test "x$OADM" = xt ; then - $MAKE adAll >> make.log 2>&1 + $MAKE adAll >> make.tr_log 2>&1 else if test "x$JOBS" = x ; then - $MAKE >> make.log 2>&1 + $MAKE >> make.tr_log 2>&1 else - $MAKE -j $JOBS >> make.log 2>&1 + $MAKE -j $JOBS >> make.tr_log 2>&1 fi fi RETVAL=$? if test "x$RETVAL" != x0 ; then - tail make.log - echo failed 1>&2 - cp make.log $CDIR"/make.log" + tail make.tr_log + echo failed + cp make.tr_log $CDIR"/make.tr_log" rm -f $EXECUTABLE return 1 else - echo successful 1>&2 + echo successful fi fi + fi ) } @@ -533,6 +548,7 @@ if test -d $1 ; then ( cd $1 ; shift + echo 'linkdata from dirs:' $* inpMPI=`(cd ../$1 ; find . -name "*.mpi" -print | sed 's:^\./::')` for xx in $inpMPI ; do if test -r "../"$1"/"$xx ; then @@ -543,7 +559,7 @@ if test -h $yy ; then rm -f $yy ; fi if test ! -r $yy ; then ln -sf "../"$1"/"$xx $yy ; - printf "$xx " 1>&2 + printf " $xx" 1>&2 fi else # not mpi test: remove symbolic link @@ -558,7 +574,7 @@ if test -h eedata ; then rm -f eedata ; fi if test ! -r eedata ; then ln -sf "../"$1"/eedata.mth" eedata ; - printf 'eedata.mth ' 1>&2 + printf ' eedata.mth' 1>&2 fi else # not multi-threaded test: remove eedata symbolic link @@ -568,7 +584,7 @@ prevDir='NONE' for ldir in $* ; do if test -d "../"$ldir -a $ldir != $prevDir ; then - printf 'ldir='${ldir} 1>&2 + printf " ldir=${ldir}:" 1>&2 files=`( cd "../"$ldir ; ls -1 | grep -v CVS )` for i in $files ; do if test ! -d "../"$ldir/$i ; then @@ -578,10 +594,12 @@ fi fi done + printf ' ;' 1>&2 if test -x "../"$ldir"/"prepare_run ; then - "../"$ldir"/"prepare_run + "../"$ldir"/"prepare_run 1>&2 + else + echo '' 1>&2 fi - printf ' ; ' 1>&2 fi prevDir=$ldir done @@ -597,9 +615,7 @@ # (where "$COMMAND" is relative to "directory") ( cd $1 - printf 'runmodel in %s ...' $1 1>&2 - # make output.txt - echo + printf 'runmodel in %s ... ' $1 if test -L $EXECUTABLE ; then if test -x "../"$builddir"/"$EXECUTABLE ; then diff -q $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1 @@ -640,20 +656,23 @@ fi rm -f run.log_tmp if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then - tail $RUNLOG - echo successful 1>&2 + echo successful + printf '=> output from running in %s :\n' $1 1>&2 + tail $RUNLOG | sed 's/^.*/> &/g' 1>&2 # === Reduce the size of the testing emails! #cp $OUTPUTFILE $CDIR"/"$OUTPUTFILE if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi return 0 elif [ $RETVAL -ne 0 -a $ENDVAL -gt 0 ] ; then #-- for some weird cases (run is finihed but with error code) - tail $RUNLOG - echo finished with error '(run:' $RETVAL ' end:' $ENDVAL ')' 1>&2 + echo 'finished with error (run:' $RETVAL ' end:' $ENDVAL ')' + printf '=> output from running in %s :\n' $1 1>&2 + tail $RUNLOG | sed 's/^.*/> &/g' 1>&2 return 0 else - tail $RUNLOG - echo failed '(run:' $RETVAL ' end:' $ENDVAL ')' 1>&2 + echo 'failed (run:' $RETVAL ' end:' $ENDVAL ')' + printf '=> output from running in %s :\n' $1 1>&2 + tail $RUNLOG | sed 's/^.*/> &/g' 1>&2 cp $RUNLOG $CDIR"/"$RUNLOG if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi return 1 @@ -801,6 +820,7 @@ CLEANUP=f NORUN=f QUICK=f +NOMAKE=f NOGENMAKE=f NOCLEAN=f NODEPEND=f @@ -815,6 +835,7 @@ HAVE_MPACK= MPACK= COMMAND= +MKDEPEND= if test "x$MAKE" = x ; then MAKE=make fi @@ -862,7 +883,7 @@ -addr | --addr | -a | --a) ac_prev=ADDRESSES ;; - -addr=* | --addr=*) + -addr=* | --addr=* | -a=* | --a=*) ADDRESSES=$ac_optarg ;; -mpackdir | --mpackdir | -mpd | --mpd) ac_prev=MPACKDIR ;; @@ -871,27 +892,32 @@ -tdir | --tdir | -t | --t) ac_prev=TESTDIRS ;; - -tdir=* | --tdir=*) + -tdir=* | --tdir=* | -t=* | --t=*) TESTDIRS=$ac_optarg ;; -skipdir | --skipdir | -skd | --skd) ac_prev=SKIPDIRS ;; - -skipdir=* | --skipdir=*) + -skipdir=* | --skipdir=* | -skd=* | --skd=*) SKIPDIRS=$ac_optarg ;; -bash | --bash | -b | --b) ac_prev=BASH ;; - -bash=* | --bash=*) + -bash=* | --bash=* | -b=* | --b=*) BASH=$ac_optarg ;; -command | --command | -c | --c) ac_prev=COMMAND ;; - -command=* | --command=*) + -command=* | --command=* | -c=* | --c=*) COMMAND=$ac_optarg ;; + -makedepend | --makedepend | -md | --md) + ac_prev=MKDEPEND ;; + -makedepend=* | --makedepend=* | -md=* | --md=*) + MKDEPEND=$ac_optarg ;; + -make | --make | -m | --m) ac_prev=MAKE ;; - -make=* | --make=*) + -make=* | --make=* | -m=* | --m=*) MAKE=$ac_optarg ;; -odir | --odir) @@ -907,14 +933,16 @@ -match | --match ) ac_prev=MATCH_CRIT ;; -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;; - -j) ac_prev=JOBS ;; - -j=*) JOBS=$ac_optarg ;; + -j | --j) ac_prev=JOBS ;; + -j=* | --j=*) JOBS=$ac_optarg ;; -clean | --clean) CLEANUP=t ; DELDIR=t ;; -norun | --norun | -nr | --nr) NORUN=t ;; + -runonly | --runonly | -ro | --ro) + QUICK=t ; NOMAKE=t ;; -quick | --quick | -q | --q) QUICK=t ;; -nogenmake | --nogenmake | -ng | --ng) @@ -945,7 +973,7 @@ -deldir | -dd) DELDIR=t ;; - -ur4|-use_r4) USE_R4=t ;; + -use_r4|-ur4) USE_R4=t ;; -ts) TS=t;; -papis) PAPIS=t;; @@ -989,8 +1017,12 @@ EXECUTABLE="mitgcmuv" fi +xx=`echo $TESTDIRS | awk '{print $1}'` if test "x$TESTDIRS" = x ; then LIST=`scandirs results/$ref_outp` +elif test $xx = 'start_from' ; then + xx=`echo $TESTDIRS | awk '{print $2}'` + LIST=`scandirs results/$ref_outp | sed -n "/$xx/,$ p"` else #- expand group of experiments: LIST=" " @@ -1034,7 +1066,7 @@ OPTFILE=$MITGCM_OF fi -RUNLOG="run.log" +RUNLOG="run.tr_log" OUTPUTFILE=$ref_outp if test "x$COMMAND" = x ; then COMMAND="./$EXECUTABLE > $OUTPUTFILE" @@ -1142,7 +1174,6 @@ then line_0="default "$MATCH_CRIT ; else line_0="default "$MATCH_CRIT ; fi line_0="$line_0 ----T----- ----S----- ----U----- ----V-----" -# line_0=" ----T----- ----S----- ----U----- ----V-----" line_1="G D M c m s m s m s m s" line_2="E p a R g m m e . m m e . m m e . m m e ." line_3="N n k u 2 i a a d i a a d i a a d i a a d" @@ -1175,6 +1206,7 @@ EOF fi +echo "-------------------------------------------------------------------------------" # ...and each test directory... for dir in $TESTDIRS ; do @@ -1183,6 +1215,7 @@ builddir="build" if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi rundir="run" + pfxdir="tr_$rundir" if test ! -d $dir/$rundir ; then rundir=$builddir fi @@ -1193,12 +1226,16 @@ if test "x$CLEANUP" = xt ; then echo -n ' --- dir:' $BUILD_DIR ': ' makeclean $BUILD_DIR - rm -f $BUILD_DIR/$EXECUTABLE + ( cd $BUILD_DIR + rm -f $EXECUTABLE *.bak + rm -f genmake_state genmake_*optfile genmake.log + rm -f genmake.tr_log make.tr_log + ) if test -d $dir/$rundir/CVS ; then echo -n ' --- dir:' $dir/$rundir ': ' run_clean $dir/$rundir fi - trdir=`( cd $dir ; find . -type d -name "tr_run.*" -print | sed 's/^.\///')` + trdir=`( cd $dir ; find . -type d -name "$pfxdir.*" -print | sed 's/^.\///')` ttd=`echo $trdir | wc -w` if test $ttd != 0 ; then echo ' --- rm dir:' $trdir @@ -1264,7 +1301,6 @@ fi done - echo "-------------------------------------------------------------------------------" echo if test "x$extra_runs" = "x" ; then echo "Experiment: $dir" @@ -1276,45 +1312,43 @@ results=$EMPTY_RESULTS # Create an output dir for each OPTFILE/tdir combination - rel_CDIR=$DRESULTS"/"$dir - mkdir $rel_CDIR - CDIR=`pwd`"/$rel_CDIR" + locDIR=$DRESULTS"/"$dir + mkdir $locDIR + CDIR=`pwd`"/$locDIR" if test "x$NORUN" = xt ; then run=N genmakemodel $dir/$builddir && genmake=Y \ && makeclean $dir/$builddir \ - && run_clean $dir/$rundir \ && symlink_mpifiles $dir $code_dir $builddir \ && makedependmodel $dir/$builddir && makedepend=Y \ && makemodel $dir/$builddir && make=Y else genmakemodel $dir/$builddir && genmake=Y \ && makeclean $dir/$builddir \ - && run_clean $dir/$rundir \ && symlink_mpifiles $dir $code_dir $builddir \ && makedependmodel $dir/$builddir && makedepend=Y \ && makemodel $dir/$builddir && make=Y \ - && linkdata $dir/$rundir $inputdir input \ + && run_clean $dir/$rundir \ + && linkdata $dir/$rundir $inputdir \ && runmodel $dir/$rundir && run=Y \ && results=`testoutput_run $dir $rundir $ref_outp` fi - #echo "results='$results'" - echo + fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results` - echo + echo 1>&2 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /> $SUMMARY - touch $CDIR"/summary.txt" - echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt" - echo "MACH='$MACH'" >> $CDIR"/summary.txt" - echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt" - echo "DATE='$DATE'" >> $CDIR"/summary.txt" - echo "tdir='$dir'" >> $CDIR"/summary.txt" + touch $locDIR"/summary.txt" + echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt" + echo "MACH='$MACH'" >> $locDIR"/summary.txt" + echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt" + echo "DATE='$DATE'" >> $locDIR"/summary.txt" + echo "tdir='$dir'" >> $locDIR"/summary.txt" if test "x$ADM" = xt ; then - head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt" + head -1 $dir/$builddir/taf_ad.log >> $locDIR"/summary.txt" grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \ - >> $CDIR"/summary.txt" + >> $locDIR"/summary.txt" fi for ex in $extra_runs ; do @@ -1323,34 +1357,42 @@ # reference output file refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"` # Create an output dir for each OPTFILE/tdir.ex combination - rel_CDIR=$DRESULTS"/"$dir"."$ex - mkdir $rel_CDIR - CDIR=`pwd`"/$rel_CDIR" - test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex" - run_clean $dir/tr_run.$ex - linkdata $dir/tr_run.$ex $inputdir.$ex $inputdir input - runmodel $dir/tr_run.$ex && run=Y \ - && results=`testoutput_run $dir tr_run.$ex $refExOut` + locDIR=$DRESULTS"/"$dir"."$ex + mkdir $locDIR + CDIR=`pwd`"/$locDIR" + test ! -e "$dir/$pfxdir.$ex" && mkdir "$dir/$pfxdir.$ex" + run_clean $dir/$pfxdir.$ex + linkdata $dir/$pfxdir.$ex $inputdir.$ex $inputdir + runmodel $dir/$pfxdir.$ex && run=Y \ + && results=`testoutput_run $dir $pfxdir.$ex $refExOut` fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results` fres="$fres.$ex" - echo + echo 1>&2 echo "$fres" | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /> $SUMMARY - touch $CDIR"/summary.txt" - echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt" - echo "MACH='$MACH'" >> $CDIR"/summary.txt" - echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt" - echo "DATE='$DATE'" >> $CDIR"/summary.txt" - echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt" + touch $locDIR"/summary.txt" + echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt" + echo "MACH='$MACH'" >> $locDIR"/summary.txt" + echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt" + echo "DATE='$DATE'" >> $locDIR"/summary.txt" + echo "tdir='$dir.$ex'" >> $locDIR"/summary.txt" if test "x$ADM" = xt ; then - head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt" - grep -A3 'Seconds in section "ALL' $dir/tr_run.$ex/$OUTPUTFILE \ - >> $CDIR"/summary.txt" + head -1 $dir/$builddir/taf_ad.log >> $locDIR"/summary.txt" + grep -A3 'Seconds in section "ALL' $dir/$pfxdir.$ex/$OUTPUTFILE \ + >> $locDIR"/summary.txt" fi if test "x$POSTCLEAN" = xt ; then - run_clean $dir/tr_run.$ex + run_clean $dir/$pfxdir.$ex fi done + if test -f $DRESULTS"/"genmake_state ; then : ; else + if test -f $dir/$builddir/Makefile ; then + mkOpt=`grep '^# OPTFILE=' $dir/$builddir/Makefile 2>/dev/null | head -1 | sed 's/^# //'` + echo "from '$dir/$builddir/Makefile', extract:" > $DRESULTS/genmake_state + sed -n '/^# executed by:/,+1 p' $dir/$builddir/Makefile >> $DRESULTS/genmake_state + echo $mkOpt >> $DRESULTS/genmake_state + fi + fi #postclean $dir/$builddir if test "x$POSTCLEAN" = xt ; then makeclean $dir/$builddir \