/[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.30 by edhill, Fri Dec 5 17:46:32 2003 UTC revision 1.91 by jmc, Wed Sep 5 00:07:25 2007 UTC
# 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=\"noieee\")"      echo "                             (DEF=\"-ieee\")"
18      echo "  (-optfile=|-of=)STRING   list of optfiles to use"      echo "  (-of=|-optfile=)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 "                             (DEF=\"\" which test all)"
24        echo "  (-skd|-skipdir) STRING   list of exp. dirs to skip"
25        echo "                             (DEF=\"\" which test all)"
26      echo "  (-b|-bash) STRING        preferred location of a \"bash\" or"      echo "  (-b|-bash) STRING        preferred location of a \"bash\" or"
27      echo "                             Bourne-compatible \"sh\" shell"      echo "                             Bourne-compatible \"sh\" shell"
28      echo "                             (DEF=\"\" for \"bash\")"      echo "                             (DEF=\"\" for \"bash\")"
# Line 27  usage() Line 31  usage()
31      echo "                             (DEF=\"make output.txt\")"      echo "                             (DEF=\"make output.txt\")"
32      echo "  (-m|-make) STRING        command to use for \"make\""      echo "  (-m|-make) STRING        command to use for \"make\""
33      echo "                             (DEF=\"make\")"      echo "                             (DEF=\"make\")"
34        echo "  (-odir) STRING           used to build output directory name"
35        echo "                             (DEF=\"hostname\")"
36        echo "  (-ptr|-ptracers) STRING  specify which ptracers to test"
37        echo "                             (DEF=\"1 2 3 4 5\")"
38        echo "  (-j) JOBS                use \"make -j JOBS\" for parallel builds"
39      echo "  (-clean)                 *ONLY* run \"make CLEAN\""      echo "  (-clean)                 *ONLY* run \"make CLEAN\""
40      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""
41      echo "  (-nogenmake|-ng)         skip the genmake stage"      echo "  (-nogenmake|-ng)         skip the genmake stage"
42      echo "  (-noclean|-nc)           skip the \"make clean\" stage"      echo "  (-noclean|-nc)           skip the \"make clean\" stage"
43      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"
44        echo "  (-deldir|-dd)            on success, delete the output directory"
45        echo "  (-ts)                    provide timing information per timestep"
46        echo "  (-papis)                 provide MFlop/s per timestep using PAPI"
47        echo "  (-pcls)                  provide MFlop/s per timestep using PCL"
48      echo      echo
49      echo "and where STRING follows a whitespace-delimited format"      echo "and where STRING can be a whitespace-delimited list"
50      echo "such as:"      echo "such as:"
51        echo
52      echo "  -t 'exp0 exp2 exp3' "      echo "  -t 'exp0 exp2 exp3' "
53      echo "  -addr='abc@123.com testing@home.org'"      echo "  -addr='abc@123.com testing@home.org'"
54      echo      echo
55        echo "provided that the expression is properly quoted within the current"
56        echo "shell (note the use of single quotes to protect white space)."
57        echo
58      exit 1      exit 1
59  }  }
60    
61  #  build the mpack utility  #  build the mpack utility
62  build_mpack()  build_mpack()
63  {  {
64      echo -n "building the mpack utility...  "      printf "building the mpack utility...  "
65      if test ! -x "$MPACKDIR/mpack" ; then      if test ! -x "$MPACKDIR/mpack" ; then
66          if test ! -d $MPACKDIR ; then          if test ! -d $MPACKDIR ; then
67              echo              echo
# Line 54  build_mpack() Line 71  build_mpack()
71              echo              echo
72              HAVE_MPACK=f              HAVE_MPACK=f
73          fi          fi
74          echo -n "building mpack...  "          printf "building mpack...  "
75          if test "x$CC" = x ; then          if test "x$CC" = x ; then
76              export CC=cc              export CC=cc
77          fi          fi
# Line 77  build_mpack() Line 94  build_mpack()
94    
95  testoutput_for_prop()  testoutput_for_prop()
96  {  {
97      # testoutput_for_prop dir s1 label subdir      # testoutput_for_prop dir s1 label subdir extension
98      #      #
99      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt      #  compares files $dir/$subdir/$OUTPUTFILE and $dir/results/output.txt
100      #  using search strings s1 and text label      #  using search strings s1 and text label
101    
102      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
103          echo testoutput_for_prop: grep "$2" $1/$4/output.txt 1>&2          echo testoutput_for_prop: grep "$2" $1/$4/$OUTPUTFILE 1>&2
104      fi      fi
105      if [ -r $1/$4/output.txt ]; then      if [ -r $1/$4/$OUTPUTFILE ]; then
106          grep "$2" $1/$4/output.txt | sed 's/.*=//' | cat -n > tmp1.txt          grep "$2" $1/$4/$OUTPUTFILE | sed 's/.*=//' | cat -n > tmp1.txt
107          lncnt=`wc -l tmp1.txt | awk '{print $1}' `          lncntA=`wc -l tmp1.txt | awk '{print $1}' `
108          if [ $lncnt -lt 3 ]; then          if [ $lncntA -lt 3 ]; then
109              if [ $verbose -gt 0 ]; then              if [ $verbose -gt 0 ]; then
110                  echo Not enough lines of output when searching for "$2" 1>&2                  echo Not enough lines of output when searching for "$2" 1>&2
111              fi              fi
112              return 99              return 99
113          fi          fi
114      else      else
115          echo testoutput_for_prop: output.txt from model run was not readable 1>&2          echo testoutput_for_prop: $OUTPUTFILE from model run was not readable 1>&2
116          return 99          return 99
117      fi      fi
118      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
119          echo testoutput_for_prop: grep "$2" $1/results/output.txt 1>&2          echo testoutput_for_prop: grep "$2" $1/results/output.$5 1>&2
120      fi      fi
121      grep "$2" $1/results/output.txt | sed 's/.*=//' | cat -n > tmp2.txt      grep "$2" $1/results/output.$5 | sed 's/.*=//' | cat -n > tmp2.txt
122      lncnt=`wc -l tmp2.txt | awk '{print $1}' `      lncntB=`wc -l tmp2.txt | awk '{print $1}' `
123      if [ $lncnt -lt 3 ]; then      if [ $lncntB -lt 3 ]; then
124          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
125              echo Not enough lines of output when searching for "$2" 1>&2              echo Not enough lines of output when searching for "$2" 1>&2
126          fi          fi
127          return 99          return 99
128      fi      fi
129        if [ $lncntA -ne $lncntB ]; then
130            if [ $verbose -gt 0 ]; then
131                echo Not same Nb of lines when searching for "$2" ":" $lncntA $lncntB 1>&2
132            fi
133            return 99
134        fi
135        has_nan=`cat tmp1.txt | grep -i nan | wc -l`
136        if [ $has_nan -gt 0  ] ; then
137            echo testoutput_for_prop: $OUTPUTFILE contains $has_nan NaN values  1>&2
138            return 99
139        fi
140        has_inf=`cat tmp1.txt | grep -i inf | wc -l`
141        if [ $has_inf -gt 0  ] ; then
142            echo testoutput_for_prop: $OUTPUTFILE contains $has_inf Inf values  1>&2
143            return 99
144        fi
145      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
146          echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2          echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2
147      fi      fi
# Line 122  testoutput_for_prop() Line 155  testoutput_for_prop()
155      echo "-1" >> tmp3.txt      echo "-1" >> tmp3.txt
156      # On the SGI O3K (*not* the O2K), "cat -n" inserts a ":" after the line number      # On the SGI O3K (*not* the O2K), "cat -n" inserts a ":" after the line number
157      cat tmp3.txt | sed -e 's|:||g' > tmp4.txt      cat tmp3.txt | sed -e 's|:||g' > tmp4.txt
158      digits_of_similarity=`./tmp_cmpnum < tmp4.txt`      digits_of_similarity=`./tr_cmpnum < tmp4.txt`
159      if [ $digits_of_similarity -eq 99 ]; then      if [ $digits_of_similarity -eq 99 ]; then
160          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
161              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 155  dashnum() Line 188  dashnum()
188    
189  testoutput_ad()  testoutput_ad()
190  {  {
191      grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $5}' > t05.txt      grep $3 $1/results_ad/output_adm.txt | awk '{print NR " " $5}' > t05.txt
192      grep $3 $1/$2/output.txt_adm | awk '{print NR " " $5}' > t15.txt      grep $3 $1/$2/$OUTPUTFILE | awk '{print NR " " $5}' > t15.txt
193      grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $6}' > t06.txt      grep $3 $1/results_ad/output_adm.txt | awk '{print NR " " $6}' > t06.txt
194      grep $3 $1/$2/output.txt_adm | awk '{print NR " " $6}' > t16.txt      grep $3 $1/$2/$OUTPUTFILE | awk '{print NR " " $6}' > t16.txt
195      join t05.txt t15.txt > t5.txt      join t05.txt t15.txt > t5.txt
196      join t06.txt t16.txt > t6.txt      join t06.txt t16.txt > t6.txt
197      echo "-1" >> t5.txt      echo "-1" >> t5.txt
198      echo "-1" >> t6.txt      echo "-1" >> t6.txt
199      digits_5=`./tmp_cmpnum < t5.txt`      digits_5=`./tr_cmpnum < t5.txt`
200      digits_6=`./tmp_cmpnum < t6.txt`      digits_6=`./tr_cmpnum < t6.txt`
201      dashnum $digits_5 $digits_6      dashnum $digits_5 $digits_6
202      rm -f t[01][56].txt t[56].txt      rm -f t[01][56].txt t[56].txt
203  }  }
204    
205    check_for_add_mon_output()
206    {
207        # Check for additional types of monitor output
208        if test "x$1" = x ; then
209            return
210        fi
211    
212        for ii in $PTRACERS_NUM ; do
213            eval "HAVE_PTR0"$ii"=f"
214        done
215    
216        ptr_add="trcstat_ptracerXX_min trcstat_ptracerXX_max"
217        ptr_add="$ptr_add trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
218        for ii in $PTRACERS_NUM ; do
219            for jj in $ptr_add ; do
220                name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
221                tst=`grep $name $1 | wc -l | awk '{print $1}'`
222                if test ! "x$tst" = x0 ; then
223                    eval "HAVE_PTR0"$ii"=t"
224                fi
225            done
226            #  eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"'
227        done
228    }
229    
230  testoutput()  testoutput()
231  {  {
232      # testoutput directory subdir      # testoutput directory subdir extension
233      #      #
234      #  test output in "directory"      #  test output in "directory"
235      if test "x$ADM" = x ; then      if test "x$ADM" = x ; then
236          if [ $debug -gt 0 ]; then          if [ $debug -gt 0 ]; then
237              echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2              echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2
238          fi          fi
239          testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2; cg2dres=$?          testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2 $3; cg2dres=$?
240          if [ $debug -gt 0 ]; then          if [ $debug -gt 0 ]; then
241              echo testoutput: cg2dres=$cg2dres 1>&2              echo testoutput: cg2dres=$cg2dres 1>&2
242          fi          fi
243          testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2; tmin=$?          testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2 $3; tmin=$?
244          testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2; tmax=$?          testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2 $3; tmax=$?
245          testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2; tmean=$?          testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2 $3; tmean=$?
246          testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2; tsd=$?          testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2 $3; tsd=$?
247          testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2; smin=$?          testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2 $3; smin=$?
248          testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2; smax=$?          testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2 $3; smax=$?
249          testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2; smean=$?          testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2 $3; smean=$?
250          testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2; ssd=$?          testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2 $3; ssd=$?
251          testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2; umin=$?          testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2 $3; umin=$?
252          testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2; umax=$?          testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2 $3; umax=$?
253          testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2; umean=$?          testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2 $3; umean=$?
254          testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2; usd=$?          testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2 $3; usd=$?
255          testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2; vmin=$?          testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2 $3; vmin=$?
256          testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2; vmax=$?          testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2 $3; vmax=$?
257          testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2; vmean=$?          testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2 $3; vmean=$?
258          testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2; vsd=$?          testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2 $3; vsd=$?
259          dashnum $cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd \  
260              $umin $umax $umean $usd $vmin $vmax $vmean $vsd          #  This is for PTRACERS
261            for ii in $PTRACERS_NUM ; do
262                eval `echo "p0"$ii"_min=99"`
263                eval `echo "p0"$ii"_max=99"`
264                eval `echo "p0"$ii"_mean=99"`
265                eval `echo "p0"$ii"_sd=99"`
266                tst=`eval 'echo "$HAVE_PTR0'$ii'"'`
267                #echo 'tst = '$tst
268                if test "x$tst" = xt ; then
269                    a="trcstat_ptracer0"
270                    testoutput_for_prop $1 "$a"$ii"_min"  "p0"$ii"_min"  $2 $3
271                    RETVAL=$? ; eval `echo "p0"$ii"_min="$RETVAL`
272                    testoutput_for_prop $1 "$a"$ii"_max"  "p0"$ii"_max"  $2 $3
273                    RETVAL=$? ; eval `echo "p0"$ii"_max="$RETVAL`
274                    testoutput_for_prop $1 "$a"$ii"_mean" "p0"$ii"_mean" $2 $3
275                    RETVAL=$? ; eval `echo "p0"$ii"_mean="$RETVAL`
276                    testoutput_for_prop $1 "$a"$ii"_sd"   "p0"$ii"_sd"   $2 $3
277                    RETVAL=$? ; eval `echo "p0"$ii"_sd="$RETVAL`
278                fi
279            done
280    
281            allargs="$cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd"
282            allargs="$allargs $umin $umax $umean $usd $vmin $vmax $vmean $vsd"
283            allargs="$allargs $p01_min $p01_max $p01_mean $p01_sd"
284            allargs="$allargs $p02_min $p02_max $p02_mean $p02_sd"
285            allargs="$allargs $p03_min $p03_max $p03_mean $p03_sd"
286            allargs="$allargs $p04_min $p04_max $p04_mean $p04_sd"
287            allargs="$allargs $p05_min $p05_max $p05_mean $p05_sd"
288    
289            eval "dashnum $allargs"
290    
291      else      else
292          testoutput_ad $1 $2 "precision_grdchk_result"          testoutput_ad $1 $2 "precision_grdchk_result"
293      fi      fi
# Line 211  genmakemodel() Line 299  genmakemodel()
299      if test "x$NOGENMAKE" = xt ; then      if test "x$NOGENMAKE" = xt ; then
300          echo "genmake skipped!"          echo "genmake skipped!"
301      else      else
302          GENMAKE2="$BASH ../../../tools/genmake2"          if test "x$BASH" = x ; then
303                GENMAKE2="../../../tools/genmake2"
304            else
305                GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
306            fi
307          (          (
308              cd $1;              cd $1;
309              command="$GENMAKE2  -ds -m $MAKE"              command="$GENMAKE2  -ds -m $MAKE"
# Line 219  genmakemodel() Line 311  genmakemodel()
311                  command="$command --mods=../code"                  command="$command --mods=../code"
312              else              else
313                  command="$command --mods=../code_ad"                  command="$command --mods=../code_ad"
                 command="$command -adof=../../../tools/adjoint_options/adjoint_staf"  
314              fi              fi
315              if test "x$OPTFILE" != xNONE ; then              if test "x$OPTFILE" != xNONE ; then
316                  command="$command --optfile=$OPTFILE"                  command="$command --optfile=$OPTFILE"
# Line 227  genmakemodel() Line 318  genmakemodel()
318              if test "x$IEEE" != x ; then              if test "x$IEEE" != x ; then
319                  command="$command -ieee"                  command="$command -ieee"
320              fi              fi
321                if test "x$MPI" = xt ; then
322                    command="$command -mpi"
323                fi
324                if test "x$TS" = xt ; then
325                    command="$command -ts"
326                fi
327                if test "x$PAPIS" = xt ; then
328                    command="$command -papis"
329                else
330                if test "x$PCLS" = xt ; then
331                    command="$command -pcls"
332                fi
333                fi
334              printf 'genmake ... ' 1>&2              printf 'genmake ... ' 1>&2
335              $command > make.log 2>&1              $command > make.log 2>&1
336              RETVAL=$?              RETVAL=$?
337              cp Makefile $CDIR              #  Reduce the size of the testing emails!
338                head -100 Makefile > $CDIR/Makefile_head
339              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
340                  tail make.log                  tail make.log
341                  echo "genmakemodel: genmake failed" 1>&2                  echo "genmakemodel: genmake failed" 1>&2
# Line 247  makeclean() Line 352  makeclean()
352  {  {
353      # makeclean directory      # makeclean directory
354      if test "x$NOCLEAN" = xt ; then      if test "x$NOCLEAN" = xt ; then
355          echo "make CLEAN skipped!"          echo "make Clean skipped!"
356      else      else
357          (          (
358              cd $1;              cd $1;
359              if test -e output.txt ; then              #if test -e $OUTPUTFILE ; then rm -f $OUTPUTFILE ; fi
                 rm -f output.txt  
             fi  
             printf 'make CLEAN ... ' 2>&1  
360              if test -r Makefile ; then              if test -r Makefile ; then
361                  $MAKE CLEAN >> make.log 2>&1                  printf 'clean build-dir: make Clean ... ' 2>&1
362                    $MAKE Clean >> make.log 2>&1
363                  RETVAL=$?                  RETVAL=$?
364                  if test "x$RETVAL" != x0 ; then                  if test "x$RETVAL" != x0 ; then
365                      tail make.log                      tail make.log
366                      echo "makeclean: \"make CLEAN\" failed" 1>&2                      echo "makeclean: \"make Clean\" failed" 1>&2
367                      cp make.log $CDIR"/make.log"                      cp make.log $CDIR"/make.log"
368                      return 1                      return 1
369                  fi                  fi
# Line 271  makeclean() Line 374  makeclean()
374      fi      fi
375  }  }
376    
377    run_clean()
378    {
379        # run_clean directory
380        if test "x$NOCLEAN" = xt ; then
381            echo "run_clean skipped!"
382        else
383            (
384                cd $1;
385                printf 'clean run-dir ... ' 2>&1
386                # part of what is done after "make clean" when doing "make CLEAN"
387                find . -name "*.meta" -exec rm {} \;
388                find . -name "*.data" -exec rm {} \;
389                find . -name "fort.*" -exec rm {} \;
390                find . -type l -exec rm {} \;
391                rm -f $EXECUTABLE *.txt STD* *diagnostics.log datetime
392                rm -rf mnc_test_*
393                echo successful 1>&2
394                exit 0
395            )
396        fi
397    }
398    
399  makedependmodel()  makedependmodel()
400  {  {
401      # makedependmodel directory      # makedependmodel directory
# Line 302  makemodel() Line 427  makemodel()
427          if test -r Makefile ; then          if test -r Makefile ; then
428              printf 'make ... ' 1>&2              printf 'make ... ' 1>&2
429              if test "x$ADM" = x ; then              if test "x$ADM" = x ; then
430                  $MAKE >> make.log 2>&1                  if test "x$JOBS" = x ; then
431                        $MAKE >> make.log 2>&1
432                    else
433                        $MAKE -j $JOBS >> make.log 2>&1
434                    fi
435              else              else
436                  $MAKE adall >> make.log 2>&1                  $MAKE adall >> make.log 2>&1
437              fi              fi
# Line 329  symlink_mpifiles() Line 458  symlink_mpifiles()
458      code_dir=$2      code_dir=$2
459      BUILD_DIR=$dir/$3      BUILD_DIR=$dir/$3
460      CODE_DIR=$dir/$code_dir      CODE_DIR=$dir/$code_dir
461        
462      # These are files that should replace their counter-part when using -mpi      # These are files that should replace their counter-part when using -mpi
463      MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`      MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`
464    
# Line 344  symlink_mpifiles() Line 473  symlink_mpifiles()
473              RETVAL=$?              RETVAL=$?
474              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
475                  if ! test -f $BUILD_DIR/$i ; then                  if ! test -f $BUILD_DIR/$i ; then
476                  #echo Linking $name to $i                      #echo Linking $name to $i
477                      (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)                      (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
478                  fi                  fi
479              fi              fi
480          done          done
481      else      else
482      # NO: We undo any _mpi symbolically linked files          # NO: We undo any _mpi symbolically linked files
483          for ii in $MPI_FILES ; do          for ii in $MPI_FILES ; do
484              i=`echo $ii | sed 's:^\./::'`              i=`echo $ii | sed 's:^\./::'`
485              name=`echo $i | sed 's:_mpi::' `              name=`echo $i | sed 's:_mpi::' `
486              if test -L $BUILD_DIR/$name ; then              if test -L $BUILD_DIR/$name ; then
487                  linktarg=`(cd $BUILD_DIR; readlink $name)`                  cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
488                  if test $linktarg = "../$code_dir/$name"_mpi ; then                  RETVAL=$?
489                  #echo Un-linking $name from $linktarg                  if test "x$RETVAL" = x0 ; then
490                        #echo Un-linking $name from $linktarg
491                      rm -f $BUILD_DIR/$name                      rm -f $BUILD_DIR/$name
492                  fi                  fi
493              fi              fi
# Line 368  symlink_mpifiles() Line 498  symlink_mpifiles()
498    
499  linkdata()  linkdata()
500  {  {
501      # linkdata flag      # linkdata run_dir input_dir_1 input_dir_2 ...
502      #      #
503      # symbolically link data files to run directory      # symbolically link data files to run directory
504      if test "x$1" = x1 ; then      if test -d $1 ; then
505          (          (
506              cd $2              cd $1 ; shift
507              if test "x$ADM" = x ; then              if test -r "../"$1"/eedata.mth" ; then
508                  files=`( cd ../input ; ls -1 | grep -v CVS )`              # found eedata.mth in 1rst input dir and it is readable
509                  for i in $files ; do                  if test "x$MULTI_THREAD" = "xt" ; then
510                      if test ! -d "../input/"$i ; then                  # multi-threaded test: remove symbolic link & link eedata.mth
511                          ln -sf "../input/"$i $i                      if test -h eedata ; then rm -f eedata ; fi
512                      fi                      if test ! -r eedata ; then
513                  done                          ln -sf "../"$1"/eedata.mth" eedata ;
514              else                          printf 'eedata.mth ' 1>&2
                 files=`( cd ../input ; ls -1 *.bin | grep -v CVS )`  
                 for i in $files ; do  
                     if test ! -d "../input/"$i ; then  
                         ln -sf "../input/"$i $i  
                     fi  
                 done  
                 files=`( cd ../input_ad ; ls -1 | grep -v CVS )`  
                 for i in $files ; do  
                     if test ! -d "../input_ad/"$i ; then  
                         ln -sf "../input_ad/"$i $i  
515                      fi                      fi
516                  done                  else
517                    # not multi-threaded test: remove eedata symbolic link
518                        if test -h eedata ; then rm -f eedata ; fi
519                    fi
520              fi              fi
521                for ldir in $* ; do
522                    if test -d "../"$ldir ; then
523                        printf 'ldir='${ldir} 1>&2
524                        files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
525                        for i in $files ; do
526                            if test ! -d "../"$ldir/$i ; then
527                                if test ! -r $i  ; then
528                                    printf ' '$i 1>&2
529                                    ln -sf "../"$ldir"/"$i $i
530                                fi
531                            fi
532                        done
533                        if test -x "../"$ldir"/"prepare_run ; then
534                            "../"$ldir"/"prepare_run
535                        fi
536                        printf ' ; ' 1>&2
537                    fi
538                done
539          )          )
540      fi      fi
541  }  }
# Line 407  runmodel() Line 548  runmodel()
548      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
549      (      (
550          cd $1          cd $1
551          printf 'runmodel ... ' 1>&2          printf 'runmodel in %s ...' $1 1>&2
552          # make output.txt          # make output.txt
553          $COMMAND >> run.log 2>&1          echo
554          RETVAL=$?          if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
555          if test "x$RETVAL" = x0 ; then              echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_00
556              echo successful 1>&2              ln -sf "../"$builddir"/"$EXECUTABLE .
557              if test "x$ADM" = x ; then          fi
558                  cp output.txt $CDIR"/output.txt"          if test ! -x $EXECUTABLE ; then
559                    rm -f run.log ; touch run.log
560                    if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
561                    echo " no executable:" $EXECUTABLE >> run.log
562                    RETVAL=8
563                    ENDVAL=-1
564            else
565                if test $OUTPUTFILE -ot $EXECUTABLE ; then
566                    rm -f run.log ; touch run.log
567                    if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
568                    ( eval $COMMAND ) >> run.log 2>&1
569                    RETVAL=$?
570              else              else
571                  cp output.txt_adm $CDIR"/output.txt_adm"                  RETVAL=0
572                    if test -f run.log ; then
573                        if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
574                        echo "---------->> $OUTPUTFILE is up to date " >> run.log 2>&1
575                    else
576                        touch run.log
577                        if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
578                        echo "---------->> $OUTPUTFILE is up to date " >> run.log 2>&1
579                        echo " no previous run.log: assume NORMAL END" >> run.log 2>&1
580                    fi
581              fi              fi
582                ENDVAL=`cat run.log | grep -v 'ABNORMAL END' | grep -c 'NORMAL END'`
583            fi
584            rm -f run.log_00
585            #if test "x$RETVAL" = x0 ; then
586            if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
587                tail run.log
588                echo successful 1>&2
589                # === Reduce the size of the testing emails!
590                #cp $OUTPUTFILE $CDIR"/"$OUTPUTFILE
591                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
592              return 0              return 0
593          else          else
594              tail run.log              tail run.log
595              echo failed 1>&2              echo failed '(run:' $RETVAL ' end:' $ENDVAL ')' 1>&2
596              cp run.log $CDIR"/run.log"              cp run.log $CDIR"/run.log"
597                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
598              return 1              return 1
599          fi          fi
600      )      )
# Line 432  createcodelet() Line 604  createcodelet()
604  {  {
605      # create codelet for comparing model output      # create codelet for comparing model output
606    
607      echo -n "creating the comparison code...  "      printf "creating the comparison code...  "
608      cat > tmp_cmpnum.c <<EOF      cat > tr_cmpnum.c <<EOF
609  #include <stdio.h>  #include <stdio.h>
610  #include <math.h>  #include <math.h>
611  int main( int argc, char** argv )  {  int main( int argc, char** argv )  {
612    int linnum,best;    int linnum,cmplin,best,lncnt;
613    double a,b,diff;    double a,b,abave,relerr;
614    best = -16;    best = -22;
615    while( 1 )  {    lncnt = 0;
616      while( 1 & (lncnt+=1) < 999 )  {
617      scanf("%d", &linnum);      scanf("%d", &linnum);
618      if (linnum == -1)  break;      if (linnum == -1)  break;
619      scanf("%lf", &a);  scanf("%lf", &b);      scanf("%lf", &a);  scanf("%lf", &b);
620      diff = 0.5*(fabs(a)+fabs(b));      abave = 0.5*(fabs(a)+fabs(b));
621      if (diff > 1.e-12) {      if ( abave == abave ) {
622        diff=fabs(a-b)/diff;        if (abave > 0.0) {
623        if (diff > 0.0) {          relerr=fabs(a-b)/abave;
624          linnum = (int)log10(diff);          if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
625          best = (best > linnum) ? best : linnum;          else { cmplin = -16 ; }
626        }          best = (best > cmplin) ? best : cmplin; }
627        else {        else { cmplin = -22 ; }
628          if (best == -16 && diff != 0)  best = -22;     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
629        }        }
630      }     else {
631       /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
632          break; }
633    }    }
634      if (lncnt == 999) best=-29;
635      if (linnum != -1) best=-99;
636    printf("%d\n", -best);    printf("%d\n", -best);
637    return 0;    return 0;
638  }  }
639  EOF  EOF
640      cc -o tmp_cmpnum tmp_cmpnum.c -lm      $CC -o tr_cmpnum tr_cmpnum.c -lm
641    
642      if [ -x ./tmp_cmpnum ]; then      if [ -x ./tr_cmpnum ]; then
643          echo "OK"          echo "OK"
644          return 0          return 0
645      else      else
646          echo          echo
647          echo "ERROR: failed to compile comparison code"          echo "ERROR: failed to compile comparison code -- please specify"
648            echo "  a C compiler using the CC environment variable."
649          exit 1          exit 1
650      fi      fi
651  }  }
# Line 495  formatresults() Line 673  formatresults()
673            
674  }  }
675    
 show_help()  
 {  
     cat - << EOF  
 $0 [-help] [-quick] [-verbose] dir1 [dir2] [...]  
   
  -help|-h      Show this help message  
  -quiet     Reduce the amount of output  
  -verbose   Produce copious amounts of output  
  -debug     Produce even more output which will mean nothing to most  
  -force     Do "make CLEAN" before compiling. This forces a complete rebuild.  
  -clean     Do "make CLEAN" after compiling and testing.  
  -cleanup   Aggresively removes all model output, executables and object files  
             and then exits. Use with care.  
   
 Normal usage:  
  $0 *       Configure, compile, run and analyze in all experiment directories  
 EOF  
 }  
   
676  scandirs()  scandirs()
677  {  {
678      if [ $# -eq 0 ]; then      if [ $# -eq 1 ]; then
679          for arg in * ; do          for arg in * ; do
680              test -d $arg/input && echo $arg              test -d $arg/$1 && echo $arg
681          done          done
682      else      else
683          echo $*          echo $*
684      fi      fi
685  }  }
686    
# Line 536  clean=0 Line 695  clean=0
695  expts=''  expts=''
696  # ieee=1  # ieee=1
697    
698  IEEE=  IEEE=true
699  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
700      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
701  fi  fi
# Line 547  QUICK=f Line 706  QUICK=f
706  NOGENMAKE=f  NOGENMAKE=f
707  NOCLEAN=f  NOCLEAN=f
708  NODEPEND=f  NODEPEND=f
709    POSTCLEAN=f
710    
711  BASH=  BASH=
712  OPTFILE=NONE  OPTFILE=NONE
713  ADDRESSES=  ADDRESSES=
714  TESTDIRS=  TESTDIRS=
715    SKIPDIRS=
716  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
717  HAVE_MPACK=  HAVE_MPACK=
718  MPACK="$MPACKDIR/mpack"  MPACK="$MPACKDIR/mpack"
719  COMMAND=  COMMAND=
720  MAKE=make  if test "x$MAKE" = x ; then
721        MAKE=make
722    fi
723    if test "x$CC" = x ; then
724        CC=cc
725    fi
726    JOBS=
727  MPI=f  MPI=f
728    MULTI_THREAD=f
729    OUTDIR=
730    DELDIR=
731    
732  ADM=  ADM=
733    
734  echo -n "parsing options...  "  # Additional monitor types
735    PTRACERS_NUM="1 2 3 4 5"
736    
737    printf "parsing options...  "
738    
739  ac_prev=  ac_prev=
740  for ac_option ; do  for ac_option ; do
# Line 595  for ac_option ; do Line 768  for ac_option ; do
768          -tdir=* | --tdir=*)          -tdir=* | --tdir=*)
769              TESTDIRS=$ac_optarg ;;              TESTDIRS=$ac_optarg ;;
770    
771            -skipdir | --skipdir | -skd | --skd)
772                ac_prev=SKIPDIRS ;;
773            -skipdir=* | --skipdir=*)
774                SKIPDIRS=$ac_optarg ;;
775    
776          -bash | --bash | -b | --b)          -bash | --bash | -b | --b)
777              ac_prev=BASH ;;              ac_prev=BASH ;;
778          -bash=* | --bash=*)          -bash=* | --bash=*)
# Line 610  for ac_option ; do Line 788  for ac_option ; do
788          -make=* | --make=*)          -make=* | --make=*)
789              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
790    
791            -odir | --odir)
792                ac_prev=OUTDIR ;;
793            -odir=* | --odir=*)
794                OUTDIR=$ac_optarg ;;
795    
796            -ptracers | --ptracers | -ptr | --ptr)
797                ac_prev=PTRACERS_NUM ;;
798            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
799                PTRACERS_NUM=$ac_optarg ;;
800    
801            -j) ac_prev=JOBS ;;
802            -j=*) JOBS=$ac_optarg ;;
803    
804          -clean | --clean)          -clean | --clean)
805              CLEANUP=t ;;              CLEANUP=t ; DELDIR=t ;;
806    
807          -quick | --quick | -q | --q)          -quick | --quick | -q | --q)
808              QUICK=t ;;              QUICK=t ;;
# Line 622  for ac_option ; do Line 813  for ac_option ; do
813          -nodepend | --nodepend | -nd | --nd)          -nodepend | --nodepend | -nd | --nd)
814              NODEPEND=t ;;              NODEPEND=t ;;
815    
816            -postclean | --postclean | -pc | --pc)
817                POSTCLEAN=t ;;
818    
819          -mpi) MPI=t ;;          -mpi) MPI=t ;;
820    
821            -mth) MULTI_THREAD=t ;;
822    
823          -adm | -ad) ADM=t ;;          -adm | -ad) ADM=t ;;
824    
825          -ieee) IEEE=true ;;          -ieee) IEEE=true ;;
# Line 633  for ac_option ; do Line 829  for ac_option ; do
829          -debug) debug=1 ;;          -debug) debug=1 ;;
830          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
831    
832            -deldir | -dd) DELDIR=t ;;
833    
834            -ts) TS=t;;
835    
836            -papis) PAPIS=t;;
837    
838            -pcls) PCL=t;;
839    
840          -*)          -*)
841              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
842              usage              usage
# Line 654  if test "x$QUICK" = xt ; then Line 858  if test "x$QUICK" = xt ; then
858  fi  fi
859    
860  if test "x$TESTDIRS" = x ; then  if test "x$TESTDIRS" = x ; then
861      TESTDIRS=`scandirs`      if test "x$ADM" = xt ; then
862            LIST=`scandirs results_ad`
863        else
864            LIST=`scandirs results`
865        fi
866    else
867        #- expand group of experiments:
868        LIST=" "
869        for xx in $TESTDIRS
870        do
871          case $xx in
872            'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
873                     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
874                     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
875                    ;;
876            'tutorials')
877                     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
878            *)       LIST=${LIST}" "$xx ;;
879          esac
880        done
881  fi  fi
882    #echo 'LIST='${LIST}'<'
883    #- skip dirs, remove duplicate and non-directory:
884    TESTDIRS=" "
885    count=0
886    for xx in $LIST
887    do
888        yy=`echo $SKIPDIRS | grep -c $xx`
889        if test $yy = 0 ; then
890            if test -d $xx ; then
891                yy=`echo $TESTDIRS | grep -c $xx`
892                if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
893            else count=1 ;
894                echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
895            fi
896        else
897            if test $count = 1 ; then echo -n ", \"$xx\""
898            else count=1 ; echo "" ;  echo -n " skip: \"$xx\""
899            fi
900        fi
901    done
902    if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
903    #echo 'TESTDIRS='${TESTDIRS}'<'
904    
905  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
906      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
907  fi  fi
908    
909  if test "x$ADM" = xt -a "x$COMMAND" = x ; then  if test "x$ADM" = xt ; then
910      COMMAND="./mitgcmuv_ad > output.txt_adm 2>&1"      EXECUTABLE="mitgcmuv_ad"
911        OUTPUTFILE="output_adm.txt"
912    else
913        EXECUTABLE="mitgcmuv"
914        OUTPUTFILE="output.txt"
915  fi  fi
916    
917  if test "x$COMMAND" = x ; then  if test "x$COMMAND" = x ; then
918      COMMAND="make output.txt"      COMMAND="./$EXECUTABLE > $OUTPUTFILE"
919    fi
920    if test "x$MPI" = xt ; then
921        OUTPUTFILE="STDOUT.0000"
922  fi  fi
923    
924  echo "OK"  #echo "OK"
925    echo "OK (COMMAND= $COMMAND )"
926    
927  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
928  createcodelet  createcodelet
929    
930  #  build the mpack utility  #  build the mpack utility
931  build_mpack  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
932        echo "skipping mpack build"
933    else
934        build_mpack
935    fi
936    
937  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
938  MACH=`hostname`  MACH=`hostname`
939  UNAMEA=`uname -a`  UNAMEA=`uname -a`
940  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
941  BASE="tr_"$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
942    if test "x$OUTDIR" != x ; then
943        BASE="tr_"$OUTDIR"_"$DATE"_"
944    fi
945  DNUM=0  DNUM=0
946  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
947  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 695  if test "x$RETVAL" != x0 ; then Line 955  if test "x$RETVAL" != x0 ; then
955      exit 1      exit 1
956  fi  fi
957  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
958  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
959  start_date=`date`  start_date=`date`
960  echo $start_date > $SUMMARY  echo $start_date > $SUMMARY
961    
# Line 727  fi Line 987  fi
987  echo  echo
988  echo >> $SUMMARY  echo >> $SUMMARY
989  if test "x$ADM" = x ; then  if test "x$ADM" = x ; then
990      cat << EOF | tee -a $SUMMARY      line_0="            ----T-----  ----S-----  ----U-----  ----V-----"
991                  T           S           U           V      line_1="G D M    c        m  s        m  s        m  s        m  s"
992  G D M    c        m  s        m  s        m  s        m  s      line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
993  E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .      line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
994  N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d      line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
995  2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .      for ii in $PTRACERS_NUM ; do
996            #  tst=`eval 'echo $HAVE_PTR0'$ii`
997  EOF          #  if test "x$tst" = xt ; then
998            line_0="$line_0  --PTR 0"$ii"--"
999            line_1="$line_1        m  s"
1000            line_2="$line_2  m  m  e  ."
1001            line_3="$line_3  i  a  a  d"
1002            line_4="$line_4  n  x  n  ."
1003            #  fi
1004        done
1005        echo "$line_0" | tee -a $SUMMARY
1006        echo "$line_1" | tee -a $SUMMARY
1007        echo "$line_2" | tee -a $SUMMARY
1008        echo "$line_3" | tee -a $SUMMARY
1009        echo "$line_4" | tee -a $SUMMARY
1010        echo " "       | tee -a $SUMMARY
1011  else  else
1012      echo "ADJOINT=true" >> $SUMMARY      echo "ADJOINT=true" >> $SUMMARY
1013      echo >> $SUMMARY      echo >> $SUMMARY
# Line 753  for dir in $TESTDIRS ; do Line 1026  for dir in $TESTDIRS ; do
1026      #  Cleanup only!      #  Cleanup only!
1027      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1028          if test -r $dir/build/Makefile ; then          if test -r $dir/build/Makefile ; then
1029                echo '  ------  clean dir:' $dir/build
1030              ( cd $dir/build ; make CLEAN )              ( cd $dir/build ; make CLEAN )
1031          fi          fi
1032          if test -r $dir/input/Makefile ; then          if test -d $dir/run/CVS ; then
1033              ( cd $dir/input ; make CLEAN )              echo '  ------  clean dir:' $dir/run
1034                run_clean $dir/run
1035          fi          fi
1036            (
1037                cd $dir
1038                rm -rf tr_run.*
1039            )
1040          continue          continue
1041      fi      fi
1042    
# Line 767  for dir in $TESTDIRS ; do Line 1046  for dir in $TESTDIRS ; do
1046      if test "x$ADM" = x ; then      if test "x$ADM" = x ; then
1047          fout=$dir"/results/output.txt"          fout=$dir"/results/output.txt"
1048      else      else
1049          fout=$dir"/results_ad/output.txt_adm"          fout=$dir"/results_ad/output_adm.txt"
1050      fi      fi
1051      if test ! -r $fout ; then      if test ! -r $fout ; then
1052          echo "can't read \"$fout\" -- skipping $dir"          echo "can't read \"$fout\" -- skipping $dir"
1053          continue          continue
1054      fi      fi
1055        if test "x$ADM" = x ; then
1056            check_for_add_mon_output  $fout
1057        fi
1058    
1059        # Check for additional types of monitor output
1060    
1061      builddir="input"      builddir="build"
1062      rundir="input"      if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1063      use_seperate_build=0      rundir="run"
1064      if test -d $dir/build -a -r $dir/build ; then     #rundir=$builddir
1065          builddir="build"      if test ! -d $dir/$rundir ; then
1066          rundir="build"          rundir=$builddir
         use_seperate_build=1  
         linkdata $use_seperate_build $dir/$rundir  
1067      fi      fi
1068            
1069      if test "x$ADM" = x ; then      if test "x$ADM" = x ; then
1070          code_dir=code          code_dir=code
1071          CODE_DIR=$dir/code          CODE_DIR=$dir/code
1072            input_dirs='input'
1073      else      else
1074          code_dir=code_ad          code_dir=code_ad
1075          CODE_DIR=$dir/code_ad          CODE_DIR=$dir/code_ad
1076            input_dirs='input_ad input'
1077      fi      fi
1078      BUILD_DIR=$dir/$builddir      BUILD_DIR=$dir/$builddir
1079    
# Line 797  for dir in $TESTDIRS ; do Line 1081  for dir in $TESTDIRS ; do
1081          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1082          continue          continue
1083      fi      fi
1084        if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1085            echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1086            continue
1087        fi
1088    
1089        #  Check whether there are "extra runs" for this testdir
1090        extra_runs=
1091        if test "x$ADM" = x ; then
1092            ex_run_dirs=`( cd $dir ; echo input.* )`
1093            #echo "ex_run_dirs='$ex_run_dirs'"
1094            for exd in $ex_run_dirs ; do
1095                name=`echo $exd | sed -e 's/input.//g'`
1096                outf="$dir/results/output.$name.txt"
1097                if test -f $outf -a -r $outf ; then
1098                    if test "x$MULTI_THREAD" = "xt" ; then
1099                        if test -r $dir"/"$exd"/eedata.mth" ; then
1100                            extra_runs="$extra_runs $name"
1101                        #else echo $dir"/"$exd"/eedata.mth: not found"
1102                        fi
1103                    else
1104                        extra_runs="$extra_runs $name"
1105                    fi
1106                fi
1107            done
1108        fi
1109    
1110      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1111      echo      echo
1112      echo "Experiment:  $dir"      if test "x$extra_runs" = "x" ; then
1113           echo "Experiment:  $dir"
1114        else
1115           echo "Experiment:  $dir ; extra_runs=$extra_runs"
1116        fi
1117      echo      echo
1118      unset genmake makedepend make run      unset genmake makedepend make run
1119      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1120    
1121      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1122      rel_CDIR=$DRESULTS"/"$dir      rel_CDIR=$DRESULTS"/"$dir
# Line 811  for dir in $TESTDIRS ; do Line 1124  for dir in $TESTDIRS ; do
1124      CDIR=`pwd`"/$rel_CDIR"      CDIR=`pwd`"/$rel_CDIR"
1125            
1126      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1127          makeclean $dir/$builddir          echo '====>>> this is to check that we never go through this part <<< ==='
1128            makeclean $dir/$builddir \
1129                && run_clean $dir/$rundir
1130      else      else
1131          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1132              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1133                && run_clean $dir/$rundir \
1134              && symlink_mpifiles $dir $code_dir $builddir \              && symlink_mpifiles $dir $code_dir $builddir \
1135              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1136              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1137              && linkdata $use_seperate_build $dir/$rundir \              && linkdata $dir/$rundir $input_dirs \
1138              && runmodel $dir/$rundir && run=Y \              && runmodel $dir/$rundir && run=Y \
1139              && results=`testoutput $dir $rundir`              && results=`testoutput $dir $rundir "txt"`
1140      fi      fi
1141            
1142      echo      echo
1143      if test "x$ADM" = x ; then      if test "x$ADM" = x ; then
1144          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1145            echo
1146            echo "$fres" >> $SUMMARY
1147            echo "fresults='$fres'" > $CDIR"/summary.txt"
1148            echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1149            echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1150            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1151            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1152    
1153            for ex in $extra_runs ; do
1154                unset run
1155                results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'
1156                #  Create an output dir for each OPTFILE/tdir.ex combination
1157                rel_CDIR=$DRESULTS"/"$dir"."$ex
1158                mkdir $rel_CDIR
1159                CDIR=`pwd`"/$rel_CDIR"
1160                test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1161                run_clean $dir/tr_run.$ex
1162                linkdata $dir/tr_run.$ex input.$ex input
1163                runmodel $dir/tr_run.$ex && run=Y \
1164                    && results=`testoutput $dir tr_run.$ex ${ex}".txt"`
1165                fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1166                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1167                fres="$fres.$ex"
1168                echo
1169                echo "$fres" >> $SUMMARY
1170                echo "fresults='$fres'" > $CDIR"/summary.txt"
1171                echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1172                echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1173                echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1174                echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1175                if test "x$POSTCLEAN" = xt ; then
1176                    run_clean $dir/tr_run.$ex
1177                fi
1178            done
1179      else      else
1180          fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`          fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1181          fres=$fres"$results   $dir"          fres=$fres"$results   $dir"
1182            echo
1183            echo "$fres" >> $SUMMARY
1184            echo "fresults='$fres'" > $CDIR"/summary.txt"
1185            echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1186            echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1187            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1188            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1189            grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1190                               >> $CDIR"/summary.txt"
1191        fi
1192    
1193        #postclean $dir/$builddir
1194        if test "x$POSTCLEAN" = xt ; then
1195            makeclean $dir/$builddir \
1196                && run_clean $dir/$rundir
1197      fi      fi
     echo  
     echo "$fres" >> $SUMMARY  
     echo "fresults='$fres'" > $CDIR"/summary.txt"  
     echo "MACH='$MACH'" >> $CDIR"/summary.txt"  
     echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"  
     echo "DATE='$DATE'" >> $CDIR"/summary.txt"  
     echo "tdir='$dir'" >> $CDIR"/summary.txt"  
1198            
1199      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1200            
1201  done  done
1202    
1203  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1204  echo $start_date >> $SUMMARY  echo $start_date >> $SUMMARY
1205  echo -n "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
1206  date >> $SUMMARY  date >> $SUMMARY
1207    
1208  #  If addresses were supplied and mpack built successfully, then try  #  If addresses were supplied and mpack built successfully, then try
# Line 855  else Line 1213  else
1213      if test "x$HAVE_MPACK" = xt ; then      if test "x$HAVE_MPACK" = xt ; then
1214          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1215              && gzip $DRESULTS".tar" \              && gzip $DRESULTS".tar" \
1216              && $MPACK -s MITgcm-test -m 1500000 $DRESULTS".tar.gz" $ADDRESSES              && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1217          RETVAL=$?          RETVAL=$?
1218          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1219              echo              echo
# Line 874  else Line 1232  else
1232      fi      fi
1233  fi  fi
1234    
1235  # rm -f tmp_cmpnum.f a.out  rm -f tr_cmpnum.c tr_cmpnum
 rm -f tmp_cmpnum.c tmp_cmpnum  
1236    
1237  if test "x$CLEANUP" != xt ; then  if test "x$CLEANUP" != xt ; then
1238      cat $SUMMARY      cat $SUMMARY | sed 's/ -- -- -- --//g'
1239      if test -e tr_out.txt ; then      if test -e tr_out.txt ; then
1240          mv tr_out.txt tr_out.txt.old          mv tr_out.txt tr_out.txt.old
1241      fi      fi
1242      cat $SUMMARY > tr_out.txt      cat $SUMMARY | sed 's/ -- -- -- --//g' > tr_out.txt
1243    fi
1244    
1245    if test "x$DELDIR" = xt ; then
1246        rm -rf $DRESULTS
1247  fi  fi
1248    

Legend:
Removed from v.1.30  
changed lines
  Added in v.1.91

  ViewVC Help
Powered by ViewVC 1.1.22