/[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.30 by edhill, Fri Dec 5 17:46:32 2003 UTC revision 1.82 by jmc, Sun Jun 18 21:20:51 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 27  usage() Line 27  usage()
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 54  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          if test "x$CC" = x ; then          if test "x$CC" = x ; then
69              export CC=cc              export CC=cc
70          fi          fi
# Line 77  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 87  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 99  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 155  dashnum() Line 181  dashnum()
181    
182  testoutput_ad()  testoutput_ad()
183  {  {
184      grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $5}' > t05.txt      grep $3 $1/results_ad/output_adm.txt | awk '{print NR " " $5}' > t05.txt
185      grep $3 $1/$2/output.txt_adm | awk '{print NR " " $5}' > t15.txt      grep $3 $1/$2/output_adm.txt | awk '{print NR " " $5}' > t15.txt
186      grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $6}' > t06.txt      grep $3 $1/results_ad/output_adm.txt | awk '{print NR " " $6}' > t06.txt
187      grep $3 $1/$2/output.txt_adm | awk '{print NR " " $6}' > t16.txt      grep $3 $1/$2/output_adm.txt | awk '{print NR " " $6}' > t16.txt
188      join t05.txt t15.txt > t5.txt      join t05.txt t15.txt > t5.txt
189      join t06.txt t16.txt > t6.txt      join t06.txt t16.txt > t6.txt
190      echo "-1" >> t5.txt      echo "-1" >> t5.txt
# Line 169  testoutput_ad() Line 195  testoutput_ad()
195      rm -f t[01][56].txt t[56].txt      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 directory subdir      # testoutput directory subdir extension
226      #      #
227      #  test output in "directory"      #  test output in "directory"
228      if test "x$ADM" = x ; then      if test "x$ADM" = x ; then
229          if [ $debug -gt 0 ]; then          if [ $debug -gt 0 ]; then
230              echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2              echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2
231          fi          fi
232          testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2; cg2dres=$?          testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2 $3; cg2dres=$?
233          if [ $debug -gt 0 ]; then          if [ $debug -gt 0 ]; then
234              echo testoutput: cg2dres=$cg2dres 1>&2              echo testoutput: cg2dres=$cg2dres 1>&2
235          fi          fi
236          testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2; tmin=$?          testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2 $3; tmin=$?
237          testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2; tmax=$?          testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2 $3; tmax=$?
238          testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2; tmean=$?          testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2 $3; tmean=$?
239          testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2; tsd=$?          testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2 $3; tsd=$?
240          testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2; smin=$?          testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2 $3; smin=$?
241          testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2; smax=$?          testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2 $3; smax=$?
242          testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2; smean=$?          testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2 $3; smean=$?
243          testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2; ssd=$?          testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2 $3; ssd=$?
244          testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2; umin=$?          testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2 $3; umin=$?
245          testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2; umax=$?          testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2 $3; umax=$?
246          testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2; umean=$?          testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2 $3; umean=$?
247          testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2; usd=$?          testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2 $3; usd=$?
248          testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2; vmin=$?          testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2 $3; vmin=$?
249          testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2; vmax=$?          testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2 $3; vmax=$?
250          testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2; vmean=$?          testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2 $3; vmean=$?
251          testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2; vsd=$?          testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2 $3; vsd=$?
252          dashnum $cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd \  
253              $umin $umax $umean $usd $vmin $vmax $vmean $vsd          #  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            allargs="$cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd"
275            allargs="$allargs $umin $umax $umean $usd $vmin $vmax $vmean $vsd"
276            allargs="$allargs $p01_min $p01_max $p01_mean $p01_sd"
277            allargs="$allargs $p02_min $p02_max $p02_mean $p02_sd"
278            allargs="$allargs $p03_min $p03_max $p03_mean $p03_sd"
279            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      else
285          testoutput_ad $1 $2 "precision_grdchk_result"          testoutput_ad $1 $2 "precision_grdchk_result"
286      fi      fi
# Line 211  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"              command="$GENMAKE2  -ds -m $MAKE"
# Line 219  genmakemodel() Line 304  genmakemodel()
304                  command="$command --mods=../code"                  command="$command --mods=../code"
305              else              else
306                  command="$command --mods=../code_ad"                  command="$command --mods=../code_ad"
                 command="$command -adof=../../../tools/adjoint_options/adjoint_staf"  
307              fi              fi
308              if test "x$OPTFILE" != xNONE ; then              if test "x$OPTFILE" != xNONE ; then
309                  command="$command --optfile=$OPTFILE"                  command="$command --optfile=$OPTFILE"
# Line 227  genmakemodel() Line 311  genmakemodel()
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 271  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 302  makemodel() Line 404  makemodel()
404          if test -r Makefile ; then          if test -r Makefile ; then
405              printf 'make ... ' 1>&2              printf 'make ... ' 1>&2
406              if test "x$ADM" = x ; then              if test "x$ADM" = x ; then
407                  $MAKE >> make.log 2>&1                  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              else
413                  $MAKE adall >> make.log 2>&1                  $MAKE adall >> make.log 2>&1
414              fi              fi
# Line 329  symlink_mpifiles() Line 435  symlink_mpifiles()
435      code_dir=$2      code_dir=$2
436      BUILD_DIR=$dir/$3      BUILD_DIR=$dir/$3
437      CODE_DIR=$dir/$code_dir      CODE_DIR=$dir/$code_dir
438        
439      # These are files that should replace their counter-part when using -mpi      # These are files that should replace their counter-part when using -mpi
440      MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`      MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`
441    
# Line 344  symlink_mpifiles() Line 450  symlink_mpifiles()
450              RETVAL=$?              RETVAL=$?
451              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
452                  if ! test -f $BUILD_DIR/$i ; then                  if ! test -f $BUILD_DIR/$i ; then
453                  #echo Linking $name to $i                      #echo Linking $name to $i
454                      (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)                      (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
455                  fi                  fi
456              fi              fi
457          done          done
458      else      else
459      # NO: We undo any _mpi symbolically linked files          # NO: We undo any _mpi symbolically linked files
460          for ii in $MPI_FILES ; do          for ii in $MPI_FILES ; do
461              i=`echo $ii | sed 's:^\./::'`              i=`echo $ii | sed 's:^\./::'`
462              name=`echo $i | sed 's:_mpi::' `              name=`echo $i | sed 's:_mpi::' `
463              if test -L $BUILD_DIR/$name ; then              if test -L $BUILD_DIR/$name ; then
464                  linktarg=`(cd $BUILD_DIR; readlink $name)`                  cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
465                  if test $linktarg = "../$code_dir/$name"_mpi ; then                  RETVAL=$?
466                  #echo Un-linking $name from $linktarg                  if test "x$RETVAL" = x0 ; then
467                        #echo Un-linking $name from $linktarg
468                      rm -f $BUILD_DIR/$name                      rm -f $BUILD_DIR/$name
469                  fi                  fi
470              fi              fi
# Line 377  linkdata() Line 484  linkdata()
484              if test "x$ADM" = x ; then              if test "x$ADM" = x ; then
485                  files=`( cd ../input ; ls -1 | grep -v CVS )`                  files=`( cd ../input ; ls -1 | grep -v CVS )`
486                  for i in $files ; do                  for i in $files ; do
487                      if test ! -d "../input/"$i ; then                      if test ! -d "../input/"$i -a ! -f $i ; then
488                          ln -sf "../input/"$i $i                          ln -sf "../input/"$i $i
489                      fi                      fi
490                  done                  done
491              else              else
                 files=`( cd ../input ; ls -1 *.bin | grep -v CVS )`  
                 for i in $files ; do  
                     if test ! -d "../input/"$i ; then  
                         ln -sf "../input/"$i $i  
                     fi  
                 done  
492                  files=`( cd ../input_ad ; ls -1 | grep -v CVS )`                  files=`( cd ../input_ad ; ls -1 | grep -v CVS )`
493                  for i in $files ; do                  for i in $files ; do
494                      if test ! -d "../input_ad/"$i ; then                      if test ! -d "../input_ad/"$i ; then
495                          ln -sf "../input_ad/"$i $i                          ln -sf "../input_ad/"$i $i
496                      fi                      fi
497                  done                  done
498                    if test -d "../input" ; then
499                      files=`( cd ../input ; ls -1 | grep -v CVS )`
500                      for i in $files ; do
501                        if test ! -d "../input/"$i ; then
502                         if test ! -r $i  ; then
503                            ln -sf "../input/"$i $i
504                         fi
505                        fi
506                      done
507                    fi
508              fi              fi
509          )          )
510      fi      fi
# Line 407  runmodel() Line 518  runmodel()
518      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
519      (      (
520          cd $1          cd $1
521          printf 'runmodel ... ' 1>&2          printf 'runmodel in %s ...' $1 1>&2
522          # make output.txt          # make output.txt
523          $COMMAND >> run.log 2>&1          echo
524          RETVAL=$?          rm -f run.log
525            if test $OUTPUTFILE -ot $EXECUTABLE ; then
526               ( eval $COMMAND ) > run.log 2>&1
527               RETVAL=$?
528            else
529               echo " $OUTPUTFILE is up to date " > run.log 2>&1
530               RETVAL=0
531            fi
532            # echo "COMMAND='$COMMAND'"
533            # echo "pwd='"`pwd`"'"
534          if test "x$RETVAL" = x0 ; then          if test "x$RETVAL" = x0 ; then
535                tail run.log
536              echo successful 1>&2              echo successful 1>&2
537              if test "x$ADM" = x ; then              # === Reduce the size of the testing emails!
538                  cp output.txt $CDIR"/output.txt"              # if test "x$ADM" = x ; then
539              else              #   cp output.txt $CDIR"/output.txt"
540                  cp output.txt_adm $CDIR"/output.txt_adm"              # else
541              fi              #   cp output_adm.txt $CDIR"/output_adm.txt"
542                # fi
543                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
544              return 0              return 0
545          else          else
546              tail run.log              tail run.log
547              echo failed 1>&2              echo failed 1>&2
548              cp run.log $CDIR"/run.log"              cp run.log $CDIR"/run.log"
549                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
550              return 1              return 1
551          fi          fi
552      )      )
# Line 432  createcodelet() Line 556  createcodelet()
556  {  {
557      # create codelet for comparing model output      # create codelet for comparing model output
558    
559      echo -n "creating the comparison code...  "      printf "creating the comparison code...  "
560      cat > tmp_cmpnum.c <<EOF      cat > tmp_cmpnum.c <<EOF
561  #include <stdio.h>  #include <stdio.h>
562  #include <math.h>  #include <math.h>
563  int main( int argc, char** argv )  {  int main( int argc, char** argv )  {
564    int linnum,best;    int linnum,best,lncnt;
565    double a,b,diff;    double a,b,abave,relerr;
566    best = -16;    best = -22;
567    while( 1 )  {    lncnt = 0;
568      while( 1 & (lncnt+=1) < 999 )  {
569      scanf("%d", &linnum);      scanf("%d", &linnum);
570      if (linnum == -1)  break;      if (linnum == -1)  break;
571      scanf("%lf", &a);  scanf("%lf", &b);      scanf("%lf", &a);  scanf("%lf", &b);
572      diff = 0.5*(fabs(a)+fabs(b));      abave = 0.5*(fabs(a)+fabs(b));
573      if (diff > 1.e-12) {      if (abave > 0.0) {
574        diff=fabs(a-b)/diff;        relerr=fabs(a-b)/abave;
575        if (diff > 0.0) {        if (relerr > 0.0) { linnum = (int)rint(log10(relerr)); }
576          linnum = (int)log10(diff);        else { linnum = -16 ; }
577          best = (best > linnum) ? best : linnum;        best = (best > linnum) ? best : linnum;
       }  
       else {  
         if (best == -16 && diff != 0)  best = -22;  
       }  
578      }      }
579    }    }
580      if (lncnt == 999) best=-29;
581    printf("%d\n", -best);    printf("%d\n", -best);
582    return 0;    return 0;
583  }  }
584  EOF  EOF
585      cc -o tmp_cmpnum tmp_cmpnum.c -lm      $CC -o tmp_cmpnum tmp_cmpnum.c -lm
586    
587      if [ -x ./tmp_cmpnum ]; then      if [ -x ./tmp_cmpnum ]; then
588          echo "OK"          echo "OK"
589          return 0          return 0
590      else      else
591          echo          echo
592          echo "ERROR: failed to compile comparison code"          echo "ERROR: failed to compile comparison code -- please specify"
593            echo "  a C compiler using the CC environment variable."
594          exit 1          exit 1
595      fi      fi
596  }  }
# Line 516  EOF Line 639  EOF
639    
640  scandirs()  scandirs()
641  {  {
642      if [ $# -eq 0 ]; then      if [ $# -eq 1 ]; then
643          for arg in * ; do          for arg in * ; do
644              test -d $arg/input && echo $arg              test -d $arg/$1 && echo $arg
645          done          done
646      else      else
647          echo $*          echo $*
648      fi      fi
649  }  }
650    
# Line 536  clean=0 Line 659  clean=0
659  expts=''  expts=''
660  # ieee=1  # ieee=1
661    
662  IEEE=  IEEE=true
663  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
664      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
665  fi  fi
# Line 547  QUICK=f Line 670  QUICK=f
670  NOGENMAKE=f  NOGENMAKE=f
671  NOCLEAN=f  NOCLEAN=f
672  NODEPEND=f  NODEPEND=f
673    POSTCLEAN=f
674    
675  BASH=  BASH=
676  OPTFILE=NONE  OPTFILE=NONE
# Line 556  MPACKDIR="../tools/mpack-1.6" Line 680  MPACKDIR="../tools/mpack-1.6"
680  HAVE_MPACK=  HAVE_MPACK=
681  MPACK="$MPACKDIR/mpack"  MPACK="$MPACKDIR/mpack"
682  COMMAND=  COMMAND=
683  MAKE=make  if test "x$MAKE" = x ; then
684        MAKE=make
685    fi
686    if test "x$CC" = x ; then
687        CC=cc
688    fi
689    JOBS=
690  MPI=f  MPI=f
691    OUTDIR=
692    DELDIR=
693    
694  ADM=  ADM=
695    
696  echo -n "parsing options...  "  # Additional monitor types
697    PTRACERS_NUM="1 2 3 4 5"
698    
699    printf "parsing options...  "
700    
701  ac_prev=  ac_prev=
702  for ac_option ; do  for ac_option ; do
# Line 610  for ac_option ; do Line 745  for ac_option ; do
745          -make=* | --make=*)          -make=* | --make=*)
746              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
747    
748            -odir | --odir)
749                ac_prev=OUTDIR ;;
750            -odir=* | --odir=*)
751                OUTDIR=$ac_optarg ;;
752    
753            -ptracers | --ptracers | -ptr | --ptr)
754                ac_prev=PTRACERS_NUM ;;
755            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
756                PTRACERS_NUM=$ac_optarg ;;
757    
758            -j) ac_prev=JOBS ;;
759            -j=*) JOBS=$ac_optarg ;;
760    
761          -clean | --clean)          -clean | --clean)
762              CLEANUP=t ;;              CLEANUP=t ; DELDIR=t ;;
763    
764          -quick | --quick | -q | --q)          -quick | --quick | -q | --q)
765              QUICK=t ;;              QUICK=t ;;
# Line 622  for ac_option ; do Line 770  for ac_option ; do
770          -nodepend | --nodepend | -nd | --nd)          -nodepend | --nodepend | -nd | --nd)
771              NODEPEND=t ;;              NODEPEND=t ;;
772    
773            -postclean | --postclean | -pc | --pc)
774                POSTCLEAN=t ;;
775    
776          -mpi) MPI=t ;;          -mpi) MPI=t ;;
777    
778          -adm | -ad) ADM=t ;;          -adm | -ad) ADM=t ;;
# Line 633  for ac_option ; do Line 784  for ac_option ; do
784          -debug) debug=1 ;;          -debug) debug=1 ;;
785          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
786    
787            -deldir | -dd) DELDIR=t ;;
788    
789          -*)          -*)
790              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
791              usage              usage
# Line 654  if test "x$QUICK" = xt ; then Line 807  if test "x$QUICK" = xt ; then
807  fi  fi
808    
809  if test "x$TESTDIRS" = x ; then  if test "x$TESTDIRS" = x ; then
810      TESTDIRS=`scandirs`      if test "x$ADM" = xt ; then
811            TESTDIRS=`scandirs results_ad`
812        else
813            TESTDIRS=`scandirs results`
814        fi
815  fi  fi
816    
817  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
818      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
819  fi  fi
820    
821    if test "x$ADM" = xt ; then
822        EXECUTABLE="mitgcmuv_ad"
823        OUTPUTFILE="output_adm.txt"
824    else
825        EXECUTABLE="mitgcmuv"
826        OUTPUTFILE="output.txt"
827    fi
828    
829  if test "x$ADM" = xt -a "x$COMMAND" = x ; then  if test "x$ADM" = xt -a "x$COMMAND" = x ; then
830      COMMAND="./mitgcmuv_ad > output.txt_adm 2>&1"      COMMAND="./$EXECUTABLE > $OUTPUTFILE"
831  fi  fi
832    
833  if test "x$COMMAND" = x ; then  if test "x$COMMAND" = x ; then
834      COMMAND="make output.txt"      COMMAND="./$EXECUTABLE > $OUTPUTFILE"
835  fi  fi
836    
837  echo "OK"  #echo "OK"
838    echo "OK (COMMAND= $COMMAND )"
839    
840  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
841  createcodelet  createcodelet
842    
843  #  build the mpack utility  #  build the mpack utility
844  build_mpack  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
845        echo "skipping mpack build"
846    else
847        build_mpack
848    fi
849    
850  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
851  MACH=`hostname`  MACH=`hostname`
852  UNAMEA=`uname -a`  UNAMEA=`uname -a`
853  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
854  BASE="tr_"$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
855    if test "x$OUTDIR" != x ; then
856        BASE="tr_"$OUTDIR"_"$DATE"_"
857    fi
858  DNUM=0  DNUM=0
859  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
860  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 695  if test "x$RETVAL" != x0 ; then Line 868  if test "x$RETVAL" != x0 ; then
868      exit 1      exit 1
869  fi  fi
870  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
871  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
872  start_date=`date`  start_date=`date`
873  echo $start_date > $SUMMARY  echo $start_date > $SUMMARY
874    
# Line 727  fi Line 900  fi
900  echo  echo
901  echo >> $SUMMARY  echo >> $SUMMARY
902  if test "x$ADM" = x ; then  if test "x$ADM" = x ; then
903      cat << EOF | tee -a $SUMMARY      line_0="            ----T-----  ----S-----  ----U-----  ----V-----"
904                  T           S           U           V      line_1="G D M    c        m  s        m  s        m  s        m  s"
905  G D M    c        m  s        m  s        m  s        m  s      line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
906  E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .      line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
907  N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d      line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
908  2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .      for ii in $PTRACERS_NUM ; do
909            #  tst=`eval 'echo $HAVE_PTR0'$ii`
910  EOF          #  if test "x$tst" = xt ; then
911            line_0="$line_0  --PTR 0"$ii"--"
912            line_1="$line_1        m  s"
913            line_2="$line_2  m  m  e  ."
914            line_3="$line_3  i  a  a  d"
915            line_4="$line_4  n  x  n  ."
916            #  fi
917        done
918        echo "$line_0" | tee -a $SUMMARY
919        echo "$line_1" | tee -a $SUMMARY
920        echo "$line_2" | tee -a $SUMMARY
921        echo "$line_3" | tee -a $SUMMARY
922        echo "$line_4" | tee -a $SUMMARY
923        echo " "       | tee -a $SUMMARY
924  else  else
925      echo "ADJOINT=true" >> $SUMMARY      echo "ADJOINT=true" >> $SUMMARY
926      echo >> $SUMMARY      echo >> $SUMMARY
# Line 758  for dir in $TESTDIRS ; do Line 944  for dir in $TESTDIRS ; do
944          if test -r $dir/input/Makefile ; then          if test -r $dir/input/Makefile ; then
945              ( cd $dir/input ; make CLEAN )              ( cd $dir/input ; make CLEAN )
946          fi          fi
947            (
948                cd $dir
949                rm -rf tr_run.*
950            )
951          continue          continue
952      fi      fi
953    
# Line 767  for dir in $TESTDIRS ; do Line 957  for dir in $TESTDIRS ; do
957      if test "x$ADM" = x ; then      if test "x$ADM" = x ; then
958          fout=$dir"/results/output.txt"          fout=$dir"/results/output.txt"
959      else      else
960          fout=$dir"/results_ad/output.txt_adm"          fout=$dir"/results_ad/output_adm.txt"
961      fi      fi
962      if test ! -r $fout ; then      if test ! -r $fout ; then
963          echo "can't read \"$fout\" -- skipping $dir"          echo "can't read \"$fout\" -- skipping $dir"
964          continue          continue
965      fi      fi
966        if test "x$ADM" = x ; then
967            check_for_add_mon_output  $fout
968        fi
969    
970        # Check for additional types of monitor output
971    
972      builddir="input"      builddir="input"
973      rundir="input"      rundir="input"
# Line 784  for dir in $TESTDIRS ; do Line 979  for dir in $TESTDIRS ; do
979          linkdata $use_seperate_build $dir/$rundir          linkdata $use_seperate_build $dir/$rundir
980      fi      fi
981            
982        #  Check whether there are "extra runs" for this testdir
983        extra_runs=
984        if test "x$ADM" = x -a "x$use_seperate_build" = x1 ; then
985            ex_run_dirs=`( cd $dir ; echo input.* )`
986            echo "ex_run_dirs='$ex_run_dirs'"
987            for exd in $ex_run_dirs ; do
988                name=`echo $exd | sed -e 's/input.//g'`
989                outf="$dir/results/output.txt.$name"
990                if test -f $outf -a -r $outf ; then
991                    extra_runs="$extra_runs $name"
992                fi
993            done
994        fi
995    
996      if test "x$ADM" = x ; then      if test "x$ADM" = x ; then
997          code_dir=code          code_dir=code
998          CODE_DIR=$dir/code          CODE_DIR=$dir/code
# Line 803  for dir in $TESTDIRS ; do Line 1012  for dir in $TESTDIRS ; do
1012      echo "Experiment:  $dir"      echo "Experiment:  $dir"
1013      echo      echo
1014      unset genmake makedepend make run      unset genmake makedepend make run
1015      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1016    
1017      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1018      rel_CDIR=$DRESULTS"/"$dir      rel_CDIR=$DRESULTS"/"$dir
# Line 826  for dir in $TESTDIRS ; do Line 1035  for dir in $TESTDIRS ; do
1035      echo      echo
1036      if test "x$ADM" = x ; then      if test "x$ADM" = x ; then
1037          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1038            echo
1039            echo "$fres" >> $SUMMARY
1040            echo "fresults='$fres'" > $CDIR"/summary.txt"
1041            echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1042            echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1043            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1044            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1045    
1046            for ex in $extra_runs ; do
1047                unset run
1048                results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1049                #  Create an output dir for each OPTFILE/tdir.ex combination
1050                rel_CDIR=$DRESULTS"/"$dir"."$ex
1051                mkdir $rel_CDIR
1052                CDIR=`pwd`"/$rel_CDIR"
1053                test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1054                for ldir in input.$ex input ; do
1055                    (
1056                        cd "$dir/$ldir" > /dev/null 2>&1
1057                        ls -1 2>/dev/null \
1058                            | sed -e 's|^CVS$||g' | sed -e 's|^output.txt$||g'
1059                    ) > tr_exrun_links
1060                    (
1061                        cd "$dir/tr_run.$ex"
1062                        cat ../../tr_exrun_links | while read i ; do
1063                            if test ! "x$i" = x ; then
1064                                test ! -r $i  &&  ln -s "../"$ldir"/"$i $i
1065                            fi
1066                        done
1067                    )
1068                    test -e tr_exrun_links  &&  rm -f tr_exrun_links
1069                done
1070                ldir=build
1071                (
1072                    cd $dir/tr_run.$ex
1073                    test ! -e mitgcmuv  &&  ln -s "../"$ldir"/"mitgcmuv .
1074                )
1075                runmodel $dir/tr_run.$ex && run=Y \
1076                    && results=`testoutput $dir tr_run.$ex "."$ex`
1077                fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1078                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1079                fres="$fres.$ex"
1080                echo
1081                echo "$fres" >> $SUMMARY
1082                echo "fresults='$fres'" > $CDIR"/summary.txt"
1083                echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1084                echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1085                echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1086                echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1087            done
1088      else      else
1089          fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`          fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1090          fres=$fres"$results   $dir"          fres=$fres"$results   $dir"
1091            echo
1092            echo "$fres" >> $SUMMARY
1093            echo "fresults='$fres'" > $CDIR"/summary.txt"
1094            echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1095            echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1096            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1097            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1098            grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1099                               >> $CDIR"/summary.txt"
1100      fi      fi
1101      echo  
1102      echo "$fres" >> $SUMMARY      postclean $dir/$builddir
     echo "fresults='$fres'" > $CDIR"/summary.txt"  
     echo "MACH='$MACH'" >> $CDIR"/summary.txt"  
     echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"  
     echo "DATE='$DATE'" >> $CDIR"/summary.txt"  
     echo "tdir='$dir'" >> $CDIR"/summary.txt"  
1103            
1104      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1105            
1106  done  done
1107    
1108  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1109  echo $start_date >> $SUMMARY  echo $start_date >> $SUMMARY
1110  echo -n "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
1111  date >> $SUMMARY  date >> $SUMMARY
1112    
1113  #  If addresses were supplied and mpack built successfully, then try  #  If addresses were supplied and mpack built successfully, then try
# Line 855  else Line 1118  else
1118      if test "x$HAVE_MPACK" = xt ; then      if test "x$HAVE_MPACK" = xt ; then
1119          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1120              && gzip $DRESULTS".tar" \              && gzip $DRESULTS".tar" \
1121              && $MPACK -s MITgcm-test -m 1500000 $DRESULTS".tar.gz" $ADDRESSES              && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1122          RETVAL=$?          RETVAL=$?
1123          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1124              echo              echo
# Line 878  fi Line 1141  fi
1141  rm -f tmp_cmpnum.c tmp_cmpnum  rm -f tmp_cmpnum.c tmp_cmpnum
1142    
1143  if test "x$CLEANUP" != xt ; then  if test "x$CLEANUP" != xt ; then
1144      cat $SUMMARY      cat $SUMMARY | sed 's/ -- -- -- --//g'
1145      if test -e tr_out.txt ; then      if test -e tr_out.txt ; then
1146          mv tr_out.txt tr_out.txt.old          mv tr_out.txt tr_out.txt.old
1147      fi      fi
1148      cat $SUMMARY > tr_out.txt      cat $SUMMARY | sed 's/ -- -- -- --//g' > tr_out.txt
1149    fi
1150    
1151    if test "x$DELDIR" = xt ; then
1152        rm -rf $DRESULTS
1153  fi  fi
1154    

Legend:
Removed from v.1.30  
changed lines
  Added in v.1.82

  ViewVC Help
Powered by ViewVC 1.1.22