/[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.9.2.8 by edhill, Sat Oct 4 02:10:52 2003 UTC revision 1.82 by jmc, Sun Jun 18 21:20:51 2006 UTC
# Line 1  Line 1 
1  #!/bin/bash  #! /usr/bin/env bash
2  #  #
3  #  $Header$  #  $Header$
4    #  $Name$
5  #  #
6    
7  usage()  usage()
# Line 11  usage() Line 12  usage()
12      echo "where possible OPTIONS are:"      echo "where possible OPTIONS are:"
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"
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          fi
67          echo -n "building mpack...  "          printf "building mpack...  "
68          ( cd $MPACKDIR && ./configure && $MAKE ) > build_mpack.out 2>&1          if test "x$CC" = x ; then
69                export CC=cc
70            fi
71            ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1
72          RETVAL=$?          RETVAL=$?
73          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
74              echo              echo
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 79  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 92  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 109  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 121  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 141  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 182  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              printf 'genmake ... ' 1>&2              command="$GENMAKE2  -ds -m $MAKE"
303              command="$GENMAKE2  -ds -m $MAKE --mods=../code"              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
312                    command="$command -ieee"
313                fi
314                if test "x$MPI" = xt ; then
315                    command="$command -mpi"
316                fi
317                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 232  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 255  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 268  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 276  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
479      #      #
480      # symbolically link data files to run directory      # symbolically link data files to run directory
481      if [ $1 -ne 0 ]; then      if test "x$1" = x1 ; then
482          ( cd $2 ;  ln -sf ../input/* . )          (
483                cd $2
484                if test "x$ADM" = x ; then
485                    files=`( cd ../input ; ls -1 | grep -v CVS )`
486                    for i in $files ; do
487                        if test ! -d "../input/"$i -a ! -f $i ; then
488                            ln -sf "../input/"$i $i
489                        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                    if test -d "../input" ; then
499                      files=`( cd ../input ; ls -1 | grep -v CVS )`
500                      for i in $files ; do
501                        if test ! -d "../input/"$i ; then
502                         if test ! -r $i  ; then
503                            ln -sf "../input/"$i $i
504                         fi
505                        fi
506                      done
507                    fi
508                fi
509            )
510      fi      fi
511  }  }
512    
# Line 296  runmodel() Line 514  runmodel()
514  {  {
515      # runmodel directory      # runmodel directory
516      #      #
517      #  runs "$COMMAND" in "directory"      #  runs "$COMMAND in "directory"
518      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
519      (      (
520          cd $1          cd $1
521          printf 'runmodel: ' 1>&2          printf 'runmodel in %s ...' $1 1>&2
522          # make output.txt          # make output.txt
523          $COMMAND          echo
524          RETVAL=$?          rm -f run.log
525            if test $OUTPUTFILE -ot $EXECUTABLE ; then
526               ( eval $COMMAND ) > run.log 2>&1
527               RETVAL=$?
528            else
529               echo " $OUTPUTFILE is up to date " > run.log 2>&1
530               RETVAL=0
531            fi
532            # echo "COMMAND='$COMMAND'"
533            # echo "pwd='"`pwd`"'"
534          if test "x$RETVAL" = x0 ; then          if test "x$RETVAL" = x0 ; then
535              cp output.txt $CDIR"/output.txt"              tail run.log
536                echo successful 1>&2
537                # === Reduce the size of the testing emails!
538                # if test "x$ADM" = x ; then
539                #   cp output.txt $CDIR"/output.txt"
540                # else
541                #   cp output_adm.txt $CDIR"/output_adm.txt"
542                # fi
543                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
544              return 0              return 0
545          else          else
546                tail run.log
547                echo failed 1>&2
548                cp run.log $CDIR"/run.log"
549                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
550              return 1              return 1
551          fi          fi
552      )      )
# Line 317  createcodelet() Line 556  createcodelet()
556  {  {
557      # create codelet for comparing model output      # create codelet for comparing model output
558    
559      echo -n "creating the comparison code...  "      printf "creating the comparison code...  "
560      cat > tmp_cmpnum.f <<EOFA      cat > tmp_cmpnum.c <<EOF
561        program cmpnum  #include <stdio.h>
562        implicit none  #include <math.h>
563        real*8 a,b,diff  int main( int argc, char** argv )  {
564        integer linnum,best    int linnum,best,lncnt;
565        best=-16    double a,b,abave,relerr;
566    99  read(*,*,end=70,err=60) linnum,a,b    best = -22;
567        diff=0.5*(abs(a)+abs(b))    lncnt = 0;
568  c     print *,a,b,diff,abs(a-b)/diff    while( 1 & (lncnt+=1) < 999 )  {
569        if (diff.gt.1.e-12) then      scanf("%d", &linnum);
570          diff=abs(a-b)/diff      if (linnum == -1)  break;
571          if (diff.gt.0.) then      scanf("%lf", &a);  scanf("%lf", &b);
572  c         print *,int(log10(diff)),diff      abave = 0.5*(fabs(a)+fabs(b));
573            linnum=int(log10(diff))      if (abave > 0.0) {
574            best=max(best,linnum)        relerr=fabs(a-b)/abave;
575          endif        if (relerr > 0.0) { linnum = (int)rint(log10(relerr)); }
576        else        else { linnum = -16 ; }
577          if (best.eq.-16.and.diff.ne.0.) best=-22        best = (best > linnum) ? best : linnum;
578        endif      }
579        goto 99    }
580    60  stop 'cmpnum: An error occured reading a,b'    if (lncnt == 999) best=-29;
581    70  print *,-best    printf("%d\n", -best);
582        end    return 0;
583  EOFA  }
584    EOF
585        $CC -o tmp_cmpnum tmp_cmpnum.c -lm
586    
587      f77 tmp_cmpnum.f      if [ -x ./tmp_cmpnum ]; then
     if [ -x ./a.out ]; then  
588          echo "OK"          echo "OK"
589          return 0          return 0
590      else      else
591          echo          echo
592          echo "createcodelet: failed to compile codelet"          echo "ERROR: failed to compile comparison code -- please specify"
593            echo "  a C compiler using the CC environment variable."
594          exit 1          exit 1
595      fi      fi
596  }  }
# Line 388  $0 [-help] [-quick] [-verbose] dir1 [dir Line 629  $0 [-help] [-quick] [-verbose] dir1 [dir
629   -debug     Produce even more output which will mean nothing to most   -debug     Produce even more output which will mean nothing to most
630   -force     Do "make CLEAN" before compiling. This forces a complete rebuild.   -force     Do "make CLEAN" before compiling. This forces a complete rebuild.
631   -clean     Do "make CLEAN" after compiling and testing.   -clean     Do "make CLEAN" after compiling and testing.
  -noieee    By default, $0 uses the -ieee option for genmake. This turns it off.  
632   -cleanup   Aggresively removes all model output, executables and object files   -cleanup   Aggresively removes all model output, executables and object files
633              and then exits. Use with care.              and then exits. Use with care.
634    
# Line 399  EOF Line 639  EOF
639    
640  scandirs()  scandirs()
641  {  {
642      if [ $# -eq 0 ]; then      if [ $# -eq 1 ]; then
643          for arg in * ; do          for arg in * ; do
644              test -d $arg/input && echo $arg              test -d $arg/$1 && echo $arg
645          done          done
646      else      else
647          echo $*          echo $*
648      fi      fi
649  }  }
650    
651    
652  ###############################################################################  ###############################################################################
 ###############################################################################  
 ###############################################################################  
653    
654    
655  #  Default properties  #  Default properties
# Line 421  clean=0 Line 659  clean=0
659  expts=''  expts=''
660  # ieee=1  # ieee=1
661    
662    IEEE=true
663    if test "x$MITGCM_IEEE" != x ; then
664        IEEE=$MITGCM_IEEE
665    fi
666    
667    
668  CLEANUP=f  CLEANUP=f
669  QUICK=f  QUICK=f
670  NOGENMAKE=f  NOGENMAKE=f
671  NOCLEAN=f  NOCLEAN=f
672  NODEPEND=f  NODEPEND=f
673    POSTCLEAN=f
674    
675  BASH=  BASH=
676  OPTFILE=NONE  OPTFILE=NONE
677  ADDRESSES=  ADDRESSES=
678  TESTDIRS=  TESTDIRS=
679  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
680    HAVE_MPACK=
681  MPACK="$MPACKDIR/mpack"  MPACK="$MPACKDIR/mpack"
682  COMMAND="make output.txt"  COMMAND=
683  MAKE=make  if test "x$MAKE" = x ; then
684        MAKE=make
685    fi
686    if test "x$CC" = x ; then
687        CC=cc
688    fi
689    JOBS=
690  MPI=f  MPI=f
691    OUTDIR=
692    DELDIR=
693    
694  echo -n "parsing options...  "  ADM=
695    
696    # Additional monitor types
697    PTRACERS_NUM="1 2 3 4 5"
698    
699    printf "parsing options...  "
700    
701  ac_prev=  ac_prev=
702  for ac_option ; do  for ac_option ; do
# Line 486  for ac_option ; do Line 745  for ac_option ; do
745          -make=* | --make=*)          -make=* | --make=*)
746              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
747    
748            -odir | --odir)
749                ac_prev=OUTDIR ;;
750            -odir=* | --odir=*)
751                OUTDIR=$ac_optarg ;;
752    
753            -ptracers | --ptracers | -ptr | --ptr)
754                ac_prev=PTRACERS_NUM ;;
755            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
756                PTRACERS_NUM=$ac_optarg ;;
757    
758            -j) ac_prev=JOBS ;;
759            -j=*) JOBS=$ac_optarg ;;
760    
761          -clean | --clean)          -clean | --clean)
762              CLEANUP=t ;;              CLEANUP=t ; DELDIR=t ;;
763    
764          -quick | --quick | -q | --q)          -quick | --quick | -q | --q)
765              QUICK=t ;;              QUICK=t ;;
# Line 498  for ac_option ; do Line 770  for ac_option ; do
770          -nodepend | --nodepend | -nd | --nd)          -nodepend | --nodepend | -nd | --nd)
771              NODEPEND=t ;;              NODEPEND=t ;;
772    
773            -postclean | --postclean | -pc | --pc)
774                POSTCLEAN=t ;;
775    
776          -mpi) MPI=t ;;          -mpi) MPI=t ;;
777    
778            -adm | -ad) ADM=t ;;
779    
780            -ieee) IEEE=true ;;
781            -noieee) IEEE= ;;
782    
783          -verbose) verbose=2 ;;          -verbose) verbose=2 ;;
784          -debug) debug=1 ;;          -debug) debug=1 ;;
785          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
786    
787            -deldir | -dd) DELDIR=t ;;
788    
789          -*)          -*)
790              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
791              usage              usage
# Line 524  if test "x$QUICK" = xt ; then Line 807  if test "x$QUICK" = xt ; then
807  fi  fi
808    
809  if test "x$TESTDIRS" = x ; then  if test "x$TESTDIRS" = x ; then
810      TESTDIRS=`scandirs`      if test "x$ADM" = xt ; then
811            TESTDIRS=`scandirs results_ad`
812        else
813            TESTDIRS=`scandirs results`
814        fi
815  fi  fi
816    
817  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
818      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
819  fi  fi
820    
821  echo "OK"  if test "x$ADM" = xt ; then
822        EXECUTABLE="mitgcmuv_ad"
823        OUTPUTFILE="output_adm.txt"
824    else
825        EXECUTABLE="mitgcmuv"
826        OUTPUTFILE="output.txt"
827    fi
828    
829    if test "x$ADM" = xt -a "x$COMMAND" = x ; then
830        COMMAND="./$EXECUTABLE > $OUTPUTFILE"
831    fi
832    
833    if test "x$COMMAND" = x ; then
834        COMMAND="./$EXECUTABLE > $OUTPUTFILE"
835    fi
836    
837    #echo "OK"
838    echo "OK (COMMAND= $COMMAND )"
839    
840  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
841  createcodelet  createcodelet
842    
843  #  build the mpack utility  #  build the mpack utility
844  build_mpack  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
845        echo "skipping mpack build"
846    else
847        build_mpack
848    fi
849    
850  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
851  MACH=`hostname`  MACH=`hostname`
852  UNAMEA=`uname -a`  UNAMEA=`uname -a`
853  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
854  BASE=$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
855    if test "x$OUTDIR" != x ; then
856        BASE="tr_"$OUTDIR"_"$DATE"_"
857    fi
858  DNUM=0  DNUM=0
859  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
860  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 553  done Line 864  done
864  mkdir $DRESULTS  mkdir $DRESULTS
865  RETVAL=$?  RETVAL=$?
866  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
867      echo "Error: can't create results directory \"./$DRESULTS\""      echo "ERROR: Can't create results directory \"./$DRESULTS\""
868      exit 1      exit 1
869  fi  fi
870  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
871  date > $SUMMARY  printf "Start time:  " >> $SUMMARY
872  cat << EOF >> $SUMMARY  start_date=`date`
873                  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  
874    
875    of_path=
876  if test "x$OPTFILE" != xNONE ; then  if test "x$OPTFILE" != xNONE ; then
877      if test -r $OPTFILE ; then      if test -r $OPTFILE ; then
878          OPTFILE=`pwd`"/$OPTFILE"          # get the path
879            path=${OPTFILE%/*}
880            if test "x$path" = x ; then
881                of_path=`pwd`
882            else
883                of_path=`( cd $path > /dev/null 2>&1 ; pwd )`
884            fi
885            file=${OPTFILE##*/}
886            OPTFILE=$of_path/$file
887            cp $OPTFILE $DRESULTS
888            echo >> $SUMMARY
889            echo "  OPTFILE=$OPTFILE" >> $SUMMARY
890        else
891            echo | tee $SUMMARY
892            echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
893            exit 1
894      fi      fi
895    else
896        echo >> $SUMMARY
897        echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
898        echo "   so the genmake default will be used." >> $SUMMARY
899  fi  fi
900  echo  echo
 echo "OPTFILE=$OPTFILE" >> $SUMMARY  
901  echo >> $SUMMARY  echo >> $SUMMARY
902    if test "x$ADM" = x ; then
903        line_0="            ----T-----  ----S-----  ----U-----  ----V-----"
904        line_1="G D M    c        m  s        m  s        m  s        m  s"
905        line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
906        line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
907        line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
908        for ii in $PTRACERS_NUM ; do
909            #  tst=`eval 'echo $HAVE_PTR0'$ii`
910            #  if test "x$tst" = xt ; then
911            line_0="$line_0  --PTR 0"$ii"--"
912            line_1="$line_1        m  s"
913            line_2="$line_2  m  m  e  ."
914            line_3="$line_3  i  a  a  d"
915            line_4="$line_4  n  x  n  ."
916            #  fi
917        done
918        echo "$line_0" | tee -a $SUMMARY
919        echo "$line_1" | tee -a $SUMMARY
920        echo "$line_2" | tee -a $SUMMARY
921        echo "$line_3" | tee -a $SUMMARY
922        echo "$line_4" | tee -a $SUMMARY
923        echo " "       | tee -a $SUMMARY
924    else
925        echo "ADJOINT=true" >> $SUMMARY
926        echo >> $SUMMARY
927        cat << EOF | tee -a $SUMMARY
928    G D M    C  G
929    E p a R  o  r
930    N n k u  s  a
931    2 d e n  t  d
932    
933    EOF
934    fi
935    
936  #  ...and each test directory...  #  ...and each test directory...
937  for dir in $TESTDIRS ; do  for dir in $TESTDIRS ; do
# Line 589  for dir in $TESTDIRS ; do Line 944  for dir in $TESTDIRS ; do
944          if test -r $dir/input/Makefile ; then          if test -r $dir/input/Makefile ; then
945              ( cd $dir/input ; make CLEAN )              ( cd $dir/input ; make CLEAN )
946          fi          fi
947            (
948                cd $dir
949                rm -rf tr_run.*
950            )
951          continue          continue
952      fi      fi
953    
954      #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
955      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
956      if test ! -r $dir"/results/output.txt" ; then      fout=
957          echo "can't read \"$dir/results/output.txt\" -- skipping $dir"      if test "x$ADM" = x ; then
958            fout=$dir"/results/output.txt"
959        else
960            fout=$dir"/results_ad/output_adm.txt"
961        fi
962        if test ! -r $fout ; then
963            echo "can't read \"$fout\" -- skipping $dir"
964          continue          continue
965      fi      fi
966        if test "x$ADM" = x ; then
967            check_for_add_mon_output  $fout
968        fi
969    
970      echo "-------------------------------------------------------------------------------"      # Check for additional types of monitor output
     echo  
     echo "Experiment:  $dir"  
     echo  
     unset genmake makedepend make run  
     results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'  
971    
972      if [ -r $dir/build ]; then      builddir="input"
973          seperatebuilddir=1      rundir="input"
974          builddir=build      use_seperate_build=0
975          rundir=build      if test -d $dir/build -a -r $dir/build ; then
976          ( cd $dir/build; ln -sf ../input/* . )          builddir="build"
977      else          rundir="build"
978          seperatebuilddir=0          use_seperate_build=1
979          builddir=input          linkdata $use_seperate_build $dir/$rundir
         rundir=input  
980      fi      fi
981            
982      CODE_DIR=$dir/code      #  Check whether there are "extra runs" for this testdir
983      BUILD_DIR=$dir/$builddir      extra_runs=
984      MPI_FILES="CPP_EEOPTIONS.h_mpi SIZE.h_mpi"      if test "x$ADM" = x -a "x$use_seperate_build" = x1 ; then
985      NOMPI_FILES="CPP_EEOPTIONS.h_nompi SIZE.h_nompi"          ex_run_dirs=`( cd $dir ; echo input.* )`
986            echo "ex_run_dirs='$ex_run_dirs'"
987            for exd in $ex_run_dirs ; do
988                name=`echo $exd | sed -e 's/input.//g'`
989                outf="$dir/results/output.txt.$name"
990                if test -f $outf -a -r $outf ; then
991                    extra_runs="$extra_runs $name"
992                fi
993            done
994        fi
995    
996      #  Is this an MPI run?      if test "x$ADM" = x ; then
997      if test "x$MPI" = xt ; then          code_dir=code
998          FILES=$MPI_FILES          CODE_DIR=$dir/code
999      else      else
1000          FILES=$NOMPI_FILES          code_dir=code_ad
1001            CODE_DIR=$dir/code_ad
1002      fi      fi
1003            BUILD_DIR=$dir/$builddir
1004      #  Check to see that we have the files  
1005      have_files=t      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1006      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)"  
1007          continue          continue
1008      fi      fi
1009        
1010      #  If we have the $FILES and they differ, copy the $FILES to $BUILD_DIR      echo "-------------------------------------------------------------------------------"
1011      if test "x$have_files" = xt ; then      echo
1012          for i in $FILES ; do      echo "Experiment:  $dir"
1013              cmp $CODE_DIR/$i $BUILD_DIR/$i > /dev/null 2>&1      echo
1014              RETVAL=$?      unset genmake makedepend make run
1015              if test "x$RETVAL" != x0 ; then      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1016                  cp $CODE_DIR/$i $BUILD_DIR/$i  
             fi  
         done  
     fi  
       
1017      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1018      CDIR=$DRESULTS"/"$DRESULTS"_"$NDIR      rel_CDIR=$DRESULTS"/"$dir
1019      mkdir $CDIR      mkdir $rel_CDIR
1020      CDIR=`pwd`"/$CDIR"      CDIR=`pwd`"/$rel_CDIR"
1021            
1022      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1023          makeclean $dir/$builddir          makeclean $dir/$builddir
1024      else      else
1025          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1026              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1027                && symlink_mpifiles $dir $code_dir $builddir \
1028              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1029              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1030              && linkdata $seperatebuilddir $dir/$rundir \              && linkdata $use_seperate_build $dir/$rundir \
1031              && runmodel $dir/$builddir && run=Y \              && runmodel $dir/$rundir && run=Y \
1032              && results=`testoutput $dir $rundir`              && results=`testoutput $dir $rundir`
1033      fi      fi
1034            
1035      echo      echo
1036      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \      if test "x$ADM" = x ; then
1037          ${run:-N} $results          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1038      echo          echo
1039      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          echo "$fres" >> $SUMMARY
1040          ${run:-N} $results >> $SUMMARY          echo "fresults='$fres'" > $CDIR"/summary.txt"
1041      echo "fresults='" > $CDIR"/summary.txt"          echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1042      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1043          ${run:-N} $results >> $CDIR"/summary.txt"          echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1044      echo "'" >> $CDIR"/summary.txt"          echo "tdir='$dir'" >> $CDIR"/summary.txt"
1045      echo "MACH='$MACH'" >> $CDIR"/summary.txt"  
1046      echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"          for ex in $extra_runs ; do
1047      echo "DATE='$DATE'" >> $CDIR"/summary.txt"              unset run
1048      echo "tdir='$dir'" >> $CDIR"/summary.txt"              results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1049                #  Create an output dir for each OPTFILE/tdir.ex combination
1050                rel_CDIR=$DRESULTS"/"$dir"."$ex
1051                mkdir $rel_CDIR
1052                CDIR=`pwd`"/$rel_CDIR"
1053                test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1054                for ldir in input.$ex input ; do
1055                    (
1056                        cd "$dir/$ldir" > /dev/null 2>&1
1057                        ls -1 2>/dev/null \
1058                            | sed -e 's|^CVS$||g' | sed -e 's|^output.txt$||g'
1059                    ) > tr_exrun_links
1060                    (
1061                        cd "$dir/tr_run.$ex"
1062                        cat ../../tr_exrun_links | while read i ; do
1063                            if test ! "x$i" = x ; then
1064                                test ! -r $i  &&  ln -s "../"$ldir"/"$i $i
1065                            fi
1066                        done
1067                    )
1068                    test -e tr_exrun_links  &&  rm -f tr_exrun_links
1069                done
1070                ldir=build
1071                (
1072                    cd $dir/tr_run.$ex
1073                    test ! -e mitgcmuv  &&  ln -s "../"$ldir"/"mitgcmuv .
1074                )
1075                runmodel $dir/tr_run.$ex && run=Y \
1076                    && results=`testoutput $dir tr_run.$ex "."$ex`
1077                fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1078                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1079                fres="$fres.$ex"
1080                echo
1081                echo "$fres" >> $SUMMARY
1082                echo "fresults='$fres'" > $CDIR"/summary.txt"
1083                echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1084                echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1085                echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1086                echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1087            done
1088        else
1089            fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1090            fres=$fres"$results   $dir"
1091            echo
1092            echo "$fres" >> $SUMMARY
1093            echo "fresults='$fres'" > $CDIR"/summary.txt"
1094            echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1095            echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1096            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1097            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1098            grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1099                               >> $CDIR"/summary.txt"
1100        fi
1101    
1102        postclean $dir/$builddir
1103            
1104      (      echo "-------------------------------------------------------------------------------"
         cd $DRESULTS  
         tar -cf $NDIR".tar" $DRESULTS"_"$NDIR > /dev/null 2>&1  
         gzip $NDIR".tar"  
     )  
1105            
1106      if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then  done
1107          echo "No mail sent"  
1108      else  printf "Start time:  " >> $SUMMARY
1109          $MPACK -s MITgcm-test -m 1000000 $DRESULTS"/"$NDIR".tar.gz" $ADDRESSES  echo $start_date >> $SUMMARY
1110    printf "End time:    " >> $SUMMARY
1111    date >> $SUMMARY
1112    
1113    #  If addresses were supplied and mpack built successfully, then try
1114    #  to send email using mpack.
1115    if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1116        echo "No results email was sent."
1117    else
1118        if test "x$HAVE_MPACK" = xt ; then
1119            tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1120                && gzip $DRESULTS".tar" \
1121                && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1122          RETVAL=$?          RETVAL=$?
1123          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1124              echo "Warning: \"$MPACK\" failed -- please contact <edhill@mitgcm.org>"              echo
1125                echo "Warning: The tar, gzip, & mpack step failed.  Please send email"
1126                echo "  to <MITgcm-support@mitgcm.org> for help.  You may copy the "
1127                echo "  summary of results from the directory \"$DRESULTS\"."
1128                echo
1129          else          else
1130              rm -f $DRESULTS"/"$NDIR".tar*"              echo
1131                echo "An email containing results was sent to the following addresses:"
1132                echo "  \"$ADDRESSES\""
1133                echo
1134          fi          fi
1135            test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"
1136            test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"
1137      fi      fi
1138    fi
1139    
1140      echo "-------------------------------------------------------------------------------"  # rm -f tmp_cmpnum.f a.out
1141        rm -f tmp_cmpnum.c tmp_cmpnum
     NDIR=$(( $NDIR + 1 ))  
       
 done  
1142    
1143  rm tmp_cmpnum.f a.out  if test "x$CLEANUP" != xt ; then
1144        cat $SUMMARY | sed 's/ -- -- -- --//g'
1145        if test -e tr_out.txt ; then
1146            mv tr_out.txt tr_out.txt.old
1147        fi
1148        cat $SUMMARY | sed 's/ -- -- -- --//g' > tr_out.txt
1149    fi
1150    
1151  cat $SUMMARY  if test "x$DELDIR" = xt ; then
1152        rm -rf $DRESULTS
1153    fi
1154    

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

  ViewVC Help
Powered by ViewVC 1.1.22