/[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.11 by edhill, Fri Oct 10 03:29:44 2003 UTC revision 1.85 by jmc, Fri Jul 14 22:00:51 2006 UTC
# Line 1  Line 1 
1  #!/bin/bash  #! /usr/bin/env bash
2  #  #
3  #  $Header$  #  $Header$
4  #  $Name$  #  $Name$
# Line 11  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 "  (-mpi)                   use MPI input files"      echo "  (-mth)                   run multi threaded (using eedata.mth)"
15        echo "  (-mpi)                   compile and run using MPI"
16      echo "  (-ieee|-noieee)          if possible, use IEEE compiler flags"      echo "  (-ieee|-noieee)          if possible, use IEEE compiler flags"
17        echo "                             (DEF=\"-ieee\")"
18      echo "  (-optfile=|-of=)STRING   list of optfiles to use"      echo "  (-optfile=|-of=)STRING   list of optfiles to use"
19      echo "  (-a|-addr)STRING         list of email recipients"      echo "  (-a|-addr) STRING        list of email recipients"
20      echo "                             (DEF=\"edhill@mitgcm.org\")"      echo "                             (DEF=\"edhill@mitgcm.org\")"
21      echo "  (-t|-tdir)STRING         list of test dirs to use"      echo "  (-t|-tdir) STRING        list of group and/or exp. dirs to test"
22      echo "                             (DEF=\"\" which builds all)"      echo "                             (recognized groups: basic, tutorials)"
23      echo "  (-b|-bash)STRING         location of \"bash\" executable"      echo "                             (DEF=\"\" which test all)"
24      echo "                             (DEF=\"\" for \"/bin/bash\")"      echo "  (-b|-bash) STRING        preferred location of a \"bash\" or"
25      echo "  (-command)STRING         command to run"      echo "                             Bourne-compatible \"sh\" shell"
26        echo "                             (DEF=\"\" for \"bash\")"
27        echo "  (-adm|-ad)               perform an adjoint run"
28        echo "  (-command) STRING        command to run"
29      echo "                             (DEF=\"make output.txt\")"      echo "                             (DEF=\"make output.txt\")"
30      echo "  (-m|-make)STRING         command to use for \"make\""      echo "  (-m|-make) STRING        command to use for \"make\""
31      echo "                             (DEF=\"make\")"      echo "                             (DEF=\"make\")"
32        echo "  (-odir) STRING           used to build output directory name"
33        echo "                             (DEF=\"hostname\")"
34        echo "  (-ptracers|-ptr) STRING  specify which ptracers to test"
35        echo "                             (DEF=\"1 2 3 4 5\")"
36        echo "  (-j) JOBS                use \"make -j JOBS\" for parallel builds"
37      echo "  (-clean)                 *ONLY* run \"make CLEAN\""      echo "  (-clean)                 *ONLY* run \"make CLEAN\""
38      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""
39      echo "  (-nogenmake|-ng)         skip the genmake stage"      echo "  (-nogenmake|-ng)         skip the genmake stage"
40      echo "  (-noclean|-nc)           skip the \"make clean\" stage"      echo "  (-noclean|-nc)           skip the \"make clean\" stage"
41      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"
42        echo "  (-deldir|-dd)            on success, delete the output directory"
43      echo      echo
44      echo "and where STRING follows a whitespace-delimited format"      echo "and where STRING can be a whitespace-delimited list"
45      echo "such as:"      echo "such as:"
46        echo
47      echo "  -t 'exp0 exp2 exp3' "      echo "  -t 'exp0 exp2 exp3' "
48      echo "  -addr='abc@123.com testing@home.org'"      echo "  -addr='abc@123.com testing@home.org'"
49      echo      echo
50        echo "provided that the expression is properly quoted within the current"
51        echo "shell (note the use of single quotes to protect white space)."
52        echo
53      exit 1      exit 1
54  }  }
55    
56  #  build the mpack utility  #  build the mpack utility
57  build_mpack()  build_mpack()
58  {  {
59      echo -n "building the mpack utility...  "      printf "building the mpack utility...  "
60      if test ! -x "$MPACKDIR/mpack" ; then      if test ! -x "$MPACKDIR/mpack" ; then
61          if test ! -d $MPACKDIR ; then          if test ! -d $MPACKDIR ; then
62                echo
63              echo "Error: can't find \"$MPACKDIR\""              echo "Error: can't find \"$MPACKDIR\""
64              echo "  are you sure this program is being run in the correct "              echo "  are you sure this program is being run in the correct "
65              echo "  (that is, \"MITGCM_ROOT\verification\") directory?"              echo "  (that is, \"MITGCM_ROOT\verification\") directory?"
66              exit 1              echo
67                HAVE_MPACK=f
68          fi          fi
69          echo -n "building mpack...  "          printf "building mpack...  "
70          ( cd $MPACKDIR && ./configure && $MAKE ) > build_mpack.out 2>&1          if test "x$CC" = x ; then
71                export CC=cc
72            fi
73            ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1
74          RETVAL=$?          RETVAL=$?
75          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
76              echo              echo
77              echo "Error building the mpack tools at: $MPACK_DIR"              echo "Error building the mpack tools at: $MPACK_DIR"
78              exit 1              echo
79                HAVE_MPACK=f
80            else
81                rm -f tr_build_mpack.out
82                HAVE_MPACK=t
83          fi          fi
84        else
85            HAVE_MPACK=t
86      fi      fi
87      echo "OK"      echo "OK"
88  }  }
89    
 compare_lines()  
 {  
     # use codelet to compare lines  
     if [ $verbose -gt 1 ]; then  
         cat tmp3.txt 1>&2  
     fi  
     return `./a.out < tmp3.txt`  
 }  
   
90  testoutput_for_prop()  testoutput_for_prop()
91  {  {
92      # testoutput_for_prop dir s1 label subdir      # testoutput_for_prop dir s1 label subdir extension
93      #      #
94      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt
95      #  using search strings s1 and text label      #  using search strings s1 and text label
# Line 81  testoutput_for_prop() Line 98  testoutput_for_prop()
98          echo testoutput_for_prop: grep "$2" $1/$4/output.txt 1>&2          echo testoutput_for_prop: grep "$2" $1/$4/output.txt 1>&2
99      fi      fi
100      if [ -r $1/$4/output.txt ]; then      if [ -r $1/$4/output.txt ]; then
101          grep "$2" $1/$4/output.txt | sed 's/.*=//' | nl > tmp1.txt          grep "$2" $1/$4/output.txt | sed 's/.*=//' | cat -n > tmp1.txt
102          lncnt=`wc -l tmp1.txt | awk '{print $1}' `          lncntA=`wc -l tmp1.txt | awk '{print $1}' `
103          if [ $lncnt -lt 3 ]; then          if [ $lncntA -lt 3 ]; then
104              if [ $verbose -gt 0 ]; then              if [ $verbose -gt 0 ]; then
105                  echo Not enough lines of output when searching for "$2" 1>&2                  echo Not enough lines of output when searching for "$2" 1>&2
106              fi              fi
# Line 94  testoutput_for_prop() Line 111  testoutput_for_prop()
111          return 99          return 99
112      fi      fi
113      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
114          echo testoutput_for_prop: grep "$2" $1/results/output.txt 1>&2          echo testoutput_for_prop: grep "$2" $1/results/output.$5 1>&2
115      fi      fi
116      grep "$2" $1/results/output.txt | sed 's/.*=//' | nl > tmp2.txt      grep "$2" $1/results/output.$5 | sed 's/.*=//' | cat -n > tmp2.txt
117      lncnt=`wc -l tmp2.txt | awk '{print $1}' `      lncntB=`wc -l tmp2.txt | awk '{print $1}' `
118      if [ $lncnt -lt 3 ]; then      if [ $lncntB -lt 3 ]; then
119          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
120              echo Not enough lines of output when searching for "$2" 1>&2              echo Not enough lines of output when searching for "$2" 1>&2
121          fi          fi
122          return 99          return 99
123      fi      fi
124        if [ $lncntA -ne $lncntB ]; then
125            if [ $verbose -gt 0 ]; then
126                echo Not same Nb of lines when searching for "$2" ":" $lncntA $lncntB 1>&2
127            fi
128            return 99
129        fi
130        has_nan=`cat tmp1.txt | grep -i nan | wc -l`
131        if [ $has_nan -gt 0  ] ; then
132            echo testoutput_for_prop: output.txt contains $has_nan NaN values  1>&2
133            return 99
134        fi
135        has_inf=`cat tmp1.txt | grep -i inf | wc -l`
136        if [ $has_inf -gt 0  ] ; then
137            echo testoutput_for_prop: output.txt contains $has_inf Inf values  1>&2
138            return 99
139        fi
140      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
141          echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2          echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2
142      fi      fi
# Line 111  testoutput_for_prop() Line 144  testoutput_for_prop()
144      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
145          echo testoutput_for_prop: compare_lines 1>&2          echo testoutput_for_prop: compare_lines 1>&2
146      fi      fi
147      compare_lines      if [ $verbose -gt 1 ]; then
148      digits_of_similarity=$?          cat tmp3.txt 1>&2
149        fi
150        echo "-1" >> tmp3.txt
151        # On the SGI O3K (*not* the O2K), "cat -n" inserts a ":" after the line number
152        cat tmp3.txt | sed -e 's|:||g' > tmp4.txt
153        digits_of_similarity=`./tmp_cmpnum < tmp4.txt`
154      if [ $digits_of_similarity -eq 99 ]; then      if [ $digits_of_similarity -eq 99 ]; then
155          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
156              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 123  testoutput_for_prop() Line 161  testoutput_for_prop()
161              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
162          fi          fi
163      fi      fi
164      rm tmp1.txt tmp2.txt tmp3.txt      rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt
165            
166      return $digits_of_similarity      return $digits_of_similarity
167  }  }
# Line 143  dashnum() Line 181  dashnum()
181      done      done
182  }  }
183    
184    testoutput_ad()
185    {
186        grep $3 $1/results_ad/output_adm.txt | awk '{print NR " " $5}' > t05.txt
187        grep $3 $1/$2/output_adm.txt | awk '{print NR " " $5}' > t15.txt
188        grep $3 $1/results_ad/output_adm.txt | awk '{print NR " " $6}' > t06.txt
189        grep $3 $1/$2/output_adm.txt | awk '{print NR " " $6}' > t16.txt
190        join t05.txt t15.txt > t5.txt
191        join t06.txt t16.txt > t6.txt
192        echo "-1" >> t5.txt
193        echo "-1" >> t6.txt
194        digits_5=`./tmp_cmpnum < t5.txt`
195        digits_6=`./tmp_cmpnum < t6.txt`
196        dashnum $digits_5 $digits_6
197        rm -f t[01][56].txt t[56].txt
198    }
199    
200    check_for_add_mon_output()
201    {
202        # Check for additional types of monitor output
203        if test "x$1" = x ; then
204            return
205        fi
206    
207        for ii in $PTRACERS_NUM ; do
208            eval "HAVE_PTR0"$ii"=f"
209        done
210    
211        ptr_add="trcstat_ptracerXX_min trcstat_ptracerXX_max"
212        ptr_add="$ptr_add trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
213        for ii in $PTRACERS_NUM ; do
214            for jj in $ptr_add ; do
215                name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
216                tst=`grep $name $1 | wc -l | awk '{print $1}'`
217                if test ! "x$tst" = x0 ; then
218                    eval "HAVE_PTR0"$ii"=t"
219                fi
220            done
221            #  eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"'
222        done
223    }
224    
225  testoutput()  testoutput()
226  {  {
227      # testoutput diretory subdir      # testoutput directory subdir extension
228      #      #
229      #  test output in "directory"      #  test output in "directory"
230        if test "x$ADM" = x ; then
231            if [ $debug -gt 0 ]; then
232                echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2
233            fi
234            testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2 $3; cg2dres=$?
235            if [ $debug -gt 0 ]; then
236                echo testoutput: cg2dres=$cg2dres 1>&2
237            fi
238            testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2 $3; tmin=$?
239            testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2 $3; tmax=$?
240            testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2 $3; tmean=$?
241            testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2 $3; tsd=$?
242            testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2 $3; smin=$?
243            testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2 $3; smax=$?
244            testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2 $3; smean=$?
245            testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2 $3; ssd=$?
246            testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2 $3; umin=$?
247            testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2 $3; umax=$?
248            testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2 $3; umean=$?
249            testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2 $3; usd=$?
250            testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2 $3; vmin=$?
251            testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2 $3; vmax=$?
252            testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2 $3; vmean=$?
253            testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2 $3; vsd=$?
254    
255            #  This is for PTRACERS
256            for ii in $PTRACERS_NUM ; do
257                eval `echo "p0"$ii"_min=99"`
258                eval `echo "p0"$ii"_max=99"`
259                eval `echo "p0"$ii"_mean=99"`
260                eval `echo "p0"$ii"_sd=99"`
261                tst=`eval 'echo "$HAVE_PTR0'$ii'"'`
262                #echo 'tst = '$tst
263                if test "x$tst" = xt ; then
264                    a="trcstat_ptracer0"
265                    testoutput_for_prop $1 "$a"$ii"_min"  "p0"$ii"_min"  $2 $3
266                    RETVAL=$? ; eval `echo "p0"$ii"_min="$RETVAL`
267                    testoutput_for_prop $1 "$a"$ii"_max"  "p0"$ii"_max"  $2 $3
268                    RETVAL=$? ; eval `echo "p0"$ii"_max="$RETVAL`
269                    testoutput_for_prop $1 "$a"$ii"_mean" "p0"$ii"_mean" $2 $3
270                    RETVAL=$? ; eval `echo "p0"$ii"_mean="$RETVAL`
271                    testoutput_for_prop $1 "$a"$ii"_sd"   "p0"$ii"_sd"   $2 $3
272                    RETVAL=$? ; eval `echo "p0"$ii"_sd="$RETVAL`
273                fi
274            done
275    
276      if [ $debug -gt 0 ]; then          allargs="$cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd"
277          echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2          allargs="$allargs $umin $umax $umean $usd $vmin $vmax $vmean $vsd"
278      fi          allargs="$allargs $p01_min $p01_max $p01_mean $p01_sd"
279      testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2; cg2dres=$?          allargs="$allargs $p02_min $p02_max $p02_mean $p02_sd"
280      if [ $debug -gt 0 ]; then          allargs="$allargs $p03_min $p03_max $p03_mean $p03_sd"
281          echo testoutput: cg2dres=$cg2dres 1>&2          allargs="$allargs $p04_min $p04_max $p04_mean $p04_sd"
282            allargs="$allargs $p05_min $p05_max $p05_mean $p05_sd"
283    
284            eval "dashnum $allargs"
285    
286        else
287            testoutput_ad $1 $2 "precision_grdchk_result"
288      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  
289  }  }
290    
291  genmakemodel()  genmakemodel()
# Line 184  genmakemodel() Line 294  genmakemodel()
294      if test "x$NOGENMAKE" = xt ; then      if test "x$NOGENMAKE" = xt ; then
295          echo "genmake skipped!"          echo "genmake skipped!"
296      else      else
297          GENMAKE2="$BASH ../../../tools/genmake2"          if test "x$BASH" = x ; then
298                GENMAKE2="../../../tools/genmake2"
299            else
300                GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
301            fi
302          (          (
303              cd $1;              cd $1;
304              command="$GENMAKE2  -ds -m $MAKE --mods=../code"              command="$GENMAKE2  -ds -m $MAKE"
305                if test "x$ADM" = x ; then
306                    command="$command --mods=../code"
307                else
308                    command="$command --mods=../code_ad"
309                fi
310              if test "x$OPTFILE" != xNONE ; then              if test "x$OPTFILE" != xNONE ; then
311                  command="$command --optfile=$OPTFILE"                  command="$command --optfile=$OPTFILE"
                 # echo "  command=\"$command\""  
312              fi              fi
313              if test "x$IEEE" != x ; then              if test "x$IEEE" != x ; then
314                  command="$command -ieee"                  command="$command -ieee"
315              fi              fi
316              # echo "command: \"$command\""              if test "x$MPI" = xt ; then
317                    command="$command -mpi"
318                fi
319              printf 'genmake ... ' 1>&2              printf 'genmake ... ' 1>&2
320              $command > make.log 2>&1              $command > make.log 2>&1
321              RETVAL=$?              RETVAL=$?
322              for i in genmake_state genmake_optfile genmake_local Makefile ; do              #  Reduce the size of the testing emails!
323                  if test -r $i ; then              head -100 Makefile > $CDIR/Makefile_head
                     cp $i $CDIR  
                 fi  
             done  
324              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
325                  tail make.log                  tail make.log
326                  echo "genmakemodel: genmake failed" 1>&2                  echo "genmakemodel: genmake failed" 1>&2
327                  cp make.log $CDIR                  cp genmake_* make.log $CDIR
328                  return 1                  return 1
329              else              else
330                  echo "succesful" 1>&2                  echo "successful" 1>&2
331              fi              fi
332          )          )
333      fi      fi
# Line 220  makeclean() Line 337  makeclean()
337  {  {
338      # makeclean directory      # makeclean directory
339      if test "x$NOCLEAN" = xt ; then      if test "x$NOCLEAN" = xt ; then
340          echo "make CLEAN skipped!"          echo "make Clean skipped!"
341      else      else
342          (          (
343              cd $1;              cd $1;
344              if test -e output.txt ; then              #if test -e output.txt ; then rm -f output.txt ; fi
                 rm -f output.txt  
             fi  
             printf 'make CLEAN ... ' 2>&1  
345              if test -r Makefile ; then              if test -r Makefile ; then
346                  $MAKE CLEAN >> make.log 2>&1                  printf 'clean build-dir: make Clean ... ' 2>&1
347                    $MAKE Clean >> make.log 2>&1
348                  RETVAL=$?                  RETVAL=$?
349                  if test "x$RETVAL" != x0 ; then                  if test "x$RETVAL" != x0 ; then
350                      tail make.log                      tail make.log
351                      echo "makeclean: \"make CLEAN\" failed" 1>&2                      echo "makeclean: \"make Clean\" failed" 1>&2
352                      cp make.log $CDIR"/make.log"                      cp make.log $CDIR"/make.log"
353                      return 1                      return 1
354                  fi                  fi
355              fi              fi
356              echo succesful 1>&2              echo successful 1>&2
357                exit 0
358            )
359        fi
360    }
361    
362    run_clean()
363    {
364        # run_clean directory
365        if test "x$NOCLEAN" = xt ; then
366            echo "run_clean skipped!"
367        else
368            (
369                cd $1;
370                printf 'clean run-dir ... ' 2>&1
371                # part of what is done after "make clean" when doing "make CLEAN"
372                find . -name "*.meta" -exec rm {} \;
373                find . -name "*.data" -exec rm {} \;
374                find . -name "fort.*" -exec rm {} \;
375                find . -type l -exec rm {} \;
376                rm -f $EXECUTABLE *.txt STD* *diagnostics.log datetime
377                rm -rf mnc_test_*
378                echo successful 1>&2
379              exit 0              exit 0
380          )          )
381      fi      fi
# Line 261  makedependmodel() Line 398  makedependmodel()
398                  cp make.log $CDIR"/make.log"                  cp make.log $CDIR"/make.log"
399                  return 1                  return 1
400              else              else
401                  echo succesful 1>&2                  echo successful 1>&2
402              fi              fi
403          )          )
404      fi      fi
# Line 274  makemodel() Line 411  makemodel()
411          cd $1;          cd $1;
412          if test -r Makefile ; then          if test -r Makefile ; then
413              printf 'make ... ' 1>&2              printf 'make ... ' 1>&2
414              $MAKE >> make.log 2>&1              if test "x$ADM" = x ; then
415                    if test "x$JOBS" = x ; then
416                        $MAKE >> make.log 2>&1
417                    else
418                        $MAKE -j $JOBS >> make.log 2>&1
419                    fi
420                else
421                    $MAKE adall >> make.log 2>&1
422                fi
423              RETVAL=$?              RETVAL=$?
424              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
425                  tail make.log                  tail make.log
# Line 282  makemodel() Line 427  makemodel()
427                  cp make.log $CDIR"/make.log"                  cp make.log $CDIR"/make.log"
428                  return 1                  return 1
429              else              else
430                  echo succesful 1>&2                  echo successful 1>&2
431              fi              fi
432          fi          fi
433      )      )
434  }  }
435    
436    symlink_mpifiles()
437    {
438        # Put special links so that MPI specific files are used
439        # This MUST be invoked between makeclean and makelinks because
440        # the Makefile will link to non-mpi files by default
441    
442        dir=$1
443        code_dir=$2
444        BUILD_DIR=$dir/$3
445        CODE_DIR=$dir/$code_dir
446        
447        # These are files that should replace their counter-part when using -mpi
448        MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`
449    
450        #  Is this an MPI run?
451        if test "x$MPI" = xt ; then
452            # YES: We symbolically link these files to the build
453            # dir so long as there is no real file in place
454            for ii in $MPI_FILES ; do
455                i=`echo $ii | sed 's:^\./::'`
456                name=`echo $i | sed 's:_mpi::' `
457                cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1
458                RETVAL=$?
459                if test "x$RETVAL" != x0 ; then
460                    if ! test -f $BUILD_DIR/$i ; then
461                        #echo Linking $name to $i
462                        (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
463                    fi
464                fi
465            done
466        else
467            # NO: We undo any _mpi symbolically linked files
468            for ii in $MPI_FILES ; do
469                i=`echo $ii | sed 's:^\./::'`
470                name=`echo $i | sed 's:_mpi::' `
471                if test -L $BUILD_DIR/$name ; then
472                    cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
473                    RETVAL=$?
474                    if test "x$RETVAL" = x0 ; then
475                        #echo Un-linking $name from $linktarg
476                        rm -f $BUILD_DIR/$name
477                    fi
478                fi
479            done
480        fi
481        
482    }
483    
484  linkdata()  linkdata()
485  {  {
486      # linkdata flag      # linkdata run_dir input_dir_1 input_dir_2 ...
487      #      #
488      # symbolically link data files to run directory      # symbolically link data files to run directory
489      if [ $1 -ne 0 ]; then      if test -d $1 ; then
490          ( cd $2 ;  ln -sf ../input/* . )          (
491                cd $1 ; shift
492                if test -r "../"$1"/eedata.mth" ; then
493                # found eedata.mth in 1rst input dir and it is readable
494                    if test "x$MULTI_THREAD" = "xt" ; then
495                    # multi-threaded test: remove symbolic link & link eedata.mth
496                        if test -h eedata ; then rm -f eedata ; fi
497                        if test ! -r eedata ; then
498                            ln -sf "../"$1"/eedata.mth" eedata ;
499                            printf 'eedata.mth ' 1>&2
500                        fi
501                    else
502                    # not multi-threaded test: remove eedata symbolic link
503                        if test -h eedata ; then rm -f eedata ; fi
504                    fi
505                fi
506                for ldir in $* ; do
507                    if test -d "../"$ldir ; then
508                        printf 'ldir='${ldir} 1>&2
509                        files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
510                        for i in $files ; do
511                            if test ! -d "../"$ldir/$i ; then
512                                if test ! -r $i  ; then
513                                    printf ' '$i 1>&2
514                                    ln -sf "../"$ldir"/"$i $i
515                                fi
516                            fi
517                        done
518                        if test -x "../"$ldir"/"prepare_run ; then
519                            "../"$ldir"/"prepare_run
520                        fi
521                        printf ' ; ' 1>&2
522                    fi
523                done
524            )
525      fi      fi
526  }  }
527    
# Line 302  runmodel() Line 529  runmodel()
529  {  {
530      # runmodel directory      # runmodel directory
531      #      #
532      #  runs "$COMMAND" in "directory"      #  runs "$COMMAND in "directory"
533      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
534      (      (
535          cd $1          cd $1
536          printf 'runmodel: ' 1>&2          printf 'runmodel in %s ...' $1 1>&2
537          # make output.txt          # make output.txt
538          $COMMAND          echo
539          RETVAL=$?          rm -f run.log
540            if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
541                echo " link" $EXECUTABLE "from dir ../"$builddir > run.log
542                ln -sf "../"$builddir"/"$EXECUTABLE .
543            else
544                touch run.log
545            fi
546            if test ! -x $EXECUTABLE ; then
547                    echo " no executable:" $EXECUTABLE >> run.log
548                    RETVAL=8
549            else
550                if test $OUTPUTFILE -ot $EXECUTABLE ; then
551                    ( eval $COMMAND ) >> run.log 2>&1
552                    RETVAL=$?
553                else
554                    echo " $OUTPUTFILE is up to date " >> run.log 2>&1
555                    RETVAL=0
556                fi
557            fi
558            # echo "COMMAND='$COMMAND'"
559            # echo "pwd='"`pwd`"'"
560          if test "x$RETVAL" = x0 ; then          if test "x$RETVAL" = x0 ; then
561              cp output.txt $CDIR"/output.txt"              tail run.log
562                echo successful 1>&2
563                # === Reduce the size of the testing emails!
564                # if test "x$ADM" = x ; then
565                #   cp output.txt $CDIR"/output.txt"
566                # else
567                #   cp output_adm.txt $CDIR"/output_adm.txt"
568                # fi
569                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
570              return 0              return 0
571          else          else
572                tail run.log
573                echo failed 1>&2
574                cp run.log $CDIR"/run.log"
575                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
576              return 1              return 1
577          fi          fi
578      )      )
# Line 323  createcodelet() Line 582  createcodelet()
582  {  {
583      # create codelet for comparing model output      # create codelet for comparing model output
584    
585      echo -n "creating the comparison code...  "      printf "creating the comparison code...  "
586      cat > tmp_cmpnum.f <<EOFA      cat > tmp_cmpnum.c <<EOF
587        program cmpnum  #include <stdio.h>
588        implicit none  #include <math.h>
589        real*8 a,b,diff  int main( int argc, char** argv )  {
590        integer linnum,best    int linnum,best,lncnt;
591        best=-16    double a,b,abave,relerr;
592    99  read(*,*,end=70,err=60) linnum,a,b    best = -22;
593        diff=0.5*(abs(a)+abs(b))    lncnt = 0;
594  c     print *,a,b,diff,abs(a-b)/diff    while( 1 & (lncnt+=1) < 999 )  {
595        if (diff.gt.1.e-12) then      scanf("%d", &linnum);
596          diff=abs(a-b)/diff      if (linnum == -1)  break;
597          if (diff.gt.0.) then      scanf("%lf", &a);  scanf("%lf", &b);
598  c         print *,int(log10(diff)),diff      abave = 0.5*(fabs(a)+fabs(b));
599            linnum=int(log10(diff))      if (abave > 0.0) {
600            best=max(best,linnum)        relerr=fabs(a-b)/abave;
601          endif        if (relerr > 0.0) { linnum = (int)rint(log10(relerr)); }
602        else        else { linnum = -16 ; }
603          if (best.eq.-16.and.diff.ne.0.) best=-22        best = (best > linnum) ? best : linnum;
604        endif      }
605        goto 99    }
606    60  stop 'cmpnum: An error occured reading a,b'    if (lncnt == 999) best=-29;
607    70  print *,-best    printf("%d\n", -best);
608        end    return 0;
609  EOFA  }
610    EOF
611        $CC -o tmp_cmpnum tmp_cmpnum.c -lm
612    
613      f77 tmp_cmpnum.f      if [ -x ./tmp_cmpnum ]; then
     if [ -x ./a.out ]; then  
614          echo "OK"          echo "OK"
615          return 0          return 0
616      else      else
617          echo          echo
618          echo "createcodelet: failed to compile codelet"          echo "ERROR: failed to compile comparison code -- please specify"
619            echo "  a C compiler using the CC environment variable."
620          exit 1          exit 1
621      fi      fi
622  }  }
# Line 404  EOF Line 665  EOF
665    
666  scandirs()  scandirs()
667  {  {
668      if [ $# -eq 0 ]; then      if [ $# -eq 1 ]; then
669          for arg in * ; do          for arg in * ; do
670              test -d $arg/input && echo $arg              test -d $arg/$1 && echo $arg
671          done          done
672      else      else
673          echo $*          echo $*
674      fi      fi
675  }  }
676    
677    
678  ###############################################################################  ###############################################################################
 ###############################################################################  
 ###############################################################################  
679    
680    
681  #  Default properties  #  Default properties
# Line 426  clean=0 Line 685  clean=0
685  expts=''  expts=''
686  # ieee=1  # ieee=1
687    
688  IEEE=  IEEE=true
689  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
690      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
691  fi  fi
# Line 437  QUICK=f Line 696  QUICK=f
696  NOGENMAKE=f  NOGENMAKE=f
697  NOCLEAN=f  NOCLEAN=f
698  NODEPEND=f  NODEPEND=f
699    POSTCLEAN=f
700    
701  BASH=  BASH=
702  OPTFILE=NONE  OPTFILE=NONE
703  ADDRESSES=  ADDRESSES=
704  TESTDIRS=  TESTDIRS=
705  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
706    HAVE_MPACK=
707  MPACK="$MPACKDIR/mpack"  MPACK="$MPACKDIR/mpack"
708  COMMAND="make output.txt"  COMMAND=
709  MAKE=make  if test "x$MAKE" = x ; then
710        MAKE=make
711    fi
712    if test "x$CC" = x ; then
713        CC=cc
714    fi
715    JOBS=
716  MPI=f  MPI=f
717    MULTI_THREAD=f
718    OUTDIR=
719    DELDIR=
720    
721    ADM=
722    
723  echo -n "parsing options...  "  # Additional monitor types
724    PTRACERS_NUM="1 2 3 4 5"
725    
726    printf "parsing options...  "
727    
728  ac_prev=  ac_prev=
729  for ac_option ; do  for ac_option ; do
# Line 497  for ac_option ; do Line 772  for ac_option ; do
772          -make=* | --make=*)          -make=* | --make=*)
773              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
774    
775            -odir | --odir)
776                ac_prev=OUTDIR ;;
777            -odir=* | --odir=*)
778                OUTDIR=$ac_optarg ;;
779    
780            -ptracers | --ptracers | -ptr | --ptr)
781                ac_prev=PTRACERS_NUM ;;
782            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
783                PTRACERS_NUM=$ac_optarg ;;
784    
785            -j) ac_prev=JOBS ;;
786            -j=*) JOBS=$ac_optarg ;;
787    
788          -clean | --clean)          -clean | --clean)
789              CLEANUP=t ;;              CLEANUP=t ; DELDIR=t ;;
790    
791          -quick | --quick | -q | --q)          -quick | --quick | -q | --q)
792              QUICK=t ;;              QUICK=t ;;
# Line 509  for ac_option ; do Line 797  for ac_option ; do
797          -nodepend | --nodepend | -nd | --nd)          -nodepend | --nodepend | -nd | --nd)
798              NODEPEND=t ;;              NODEPEND=t ;;
799    
800          -mpi) MPI=true ;;          -postclean | --postclean | -pc | --pc)
801                POSTCLEAN=t ;;
802    
803            -mpi) MPI=t ;;
804    
805            -mth) MULTI_THREAD=t ;;
806    
807            -adm | -ad) ADM=t ;;
808    
809          -ieee) IEEE=true ;;          -ieee) IEEE=true ;;
810          -noieee) IEEE= ;;          -noieee) IEEE= ;;
# Line 518  for ac_option ; do Line 813  for ac_option ; do
813          -debug) debug=1 ;;          -debug) debug=1 ;;
814          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
815    
816            -deldir | -dd) DELDIR=t ;;
817    
818          -*)          -*)
819              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
820              usage              usage
# Line 539  if test "x$QUICK" = xt ; then Line 836  if test "x$QUICK" = xt ; then
836  fi  fi
837    
838  if test "x$TESTDIRS" = x ; then  if test "x$TESTDIRS" = x ; then
839      TESTDIRS=`scandirs`      if test "x$ADM" = xt ; then
840            TESTDIRS=`scandirs results_ad`
841        else
842            TESTDIRS=`scandirs results`
843        fi
844    else
845        #- expand group of experiments:
846        LIST=" "
847        for xx in $TESTDIRS
848        do
849          case $xx in
850            'basic') LIST=${LIST}" aim.5l_cs front_relax global_ocean.90x40x15"
851                     LIST=${LIST}" hs94.128x64x5 tutorial_barotropic_gyre"
852                     LIST=${LIST}" tutorial_global_oce_biogeo tutorial_plume_on_slope"
853                    ;;
854            'tutorials')
855                     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
856            *)       LIST=${LIST}" "$xx ;;
857          esac
858        done
859        #echo 'LIST='${LIST}'<'
860        #- remove duplicate and non-directory:
861        TESTDIRS=" "
862        for xx in $LIST
863        do
864            if test -d $xx ; then
865                yy=`echo $TESTDIRS | grep -c $xx`
866                if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
867            else
868                echo " -- skip \"$xx\" : not a directory !"
869            fi
870        done
871  fi  fi
872    #echo 'TESTDIRS='${TESTDIRS}'<'
873    
874  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
875      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
876  fi  fi
877    
878  echo "OK"  if test "x$ADM" = xt ; then
879        EXECUTABLE="mitgcmuv_ad"
880        OUTPUTFILE="output_adm.txt"
881    else
882        EXECUTABLE="mitgcmuv"
883        OUTPUTFILE="output.txt"
884    fi
885    
886    if test "x$ADM" = xt -a "x$COMMAND" = x ; then
887        COMMAND="./$EXECUTABLE > $OUTPUTFILE"
888    fi
889    
890    if test "x$COMMAND" = x ; then
891        COMMAND="./$EXECUTABLE > $OUTPUTFILE"
892    fi
893    
894    #echo "OK"
895    echo "OK (COMMAND= $COMMAND )"
896    
897  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
898  createcodelet  createcodelet
899    
900  #  build the mpack utility  #  build the mpack utility
901  build_mpack  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
902        echo "skipping mpack build"
903    else
904        build_mpack
905    fi
906    
907  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
908  MACH=`hostname`  MACH=`hostname`
909  UNAMEA=`uname -a`  UNAMEA=`uname -a`
910  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
911  BASE=$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
912    if test "x$OUTDIR" != x ; then
913        BASE="tr_"$OUTDIR"_"$DATE"_"
914    fi
915  DNUM=0  DNUM=0
916  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
917  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 568  done Line 921  done
921  mkdir $DRESULTS  mkdir $DRESULTS
922  RETVAL=$?  RETVAL=$?
923  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
924      echo "Error: can't create results directory \"./$DRESULTS\""      echo "ERROR: Can't create results directory \"./$DRESULTS\""
925      exit 1      exit 1
926  fi  fi
927  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
928  date > $SUMMARY  printf "Start time:  " >> $SUMMARY
929  cat << EOF >> $SUMMARY  start_date=`date`
930                  T           S           U           V  echo $start_date > $SUMMARY
 G D M    c        m  s        m  s        m  s        m  s  
 E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .  
 N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d  
 2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .  
   
 EOF  
   
 NDIR=0  
931    
932  of_path=  of_path=
933  if test "x$OPTFILE" != xNONE ; then  if test "x$OPTFILE" != xNONE ; then
# Line 596  if test "x$OPTFILE" != xNONE ; then Line 941  if test "x$OPTFILE" != xNONE ; then
941          fi          fi
942          file=${OPTFILE##*/}          file=${OPTFILE##*/}
943          OPTFILE=$of_path/$file          OPTFILE=$of_path/$file
944            cp $OPTFILE $DRESULTS
945            echo >> $SUMMARY
946            echo "  OPTFILE=$OPTFILE" >> $SUMMARY
947      else      else
948          echo          echo | tee $SUMMARY
949          echo "WARNING: can't read OPTFILE=\"$OPTFILE\" but will try to use it..."          echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
950            exit 1
951      fi      fi
952    else
953        echo >> $SUMMARY
954        echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
955        echo "   so the genmake default will be used." >> $SUMMARY
956  fi  fi
957  echo  echo
 echo "OPTFILE=$OPTFILE" >> $SUMMARY  
958  echo >> $SUMMARY  echo >> $SUMMARY
959    if test "x$ADM" = x ; then
960        line_0="            ----T-----  ----S-----  ----U-----  ----V-----"
961        line_1="G D M    c        m  s        m  s        m  s        m  s"
962        line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
963        line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
964        line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
965        for ii in $PTRACERS_NUM ; do
966            #  tst=`eval 'echo $HAVE_PTR0'$ii`
967            #  if test "x$tst" = xt ; then
968            line_0="$line_0  --PTR 0"$ii"--"
969            line_1="$line_1        m  s"
970            line_2="$line_2  m  m  e  ."
971            line_3="$line_3  i  a  a  d"
972            line_4="$line_4  n  x  n  ."
973            #  fi
974        done
975        echo "$line_0" | tee -a $SUMMARY
976        echo "$line_1" | tee -a $SUMMARY
977        echo "$line_2" | tee -a $SUMMARY
978        echo "$line_3" | tee -a $SUMMARY
979        echo "$line_4" | tee -a $SUMMARY
980        echo " "       | tee -a $SUMMARY
981    else
982        echo "ADJOINT=true" >> $SUMMARY
983        echo >> $SUMMARY
984        cat << EOF | tee -a $SUMMARY
985    G D M    C  G
986    E p a R  o  r
987    N n k u  s  a
988    2 d e n  t  d
989    
990    EOF
991    fi
992    
993  #  ...and each test directory...  #  ...and each test directory...
994  for dir in $TESTDIRS ; do  for dir in $TESTDIRS ; do
# Line 611  for dir in $TESTDIRS ; do Line 996  for dir in $TESTDIRS ; do
996      #  Cleanup only!      #  Cleanup only!
997      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
998          if test -r $dir/build/Makefile ; then          if test -r $dir/build/Makefile ; then
999                echo '  ------  clean dir:' $dir/build
1000              ( cd $dir/build ; make CLEAN )              ( cd $dir/build ; make CLEAN )
1001          fi          fi
1002          if test -r $dir/input/Makefile ; then          if test -d $dir/run/CVS ; then
1003              ( cd $dir/input ; make CLEAN )              echo '  ------  clean dir:' $dir/run
1004                run_clean $dir/run
1005          fi          fi
1006            (
1007                cd $dir
1008                rm -rf tr_run.*
1009            )
1010          continue          continue
1011      fi      fi
1012    
1013      #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
1014      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
1015      if test ! -r $dir"/results/output.txt" ; then      fout=
1016          echo "can't read \"$dir/results/output.txt\" -- skipping $dir"      if test "x$ADM" = x ; then
1017            fout=$dir"/results/output.txt"
1018        else
1019            fout=$dir"/results_ad/output_adm.txt"
1020        fi
1021        if test ! -r $fout ; then
1022            echo "can't read \"$fout\" -- skipping $dir"
1023          continue          continue
1024      fi      fi
1025        if test "x$ADM" = x ; then
1026            check_for_add_mon_output  $fout
1027        fi
1028    
1029      echo "-------------------------------------------------------------------------------"      # Check for additional types of monitor output
     echo  
     echo "Experiment:  $dir"  
     echo  
     unset genmake makedepend make run  
     results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'  
1030    
1031      if [ -r $dir/build ]; then      builddir="build"
1032          seperatebuilddir=1      if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1033          builddir=build      rundir="run"
1034          rundir=build     #rundir=$builddir
1035          ( cd $dir/build; ln -sf ../input/* . )      if test ! -d $dir/$rundir ; then
1036      else          rundir=$builddir
         seperatebuilddir=0  
         builddir=input  
         rundir=input  
1037      fi      fi
1038            
1039      CODE_DIR=$dir/code      if test "x$ADM" = x ; then
1040            code_dir=code
1041            CODE_DIR=$dir/code
1042            input_dirs='input'
1043        else
1044            code_dir=code_ad
1045            CODE_DIR=$dir/code_ad
1046            input_dirs='input_ad input'
1047        fi
1048      BUILD_DIR=$dir/$builddir      BUILD_DIR=$dir/$builddir
     MPI_FILES="CPP_EEOPTIONS.h_mpi SIZE.h_mpi"  
     NOMPI_FILES="CPP_EEOPTIONS.h_nompi SIZE.h_nompi"  
1049    
1050      #  Is this an MPI run?      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1051      if test "x$MPI" = xt ; then          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1052          FILES=$MPI_FILES          continue
         endings="_mpi"  
     else  
         FILES=$NOMPI_FILES  
         endings="_nompi"  
1053      fi      fi
1054            if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1055      #  Check to see that we have the files          echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
     have_files=t  
     for i in $FILES ; do  
         if test ! -r $CODE_DIR/$i ; then  
             echo "Warning: can't read file $CODE_DIR/$i"  
             have_files=f  
         fi  
     done  
     if test "x$have_files" != xt -a "x$MPI" = xt ; then  
         echo "Skipping $dir due to lack of input files (see above warning)"  
1056          continue          continue
1057      fi      fi
1058        
1059      #  If we have the $FILES and they differ, copy the $FILES to $BUILD_DIR      #  Check whether there are "extra runs" for this testdir
1060      if test "x$have_files" = xt ; then      extra_runs=
1061          for i in $FILES ; do      if test "x$ADM" = x ; then
1062              sstr="s|$endings||"          ex_run_dirs=`( cd $dir ; echo input.* )`
1063              name=`echo $i | sed -e $sstr `          #echo "ex_run_dirs='$ex_run_dirs'"
1064              cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1          for exd in $ex_run_dirs ; do
1065              RETVAL=$?              name=`echo $exd | sed -e 's/input.//g'`
1066              if test "x$RETVAL" != x0 ; then              outf="$dir/results/output.$name.txt"
1067                  cp $CODE_DIR/$i $BUILD_DIR/$name              if test -f $outf -a -r $outf ; then
1068                    if test "x$MULTI_THREAD" = "xt" ; then
1069                        if test -r $dir"/"$exd"/eedata.mth" ; then
1070                            extra_runs="$extra_runs $name"
1071                        #else echo $dir"/"$exd"/eedata.mth: not found"
1072                        fi
1073                    else
1074                        extra_runs="$extra_runs $name"
1075                    fi
1076              fi              fi
1077          done          done
1078      fi      fi
1079        
1080        echo "-------------------------------------------------------------------------------"
1081        echo
1082        if test "x$extra_runs" = "x" ; then
1083           echo "Experiment:  $dir"
1084        else
1085           echo "Experiment:  $dir ; extra_runs=$extra_runs"
1086        fi
1087        echo
1088        unset genmake makedepend make run
1089        results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1090    
1091      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1092      CDIR=$DRESULTS"/"$DRESULTS"_"$NDIR      rel_CDIR=$DRESULTS"/"$dir
1093      mkdir $CDIR      mkdir $rel_CDIR
1094      CDIR=`pwd`"/$CDIR"      CDIR=`pwd`"/$rel_CDIR"
1095            
1096      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1097          makeclean $dir/$builddir          echo '====>>> this is to check that we never go through this part <<< ==='
1098            makeclean $dir/$builddir \
1099                && run_clean $dir/$rundir
1100      else      else
1101          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1102              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1103                && run_clean $dir/$rundir \
1104                && symlink_mpifiles $dir $code_dir $builddir \
1105              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1106              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1107              && linkdata $seperatebuilddir $dir/$rundir \              && linkdata $dir/$rundir $input_dirs \
1108              && runmodel $dir/$builddir && run=Y \              && runmodel $dir/$rundir && run=Y \
1109              && results=`testoutput $dir $rundir`              && results=`testoutput $dir $rundir "txt"`
1110      fi      fi
1111            
1112      echo      echo
1113      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \      if test "x$ADM" = x ; then
1114          ${run:-N} $results          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1115      echo          echo
1116      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          echo "$fres" >> $SUMMARY
1117          ${run:-N} $results >> $SUMMARY          echo "fresults='$fres'" > $CDIR"/summary.txt"
1118      echo "fresults='" > $CDIR"/summary.txt"          echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1119      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1120          ${run:-N} $results >> $CDIR"/summary.txt"          echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1121      echo "'" >> $CDIR"/summary.txt"          echo "tdir='$dir'" >> $CDIR"/summary.txt"
1122      echo "MACH='$MACH'" >> $CDIR"/summary.txt"  
1123      echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"          for ex in $extra_runs ; do
1124      echo "DATE='$DATE'" >> $CDIR"/summary.txt"              unset run
1125      echo "tdir='$dir'" >> $CDIR"/summary.txt"              results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1126                #  Create an output dir for each OPTFILE/tdir.ex combination
1127                rel_CDIR=$DRESULTS"/"$dir"."$ex
1128                mkdir $rel_CDIR
1129                CDIR=`pwd`"/$rel_CDIR"
1130                test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1131                run_clean $dir/tr_run.$ex
1132                linkdata $dir/tr_run.$ex input.$ex input
1133                runmodel $dir/tr_run.$ex && run=Y \
1134                    && results=`testoutput $dir tr_run.$ex ${ex}".txt"`
1135                fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1136                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1137                fres="$fres.$ex"
1138                echo
1139                echo "$fres" >> $SUMMARY
1140                echo "fresults='$fres'" > $CDIR"/summary.txt"
1141                echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1142                echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1143                echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1144                echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1145                if test "x$POSTCLEAN" = xt ; then
1146                    run_clean $dir/tr_run.$ex
1147                fi
1148            done
1149        else
1150            fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1151            fres=$fres"$results   $dir"
1152            echo
1153            echo "$fres" >> $SUMMARY
1154            echo "fresults='$fres'" > $CDIR"/summary.txt"
1155            echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1156            echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1157            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1158            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1159            grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1160                               >> $CDIR"/summary.txt"
1161        fi
1162    
1163        #postclean $dir/$builddir
1164        if test "x$POSTCLEAN" = xt ; then
1165            makeclean $dir/$builddir \
1166                && run_clean $dir/$rundir
1167        fi
1168            
1169      (      echo "-------------------------------------------------------------------------------"
         cd $DRESULTS  
         tar -cf $NDIR".tar" $DRESULTS"_"$NDIR > /dev/null 2>&1  
         gzip $NDIR".tar"  
     )  
1170            
1171      if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then  done
1172          echo "No mail sent"  
1173      else  printf "Start time:  " >> $SUMMARY
1174          $MPACK -s MITgcm-test -m 1000000 $DRESULTS"/"$NDIR".tar.gz" $ADDRESSES  echo $start_date >> $SUMMARY
1175    printf "End time:    " >> $SUMMARY
1176    date >> $SUMMARY
1177    
1178    #  If addresses were supplied and mpack built successfully, then try
1179    #  to send email using mpack.
1180    if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1181        echo "No results email was sent."
1182    else
1183        if test "x$HAVE_MPACK" = xt ; then
1184            tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1185                && gzip $DRESULTS".tar" \
1186                && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1187          RETVAL=$?          RETVAL=$?
1188          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1189              echo "Warning: \"$MPACK\" failed -- please contact <edhill@mitgcm.org>"              echo
1190                echo "Warning: The tar, gzip, & mpack step failed.  Please send email"
1191                echo "  to <MITgcm-support@mitgcm.org> for help.  You may copy the "
1192                echo "  summary of results from the directory \"$DRESULTS\"."
1193                echo
1194          else          else
1195              rm -f $DRESULTS"/"$NDIR".tar*"              echo
1196                echo "An email containing results was sent to the following addresses:"
1197                echo "  \"$ADDRESSES\""
1198                echo
1199          fi          fi
1200            test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"
1201            test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"
1202      fi      fi
1203    fi
1204    
1205      echo "-------------------------------------------------------------------------------"  # rm -f tmp_cmpnum.f a.out
1206        rm -f tmp_cmpnum.c tmp_cmpnum
     NDIR=$(( $NDIR + 1 ))  
       
 done  
1207    
1208  rm tmp_cmpnum.f a.out  if test "x$CLEANUP" != xt ; then
1209        cat $SUMMARY | sed 's/ -- -- -- --//g'
1210        if test -e tr_out.txt ; then
1211            mv tr_out.txt tr_out.txt.old
1212        fi
1213        cat $SUMMARY | sed 's/ -- -- -- --//g' > tr_out.txt
1214    fi
1215    
1216  cat $SUMMARY  if test "x$DELDIR" = xt ; then
1217        rm -rf $DRESULTS
1218    fi
1219    

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.85

  ViewVC Help
Powered by ViewVC 1.1.22