/[MITgcm]/MITgcm/verification/testreport
ViewVC logotype

Diff of /MITgcm/verification/testreport

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

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

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.71

  ViewVC Help
Powered by ViewVC 1.1.22