/[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.79 by heimbach, Wed Jun 7 01:20:26 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 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 "  (-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\""
36        echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""
37        echo "  (-nogenmake|-ng)         skip the genmake stage"
38        echo "  (-noclean|-nc)           skip the \"make clean\" stage"
39        echo "  (-nodepend|-nd)          skip the \"make depend\" stage"
40        echo "  (-deldir|-dd)            on success, delete the output directory"
41        echo
42        echo "and where STRING can be a whitespace-delimited list"
43        echo "such as:"
44        echo
45        echo "  -t 'exp0 exp2 exp3' "
46        echo "  -addr='abc@123.com testing@home.org'"
47        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      echo
51      exit 1      exit 1
52  }  }
# Line 20  usage() Line 54  usage()
54  #  build the mpack utility  #  build the mpack utility
55  build_mpack()  build_mpack()
56  {  {
57      echo -n "building the mpack utility...  "      printf "building the mpack utility...  "
58      if test ! -x "$MPACKDIR/mpack" ; then      if test ! -x "$MPACKDIR/mpack" ; then
59          if test ! -d $MPACKDIR ; then          if test ! -d $MPACKDIR ; then
60                echo
61              echo "Error: can't find \"$MPACKDIR\""              echo "Error: can't find \"$MPACKDIR\""
62              echo "  are you sure this program is being run in the correct "              echo "  are you sure this program is being run in the correct "
63              echo "  (that is, \"MITGCM_ROOT\verification\") directory?"              echo "  (that is, \"MITGCM_ROOT\verification\") directory?"
64              exit 1              echo
65                HAVE_MPACK=f
66            fi
67            printf "building mpack...  "
68            if test "x$CC" = x ; then
69                export CC=cc
70          fi          fi
71          echo -n "building mpack...  "          ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1
         ( cd $MPACKDIR && ./configure && make ) > build_mpack.out 2>&1  
72          RETVAL=$?          RETVAL=$?
73          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
74              echo              echo
75              echo "Error building the mpack tools at: $MPACK_DIR"              echo "Error building the mpack tools at: $MPACK_DIR"
76              exit 1              echo
77                HAVE_MPACK=f
78            else
79                rm -f tr_build_mpack.out
80                HAVE_MPACK=t
81          fi          fi
82        else
83            HAVE_MPACK=t
84      fi      fi
85      echo "OK"      echo "OK"
86  }  }
87    
 compare_lines()  
 {  
     # use codelet to compare lines  
     if [ $verbose -gt 1 ]; then  
         cat tmp3.txt 1>&2  
     fi  
     return `./a.out < tmp3.txt`  
 }  
   
88  testoutput_for_prop()  testoutput_for_prop()
89  {  {
90      # testoutput_for_prop dir s1 label subdir      # testoutput_for_prop dir s1 label subdir extension
91      #      #
92      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt
93      #  using search strings s1 and text label      #  using search strings s1 and text label
# Line 60  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 73  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 90  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 102  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 122  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()
290  {  {
291      # genmakemodel directory      # genmakemodel directory
292      GENMAKE2="../../../tools/genmake2"      if test "x$NOGENMAKE" = xt ; then
293      (          echo "genmake skipped!"
294          cd $1;      else
295          printf 'genmake ... ' 1>&2          if test "x$BASH" = x ; then
296          # ../../../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  
297          else          else
298              echo "succesful" 1>&2              GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
299          fi          fi
300      )          (
301                cd $1;
302                command="$GENMAKE2  -ds -m $MAKE"
303                if test "x$ADM" = x ; then
304                    command="$command --mods=../code"
305                else
306                    command="$command --mods=../code_ad"
307                fi
308                if test "x$OPTFILE" != xNONE ; then
309                    command="$command --optfile=$OPTFILE"
310                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
319                RETVAL=$?
320                #  Reduce the size of the testing emails!
321                head -100 Makefile > $CDIR/Makefile_head
322                if test "x$RETVAL" != x0 ; then
323                    tail make.log
324                    echo "genmakemodel: genmake failed" 1>&2
325                    cp genmake_* make.log $CDIR
326                    return 1
327                else
328                    echo "successful" 1>&2
329                fi
330            )
331        fi
332  }  }
333    
334  makeclean()  makeclean()
335  {  {
336      # makeclean directory      # makeclean directory
337      (      if test "x$NOCLEAN" = xt ; then
338          cd $1;          echo "make CLEAN skipped!"
339          rm -f output.txt      else
340          printf 'make CLEAN ... ' 2>&1          (
341          if test -r Makefile ; then              cd $1;
342              make CLEAN >> make.log 2>&1              if test -e output.txt ; then
343              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  
344              fi              fi
345          fi              printf 'make CLEAN ... ' 2>&1
346          echo succesful 1>&2              if test -r Makefile ; then
347          exit 0                  $MAKE CLEAN >> make.log 2>&1
348      )                  RETVAL=$?
349                    if test "x$RETVAL" != x0 ; then
350                        tail make.log
351                        echo "makeclean: \"make CLEAN\" failed" 1>&2
352                        cp make.log $CDIR"/make.log"
353                        return 1
354                    fi
355                fi
356                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
372            )
373        fi
374  }  }
375    
376  makedependmodel()  makedependmodel()
377  {  {
378      # makedependmodel directory      # makedependmodel directory
379      (      if test "x$NODEPEND" = xt ; then
380          cd $1;          echo "make depend skipped!"
381          printf 'make depend ... ' 1>&2      else
382          make depend >> make.log 2>&1          (
383          RETVAL=$?              cd $1;
384          if test "x$RETVAL" != x0 ; then              printf 'make depend ... ' 1>&2
385              tail make.log              $MAKE depend >> make.log 2>&1
386              echo "makedependmodel: make depend failed" 1>&2              RETVAL=$?
387              cp make.log $CDIR"/make.log"              if test "x$RETVAL" != x0 ; then
388              return 1                  tail make.log
389          else                  echo "makedependmodel: make depend failed" 1>&2
390              echo succesful 1>&2                  cp make.log $CDIR"/make.log"
391          fi                  return 1
392      )              else
393                    echo successful 1>&2
394                fi
395            )
396        fi
397  }  }
398    
399  makemodel()  makemodel()
# Line 231  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 239  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 ; ls -1 *.bin | grep -v CVS )`
493                    for i in $files ; do
494                        if test ! -d "../input/"$i ; then
495                            ln -sf "../input/"$i $i
496                        fi
497                    done
498                    files=`( cd ../input_ad ; ls -1 | grep -v CVS )`
499                    for i in $files ; do
500                        if test ! -d "../input_ad/"$i ; then
501                            ln -sf "../input_ad/"$i $i
502                        fi
503                    done
504                fi
505            )
506      fi      fi
507  }  }
508    
509  runmodel()  runmodel()
510  {  {
511      # runmodel directory exe      # runmodel directory
512      #      #
513      #  runs the model "exe" in "directory" (exe is relative to directory)      #  runs "$COMMAND in "directory"
514        #  (where "$COMMAND" is relative to "directory")
515      (      (
516          cd $1          cd $1
517          if [ -x $2 ]; then          printf 'runmodel in %s ...' $1 1>&2
518              if [ $quick -eq 0 ]; then          # make output.txt
519                  rm -f output.txt          echo
520              fi          rm -f run.log
521              printf 'runmodel: ' 1>&2          if test $OUTPUTFILE -ot $EXECUTABLE ; then
522              make output.txt             ( eval $COMMAND ) > run.log 2>&1
523              RETVAL=$?             RETVAL=$?
524              if test "x$RETVAL" = x0 ; then          else
525                  cp output.txt $CDIR"/output.txt"             echo " $OUTPUTFILE is up to date " > run.log 2>&1
526                  return 0             RETVAL=0
527              else          fi
528                  return 1          # echo "COMMAND='$COMMAND'"
529              fi          # echo "pwd='"`pwd`"'"
530            if test "x$RETVAL" = x0 ; then
531                tail run.log
532                echo successful 1>&2
533                # === Reduce the size of the testing emails!
534                # if test "x$ADM" = x ; then
535                #   cp output.txt $CDIR"/output.txt"
536                # else
537                #   cp output_adm.txt $CDIR"/output_adm.txt"
538                # fi
539                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
540                return 0
541            else
542                tail run.log
543                echo failed 1>&2
544                cp run.log $CDIR"/run.log"
545                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
546                return 1
547          fi          fi
548      )      )
549  }  }
# Line 283  createcodelet() Line 552  createcodelet()
552  {  {
553      # create codelet for comparing model output      # create codelet for comparing model output
554    
555      echo -n "creating the comparison code...  "      printf "creating the comparison code...  "
556      cat > tmp_cmpnum.f <<EOFA      cat > tmp_cmpnum.c <<EOF
557        program cmpnum  #include <stdio.h>
558        implicit none  #include <math.h>
559        real*8 a,b,diff  int main( int argc, char** argv )  {
560        integer linnum,best    int linnum,best,lncnt;
561        best=-16    double a,b,abave,relerr;
562    99  read(*,*,end=70,err=60) linnum,a,b    best = -22;
563        diff=0.5*(abs(a)+abs(b))    lncnt = 0;
564  c     print *,a,b,diff,abs(a-b)/diff    while( 1 & (lncnt+=1) < 999 )  {
565        if (diff.gt.1.e-12) then      scanf("%d", &linnum);
566          diff=abs(a-b)/diff      if (linnum == -1)  break;
567          if (diff.gt.0.) then      scanf("%lf", &a);  scanf("%lf", &b);
568  c         print *,int(log10(diff)),diff      abave = 0.5*(fabs(a)+fabs(b));
569            linnum=int(log10(diff))      if (abave > 0.0) {
570            best=max(best,linnum)        relerr=fabs(a-b)/abave;
571          endif        if (relerr > 0.0) { linnum = (int)rint(log10(relerr)); }
572        else        else { linnum = -16 ; }
573          if (best.eq.-16.and.diff.ne.0.) best=-22        best = (best > linnum) ? best : linnum;
574        endif      }
575        goto 99    }
576    60  stop 'cmpnum: An error occured reading a,b'    if (lncnt == 999) best=-29;
577    70  print *,-best    printf("%d\n", -best);
578        end    return 0;
579  EOFA  }
580    EOF
581        $CC -o tmp_cmpnum tmp_cmpnum.c -lm
582    
583      f77 tmp_cmpnum.f      if [ -x ./tmp_cmpnum ]; then
     if [ -x ./a.out ]; then  
584          echo "OK"          echo "OK"
585          return 0          return 0
586      else      else
587          echo          echo
588          echo "createcodelet: failed to compile codelet" | tee          echo "ERROR: failed to compile comparison code -- please specify"
589            echo "  a C compiler using the CC environment variable."
590          exit 1          exit 1
591      fi      fi
592  }  }
# Line 347  show_help() Line 618  show_help()
618  {  {
619      cat - << EOF      cat - << EOF
620  $0 [-help] [-quick] [-verbose] dir1 [dir2] [...]  $0 [-help] [-quick] [-verbose] dir1 [dir2] [...]
621   -help      Show this help message  
622   -quick     Skip "genmake" and "make depend" if the Makefile exists   -help|-h      Show this help message
623   -quiet     Reduce the amount of output   -quiet     Reduce the amount of output
624   -verbose   Produce copious amounts of output   -verbose   Produce copious amounts of output
625   -debug     Produce even more output which will mean nothing to most   -debug     Produce even more output which will mean nothing to most
626   -force     Do "make CLEAN" before compiling. This forces a complete rebuild.   -force     Do "make CLEAN" before compiling. This forces a complete rebuild.
627   -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.  
628   -cleanup   Aggresively removes all model output, executables and object files   -cleanup   Aggresively removes all model output, executables and object files
629              and then exits. Use with care.              and then exits. Use with care.
630    
# Line 376  scandirs() Line 646  scandirs()
646    
647    
648  ###############################################################################  ###############################################################################
 ###############################################################################  
 ###############################################################################  
649    
650    
651  #  Default properties  #  Default properties
652  debug=0  debug=0
653  verbose=1  verbose=1
 quick=0  
654  clean=0  clean=0
 ieee=1  
655  expts=''  expts=''
656    # ieee=1
657    
658  OPTFILES=  IEEE=true
659  ADDRESSES=edhill@mitgcm.org  if test "x$MITGCM_IEEE" != x ; then
660        IEEE=$MITGCM_IEEE
661    fi
662    
663    
664    CLEANUP=f
665    QUICK=f
666    NOGENMAKE=f
667    NOCLEAN=f
668    NODEPEND=f
669    POSTCLEAN=f
670    
671    BASH=
672    OPTFILE=NONE
673    ADDRESSES=
674  TESTDIRS=  TESTDIRS=
675  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
676    HAVE_MPACK=
677  MPACK="$MPACKDIR/mpack"  MPACK="$MPACKDIR/mpack"
678    COMMAND=
679    if test "x$MAKE" = x ; then
680        MAKE=make
681    fi
682    if test "x$CC" = x ; then
683        CC=cc
684    fi
685    JOBS=
686    MPI=f
687    OUTDIR=
688    DELDIR=
689    
690    ADM=
691    
692  echo -n "parsing options...  "  # Additional monitor types
693    PTRACERS_NUM="1 2 3 4 5"
694    
695    printf "parsing options...  "
696    
697  ac_prev=  ac_prev=
698  for ac_option ; do  for ac_option ; do
# Line 414  for ac_option ; do Line 712  for ac_option ; do
712              usage ;;              usage ;;
713                    
714          -optfile | --optfile | -of | --of)          -optfile | --optfile | -of | --of)
715              ac_prev=OPTFILES ;;              ac_prev=OPTFILE ;;
716          -optfile=* | --optfile=* | -of=* | --of=*)          -optfile=* | --optfile=* | -of=* | --of=*)
717              OPTFILES=$ac_optarg ;;              OPTFILE=$ac_optarg ;;
718                    
719          -addr | --addr | -a | --a)          -addr | --addr | -a | --a)
720              ac_prev=ADDRESSES ;;              ac_prev=ADDRESSES ;;
# Line 428  for ac_option ; do Line 726  for ac_option ; do
726          -tdir=* | --tdir=*)          -tdir=* | --tdir=*)
727              TESTDIRS=$ac_optarg ;;              TESTDIRS=$ac_optarg ;;
728    
729          -quick) quick=1 ;;          -bash | --bash | -b | --b)
730                ac_prev=BASH ;;
731            -bash=* | --bash=*)
732                BASH=$ac_optarg ;;
733    
734            -command | --command | -c | --c)
735                ac_prev=COMMAND ;;
736            -command=* | --command=*)
737                COMMAND=$ac_optarg ;;
738    
739            -make | --make | -m | --m)
740                ac_prev=MAKE ;;
741            -make=* | --make=*)
742                MAKE=$ac_optarg ;;
743    
744            -odir | --odir)
745                ac_prev=OUTDIR ;;
746            -odir=* | --odir=*)
747                OUTDIR=$ac_optarg ;;
748    
749            -ptracers | --ptracers | -ptr | --ptr)
750                ac_prev=PTRACERS_NUM ;;
751            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
752                PTRACERS_NUM=$ac_optarg ;;
753    
754            -j) ac_prev=JOBS ;;
755            -j=*) JOBS=$ac_optarg ;;
756    
757            -clean | --clean)
758                CLEANUP=t ; DELDIR=t ;;
759    
760            -quick | --quick | -q | --q)
761                QUICK=t ;;
762            -nogenmake | --nogenmake | -ng | --ng)
763                NOGENMAKE=t ;;
764            -noclean | --noclean | -nc | --nc)
765                NOCLEAN=t ;;
766            -nodepend | --nodepend | -nd | --nd)
767                NODEPEND=t ;;
768    
769            -postclean | --postclean | -pc | --pc)
770                POSTCLEAN=t ;;
771    
772            -mpi) MPI=t ;;
773    
774            -adm | -ad) ADM=t ;;
775    
776            -ieee) IEEE=true ;;
777            -noieee) IEEE= ;;
778    
779          -verbose) verbose=2 ;;          -verbose) verbose=2 ;;
780          -debug) debug=1 ;;          -debug) debug=1 ;;
         -clean) clean=1 ;;  
         -noieee) ieee=0 ;;  
781          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
782    
783            -deldir | -dd) DELDIR=t ;;
784    
785          -*)          -*)
786              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
787              usage              usage
# Line 449  for ac_option ; do Line 796  for ac_option ; do
796            
797  done  done
798    
799    if test "x$QUICK" = xt ; then
800        NOGENMAKE=t
801        NOCLEAN=t
802        NODEPEND=t
803    fi
804    
805  if test "x$TESTDIRS" = x ; then  if test "x$TESTDIRS" = x ; then
806      TESTDIRS=`scandirs`      TESTDIRS=`scandirs`
807  fi  fi
808    
809  echo "OK"  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
810        OPTFILE=$MITGCM_OF
811    fi
812    
813    if test "x$ADM" = xt ; then
814        EXECUTABLE="mitgcmuv_ad"
815        OUTPUTFILE="output_adm.txt"
816    else
817        EXECUTABLE="mitgcmuv"
818        OUTPUTFILE="output.txt"
819    fi
820    
821    if test "x$ADM" = xt -a "x$COMMAND" = x ; then
822        COMMAND="./$EXECUTABLE > $OUTPUTFILE"
823    fi
824    
825    if test "x$COMMAND" = x ; then
826        COMMAND="./$EXECUTABLE > $OUTPUTFILE"
827    fi
828    
829    #echo "OK"
830    echo "OK (COMMAND= $COMMAND )"
831    
832  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
833  createcodelet  createcodelet
834    
835  #  build the mpack utility  #  build the mpack utility
836  build_mpack  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
837        echo "skipping mpack build"
838    else
839        build_mpack
840    fi
841    
842  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
843  MACH=`hostname`  MACH=`hostname`
844  UNAMEA=`uname -a`  UNAMEA=`uname -a`
845  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
846  BASE=$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
847    if test "x$OUTDIR" != x ; then
848        BASE="tr_"$OUTDIR"_"$DATE"_"
849    fi
850  DNUM=0  DNUM=0
851  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
852  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 475  done Line 856  done
856  mkdir $DRESULTS  mkdir $DRESULTS
857  RETVAL=$?  RETVAL=$?
858  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
859      echo "Error: can't create results directory \"./$DRESULTS\""      echo "ERROR: Can't create results directory \"./$DRESULTS\""
860      exit 1      exit 1
861  fi  fi
862  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
863  date > $SUMMARY  printf "Start time:  " >> $SUMMARY
864  cat << EOF >> $SUMMARY  start_date=`date`
865                  T           S           U           V  echo $start_date > $SUMMARY
866  G D M    c        m  s        m  s        m  s        m  s  
867  E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .  of_path=
868  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
869  2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .      if test -r $OPTFILE ; then
870            # get the path
871            path=${OPTFILE%/*}
872            if test "x$path" = x ; then
873                of_path=`pwd`
874            else
875                of_path=`( cd $path > /dev/null 2>&1 ; pwd )`
876            fi
877            file=${OPTFILE##*/}
878            OPTFILE=$of_path/$file
879            cp $OPTFILE $DRESULTS
880            echo >> $SUMMARY
881            echo "  OPTFILE=$OPTFILE" >> $SUMMARY
882        else
883            echo | tee $SUMMARY
884            echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
885            exit 1
886        fi
887    else
888        echo >> $SUMMARY
889        echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
890        echo "   so the genmake default will be used." >> $SUMMARY
891    fi
892    echo
893    echo >> $SUMMARY
894    if test "x$ADM" = x ; then
895        line_0="            ----T-----  ----S-----  ----U-----  ----V-----"
896        line_1="G D M    c        m  s        m  s        m  s        m  s"
897        line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
898        line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
899        line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
900        for ii in $PTRACERS_NUM ; do
901            #  tst=`eval 'echo $HAVE_PTR0'$ii`
902            #  if test "x$tst" = xt ; then
903            line_0="$line_0  --PTR 0"$ii"--"
904            line_1="$line_1        m  s"
905            line_2="$line_2  m  m  e  ."
906            line_3="$line_3  i  a  a  d"
907            line_4="$line_4  n  x  n  ."
908            #  fi
909        done
910        echo "$line_0" | tee -a $SUMMARY
911        echo "$line_1" | tee -a $SUMMARY
912        echo "$line_2" | tee -a $SUMMARY
913        echo "$line_3" | tee -a $SUMMARY
914        echo "$line_4" | tee -a $SUMMARY
915        echo " "       | tee -a $SUMMARY
916    else
917        echo "ADJOINT=true" >> $SUMMARY
918        echo >> $SUMMARY
919        cat << EOF | tee -a $SUMMARY
920    G D M    C  G
921    E p a R  o  r
922    N n k u  s  a
923    2 d e n  t  d
924    
925  EOF  EOF
926    fi
927    
928  NDIR=0  #  ...and each test directory...
929    for dir in $TESTDIRS ; do
930        
931        #  Cleanup only!
932        if test "x$CLEANUP" = xt ; then
933            if test -r $dir/build/Makefile ; then
934                ( cd $dir/build ; make CLEAN )
935            fi
936            if test -r $dir/input/Makefile ; then
937                ( cd $dir/input ; make CLEAN )
938            fi
939            (
940                cd $dir
941                rm -rf tr_run.*
942            )
943            continue
944        fi
945    
946  #  For each optfile...      #  Verify that the testdir exists and contains previous
947  for OPTFILE in $OPTFILES ; do      #  results in the correct location--or skip this directory!
948        fout=
949        if test "x$ADM" = x ; then
950            fout=$dir"/results/output.txt"
951        else
952            fout=$dir"/results_ad/output_adm.txt"
953        fi
954        if test ! -r $fout ; then
955            echo "can't read \"$fout\" -- skipping $dir"
956            continue
957        fi
958        if test "x$ADM" = x ; then
959            check_for_add_mon_output  $fout
960        fi
961    
962      OPTFILE=`pwd`"/$OPTFILE"      # Check for additional types of monitor output
963      if test ! -r $OPTFILE ; then  
964          echo "Error: can't read optfile \"$OPTFILE\""      builddir="input"
965          exit 1      rundir="input"
966        use_seperate_build=0
967        if test -d $dir/build -a -r $dir/build ; then
968            builddir="build"
969            rundir="build"
970            use_seperate_build=1
971            linkdata $use_seperate_build $dir/$rundir
972      fi      fi
     echo  
     echo "OPTFILE=$OPTFILE" >> $SUMMARY  
     echo >> $SUMMARY  
973            
974      #  ...and each test directory...      #  Check whether there are "extra runs" for this testdir
975      for dir in $TESTDIRS ; do      extra_runs=
976                if test "x$ADM" = x -a "x$use_seperate_build" = x1 ; then
977          #  Create an output dir for each OPTFILE/tdir combination          ex_run_dirs=`( cd $dir ; echo input.* )`
978          CDIR=$DRESULTS"/"$DRESULTS"_"$NDIR          echo "ex_run_dirs='$ex_run_dirs'"
979          mkdir $CDIR          for exd in $ex_run_dirs ; do
980          CDIR=`pwd`"/$CDIR"              name=`echo $exd | sed -e 's/input.//g'`
981                outf="$dir/results/output.txt.$name"
982                if test -f $outf -a -r $outf ; then
983                    extra_runs="$extra_runs $name"
984                fi
985            done
986        fi
987    
988          #  ...configue, make, run, and compare the output.      if test "x$ADM" = x ; then
989          echo "-------------------------------------------------------------------------------"          code_dir=code
990          echo          CODE_DIR=$dir/code
991          echo "Experiment:  $dir"      else
992          echo          code_dir=code_ad
993          unset genmake makedepend make run          CODE_DIR=$dir/code_ad
994          results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'      fi
995          ( 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  
996    
997          #  Verify that the testdir exists and contains previous      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
998          #  results in the correct location--or skip this directory!          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
999          if test ! -r $dir"/results/output.txt" ; then          continue
1000              echo | tee $SUMMARY      fi
             echo "can't read \"$dir/results/output.txt\" -- skipping $dir" \  
                 | tee $SUMMARY  
             continue  
         fi  
1001    
1002        echo "-------------------------------------------------------------------------------"
1003        echo
1004        echo "Experiment:  $dir"
1005        echo
1006        unset genmake makedepend make run
1007        results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1008    
1009        #  Create an output dir for each OPTFILE/tdir combination
1010        rel_CDIR=$DRESULTS"/"$dir
1011        mkdir $rel_CDIR
1012        CDIR=`pwd`"/$rel_CDIR"
1013        
1014        if test "x$CLEANUP" = xt ; then
1015            makeclean $dir/$builddir
1016        else
1017          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1018              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1019                && symlink_mpifiles $dir $code_dir $builddir \
1020              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1021              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1022              && linkdata $seperatebuilddir $dir/$rundir \              && linkdata $use_seperate_build $dir/$rundir \
1023              && runmodel $dir/$builddir mitgcmuv && run=Y \              && runmodel $dir/$rundir && run=Y \
1024              && results=`testoutput $dir $rundir`              && results=`testoutput $dir $rundir`
1025        fi
1026        
1027        echo
1028        if test "x$ADM" = x ; then
1029            fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1030          echo          echo
1031          formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          echo "$fres" >> $SUMMARY
1032              ${run:-N} $results          echo "fresults='$fres'" > $CDIR"/summary.txt"
1033            echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1034            echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1035            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1036            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1037    
1038            for ex in $extra_runs ; do
1039                unset run
1040                results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1041                #  Create an output dir for each OPTFILE/tdir.ex combination
1042                rel_CDIR=$DRESULTS"/"$dir"."$ex
1043                mkdir $rel_CDIR
1044                CDIR=`pwd`"/$rel_CDIR"
1045                test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1046                for ldir in input.$ex input ; do
1047                    (
1048                        cd "$dir/$ldir" > /dev/null 2>&1
1049                        ls -1 2>/dev/null \
1050                            | sed -e 's|^CVS$||g' | sed -e 's|^output.txt$||g'
1051                    ) > tr_exrun_links
1052                    (
1053                        cd "$dir/tr_run.$ex"
1054                        cat ../../tr_exrun_links | while read i ; do
1055                            if test ! "x$i" = x ; then
1056                                test ! -r $i  &&  ln -s "../"$ldir"/"$i $i
1057                            fi
1058                        done
1059                    )
1060                    test -e tr_exrun_links  &&  rm -f tr_exrun_links
1061                done
1062                ldir=build
1063                (
1064                    cd $dir/tr_run.$ex
1065                    test ! -e mitgcmuv  &&  ln -s "../"$ldir"/"mitgcmuv .
1066                )
1067                runmodel $dir/tr_run.$ex && run=Y \
1068                    && results=`testoutput $dir tr_run.$ex "."$ex`
1069                fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1070                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1071                fres="$fres.$ex"
1072                echo
1073                echo "$fres" >> $SUMMARY
1074                echo "fresults='$fres'" > $CDIR"/summary.txt"
1075                echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1076                echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1077                echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1078                echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1079            done
1080        else
1081            fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1082            fres=$fres"$results   $dir"
1083          echo          echo
1084          formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          echo "$fres" >> $SUMMARY
1085              ${run:-N} $results >> $SUMMARY          echo "fresults='$fres'" > $CDIR"/summary.txt"
         echo "fresults='" > $CDIR"/summary.txt"  
         formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \  
             ${run:-N} $results >> $CDIR"/summary.txt"  
         echo "'" >> $CDIR"/summary.txt"  
1086          echo "MACH='$MACH'" >> $CDIR"/summary.txt"          echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1087          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1088          echo "DATE='$DATE'" >> $CDIR"/summary.txt"          echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1089          echo "tdir='$dir'" >> $CDIR"/summary.txt"          echo "tdir='$dir'" >> $CDIR"/summary.txt"
1090            grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1091                               >> $CDIR"/summary.txt"
1092        fi
1093    
1094          (      postclean $dir/$builddir
1095              cd $DRESULTS      
1096              tar -cf $NDIR".tar" $DRESULTS"_"$NDIR > /dev/null 2>&1      echo "-------------------------------------------------------------------------------"
1097              gzip $NDIR".tar"      
1098          )  done
1099    
1100          $MPACK -s MITgcm-test -m 1000000 $DRESULTS"/"$NDIR".tar.gz" $ADDRESSES  printf "Start time:  " >> $SUMMARY
1101    echo $start_date >> $SUMMARY
1102    printf "End time:    " >> $SUMMARY
1103    date >> $SUMMARY
1104    
1105    #  If addresses were supplied and mpack built successfully, then try
1106    #  to send email using mpack.
1107    if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1108        echo "No results email was sent."
1109    else
1110        if test "x$HAVE_MPACK" = xt ; then
1111            tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1112                && gzip $DRESULTS".tar" \
1113                && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1114          RETVAL=$?          RETVAL=$?
1115          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1116              echo "Warning: \"$MPACK\" failed -- please contact <edhill@mitgcm.org>"              echo
1117                echo "Warning: The tar, gzip, & mpack step failed.  Please send email"
1118                echo "  to <MITgcm-support@mitgcm.org> for help.  You may copy the "
1119                echo "  summary of results from the directory \"$DRESULTS\"."
1120                echo
1121          else          else
1122              rm -f $DRESULTS"/"$NDIR".tar*"              echo
1123                echo "An email containing results was sent to the following addresses:"
1124                echo "  \"$ADDRESSES\""
1125                echo
1126          fi          fi
1127            test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"
1128            test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"
1129        fi
1130    fi
1131    
1132          NDIR=$(( $NDIR + 1 ))  # rm -f tmp_cmpnum.f a.out
1133            rm -f tmp_cmpnum.c tmp_cmpnum
     done  
 done  
1134    
1135  rm tmp_cmpnum.f a.out  if test "x$CLEANUP" != xt ; then
1136        cat $SUMMARY | sed 's/ -- -- -- --//g'
1137        if test -e tr_out.txt ; then
1138            mv tr_out.txt tr_out.txt.old
1139        fi
1140        cat $SUMMARY | sed 's/ -- -- -- --//g' > tr_out.txt
1141    fi
1142    
1143  cat $SUMMARY  if test "x$DELDIR" = xt ; then
1144        rm -rf $DRESULTS
1145    fi
1146    

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

  ViewVC Help
Powered by ViewVC 1.1.22