/[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.11 by edhill, Fri Oct 10 03:29:44 2003 UTC revision 1.75 by jmc, Fri Feb 24 23:15:25 2006 UTC
# Line 1  Line 1 
1  #!/bin/bash  #! /usr/bin/env bash
2  #  #
3  #  $Header$  #  $Header$
4  #  $Name$  #  $Name$
# 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=\"-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\")"
20      echo "  (-t|-tdir)STRING         list of test dirs to use"      echo "  (-t|-tdir) STRING        list of test dirs to use"
21      echo "                             (DEF=\"\" which builds all)"      echo "                             (DEF=\"\" which builds all)"
22      echo "  (-b|-bash)STRING         location of \"bash\" executable"      echo "  (-b|-bash) STRING        preferred location of a \"bash\" or"
23      echo "                             (DEF=\"\" for \"/bin/bash\")"      echo "                             Bourne-compatible \"sh\" shell"
24      echo "  (-command)STRING         command to run"      echo "                             (DEF=\"\" for \"bash\")"
25        echo "  (-adm|-ad)               perform an adjoint run"
26        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
61              echo "Error: can't find \"$MPACKDIR\""              echo "Error: can't find \"$MPACKDIR\""
62              echo "  are you sure this program is being run in the correct "              echo "  are you sure this program is being run in the correct "
63              echo "  (that is, \"MITGCM_ROOT\verification\") directory?"              echo "  (that is, \"MITGCM_ROOT\verification\") directory?"
64              exit 1              echo
65                HAVE_MPACK=f
66            fi
67            printf "building mpack...  "
68            if test "x$CC" = x ; then
69                export CC=cc
70          fi          fi
71          echo -n "building mpack...  "          ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1
         ( cd $MPACKDIR && ./configure && $MAKE ) > build_mpack.out 2>&1  
72          RETVAL=$?          RETVAL=$?
73          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
74              echo              echo
75              echo "Error building the mpack tools at: $MPACK_DIR"              echo "Error building the mpack tools at: $MPACK_DIR"
76              exit 1              echo
77                HAVE_MPACK=f
78            else
79                rm -f tr_build_mpack.out
80                HAVE_MPACK=t
81          fi          fi
82        else
83            HAVE_MPACK=t
84      fi      fi
85      echo "OK"      echo "OK"
86  }  }
87    
 compare_lines()  
 {  
     # use codelet to compare lines  
     if [ $verbose -gt 1 ]; then  
         cat tmp3.txt 1>&2  
     fi  
     return `./a.out < tmp3.txt`  
 }  
   
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 81  testoutput_for_prop() Line 96  testoutput_for_prop()
96          echo testoutput_for_prop: grep "$2" $1/$4/output.txt 1>&2          echo testoutput_for_prop: grep "$2" $1/$4/output.txt 1>&2
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/.*=//' | nl > 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/.*=//' | nl > 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 111  testoutput_for_prop() Line 142  testoutput_for_prop()
142      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
143          echo testoutput_for_prop: compare_lines 1>&2          echo testoutput_for_prop: compare_lines 1>&2
144      fi      fi
145      compare_lines      if [ $verbose -gt 1 ]; then
146      digits_of_similarity=$?          cat tmp3.txt 1>&2
147        fi
148        echo "-1" >> tmp3.txt
149        # On the SGI O3K (*not* the O2K), "cat -n" inserts a ":" after the line number
150        cat tmp3.txt | sed -e 's|:||g' > tmp4.txt
151        digits_of_similarity=`./tmp_cmpnum < tmp4.txt`
152      if [ $digits_of_similarity -eq 99 ]; then      if [ $digits_of_similarity -eq 99 ]; then
153          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
154              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 123  testoutput_for_prop() Line 159  testoutput_for_prop()
159              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
160          fi          fi
161      fi      fi
162      rm tmp1.txt tmp2.txt tmp3.txt      rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt
163            
164      return $digits_of_similarity      return $digits_of_similarity
165  }  }
# Line 143  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 184  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"
                 # echo "  command=\"$command\""  
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              # echo "command: \"$command\""              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              for i in genmake_state genmake_optfile genmake_local Makefile ; do              #  Reduce the size of the testing emails!
322                  if test -r $i ; then              head -100 Makefile > $CDIR/Makefile_head
                     cp $i $CDIR  
                 fi  
             done  
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
326                  cp make.log $CDIR                  cp genmake_* make.log $CDIR
327                  return 1                  return 1
328              else              else
329                  echo "succesful" 1>&2                  echo "successful" 1>&2
330              fi              fi
331          )          )
332      fi      fi
# Line 238  makeclean() Line 354  makeclean()
354                      return 1                      return 1
355                  fi                  fi
356              fi              fi
357              echo succesful 1>&2              echo successful 1>&2
358                exit 0
359            )
360        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              exit 0
373          )          )
374      fi      fi
# Line 261  makedependmodel() Line 391  makedependmodel()
391                  cp make.log $CDIR"/make.log"                  cp make.log $CDIR"/make.log"
392                  return 1                  return 1
393              else              else
394                  echo succesful 1>&2                  echo successful 1>&2
395              fi              fi
396          )          )
397      fi      fi
# Line 274  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 282  makemodel() Line 420  makemodel()
420                  cp make.log $CDIR"/make.log"                  cp make.log $CDIR"/make.log"
421                  return 1                  return 1
422              else              else
423                  echo succesful 1>&2                  echo successful 1>&2
424              fi              fi
425          fi          fi
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
480      #      #
481      # symbolically link data files to run directory      # symbolically link data files to run directory
482      if [ $1 -ne 0 ]; then      if test "x$1" = x1 ; then
483          ( cd $2 ;  ln -sf ../input/* . )          (
484                cd $2
485                if test "x$ADM" = x ; then
486                    files=`( cd ../input ; ls -1 | grep -v CVS )`
487                    for i in $files ; do
488                        if test ! -d "../input/"$i -a ! -f $i ; then
489                            ln -sf "../input/"$i $i
490                        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  }  }
509    
# Line 302  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          echo
521          RETVAL=$?          rm -f run.log
522            if test output.txt -ot mitgcmuv ; then
523               ( eval $COMMAND ) > run.log 2>&1
524               RETVAL=$?
525            else
526               echo ' output.txt 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              cp output.txt $CDIR"/output.txt"              tail run.log
533                echo successful 1>&2
534                # === 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
544                echo failed 1>&2
545                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 323  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.f <<EOFA      cat > tmp_cmpnum.c <<EOF
558        program cmpnum  #include <stdio.h>
559        implicit none  #include <math.h>
560        real*8 a,b,diff  int main( int argc, char** argv )  {
561        integer linnum,best    int linnum,best,lncnt;
562        best=-16    double a,b,abave,relerr;
563    99  read(*,*,end=70,err=60) linnum,a,b    best = -22;
564        diff=0.5*(abs(a)+abs(b))    lncnt = 0;
565  c     print *,a,b,diff,abs(a-b)/diff    while( 1 & (lncnt+=1) < 999 )  {
566        if (diff.gt.1.e-12) then      scanf("%d", &linnum);
567          diff=abs(a-b)/diff      if (linnum == -1)  break;
568          if (diff.gt.0.) then      scanf("%lf", &a);  scanf("%lf", &b);
569  c         print *,int(log10(diff)),diff      abave = 0.5*(fabs(a)+fabs(b));
570            linnum=int(log10(diff))      if (abave > 0.0) {
571            best=max(best,linnum)        relerr=fabs(a-b)/abave;
572          endif        if (relerr > 0.0) { linnum = (int)rint(log10(relerr)); }
573        else        else { linnum = -16 ; }
574          if (best.eq.-16.and.diff.ne.0.) best=-22        best = (best > linnum) ? best : linnum;
575        endif      }
576        goto 99    }
577    60  stop 'cmpnum: An error occured reading a,b'    if (lncnt == 999) best=-29;
578    70  print *,-best    printf("%d\n", -best);
579        end    return 0;
580  EOFA  }
581    EOF
582        $CC -o tmp_cmpnum tmp_cmpnum.c -lm
583    
584      f77 tmp_cmpnum.f      if [ -x ./tmp_cmpnum ]; then
     if [ -x ./a.out ]; then  
585          echo "OK"          echo "OK"
586          return 0          return 0
587      else      else
588          echo          echo
589          echo "createcodelet: failed to compile codelet"          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 415  scandirs() Line 647  scandirs()
647    
648    
649  ###############################################################################  ###############################################################################
 ###############################################################################  
 ###############################################################################  
650    
651    
652  #  Default properties  #  Default properties
# Line 426  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 437  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
674  ADDRESSES=  ADDRESSES=
675  TESTDIRS=  TESTDIRS=
676  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
677    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    ADM=
692    
693    # Additional monitor types
694    PTRACERS_NUM="1 2 3 4 5"
695    
696  echo -n "parsing options...  "  printf "parsing options...  "
697    
698  ac_prev=  ac_prev=
699  for ac_option ; do  for ac_option ; do
# Line 497  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 509  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          -mpi) MPI=true ;;          -postclean | --postclean | -pc | --pc)
771                POSTCLEAN=t ;;
772    
773            -mpi) MPI=t ;;
774    
775            -adm | -ad) ADM=t ;;
776    
777          -ieee) IEEE=true ;;          -ieee) IEEE=true ;;
778          -noieee) IEEE= ;;          -noieee) IEEE= ;;
# Line 518  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 546  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    if test "x$ADM" = xt -a "x$COMMAND" = x ; then
815        COMMAND="./mitgcmuv_ad > output.txt_adm 2>&1"
816    fi
817    
818    if test "x$COMMAND" = x ; then
819        COMMAND="./mitgcmuv > output.txt"
820    fi
821    
822  echo "OK"  echo "OK"
823    
824  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
825  createcodelet  createcodelet
826    
827  #  build the mpack utility  #  build the mpack utility
828  build_mpack  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
829        echo "skipping mpack build"
830    else
831        build_mpack
832    fi
833    
834  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
835  MACH=`hostname`  MACH=`hostname`
836  UNAMEA=`uname -a`  UNAMEA=`uname -a`
837  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
838  BASE=$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
839    if test "x$OUTDIR" != x ; then
840        BASE="tr_"$OUTDIR"_"$DATE"_"
841    fi
842  DNUM=0  DNUM=0
843  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
844  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 568  done Line 848  done
848  mkdir $DRESULTS  mkdir $DRESULTS
849  RETVAL=$?  RETVAL=$?
850  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
851      echo "Error: can't create results directory \"./$DRESULTS\""      echo "ERROR: Can't create results directory \"./$DRESULTS\""
852      exit 1      exit 1
853  fi  fi
854  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
855  date > $SUMMARY  printf "Start time:  " >> $SUMMARY
856  cat << EOF >> $SUMMARY  start_date=`date`
857                  T           S           U           V  echo $start_date > $SUMMARY
 G D M    c        m  s        m  s        m  s        m  s  
 E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .  
 N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d  
 2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .  
   
 EOF  
   
 NDIR=0  
858    
859  of_path=  of_path=
860  if test "x$OPTFILE" != xNONE ; then  if test "x$OPTFILE" != xNONE ; then
# Line 596  if test "x$OPTFILE" != xNONE ; then Line 868  if test "x$OPTFILE" != xNONE ; then
868          fi          fi
869          file=${OPTFILE##*/}          file=${OPTFILE##*/}
870          OPTFILE=$of_path/$file          OPTFILE=$of_path/$file
871            cp $OPTFILE $DRESULTS
872            echo >> $SUMMARY
873            echo "  OPTFILE=$OPTFILE" >> $SUMMARY
874      else      else
875          echo          echo | tee $SUMMARY
876          echo "WARNING: can't read OPTFILE=\"$OPTFILE\" but will try to use it..."          echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
877            exit 1
878      fi      fi
879    else
880        echo >> $SUMMARY
881        echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
882        echo "   so the genmake default will be used." >> $SUMMARY
883  fi  fi
884  echo  echo
 echo "OPTFILE=$OPTFILE" >> $SUMMARY  
885  echo >> $SUMMARY  echo >> $SUMMARY
886    if test "x$ADM" = x ; then
887        line_0="            ----T-----  ----S-----  ----U-----  ----V-----"
888        line_1="G D M    c        m  s        m  s        m  s        m  s"
889        line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
890        line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
891        line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
892        for ii in $PTRACERS_NUM ; do
893            #  tst=`eval 'echo $HAVE_PTR0'$ii`
894            #  if test "x$tst" = xt ; then
895            line_0="$line_0  --PTR 0"$ii"--"
896            line_1="$line_1        m  s"
897            line_2="$line_2  m  m  e  ."
898            line_3="$line_3  i  a  a  d"
899            line_4="$line_4  n  x  n  ."
900            #  fi
901        done
902        echo "$line_0" | tee -a $SUMMARY
903        echo "$line_1" | tee -a $SUMMARY
904        echo "$line_2" | tee -a $SUMMARY
905        echo "$line_3" | tee -a $SUMMARY
906        echo "$line_4" | tee -a $SUMMARY
907        echo " "       | tee -a $SUMMARY
908    else
909        echo "ADJOINT=true" >> $SUMMARY
910        echo >> $SUMMARY
911        cat << EOF | tee -a $SUMMARY
912    G D M    C  G
913    E p a R  o  r
914    N n k u  s  a
915    2 d e n  t  d
916    
917    EOF
918    fi
919    
920  #  ...and each test directory...  #  ...and each test directory...
921  for dir in $TESTDIRS ; do  for dir in $TESTDIRS ; do
# Line 616  for dir in $TESTDIRS ; do Line 928  for dir in $TESTDIRS ; do
928          if test -r $dir/input/Makefile ; then          if test -r $dir/input/Makefile ; then
929              ( cd $dir/input ; make CLEAN )              ( cd $dir/input ; make CLEAN )
930          fi          fi
931            (
932                cd $dir
933                rm -rf tr_run.*
934            )
935          continue          continue
936      fi      fi
937    
938      #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
939      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
940      if test ! -r $dir"/results/output.txt" ; then      fout=
941          echo "can't read \"$dir/results/output.txt\" -- skipping $dir"      if test "x$ADM" = x ; then
942            fout=$dir"/results/output.txt"
943        else
944            fout=$dir"/results_ad/output.txt_adm"
945        fi
946        if test ! -r $fout ; then
947            echo "can't read \"$fout\" -- skipping $dir"
948          continue          continue
949      fi      fi
950        if test "x$ADM" = x ; then
951            check_for_add_mon_output  $fout
952        fi
953    
954      echo "-------------------------------------------------------------------------------"      # Check for additional types of monitor output
     echo  
     echo "Experiment:  $dir"  
     echo  
     unset genmake makedepend make run  
     results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'  
955    
956      if [ -r $dir/build ]; then      builddir="input"
957          seperatebuilddir=1      rundir="input"
958          builddir=build      use_seperate_build=0
959          rundir=build      if test -d $dir/build -a -r $dir/build ; then
960          ( cd $dir/build; ln -sf ../input/* . )          builddir="build"
961      else          rundir="build"
962          seperatebuilddir=0          use_seperate_build=1
963          builddir=input          linkdata $use_seperate_build $dir/$rundir
         rundir=input  
964      fi      fi
965            
966      CODE_DIR=$dir/code      #  Check whether there are "extra runs" for this testdir
967      BUILD_DIR=$dir/$builddir      extra_runs=
968      MPI_FILES="CPP_EEOPTIONS.h_mpi SIZE.h_mpi"      if test "x$ADM" = x -a "x$use_seperate_build" = x1 ; then
969      NOMPI_FILES="CPP_EEOPTIONS.h_nompi SIZE.h_nompi"          ex_run_dirs=`( cd $dir ; echo input.* )`
970            echo "ex_run_dirs='$ex_run_dirs'"
971            for exd in $ex_run_dirs ; do
972                name=`echo $exd | sed -e 's/input.//g'`
973                outf="$dir/results/output.txt.$name"
974                if test -f $outf -a -r $outf ; then
975                    extra_runs="$extra_runs $name"
976                fi
977            done
978        fi
979    
980      #  Is this an MPI run?      if test "x$ADM" = x ; then
981      if test "x$MPI" = xt ; then          code_dir=code
982          FILES=$MPI_FILES          CODE_DIR=$dir/code
         endings="_mpi"  
983      else      else
984          FILES=$NOMPI_FILES          code_dir=code_ad
985          endings="_nompi"          CODE_DIR=$dir/code_ad
986      fi      fi
987            BUILD_DIR=$dir/$builddir
988      #  Check to see that we have the files  
989      have_files=t      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
990      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)"  
991          continue          continue
992      fi      fi
993        
994      #  If we have the $FILES and they differ, copy the $FILES to $BUILD_DIR      echo "-------------------------------------------------------------------------------"
995      if test "x$have_files" = xt ; then      echo
996          for i in $FILES ; do      echo "Experiment:  $dir"
997              sstr="s|$endings||"      echo
998              name=`echo $i | sed -e $sstr `      unset genmake makedepend make run
999              cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1000              RETVAL=$?  
             if test "x$RETVAL" != x0 ; then  
                 cp $CODE_DIR/$i $BUILD_DIR/$name  
             fi  
         done  
     fi  
       
1001      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1002      CDIR=$DRESULTS"/"$DRESULTS"_"$NDIR      rel_CDIR=$DRESULTS"/"$dir
1003      mkdir $CDIR      mkdir $rel_CDIR
1004      CDIR=`pwd`"/$CDIR"      CDIR=`pwd`"/$rel_CDIR"
1005            
1006      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1007          makeclean $dir/$builddir          makeclean $dir/$builddir
1008      else      else
1009          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1010              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1011                && symlink_mpifiles $dir $code_dir $builddir \
1012              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1013              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1014              && linkdata $seperatebuilddir $dir/$rundir \              && linkdata $use_seperate_build $dir/$rundir \
1015              && runmodel $dir/$builddir && run=Y \              && runmodel $dir/$rundir && run=Y \
1016              && results=`testoutput $dir $rundir`              && results=`testoutput $dir $rundir`
1017      fi      fi
1018            
1019      echo      echo
1020      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \      if test "x$ADM" = x ; then
1021          ${run:-N} $results          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1022      echo          echo
1023      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          echo "$fres" >> $SUMMARY
1024          ${run:-N} $results >> $SUMMARY          echo "fresults='$fres'" > $CDIR"/summary.txt"
1025      echo "fresults='" > $CDIR"/summary.txt"          echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1026      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1027          ${run:-N} $results >> $CDIR"/summary.txt"          echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1028      echo "'" >> $CDIR"/summary.txt"          echo "tdir='$dir'" >> $CDIR"/summary.txt"
1029      echo "MACH='$MACH'" >> $CDIR"/summary.txt"  
1030      echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"          for ex in $extra_runs ; do
1031      echo "DATE='$DATE'" >> $CDIR"/summary.txt"              unset run
1032      echo "tdir='$dir'" >> $CDIR"/summary.txt"              results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1033                #  Create an output dir for each OPTFILE/tdir.ex combination
1034                rel_CDIR=$DRESULTS"/"$dir"."$ex
1035                mkdir $rel_CDIR
1036                CDIR=`pwd`"/$rel_CDIR"
1037                test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1038                for ldir in input.$ex input ; do
1039                    (
1040                        cd "$dir/$ldir" > /dev/null 2>&1
1041                        ls -1 2>/dev/null \
1042                            | sed -e 's|^CVS$||g' | sed -e 's|^output.txt$||g'
1043                    ) > tr_exrun_links
1044                    (
1045                        cd "$dir/tr_run.$ex"
1046                        cat ../../tr_exrun_links | while read i ; do
1047                            if test ! "x$i" = x ; then
1048                                test ! -r $i  &&  ln -s "../"$ldir"/"$i $i
1049                            fi
1050                        done
1051                    )
1052                    test -e tr_exrun_links  &&  rm -f tr_exrun_links
1053                done
1054                ldir=build
1055                (
1056                    cd $dir/tr_run.$ex
1057                    test ! -e mitgcmuv  &&  ln -s "../"$ldir"/"mitgcmuv .
1058                )
1059                runmodel $dir/tr_run.$ex && run=Y \
1060                    && results=`testoutput $dir tr_run.$ex "."$ex`
1061                fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1062                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1063                fres="$fres.$ex"
1064                echo
1065                echo "$fres" >> $SUMMARY
1066                echo "fresults='$fres'" > $CDIR"/summary.txt"
1067                echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1068                echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1069                echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1070                echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1071            done
1072        else
1073            fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1074            fres=$fres"$results   $dir"
1075            echo
1076            echo "$fres" >> $SUMMARY
1077            echo "fresults='$fres'" > $CDIR"/summary.txt"
1078            echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1079            echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1080            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1081            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1082        fi
1083    
1084        postclean $dir/$builddir
1085            
1086      (      echo "-------------------------------------------------------------------------------"
         cd $DRESULTS  
         tar -cf $NDIR".tar" $DRESULTS"_"$NDIR > /dev/null 2>&1  
         gzip $NDIR".tar"  
     )  
1087            
1088      if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then  done
1089          echo "No mail sent"  
1090      else  printf "Start time:  " >> $SUMMARY
1091          $MPACK -s MITgcm-test -m 1000000 $DRESULTS"/"$NDIR".tar.gz" $ADDRESSES  echo $start_date >> $SUMMARY
1092    printf "End time:    " >> $SUMMARY
1093    date >> $SUMMARY
1094    
1095    #  If addresses were supplied and mpack built successfully, then try
1096    #  to send email using mpack.
1097    if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1098        echo "No results email was sent."
1099    else
1100        if test "x$HAVE_MPACK" = xt ; then
1101            tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1102                && gzip $DRESULTS".tar" \
1103                && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1104          RETVAL=$?          RETVAL=$?
1105          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1106              echo "Warning: \"$MPACK\" failed -- please contact <edhill@mitgcm.org>"              echo
1107                echo "Warning: The tar, gzip, & mpack step failed.  Please send email"
1108                echo "  to <MITgcm-support@mitgcm.org> for help.  You may copy the "
1109                echo "  summary of results from the directory \"$DRESULTS\"."
1110                echo
1111          else          else
1112              rm -f $DRESULTS"/"$NDIR".tar*"              echo
1113                echo "An email containing results was sent to the following addresses:"
1114                echo "  \"$ADDRESSES\""
1115                echo
1116          fi          fi
1117            test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"
1118            test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"
1119      fi      fi
1120    fi
1121    
1122      echo "-------------------------------------------------------------------------------"  # rm -f tmp_cmpnum.f a.out
1123        rm -f tmp_cmpnum.c tmp_cmpnum
     NDIR=$(( $NDIR + 1 ))  
       
 done  
1124    
1125  rm tmp_cmpnum.f a.out  if test "x$CLEANUP" != xt ; then
1126        cat $SUMMARY | sed 's/ -- -- -- --//g'
1127        if test -e tr_out.txt ; then
1128            mv tr_out.txt tr_out.txt.old
1129        fi
1130        cat $SUMMARY | sed 's/ -- -- -- --//g' > tr_out.txt
1131    fi
1132    
1133  cat $SUMMARY  if test "x$DELDIR" = xt ; then
1134        rm -rf $DRESULTS
1135    fi
1136    

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.75

  ViewVC Help
Powered by ViewVC 1.1.22