/[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.14 by edhill, Fri Nov 7 21:32:19 2003 UTC revision 1.80 by jmc, Thu Jun 8 21:39:35 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_adm.txt | awk '{print NR " " $5}' > t05.txt
185        grep $3 $1/$2/output_adm.txt | awk '{print NR " " $5}' > t15.txt
186        grep $3 $1/results_ad/output_adm.txt | awk '{print NR " " $6}' > t06.txt
187        grep $3 $1/$2/output_adm.txt | awk '{print NR " " $6}' > t16.txt
188        join t05.txt t15.txt > t5.txt
189        join t06.txt t16.txt > t6.txt
190        echo "-1" >> t5.txt
191        echo "-1" >> t6.txt
192        digits_5=`./tmp_cmpnum < t5.txt`
193        digits_6=`./tmp_cmpnum < t6.txt`
194        dashnum $digits_5 $digits_6
195        rm -f t[01][56].txt t[56].txt
196    }
197    
198    check_for_add_mon_output()
199    {
200        # Check for additional types of monitor output
201        if test "x$1" = x ; then
202            return
203        fi
204    
205        for ii in $PTRACERS_NUM ; do
206            eval "HAVE_PTR0"$ii"=f"
207        done
208    
209        ptr_add="trcstat_ptracerXX_min trcstat_ptracerXX_max"
210        ptr_add="$ptr_add trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
211        for ii in $PTRACERS_NUM ; do
212            for jj in $ptr_add ; do
213                name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
214                tst=`grep $name $1 | wc -l | awk '{print $1}'`
215                if test ! "x$tst" = x0 ; then
216                    eval "HAVE_PTR0"$ii"=t"
217                fi
218            done
219            #  eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"'
220        done
221    }
222    
223  testoutput()  testoutput()
224  {  {
225      # testoutput diretory subdir      # testoutput directory subdir extension
226      #      #
227      #  test output in "directory"      #  test output in "directory"
228        if test "x$ADM" = x ; then
229            if [ $debug -gt 0 ]; then
230                echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2
231            fi
232            testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2 $3; cg2dres=$?
233            if [ $debug -gt 0 ]; then
234                echo testoutput: cg2dres=$cg2dres 1>&2
235            fi
236            testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2 $3; tmin=$?
237            testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2 $3; tmax=$?
238            testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2 $3; tmean=$?
239            testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2 $3; tsd=$?
240            testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2 $3; smin=$?
241            testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2 $3; smax=$?
242            testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2 $3; smean=$?
243            testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2 $3; ssd=$?
244            testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2 $3; umin=$?
245            testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2 $3; umax=$?
246            testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2 $3; umean=$?
247            testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2 $3; usd=$?
248            testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2 $3; vmin=$?
249            testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2 $3; vmax=$?
250            testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2 $3; vmean=$?
251            testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2 $3; vsd=$?
252    
253            #  This is for PTRACERS
254            for ii in $PTRACERS_NUM ; do
255                eval `echo "p0"$ii"_min=99"`
256                eval `echo "p0"$ii"_max=99"`
257                eval `echo "p0"$ii"_mean=99"`
258                eval `echo "p0"$ii"_sd=99"`
259                tst=`eval 'echo "$HAVE_PTR0'$ii'"'`
260                #echo 'tst = '$tst
261                if test "x$tst" = xt ; then
262                    a="trcstat_ptracer0"
263                    testoutput_for_prop $1 "$a"$ii"_min"  "p0"$ii"_min"  $2 $3
264                    RETVAL=$? ; eval `echo "p0"$ii"_min="$RETVAL`
265                    testoutput_for_prop $1 "$a"$ii"_max"  "p0"$ii"_max"  $2 $3
266                    RETVAL=$? ; eval `echo "p0"$ii"_max="$RETVAL`
267                    testoutput_for_prop $1 "$a"$ii"_mean" "p0"$ii"_mean" $2 $3
268                    RETVAL=$? ; eval `echo "p0"$ii"_mean="$RETVAL`
269                    testoutput_for_prop $1 "$a"$ii"_sd"   "p0"$ii"_sd"   $2 $3
270                    RETVAL=$? ; eval `echo "p0"$ii"_sd="$RETVAL`
271                fi
272            done
273    
274      if [ $debug -gt 0 ]; then          allargs="$cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd"
275          echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2          allargs="$allargs $umin $umax $umean $usd $vmin $vmax $vmean $vsd"
276      fi          allargs="$allargs $p01_min $p01_max $p01_mean $p01_sd"
277      testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2; cg2dres=$?          allargs="$allargs $p02_min $p02_max $p02_mean $p02_sd"
278      if [ $debug -gt 0 ]; then          allargs="$allargs $p03_min $p03_max $p03_mean $p03_sd"
279          echo testoutput: cg2dres=$cg2dres 1>&2          allargs="$allargs $p04_min $p04_max $p04_mean $p04_sd"
280            allargs="$allargs $p05_min $p05_max $p05_mean $p05_sd"
281    
282            eval "dashnum $allargs"
283    
284        else
285            testoutput_ad $1 $2 "precision_grdchk_result"
286      fi      fi
     testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2; tmin=$?  
     testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2; tmax=$?  
     testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2; tmean=$?  
     testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2; tsd=$?  
     testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2; smin=$?  
     testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2; smax=$?  
     testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2; smean=$?  
     testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2; ssd=$?  
     testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2; umin=$?  
     testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2; umax=$?  
     testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2; umean=$?  
     testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2; usd=$?  
     testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2; vmin=$?  
     testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2; vmax=$?  
     testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2; vmean=$?  
     testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2; vsd=$?  
       
     dashnum $cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd \  
         $umin $umax $umean $usd $vmin $vmax $vmean $vsd  
287  }  }
288    
289  genmakemodel()  genmakemodel()
# Line 183  genmakemodel() Line 292  genmakemodel()
292      if test "x$NOGENMAKE" = xt ; then      if test "x$NOGENMAKE" = xt ; then
293          echo "genmake skipped!"          echo "genmake skipped!"
294      else      else
295          GENMAKE2="$BASH ../../../tools/genmake2"          if test "x$BASH" = x ; then
296                GENMAKE2="../../../tools/genmake2"
297            else
298                GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
299            fi
300          (          (
301              cd $1;              cd $1;
302              command="$GENMAKE2  -ds -m $MAKE --mods=../code"              command="$GENMAKE2  -ds -m $MAKE"
303                if test "x$ADM" = x ; then
304                    command="$command --mods=../code"
305                else
306                    command="$command --mods=../code_ad"
307                fi
308              if test "x$OPTFILE" != xNONE ; then              if test "x$OPTFILE" != xNONE ; then
309                  command="$command --optfile=$OPTFILE"                  command="$command --optfile=$OPTFILE"
                 # echo "  command=\"$command\""  
310              fi              fi
311              if test "x$IEEE" != x ; then              if test "x$IEEE" != x ; then
312                  command="$command -ieee"                  command="$command -ieee"
313              fi              fi
314              # echo "command: \"$command\""              if test "x$MPI" = xt ; then
315                    command="$command -mpi"
316                fi
317              printf 'genmake ... ' 1>&2              printf 'genmake ... ' 1>&2
318              $command > make.log 2>&1              $command > make.log 2>&1
319              RETVAL=$?              RETVAL=$?
320              for i in genmake_state genmake_optfile genmake_local Makefile ; do              #  Reduce the size of the testing emails!
321                  if test -r $i ; then              head -100 Makefile > $CDIR/Makefile_head
                     cp $i $CDIR  
                 fi  
             done  
322              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
323                  tail make.log                  tail make.log
324                  echo "genmakemodel: genmake failed" 1>&2                  echo "genmakemodel: genmake failed" 1>&2
325                  cp make.log $CDIR                  cp genmake_* make.log $CDIR
326                  return 1                  return 1
327              else              else
328                  echo "succesful" 1>&2                  echo "successful" 1>&2
329              fi              fi
330          )          )
331      fi      fi
# Line 237  makeclean() Line 353  makeclean()
353                      return 1                      return 1
354                  fi                  fi
355              fi              fi
356              echo succesful 1>&2              echo successful 1>&2
357                exit 0
358            )
359        fi
360    }
361    
362    postclean()
363    {
364        # postclean directory
365        if test "x$POSTCLEAN" = xt ; then
366            (
367                cd $1;
368                if test -r Makefile ; then
369                    $MAKE CLEAN >> /dev/null 2>&1
370                fi
371              exit 0              exit 0
372          )          )
373      fi      fi
# Line 260  makedependmodel() Line 390  makedependmodel()
390                  cp make.log $CDIR"/make.log"                  cp make.log $CDIR"/make.log"
391                  return 1                  return 1
392              else              else
393                  echo succesful 1>&2                  echo successful 1>&2
394              fi              fi
395          )          )
396      fi      fi
# Line 273  makemodel() Line 403  makemodel()
403          cd $1;          cd $1;
404          if test -r Makefile ; then          if test -r Makefile ; then
405              printf 'make ... ' 1>&2              printf 'make ... ' 1>&2
406              $MAKE >> make.log 2>&1              if test "x$ADM" = x ; then
407                    if test "x$JOBS" = x ; then
408                        $MAKE >> make.log 2>&1
409                    else
410                        $MAKE -j $JOBS >> make.log 2>&1
411                    fi
412                else
413                    $MAKE adall >> make.log 2>&1
414                fi
415              RETVAL=$?              RETVAL=$?
416              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
417                  tail make.log                  tail make.log
# Line 281  makemodel() Line 419  makemodel()
419                  cp make.log $CDIR"/make.log"                  cp make.log $CDIR"/make.log"
420                  return 1                  return 1
421              else              else
422                  echo succesful 1>&2                  echo successful 1>&2
423              fi              fi
424          fi          fi
425      )      )
426  }  }
427    
428    symlink_mpifiles()
429    {
430        # Put special links so that MPI specific files are used
431        # This MUST be invoked between makeclean and makelinks because
432        # the Makefile will link to non-mpi files by default
433    
434        dir=$1
435        code_dir=$2
436        BUILD_DIR=$dir/$3
437        CODE_DIR=$dir/$code_dir
438        
439        # These are files that should replace their counter-part when using -mpi
440        MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`
441    
442        #  Is this an MPI run?
443        if test "x$MPI" = xt ; then
444            # YES: We symbolically link these files to the build
445            # dir so long as there is no real file in place
446            for ii in $MPI_FILES ; do
447                i=`echo $ii | sed 's:^\./::'`
448                name=`echo $i | sed 's:_mpi::' `
449                cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1
450                RETVAL=$?
451                if test "x$RETVAL" != x0 ; then
452                    if ! test -f $BUILD_DIR/$i ; then
453                        #echo Linking $name to $i
454                        (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
455                    fi
456                fi
457            done
458        else
459            # NO: We undo any _mpi symbolically linked files
460            for ii in $MPI_FILES ; do
461                i=`echo $ii | sed 's:^\./::'`
462                name=`echo $i | sed 's:_mpi::' `
463                if test -L $BUILD_DIR/$name ; then
464                    cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
465                    RETVAL=$?
466                    if test "x$RETVAL" = x0 ; then
467                        #echo Un-linking $name from $linktarg
468                        rm -f $BUILD_DIR/$name
469                    fi
470                fi
471            done
472        fi
473        
474    }
475    
476  linkdata()  linkdata()
477  {  {
478      # linkdata flag      # linkdata flag
# Line 295  linkdata() Line 481  linkdata()
481      if test "x$1" = x1 ; then      if test "x$1" = x1 ; then
482          (          (
483              cd $2              cd $2
484              files=`( cd ../input ; ls -1 | grep -v CVS )`              if test "x$ADM" = x ; then
485              for i in $files ; do                  files=`( cd ../input ; ls -1 | grep -v CVS )`
486                  if test ! -d "../input/"$i ; then                  for i in $files ; do
487                      ln -sf "../input/"$i $i                      if test ! -d "../input/"$i -a ! -f $i ; then
488                  fi                          ln -sf "../input/"$i $i
489              done                      fi
490                    done
491                else
492                    files=`( cd ../input_ad ; ls -1 | grep -v CVS )`
493                    for i in $files ; do
494                        if test ! -d "../input_ad/"$i ; then
495                            ln -sf "../input_ad/"$i $i
496                        fi
497                    done
498                    files=`( cd ../input ; ls -1 | grep -v CVS )`
499                    for i in $files ; do
500                        if test ! -d "../input/"$i ; then
501                         if test ! -r $i  ; then
502                            ln -sf "../input/"$i $i
503                         fi
504                        fi
505                    done
506                fi
507          )          )
508      fi      fi
509  }  }
# Line 309  runmodel() Line 512  runmodel()
512  {  {
513      # runmodel directory      # runmodel directory
514      #      #
515      #  runs "$COMMAND" in "directory"      #  runs "$COMMAND in "directory"
516      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
517      (      (
518          cd $1          cd $1
519          printf 'runmodel: ' 1>&2          printf 'runmodel in %s ...' $1 1>&2
520          # make output.txt          # make output.txt
521          $COMMAND          echo
522          RETVAL=$?          rm -f run.log
523            if test $OUTPUTFILE -ot $EXECUTABLE ; then
524               ( eval $COMMAND ) > run.log 2>&1
525               RETVAL=$?
526            else
527               echo " $OUTPUTFILE is up to date " > run.log 2>&1
528               RETVAL=0
529            fi
530            # echo "COMMAND='$COMMAND'"
531            # echo "pwd='"`pwd`"'"
532          if test "x$RETVAL" = x0 ; then          if test "x$RETVAL" = x0 ; then
533              cp output.txt $CDIR"/output.txt"              tail run.log
534                echo successful 1>&2
535                # === Reduce the size of the testing emails!
536                # if test "x$ADM" = x ; then
537                #   cp output.txt $CDIR"/output.txt"
538                # else
539                #   cp output_adm.txt $CDIR"/output_adm.txt"
540                # fi
541                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
542              return 0              return 0
543          else          else
544                tail run.log
545                echo failed 1>&2
546                cp run.log $CDIR"/run.log"
547                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
548              return 1              return 1
549          fi          fi
550      )      )
# Line 330  createcodelet() Line 554  createcodelet()
554  {  {
555      # create codelet for comparing model output      # create codelet for comparing model output
556    
557      echo -n "creating the comparison code...  "      printf "creating the comparison code...  "
558      cat > tmp_cmpnum.f <<EOFA      cat > tmp_cmpnum.c <<EOF
559        program cmpnum  #include <stdio.h>
560        implicit none  #include <math.h>
561        real*8 a,b,diff  int main( int argc, char** argv )  {
562        integer linnum,best    int linnum,best,lncnt;
563        best=-16    double a,b,abave,relerr;
564    99  read(*,*,end=70,err=60) linnum,a,b    best = -22;
565        diff=0.5*(abs(a)+abs(b))    lncnt = 0;
566  c     print *,a,b,diff,abs(a-b)/diff    while( 1 & (lncnt+=1) < 999 )  {
567        if (diff.gt.1.e-12) then      scanf("%d", &linnum);
568          diff=abs(a-b)/diff      if (linnum == -1)  break;
569          if (diff.gt.0.) then      scanf("%lf", &a);  scanf("%lf", &b);
570  c         print *,int(log10(diff)),diff      abave = 0.5*(fabs(a)+fabs(b));
571            linnum=int(log10(diff))      if (abave > 0.0) {
572            best=max(best,linnum)        relerr=fabs(a-b)/abave;
573          endif        if (relerr > 0.0) { linnum = (int)rint(log10(relerr)); }
574        else        else { linnum = -16 ; }
575          if (best.eq.-16.and.diff.ne.0.) best=-22        best = (best > linnum) ? best : linnum;
576        endif      }
577        goto 99    }
578    60  stop 'cmpnum: An error occured reading a,b'    if (lncnt == 999) best=-29;
579    70  print *,-best    printf("%d\n", -best);
580        end    return 0;
581  EOFA  }
582    EOF
583        $CC -o tmp_cmpnum tmp_cmpnum.c -lm
584    
585      f77 tmp_cmpnum.f      if [ -x ./tmp_cmpnum ]; then
     if [ -x ./a.out ]; then  
586          echo "OK"          echo "OK"
587          return 0          return 0
588      else      else
589          echo          echo
590          echo "createcodelet: failed to compile codelet"          echo "ERROR: failed to compile comparison code -- please specify"
591            echo "  a C compiler using the CC environment variable."
592          exit 1          exit 1
593      fi      fi
594  }  }
# Line 422  scandirs() Line 648  scandirs()
648    
649    
650  ###############################################################################  ###############################################################################
 ###############################################################################  
 ###############################################################################  
651    
652    
653  #  Default properties  #  Default properties
# Line 433  clean=0 Line 657  clean=0
657  expts=''  expts=''
658  # ieee=1  # ieee=1
659    
660  IEEE=  IEEE=true
661  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
662      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
663  fi  fi
# Line 444  QUICK=f Line 668  QUICK=f
668  NOGENMAKE=f  NOGENMAKE=f
669  NOCLEAN=f  NOCLEAN=f
670  NODEPEND=f  NODEPEND=f
671    POSTCLEAN=f
672    
673  BASH=  BASH=
674  OPTFILE=NONE  OPTFILE=NONE
675  ADDRESSES=  ADDRESSES=
676  TESTDIRS=  TESTDIRS=
677  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
678    HAVE_MPACK=
679  MPACK="$MPACKDIR/mpack"  MPACK="$MPACKDIR/mpack"
680  COMMAND="make output.txt"  COMMAND=
681  MAKE=make  if test "x$MAKE" = x ; then
682        MAKE=make
683    fi
684    if test "x$CC" = x ; then
685        CC=cc
686    fi
687    JOBS=
688  MPI=f  MPI=f
689    OUTDIR=
690    DELDIR=
691    
692    ADM=
693    
694  echo -n "parsing options...  "  # Additional monitor types
695    PTRACERS_NUM="1 2 3 4 5"
696    
697    printf "parsing options...  "
698    
699  ac_prev=  ac_prev=
700  for ac_option ; do  for ac_option ; do
# Line 504  for ac_option ; do Line 743  for ac_option ; do
743          -make=* | --make=*)          -make=* | --make=*)
744              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
745    
746            -odir | --odir)
747                ac_prev=OUTDIR ;;
748            -odir=* | --odir=*)
749                OUTDIR=$ac_optarg ;;
750    
751            -ptracers | --ptracers | -ptr | --ptr)
752                ac_prev=PTRACERS_NUM ;;
753            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
754                PTRACERS_NUM=$ac_optarg ;;
755    
756            -j) ac_prev=JOBS ;;
757            -j=*) JOBS=$ac_optarg ;;
758    
759          -clean | --clean)          -clean | --clean)
760              CLEANUP=t ;;              CLEANUP=t ; DELDIR=t ;;
761    
762          -quick | --quick | -q | --q)          -quick | --quick | -q | --q)
763              QUICK=t ;;              QUICK=t ;;
# Line 516  for ac_option ; do Line 768  for ac_option ; do
768          -nodepend | --nodepend | -nd | --nd)          -nodepend | --nodepend | -nd | --nd)
769              NODEPEND=t ;;              NODEPEND=t ;;
770    
771          -mpi) MPI=true ;;          -postclean | --postclean | -pc | --pc)
772                POSTCLEAN=t ;;
773    
774            -mpi) MPI=t ;;
775    
776            -adm | -ad) ADM=t ;;
777    
778          -ieee) IEEE=true ;;          -ieee) IEEE=true ;;
779          -noieee) IEEE= ;;          -noieee) IEEE= ;;
# Line 525  for ac_option ; do Line 782  for ac_option ; do
782          -debug) debug=1 ;;          -debug) debug=1 ;;
783          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
784    
785            -deldir | -dd) DELDIR=t ;;
786    
787          -*)          -*)
788              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
789              usage              usage
# Line 553  if test "x$OPTFILE" = xNONE -a "x$MITGCM Line 812  if test "x$OPTFILE" = xNONE -a "x$MITGCM
812      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
813  fi  fi
814    
815  echo "OK"  if test "x$ADM" = xt ; then
816        EXECUTABLE="mitgcmuv_ad"
817        OUTPUTFILE="output_adm.txt"
818    else
819        EXECUTABLE="mitgcmuv"
820        OUTPUTFILE="output.txt"
821    fi
822    
823    if test "x$ADM" = xt -a "x$COMMAND" = x ; then
824        COMMAND="./$EXECUTABLE > $OUTPUTFILE"
825    fi
826    
827    if test "x$COMMAND" = x ; then
828        COMMAND="./$EXECUTABLE > $OUTPUTFILE"
829    fi
830    
831    #echo "OK"
832    echo "OK (COMMAND= $COMMAND )"
833    
834  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
835  createcodelet  createcodelet
836    
837  #  build the mpack utility  #  build the mpack utility
838  build_mpack  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
839        echo "skipping mpack build"
840    else
841        build_mpack
842    fi
843    
844  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
845  MACH=`hostname`  MACH=`hostname`
846  UNAMEA=`uname -a`  UNAMEA=`uname -a`
847  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
848  BASE=$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
849    if test "x$OUTDIR" != x ; then
850        BASE="tr_"$OUTDIR"_"$DATE"_"
851    fi
852  DNUM=0  DNUM=0
853  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
854  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 575  done Line 858  done
858  mkdir $DRESULTS  mkdir $DRESULTS
859  RETVAL=$?  RETVAL=$?
860  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
861      echo "Error: can't create results directory \"./$DRESULTS\""      echo "ERROR: Can't create results directory \"./$DRESULTS\""
862      exit 1      exit 1
863  fi  fi
864  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
865  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
866  date > $SUMMARY  start_date=`date`
867  date > dfile  echo $start_date > $SUMMARY
 cat << EOF >> $SUMMARY  
                 T           S           U           V  
 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  
868    
869  of_path=  of_path=
870  if test "x$OPTFILE" != xNONE ; then  if test "x$OPTFILE" != xNONE ; then
# Line 605  if test "x$OPTFILE" != xNONE ; then Line 878  if test "x$OPTFILE" != xNONE ; then
878          fi          fi
879          file=${OPTFILE##*/}          file=${OPTFILE##*/}
880          OPTFILE=$of_path/$file          OPTFILE=$of_path/$file
881            cp $OPTFILE $DRESULTS
882            echo >> $SUMMARY
883            echo "  OPTFILE=$OPTFILE" >> $SUMMARY
884      else      else
885          echo          echo | tee $SUMMARY
886          echo "WARNING: can't read OPTFILE=\"$OPTFILE\" but will try to use it..."          echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
887            exit 1
888      fi      fi
889    else
890        echo >> $SUMMARY
891        echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
892        echo "   so the genmake default will be used." >> $SUMMARY
893  fi  fi
894  echo  echo
 echo "OPTFILE=$OPTFILE" >> $SUMMARY  
895  echo >> $SUMMARY  echo >> $SUMMARY
896    if test "x$ADM" = x ; then
897        line_0="            ----T-----  ----S-----  ----U-----  ----V-----"
898        line_1="G D M    c        m  s        m  s        m  s        m  s"
899        line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
900        line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
901        line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
902        for ii in $PTRACERS_NUM ; do
903            #  tst=`eval 'echo $HAVE_PTR0'$ii`
904            #  if test "x$tst" = xt ; then
905            line_0="$line_0  --PTR 0"$ii"--"
906            line_1="$line_1        m  s"
907            line_2="$line_2  m  m  e  ."
908            line_3="$line_3  i  a  a  d"
909            line_4="$line_4  n  x  n  ."
910            #  fi
911        done
912        echo "$line_0" | tee -a $SUMMARY
913        echo "$line_1" | tee -a $SUMMARY
914        echo "$line_2" | tee -a $SUMMARY
915        echo "$line_3" | tee -a $SUMMARY
916        echo "$line_4" | tee -a $SUMMARY
917        echo " "       | tee -a $SUMMARY
918    else
919        echo "ADJOINT=true" >> $SUMMARY
920        echo >> $SUMMARY
921        cat << EOF | tee -a $SUMMARY
922    G D M    C  G
923    E p a R  o  r
924    N n k u  s  a
925    2 d e n  t  d
926    
927    EOF
928    fi
929    
930  #  ...and each test directory...  #  ...and each test directory...
931  for dir in $TESTDIRS ; do  for dir in $TESTDIRS ; do
# Line 625  for dir in $TESTDIRS ; do Line 938  for dir in $TESTDIRS ; do
938          if test -r $dir/input/Makefile ; then          if test -r $dir/input/Makefile ; then
939              ( cd $dir/input ; make CLEAN )              ( cd $dir/input ; make CLEAN )
940          fi          fi
941            (
942                cd $dir
943                rm -rf tr_run.*
944            )
945          continue          continue
946      fi      fi
947    
948      #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
949      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
950      if test ! -r $dir"/results/output.txt" ; then      fout=
951          echo "can't read \"$dir/results/output.txt\" -- skipping $dir"      if test "x$ADM" = x ; then
952            fout=$dir"/results/output.txt"
953        else
954            fout=$dir"/results_ad/output_adm.txt"
955        fi
956        if test ! -r $fout ; then
957            echo "can't read \"$fout\" -- skipping $dir"
958          continue          continue
959      fi      fi
960        if test "x$ADM" = x ; then
961            check_for_add_mon_output  $fout
962        fi
963    
964      echo "-------------------------------------------------------------------------------"      # Check for additional types of monitor output
     echo  
     echo "Experiment:  $dir"  
     echo  
     unset genmake makedepend make run  
     results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'  
965    
966      builddir="input"      builddir="input"
967      rundir="input"      rundir="input"
# Line 652  for dir in $TESTDIRS ; do Line 973  for dir in $TESTDIRS ; do
973          linkdata $use_seperate_build $dir/$rundir          linkdata $use_seperate_build $dir/$rundir
974      fi      fi
975            
976      CODE_DIR=$dir/code      #  Check whether there are "extra runs" for this testdir
977      BUILD_DIR=$dir/$builddir      extra_runs=
978      MPI_FILES="CPP_EEOPTIONS.h_mpi SIZE.h_mpi"      if test "x$ADM" = x -a "x$use_seperate_build" = x1 ; then
979      NOMPI_FILES="CPP_EEOPTIONS.h_nompi SIZE.h_nompi"          ex_run_dirs=`( cd $dir ; echo input.* )`
980            echo "ex_run_dirs='$ex_run_dirs'"
981            for exd in $ex_run_dirs ; do
982                name=`echo $exd | sed -e 's/input.//g'`
983                outf="$dir/results/output.txt.$name"
984                if test -f $outf -a -r $outf ; then
985                    extra_runs="$extra_runs $name"
986                fi
987            done
988        fi
989    
990      #  Is this an MPI run?      if test "x$ADM" = x ; then
991      if test "x$MPI" = xt ; then          code_dir=code
992          FILES=$MPI_FILES          CODE_DIR=$dir/code
         endings="_mpi"  
993      else      else
994          FILES=$NOMPI_FILES          code_dir=code_ad
995          endings="_nompi"          CODE_DIR=$dir/code_ad
996      fi      fi
997            BUILD_DIR=$dir/$builddir
998      #  Check to see that we have the files  
999      have_files=t      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1000      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)"  
1001          continue          continue
1002      fi      fi
1003        
1004      #  If we have the $FILES and they differ, copy the $FILES to $BUILD_DIR      echo "-------------------------------------------------------------------------------"
1005      if test "x$have_files" = xt ; then      echo
1006          for i in $FILES ; do      echo "Experiment:  $dir"
1007              sstr="s|$endings||"      echo
1008              name=`echo $i | sed -e $sstr `      unset genmake makedepend make run
1009              cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1010              RETVAL=$?  
             if test "x$RETVAL" != x0 ; then  
                 cp $CODE_DIR/$i $BUILD_DIR/$name  
             fi  
         done  
     fi  
       
1011      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1012      CDIR=$DRESULTS"/"$DRESULTS"_"$NDIR      rel_CDIR=$DRESULTS"/"$dir
1013      mkdir $CDIR      mkdir $rel_CDIR
1014      CDIR=`pwd`"/$CDIR"      CDIR=`pwd`"/$rel_CDIR"
1015            
1016      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1017          makeclean $dir/$builddir          makeclean $dir/$builddir
1018      else      else
1019          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1020              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1021                && symlink_mpifiles $dir $code_dir $builddir \
1022              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1023              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1024              && linkdata $use_seperate_build $dir/$rundir \              && linkdata $use_seperate_build $dir/$rundir \
# Line 710  for dir in $TESTDIRS ; do Line 1027  for dir in $TESTDIRS ; do
1027      fi      fi
1028            
1029      echo      echo
1030      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \      if test "x$ADM" = x ; then
1031          ${run:-N} $results          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1032      echo          echo
1033      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          echo "$fres" >> $SUMMARY
1034          ${run:-N} $results >> $SUMMARY          echo "fresults='$fres'" > $CDIR"/summary.txt"
1035      echo "fresults='" > $CDIR"/summary.txt"          echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1036      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1037          ${run:-N} $results >> $CDIR"/summary.txt"          echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1038      echo "'" >> $CDIR"/summary.txt"          echo "tdir='$dir'" >> $CDIR"/summary.txt"
1039      echo "MACH='$MACH'" >> $CDIR"/summary.txt"  
1040      echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"          for ex in $extra_runs ; do
1041      echo "DATE='$DATE'" >> $CDIR"/summary.txt"              unset run
1042      echo "tdir='$dir'" >> $CDIR"/summary.txt"              results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1043                    #  Create an output dir for each OPTFILE/tdir.ex combination
1044      (              rel_CDIR=$DRESULTS"/"$dir"."$ex
1045          cd $DRESULTS              mkdir $rel_CDIR
1046          tar -cf $NDIR".tar" $DRESULTS"_"$NDIR > /dev/null 2>&1              CDIR=`pwd`"/$rel_CDIR"
1047          gzip $NDIR".tar"              test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1048      )              for ldir in input.$ex input ; do
1049                        (
1050      if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then                      cd "$dir/$ldir" > /dev/null 2>&1
1051          echo "No mail sent"                      ls -1 2>/dev/null \
1052                            | sed -e 's|^CVS$||g' | sed -e 's|^output.txt$||g'
1053                    ) > tr_exrun_links
1054                    (
1055                        cd "$dir/tr_run.$ex"
1056                        cat ../../tr_exrun_links | while read i ; do
1057                            if test ! "x$i" = x ; then
1058                                test ! -r $i  &&  ln -s "../"$ldir"/"$i $i
1059                            fi
1060                        done
1061                    )
1062                    test -e tr_exrun_links  &&  rm -f tr_exrun_links
1063                done
1064                ldir=build
1065                (
1066                    cd $dir/tr_run.$ex
1067                    test ! -e mitgcmuv  &&  ln -s "../"$ldir"/"mitgcmuv .
1068                )
1069                runmodel $dir/tr_run.$ex && run=Y \
1070                    && results=`testoutput $dir tr_run.$ex "."$ex`
1071                fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1072                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1073                fres="$fres.$ex"
1074                echo
1075                echo "$fres" >> $SUMMARY
1076                echo "fresults='$fres'" > $CDIR"/summary.txt"
1077                echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1078                echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1079                echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1080                echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1081            done
1082      else      else
1083          $MPACK -s MITgcm-test -m 1000000 $DRESULTS"/"$NDIR".tar.gz" $ADDRESSES          fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1084          RETVAL=$?          fres=$fres"$results   $dir"
1085          if test "x$RETVAL" != x0 ; then          echo
1086              echo "Warning: \"$MPACK\" failed -- please contact <edhill@mitgcm.org>"          echo "$fres" >> $SUMMARY
1087          else          echo "fresults='$fres'" > $CDIR"/summary.txt"
1088              rm -f $DRESULTS"/"$NDIR".tar*"          echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1089          fi          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1090            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1091            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1092            grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1093                               >> $CDIR"/summary.txt"
1094      fi      fi
1095    
1096      echo "-------------------------------------------------------------------------------"      postclean $dir/$builddir
1097            
1098      NDIR=$(( $NDIR + 1 ))      echo "-------------------------------------------------------------------------------"
1099            
1100  done  done
1101    
1102  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1103  date -r dfile >> $SUMMARY  echo $start_date >> $SUMMARY
1104  echo -n "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
1105  date >> $SUMMARY  date >> $SUMMARY
1106    
1107  rm tmp_cmpnum.f a.out dfile  #  If addresses were supplied and mpack built successfully, then try
1108    #  to send email using mpack.
1109    if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1110        echo "No results email was sent."
1111    else
1112        if test "x$HAVE_MPACK" = xt ; then
1113            tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1114                && gzip $DRESULTS".tar" \
1115                && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1116            RETVAL=$?
1117            if test "x$RETVAL" != x0 ; then
1118                echo
1119                echo "Warning: The tar, gzip, & mpack step failed.  Please send email"
1120                echo "  to <MITgcm-support@mitgcm.org> for help.  You may copy the "
1121                echo "  summary of results from the directory \"$DRESULTS\"."
1122                echo
1123            else
1124                echo
1125                echo "An email containing results was sent to the following addresses:"
1126                echo "  \"$ADDRESSES\""
1127                echo
1128            fi
1129            test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"
1130            test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"
1131        fi
1132    fi
1133    
1134    # rm -f tmp_cmpnum.f a.out
1135    rm -f tmp_cmpnum.c tmp_cmpnum
1136    
1137  if test "x$CLEANUP" != xt ; then  if test "x$CLEANUP" != xt ; then
1138      cat $SUMMARY      cat $SUMMARY | sed 's/ -- -- -- --//g'
1139      if test -e tr.out ; then      if test -e tr_out.txt ; then
1140          mv tr.out tr.out.old          mv tr_out.txt tr_out.txt.old
1141      fi      fi
1142      cat $SUMMARY > tr.out      cat $SUMMARY | sed 's/ -- -- -- --//g' > tr_out.txt
1143    fi
1144    
1145    if test "x$DELDIR" = xt ; then
1146        rm -rf $DRESULTS
1147  fi  fi
1148    

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.80

  ViewVC Help
Powered by ViewVC 1.1.22