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

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

  ViewVC Help
Powered by ViewVC 1.1.22