--- MITgcm/verification/testreport 2009/12/21 00:01:06 1.130 +++ MITgcm/verification/testreport 2010/03/04 21:26:27 1.135 @@ -1,6 +1,6 @@ #! /usr/bin/env bash # -# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/verification/testreport,v 1.130 2009/12/21 00:01:06 jmc Exp $ +# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/verification/testreport,v 1.135 2010/03/04 21:26:27 jmc Exp $ # $Name: $ # @@ -16,6 +16,7 @@ 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 " (DEF=\"\" no email is sent)" @@ -43,6 +44,7 @@ echo " (DEF=\"12\")" 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 " (-quick|-q) same as \"-nogenmake -noclean -nodepend\"" echo " (-nogenmake|-ng) skip the genmake stage" echo " (-noclean|-nc) skip the \"make clean\" stage" @@ -104,7 +106,7 @@ { # testoutput_var dir s1 label subdir reference_output # - # compares 1 variable output selected from file $dir/$subdir/$OUTPUTFILE + # compares 1 variable output selected from file $dir/$subdir/$OUTPUTFILE # with same output from reference file $dir/results/$reference_output # using search strings s1 and text label @@ -176,7 +178,7 @@ fi fi rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt - + return $digits_of_similarity } @@ -291,13 +293,13 @@ done nbVar=`echo $listVar | awk '{print NF}'` - if [ $nbVar -lt $LEN_CHECK_LIST ] ; then + if [ $nbVar -lt $LEN_CHECK_LIST ] ; then #-- fill line (up to standard length) with dot: adNul=`expr $LEN_CHECK_LIST - $nbVar | awk '{for(i=1;i<=$1;i++){print "."}}'` echo $allargs $adNul else echo $allargs - fi + fi # <-- same processing for adjoint & forward test } @@ -338,12 +340,15 @@ #- run multi-threaded using OpenMP: command="$command -omp" fi + if test "x$USE_R4" = xt ; then + command="$command -use_r4" + fi if test "x$TS" = xt ; then command="$command -ts" fi if test "x$PAPIS" = xt ; then command="$command -papis" - else + else if test "x$PCLS" = xt ; then command="$command -pcls" fi @@ -463,6 +468,7 @@ tail make.log echo failed 1>&2 cp make.log $CDIR"/make.log" + rm -f $EXECUTABLE return 1 else echo successful 1>&2 @@ -481,7 +487,7 @@ code_dir=$2 BUILD_DIR=$dir/$3 CODE_DIR=$dir/$code_dir - + # These are files that should replace their counter-part when using -mpi MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi" -print)` @@ -516,7 +522,7 @@ fi done fi - + } linkdata() @@ -535,7 +541,7 @@ if test "x$MPI" = "xt" ; then # mpi test: remove symbolic link & link _mpi sfx file if test -h $yy ; then rm -f $yy ; fi - if test ! -r $yy ; then + if test ! -r $yy ; then ln -sf "../"$1"/"$xx $yy ; printf "$xx " 1>&2 fi @@ -550,7 +556,7 @@ if test "x$MULTI_THREAD" = "xt" ; then # multi-threaded test: remove symbolic link & link eedata.mth if test -h eedata ; then rm -f eedata ; fi - if test ! -r eedata ; then + if test ! -r eedata ; then ln -sf "../"$1"/eedata.mth" eedata ; printf 'eedata.mth ' 1>&2 fi @@ -587,16 +593,19 @@ { # 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 - if test -L $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then + 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 + else rm -f $EXECUTABLE + fi fi if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_tmp @@ -620,7 +629,7 @@ if test -f $RUNLOG ; then if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1 - else + else touch $RUNLOG if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1 @@ -630,7 +639,6 @@ ENDVAL=`cat $RUNLOG | grep -v 'ABNORMAL END' | grep -c 'NORMAL END'` fi rm -f run.log_tmp - #if test "x$RETVAL" = x0 ; then if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then tail $RUNLOG echo successful 1>&2 @@ -638,6 +646,11 @@ #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 + return 0 else tail $RUNLOG echo failed '(run:' $RETVAL ' end:' $ENDVAL ')' 1>&2 @@ -692,7 +705,7 @@ return 0 else echo - echo "ERROR: failed to compile comparison code -- please specify" + echo "ERROR: failed to compile comparison code -- please specify" echo " a C compiler using the CC environment variable." exit 1 fi @@ -711,7 +724,7 @@ printf '%3s' $listPrt # line below does not work on hp-ux_ia64 : do those substitutions later on # printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/ > />/' | sed 's/ < /> $SUMMARY if test "x$ADM" = x -a "x$OADM" = x; then - if [ $MATCH_CRIT -lt 10 ] ; - then line_0="default "$MATCH_CRIT ; + if [ $MATCH_CRIT -lt 10 ] ; + 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-----" @@ -1142,8 +1163,8 @@ else echo "ADJOINT=true" >> $SUMMARY echo >> $SUMMARY - if [ $MATCH_CRIT -lt 10 ] ; - then line_0="default "$MATCH_CRIT ; + if [ $MATCH_CRIT -lt 10 ] ; + then line_0="default "$MATCH_CRIT ; else line_0="default "$MATCH_CRIT ; fi echo "$line_0" | tee -a $SUMMARY cat << EOF | tee -a $SUMMARY @@ -1157,7 +1178,7 @@ # ...and each test directory... for dir in $TESTDIRS ; do - + # set builddir & rundir: builddir="build" if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi @@ -1186,7 +1207,7 @@ continue fi - # Verify that the testdir exists and contains previous + # Verify that the testdir exists and contains previous # results in the correct location--or skip this directory! fout=$dir"/results/"$ref_outp if test ! -r $fout ; then @@ -1214,14 +1235,16 @@ # Check whether there are "extra runs" for this testdir extra_runs= - ex_run_dirs=`( cd $dir ; echo $inputdir.* )` + if test "x$NORUN" = xf ; then + ex_run_dirs=`( cd $dir ; echo $inputdir.* )` + fi #echo "ex_run_dirs='$ex_run_dirs'" for exd in $ex_run_dirs ; do name=`echo $exd | sed -e "s/$inputdir\.//"` refExOut=`echo $ref_outp | sed "s/\./.${name}./"` outf="$dir/results/$refExOut" if test -f $outf -a -r $outf ; then - if test "x$MULTI_THREAD" = "xt" ; 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"` @@ -1243,7 +1266,7 @@ echo "-------------------------------------------------------------------------------" echo - if test "x$extra_runs" = "x" ; then + if test "x$extra_runs" = "x" ; then echo "Experiment: $dir" else echo "Experiment: $dir ; extra_runs=$extra_runs" @@ -1256,11 +1279,15 @@ rel_CDIR=$DRESULTS"/"$dir mkdir $rel_CDIR CDIR=`pwd`"/$rel_CDIR" - - if test "x$CLEANUP" = xt ; then - echo '====>>> this is to check that we never go through this part <<< ===' - makeclean $dir/$builddir \ - && run_clean $dir/$rundir + + 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 \ @@ -1272,7 +1299,8 @@ && 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 @@ -1328,9 +1356,9 @@ makeclean $dir/$builddir \ && run_clean $dir/$rundir fi - + echo "-------------------------------------------------------------------------------" - + done printf "Start time: " >> $SUMMARY @@ -1365,7 +1393,9 @@ fi fi -rm -f tr_cmpnum.c tr_cmpnum +if test "x$QUICK" = xf -a "x$NORUN" = xf ; then + rm -f tr_cmpnum.c tr_cmpnum +fi if test "x$CLEANUP" != xt ; then cat $SUMMARY | sed 's/ \. \. \. \. \. \. \. \. \. \. \. \. //'