/[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.77 by jmc, Mon Mar 20 21:50:36 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.txt_adm | awk '{print NR " " $5}' > t05.txt
185        grep $3 $1/$2/output.txt_adm | awk '{print NR " " $5}' > t15.txt
186        grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $6}' > t06.txt
187        grep $3 $1/$2/output.txt_adm | 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                    command="$command -adof=../../../tools/adjoint_options/adjoint_staf"
308                fi
309              if test "x$OPTFILE" != xNONE ; then              if test "x$OPTFILE" != xNONE ; then
310                  command="$command --optfile=$OPTFILE"                  command="$command --optfile=$OPTFILE"
311              fi              fi
312              if test "x$IEEE" != x ; then              if test "x$IEEE" != x ; then
313                  command="$command -ieee"                  command="$command -ieee"
314              fi              fi
315                if test "x$MPI" = xt ; then
316                    command="$command -mpi"
317                fi
318              printf 'genmake ... ' 1>&2              printf 'genmake ... ' 1>&2
319              $command > make.log 2>&1              $command > make.log 2>&1
320              RETVAL=$?              RETVAL=$?
321              cp Makefile $CDIR              #  Reduce the size of the testing emails!
322                head -100 Makefile > $CDIR/Makefile_head
323              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
324                  tail make.log                  tail make.log
325                  echo "genmakemodel: genmake failed" 1>&2                  echo "genmakemodel: genmake failed" 1>&2
# Line 242  makeclean() Line 360  makeclean()
360      fi      fi
361  }  }
362    
363    postclean()
364    {
365        # postclean directory
366        if test "x$POSTCLEAN" = xt ; then
367            (
368                cd $1;
369                if test -r Makefile ; then
370                    $MAKE CLEAN >> /dev/null 2>&1
371                fi
372                exit 0
373            )
374        fi
375    }
376    
377  makedependmodel()  makedependmodel()
378  {  {
379      # makedependmodel directory      # makedependmodel directory
# Line 272  makemodel() Line 404  makemodel()
404          cd $1;          cd $1;
405          if test -r Makefile ; then          if test -r Makefile ; then
406              printf 'make ... ' 1>&2              printf 'make ... ' 1>&2
407              $MAKE >> make.log 2>&1              if test "x$ADM" = x ; then
408                    if test "x$JOBS" = x ; then
409                        $MAKE >> make.log 2>&1
410                    else
411                        $MAKE -j $JOBS >> make.log 2>&1
412                    fi
413                else
414                    $MAKE adall >> make.log 2>&1
415                fi
416              RETVAL=$?              RETVAL=$?
417              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
418                  tail make.log                  tail make.log
# Line 286  makemodel() Line 426  makemodel()
426      )      )
427  }  }
428    
429    symlink_mpifiles()
430    {
431        # Put special links so that MPI specific files are used
432        # This MUST be invoked between makeclean and makelinks because
433        # the Makefile will link to non-mpi files by default
434    
435        dir=$1
436        code_dir=$2
437        BUILD_DIR=$dir/$3
438        CODE_DIR=$dir/$code_dir
439        
440        # These are files that should replace their counter-part when using -mpi
441        MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`
442    
443        #  Is this an MPI run?
444        if test "x$MPI" = xt ; then
445            # YES: We symbolically link these files to the build
446            # dir so long as there is no real file in place
447            for ii in $MPI_FILES ; do
448                i=`echo $ii | sed 's:^\./::'`
449                name=`echo $i | sed 's:_mpi::' `
450                cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1
451                RETVAL=$?
452                if test "x$RETVAL" != x0 ; then
453                    if ! test -f $BUILD_DIR/$i ; then
454                        #echo Linking $name to $i
455                        (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
456                    fi
457                fi
458            done
459        else
460            # NO: We undo any _mpi symbolically linked files
461            for ii in $MPI_FILES ; do
462                i=`echo $ii | sed 's:^\./::'`
463                name=`echo $i | sed 's:_mpi::' `
464                if test -L $BUILD_DIR/$name ; then
465                    cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
466                    RETVAL=$?
467                    if test "x$RETVAL" = x0 ; then
468                        #echo Un-linking $name from $linktarg
469                        rm -f $BUILD_DIR/$name
470                    fi
471                fi
472            done
473        fi
474        
475    }
476    
477  linkdata()  linkdata()
478  {  {
479      # linkdata flag      # linkdata flag
# Line 294  linkdata() Line 482  linkdata()
482      if test "x$1" = x1 ; then      if test "x$1" = x1 ; then
483          (          (
484              cd $2              cd $2
485              files=`( cd ../input ; ls -1 | grep -v CVS )`              if test "x$ADM" = x ; then
486              for i in $files ; do                  files=`( cd ../input ; ls -1 | grep -v CVS )`
487                  if test ! -d "../input/"$i ; then                  for i in $files ; do
488                      ln -sf "../input/"$i $i                      if test ! -d "../input/"$i -a ! -f $i ; then
489                  fi                          ln -sf "../input/"$i $i
490              done                      fi
491                    done
492                else
493                    files=`( cd ../input ; ls -1 *.bin | grep -v CVS )`
494                    for i in $files ; do
495                        if test ! -d "../input/"$i ; then
496                            ln -sf "../input/"$i $i
497                        fi
498                    done
499                    files=`( cd ../input_ad ; ls -1 | grep -v CVS )`
500                    for i in $files ; do
501                        if test ! -d "../input_ad/"$i ; then
502                            ln -sf "../input_ad/"$i $i
503                        fi
504                    done
505                fi
506          )          )
507      fi      fi
508  }  }
# Line 308  runmodel() Line 511  runmodel()
511  {  {
512      # runmodel directory      # runmodel directory
513      #      #
514      #  runs "$COMMAND" in "directory"      #  runs "$COMMAND in "directory"
515      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
516      (      (
517          cd $1          cd $1
518          printf 'runmodel ... ' 1>&2          printf 'runmodel in %s ...' $1 1>&2
519          # make output.txt          # make output.txt
520          $COMMAND >> run.log 2>&1          echo
521          RETVAL=$?          rm -f run.log
522            if test $OUTPUTFILE -ot $EXECUTABLE ; then
523               ( eval $COMMAND ) > run.log 2>&1
524               RETVAL=$?
525            else
526               echo " $OUTPUTFILE is up to date " > run.log 2>&1
527               RETVAL=0
528            fi
529            # echo "COMMAND='$COMMAND'"
530            # echo "pwd='"`pwd`"'"
531          if test "x$RETVAL" = x0 ; then          if test "x$RETVAL" = x0 ; then
532                tail run.log
533              echo successful 1>&2              echo successful 1>&2
534              cp output.txt $CDIR"/output.txt"              # === Reduce the size of the testing emails!
535                # if test "x$ADM" = x ; then
536                #   cp output.txt $CDIR"/output.txt"
537                # else
538                #   cp output.txt_adm $CDIR"/output.txt_adm"
539                # fi
540                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
541              return 0              return 0
542          else          else
543              tail run.log              tail run.log
544              echo failed 1>&2              echo failed 1>&2
545              cp run.log $CDIR"/run.log"              cp run.log $CDIR"/run.log"
546                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
547              return 1              return 1
548          fi          fi
549      )      )
# Line 333  createcodelet() Line 553  createcodelet()
553  {  {
554      # create codelet for comparing model output      # create codelet for comparing model output
555    
556      echo -n "creating the comparison code...  "      printf "creating the comparison code...  "
557      cat > tmp_cmpnum.c <<EOF      cat > tmp_cmpnum.c <<EOF
558  #include <stdio.h>  #include <stdio.h>
559  #include <math.h>  #include <math.h>
560  int main( int argc, char** argv )  {  int main( int argc, char** argv )  {
561    int linnum,best;    int linnum,best,lncnt;
562    double a,b,diff;    double a,b,abave,relerr;
563    best = -16;    best = -22;
564    while( 1 )  {    lncnt = 0;
565      while( 1 & (lncnt+=1) < 999 )  {
566      scanf("%d", &linnum);      scanf("%d", &linnum);
567      if (linnum == -1)  break;      if (linnum == -1)  break;
568      scanf("%lf", &a);  scanf("%lf", &b);      scanf("%lf", &a);  scanf("%lf", &b);
569      diff = 0.5*(fabs(a)+fabs(b));      abave = 0.5*(fabs(a)+fabs(b));
570      if (diff > 1.e-12) {      if (abave > 0.0) {
571        diff=fabs(a-b)/diff;        relerr=fabs(a-b)/abave;
572        if (diff > 0.0) {        if (relerr > 0.0) { linnum = (int)rint(log10(relerr)); }
573          linnum = (int)log10(diff);        else { linnum = -16 ; }
574          best = (best > linnum) ? best : linnum;        best = (best > linnum) ? best : linnum;
       }  
       else {  
         if (best == -16 && diff != 0)  best = -22;  
       }  
575      }      }
576    }    }
577      if (lncnt == 999) best=-29;
578    printf("%d\n", -best);    printf("%d\n", -best);
579    return 0;    return 0;
580  }  }
581  EOF  EOF
582      cc -o tmp_cmpnum tmp_cmpnum.c -lm      $CC -o tmp_cmpnum tmp_cmpnum.c -lm
583    
584      if [ -x ./tmp_cmpnum ]; then      if [ -x ./tmp_cmpnum ]; then
585          echo "OK"          echo "OK"
586          return 0          return 0
587      else      else
588          echo          echo
589          echo "ERROR: failed to compile comparison code"          echo "ERROR: failed to compile comparison code -- please specify"
590            echo "  a C compiler using the CC environment variable."
591          exit 1          exit 1
592      fi      fi
593  }  }
# Line 437  clean=0 Line 656  clean=0
656  expts=''  expts=''
657  # ieee=1  # ieee=1
658    
659  IEEE=  IEEE=true
660  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
661      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
662  fi  fi
# Line 448  QUICK=f Line 667  QUICK=f
667  NOGENMAKE=f  NOGENMAKE=f
668  NOCLEAN=f  NOCLEAN=f
669  NODEPEND=f  NODEPEND=f
670    POSTCLEAN=f
671    
672  BASH=  BASH=
673  OPTFILE=NONE  OPTFILE=NONE
# Line 456  TESTDIRS= Line 676  TESTDIRS=
676  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
677  HAVE_MPACK=  HAVE_MPACK=
678  MPACK="$MPACKDIR/mpack"  MPACK="$MPACKDIR/mpack"
679  COMMAND="make output.txt"  COMMAND=
680  MAKE=make  if test "x$MAKE" = x ; then
681        MAKE=make
682    fi
683    if test "x$CC" = x ; then
684        CC=cc
685    fi
686    JOBS=
687  MPI=f  MPI=f
688    OUTDIR=
689    DELDIR=
690    
691  echo -n "parsing options...  "  ADM=
692    
693    # Additional monitor types
694    PTRACERS_NUM="1 2 3 4 5"
695    
696    printf "parsing options...  "
697    
698  ac_prev=  ac_prev=
699  for ac_option ; do  for ac_option ; do
# Line 509  for ac_option ; do Line 742  for ac_option ; do
742          -make=* | --make=*)          -make=* | --make=*)
743              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
744    
745            -odir | --odir)
746                ac_prev=OUTDIR ;;
747            -odir=* | --odir=*)
748                OUTDIR=$ac_optarg ;;
749    
750            -ptracers | --ptracers | -ptr | --ptr)
751                ac_prev=PTRACERS_NUM ;;
752            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
753                PTRACERS_NUM=$ac_optarg ;;
754    
755            -j) ac_prev=JOBS ;;
756            -j=*) JOBS=$ac_optarg ;;
757    
758          -clean | --clean)          -clean | --clean)
759              CLEANUP=t ;;              CLEANUP=t ; DELDIR=t ;;
760    
761          -quick | --quick | -q | --q)          -quick | --quick | -q | --q)
762              QUICK=t ;;              QUICK=t ;;
# Line 521  for ac_option ; do Line 767  for ac_option ; do
767          -nodepend | --nodepend | -nd | --nd)          -nodepend | --nodepend | -nd | --nd)
768              NODEPEND=t ;;              NODEPEND=t ;;
769    
770            -postclean | --postclean | -pc | --pc)
771                POSTCLEAN=t ;;
772    
773          -mpi) MPI=t ;;          -mpi) MPI=t ;;
774    
775            -adm | -ad) ADM=t ;;
776    
777          -ieee) IEEE=true ;;          -ieee) IEEE=true ;;
778          -noieee) IEEE= ;;          -noieee) IEEE= ;;
779    
# Line 530  for ac_option ; do Line 781  for ac_option ; do
781          -debug) debug=1 ;;          -debug) debug=1 ;;
782          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
783    
784            -deldir | -dd) DELDIR=t ;;
785    
786          -*)          -*)
787              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
788              usage              usage
# Line 558  if test "x$OPTFILE" = xNONE -a "x$MITGCM Line 811  if test "x$OPTFILE" = xNONE -a "x$MITGCM
811      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
812  fi  fi
813    
814  echo "OK"  if test "x$ADM" = xt ; then
815        EXECUTABLE="mitgcmuv_ad"
816        OUTPUTFILE="output.txt_adm"
817    else
818        EXECUTABLE="mitgcmuv"
819        OUTPUTFILE="output.txt"
820    fi
821    
822    if test "x$ADM" = xt -a "x$COMMAND" = x ; then
823        COMMAND="./$EXECUTABLE > $OUTPUTFILE"
824    fi
825    
826    if test "x$COMMAND" = x ; then
827        COMMAND="./$EXECUTABLE > $OUTPUTFILE"
828    fi
829    
830    #echo "OK"
831    echo "OK (COMMAND= $COMMAND )"
832    
833  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
834  createcodelet  createcodelet
835    
836  #  build the mpack utility  #  build the mpack utility
837  build_mpack  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
838        echo "skipping mpack build"
839    else
840        build_mpack
841    fi
842    
843  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
844  MACH=`hostname`  MACH=`hostname`
845  UNAMEA=`uname -a`  UNAMEA=`uname -a`
846  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
847  BASE=$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
848    if test "x$OUTDIR" != x ; then
849        BASE="tr_"$OUTDIR"_"$DATE"_"
850    fi
851  DNUM=0  DNUM=0
852  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
853  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 584  if test "x$RETVAL" != x0 ; then Line 861  if test "x$RETVAL" != x0 ; then
861      exit 1      exit 1
862  fi  fi
863  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
864  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
865  start_date=`date`  start_date=`date`
866  echo $start_date > $SUMMARY  echo $start_date > $SUMMARY
867    
# Line 615  else Line 892  else
892  fi  fi
893  echo  echo
894  echo >> $SUMMARY  echo >> $SUMMARY
895  cat << EOF | tee -a $SUMMARY  if test "x$ADM" = x ; then
896                  T           S           U           V      line_0="            ----T-----  ----S-----  ----U-----  ----V-----"
897  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"
898  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  ."
899  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"
900  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  ."
901        for ii in $PTRACERS_NUM ; do
902            #  tst=`eval 'echo $HAVE_PTR0'$ii`
903            #  if test "x$tst" = xt ; then
904            line_0="$line_0  --PTR 0"$ii"--"
905            line_1="$line_1        m  s"
906            line_2="$line_2  m  m  e  ."
907            line_3="$line_3  i  a  a  d"
908            line_4="$line_4  n  x  n  ."
909            #  fi
910        done
911        echo "$line_0" | tee -a $SUMMARY
912        echo "$line_1" | tee -a $SUMMARY
913        echo "$line_2" | tee -a $SUMMARY
914        echo "$line_3" | tee -a $SUMMARY
915        echo "$line_4" | tee -a $SUMMARY
916        echo " "       | tee -a $SUMMARY
917    else
918        echo "ADJOINT=true" >> $SUMMARY
919        echo >> $SUMMARY
920        cat << EOF | tee -a $SUMMARY
921    G D M    C  G
922    E p a R  o  r
923    N n k u  s  a
924    2 d e n  t  d
925    
926  EOF  EOF
927    fi
928    
929  #  ...and each test directory...  #  ...and each test directory...
930  for dir in $TESTDIRS ; do  for dir in $TESTDIRS ; do
# Line 635  for dir in $TESTDIRS ; do Line 937  for dir in $TESTDIRS ; do
937          if test -r $dir/input/Makefile ; then          if test -r $dir/input/Makefile ; then
938              ( cd $dir/input ; make CLEAN )              ( cd $dir/input ; make CLEAN )
939          fi          fi
940            (
941                cd $dir
942                rm -rf tr_run.*
943            )
944          continue          continue
945      fi      fi
946    
947      #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
948      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
949      if test ! -r $dir"/results/output.txt" ; then      fout=
950          echo "can't read \"$dir/results/output.txt\" -- skipping $dir"      if test "x$ADM" = x ; then
951            fout=$dir"/results/output.txt"
952        else
953            fout=$dir"/results_ad/output.txt_adm"
954        fi
955        if test ! -r $fout ; then
956            echo "can't read \"$fout\" -- skipping $dir"
957          continue          continue
958      fi      fi
959        if test "x$ADM" = x ; then
960            check_for_add_mon_output  $fout
961        fi
962    
963      echo "-------------------------------------------------------------------------------"      # Check for additional types of monitor output
     echo  
     echo "Experiment:  $dir"  
     echo  
     unset genmake makedepend make run  
     results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'  
964    
965      builddir="input"      builddir="input"
966      rundir="input"      rundir="input"
# Line 662  for dir in $TESTDIRS ; do Line 972  for dir in $TESTDIRS ; do
972          linkdata $use_seperate_build $dir/$rundir          linkdata $use_seperate_build $dir/$rundir
973      fi      fi
974            
975      CODE_DIR=$dir/code      #  Check whether there are "extra runs" for this testdir
976      BUILD_DIR=$dir/$builddir      extra_runs=
977      MPI_FILES="CPP_EEOPTIONS.h_mpi SIZE.h_mpi"      if test "x$ADM" = x -a "x$use_seperate_build" = x1 ; then
978      NOMPI_FILES="CPP_EEOPTIONS.h_nompi SIZE.h_nompi"          ex_run_dirs=`( cd $dir ; echo input.* )`
979            echo "ex_run_dirs='$ex_run_dirs'"
980            for exd in $ex_run_dirs ; do
981                name=`echo $exd | sed -e 's/input.//g'`
982                outf="$dir/results/output.txt.$name"
983                if test -f $outf -a -r $outf ; then
984                    extra_runs="$extra_runs $name"
985                fi
986            done
987        fi
988    
989      #  Is this an MPI run?      if test "x$ADM" = x ; then
990      if test "x$MPI" = xt ; then          code_dir=code
991          FILES=$MPI_FILES          CODE_DIR=$dir/code
         endings="_mpi"  
992      else      else
993          FILES=$NOMPI_FILES          code_dir=code_ad
994          endings="_nompi"          CODE_DIR=$dir/code_ad
995      fi      fi
996            BUILD_DIR=$dir/$builddir
997      #  Check to see that we have the files  
998      have_files=t      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
999      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)"  
1000          continue          continue
1001      fi      fi
1002        
1003      #  If we have the $FILES and they differ, copy the $FILES to $BUILD_DIR      echo "-------------------------------------------------------------------------------"
1004      if test "x$have_files" = xt ; then      echo
1005          for i in $FILES ; do      echo "Experiment:  $dir"
1006              sstr="s|$endings||"      echo
1007              name=`echo $i | sed -e $sstr `      unset genmake makedepend make run
1008              cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1009              RETVAL=$?  
             if test "x$RETVAL" != x0 ; then  
                 cp $CODE_DIR/$i $BUILD_DIR/$name  
             fi  
         done  
     fi  
       
1010      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1011      rel_CDIR=$DRESULTS"/"$dir      rel_CDIR=$DRESULTS"/"$dir
1012      mkdir $rel_CDIR      mkdir $rel_CDIR
# Line 712  for dir in $TESTDIRS ; do Line 1017  for dir in $TESTDIRS ; do
1017      else      else
1018          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1019              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1020                && symlink_mpifiles $dir $code_dir $builddir \
1021              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1022              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1023              && linkdata $use_seperate_build $dir/$rundir \              && linkdata $use_seperate_build $dir/$rundir \
# Line 720  for dir in $TESTDIRS ; do Line 1026  for dir in $TESTDIRS ; do
1026      fi      fi
1027            
1028      echo      echo
1029      fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`      if test "x$ADM" = x ; then
1030      echo          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1031      echo "$fres" >> $SUMMARY          echo
1032      echo "fresults='$fres'" > $CDIR"/summary.txt"          echo "$fres" >> $SUMMARY
1033      echo "MACH='$MACH'" >> $CDIR"/summary.txt"          echo "fresults='$fres'" > $CDIR"/summary.txt"
1034      echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"          echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1035      echo "DATE='$DATE'" >> $CDIR"/summary.txt"          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1036      echo "tdir='$dir'" >> $CDIR"/summary.txt"          echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1037            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1038    
1039            for ex in $extra_runs ; do
1040                unset run
1041                results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1042                #  Create an output dir for each OPTFILE/tdir.ex combination
1043                rel_CDIR=$DRESULTS"/"$dir"."$ex
1044                mkdir $rel_CDIR
1045                CDIR=`pwd`"/$rel_CDIR"
1046                test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1047                for ldir in input.$ex input ; do
1048                    (
1049                        cd "$dir/$ldir" > /dev/null 2>&1
1050                        ls -1 2>/dev/null \
1051                            | sed -e 's|^CVS$||g' | sed -e 's|^output.txt$||g'
1052                    ) > tr_exrun_links
1053                    (
1054                        cd "$dir/tr_run.$ex"
1055                        cat ../../tr_exrun_links | while read i ; do
1056                            if test ! "x$i" = x ; then
1057                                test ! -r $i  &&  ln -s "../"$ldir"/"$i $i
1058                            fi
1059                        done
1060                    )
1061                    test -e tr_exrun_links  &&  rm -f tr_exrun_links
1062                done
1063                ldir=build
1064                (
1065                    cd $dir/tr_run.$ex
1066                    test ! -e mitgcmuv  &&  ln -s "../"$ldir"/"mitgcmuv .
1067                )
1068                runmodel $dir/tr_run.$ex && run=Y \
1069                    && results=`testoutput $dir tr_run.$ex "."$ex`
1070                fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1071                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1072                fres="$fres.$ex"
1073                echo
1074                echo "$fres" >> $SUMMARY
1075                echo "fresults='$fres'" > $CDIR"/summary.txt"
1076                echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1077                echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1078                echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1079                echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1080            done
1081        else
1082            fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1083            fres=$fres"$results   $dir"
1084            echo
1085            echo "$fres" >> $SUMMARY
1086            echo "fresults='$fres'" > $CDIR"/summary.txt"
1087            echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1088            echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1089            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1090            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1091            grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1092                               >> $CDIR"/summary.txt"
1093        fi
1094    
1095        postclean $dir/$builddir
1096            
1097      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1098            
1099  done  done
1100    
1101  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1102  echo $start_date >> $SUMMARY  echo $start_date >> $SUMMARY
1103  echo -n "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
1104  date >> $SUMMARY  date >> $SUMMARY
1105    
1106  #  If addresses were supplied and mpack built successfully, then try  #  If addresses were supplied and mpack built successfully, then try
# Line 746  else Line 1111  else
1111      if test "x$HAVE_MPACK" = xt ; then      if test "x$HAVE_MPACK" = xt ; then
1112          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1113              && gzip $DRESULTS".tar" \              && gzip $DRESULTS".tar" \
1114              && $MPACK -s MITgcm-test -m 1500000 $DRESULTS".tar.gz" $ADDRESSES              && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1115          RETVAL=$?          RETVAL=$?
1116          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1117              echo              echo
# Line 769  fi Line 1134  fi
1134  rm -f tmp_cmpnum.c tmp_cmpnum  rm -f tmp_cmpnum.c tmp_cmpnum
1135    
1136  if test "x$CLEANUP" != xt ; then  if test "x$CLEANUP" != xt ; then
1137      cat $SUMMARY      cat $SUMMARY | sed 's/ -- -- -- --//g'
1138      if test -e tr.out ; then      if test -e tr_out.txt ; then
1139          mv tr.out tr.out.old          mv tr_out.txt tr_out.txt.old
1140      fi      fi
1141      cat $SUMMARY > tr.out      cat $SUMMARY | sed 's/ -- -- -- --//g' > tr_out.txt
1142    fi
1143    
1144    if test "x$DELDIR" = xt ; then
1145        rm -rf $DRESULTS
1146  fi  fi
1147    

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

  ViewVC Help
Powered by ViewVC 1.1.22