/[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.2 by edhill, Mon Sep 1 16:50:27 2003 UTC revision 1.67 by jmc, Sun Feb 6 16:58:08 2005 UTC
# Line 1  Line 1 
1  #!/bin/bash  #! /usr/bin/env bash
2  #  #
3  #  $Header$  #  $Header$
4    #  $Name$
5  #  #
6    
7  usage()  usage()
# Line 10  usage() Line 11  usage()
11      echo      echo
12      echo "where possible OPTIONS are:"      echo "where possible OPTIONS are:"
13      echo "  (-help|-h)               print usage"      echo "  (-help|-h)               print usage"
14      echo "  (-optfile=|-of=)STRING   list of genmake2 \"optfiles\""      echo "  (-mpi)                   use MPI input files"
15      echo "  (-a|-addr)STRING         list of email recipients"      echo "  (-ieee|-noieee)          if possible, use IEEE compiler flags"
16      echo "  (-t|-tdir)STRING         list of \"test\" dirs"      echo "                             (DEF=\"-ieee\")"
17        echo "  (-optfile=|-of=)STRING   list of optfiles to use"
18        echo "  (-a|-addr) STRING        list of email recipients"
19        echo "                             (DEF=\"edhill@mitgcm.org\")"
20        echo "  (-t|-tdir) STRING        list of test dirs to use"
21        echo "                             (DEF=\"\" which builds all)"
22        echo "  (-b|-bash) STRING        preferred location of a \"bash\" or"
23        echo "                             Bourne-compatible \"sh\" shell"
24        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\")"
28        echo "  (-m|-make) STRING        command to use for \"make\""
29        echo "                             (DEF=\"make\")"
30        echo "  (-ptracers|-ptr) STRING  specify which ptracers to test"
31        echo "                             (DEF=\"1 2 3 4 5\")"
32        echo "  (-j) JOBS                use \"make -j JOBS\" for parallel builds"
33        echo "  (-clean)                 *ONLY* run \"make CLEAN\""
34        echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""
35        echo "  (-nogenmake|-ng)         skip the genmake stage"
36        echo "  (-noclean|-nc)           skip the \"make clean\" stage"
37        echo "  (-nodepend|-nd)          skip the \"make depend\" stage"
38        echo "  (-deldir|-dd)            on success, delete the output directory"
39        echo
40        echo "and where STRING can be a whitespace-delimited list"
41        echo "such as:"
42        echo
43        echo "  -t 'exp0 exp2 exp3' "
44        echo "  -addr='abc@123.com testing@home.org'"
45        echo
46        echo "provided that the expression is properly quoted within the current"
47        echo "shell (note the use of single quotes to protect white space)."
48      echo      echo
49      exit 1      exit 1
50  }  }
# Line 20  usage() Line 52  usage()
52  #  build the mpack utility  #  build the mpack utility
53  build_mpack()  build_mpack()
54  {  {
55      echo -n "building the mpack utility...  "      printf "building the mpack utility...  "
56      if test ! -x "$MPACKDIR/mpack" ; then      if test ! -x "$MPACKDIR/mpack" ; then
57          if test ! -d $MPACKDIR ; then          if test ! -d $MPACKDIR ; then
58                echo
59              echo "Error: can't find \"$MPACKDIR\""              echo "Error: can't find \"$MPACKDIR\""
60              echo "  are you sure this program is being run in the correct "              echo "  are you sure this program is being run in the correct "
61              echo "  (that is, \"MITGCM_ROOT\verification\") directory?"              echo "  (that is, \"MITGCM_ROOT\verification\") directory?"
62              exit 1              echo
63                HAVE_MPACK=f
64            fi
65            printf "building mpack...  "
66            if test "x$CC" = x ; then
67                export CC=cc
68          fi          fi
69          echo -n "building mpack...  "          ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1
         ( cd $MPACKDIR && ./configure && make ) > build_mpack.out 2>&1  
70          RETVAL=$?          RETVAL=$?
71          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
72              echo              echo
73              echo "Error building the mpack tools at: $MPACK_DIR"              echo "Error building the mpack tools at: $MPACK_DIR"
74              exit 1              echo
75                HAVE_MPACK=f
76            else
77                rm -f tr_build_mpack.out
78                HAVE_MPACK=t
79          fi          fi
80        else
81            HAVE_MPACK=t
82      fi      fi
83      echo "OK"      echo "OK"
84  }  }
85    
 compare_lines()  
 {  
     # use codelet to compare lines  
     if [ $verbose -gt 1 ]; then  
         cat tmp3.txt 1>&2  
     fi  
     return `./a.out < tmp3.txt`  
 }  
   
86  testoutput_for_prop()  testoutput_for_prop()
87  {  {
88      # testoutput_for_prop dir s1 label subdir      # testoutput_for_prop dir s1 label subdir extension
89      #      #
90      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt
91      #  using search strings s1 and text label      #  using search strings s1 and text label
# Line 60  testoutput_for_prop() Line 94  testoutput_for_prop()
94          echo testoutput_for_prop: grep "$2" $1/$4/output.txt 1>&2          echo testoutput_for_prop: grep "$2" $1/$4/output.txt 1>&2
95      fi      fi
96      if [ -r $1/$4/output.txt ]; then      if [ -r $1/$4/output.txt ]; then
97          grep "$2" $1/$4/output.txt | sed 's/.*=//' | nl > tmp1.txt          grep "$2" $1/$4/output.txt | sed 's/.*=//' | cat -n > tmp1.txt
98          lncnt=`wc -l tmp1.txt | awk '{print $1}' `          lncntA=`wc -l tmp1.txt | awk '{print $1}' `
99          if [ $lncnt -lt 3 ]; then          if [ $lncntA -lt 3 ]; then
100              if [ $verbose -gt 0 ]; then              if [ $verbose -gt 0 ]; then
101                  echo Not enough lines of output when searching for "$2" 1>&2                  echo Not enough lines of output when searching for "$2" 1>&2
102              fi              fi
# Line 73  testoutput_for_prop() Line 107  testoutput_for_prop()
107          return 99          return 99
108      fi      fi
109      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
110          echo testoutput_for_prop: grep "$2" $1/results/output.txt 1>&2          echo testoutput_for_prop: grep "$2" $1/results/output.txt$5 1>&2
111      fi      fi
112      grep "$2" $1/results/output.txt | sed 's/.*=//' | nl > tmp2.txt      grep "$2" $1/results/output.txt$5 | sed 's/.*=//' | cat -n > tmp2.txt
113      lncnt=`wc -l tmp2.txt | awk '{print $1}' `      lncntB=`wc -l tmp2.txt | awk '{print $1}' `
114      if [ $lncnt -lt 3 ]; then      if [ $lncntB -lt 3 ]; then
115          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
116              echo Not enough lines of output when searching for "$2" 1>&2              echo Not enough lines of output when searching for "$2" 1>&2
117          fi          fi
118          return 99          return 99
119      fi      fi
120        if [ $lncntA -ne $lncntB ]; then
121            if [ $verbose -gt 0 ]; then
122                echo Not same Nb of lines when searching for "$2" ":" $lncntA $lncntB 1>&2
123            fi
124            return 99
125        fi
126      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
127          echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2          echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2
128      fi      fi
# Line 90  testoutput_for_prop() Line 130  testoutput_for_prop()
130      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
131          echo testoutput_for_prop: compare_lines 1>&2          echo testoutput_for_prop: compare_lines 1>&2
132      fi      fi
133      compare_lines      if [ $verbose -gt 1 ]; then
134      digits_of_similarity=$?          cat tmp3.txt 1>&2
135        fi
136        echo "-1" >> tmp3.txt
137        # On the SGI O3K (*not* the O2K), "cat -n" inserts a ":" after the line number
138        cat tmp3.txt | sed -e 's|:||g' > tmp4.txt
139        digits_of_similarity=`./tmp_cmpnum < tmp4.txt`
140      if [ $digits_of_similarity -eq 99 ]; then      if [ $digits_of_similarity -eq 99 ]; then
141          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
142              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 102  testoutput_for_prop() Line 147  testoutput_for_prop()
147              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
148          fi          fi
149      fi      fi
150      rm tmp1.txt tmp2.txt tmp3.txt      rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt
151            
152      return $digits_of_similarity      return $digits_of_similarity
153  }  }
# Line 122  dashnum() Line 167  dashnum()
167      done      done
168  }  }
169    
170    testoutput_ad()
171    {
172        grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $5}' > t05.txt
173        grep $3 $1/$2/output.txt_adm | awk '{print NR " " $5}' > t15.txt
174        grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $6}' > t06.txt
175        grep $3 $1/$2/output.txt_adm | awk '{print NR " " $6}' > t16.txt
176        join t05.txt t15.txt > t5.txt
177        join t06.txt t16.txt > t6.txt
178        echo "-1" >> t5.txt
179        echo "-1" >> t6.txt
180        digits_5=`./tmp_cmpnum < t5.txt`
181        digits_6=`./tmp_cmpnum < t6.txt`
182        dashnum $digits_5 $digits_6
183        rm -f t[01][56].txt t[56].txt
184    }
185    
186    check_for_add_mon_output()
187    {
188        # Check for additional types of monitor output
189        if test "x$1" = x ; then
190            return
191        fi
192    
193        for ii in $PTRACERS_NUM ; do
194            eval "HAVE_PTR0"$ii"=f"
195        done
196    
197        ptr_add="trcstat_ptracerXX_min trcstat_ptracerXX_max"
198        ptr_add="$ptr_add trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
199        for ii in $PTRACERS_NUM ; do
200            for jj in $ptr_add ; do
201                name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
202                tst=`grep $name $1 | wc -l | awk '{print $1}'`
203                if test ! "x$tst" = x0 ; then
204                    eval "HAVE_PTR0"$ii"=t"
205                fi
206            done
207            #  eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"'
208        done
209    }
210    
211  testoutput()  testoutput()
212  {  {
213      # testoutput diretory subdir      # testoutput directory subdir extension
214      #      #
215      #  test output in "directory"      #  test output in "directory"
216        if test "x$ADM" = x ; then
217            if [ $debug -gt 0 ]; then
218                echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2
219            fi
220            testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2 $3; cg2dres=$?
221            if [ $debug -gt 0 ]; then
222                echo testoutput: cg2dres=$cg2dres 1>&2
223            fi
224            testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2 $3; tmin=$?
225            testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2 $3; tmax=$?
226            testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2 $3; tmean=$?
227            testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2 $3; tsd=$?
228            testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2 $3; smin=$?
229            testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2 $3; smax=$?
230            testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2 $3; smean=$?
231            testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2 $3; ssd=$?
232            testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2 $3; umin=$?
233            testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2 $3; umax=$?
234            testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2 $3; umean=$?
235            testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2 $3; usd=$?
236            testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2 $3; vmin=$?
237            testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2 $3; vmax=$?
238            testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2 $3; vmean=$?
239            testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2 $3; vsd=$?
240    
241            #  This is for PTRACERS
242            for ii in $PTRACERS_NUM ; do
243                eval `echo "p0"$ii"_min=99"`
244                eval `echo "p0"$ii"_max=99"`
245                eval `echo "p0"$ii"_mean=99"`
246                eval `echo "p0"$ii"_sd=99"`
247                tst=`eval 'echo "$HAVE_PTR0'$ii'"'`
248                #echo 'tst = '$tst
249                if test "x$tst" = xt ; then
250                    a="trcstat_ptracer0"
251                    testoutput_for_prop $1 "$a"$ii"_min"  "p0"$ii"_min"  $2 $3
252                    RETVAL=$? ; eval `echo "p0"$ii"_min="$RETVAL`
253                    testoutput_for_prop $1 "$a"$ii"_max"  "p0"$ii"_max"  $2 $3
254                    RETVAL=$? ; eval `echo "p0"$ii"_max="$RETVAL`
255                    testoutput_for_prop $1 "$a"$ii"_mean" "p0"$ii"_mean" $2 $3
256                    RETVAL=$? ; eval `echo "p0"$ii"_mean="$RETVAL`
257                    testoutput_for_prop $1 "$a"$ii"_sd"   "p0"$ii"_sd"   $2 $3
258                    RETVAL=$? ; eval `echo "p0"$ii"_sd="$RETVAL`
259                fi
260            done
261    
262      if [ $debug -gt 0 ]; then          allargs="$cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd"
263          echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2          allargs="$allargs $umin $umax $umean $usd $vmin $vmax $vmean $vsd"
264      fi          allargs="$allargs $p01_min $p01_max $p01_mean $p01_sd"
265      testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2; cg2dres=$?          allargs="$allargs $p02_min $p02_max $p02_mean $p02_sd"
266      if [ $debug -gt 0 ]; then          allargs="$allargs $p03_min $p03_max $p03_mean $p03_sd"
267          echo testoutput: cg2dres=$cg2dres 1>&2          allargs="$allargs $p04_min $p04_max $p04_mean $p04_sd"
268            allargs="$allargs $p05_min $p05_max $p05_mean $p05_sd"
269    
270            eval "dashnum $allargs"
271    
272        else
273            testoutput_ad $1 $2 "precision_grdchk_result"
274      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  
275  }  }
276    
277  genmakemodel()  genmakemodel()
278  {  {
279      # genmakemodel directory      # genmakemodel directory
280      GENMAKE2="../../../tools/genmake2"      if test "x$NOGENMAKE" = xt ; then
281      (          echo "genmake skipped!"
282          cd $1;      else
283          printf 'genmake ... ' 1>&2          if test "x$BASH" = x ; then
284          # ../../../tools/genmake -ieee -mods=../code > make.log 2>&1              GENMAKE2="../../../tools/genmake2"
         $GENMAKE2  -ds --mods=../code "--optfile="$OPTFILE > make.log 2>&1  
         RETVAL=$?  
         for i in gm_state gm_optfile gm_local Makefile ; do  
             if test -r $i ; then  
                 cp $i $CDIR  
             fi  
         done  
         if test "x$RETVAL" != x0 ; then  
             tail make.log  
             echo "genmakemodel: genmake failed" 1>&2  
             cp make.log $CDIR  
             return 1  
285          else          else
286              echo "succesful" 1>&2              GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
287          fi          fi
288      )          (
289                cd $1;
290                command="$GENMAKE2  -ds -m $MAKE"
291                if test "x$ADM" = x ; then
292                    command="$command --mods=../code"
293                else
294                    command="$command --mods=../code_ad"
295                    command="$command -adof=../../../tools/adjoint_options/adjoint_staf"
296                fi
297                if test "x$OPTFILE" != xNONE ; then
298                    command="$command --optfile=$OPTFILE"
299                fi
300                if test "x$IEEE" != x ; then
301                    command="$command -ieee"
302                fi
303                if test "x$MPI" = xt ; then
304                    command="$command -mpi"
305                fi
306                printf 'genmake ... ' 1>&2
307                $command > make.log 2>&1
308                RETVAL=$?
309                #  Reduce the size of the testing emails!
310                head -100 Makefile > $CDIR/Makefile_head
311                if test "x$RETVAL" != x0 ; then
312                    tail make.log
313                    echo "genmakemodel: genmake failed" 1>&2
314                    cp genmake_* make.log $CDIR
315                    return 1
316                else
317                    echo "successful" 1>&2
318                fi
319            )
320        fi
321  }  }
322    
323  makeclean()  makeclean()
324  {  {
325      # makeclean directory      # makeclean directory
326      (      if test "x$NOCLEAN" = xt ; then
327          cd $1;          echo "make CLEAN skipped!"
328          rm -f output.txt      else
329          printf 'make CLEAN ... ' 2>&1          (
330          if test -r Makefile ; then              cd $1;
331              make CLEAN >> make.log 2>&1              if test -e output.txt ; then
332              RETVAL=$?                  rm -f output.txt
             if test "x$RETVAL" != x0 ; then  
                 tail make.log  
                 echo "makeclean: \"make CLEAN\" failed" 1>&2  
                 cp make.log $CDIR"/make.log"  
                 return 1  
333              fi              fi
334          fi              printf 'make CLEAN ... ' 2>&1
335          echo succesful 1>&2              if test -r Makefile ; then
336          exit 0                  $MAKE CLEAN >> make.log 2>&1
337      )                  RETVAL=$?
338                    if test "x$RETVAL" != x0 ; then
339                        tail make.log
340                        echo "makeclean: \"make CLEAN\" failed" 1>&2
341                        cp make.log $CDIR"/make.log"
342                        return 1
343                    fi
344                fi
345                echo successful 1>&2
346                exit 0
347            )
348        fi
349  }  }
350    
351  makedependmodel()  makedependmodel()
352  {  {
353      # makedependmodel directory      # makedependmodel directory
354      (      if test "x$NODEPEND" = xt ; then
355          cd $1;          echo "make depend skipped!"
356          printf 'make depend ... ' 1>&2      else
357          make depend >> make.log 2>&1          (
358          RETVAL=$?              cd $1;
359          if test "x$RETVAL" != x0 ; then              printf 'make depend ... ' 1>&2
360              tail make.log              $MAKE depend >> make.log 2>&1
361              echo "makedependmodel: make depend failed" 1>&2              RETVAL=$?
362              cp make.log $CDIR"/make.log"              if test "x$RETVAL" != x0 ; then
363              return 1                  tail make.log
364          else                  echo "makedependmodel: make depend failed" 1>&2
365              echo succesful 1>&2                  cp make.log $CDIR"/make.log"
366          fi                  return 1
367      )              else
368                    echo successful 1>&2
369                fi
370            )
371        fi
372  }  }
373    
374  makemodel()  makemodel()
# Line 231  makemodel() Line 378  makemodel()
378          cd $1;          cd $1;
379          if test -r Makefile ; then          if test -r Makefile ; then
380              printf 'make ... ' 1>&2              printf 'make ... ' 1>&2
381              make >> make.log 2>&1              if test "x$ADM" = x ; then
382                    if test "x$JOBS" = x ; then
383                        $MAKE >> make.log 2>&1
384                    else
385                        $MAKE -j $JOBS >> make.log 2>&1
386                    fi
387                else
388                    $MAKE adall >> make.log 2>&1
389                fi
390              RETVAL=$?              RETVAL=$?
391              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
392                  tail make.log                  tail make.log
# Line 239  makemodel() Line 394  makemodel()
394                  cp make.log $CDIR"/make.log"                  cp make.log $CDIR"/make.log"
395                  return 1                  return 1
396              else              else
397                  echo succesful 1>&2                  echo successful 1>&2
398              fi              fi
399          fi          fi
400      )      )
401  }  }
402    
403    symlink_mpifiles()
404    {
405        # Put special links so that MPI specific files are used
406        # This MUST be invoked between makeclean and makelinks because
407        # the Makefile will link to non-mpi files by default
408    
409        dir=$1
410        code_dir=$2
411        BUILD_DIR=$dir/$3
412        CODE_DIR=$dir/$code_dir
413        
414        # These are files that should replace their counter-part when using -mpi
415        MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`
416    
417        #  Is this an MPI run?
418        if test "x$MPI" = xt ; then
419            # YES: We symbolically link these files to the build
420            # dir so long as there is no real file in place
421            for ii in $MPI_FILES ; do
422                i=`echo $ii | sed 's:^\./::'`
423                name=`echo $i | sed 's:_mpi::' `
424                cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1
425                RETVAL=$?
426                if test "x$RETVAL" != x0 ; then
427                    if ! test -f $BUILD_DIR/$i ; then
428                        #echo Linking $name to $i
429                        (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
430                    fi
431                fi
432            done
433        else
434            # NO: We undo any _mpi symbolically linked files
435            for ii in $MPI_FILES ; do
436                i=`echo $ii | sed 's:^\./::'`
437                name=`echo $i | sed 's:_mpi::' `
438                if test -L $BUILD_DIR/$name ; then
439                    cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
440                    RETVAL=$?
441                    if test "x$RETVAL" = x0 ; then
442                        #echo Un-linking $name from $linktarg
443                        rm -f $BUILD_DIR/$name
444                    fi
445                fi
446            done
447        fi
448        
449    }
450    
451  linkdata()  linkdata()
452  {  {
453      # linkdata flag      # linkdata flag
454      #      #
455      # symbolically link data files to run directory      # symbolically link data files to run directory
456      if [ $1 -ne 0 ]; then      if test "x$1" = x1 ; then
457          ( cd $2 ;  ln -sf ../input/* . )          (
458                cd $2
459                if test "x$ADM" = x ; then
460                    files=`( cd ../input ; ls -1 | grep -v CVS )`
461                    for i in $files ; do
462                        if test ! -d "../input/"$i -a ! -f $i ; then
463                            ln -sf "../input/"$i $i
464                        fi
465                    done
466                else
467                    files=`( cd ../input ; ls -1 *.bin | grep -v CVS )`
468                    for i in $files ; do
469                        if test ! -d "../input/"$i ; then
470                            ln -sf "../input/"$i $i
471                        fi
472                    done
473                    files=`( cd ../input_ad ; ls -1 | grep -v CVS )`
474                    for i in $files ; do
475                        if test ! -d "../input_ad/"$i ; then
476                            ln -sf "../input_ad/"$i $i
477                        fi
478                    done
479                fi
480            )
481      fi      fi
482  }  }
483    
484  runmodel()  runmodel()
485  {  {
486      # runmodel directory exe      # runmodel directory
487      #      #
488      #  runs the model "exe" in "directory" (exe is relative to directory)      #  runs "$COMMAND in "directory"
489        #  (where "$COMMAND" is relative to "directory")
490      (      (
491          cd $1          cd $1
492          if [ -x $2 ]; then          printf 'runmodel ... ' 1>&2
493              if [ $quick -eq 0 ]; then          # make output.txt
494                  rm -f output.txt          echo
495              fi          rm -f run.log
496              printf 'runmodel: ' 1>&2          # echo "COMMAND='$COMMAND'"
497              make output.txt          # echo "pwd='"`pwd`"'"
498              RETVAL=$?          ( eval $COMMAND ) > run.log 2>&1
499              if test "x$RETVAL" = x0 ; then          RETVAL=$?
500                  cp output.txt $CDIR"/output.txt"          if test "x$RETVAL" = x0 ; then
501                  return 0              tail run.log
502              else              echo successful 1>&2
503                  return 1              # === Reduce the size of the testing emails!
504              fi              # if test "x$ADM" = x ; then
505                #   cp output.txt $CDIR"/output.txt"
506                # else
507                #   cp output.txt_adm $CDIR"/output.txt_adm"
508                # fi
509                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
510                return 0
511            else
512                tail run.log
513                echo failed 1>&2
514                cp run.log $CDIR"/run.log"
515                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
516                return 1
517          fi          fi
518      )      )
519  }  }
# Line 283  createcodelet() Line 522  createcodelet()
522  {  {
523      # create codelet for comparing model output      # create codelet for comparing model output
524    
525      echo -n "creating the comparison code...  "      printf "creating the comparison code...  "
526      cat > tmp_cmpnum.f <<EOFA      cat > tmp_cmpnum.c <<EOF
527        program cmpnum  #include <stdio.h>
528        implicit none  #include <math.h>
529        real*8 a,b,diff  int main( int argc, char** argv )  {
530        integer linnum,best    int linnum,best,lncnt;
531        best=-16    double a,b,abave,relerr;
532    99  read(*,*,end=70,err=60) linnum,a,b    best = -22;
533        diff=0.5*(abs(a)+abs(b))    lncnt = 0;
534  c     print *,a,b,diff,abs(a-b)/diff    while( 1 & (lncnt+=1) < 999 )  {
535        if (diff.gt.1.e-12) then      scanf("%d", &linnum);
536          diff=abs(a-b)/diff      if (linnum == -1)  break;
537          if (diff.gt.0.) then      scanf("%lf", &a);  scanf("%lf", &b);
538  c         print *,int(log10(diff)),diff      abave = 0.5*(fabs(a)+fabs(b));
539            linnum=int(log10(diff))      if (abave > 0.0) {
540            best=max(best,linnum)        relerr=fabs(a-b)/abave;
541          endif        if (relerr > 0.0) { linnum = (int)rint(log10(relerr)); }
542        else        else { linnum = -16 ; }
543          if (best.eq.-16.and.diff.ne.0.) best=-22        best = (best > linnum) ? best : linnum;
544        endif      }
545        goto 99    }
546    60  stop 'cmpnum: An error occured reading a,b'    if (lncnt == 999) best=-29;
547    70  print *,-best    printf("%d\n", -best);
548        end    return 0;
549  EOFA  }
550    EOF
551        $CC -o tmp_cmpnum tmp_cmpnum.c -lm
552    
553      f77 tmp_cmpnum.f      if [ -x ./tmp_cmpnum ]; then
     if [ -x ./a.out ]; then  
554          echo "OK"          echo "OK"
555          return 0          return 0
556      else      else
557          echo          echo
558          echo "createcodelet: failed to compile codelet" | tee          echo "ERROR: failed to compile comparison code -- please specify"
559            echo "  a C compiler using the CC environment variable."
560          exit 1          exit 1
561      fi      fi
562  }  }
# Line 347  show_help() Line 588  show_help()
588  {  {
589      cat - << EOF      cat - << EOF
590  $0 [-help] [-quick] [-verbose] dir1 [dir2] [...]  $0 [-help] [-quick] [-verbose] dir1 [dir2] [...]
591   -help      Show this help message  
592   -quick     Skip "genmake" and "make depend" if the Makefile exists   -help|-h      Show this help message
593   -quiet     Reduce the amount of output   -quiet     Reduce the amount of output
594   -verbose   Produce copious amounts of output   -verbose   Produce copious amounts of output
595   -debug     Produce even more output which will mean nothing to most   -debug     Produce even more output which will mean nothing to most
596   -force     Do "make CLEAN" before compiling. This forces a complete rebuild.   -force     Do "make CLEAN" before compiling. This forces a complete rebuild.
597   -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.  
598   -cleanup   Aggresively removes all model output, executables and object files   -cleanup   Aggresively removes all model output, executables and object files
599              and then exits. Use with care.              and then exits. Use with care.
600    
# Line 376  scandirs() Line 616  scandirs()
616    
617    
618  ###############################################################################  ###############################################################################
 ###############################################################################  
 ###############################################################################  
619    
620    
621  #  Default properties  #  Default properties
622  debug=0  debug=0
623  verbose=1  verbose=1
 quick=0  
624  clean=0  clean=0
 ieee=1  
625  expts=''  expts=''
626    # ieee=1
627    
628  OPTFILES=  IEEE=true
629  ADDRESSES=edhill@mitgcm.org  if test "x$MITGCM_IEEE" != x ; then
630        IEEE=$MITGCM_IEEE
631    fi
632    
633    
634    CLEANUP=f
635    QUICK=f
636    NOGENMAKE=f
637    NOCLEAN=f
638    NODEPEND=f
639    
640    BASH=
641    OPTFILE=NONE
642    ADDRESSES=
643  TESTDIRS=  TESTDIRS=
644  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
645    HAVE_MPACK=
646  MPACK="$MPACKDIR/mpack"  MPACK="$MPACKDIR/mpack"
647    COMMAND=
648    if test "x$MAKE" = x ; then
649        MAKE=make
650    fi
651    if test "x$CC" = x ; then
652        CC=cc
653    fi
654    JOBS=
655    MPI=f
656    DELDIR=
657    
658    ADM=
659    
660    # Additional monitor types
661    PTRACERS_NUM="1 2 3 4 5"
662    
663  echo -n "parsing options...  "  printf "parsing options...  "
664    
665  ac_prev=  ac_prev=
666  for ac_option ; do  for ac_option ; do
# Line 414  for ac_option ; do Line 680  for ac_option ; do
680              usage ;;              usage ;;
681                    
682          -optfile | --optfile | -of | --of)          -optfile | --optfile | -of | --of)
683              ac_prev=OPTFILES ;;              ac_prev=OPTFILE ;;
684          -optfile=* | --optfile=* | -of=* | --of=*)          -optfile=* | --optfile=* | -of=* | --of=*)
685              OPTFILES=$ac_optarg ;;              OPTFILE=$ac_optarg ;;
686                    
687          -addr | --addr | -a | --a)          -addr | --addr | -a | --a)
688              ac_prev=ADDRESSES ;;              ac_prev=ADDRESSES ;;
# Line 428  for ac_option ; do Line 694  for ac_option ; do
694          -tdir=* | --tdir=*)          -tdir=* | --tdir=*)
695              TESTDIRS=$ac_optarg ;;              TESTDIRS=$ac_optarg ;;
696    
697          -quick) quick=1 ;;          -bash | --bash | -b | --b)
698                ac_prev=BASH ;;
699            -bash=* | --bash=*)
700                BASH=$ac_optarg ;;
701    
702            -command | --command | -c | --c)
703                ac_prev=COMMAND ;;
704            -command=* | --command=*)
705                COMMAND=$ac_optarg ;;
706    
707            -make | --make | -m | --m)
708                ac_prev=MAKE ;;
709            -make=* | --make=*)
710                MAKE=$ac_optarg ;;
711    
712            -ptracers | --ptracers | -ptr | --ptr)
713                ac_prev=PTRACERS_NUM ;;
714            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
715                PTRACERS_NUM=$ac_optarg ;;
716    
717            -j) ac_prev=JOBS ;;
718            -j=*) JOBS=$ac_optarg ;;
719    
720            -clean | --clean)
721                CLEANUP=t ;;
722    
723            -quick | --quick | -q | --q)
724                QUICK=t ;;
725            -nogenmake | --nogenmake | -ng | --ng)
726                NOGENMAKE=t ;;
727            -noclean | --noclean | -nc | --nc)
728                NOCLEAN=t ;;
729            -nodepend | --nodepend | -nd | --nd)
730                NODEPEND=t ;;
731    
732            -mpi) MPI=t ;;
733    
734            -adm | -ad) ADM=t ;;
735    
736            -ieee) IEEE=true ;;
737            -noieee) IEEE= ;;
738    
739          -verbose) verbose=2 ;;          -verbose) verbose=2 ;;
740          -debug) debug=1 ;;          -debug) debug=1 ;;
         -clean) clean=1 ;;  
         -noieee) ieee=0 ;;  
741          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
742    
743            -deldir | -dd) DELDIR=t ;;
744    
745          -*)          -*)
746              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
747              usage              usage
# Line 449  for ac_option ; do Line 756  for ac_option ; do
756            
757  done  done
758    
759    if test "x$QUICK" = xt ; then
760        NOGENMAKE=t
761        NOCLEAN=t
762        NODEPEND=t
763    fi
764    
765  if test "x$TESTDIRS" = x ; then  if test "x$TESTDIRS" = x ; then
766      TESTDIRS=`scandirs`      TESTDIRS=`scandirs`
767  fi  fi
768    
769    if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
770        OPTFILE=$MITGCM_OF
771    fi
772    
773    if test "x$ADM" = xt -a "x$COMMAND" = x ; then
774        COMMAND="./mitgcmuv_ad > output.txt_adm 2>&1"
775    fi
776    
777    if test "x$COMMAND" = x ; then
778        COMMAND="$MAKE output.txt"
779    fi
780    
781  echo "OK"  echo "OK"
782    
783  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
784  createcodelet  createcodelet
785    
786  #  build the mpack utility  #  build the mpack utility
787  build_mpack  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
788        echo "skipping mpack build"
789    else
790        build_mpack
791    fi
792    
793  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
794  MACH=`hostname`  MACH=`hostname`
795  UNAMEA=`uname -a`  UNAMEA=`uname -a`
796  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
797  BASE=$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
798  DNUM=0  DNUM=0
799  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
800  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 475  done Line 804  done
804  mkdir $DRESULTS  mkdir $DRESULTS
805  RETVAL=$?  RETVAL=$?
806  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
807      echo "Error: can't create results directory \"./$DRESULTS\""      echo "ERROR: Can't create results directory \"./$DRESULTS\""
808      exit 1      exit 1
809  fi  fi
810  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
811  date > $SUMMARY  printf "Start time:  " >> $SUMMARY
812  cat << EOF >> $SUMMARY  start_date=`date`
813                  T           S           U           V  echo $start_date > $SUMMARY
814  G D M    c        m  s        m  s        m  s        m  s  
815  E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .  of_path=
816  N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d  if test "x$OPTFILE" != xNONE ; then
817  2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .      if test -r $OPTFILE ; then
818            # get the path
819            path=${OPTFILE%/*}
820            if test "x$path" = x ; then
821                of_path=`pwd`
822            else
823                of_path=`( cd $path > /dev/null 2>&1 ; pwd )`
824            fi
825            file=${OPTFILE##*/}
826            OPTFILE=$of_path/$file
827            cp $OPTFILE $DRESULTS
828            echo >> $SUMMARY
829            echo "  OPTFILE=$OPTFILE" >> $SUMMARY
830        else
831            echo | tee $SUMMARY
832            echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
833            exit 1
834        fi
835    else
836        echo >> $SUMMARY
837        echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
838        echo "   so the genmake default will be used." >> $SUMMARY
839    fi
840    echo
841    echo >> $SUMMARY
842    if test "x$ADM" = x ; then
843        line_0="            ----T-----  ----S-----  ----U-----  ----V-----"
844        line_1="G D M    c        m  s        m  s        m  s        m  s"
845        line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
846        line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
847        line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
848        for ii in $PTRACERS_NUM ; do
849            #  tst=`eval 'echo $HAVE_PTR0'$ii`
850            #  if test "x$tst" = xt ; then
851            line_0="$line_0  --PTR 0"$ii"--"
852            line_1="$line_1        m  s"
853            line_2="$line_2  m  m  e  ."
854            line_3="$line_3  i  a  a  d"
855            line_4="$line_4  n  x  n  ."
856            #  fi
857        done
858        echo "$line_0" | tee -a $SUMMARY
859        echo "$line_1" | tee -a $SUMMARY
860        echo "$line_2" | tee -a $SUMMARY
861        echo "$line_3" | tee -a $SUMMARY
862        echo "$line_4" | tee -a $SUMMARY
863        echo " "       | tee -a $SUMMARY
864    else
865        echo "ADJOINT=true" >> $SUMMARY
866        echo >> $SUMMARY
867        cat << EOF | tee -a $SUMMARY
868    G D M    C  G
869    E p a R  o  r
870    N n k u  s  a
871    2 d e n  t  d
872    
873  EOF  EOF
874    fi
875    
876    #  ...and each test directory...
877    for dir in $TESTDIRS ; do
878        
879        #  Cleanup only!
880        if test "x$CLEANUP" = xt ; then
881            if test -r $dir/build/Makefile ; then
882                ( cd $dir/build ; make CLEAN )
883            fi
884            if test -r $dir/input/Makefile ; then
885                ( cd $dir/input ; make CLEAN )
886            fi
887            (
888                cd $dir
889                rm -rf tr_run.*
890            )
891            continue
892        fi
893    
894  NDIR=0      #  Verify that the testdir exists and contains previous
895        #  results in the correct location--or skip this directory!
896        fout=
897        if test "x$ADM" = x ; then
898            fout=$dir"/results/output.txt"
899        else
900            fout=$dir"/results_ad/output.txt_adm"
901        fi
902        if test ! -r $fout ; then
903            echo "can't read \"$fout\" -- skipping $dir"
904            continue
905        fi
906        if test "x$ADM" = x ; then
907            check_for_add_mon_output  $fout
908        fi
909    
910  #  For each optfile...      # Check for additional types of monitor output
 for OPTFILE in $OPTFILES ; do  
911    
912      OPTFILE=`pwd`"/$OPTFILE"      builddir="input"
913      if test ! -r $OPTFILE ; then      rundir="input"
914          echo "Error: can't read optfile \"$OPTFILE\""      use_seperate_build=0
915          exit 1      if test -d $dir/build -a -r $dir/build ; then
916            builddir="build"
917            rundir="build"
918            use_seperate_build=1
919            linkdata $use_seperate_build $dir/$rundir
920      fi      fi
     echo  
     echo "OPTFILE=$OPTFILE" >> $SUMMARY  
     echo >> $SUMMARY  
921            
922      #  ...and each test directory...      #  Check whether there are "extra runs" for this testdir
923      for dir in $TESTDIRS ; do      extra_runs=
924                if test "x$ADM" = x -a "x$use_seperate_build" = x1 ; then
925          #  Create an output dir for each OPTFILE/tdir combination          ex_run_dirs=`( cd $dir ; echo input.* )`
926          CDIR=$DRESULTS"/"$DRESULTS"_"$NDIR          echo "ex_run_dirs='$ex_run_dirs'"
927          mkdir $CDIR          for exd in $ex_run_dirs ; do
928          CDIR=`pwd`"/$CDIR"              name=`echo $exd | sed -e 's/input.//g'`
929                outf="$dir/results/output.txt.$name"
930                if test -f $outf -a -r $outf ; then
931                    extra_runs="$extra_runs $name"
932                fi
933            done
934        fi
935    
936          #  ...configue, make, run, and compare the output.      if test "x$ADM" = x ; then
937          echo "-------------------------------------------------------------------------------"          code_dir=code
938          echo          CODE_DIR=$dir/code
939          echo "Experiment:  $dir"      else
940          echo          code_dir=code_ad
941          unset genmake makedepend make run          CODE_DIR=$dir/code_ad
942          results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'      fi
943          ( cd $dir/input; rm -f *.{o,f,c,F} *.[f,F]90 work* output.txt Make* make.log; )      BUILD_DIR=$dir/$builddir
         if [ -r $dir/build ]; then  
             seperatebuilddir=1  
             builddir=build  
             rundir=build  
             ( cd $dir/build; ln -sf ../input/* . )  
         else  
             seperatebuilddir=0  
             builddir=input  
             rundir=input  
         fi  
944    
945          #  Verify that the testdir exists and contains previous      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
946          #  results in the correct location--or skip this directory!          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
947          if test ! -r $dir"/results/output.txt" ; then          continue
948              echo | tee $SUMMARY      fi
             echo "can't read \"$dir/results/output.txt\" -- skipping $dir" \  
                 | tee $SUMMARY  
             continue  
         fi  
949    
950        echo "-------------------------------------------------------------------------------"
951        echo
952        echo "Experiment:  $dir"
953        echo
954        unset genmake makedepend make run
955        results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
956    
957        #  Create an output dir for each OPTFILE/tdir combination
958        rel_CDIR=$DRESULTS"/"$dir
959        mkdir $rel_CDIR
960        CDIR=`pwd`"/$rel_CDIR"
961        
962        if test "x$CLEANUP" = xt ; then
963            makeclean $dir/$builddir
964        else
965          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
966              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
967                && symlink_mpifiles $dir $code_dir $builddir \
968              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
969              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
970              && linkdata $seperatebuilddir $dir/$rundir \              && linkdata $use_seperate_build $dir/$rundir \
971              && runmodel $dir/$builddir mitgcmuv && run=Y \              && runmodel $dir/$rundir && run=Y \
972              && results=`testoutput $dir $rundir`              && results=`testoutput $dir $rundir`
973        fi
974        
975        echo
976        if test "x$ADM" = x ; then
977            fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
978          echo          echo
979          formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          echo "$fres" >> $SUMMARY
980              ${run:-N} $results          echo "fresults='$fres'" > $CDIR"/summary.txt"
         echo  
         formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \  
             ${run:-N} $results >> $SUMMARY  
         echo "fresults='" > $CDIR"/summary.txt"  
         formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \  
             ${run:-N} $results >> $CDIR"/summary.txt"  
         echo "'" >> $CDIR"/summary.txt"  
981          echo "MACH='$MACH'" >> $CDIR"/summary.txt"          echo "MACH='$MACH'" >> $CDIR"/summary.txt"
982          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
983          echo "DATE='$DATE'" >> $CDIR"/summary.txt"          echo "DATE='$DATE'" >> $CDIR"/summary.txt"
984          echo "tdir='$dir'" >> $CDIR"/summary.txt"          echo "tdir='$dir'" >> $CDIR"/summary.txt"
985    
986          (          for ex in $extra_runs ; do
987              cd $DRESULTS              test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
988              tar -cf $NDIR".tar" $DRESULTS"_"$NDIR > /dev/null 2>&1              for ldir in input.$ex input ; do
989              gzip $NDIR".tar"                  (
990          )                      cd "$dir/$ldir" > /dev/null 2>&1
991                        ls -1 2>/dev/null \
992                            | sed -e 's|^CVS$||g' | sed -e 's|^output.txt$||g'
993                    ) > tr_exrun_links
994                    (
995                        cd "$dir/tr_run.$ex"
996                        cat ../../tr_exrun_links | while read i ; do
997                            if test ! "x$i" = x ; then
998                                test ! -r $i  &&  ln -s "../"$ldir"/"$i $i
999                            fi
1000                        done
1001                    )
1002                    test -e tr_exrun_links  &&  rm -f tr_exrun_links
1003                done
1004                ldir=build
1005                (
1006                    cd "$dir/$ldir" > /dev/null 2>&1
1007                    ls -1 Makefile *.[fFhco] mitgcmuv  2>/dev/null \
1008                        | sed -e 's|^CVS$||g' | sed -e 's|^output.txt$||g'
1009                ) > tr_exrun_links
1010                (
1011                    cd "$dir/tr_run.$ex"
1012                        cat ../../tr_exrun_links | while read i ; do
1013                            if test ! "x$i" = x ; then
1014                                test ! -r $i  &&  ln -s "../"$ldir"/"$i $i
1015                            fi
1016                        done
1017                )
1018                test -e tr_exrun_links  &&  rm -f tr_exrun_links
1019                runmodel $dir/tr_run.$ex && run=Y \
1020                    && results=`testoutput $dir tr_run.$ex "."$ex`
1021                fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1022                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1023                fres="$fres.$ex"
1024                echo
1025                echo "$fres" >> $SUMMARY
1026                echo "fresults='$fres'" > $CDIR"/summary.txt"
1027                echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1028                echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1029                echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1030                echo "tdir='$dir'" >> $CDIR"/summary.txt"
1031            done
1032        else
1033            fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1034            fres=$fres"$results   $dir"
1035            echo
1036            echo "$fres" >> $SUMMARY
1037            echo "fresults='$fres'" > $CDIR"/summary.txt"
1038            echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1039            echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1040            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1041            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1042        fi
1043        
1044        echo "-------------------------------------------------------------------------------"
1045        
1046    done
1047    
1048          $MPACK -s MITgcm-test -m 1000000 $DRESULTS"/"$NDIR".tar.gz" $ADDRESSES  printf "Start time:  " >> $SUMMARY
1049    echo $start_date >> $SUMMARY
1050    printf "End time:    " >> $SUMMARY
1051    date >> $SUMMARY
1052    
1053    #  If addresses were supplied and mpack built successfully, then try
1054    #  to send email using mpack.
1055    if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1056        echo "No results email was sent."
1057    else
1058        if test "x$HAVE_MPACK" = xt ; then
1059            tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1060                && gzip $DRESULTS".tar" \
1061                && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1062          RETVAL=$?          RETVAL=$?
1063          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1064              echo "Warning: \"$MPACK\" failed -- please contact <edhill@mitgcm.org>"              echo
1065                echo "Warning: The tar, gzip, & mpack step failed.  Please send email"
1066                echo "  to <MITgcm-support@mitgcm.org> for help.  You may copy the "
1067                echo "  summary of results from the directory \"$DRESULTS\"."
1068                echo
1069          else          else
1070              rm -f $DRESULTS"/"$NDIR".tar*"              echo
1071                echo "An email containing results was sent to the following addresses:"
1072                echo "  \"$ADDRESSES\""
1073                echo
1074          fi          fi
1075            test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"
1076            test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"
1077        fi
1078    fi
1079    
1080          NDIR=$(( $NDIR + 1 ))  # rm -f tmp_cmpnum.f a.out
1081            rm -f tmp_cmpnum.c tmp_cmpnum
     done  
 done  
1082    
1083  rm tmp_cmpnum.f a.out  if test "x$CLEANUP" != xt ; then
1084        cat $SUMMARY | sed 's/ -- -- -- --//g'
1085        if test -e tr_out.txt ; then
1086            mv tr_out.txt tr_out.txt.old
1087        fi
1088        cat $SUMMARY | sed 's/ -- -- -- --//g' > tr_out.txt
1089    fi
1090    
1091  cat $SUMMARY  if test "x$DELDIR" = xt ; then
1092        rm -rf $DRESULTS
1093    fi
1094    

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.67

  ViewVC Help
Powered by ViewVC 1.1.22