--- MITgcm/verification/testreport 2009/06/04 23:40:53 1.127 +++ MITgcm/verification/testreport 2010/03/08 16:36:20 1.136 @@ -1,6 +1,6 @@ #! /usr/bin/env bash # -# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/verification/testreport,v 1.127 2009/06/04 23:40:53 jmc Exp $ +# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/verification/testreport,v 1.136 2010/03/08 16:36:20 jmc Exp $ # $Name: $ # @@ -13,36 +13,38 @@ 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 " (-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 " (-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 " (-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" @@ -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 } @@ -264,10 +266,10 @@ testoutput_var $1 "trcstat_ptracer0"$ii"_mean" "p0"$ii"_mean" $2 $3; yy=$? ;; 'pt1sd'|'pt2sd'|'pt3sd'|'pt4sd'|'pt5sd') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'` testoutput_var $1 "trcstat_ptracer0"$ii"_sd" "p0"$ii"_StDv" $2 $3; yy=$? ;; - 'Qntmn') testoutput_var $1 "extforcing_qnet_min" "Qnet minimum" $2 $3; yy=$? ;; - 'Qntmx') testoutput_var $1 "extforcing_qnet_max" "Qnet maximum" $2 $3; yy=$? ;; - 'Qntav') testoutput_var $1 "extforcing_qnet_mean" "Qnet mean" $2 $3; yy=$? ;; - 'Qntsd') testoutput_var $1 "extforcing_qnet_sd" "Qnet Std.Dev" $2 $3; yy=$? ;; + 'Qntmn') testoutput_var $1 "forcing_qnet_min" "Qnet minimum" $2 $3; yy=$? ;; + 'Qntmx') testoutput_var $1 "forcing_qnet_max" "Qnet maximum" $2 $3; yy=$? ;; + 'Qntav') testoutput_var $1 "forcing_qnet_mean" "Qnet mean" $2 $3; yy=$? ;; + 'Qntsd') testoutput_var $1 "forcing_qnet_sd" "Qnet Std.Dev" $2 $3; yy=$? ;; 'aSImn') testoutput_var $1 "seaice_area_min" "SIce Area min" $2 $3; yy=$? ;; 'aSImx') testoutput_var $1 "seaice_area_max" "SIce Area max" $2 $3; yy=$? ;; 'aSIav') testoutput_var $1 "seaice_area_mean" "SIce Area mean" $2 $3; yy=$? ;; @@ -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 @@ -444,6 +449,15 @@ { # 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 @@ -463,11 +477,13 @@ tail make.log echo failed 1>&2 cp make.log $CDIR"/make.log" + rm -f $EXECUTABLE return 1 else echo successful 1>&2 fi fi + fi ) } @@ -481,7 +497,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 +532,7 @@ fi done fi - + } linkdata() @@ -535,7 +551,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 +566,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 +603,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 +639,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 +649,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 +656,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 +715,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 +734,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 +1176,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 +1191,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 @@ -1172,6 +1206,7 @@ if test "x$CLEANUP" = xt ; then echo -n ' --- dir:' $BUILD_DIR ': ' makeclean $BUILD_DIR + rm -f $BUILD_DIR/$EXECUTABLE if test -d $dir/$rundir/CVS ; then echo -n ' --- dir:' $dir/$rundir ': ' run_clean $dir/$rundir @@ -1185,7 +1220,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 @@ -1213,14 +1248,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"` @@ -1242,7 +1279,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" @@ -1255,11 +1292,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 \ @@ -1271,7 +1312,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 @@ -1327,9 +1369,9 @@ makeclean $dir/$builddir \ && run_clean $dir/$rundir fi - + echo "-------------------------------------------------------------------------------" - + done printf "Start time: " >> $SUMMARY @@ -1358,13 +1400,15 @@ echo "An email containing results was sent to the following addresses:" echo " \"$ADDRESSES\"" echo + test -f $DRESULTS".tar" && rm -f $DRESULTS".tar" + test -f $DRESULTS".tar.gz" && rm -f $DRESULTS".tar.gz" fi - test -f $DRESULTS".tar" && rm -f $DRESULTS".tar" - test -f $DRESULTS".tar.gz" && rm -f $DRESULTS".tar.gz" 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/ \. \. \. \. \. \. \. \. \. \. \. \. //'