/[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.22 by edhill, Sat Nov 29 00:58:43 2003 UTC revision 1.52 by edhill, Wed Dec 1 16:59:42 2004 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 "  (-ptracers|-ptr) STRING  specify which ptracers to test"
31        echo "                             (DEF=\"1 2 3 4 5\")"
32        echo "  (-j) JOBS                use \"make -j JOBS\" for parallel builds"
33      echo "  (-clean)                 *ONLY* run \"make CLEAN\""      echo "  (-clean)                 *ONLY* run \"make CLEAN\""
34      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""
35      echo "  (-nogenmake|-ng)         skip the genmake stage"      echo "  (-nogenmake|-ng)         skip the genmake stage"
36      echo "  (-noclean|-nc)           skip the \"make clean\" stage"      echo "  (-noclean|-nc)           skip the \"make clean\" stage"
37      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"
38        echo "  (-deldir|-dd)            on success, delete the output directory"
39      echo      echo
40      echo "and where STRING follows a whitespace-delimited format"      echo "and where STRING can be a whitespace-delimited list"
41      echo "such as:"      echo "such as:"
42        echo
43      echo "  -t 'exp0 exp2 exp3' "      echo "  -t 'exp0 exp2 exp3' "
44      echo "  -addr='abc@123.com testing@home.org'"      echo "  -addr='abc@123.com testing@home.org'"
45      echo      echo
46        echo "provided that the expression is properly quoted within the current"
47        echo "shell (note the use of single quotes to protect white space)."
48        echo
49      exit 1      exit 1
50  }  }
51    
52  #  build the mpack utility  #  build the mpack utility
53  build_mpack()  build_mpack()
54  {  {
55      echo -n "building the mpack utility...  "      printf "building the mpack utility...  "
56      if test ! -x "$MPACKDIR/mpack" ; then      if test ! -x "$MPACKDIR/mpack" ; then
57          if test ! -d $MPACKDIR ; then          if test ! -d $MPACKDIR ; then
58              echo              echo
# Line 53  build_mpack() Line 62  build_mpack()
62              echo              echo
63              HAVE_MPACK=f              HAVE_MPACK=f
64          fi          fi
65          echo -n "building mpack...  "          printf "building mpack...  "
66          ( cd $MPACKDIR && ./configure && $MAKE ) > build_mpack.out 2>&1          if test "x$CC" = x ; then
67                export CC=cc
68            fi
69            ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1
70          RETVAL=$?          RETVAL=$?
71          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
72              echo              echo
# Line 62  build_mpack() Line 74  build_mpack()
74              echo              echo
75              HAVE_MPACK=f              HAVE_MPACK=f
76          else          else
77                rm -f tr_build_mpack.out
78              HAVE_MPACK=t              HAVE_MPACK=t
79          fi          fi
80      else      else
# Line 70  build_mpack() Line 83  build_mpack()
83      echo "OK"      echo "OK"
84  }  }
85    
 compare_lines()  
 {  
     # use codelet to compare lines  
     if [ $verbose -gt 1 ]; then  
         cat tmp3.txt 1>&2  
     fi  
     return `./a.out < tmp3.txt`  
 }  
   
86  testoutput_for_prop()  testoutput_for_prop()
87  {  {
88      # testoutput_for_prop dir s1 label subdir      # testoutput_for_prop dir s1 label subdir extension
89      #      #
90      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt
91      #  using search strings s1 and text label      #  using search strings s1 and text label
# Line 103  testoutput_for_prop() Line 107  testoutput_for_prop()
107          return 99          return 99
108      fi      fi
109      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
110          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
111      fi      fi
112      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
113      lncnt=`wc -l tmp2.txt | awk '{print $1}' `      lncnt=`wc -l tmp2.txt | awk '{print $1}' `
114      if [ $lncnt -lt 3 ]; then      if [ $lncnt -lt 3 ]; then
115          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
# Line 124  testoutput_for_prop() Line 128  testoutput_for_prop()
128          cat tmp3.txt 1>&2          cat tmp3.txt 1>&2
129      fi      fi
130      echo "-1" >> tmp3.txt      echo "-1" >> tmp3.txt
131      digits_of_similarity=`./tmp_cmpnum < tmp3.txt`      # On the SGI O3K (*not* the O2K), "cat -n" inserts a ":" after the line number
132        cat tmp3.txt | sed -e 's|:||g' > tmp4.txt
133        digits_of_similarity=`./tmp_cmpnum < tmp4.txt`
134      if [ $digits_of_similarity -eq 99 ]; then      if [ $digits_of_similarity -eq 99 ]; then
135          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
136              echo testoutput_for_prop: No comparison was available for \"$2\" 1>&2              echo testoutput_for_prop: No comparison was available for \"$2\" 1>&2
# Line 135  testoutput_for_prop() Line 141  testoutput_for_prop()
141              echo There were $digits_of_similarity decimal places of similarity for \"$2\" 1>&2              echo There were $digits_of_similarity decimal places of similarity for \"$2\" 1>&2
142          fi          fi
143      fi      fi
144      rm tmp1.txt tmp2.txt tmp3.txt      rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt
145            
146      return $digits_of_similarity      return $digits_of_similarity
147  }  }
# Line 155  dashnum() Line 161  dashnum()
161      done      done
162  }  }
163    
164    testoutput_ad()
165    {
166        grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $5}' > t05.txt
167        grep $3 $1/$2/output.txt_adm | awk '{print NR " " $5}' > t15.txt
168        grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $6}' > t06.txt
169        grep $3 $1/$2/output.txt_adm | awk '{print NR " " $6}' > t16.txt
170        join t05.txt t15.txt > t5.txt
171        join t06.txt t16.txt > t6.txt
172        echo "-1" >> t5.txt
173        echo "-1" >> t6.txt
174        digits_5=`./tmp_cmpnum < t5.txt`
175        digits_6=`./tmp_cmpnum < t6.txt`
176        dashnum $digits_5 $digits_6
177        rm -f t[01][56].txt t[56].txt
178    }
179    
180    check_for_add_mon_output()
181    {
182        # Check for additional types of monitor output
183        if test "x$1" = x ; then
184            return
185        fi
186    
187        for ii in $PTRACERS_NUM ; do
188            eval "HAVE_PTR0"$ii"=f"
189        done
190    
191        ptr_add="trcstat_ptracerXX_min trcstat_ptracerXX_max"
192        ptr_add="$ptr_add trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
193        for ii in $PTRACERS_NUM ; do
194            for jj in $ptr_add ; do
195                name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
196                tst=`grep $name $1 | wc -l | awk '{print $1}'`
197                if test ! "x$tst" = x0 ; then
198                    eval "HAVE_PTR0"$ii"=t"
199                fi
200            done
201            #  eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"'
202        done
203    }
204    
205  testoutput()  testoutput()
206  {  {
207      # testoutput diretory subdir      # testoutput directory subdir extension
208      #      #
209      #  test output in "directory"      #  test output in "directory"
210        if test "x$ADM" = x ; then
211            if [ $debug -gt 0 ]; then
212                echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2
213            fi
214            testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2 $3; cg2dres=$?
215            if [ $debug -gt 0 ]; then
216                echo testoutput: cg2dres=$cg2dres 1>&2
217            fi
218            testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2 $3; tmin=$?
219            testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2 $3; tmax=$?
220            testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2 $3; tmean=$?
221            testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2 $3; tsd=$?
222            testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2 $3; smin=$?
223            testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2 $3; smax=$?
224            testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2 $3; smean=$?
225            testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2 $3; ssd=$?
226            testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2 $3; umin=$?
227            testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2 $3; umax=$?
228            testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2 $3; umean=$?
229            testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2 $3; usd=$?
230            testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2 $3; vmin=$?
231            testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2 $3; vmax=$?
232            testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2 $3; vmean=$?
233            testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2 $3; vsd=$?
234    
235            #  This is for PTRACERS
236            for ii in $PTRACERS_NUM ; do
237                eval `echo "p0"$ii"_min=99"`
238                eval `echo "p0"$ii"_max=99"`
239                eval `echo "p0"$ii"_mean=99"`
240                eval `echo "p0"$ii"_sd=99"`
241                tst=`eval 'echo "$HAVE_PTR0'$ii'"'`
242                #echo 'tst = '$tst
243                if test "x$tst" = xt ; then
244                    a="trcstat_ptracer0"
245                    testoutput_for_prop $1 "$a"$ii"_min"  "p0"$ii"_min"  $2 $3
246                    RETVAL=$? ; eval `echo "p0"$ii"_min="$RETVAL`
247                    testoutput_for_prop $1 "$a"$ii"_max"  "p0"$ii"_max"  $2 $3
248                    RETVAL=$? ; eval `echo "p0"$ii"_max="$RETVAL`
249                    testoutput_for_prop $1 "$a"$ii"_mean" "p0"$ii"_mean" $2 $3
250                    RETVAL=$? ; eval `echo "p0"$ii"_mean="$RETVAL`
251                    testoutput_for_prop $1 "$a"$ii"_sd"   "p0"$ii"_sd"   $2 $3
252                    RETVAL=$? ; eval `echo "p0"$ii"_sd="$RETVAL`
253                fi
254            done
255    
256      if [ $debug -gt 0 ]; then          allargs="$cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd"
257          echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2          allargs="$allargs $umin $umax $umean $usd $vmin $vmax $vmean $vsd"
258      fi          allargs="$allargs $p01_min $p01_max $p01_mean $p01_sd"
259      testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2; cg2dres=$?          allargs="$allargs $p02_min $p02_max $p02_mean $p02_sd"
260      if [ $debug -gt 0 ]; then          allargs="$allargs $p03_min $p03_max $p03_mean $p03_sd"
261          echo testoutput: cg2dres=$cg2dres 1>&2          allargs="$allargs $p04_min $p04_max $p04_mean $p04_sd"
262            allargs="$allargs $p05_min $p05_max $p05_mean $p05_sd"
263    
264            eval "dashnum $allargs"
265    
266        else
267            testoutput_ad $1 $2 "precision_grdchk_result"
268      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  
269  }  }
270    
271  genmakemodel()  genmakemodel()
# Line 195  genmakemodel() Line 274  genmakemodel()
274      if test "x$NOGENMAKE" = xt ; then      if test "x$NOGENMAKE" = xt ; then
275          echo "genmake skipped!"          echo "genmake skipped!"
276      else      else
277          GENMAKE2="$BASH ../../../tools/genmake2"          if test "x$BASH" = x ; then
278                GENMAKE2="../../../tools/genmake2"
279            else
280                GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
281            fi
282          (          (
283              cd $1;              cd $1;
284              command="$GENMAKE2  -ds -m $MAKE --mods=../code"              command="$GENMAKE2  -ds -m $MAKE"
285                if test "x$ADM" = x ; then
286                    command="$command --mods=../code"
287                else
288                    command="$command --mods=../code_ad"
289                    command="$command -adof=../../../tools/adjoint_options/adjoint_staf"
290                fi
291              if test "x$OPTFILE" != xNONE ; then              if test "x$OPTFILE" != xNONE ; then
292                  command="$command --optfile=$OPTFILE"                  command="$command --optfile=$OPTFILE"
293              fi              fi
# Line 208  genmakemodel() Line 297  genmakemodel()
297              printf 'genmake ... ' 1>&2              printf 'genmake ... ' 1>&2
298              $command > make.log 2>&1              $command > make.log 2>&1
299              RETVAL=$?              RETVAL=$?
300              cp Makefile $CDIR              #  Reduce the size of the testing emails!
301                head -100 Makefile > $CDIR/Makefile_head
302              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
303                  tail make.log                  tail make.log
304                  echo "genmakemodel: genmake failed" 1>&2                  echo "genmakemodel: genmake failed" 1>&2
# Line 279  makemodel() Line 369  makemodel()
369          cd $1;          cd $1;
370          if test -r Makefile ; then          if test -r Makefile ; then
371              printf 'make ... ' 1>&2              printf 'make ... ' 1>&2
372              $MAKE >> make.log 2>&1              if test "x$ADM" = x ; then
373                    if test "x$JOBS" = x ; then
374                        $MAKE >> make.log 2>&1
375                    else
376                        $MAKE -j $JOBS >> make.log 2>&1
377                    fi
378                else
379                    $MAKE adall >> make.log 2>&1
380                fi
381              RETVAL=$?              RETVAL=$?
382              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
383                  tail make.log                  tail make.log
# Line 293  makemodel() Line 391  makemodel()
391      )      )
392  }  }
393    
394    symlink_mpifiles()
395    {
396        # Put special links so that MPI specific files are used
397        # This MUST be invoked between makeclean and makelinks because
398        # the Makefile will link to non-mpi files by default
399    
400        dir=$1
401        code_dir=$2
402        BUILD_DIR=$dir/$3
403        CODE_DIR=$dir/$code_dir
404        
405        # These are files that should replace their counter-part when using -mpi
406        MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`
407    
408        #  Is this an MPI run?
409        if test "x$MPI" = xt ; then
410            # YES: We symbolically link these files to the build
411            # dir so long as there is no real file in place
412            for ii in $MPI_FILES ; do
413                i=`echo $ii | sed 's:^\./::'`
414                name=`echo $i | sed 's:_mpi::' `
415                cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1
416                RETVAL=$?
417                if test "x$RETVAL" != x0 ; then
418                    if ! test -f $BUILD_DIR/$i ; then
419                        #echo Linking $name to $i
420                        (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
421                    fi
422                fi
423            done
424        else
425            # NO: We undo any _mpi symbolically linked files
426            for ii in $MPI_FILES ; do
427                i=`echo $ii | sed 's:^\./::'`
428                name=`echo $i | sed 's:_mpi::' `
429                if test -L $BUILD_DIR/$name ; then
430                    cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
431                    RETVAL=$?
432                    if test "x$RETVAL" = x0 ; then
433                        #echo Un-linking $name from $linktarg
434                        rm -f $BUILD_DIR/$name
435                    fi
436                fi
437            done
438        fi
439        
440    }
441    
442  linkdata()  linkdata()
443  {  {
444      # linkdata flag      # linkdata flag
# Line 301  linkdata() Line 447  linkdata()
447      if test "x$1" = x1 ; then      if test "x$1" = x1 ; then
448          (          (
449              cd $2              cd $2
450              files=`( cd ../input ; ls -1 | grep -v CVS )`              if test "x$ADM" = x ; then
451              for i in $files ; do                  files=`( cd ../input ; ls -1 | grep -v CVS )`
452                  if test ! -d "../input/"$i ; then                  for i in $files ; do
453                      ln -sf "../input/"$i $i                      if test ! -d "../input/"$i ; then
454                  fi                          ln -sf "../input/"$i $i
455              done                      fi
456                    done
457                else
458                    files=`( cd ../input ; ls -1 *.bin | grep -v CVS )`
459                    for i in $files ; do
460                        if test ! -d "../input/"$i ; then
461                            ln -sf "../input/"$i $i
462                        fi
463                    done
464                    files=`( cd ../input_ad ; ls -1 | grep -v CVS )`
465                    for i in $files ; do
466                        if test ! -d "../input_ad/"$i ; then
467                            ln -sf "../input_ad/"$i $i
468                        fi
469                    done
470                fi
471          )          )
472      fi      fi
473  }  }
# Line 315  runmodel() Line 476  runmodel()
476  {  {
477      # runmodel directory      # runmodel directory
478      #      #
479      #  runs "$COMMAND" in "directory"      #  runs "$COMMAND in "directory"
480      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
481      (      (
482          cd $1          cd $1
483          printf 'runmodel ... ' 1>&2          printf 'runmodel ... ' 1>&2
484          # make output.txt          # make output.txt
485          $COMMAND >> run.log 2>&1          echo
486            rm -f run.log
487            # echo "COMMAND='$COMMAND'"
488            # echo "pwd='"`pwd`"'"
489            ( eval $COMMAND ) > run.log 2>&1
490          RETVAL=$?          RETVAL=$?
491          if test "x$RETVAL" = x0 ; then          if test "x$RETVAL" = x0 ; then
492                tail run.log
493              echo successful 1>&2              echo successful 1>&2
494              cp output.txt $CDIR"/output.txt"              # === Reduce the size of the testing emails!
495                # if test "x$ADM" = x ; then
496                #   cp output.txt $CDIR"/output.txt"
497                # else
498                #   cp output.txt_adm $CDIR"/output.txt_adm"
499                # fi
500                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
501              return 0              return 0
502          else          else
503              tail run.log              tail run.log
504              echo failed 1>&2              echo failed 1>&2
505              cp run.log $CDIR"/run.log"              cp run.log $CDIR"/run.log"
506                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
507              return 1              return 1
508          fi          fi
509      )      )
# Line 340  createcodelet() Line 513  createcodelet()
513  {  {
514      # create codelet for comparing model output      # create codelet for comparing model output
515    
516      echo -n "creating the comparison code...  "      printf "creating the comparison code...  "
517      cat > tmp_cmpnum.c <<EOF      cat > tmp_cmpnum.c <<EOF
518  #include <stdio.h>  #include <stdio.h>
519  #include <math.h>  #include <math.h>
520  int main( int argc, char** argv )  {  int main( int argc, char** argv )  {
521    int linnum,best;    int linnum,best,lncnt;
522    double a,b,diff;    double a,b,abave,relerr;
523    best = -16;    best = -16;
524    while( 1 )  {    lncnt = 0;
525      while( 1 & (lncnt+=1) < 999 )  {
526      scanf("%d", &linnum);      scanf("%d", &linnum);
527      if (linnum == -1)  break;      if (linnum == -1)  break;
528      scanf("%lf", &a);  scanf("%lf", &b);      scanf("%lf", &a);  scanf("%lf", &b);
529      diff = 0.5*(fabs(a)+fabs(b));      abave = 0.5*(fabs(a)+fabs(b));
530      if (diff > 1.e-12) {      if (abave > 0.0) {
531        diff=fabs(a-b)/diff;        relerr=fabs(a-b)/abave;
532        if (diff > 0.0) {        if (relerr > 0.0) {
533          linnum = (int)log10(diff);          linnum = (int)log10(relerr);
534          best = (best > linnum) ? best : linnum;          best = (best > linnum) ? best : linnum;
535        }        }
536        else {      }
537          if (best == -16 && diff != 0)  best = -22;      else {
538        }        if (best == -16 && abave != 0)  best = -22;
539      }      }
540    }    }
541      if (lncnt == 999) best=-29;
542    printf("%d\n", -best);    printf("%d\n", -best);
543    return 0;    return 0;
544  }  }
# Line 444  clean=0 Line 619  clean=0
619  expts=''  expts=''
620  # ieee=1  # ieee=1
621    
622  IEEE=  IEEE=true
623  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
624      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
625  fi  fi
# Line 463  TESTDIRS= Line 638  TESTDIRS=
638  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
639  HAVE_MPACK=  HAVE_MPACK=
640  MPACK="$MPACKDIR/mpack"  MPACK="$MPACKDIR/mpack"
641  COMMAND="make output.txt"  COMMAND=
642  MAKE=make  MAKE=make
643    JOBS=
644  MPI=f  MPI=f
645    DELDIR=
646    
647    ADM=
648    
649  echo -n "parsing options...  "  # Additional monitor types
650    PTRACERS_NUM="1 2 3 4 5"
651    
652    printf "parsing options...  "
653    
654  ac_prev=  ac_prev=
655  for ac_option ; do  for ac_option ; do
# Line 516  for ac_option ; do Line 698  for ac_option ; do
698          -make=* | --make=*)          -make=* | --make=*)
699              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
700    
701            -ptracers | --ptracers | -ptr | --ptr)
702                ac_prev=PTRACERS_NUM ;;
703            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
704                PTRACERS_NUM=$ac_optarg ;;
705    
706            -j) ac_prev=JOBS ;;
707            -j=*) JOBS=$ac_optarg ;;
708    
709          -clean | --clean)          -clean | --clean)
710              CLEANUP=t ;;              CLEANUP=t ;;
711    
# Line 530  for ac_option ; do Line 720  for ac_option ; do
720    
721          -mpi) MPI=t ;;          -mpi) MPI=t ;;
722    
723            -adm | -ad) ADM=t ;;
724    
725          -ieee) IEEE=true ;;          -ieee) IEEE=true ;;
726          -noieee) IEEE= ;;          -noieee) IEEE= ;;
727    
# Line 537  for ac_option ; do Line 729  for ac_option ; do
729          -debug) debug=1 ;;          -debug) debug=1 ;;
730          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
731    
732            -deldir | -dd) DELDIR=t ;;
733    
734          -*)          -*)
735              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
736              usage              usage
# Line 565  if test "x$OPTFILE" = xNONE -a "x$MITGCM Line 759  if test "x$OPTFILE" = xNONE -a "x$MITGCM
759      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
760  fi  fi
761    
762    if test "x$ADM" = xt -a "x$COMMAND" = x ; then
763        COMMAND="./mitgcmuv_ad > output.txt_adm 2>&1"
764    fi
765    
766    if test "x$COMMAND" = x ; then
767        COMMAND="$MAKE output.txt"
768    fi
769    
770  echo "OK"  echo "OK"
771    
772  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
773  createcodelet  createcodelet
774    
775  #  build the mpack utility  #  build the mpack utility
776  build_mpack  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
777        echo "skipping mpack build"
778    else
779        build_mpack
780    fi
781    
782  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
783  MACH=`hostname`  MACH=`hostname`
784  UNAMEA=`uname -a`  UNAMEA=`uname -a`
785  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
786  BASE=$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
787  DNUM=0  DNUM=0
788  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
789  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 591  if test "x$RETVAL" != x0 ; then Line 797  if test "x$RETVAL" != x0 ; then
797      exit 1      exit 1
798  fi  fi
799  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
800  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
801  start_date=`date`  start_date=`date`
802  echo $start_date > $SUMMARY  echo $start_date > $SUMMARY
803    
# Line 622  else Line 828  else
828  fi  fi
829  echo  echo
830  echo >> $SUMMARY  echo >> $SUMMARY
831  cat << EOF | tee -a $SUMMARY  if test "x$ADM" = x ; then
832                  T           S           U           V      line_0="            ----T-----  ----S-----  ----U-----  ----V-----"
833  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"
834  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  ."
835  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"
836  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  ."
837        for ii in $PTRACERS_NUM ; do
838            #  tst=`eval 'echo $HAVE_PTR0'$ii`
839            #  if test "x$tst" = xt ; then
840            line_0="$line_0  --PTR 0"$ii"--"
841            line_1="$line_1        m  s"
842            line_2="$line_2  m  m  e  ."
843            line_3="$line_3  i  a  a  d"
844            line_4="$line_4  n  x  n  ."
845            #  fi
846        done
847        echo "$line_0" | tee -a $SUMMARY
848        echo "$line_1" | tee -a $SUMMARY
849        echo "$line_2" | tee -a $SUMMARY
850        echo "$line_3" | tee -a $SUMMARY
851        echo "$line_4" | tee -a $SUMMARY
852        echo " "       | tee -a $SUMMARY
853    else
854        echo "ADJOINT=true" >> $SUMMARY
855        echo >> $SUMMARY
856        cat << EOF | tee -a $SUMMARY
857    G D M    C  G
858    E p a R  o  r
859    N n k u  s  a
860    2 d e n  t  d
861    
862  EOF  EOF
863    fi
864    
865  #  ...and each test directory...  #  ...and each test directory...
866  for dir in $TESTDIRS ; do  for dir in $TESTDIRS ; do
# Line 647  for dir in $TESTDIRS ; do Line 878  for dir in $TESTDIRS ; do
878    
879      #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
880      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
881      if test ! -r $dir"/results/output.txt" ; then      fout=
882          echo "can't read \"$dir/results/output.txt\" -- skipping $dir"      if test "x$ADM" = x ; then
883            fout=$dir"/results/output.txt"
884            check_for_add_mon_output  $fout
885        else
886            fout=$dir"/results_ad/output.txt_adm"
887        fi
888        if test ! -r $fout ; then
889            echo "can't read \"$fout\" -- skipping $dir"
890          continue          continue
891      fi      fi
892    
893      echo "-------------------------------------------------------------------------------"      # Check for additional types of monitor output
     echo  
     echo "Experiment:  $dir"  
     echo  
     unset genmake makedepend make run  
     results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'  
894    
895      builddir="input"      builddir="input"
896      rundir="input"      rundir="input"
# Line 669  for dir in $TESTDIRS ; do Line 902  for dir in $TESTDIRS ; do
902          linkdata $use_seperate_build $dir/$rundir          linkdata $use_seperate_build $dir/$rundir
903      fi      fi
904            
905      CODE_DIR=$dir/code      #  Check whether there are "extra runs" for this testdir
906      BUILD_DIR=$dir/$builddir      extra_runs=
907      MPI_FILES="CPP_EEOPTIONS.h_mpi SIZE.h_mpi"      if test "x$ADM" = x -a "x$use_seperate_build" = x1 ; then
908      NOMPI_FILES="CPP_EEOPTIONS.h_nompi SIZE.h_nompi"          ex_run_dirs=`( cd $dir ; echo input.* )`
909            echo "ex_run_dirs='$ex_run_dirs'"
910            for exd in $ex_run_dirs ; do
911                name=`echo $exd | sed -e 's/input.//g'`
912                outf="$dir/results/output.txt.$name"
913                if test -f $outf -a -r $outf ; then
914                    extra_runs="$extra_runs $name"
915                fi
916            done
917        fi
918    
919      #  Is this an MPI run?      if test "x$ADM" = x ; then
920      if test "x$MPI" = xt ; then          code_dir=code
921          FILES=$MPI_FILES          CODE_DIR=$dir/code
         endings="_mpi"  
922      else      else
923          FILES=$NOMPI_FILES          code_dir=code_ad
924          endings="_nompi"          CODE_DIR=$dir/code_ad
925      fi      fi
926            BUILD_DIR=$dir/$builddir
927      #  Check to see that we have the files  
928      have_files=t      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
929      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)"  
930          continue          continue
931      fi      fi
932        
933      #  If we have the $FILES and they differ, copy the $FILES to $BUILD_DIR      echo "-------------------------------------------------------------------------------"
934      if test "x$have_files" = xt ; then      echo
935          for i in $FILES ; do      echo "Experiment:  $dir"
936              sstr="s|$endings||"      echo
937              name=`echo $i | sed -e $sstr `      unset genmake makedepend make run
938              cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
939              RETVAL=$?  
             if test "x$RETVAL" != x0 ; then  
                 cp $CODE_DIR/$i $BUILD_DIR/$name  
             fi  
         done  
     fi  
       
940      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
941      rel_CDIR=$DRESULTS"/"$dir      rel_CDIR=$DRESULTS"/"$dir
942      mkdir $rel_CDIR      mkdir $rel_CDIR
# Line 719  for dir in $TESTDIRS ; do Line 947  for dir in $TESTDIRS ; do
947      else      else
948          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
949              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
950                && symlink_mpifiles $dir $code_dir $builddir \
951              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
952              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
953              && linkdata $use_seperate_build $dir/$rundir \              && linkdata $use_seperate_build $dir/$rundir \
# Line 727  for dir in $TESTDIRS ; do Line 956  for dir in $TESTDIRS ; do
956      fi      fi
957            
958      echo      echo
959      fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`      if test "x$ADM" = x ; then
960      echo          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
961      echo "$fres" >> $SUMMARY          echo
962      echo "fresults='$fres'" > $CDIR"/summary.txt"          echo "$fres" >> $SUMMARY
963      echo "MACH='$MACH'" >> $CDIR"/summary.txt"          echo "fresults='$fres'" > $CDIR"/summary.txt"
964      echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"          echo "MACH='$MACH'" >> $CDIR"/summary.txt"
965      echo "DATE='$DATE'" >> $CDIR"/summary.txt"          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
966      echo "tdir='$dir'" >> $CDIR"/summary.txt"          echo "DATE='$DATE'" >> $CDIR"/summary.txt"
967            echo "tdir='$dir'" >> $CDIR"/summary.txt"
968    
969            OLD_COMMAND=$COMMAND
970            COMMAND="./mitgcmuv > output.txt"
971            for ex in $extra_runs ; do
972                test -e "$dir/tr_run.$ex" && rm -rf "$dir/tr_run.$ex"
973                mkdir "$dir/tr_run.$ex"
974                links=`( cd "$dir/input" > /dev/null 2>&1 ; ls -1 | grep -v CVS )`
975                (
976                    cd "$dir/tr_run.$ex"
977                    for i in $links; do
978                        ln -s ../input/$i $i
979                    done
980                )
981                links=`( cd "$dir/input.$ex" > /dev/null 2>&1 ; ls -1 | grep -v CVS )`
982                (
983                    cd "$dir/tr_run.$ex"
984                    for i in $links; do
985                        test -e $i  &&  rm -f $i
986                        ln -s ../input.$ex/$i $i
987                    done
988                    ln -s ../$builddir/mitgcmuv mitgcmuv
989                )
990                runmodel $dir/tr_run.$ex && run=Y \
991                    && results=`testoutput $dir tr_run.$ex "."$ex`
992                fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
993                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
994                fres="$fres.$ex"
995                echo
996                echo "$fres" >> $SUMMARY
997                echo "fresults='$fres'" > $CDIR"/summary.txt"
998                echo "MACH='$MACH'" >> $CDIR"/summary.txt"
999                echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1000                echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1001                echo "tdir='$dir'" >> $CDIR"/summary.txt"
1002            done
1003            COMMAND=$OLD_COMMAND
1004        else
1005            fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1006            fres=$fres"$results   $dir"
1007            echo
1008            echo "$fres" >> $SUMMARY
1009            echo "fresults='$fres'" > $CDIR"/summary.txt"
1010            echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1011            echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1012            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1013            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1014        fi
1015            
1016      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1017            
1018  done  done
1019    
1020  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1021  echo $start_date >> $SUMMARY  echo $start_date >> $SUMMARY
1022  echo -n "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
1023  date >> $SUMMARY  date >> $SUMMARY
1024    
1025  #  If addresses were supplied and mpack built successfully, then try  #  If addresses were supplied and mpack built successfully, then try
# Line 753  else Line 1030  else
1030      if test "x$HAVE_MPACK" = xt ; then      if test "x$HAVE_MPACK" = xt ; then
1031          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1032              && gzip $DRESULTS".tar" \              && gzip $DRESULTS".tar" \
1033              && $MPACK -s MITgcm-test -m 1500000 $DRESULTS".tar.gz" $ADDRESSES              && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1034          RETVAL=$?          RETVAL=$?
1035          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1036              echo              echo
# Line 777  rm -f tmp_cmpnum.c tmp_cmpnum Line 1054  rm -f tmp_cmpnum.c tmp_cmpnum
1054    
1055  if test "x$CLEANUP" != xt ; then  if test "x$CLEANUP" != xt ; then
1056      cat $SUMMARY      cat $SUMMARY
1057      if test -e tr.out ; then      if test -e tr_out.txt ; then
1058          mv tr.out tr.out.old          mv tr_out.txt tr_out.txt.old
1059      fi      fi
1060      cat $SUMMARY > tr.out      cat $SUMMARY > tr_out.txt
1061    fi
1062    
1063    if test "x$DELDIR" = xt ; then
1064        rm -rf $DRESULTS
1065  fi  fi
1066    

Legend:
Removed from v.1.22  
changed lines
  Added in v.1.52

  ViewVC Help
Powered by ViewVC 1.1.22