/[MITgcm]/MITgcm/verification/testreport
ViewVC logotype

Diff of /MITgcm/verification/testreport

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.23 by edhill, Sat Nov 29 01:45:25 2003 UTC revision 1.79 by heimbach, Wed Jun 7 01:20:26 2006 UTC
# Line 13  usage() Line 13  usage()
13      echo "  (-help|-h)               print usage"      echo "  (-help|-h)               print usage"
14      echo "  (-mpi)                   use MPI input files"      echo "  (-mpi)                   use MPI input files"
15      echo "  (-ieee|-noieee)          if possible, use IEEE compiler flags"      echo "  (-ieee|-noieee)          if possible, use IEEE compiler flags"
16      echo "                             (DEF=\"noieee\")"      echo "                             (DEF=\"-ieee\")"
17      echo "  (-optfile=|-of=)STRING   list of optfiles to use"      echo "  (-optfile=|-of=)STRING   list of optfiles to use"
18      echo "  (-a|-addr) STRING        list of email recipients"      echo "  (-a|-addr) STRING        list of email recipients"
19      echo "                             (DEF=\"edhill@mitgcm.org\")"      echo "                             (DEF=\"edhill@mitgcm.org\")"
# Line 22  usage() Line 22  usage()
22      echo "  (-b|-bash) STRING        preferred location of a \"bash\" or"      echo "  (-b|-bash) STRING        preferred location of a \"bash\" or"
23      echo "                             Bourne-compatible \"sh\" shell"      echo "                             Bourne-compatible \"sh\" shell"
24      echo "                             (DEF=\"\" for \"bash\")"      echo "                             (DEF=\"\" for \"bash\")"
25        echo "  (-adm|-ad)               perform an adjoint run"
26      echo "  (-command) STRING        command to run"      echo "  (-command) STRING        command to run"
27      echo "                             (DEF=\"make output.txt\")"      echo "                             (DEF=\"make output.txt\")"
28      echo "  (-m|-make) STRING        command to use for \"make\""      echo "  (-m|-make) STRING        command to use for \"make\""
29      echo "                             (DEF=\"make\")"      echo "                             (DEF=\"make\")"
30        echo "  (-odir) STRING           used to build output directory name"
31        echo "                             (DEF=\"hostname\")"
32        echo "  (-ptracers|-ptr) STRING  specify which ptracers to test"
33        echo "                             (DEF=\"1 2 3 4 5\")"
34        echo "  (-j) JOBS                use \"make -j JOBS\" for parallel builds"
35      echo "  (-clean)                 *ONLY* run \"make CLEAN\""      echo "  (-clean)                 *ONLY* run \"make CLEAN\""
36      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""
37      echo "  (-nogenmake|-ng)         skip the genmake stage"      echo "  (-nogenmake|-ng)         skip the genmake stage"
38      echo "  (-noclean|-nc)           skip the \"make clean\" stage"      echo "  (-noclean|-nc)           skip the \"make clean\" stage"
39      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"
40        echo "  (-deldir|-dd)            on success, delete the output directory"
41      echo      echo
42      echo "and where STRING follows a whitespace-delimited format"      echo "and where STRING can be a whitespace-delimited list"
43      echo "such as:"      echo "such as:"
44        echo
45      echo "  -t 'exp0 exp2 exp3' "      echo "  -t 'exp0 exp2 exp3' "
46      echo "  -addr='abc@123.com testing@home.org'"      echo "  -addr='abc@123.com testing@home.org'"
47      echo      echo
48        echo "provided that the expression is properly quoted within the current"
49        echo "shell (note the use of single quotes to protect white space)."
50        echo
51      exit 1      exit 1
52  }  }
53    
54  #  build the mpack utility  #  build the mpack utility
55  build_mpack()  build_mpack()
56  {  {
57      echo -n "building the mpack utility...  "      printf "building the mpack utility...  "
58      if test ! -x "$MPACKDIR/mpack" ; then      if test ! -x "$MPACKDIR/mpack" ; then
59          if test ! -d $MPACKDIR ; then          if test ! -d $MPACKDIR ; then
60              echo              echo
# Line 53  build_mpack() Line 64  build_mpack()
64              echo              echo
65              HAVE_MPACK=f              HAVE_MPACK=f
66          fi          fi
67          echo -n "building mpack...  "          printf "building mpack...  "
68          ( cd $MPACKDIR && ./configure && $MAKE ) > build_mpack.out 2>&1          if test "x$CC" = x ; then
69                export CC=cc
70            fi
71            ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1
72          RETVAL=$?          RETVAL=$?
73          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
74              echo              echo
# Line 62  build_mpack() Line 76  build_mpack()
76              echo              echo
77              HAVE_MPACK=f              HAVE_MPACK=f
78          else          else
79                rm -f tr_build_mpack.out
80              HAVE_MPACK=t              HAVE_MPACK=t
81          fi          fi
82      else      else
# Line 72  build_mpack() Line 87  build_mpack()
87    
88  testoutput_for_prop()  testoutput_for_prop()
89  {  {
90      # testoutput_for_prop dir s1 label subdir      # testoutput_for_prop dir s1 label subdir extension
91      #      #
92      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt
93      #  using search strings s1 and text label      #  using search strings s1 and text label
# Line 82  testoutput_for_prop() Line 97  testoutput_for_prop()
97      fi      fi
98      if [ -r $1/$4/output.txt ]; then      if [ -r $1/$4/output.txt ]; then
99          grep "$2" $1/$4/output.txt | sed 's/.*=//' | cat -n > tmp1.txt          grep "$2" $1/$4/output.txt | sed 's/.*=//' | cat -n > tmp1.txt
100          lncnt=`wc -l tmp1.txt | awk '{print $1}' `          lncntA=`wc -l tmp1.txt | awk '{print $1}' `
101          if [ $lncnt -lt 3 ]; then          if [ $lncntA -lt 3 ]; then
102              if [ $verbose -gt 0 ]; then              if [ $verbose -gt 0 ]; then
103                  echo Not enough lines of output when searching for "$2" 1>&2                  echo Not enough lines of output when searching for "$2" 1>&2
104              fi              fi
# Line 94  testoutput_for_prop() Line 109  testoutput_for_prop()
109          return 99          return 99
110      fi      fi
111      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
112          echo testoutput_for_prop: grep "$2" $1/results/output.txt 1>&2          echo testoutput_for_prop: grep "$2" $1/results/output.txt$5 1>&2
113      fi      fi
114      grep "$2" $1/results/output.txt | sed 's/.*=//' | cat -n > tmp2.txt      grep "$2" $1/results/output.txt$5 | sed 's/.*=//' | cat -n > tmp2.txt
115      lncnt=`wc -l tmp2.txt | awk '{print $1}' `      lncntB=`wc -l tmp2.txt | awk '{print $1}' `
116      if [ $lncnt -lt 3 ]; then      if [ $lncntB -lt 3 ]; then
117          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
118              echo Not enough lines of output when searching for "$2" 1>&2              echo Not enough lines of output when searching for "$2" 1>&2
119          fi          fi
120          return 99          return 99
121      fi      fi
122        if [ $lncntA -ne $lncntB ]; then
123            if [ $verbose -gt 0 ]; then
124                echo Not same Nb of lines when searching for "$2" ":" $lncntA $lncntB 1>&2
125            fi
126            return 99
127        fi
128        has_nan=`cat tmp1.txt | grep -i nan | wc -l`
129        if [ $has_nan -gt 0  ] ; then
130            echo testoutput_for_prop: output.txt contains $has_nan NaN values  1>&2
131            return 99
132        fi
133        has_inf=`cat tmp1.txt | grep -i inf | wc -l`
134        if [ $has_inf -gt 0  ] ; then
135            echo testoutput_for_prop: output.txt contains $has_inf Inf values  1>&2
136            return 99
137        fi
138      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
139          echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2          echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2
140      fi      fi
# Line 148  dashnum() Line 179  dashnum()
179      done      done
180  }  }
181    
182    testoutput_ad()
183    {
184        grep $3 $1/results_ad/output_adm.txt | awk '{print NR " " $5}' > t05.txt
185        grep $3 $1/$2/output_adm.txt | awk '{print NR " " $5}' > t15.txt
186        grep $3 $1/results_ad/output_adm.txt | awk '{print NR " " $6}' > t06.txt
187        grep $3 $1/$2/output_adm.txt | awk '{print NR " " $6}' > t16.txt
188        join t05.txt t15.txt > t5.txt
189        join t06.txt t16.txt > t6.txt
190        echo "-1" >> t5.txt
191        echo "-1" >> t6.txt
192        digits_5=`./tmp_cmpnum < t5.txt`
193        digits_6=`./tmp_cmpnum < t6.txt`
194        dashnum $digits_5 $digits_6
195        rm -f t[01][56].txt t[56].txt
196    }
197    
198    check_for_add_mon_output()
199    {
200        # Check for additional types of monitor output
201        if test "x$1" = x ; then
202            return
203        fi
204    
205        for ii in $PTRACERS_NUM ; do
206            eval "HAVE_PTR0"$ii"=f"
207        done
208    
209        ptr_add="trcstat_ptracerXX_min trcstat_ptracerXX_max"
210        ptr_add="$ptr_add trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
211        for ii in $PTRACERS_NUM ; do
212            for jj in $ptr_add ; do
213                name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
214                tst=`grep $name $1 | wc -l | awk '{print $1}'`
215                if test ! "x$tst" = x0 ; then
216                    eval "HAVE_PTR0"$ii"=t"
217                fi
218            done
219            #  eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"'
220        done
221    }
222    
223  testoutput()  testoutput()
224  {  {
225      # testoutput diretory subdir      # testoutput directory subdir extension
226      #      #
227      #  test output in "directory"      #  test output in "directory"
228        if test "x$ADM" = x ; then
229            if [ $debug -gt 0 ]; then
230                echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2
231            fi
232            testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2 $3; cg2dres=$?
233            if [ $debug -gt 0 ]; then
234                echo testoutput: cg2dres=$cg2dres 1>&2
235            fi
236            testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2 $3; tmin=$?
237            testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2 $3; tmax=$?
238            testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2 $3; tmean=$?
239            testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2 $3; tsd=$?
240            testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2 $3; smin=$?
241            testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2 $3; smax=$?
242            testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2 $3; smean=$?
243            testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2 $3; ssd=$?
244            testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2 $3; umin=$?
245            testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2 $3; umax=$?
246            testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2 $3; umean=$?
247            testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2 $3; usd=$?
248            testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2 $3; vmin=$?
249            testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2 $3; vmax=$?
250            testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2 $3; vmean=$?
251            testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2 $3; vsd=$?
252    
253            #  This is for PTRACERS
254            for ii in $PTRACERS_NUM ; do
255                eval `echo "p0"$ii"_min=99"`
256                eval `echo "p0"$ii"_max=99"`
257                eval `echo "p0"$ii"_mean=99"`
258                eval `echo "p0"$ii"_sd=99"`
259                tst=`eval 'echo "$HAVE_PTR0'$ii'"'`
260                #echo 'tst = '$tst
261                if test "x$tst" = xt ; then
262                    a="trcstat_ptracer0"
263                    testoutput_for_prop $1 "$a"$ii"_min"  "p0"$ii"_min"  $2 $3
264                    RETVAL=$? ; eval `echo "p0"$ii"_min="$RETVAL`
265                    testoutput_for_prop $1 "$a"$ii"_max"  "p0"$ii"_max"  $2 $3
266                    RETVAL=$? ; eval `echo "p0"$ii"_max="$RETVAL`
267                    testoutput_for_prop $1 "$a"$ii"_mean" "p0"$ii"_mean" $2 $3
268                    RETVAL=$? ; eval `echo "p0"$ii"_mean="$RETVAL`
269                    testoutput_for_prop $1 "$a"$ii"_sd"   "p0"$ii"_sd"   $2 $3
270                    RETVAL=$? ; eval `echo "p0"$ii"_sd="$RETVAL`
271                fi
272            done
273    
274      if [ $debug -gt 0 ]; then          allargs="$cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd"
275          echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2          allargs="$allargs $umin $umax $umean $usd $vmin $vmax $vmean $vsd"
276      fi          allargs="$allargs $p01_min $p01_max $p01_mean $p01_sd"
277      testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2; cg2dres=$?          allargs="$allargs $p02_min $p02_max $p02_mean $p02_sd"
278      if [ $debug -gt 0 ]; then          allargs="$allargs $p03_min $p03_max $p03_mean $p03_sd"
279          echo testoutput: cg2dres=$cg2dres 1>&2          allargs="$allargs $p04_min $p04_max $p04_mean $p04_sd"
280            allargs="$allargs $p05_min $p05_max $p05_mean $p05_sd"
281    
282            eval "dashnum $allargs"
283    
284        else
285            testoutput_ad $1 $2 "precision_grdchk_result"
286      fi      fi
     testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2; tmin=$?  
     testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2; tmax=$?  
     testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2; tmean=$?  
     testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2; tsd=$?  
     testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2; smin=$?  
     testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2; smax=$?  
     testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2; smean=$?  
     testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2; ssd=$?  
     testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2; umin=$?  
     testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2; umax=$?  
     testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2; umean=$?  
     testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2; usd=$?  
     testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2; vmin=$?  
     testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2; vmax=$?  
     testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2; vmean=$?  
     testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2; vsd=$?  
       
     dashnum $cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd \  
         $umin $umax $umean $usd $vmin $vmax $vmean $vsd  
287  }  }
288    
289  genmakemodel()  genmakemodel()
# Line 188  genmakemodel() Line 292  genmakemodel()
292      if test "x$NOGENMAKE" = xt ; then      if test "x$NOGENMAKE" = xt ; then
293          echo "genmake skipped!"          echo "genmake skipped!"
294      else      else
295          GENMAKE2="$BASH ../../../tools/genmake2"          if test "x$BASH" = x ; then
296                GENMAKE2="../../../tools/genmake2"
297            else
298                GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
299            fi
300          (          (
301              cd $1;              cd $1;
302              command="$GENMAKE2  -ds -m $MAKE --mods=../code"              command="$GENMAKE2  -ds -m $MAKE"
303                if test "x$ADM" = x ; then
304                    command="$command --mods=../code"
305                else
306                    command="$command --mods=../code_ad"
307                fi
308              if test "x$OPTFILE" != xNONE ; then              if test "x$OPTFILE" != xNONE ; then
309                  command="$command --optfile=$OPTFILE"                  command="$command --optfile=$OPTFILE"
310              fi              fi
311              if test "x$IEEE" != x ; then              if test "x$IEEE" != x ; then
312                  command="$command -ieee"                  command="$command -ieee"
313              fi              fi
314                if test "x$MPI" = xt ; then
315                    command="$command -mpi"
316                fi
317              printf 'genmake ... ' 1>&2              printf 'genmake ... ' 1>&2
318              $command > make.log 2>&1              $command > make.log 2>&1
319              RETVAL=$?              RETVAL=$?
320              cp Makefile $CDIR              #  Reduce the size of the testing emails!
321                head -100 Makefile > $CDIR/Makefile_head
322              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
323                  tail make.log                  tail make.log
324                  echo "genmakemodel: genmake failed" 1>&2                  echo "genmakemodel: genmake failed" 1>&2
# Line 242  makeclean() Line 359  makeclean()
359      fi      fi
360  }  }
361    
362    postclean()
363    {
364        # postclean directory
365        if test "x$POSTCLEAN" = xt ; then
366            (
367                cd $1;
368                if test -r Makefile ; then
369                    $MAKE CLEAN >> /dev/null 2>&1
370                fi
371                exit 0
372            )
373        fi
374    }
375    
376  makedependmodel()  makedependmodel()
377  {  {
378      # makedependmodel directory      # makedependmodel directory
# Line 272  makemodel() Line 403  makemodel()
403          cd $1;          cd $1;
404          if test -r Makefile ; then          if test -r Makefile ; then
405              printf 'make ... ' 1>&2              printf 'make ... ' 1>&2
406              $MAKE >> make.log 2>&1              if test "x$ADM" = x ; then
407                    if test "x$JOBS" = x ; then
408                        $MAKE >> make.log 2>&1
409                    else
410                        $MAKE -j $JOBS >> make.log 2>&1
411                    fi
412                else
413                    $MAKE adall >> make.log 2>&1
414                fi
415              RETVAL=$?              RETVAL=$?
416              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
417                  tail make.log                  tail make.log
# Line 286  makemodel() Line 425  makemodel()
425      )      )
426  }  }
427    
428    symlink_mpifiles()
429    {
430        # Put special links so that MPI specific files are used
431        # This MUST be invoked between makeclean and makelinks because
432        # the Makefile will link to non-mpi files by default
433    
434        dir=$1
435        code_dir=$2
436        BUILD_DIR=$dir/$3
437        CODE_DIR=$dir/$code_dir
438        
439        # These are files that should replace their counter-part when using -mpi
440        MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`
441    
442        #  Is this an MPI run?
443        if test "x$MPI" = xt ; then
444            # YES: We symbolically link these files to the build
445            # dir so long as there is no real file in place
446            for ii in $MPI_FILES ; do
447                i=`echo $ii | sed 's:^\./::'`
448                name=`echo $i | sed 's:_mpi::' `
449                cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1
450                RETVAL=$?
451                if test "x$RETVAL" != x0 ; then
452                    if ! test -f $BUILD_DIR/$i ; then
453                        #echo Linking $name to $i
454                        (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
455                    fi
456                fi
457            done
458        else
459            # NO: We undo any _mpi symbolically linked files
460            for ii in $MPI_FILES ; do
461                i=`echo $ii | sed 's:^\./::'`
462                name=`echo $i | sed 's:_mpi::' `
463                if test -L $BUILD_DIR/$name ; then
464                    cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
465                    RETVAL=$?
466                    if test "x$RETVAL" = x0 ; then
467                        #echo Un-linking $name from $linktarg
468                        rm -f $BUILD_DIR/$name
469                    fi
470                fi
471            done
472        fi
473        
474    }
475    
476  linkdata()  linkdata()
477  {  {
478      # linkdata flag      # linkdata flag
# Line 294  linkdata() Line 481  linkdata()
481      if test "x$1" = x1 ; then      if test "x$1" = x1 ; then
482          (          (
483              cd $2              cd $2
484              files=`( cd ../input ; ls -1 | grep -v CVS )`              if test "x$ADM" = x ; then
485              for i in $files ; do                  files=`( cd ../input ; ls -1 | grep -v CVS )`
486                  if test ! -d "../input/"$i ; then                  for i in $files ; do
487                      ln -sf "../input/"$i $i                      if test ! -d "../input/"$i -a ! -f $i ; then
488                  fi                          ln -sf "../input/"$i $i
489              done                      fi
490                    done
491                else
492                    files=`( cd ../input ; ls -1 *.bin | grep -v CVS )`
493                    for i in $files ; do
494                        if test ! -d "../input/"$i ; then
495                            ln -sf "../input/"$i $i
496                        fi
497                    done
498                    files=`( cd ../input_ad ; ls -1 | grep -v CVS )`
499                    for i in $files ; do
500                        if test ! -d "../input_ad/"$i ; then
501                            ln -sf "../input_ad/"$i $i
502                        fi
503                    done
504                fi
505          )          )
506      fi      fi
507  }  }
# Line 308  runmodel() Line 510  runmodel()
510  {  {
511      # runmodel directory      # runmodel directory
512      #      #
513      #  runs "$COMMAND" in "directory"      #  runs "$COMMAND in "directory"
514      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
515      (      (
516          cd $1          cd $1
517          printf 'runmodel ... ' 1>&2          printf 'runmodel in %s ...' $1 1>&2
518          # make output.txt          # make output.txt
519          $COMMAND >> run.log 2>&1          echo
520          RETVAL=$?          rm -f run.log
521            if test $OUTPUTFILE -ot $EXECUTABLE ; then
522               ( eval $COMMAND ) > run.log 2>&1
523               RETVAL=$?
524            else
525               echo " $OUTPUTFILE is up to date " > run.log 2>&1
526               RETVAL=0
527            fi
528            # echo "COMMAND='$COMMAND'"
529            # echo "pwd='"`pwd`"'"
530          if test "x$RETVAL" = x0 ; then          if test "x$RETVAL" = x0 ; then
531                tail run.log
532              echo successful 1>&2              echo successful 1>&2
533              cp output.txt $CDIR"/output.txt"              # === Reduce the size of the testing emails!
534                # if test "x$ADM" = x ; then
535                #   cp output.txt $CDIR"/output.txt"
536                # else
537                #   cp output_adm.txt $CDIR"/output_adm.txt"
538                # fi
539                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
540              return 0              return 0
541          else          else
542              tail run.log              tail run.log
543              echo failed 1>&2              echo failed 1>&2
544              cp run.log $CDIR"/run.log"              cp run.log $CDIR"/run.log"
545                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
546              return 1              return 1
547          fi          fi
548      )      )
# Line 333  createcodelet() Line 552  createcodelet()
552  {  {
553      # create codelet for comparing model output      # create codelet for comparing model output
554    
555      echo -n "creating the comparison code...  "      printf "creating the comparison code...  "
556      cat > tmp_cmpnum.c <<EOF      cat > tmp_cmpnum.c <<EOF
557  #include <stdio.h>  #include <stdio.h>
558  #include <math.h>  #include <math.h>
559  int main( int argc, char** argv )  {  int main( int argc, char** argv )  {
560    int linnum,best;    int linnum,best,lncnt;
561    double a,b,diff;    double a,b,abave,relerr;
562    best = -16;    best = -22;
563    while( 1 )  {    lncnt = 0;
564      while( 1 & (lncnt+=1) < 999 )  {
565      scanf("%d", &linnum);      scanf("%d", &linnum);
566      if (linnum == -1)  break;      if (linnum == -1)  break;
567      scanf("%lf", &a);  scanf("%lf", &b);      scanf("%lf", &a);  scanf("%lf", &b);
568      diff = 0.5*(fabs(a)+fabs(b));      abave = 0.5*(fabs(a)+fabs(b));
569      if (diff > 1.e-12) {      if (abave > 0.0) {
570        diff=fabs(a-b)/diff;        relerr=fabs(a-b)/abave;
571        if (diff > 0.0) {        if (relerr > 0.0) { linnum = (int)rint(log10(relerr)); }
572          linnum = (int)log10(diff);        else { linnum = -16 ; }
573          best = (best > linnum) ? best : linnum;        best = (best > linnum) ? best : linnum;
       }  
       else {  
         if (best == -16 && diff != 0)  best = -22;  
       }  
574      }      }
575    }    }
576      if (lncnt == 999) best=-29;
577    printf("%d\n", -best);    printf("%d\n", -best);
578    return 0;    return 0;
579  }  }
580  EOF  EOF
581      cc -o tmp_cmpnum tmp_cmpnum.c -lm      $CC -o tmp_cmpnum tmp_cmpnum.c -lm
582    
583      if [ -x ./tmp_cmpnum ]; then      if [ -x ./tmp_cmpnum ]; then
584          echo "OK"          echo "OK"
585          return 0          return 0
586      else      else
587          echo          echo
588          echo "ERROR: failed to compile comparison code"          echo "ERROR: failed to compile comparison code -- please specify"
589            echo "  a C compiler using the CC environment variable."
590          exit 1          exit 1
591      fi      fi
592  }  }
# Line 437  clean=0 Line 655  clean=0
655  expts=''  expts=''
656  # ieee=1  # ieee=1
657    
658  IEEE=  IEEE=true
659  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
660      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
661  fi  fi
# Line 448  QUICK=f Line 666  QUICK=f
666  NOGENMAKE=f  NOGENMAKE=f
667  NOCLEAN=f  NOCLEAN=f
668  NODEPEND=f  NODEPEND=f
669    POSTCLEAN=f
670    
671  BASH=  BASH=
672  OPTFILE=NONE  OPTFILE=NONE
# Line 456  TESTDIRS= Line 675  TESTDIRS=
675  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
676  HAVE_MPACK=  HAVE_MPACK=
677  MPACK="$MPACKDIR/mpack"  MPACK="$MPACKDIR/mpack"
678  COMMAND="make output.txt"  COMMAND=
679  MAKE=make  if test "x$MAKE" = x ; then
680        MAKE=make
681    fi
682    if test "x$CC" = x ; then
683        CC=cc
684    fi
685    JOBS=
686  MPI=f  MPI=f
687    OUTDIR=
688    DELDIR=
689    
690  echo -n "parsing options...  "  ADM=
691    
692    # Additional monitor types
693    PTRACERS_NUM="1 2 3 4 5"
694    
695    printf "parsing options...  "
696    
697  ac_prev=  ac_prev=
698  for ac_option ; do  for ac_option ; do
# Line 509  for ac_option ; do Line 741  for ac_option ; do
741          -make=* | --make=*)          -make=* | --make=*)
742              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
743    
744            -odir | --odir)
745                ac_prev=OUTDIR ;;
746            -odir=* | --odir=*)
747                OUTDIR=$ac_optarg ;;
748    
749            -ptracers | --ptracers | -ptr | --ptr)
750                ac_prev=PTRACERS_NUM ;;
751            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
752                PTRACERS_NUM=$ac_optarg ;;
753    
754            -j) ac_prev=JOBS ;;
755            -j=*) JOBS=$ac_optarg ;;
756    
757          -clean | --clean)          -clean | --clean)
758              CLEANUP=t ;;              CLEANUP=t ; DELDIR=t ;;
759    
760          -quick | --quick | -q | --q)          -quick | --quick | -q | --q)
761              QUICK=t ;;              QUICK=t ;;
# Line 521  for ac_option ; do Line 766  for ac_option ; do
766          -nodepend | --nodepend | -nd | --nd)          -nodepend | --nodepend | -nd | --nd)
767              NODEPEND=t ;;              NODEPEND=t ;;
768    
769            -postclean | --postclean | -pc | --pc)
770                POSTCLEAN=t ;;
771    
772          -mpi) MPI=t ;;          -mpi) MPI=t ;;
773    
774            -adm | -ad) ADM=t ;;
775    
776          -ieee) IEEE=true ;;          -ieee) IEEE=true ;;
777          -noieee) IEEE= ;;          -noieee) IEEE= ;;
778    
# Line 530  for ac_option ; do Line 780  for ac_option ; do
780          -debug) debug=1 ;;          -debug) debug=1 ;;
781          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
782    
783            -deldir | -dd) DELDIR=t ;;
784    
785          -*)          -*)
786              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
787              usage              usage
# Line 558  if test "x$OPTFILE" = xNONE -a "x$MITGCM Line 810  if test "x$OPTFILE" = xNONE -a "x$MITGCM
810      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
811  fi  fi
812    
813  echo "OK"  if test "x$ADM" = xt ; then
814        EXECUTABLE="mitgcmuv_ad"
815        OUTPUTFILE="output_adm.txt"
816    else
817        EXECUTABLE="mitgcmuv"
818        OUTPUTFILE="output.txt"
819    fi
820    
821    if test "x$ADM" = xt -a "x$COMMAND" = x ; then
822        COMMAND="./$EXECUTABLE > $OUTPUTFILE"
823    fi
824    
825    if test "x$COMMAND" = x ; then
826        COMMAND="./$EXECUTABLE > $OUTPUTFILE"
827    fi
828    
829    #echo "OK"
830    echo "OK (COMMAND= $COMMAND )"
831    
832  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
833  createcodelet  createcodelet
834    
835  #  build the mpack utility  #  build the mpack utility
836  build_mpack  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
837        echo "skipping mpack build"
838    else
839        build_mpack
840    fi
841    
842  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
843  MACH=`hostname`  MACH=`hostname`
844  UNAMEA=`uname -a`  UNAMEA=`uname -a`
845  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
846  BASE=$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
847    if test "x$OUTDIR" != x ; then
848        BASE="tr_"$OUTDIR"_"$DATE"_"
849    fi
850  DNUM=0  DNUM=0
851  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
852  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 584  if test "x$RETVAL" != x0 ; then Line 860  if test "x$RETVAL" != x0 ; then
860      exit 1      exit 1
861  fi  fi
862  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
863  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
864  start_date=`date`  start_date=`date`
865  echo $start_date > $SUMMARY  echo $start_date > $SUMMARY
866    
# Line 615  else Line 891  else
891  fi  fi
892  echo  echo
893  echo >> $SUMMARY  echo >> $SUMMARY
894  cat << EOF | tee -a $SUMMARY  if test "x$ADM" = x ; then
895                  T           S           U           V      line_0="            ----T-----  ----S-----  ----U-----  ----V-----"
896  G D M    c        m  s        m  s        m  s        m  s      line_1="G D M    c        m  s        m  s        m  s        m  s"
897  E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .      line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
898  N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d      line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
899  2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .      line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
900        for ii in $PTRACERS_NUM ; do
901            #  tst=`eval 'echo $HAVE_PTR0'$ii`
902            #  if test "x$tst" = xt ; then
903            line_0="$line_0  --PTR 0"$ii"--"
904            line_1="$line_1        m  s"
905            line_2="$line_2  m  m  e  ."
906            line_3="$line_3  i  a  a  d"
907            line_4="$line_4  n  x  n  ."
908            #  fi
909        done
910        echo "$line_0" | tee -a $SUMMARY
911        echo "$line_1" | tee -a $SUMMARY
912        echo "$line_2" | tee -a $SUMMARY
913        echo "$line_3" | tee -a $SUMMARY
914        echo "$line_4" | tee -a $SUMMARY
915        echo " "       | tee -a $SUMMARY
916    else
917        echo "ADJOINT=true" >> $SUMMARY
918        echo >> $SUMMARY
919        cat << EOF | tee -a $SUMMARY
920    G D M    C  G
921    E p a R  o  r
922    N n k u  s  a
923    2 d e n  t  d
924    
925  EOF  EOF
926    fi
927    
928  #  ...and each test directory...  #  ...and each test directory...
929  for dir in $TESTDIRS ; do  for dir in $TESTDIRS ; do
# Line 635  for dir in $TESTDIRS ; do Line 936  for dir in $TESTDIRS ; do
936          if test -r $dir/input/Makefile ; then          if test -r $dir/input/Makefile ; then
937              ( cd $dir/input ; make CLEAN )              ( cd $dir/input ; make CLEAN )
938          fi          fi
939            (
940                cd $dir
941                rm -rf tr_run.*
942            )
943          continue          continue
944      fi      fi
945    
946      #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
947      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
948      if test ! -r $dir"/results/output.txt" ; then      fout=
949          echo "can't read \"$dir/results/output.txt\" -- skipping $dir"      if test "x$ADM" = x ; then
950            fout=$dir"/results/output.txt"
951        else
952            fout=$dir"/results_ad/output_adm.txt"
953        fi
954        if test ! -r $fout ; then
955            echo "can't read \"$fout\" -- skipping $dir"
956          continue          continue
957      fi      fi
958        if test "x$ADM" = x ; then
959            check_for_add_mon_output  $fout
960        fi
961    
962      echo "-------------------------------------------------------------------------------"      # Check for additional types of monitor output
     echo  
     echo "Experiment:  $dir"  
     echo  
     unset genmake makedepend make run  
     results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'  
963    
964      builddir="input"      builddir="input"
965      rundir="input"      rundir="input"
# Line 662  for dir in $TESTDIRS ; do Line 971  for dir in $TESTDIRS ; do
971          linkdata $use_seperate_build $dir/$rundir          linkdata $use_seperate_build $dir/$rundir
972      fi      fi
973            
974      CODE_DIR=$dir/code      #  Check whether there are "extra runs" for this testdir
975      BUILD_DIR=$dir/$builddir      extra_runs=
976      MPI_FILES="CPP_EEOPTIONS.h_mpi SIZE.h_mpi"      if test "x$ADM" = x -a "x$use_seperate_build" = x1 ; then
977      NOMPI_FILES="CPP_EEOPTIONS.h_nompi SIZE.h_nompi"          ex_run_dirs=`( cd $dir ; echo input.* )`
978            echo "ex_run_dirs='$ex_run_dirs'"
979            for exd in $ex_run_dirs ; do
980                name=`echo $exd | sed -e 's/input.//g'`
981                outf="$dir/results/output.txt.$name"
982                if test -f $outf -a -r $outf ; then
983                    extra_runs="$extra_runs $name"
984                fi
985            done
986        fi
987    
988      #  Is this an MPI run?      if test "x$ADM" = x ; then
989      if test "x$MPI" = xt ; then          code_dir=code
990          FILES=$MPI_FILES          CODE_DIR=$dir/code
         endings="_mpi"  
991      else      else
992          FILES=$NOMPI_FILES          code_dir=code_ad
993          endings="_nompi"          CODE_DIR=$dir/code_ad
994      fi      fi
995            BUILD_DIR=$dir/$builddir
996      #  Check to see that we have the files  
997      have_files=t      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
998      for i in $FILES ; do          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
         if test ! -r $CODE_DIR/$i ; then  
             echo "Warning: can't read file $CODE_DIR/$i"  
             have_files=f  
         fi  
     done  
     if test "x$have_files" != xt -a "x$MPI" = xt ; then  
         echo "Skipping $dir due to lack of input files (see above warning)"  
999          continue          continue
1000      fi      fi
1001        
1002      #  If we have the $FILES and they differ, copy the $FILES to $BUILD_DIR      echo "-------------------------------------------------------------------------------"
1003      if test "x$have_files" = xt ; then      echo
1004          for i in $FILES ; do      echo "Experiment:  $dir"
1005              sstr="s|$endings||"      echo
1006              name=`echo $i | sed -e $sstr `      unset genmake makedepend make run
1007              cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1008              RETVAL=$?  
             if test "x$RETVAL" != x0 ; then  
                 cp $CODE_DIR/$i $BUILD_DIR/$name  
             fi  
         done  
     fi  
       
1009      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1010      rel_CDIR=$DRESULTS"/"$dir      rel_CDIR=$DRESULTS"/"$dir
1011      mkdir $rel_CDIR      mkdir $rel_CDIR
# Line 712  for dir in $TESTDIRS ; do Line 1016  for dir in $TESTDIRS ; do
1016      else      else
1017          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1018              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1019                && symlink_mpifiles $dir $code_dir $builddir \
1020              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1021              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1022              && linkdata $use_seperate_build $dir/$rundir \              && linkdata $use_seperate_build $dir/$rundir \
# Line 720  for dir in $TESTDIRS ; do Line 1025  for dir in $TESTDIRS ; do
1025      fi      fi
1026            
1027      echo      echo
1028      fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`      if test "x$ADM" = x ; then
1029      echo          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1030      echo "$fres" >> $SUMMARY          echo
1031      echo "fresults='$fres'" > $CDIR"/summary.txt"          echo "$fres" >> $SUMMARY
1032      echo "MACH='$MACH'" >> $CDIR"/summary.txt"          echo "fresults='$fres'" > $CDIR"/summary.txt"
1033      echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"          echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1034      echo "DATE='$DATE'" >> $CDIR"/summary.txt"          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1035      echo "tdir='$dir'" >> $CDIR"/summary.txt"          echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1036            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1037    
1038            for ex in $extra_runs ; do
1039                unset run
1040                results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1041                #  Create an output dir for each OPTFILE/tdir.ex combination
1042                rel_CDIR=$DRESULTS"/"$dir"."$ex
1043                mkdir $rel_CDIR
1044                CDIR=`pwd`"/$rel_CDIR"
1045                test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1046                for ldir in input.$ex input ; do
1047                    (
1048                        cd "$dir/$ldir" > /dev/null 2>&1
1049                        ls -1 2>/dev/null \
1050                            | sed -e 's|^CVS$||g' | sed -e 's|^output.txt$||g'
1051                    ) > tr_exrun_links
1052                    (
1053                        cd "$dir/tr_run.$ex"
1054                        cat ../../tr_exrun_links | while read i ; do
1055                            if test ! "x$i" = x ; then
1056                                test ! -r $i  &&  ln -s "../"$ldir"/"$i $i
1057                            fi
1058                        done
1059                    )
1060                    test -e tr_exrun_links  &&  rm -f tr_exrun_links
1061                done
1062                ldir=build
1063                (
1064                    cd $dir/tr_run.$ex
1065                    test ! -e mitgcmuv  &&  ln -s "../"$ldir"/"mitgcmuv .
1066                )
1067                runmodel $dir/tr_run.$ex && run=Y \
1068                    && results=`testoutput $dir tr_run.$ex "."$ex`
1069                fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1070                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1071                fres="$fres.$ex"
1072                echo
1073                echo "$fres" >> $SUMMARY
1074                echo "fresults='$fres'" > $CDIR"/summary.txt"
1075                echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1076                echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1077                echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1078                echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1079            done
1080        else
1081            fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1082            fres=$fres"$results   $dir"
1083            echo
1084            echo "$fres" >> $SUMMARY
1085            echo "fresults='$fres'" > $CDIR"/summary.txt"
1086            echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1087            echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1088            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1089            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1090            grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1091                               >> $CDIR"/summary.txt"
1092        fi
1093    
1094        postclean $dir/$builddir
1095            
1096      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1097            
1098  done  done
1099    
1100  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1101  echo $start_date >> $SUMMARY  echo $start_date >> $SUMMARY
1102  echo -n "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
1103  date >> $SUMMARY  date >> $SUMMARY
1104    
1105  #  If addresses were supplied and mpack built successfully, then try  #  If addresses were supplied and mpack built successfully, then try
# Line 746  else Line 1110  else
1110      if test "x$HAVE_MPACK" = xt ; then      if test "x$HAVE_MPACK" = xt ; then
1111          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1112              && gzip $DRESULTS".tar" \              && gzip $DRESULTS".tar" \
1113              && $MPACK -s MITgcm-test -m 1500000 $DRESULTS".tar.gz" $ADDRESSES              && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1114          RETVAL=$?          RETVAL=$?
1115          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1116              echo              echo
# Line 769  fi Line 1133  fi
1133  rm -f tmp_cmpnum.c tmp_cmpnum  rm -f tmp_cmpnum.c tmp_cmpnum
1134    
1135  if test "x$CLEANUP" != xt ; then  if test "x$CLEANUP" != xt ; then
1136      cat $SUMMARY      cat $SUMMARY | sed 's/ -- -- -- --//g'
1137      if test -e tr.out ; then      if test -e tr_out.txt ; then
1138          mv tr.out tr.out.old          mv tr_out.txt tr_out.txt.old
1139      fi      fi
1140      cat $SUMMARY > tr.out      cat $SUMMARY | sed 's/ -- -- -- --//g' > tr_out.txt
1141    fi
1142    
1143    if test "x$DELDIR" = xt ; then
1144        rm -rf $DRESULTS
1145  fi  fi
1146    

Legend:
Removed from v.1.23  
changed lines
  Added in v.1.79

  ViewVC Help
Powered by ViewVC 1.1.22