--- MITgcm/verification/testreport 2010/03/30 16:40:03 1.138 +++ MITgcm/verification/testreport 2011/01/14 23:55:00 1.154 @@ -1,6 +1,6 @@ #! /usr/bin/env bash # -# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/verification/testreport,v 1.138 2010/03/30 16:40:03 jmc Exp $ +# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/verification/testreport,v 1.154 2011/01/14 23:55:00 jmc Exp $ # $Name: $ # @@ -12,7 +12,8 @@ echo "where possible OPTIONS are:" echo " (-help|-h) print usage" echo " (-mth) run multi-threaded (using eedata.mth)" - echo " (-mpi) compile and run using MPI" + echo " (-mpi) use MPI to compile and run on 2 processors" + echo " (-MPI) NUMBER use MPI to compile and run on max NUMBER procs" echo " (-ieee/-noieee) if possible, use IEEE compiler flags" echo " (DEF=\"-ieee\")" echo " (-gsl) compile with \"-gsl\" flag" @@ -25,6 +26,8 @@ echo " (-tdir|-t) STRING list of group and/or exp. dirs to test" echo " (recognized groups: basic, tutorials)" echo " (DEF=\"\" which test all)" + echo " (if list= 'start_from THIS_EXP' then" + echo " test THIS_EXP + all the following)" echo " (-skipdir|-skd) STRING list of exp. dirs to skip" echo " (DEF=\"\" which test all)" echo " (-bash|-b) STRING preferred location of a \"bash\" or" @@ -33,6 +36,7 @@ echo " (-adm|-ad) perform an adjoint run" echo " (-oad) perform an OpenAD adjoint run" 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" @@ -40,7 +44,7 @@ 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)" @@ -231,7 +235,14 @@ 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'" > $locDIR"/summary.txt" + #- report to this experiment local summary file --- + echo "MACH='$MACH'" > $locDIR"/summary.txt" + echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt" + echo "DATE='$DATE'" >> $locDIR"/summary.txt" + grep '(PID\.TID 0000\.0001) n.. =' $1/$2/$OUTPUTFILE \ + | sed 's/(PID.TID 0000.0001) //' >> $locDIR"/summary.txt" + echo "listVar='$listVar'" >> $locDIR"/summary.txt" + #--- allargs="" for xx in $listVar do @@ -317,6 +328,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 @@ -333,7 +347,7 @@ if test "x$GSL" = xt ; then command="$command -gsl" fi - if test "x$MPI" = xt ; then + if test "x$MPI" != x0 ; then command="$command -mpi" fi if test "x$MULTI_THREAD" = xt ; then @@ -353,19 +367,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.log genmake_* genmake.tr_log $CDIR return 1 else - echo "successful" 1>&2 + echo "successful" fi ) fi @@ -374,6 +387,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 +395,16 @@ 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 ... ' + $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 genmake.log genmake.tr_log $CDIR return 1 fi - echo successful 1>&2 + echo successful else echo '' fi @@ -407,16 +421,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 +444,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 genmake.log genmake.tr_log $CDIR return 1 else - echo successful 1>&2 + echo successful fi ) fi @@ -460,33 +474,83 @@ 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 genmake.log genmake.tr_log $CDIR rm -f $EXECUTABLE return 1 else - echo successful 1>&2 + echo successful fi fi fi ) } +mk_mpi_size() +{ + # mk_mpi_size input_file output_file proc_Nb + # + # make new SIZE.h (=output_file) from SIZE.h_mpi (=input_file) + # for an MPI build with no more than proc_Nb processors ; + # return the effective number of processors. + + inp=$1 + out=$2 + np=$3 + tmp=TTT.$$ + + px=`grep "^ & *nPx *=" $inp | sed "s/^ & *nPx *= *//" | sed 's/, *$//'` + py=`grep "^ & *nPy *=" $inp | sed "s/^ & *nPy *= *//" | sed 's/, *$//'` + sx=`grep "^ & *nSx *=" $inp | sed "s/^ & *nSx *= *//" | sed 's/, *$//'` + sy=`grep "^ & *nSy *=" $inp | sed "s/^ & *nSy *= *//" | sed 's/, *$//'` + + #- find the largest divisor of input_file proc Nb, but not larger than $np + pp=0 + for i in `seq 1 $px` ; do + if [ `expr $px % $i` -eq 0 ] ; then + for j in `seq 1 $py` ; do + if [ `expr $py % $j` -eq 0 ] ; then + ij=`expr $i \* $j` + if [ $ij -gt $pp ] ; then + if [ $ij -le $np ] ; then + ix=$i ; jy=$j ; pp=$ij + #echo " ix,jy= $ix,$jy" + fi + fi + fi + done + fi + done + + #- create new SIZE.h type file: + sx=`expr $sx \* $px / $ix` + sy=`expr $sy \* $py / $jy` + if [ $verbose -gt 1 ]; then + echo " px,py,np= $px,$py,$np : New MPI size: px,py= $ix,$jy : sx,sy= $sx,$sy" + fi + sed "/^ \& *nPx *=/s/[0-9]*,/$ix,/" $inp > $tmp + sed "/^ \& *nPy *=/s/[0-9]*,/$jy,/" $tmp > $out + sed "/^ \& *nSx *=/s/[0-9]*,/$sx,/" $out > $tmp + sed "/^ \& *nSy *=/s/[0-9]*,/$sy,/" $tmp > $out + rm -f $tmp + return $pp +} + symlink_mpifiles() { # Put special links so that MPI specific files are used @@ -495,44 +559,44 @@ dir=$1 code_dir=$2 - BUILD_DIR=$dir/$3 - CODE_DIR=$dir/$code_dir + build_dir=$dir/$3 # These are files that should replace their counter-part when using -mpi - MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi" -print)` + MPI_FILES=`(cd $dir/$code_dir; find . -name "*_mpi" -print)` - # Is this an MPI run? - if test "x$MPI" = xt ; then - # YES: We symbolically link these files to the build - # dir so long as there is no real file in place - for ii in $MPI_FILES ; do - i=`echo $ii | sed 's:^\./::'` - name=`echo $i | sed 's:_mpi::' ` - cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1 - RETVAL=$? - if test "x$RETVAL" != x0 ; then - if ! test -f $BUILD_DIR/$i ; then - #echo Linking $name to $i - (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name) - fi - fi - done - else - # NO: We undo any _mpi symbolically linked files - for ii in $MPI_FILES ; do - i=`echo $ii | sed 's:^\./::'` - name=`echo $i | sed 's:_mpi::' ` - if test -L $BUILD_DIR/$name ; then - cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1 + for ii in $MPI_FILES ; do + i=`echo $ii | sed 's:^\./::'` + name=`echo $i | sed 's:_mpi::'` + file="../$code_dir/$i" + if test $name = 'SIZE.h' ; then file="SIZE.h.mpi" ; fi + + # Is this an MPI run? + if test "x$MPI" = x0 ; then + # NO: We undo any _mpi symbolically linked files + if test -L $build_dir/$name ; then + ( cd $build_dir ; cmp $name $file > /dev/null 2>&1 ) RETVAL=$? if test "x$RETVAL" = x0 ; then - #echo Un-linking $name from $linktarg - rm -f $BUILD_DIR/$name + if [ $verbose -gt 1 ]; then + echo " Un-linking $name from ../$code_dir" ; fi + rm -f $build_dir/$name fi fi - done - fi - + else + # YES: We symbolically link these files to the build + # dir so long as there is no real file in place + ( cd $build_dir ; cmp $name $file > /dev/null 2>&1 ) + RETVAL=$? + if [ $verbose -gt 1 ]; then echo " cmp $name $file returns: $RETVAL" ; fi + if test "x$RETVAL" != x0 ; then + if test -h $build_dir/$name ; then rm -f $build_dir/$name ; fi + if test ! -r $build_dir/$name ; then + if [ $verbose -gt 1 ]; then echo " Linking $name to $file" ; fi + (cd $build_dir; ln -sf $file $name) + fi + fi + fi + done } linkdata() @@ -543,21 +607,22 @@ 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 # found 1 _mpi sfx file in 1rst input dir and it is readable yy=`echo $xx | sed 's:\.mpi$::'` - if test "x$MPI" = "xt" ; then - # mpi test: remove symbolic link & link _mpi sfx file + if test "x$MPI" = "x0" ; then + # not mpi test: remove symbolic link + if test -h $yy ; then rm -f $yy ; fi + else + # mpi test: remove symbolic link & link .mpi sfx file 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 - if test -h $yy ; then rm -f $yy ; fi fi fi done @@ -568,7 +633,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 @@ -578,7 +643,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 @@ -588,10 +653,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 @@ -603,17 +670,15 @@ { # runmodel directory # - # runs "$COMMAND in "directory" + # runs $COMMAND in "directory" # (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 - outD=$? ; if test $outD != 0 ; then rm -f $EXECUTABLE ; fi + cmp $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1 + outD=$? ; if test "x$outD" != x0 ; then rm -f $EXECUTABLE ; fi else rm -f $EXECUTABLE fi fi @@ -621,6 +686,12 @@ echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_tmp ln -sf "../"$builddir"/"$EXECUTABLE . fi + if test "x$MPI" != x0 ; then + #- adjust the MPI run command with the right number of Procs + #echo "COMMAND='$COMMAND'" + COMMAND=`echo $COMMAND | sed "s/-np * XX /-np $NPROC_MPI /"` + #echo "COMMAND='$COMMAND'" + fi if test ! -x $EXECUTABLE ; then rm -f $RUNLOG ; touch $RUNLOG if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi @@ -646,24 +717,28 @@ echo " no previous $RUNLOG: assume NORMAL END" >> $RUNLOG 2>&1 fi fi - ENDVAL=`cat $RUNLOG | grep -v 'ABNORMAL END' | grep -c 'NORMAL END'` + #ENDVAL=`cat $RUNLOG | grep -v 'ABNORMAL END' | grep -c 'NORMAL END'` + ENDVAL=`tail $OUTPUTFILE | grep -c 'PROGRAM MAIN: Execution ended Normally'` 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 @@ -826,6 +901,7 @@ HAVE_MPACK= MPACK= COMMAND= +MKDEPEND= if test "x$MAKE" = x ; then MAKE=make fi @@ -833,7 +909,7 @@ CC=cc fi JOBS= -MPI=f +MPI=0 MULTI_THREAD=f OUTDIR= DELDIR= @@ -845,7 +921,7 @@ # list of pTracers to check for monitor output PTRACERS_NUM="1 2 3 4 5" -MATCH_CRIT=13 +MATCH_CRIT=10 printf "parsing options... " @@ -900,6 +976,11 @@ -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=* | -m=* | --m=*) @@ -940,7 +1021,9 @@ -postclean | --postclean | -pc | --pc) POSTCLEAN=t ;; - -mpi) MPI=t ;; + -mpi | --mpi) MPI=2 ;; + -MPI | --MPI) ac_prev=MPI ;; + -MPI=* | --MPI=*) MPI=$ac_optarg ;; -mth) MULTI_THREAD=t ;; @@ -1002,8 +1085,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=" " @@ -1047,12 +1134,12 @@ OPTFILE=$MITGCM_OF fi -RUNLOG="run.log" +RUNLOG="run.tr_log" OUTPUTFILE=$ref_outp if test "x$COMMAND" = x ; then COMMAND="./$EXECUTABLE > $OUTPUTFILE" fi -if test "x$MPI" = xt ; then +if test "x$MPI" != x0 ; then OUTPUTFILE="STDOUT.0000" fi @@ -1145,8 +1232,8 @@ fi else echo >> $SUMMARY - echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY - echo " so the genmake default will be used." >> $SUMMARY + echo "No \"OPTFILE\" was specified ; genmake2 found and uses:" >> $SUMMARY + #-note: to be filled later after 1rst run fi echo echo >> $SUMMARY @@ -1155,7 +1242,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" @@ -1188,6 +1274,7 @@ EOF fi +echo "-------------------------------------------------------------------------------" # ...and each test directory... for dir in $TESTDIRS ; do @@ -1196,6 +1283,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 @@ -1206,12 +1294,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 SIZE.h.mpi 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 @@ -1230,20 +1322,37 @@ # Check for specific files for particular type of run - if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then - echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir" - continue + if test "x$MPI" != "x0" ; then + if test -r $CODE_DIR"/SIZE.h_mpi" ; then + #- create new SIZE.h with no more than '$MPI' Procs + mk_mpi_size $CODE_DIR"/SIZE.h_mpi" $BUILD_DIR"/tr_size.mpi" $MPI + NPROC_MPI=$? + ( cd $BUILD_DIR + if test -r SIZE.h.mpi ; then + cmp tr_size.mpi SIZE.h.mpi > /dev/null 2>&1 ; RETVAL=$? + else RETVAL=1 + fi + if test "x$RETVAL" = x0 ; then + rm -f tr_size.mpi + else + rm -f SIZE.h.mpi ; mv tr_size.mpi SIZE.h.mpi + fi + ) + else + echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir" + continue + fi fi if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir" continue fi - if test "x$MPI" = "xt" -a "x$MULTI_THREAD" = "xt" ; then - retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/input/eedata.mth"` - if test $retv != 0 ; then - echo "input/eedata.mth tiling misfit -- skipping $dir" - continue - fi + if test "x$MPI" != "x0" -a "x$MULTI_THREAD" = "xt" ; then + retv=`check_eedata $BUILD_DIR"/SIZE.h.mpi" $dir"/input/eedata.mth"` + if test $retv != 0 ; then + echo "input/eedata.mth tiling misfit -- skipping $dir" + continue + fi fi # Check whether there are "extra runs" for this testdir @@ -1259,15 +1368,15 @@ if test -f $outf -a -r $outf ; then if test "x$MULTI_THREAD" = "xt" ; then if test -r $dir"/"$exd"/eedata.mth" ; then - if test "x$MPI" = "xt" ; then - retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/"$exd"/eedata.mth"` + if test "x$MPI" = "x0" ; then + extra_runs="$extra_runs $name" + else + retv=`check_eedata $BUILD_DIR"/SIZE.h.mpi" $dir"/"$exd"/eedata.mth"` if test $retv = 0 ; then extra_runs="$extra_runs $name" else echo $exd"/eedata.mth tiling misfit -- skipping $dir" fi - else - extra_runs="$extra_runs $name" fi #else echo $dir"/"$exd"/eedata.mth: not found" fi @@ -1277,7 +1386,6 @@ fi done - echo "-------------------------------------------------------------------------------" echo if test "x$extra_runs" = "x" ; then echo "Experiment: $dir" @@ -1297,32 +1405,27 @@ 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 $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 >> $locDIR"/summary.txt" @@ -1339,37 +1442,55 @@ locDIR=$DRESULTS"/"$dir"."$ex mkdir $locDIR CDIR=`pwd`"/$locDIR" - 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` + 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 $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 >> $locDIR"/summary.txt" - grep -A3 'Seconds in section "ALL' $dir/tr_run.$ex/$OUTPUTFILE \ + 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 $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 + echo " $mkOpt" >> $DRESULTS/genmake_state + if test "x$OPTFILE" = xNONE ; then + eval $mkOpt + sed "/^No \"OPTFILE\" was specified ; genmake2/a\ OPTFILE=${OPTFILE}"\ + $SUMMARY > tr_0.tmp_log + RETVAL=$? + if test "x$RETVAL" = x0 ; then rm -f $SUMMARY + cp tr_0.tmp_log $SUMMARY + else rm -f tr_0.tmp_log + fi + fi + gmkLog=$dir/$builddir/genmake.log + grep '^Get compiler version using:' $gmkLog > /dev/null 2>&1 + RETVAL=$? + if test "x$RETVAL" = x0 ; then + echo "from '$gmkLog', extract compiler version:" >> $DRESULTS/genmake_state + sed -n '/Get compiler version/,/<-- compiler version/p' $gmkLog \ + | grep -v '^... compiler version ' > tr_1.tmp_log + sed -n '1,/^$/p' tr_1.tmp_log | sed '/^$/d' | sed 's/^./ &/' \ + >> $DRESULTS/genmake_state + rm -f tr_1.tmp_log + fi fi fi #postclean $dir/$builddir