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

Diff of /MITgcm/verification/testreport

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

revision 1.2 by edhill, Mon Sep 1 16:50:27 2003 UTC revision 1.140 by jmc, Fri Apr 30 13:07:19 2010 UTC
# Line 1  Line 1 
1  #!/bin/bash  #! /usr/bin/env bash
2  #  #
3  #  $Header$  #  $Header$
4    #  $Name$
5  #  #
6    
7  usage()  usage()
# Line 10  usage() Line 11  usage()
11      echo      echo
12      echo "where possible OPTIONS are:"      echo "where possible OPTIONS are:"
13      echo "  (-help|-h)               print usage"      echo "  (-help|-h)               print usage"
14      echo "  (-optfile=|-of=)STRING   list of genmake2 \"optfiles\""      echo "  (-mth)                   run multi-threaded (using eedata.mth)"
15      echo "  (-a|-addr)STRING         list of email recipients"      echo "  (-mpi)                   compile and run using MPI"
16      echo "  (-t|-tdir)STRING         list of \"test\" dirs"      echo "  (-ieee/-noieee)          if possible, use IEEE compiler flags"
17        echo "                             (DEF=\"-ieee\")"
18        echo "  (-gsl)                   compile with \"-gsl\" flag"
19        echo "  (-use_r4|-ur4)           if allowed, use real*4 type for '_RS' variable"
20        echo "  (-optfile|-of) STRING    list of optfiles to use"
21        echo "  (-addr|-a) STRING        list of email recipients"
22        echo "                             (DEF=\"\" no email is sent)"
23        echo "  (-mpackdir|-mpd) DIR     location of the mpack utility"
24        echo "                             (DEF=\"../tools/mpack-1.6\")"
25        echo "  (-tdir|-t) STRING        list of group and/or exp. dirs to test"
26        echo "                             (recognized groups: basic, tutorials)"
27        echo "                             (DEF=\"\" which test all)"
28        echo "  (-skipdir|-skd) STRING   list of exp. dirs to skip"
29        echo "                             (DEF=\"\" which test all)"
30        echo "  (-bash|-b) STRING        preferred location of a \"bash\" or"
31        echo "                             Bourne-compatible \"sh\" shell"
32        echo "                             (DEF=\"\" for \"bash\")"
33        echo "  (-adm|-ad)               perform an adjoint run"
34        echo "  (-oad)                   perform an OpenAD adjoint run"
35        echo "  (-command|-c) STRING     command to run"
36        echo "  (-make|-m) STRING        command to use for \"make\""
37        echo "                             (DEF=\"make\")"
38        echo "  (-odir) STRING           used to build output directory name"
39        echo "                             (DEF=\"hostname\")"
40        echo "  (-ptracers|-ptr) STRING  specify which ptracers to test"
41        echo "                             (DEF=\"1 2 3 4 5\")"
42        echo "  (-match) NUMBER          Matching Criteria (number of digits)"
43        echo "                             (DEF=\"12\")"
44        echo "  (-j) JOBS                use \"make -j JOBS\" for parallel builds"
45        echo "  (-clean)                 *ONLY* run \"make CLEAN\""
46        echo "  (-norun|-nr)             skip the \"runmodel\" stage (stop after make)"
47        echo "  (-runonly|-ro)           *ONLY* run stage (=\"-quick\" without make)"
48        echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""
49        echo "  (-nogenmake|-ng)         skip the genmake stage"
50        echo "  (-noclean|-nc)           skip the \"make clean\" stage"
51        echo "  (-nodepend|-nd)          skip the \"make depend\" stage"
52        echo "  (-deldir|-dd)            on success, delete the output directory"
53        echo "  (-ts)                    provide timing information per timestep"
54        echo "  (-papis)                 provide MFlop/s per timestep using PAPI"
55        echo "  (-pcls)                  provide MFlop/s per timestep using PCL"
56        echo
57        echo "and where STRING can be a whitespace-delimited list"
58        echo "such as:"
59        echo
60        echo "  -t 'exp0 exp2 exp3' "
61        echo "  -addr='abc@123.com testing@home.org'"
62        echo
63        echo "provided that the expression is properly quoted within the current"
64        echo "shell (note the use of single quotes to protect white space)."
65      echo      echo
66      exit 1      exit 1
67  }  }
# Line 20  usage() Line 69  usage()
69  #  build the mpack utility  #  build the mpack utility
70  build_mpack()  build_mpack()
71  {  {
72      echo -n "building the mpack utility...  "      printf "building the mpack utility...  "
73      if test ! -x "$MPACKDIR/mpack" ; then      MPACK="$MPACKDIR/mpack"
74        if test ! -x $MPACK ; then
75          if test ! -d $MPACKDIR ; then          if test ! -d $MPACKDIR ; then
76                echo
77              echo "Error: can't find \"$MPACKDIR\""              echo "Error: can't find \"$MPACKDIR\""
78              echo "  are you sure this program is being run in the correct "              echo "  are you sure this program is being run in the correct "
79              echo "  (that is, \"MITGCM_ROOT\verification\") directory?"              echo "  (that is, \"MITGCM_ROOT\verification\") directory?"
80              exit 1              echo
81                HAVE_MPACK=f
82          fi          fi
83          echo -n "building mpack...  "          if test "x$CC" = x ; then
84          ( cd $MPACKDIR && ./configure && make ) > build_mpack.out 2>&1              export CC=cc
85            fi
86            printf "building mpack (using CC=$CC)...  "
87            ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1
88          RETVAL=$?          RETVAL=$?
89          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
90              echo              echo
91              echo "Error building the mpack tools at: $MPACK_DIR"              echo "Error building the mpack tools at: $MPACK_DIR"
92              exit 1              echo
93                HAVE_MPACK=f
94            else
95                rm -f tr_build_mpack.out
96                HAVE_MPACK=t
97                echo "done"
98          fi          fi
99        else
100            HAVE_MPACK=t
101            echo "already exist"
102      fi      fi
     echo "OK"  
 }  
   
 compare_lines()  
 {  
     # use codelet to compare lines  
     if [ $verbose -gt 1 ]; then  
         cat tmp3.txt 1>&2  
     fi  
     return `./a.out < tmp3.txt`  
103  }  }
104    
105  testoutput_for_prop()  testoutput_var()
106  {  {
107      # testoutput_for_prop dir s1 label subdir      # testoutput_var dir s1 label subdir reference_output
108      #      #
109      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt      #  compares 1 variable output selected from file $dir/$subdir/$OUTPUTFILE
110      #  using search strings s1 and text label      #     with same output from reference file $dir/results/$reference_output
111        #  using search strings s1 and text label
112    
113      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
114          echo testoutput_for_prop: grep "$2" $1/$4/output.txt 1>&2          echo testoutput_var: grep "$2" $1/$4/$OUTPUTFILE 1>&2
115      fi      fi
116      if [ -r $1/$4/output.txt ]; then      if [ -r $1/$4/$OUTPUTFILE ]; then
117          grep "$2" $1/$4/output.txt | sed 's/.*=//' | nl > tmp1.txt          grep "$2" $1/$4/$OUTPUTFILE | sed 's/.*=//' | cat -n > tmp1.txt
118          lncnt=`wc -l tmp1.txt | awk '{print $1}' `          lncntA=`wc -l tmp1.txt | awk '{print $1}' `
119          if [ $lncnt -lt 3 ]; then          if [ $lncntA -lt 2 ]; then
120              if [ $verbose -gt 0 ]; then              if [ $verbose -gt 0 ]; then
121                  echo Not enough lines of output when searching for "$2" 1>&2                  echo Not enough lines of output when searching for "$2" 1>&2
122              fi              fi
123              return 99              return 99
124          fi          fi
125      else      else
126          echo testoutput_for_prop: output.txt from model run was not readable 1>&2          echo testoutput_var: $OUTPUTFILE from model run was not readable 1>&2
127          return 99          return 99
128      fi      fi
129      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
130          echo testoutput_for_prop: grep "$2" $1/results/output.txt 1>&2          echo testoutput_var: grep "$2" $1/results/$5 1>&2
131      fi      fi
132      grep "$2" $1/results/output.txt | sed 's/.*=//' | nl > tmp2.txt      grep "$2" $1/results/$5 | sed 's/.*=//' | cat -n > tmp2.txt
133      lncnt=`wc -l tmp2.txt | awk '{print $1}' `      lncntB=`wc -l tmp2.txt | awk '{print $1}' `
134      if [ $lncnt -lt 3 ]; then      if [ $lncntB -lt 2 ]; then
135          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
136              echo Not enough lines of output when searching for "$2" 1>&2              echo Not enough lines of output when searching for "$2" 1>&2
137          fi          fi
138          return 99          return 99
139      fi      fi
140        if [ $lncntA -ne $lncntB ]; then
141            if [ $verbose -gt 0 ]; then
142                echo Not same Nb of lines when searching for "$2" ":" $lncntA $lncntB 1>&2
143            fi
144            return 99
145        fi
146        has_nan=`cat tmp1.txt | grep -i nan | wc -l`
147        if [ $has_nan -gt 0  ] ; then
148            echo testoutput_var: $OUTPUTFILE contains $has_nan NaN values  1>&2
149            return 99
150        fi
151        has_inf=`cat tmp1.txt | grep -i inf | wc -l`
152        if [ $has_inf -gt 0  ] ; then
153            echo testoutput_var: $OUTPUTFILE contains $has_inf Inf values  1>&2
154            return 99
155        fi
156      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
157          echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2          echo testoutput_var: join tmp1.txt tmp2.txt 1>&2
158      fi      fi
159      join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt      join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt
160      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
161          echo testoutput_for_prop: compare_lines 1>&2          echo testoutput_var: compare_lines 1>&2
162        fi
163        if [ $verbose -gt 1 ]; then
164            cat tmp3.txt 1>&2
165      fi      fi
166      compare_lines      echo "-1" >> tmp3.txt
167      digits_of_similarity=$?      # On the SGI O3K (*not* the O2K), "cat -n" inserts a ":" after the line number
168        cat tmp3.txt | sed -e 's|:||g' > tmp4.txt
169        digits_of_similarity=`./tr_cmpnum < tmp4.txt`
170      if [ $digits_of_similarity -eq 99 ]; then      if [ $digits_of_similarity -eq 99 ]; then
171          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
172              echo testoutput_for_prop: No comparison was available for \"$2\" 1>&2              echo testoutput_var: No comparison was available for \"$3\" 1>&2
173          fi          fi
174          digits_of_similarity=99          digits_of_similarity=99
175      else      else
176          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
177              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 \"$3\" 1>&2
178          fi          fi
179      fi      fi
180      rm tmp1.txt tmp2.txt tmp3.txt      rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt
181        
182      return $digits_of_similarity      return $digits_of_similarity
183  }  }
184    
185  dashnum()  testoutput_run()
186  {  {
187      # dashnum n1 n2 n3 ...      # testoutput_run directory subdir reference_output
188      #      #
189      #  print numbers using %3i format or "--" if number = 99      #  test output from 1 run in "directory"
190    # --> same processing for adjoint & forward test
191            # default list of output variables to be checked:
192            #  1rst : main variable used to decide if it pass or FAIL
193            #  others : number of matching digits to be printed in summary.txt
194            listChk=$DEF_CHECK_LIST
195            #  load experiment-specific list from file "tr_checklist" (if it exist)
196            if test -r $1/$2/tr_checklist ; then listChk=`cat $1/$2/tr_checklist` ; fi
197            sVar=`echo $listChk | awk '{print $1}'`
198            # remove 1rst var and expand the list: + => min max mean s.d
199            listVar=`echo $listChk | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' \
200                                   | sed 's/+//g' | sed "s/^$sVar//"`
201            if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(I)='$listVar'" 1>&2 ; fi
202            # check for ptracer output in reference_output file :
203            outpref=$1/results/$3
204            ptr_mon="trcstat_ptracerXX_min trcstat_ptracerXX_max"
205            ptr_mon="$ptr_mon trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
206            for ii in $PTRACERS_NUM ; do
207                ptrfound=0
208                for jj in $ptr_mon ; do
209                    name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
210                    tst=`grep $name $outpref | wc -l | awk '{print $1}'`
211                    if test ! "x$tst" = x0 ; then ptrfound=1 ; fi
212                done
213                if test $ptrfound = '1' ; then
214                    eval "HAVE_PTR0"$ii"=t"
215                else
216                    eval "HAVE_PTR0"$ii"=f"
217                  if test "x$ADM" = x -a "x$OADM" = x; then
218                  # remove this ptr from the list of output variable to check
219                  # echo "-- ptr test=" $tst "number of var=" `echo $listVar | awk '{print NF}'` 1>&2
220                    listVar=`echo "$listVar" | sed "s/ pt$ii..//g"`
221                  fi
222                fi
223            #   eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"' 1>&2
224            done
225            tst=`echo $sVar $listVar | awk '{ for(i=2;i<=NF;i++){if($i==$1)t+=1}; print t }'`
226            if test $tst != 1 ; then
227              if test $tst = 0 ; then echo "==> WARNING: selected var >$sVar< not found" 1>&2
228                     else echo "==> WARNING: found selected var >$sVar< $tst times" 1>&2 ; fi
229              echo "==> WARNING: in checked list:" $listVar 1>&2
230            #- put it back once:
231              listVar=" $sVar "`echo "$listVar " | sed "s/ $sVar / /g"`
232            fi
233            if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(M)='$listVar'" 1>&2 ; fi
234            echo "listVar='$listVar'" > $locDIR"/summary.txt"
235            allargs=""
236            for xx in $listVar
237            do
238              case $xx in
239               'PS')  if [ $debug -gt 0 ]
240                      then echo testoutput_run: testoutput_var $1 cg2d_init_res 1>&2 ; fi
241                      testoutput_var $1 "cg2d_init_res" "Press. Solver (cg2d)" $2 $3; yy=$?
242                      if [ $debug -gt 0 ] ; then echo testoutput_run: cg2dres=$yy 1>&2 ; fi ;;
243              'Cost') testoutput_var $1 "ADM  precision_derivative_cost" "ADM Cost" $2 $3; yy=$? ;;
244              'Grad') testoutput_var $1 "ADM  precision_derivative_grad" "ADM Grad" $2 $3; yy=$? ;;
245               'Tmn') testoutput_var $1 "dynstat_theta_min"  "Theta minimum"  $2 $3; yy=$? ;;
246               'Tmx') testoutput_var $1 "dynstat_theta_max"  "Theta maximum"  $2 $3; yy=$? ;;
247               'Tav') testoutput_var $1 "dynstat_theta_mean" "Theta mean"     $2 $3; yy=$? ;;
248               'Tsd') testoutput_var $1 "dynstat_theta_sd"   "Theta Std.Dev"  $2 $3; yy=$? ;;
249               'Smn') testoutput_var $1 "dynstat_salt_min"  "Salt minimum"    $2 $3; yy=$? ;;
250               'Smx') testoutput_var $1 "dynstat_salt_max"  "Salt maximum"    $2 $3; yy=$? ;;
251               'Sav') testoutput_var $1 "dynstat_salt_mean" "Salt mean"       $2 $3; yy=$? ;;
252               'Ssd') testoutput_var $1 "dynstat_salt_sd"   "Salt Std.Dev"    $2 $3; yy=$? ;;
253               'Umn') testoutput_var $1 "dynstat_uvel_min"  "U minimum"       $2 $3; yy=$? ;;
254               'Umx') testoutput_var $1 "dynstat_uvel_max"  "U maximum"       $2 $3; yy=$? ;;
255               'Uav') testoutput_var $1 "dynstat_uvel_mean" "U mean"          $2 $3; yy=$? ;;
256               'Usd') testoutput_var $1 "dynstat_uvel_sd"   "U Std.Dev"       $2 $3; yy=$? ;;
257               'Vmn') testoutput_var $1 "dynstat_vvel_min"  "V minimum"       $2 $3; yy=$? ;;
258               'Vmx') testoutput_var $1 "dynstat_vvel_max"  "V maximum"       $2 $3; yy=$? ;;
259               'Vav') testoutput_var $1 "dynstat_vvel_mean" "V mean"          $2 $3; yy=$? ;;
260               'Vsd') testoutput_var $1 "dynstat_vvel_sd"   "V Std.Dev"       $2 $3; yy=$? ;;
261            'pt1mn'|'pt2mn'|'pt3mn'|'pt4mn'|'pt5mn') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
262               testoutput_var $1 "trcstat_ptracer0"$ii"_min"  "p0"$ii"_min"   $2 $3; yy=$? ;;
263            'pt1mx'|'pt2mx'|'pt3mx'|'pt4mx'|'pt5mx') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
264               testoutput_var $1 "trcstat_ptracer0"$ii"_max"  "p0"$ii"_max"   $2 $3; yy=$? ;;
265            'pt1av'|'pt2av'|'pt3av'|'pt4av'|'pt5av') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
266               testoutput_var $1 "trcstat_ptracer0"$ii"_mean" "p0"$ii"_mean" $2 $3; yy=$? ;;
267            'pt1sd'|'pt2sd'|'pt3sd'|'pt4sd'|'pt5sd') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
268               testoutput_var $1 "trcstat_ptracer0"$ii"_sd"   "p0"$ii"_StDv"  $2 $3; yy=$? ;;
269             'Qntmn') testoutput_var $1 "forcing_qnet_min" "Qnet minimum"  $2 $3; yy=$? ;;
270             'Qntmx') testoutput_var $1 "forcing_qnet_max" "Qnet maximum"  $2 $3; yy=$? ;;
271             'Qntav') testoutput_var $1 "forcing_qnet_mean" "Qnet mean"       $2 $3; yy=$? ;;
272             'Qntsd') testoutput_var $1 "forcing_qnet_sd"  "Qnet Std.Dev"  $2 $3; yy=$? ;;
273             'aSImn') testoutput_var $1 "seaice_area_min"   "SIce Area min"   $2 $3; yy=$? ;;
274             'aSImx') testoutput_var $1 "seaice_area_max"   "SIce Area max"   $2 $3; yy=$? ;;
275             'aSIav') testoutput_var $1 "seaice_area_mean"  "SIce Area mean"  $2 $3; yy=$? ;;
276             'aSIsd') testoutput_var $1 "seaice_area_sd"    "SIce Area StDv"  $2 $3; yy=$? ;;
277             'hSImn') testoutput_var $1 "seaice_heff_min"   "SIce Heff min"   $2 $3; yy=$? ;;
278             'hSImx') testoutput_var $1 "seaice_heff_max"   "SIce Heff max"   $2 $3; yy=$? ;;
279             'hSIav') testoutput_var $1 "seaice_heff_mean"  "SIce Heff mean"  $2 $3; yy=$? ;;
280             'hSIsd') testoutput_var $1 "seaice_heff_sd"    "SIce Heff StDv"  $2 $3; yy=$? ;;
281            'AthSiG') testoutput_var $1 "thSI_Ice_Area_G" "thSIc Area Global" $2 $3; yy=$? ;;
282            'AthSiS') testoutput_var $1 "thSI_Ice_Area_S" "thSIc Area South"  $2 $3; yy=$? ;;
283            'AthSiN') testoutput_var $1 "thSI_Ice_Area_N" "thSIc Area North"  $2 $3; yy=$? ;;
284            'HthSiG') testoutput_var $1 "thSI_IceH_ave_G" "thSIc H Global"    $2 $3; yy=$? ;;
285            'HthSiS') testoutput_var $1 "thSI_IceH_ave_S" "thSIc H South"     $2 $3; yy=$? ;;
286            'HthSiN') testoutput_var $1 "thSI_IceH_ave_N" "thSIc H North"     $2 $3; yy=$? ;;
287                  *) yy=99; echo "WARNING: asking for var=$xx : not recognized !" 1>&2 ;;
288              esac
289              if test $xx = $sVar
290              then allargs="$allargs > $yy <"
291              else allargs="$allargs $yy"
292              fi
293            done
294    
295            nbVar=`echo $listVar | awk '{print NF}'`
296            if [ $nbVar -lt $LEN_CHECK_LIST ] ; then
297            #-- fill line (up to standard length) with dot:
298              adNul=`expr $LEN_CHECK_LIST - $nbVar | awk '{for(i=1;i<=$1;i++){print "."}}'`
299              echo $allargs $adNul
300            else
301              echo $allargs
302            fi
303    # <-- same processing for adjoint & forward test
304    }
305    
306      for num in $@ ; do  genmakemodel()
307          if [ $num = 99 ]; then  {
308              printf ' --'      # genmakemodel directory
309        if test "x$NOGENMAKE" = xt ; then
310            echo "genmake skipped!"
311        else
312            if test "x$BASH" = x ; then
313                GENMAKE2="../../../tools/genmake2"
314          else          else
315              printf '%3i' $num              GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
316          fi          fi
317      done          (
318                cd $1;
319                command="$GENMAKE2  -ds -m $MAKE"
320                if test "x$ADM" = xt ; then
321                    command="$command --mods=../code_ad"
322                elif test "x$OADM" = xt ; then
323                    command="$command -adof ../../../tools/adjoint_options/adjoint_oad -mods '../code_oad ../../OpenAD/code_oad_all'"
324                else
325                    command="$command -mods=../code"
326                fi
327                if test "x$OPTFILE" != xNONE ; then
328                    command="$command -optfile=$OPTFILE"
329                fi
330                if test "x$IEEE" != x ; then
331                    command="$command -ieee"
332                fi
333                if test "x$GSL" = xt ; then
334                    command="$command -gsl"
335                fi
336                if test "x$MPI" = xt ; then
337                    command="$command -mpi"
338                fi
339                if test "x$MULTI_THREAD" = xt ; then
340                #- run multi-threaded using OpenMP:
341                    command="$command -omp"
342                fi
343                if test "x$USE_R4" = xt ; then
344                    command="$command -use_r4"
345                fi
346                if test "x$TS" = xt ; then
347                    command="$command -ts"
348                fi
349                if test "x$PAPIS" = xt ; then
350                    command="$command -papis"
351                else
352                if test "x$PCLS" = xt ; then
353                    command="$command -pcls"
354                fi
355                fi
356                printf 'genmake ... '
357                eval $command > make.log 2>&1
358                RETVAL=$?
359                #  Reduce the size of the testing emails!
360                head -100 Makefile > $CDIR/Makefile_head
361                if test "x$RETVAL" != x0 ; then
362                    tail make.log
363                    echo "genmakemodel: genmake failed"
364                    cp genmake_* make.log $CDIR
365                    return 1
366                else
367                    echo "successful"
368                fi
369            )
370        fi
371  }  }
372    
373  testoutput()  makeclean()
374  {  {
375      # testoutput diretory subdir      # makeclean directory
376      #      if test "x$NOCLEAN" = xt ; then
377      #  test output in "directory"          echo "make Clean skipped!"
378        else
379      if [ $debug -gt 0 ]; then          (
380          echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2              cd $1;
381      fi              #if test -e $OUTPUTFILE ; then rm -f $OUTPUTFILE ; fi
382      testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2; cg2dres=$?              if test -r Makefile ; then
383      if [ $debug -gt 0 ]; then                  printf 'clean build-dir: make Clean ... '
384          echo testoutput: cg2dres=$cg2dres 1>&2                  $MAKE Clean >> make.log 2>&1
385                    RETVAL=$?
386                    if test "x$RETVAL" != x0 ; then
387                        tail make.log
388                        echo "makeclean: \"make Clean\" failed"
389                        cp make.log $CDIR"/make.log"
390                        return 1
391                    fi
392                    echo successful
393                else
394                    echo ''
395                fi
396                exit 0
397            )
398      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  
399  }  }
400    
401  genmakemodel()  run_clean()
402  {  {
403      # genmakemodel directory      # run_clean directory
404      GENMAKE2="../../../tools/genmake2"      if test "x$NOCLEAN" = xt ; then
405      (          echo "run_clean skipped!"
406          cd $1;      else
407          printf 'genmake ... ' 1>&2          (
408          # ../../../tools/genmake -ieee -mods=../code > make.log 2>&1              cd $1;
409          $GENMAKE2  -ds --mods=../code "--optfile="$OPTFILE > make.log 2>&1              printf 'clean run-dir ... '
410          RETVAL=$?              # part of what is done after "make clean" when doing "make CLEAN"
411          for i in gm_state gm_optfile gm_local Makefile ; do              find . -name "*.meta" -exec rm {} \;
412              if test -r $i ; then              find . -name "*.data" -exec rm {} \;
413                  cp $i $CDIR              find . -name "fort.*" -exec rm {} \;
414              fi              find . -type l -exec rm {} \;
415          done              rm -f $EXECUTABLE *.txt STD* *diagnostics.log datetime
416          if test "x$RETVAL" != x0 ; then              rm -rf mnc_test_*
417              tail make.log              rm -f *_MIT_CE_000.opt0000 costfunction*0000
418              echo "genmakemodel: genmake failed" 1>&2              echo successful
419              cp make.log $CDIR              exit 0
420              return 1          )
421          else      fi
             echo "succesful" 1>&2  
         fi  
     )  
422  }  }
423    
424  makeclean()  makedependmodel()
425  {  {
426      # makeclean directory      # makedependmodel directory
427      (      if test "x$NODEPEND" = xt ; then
428          cd $1;          echo "make depend skipped!"
429          rm -f output.txt      else
430          printf 'make CLEAN ... ' 2>&1          (
431          if test -r Makefile ; then              cd $1;
432              make CLEAN >> make.log 2>&1              printf 'make depend ... '
433                $MAKE depend >> make.log 2>&1
434              RETVAL=$?              RETVAL=$?
435              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
436                  tail make.log                  tail make.log
437                  echo "makeclean: \"make CLEAN\" failed" 1>&2                  echo "makedependmodel: make depend failed"
438                  cp make.log $CDIR"/make.log"                  cp make.log $CDIR"/make.log"
439                  return 1                  return 1
440                else
441                    echo successful
442              fi              fi
443          fi          )
444          echo succesful 1>&2      fi
         exit 0  
     )  
445  }  }
446    
447  makedependmodel()  makemodel()
448  {  {
449      # makedependmodel directory      # makemodel directory
450      (      (
451        if test "x$NOMAKE" = xt ; then
452          cd $1;          cd $1;
453          printf 'make depend ... ' 1>&2          if test -x $EXECUTABLE ; then
454          make depend >> make.log 2>&1              echo "make skipped!"
         RETVAL=$?  
         if test "x$RETVAL" != x0 ; then  
             tail make.log  
             echo "makedependmodel: make depend failed" 1>&2  
             cp make.log $CDIR"/make.log"  
             return 1  
455          else          else
456              echo succesful 1>&2              echo "no executable!"
457                return 2
458          fi          fi
459      )      else
 }  
   
 makemodel()  
 {  
     # makemodel directory  
     (  
460          cd $1;          cd $1;
461          if test -r Makefile ; then          if test -r Makefile ; then
462              printf 'make ... ' 1>&2              printf 'make ... '
463              make >> make.log 2>&1              if test "x$ADM" = xt ; then
464                    $MAKE adall >> make.log 2>&1
465                elif test "x$OADM" = xt ; then
466                    $MAKE adAll >> make.log 2>&1
467                else
468                    if test "x$JOBS" = x ; then
469                        $MAKE >> make.log 2>&1
470                    else
471                        $MAKE -j $JOBS >> make.log 2>&1
472                    fi
473                fi
474              RETVAL=$?              RETVAL=$?
475              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
476                  tail make.log                  tail make.log
477                  echo failed 1>&2                  echo failed
478                  cp make.log $CDIR"/make.log"                  cp make.log $CDIR"/make.log"
479                    rm -f $EXECUTABLE
480                  return 1                  return 1
481              else              else
482                  echo succesful 1>&2                  echo successful
483              fi              fi
484          fi          fi
485        fi
486      )      )
487  }  }
488    
489    symlink_mpifiles()
490    {
491        # Put special links so that MPI specific files are used
492        # This MUST be invoked between makeclean and makelinks because
493        # the Makefile will link to non-mpi files by default
494    
495        dir=$1
496        code_dir=$2
497        BUILD_DIR=$dir/$3
498        CODE_DIR=$dir/$code_dir
499    
500        # These are files that should replace their counter-part when using -mpi
501        MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi" -print)`
502    
503        #  Is this an MPI run?
504        if test "x$MPI" = xt ; then
505            # YES: We symbolically link these files to the build
506            # dir so long as there is no real file in place
507            for ii in $MPI_FILES ; do
508                i=`echo $ii | sed 's:^\./::'`
509                name=`echo $i | sed 's:_mpi::' `
510                cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1
511                RETVAL=$?
512                if test "x$RETVAL" != x0 ; then
513                    if ! test -f $BUILD_DIR/$i ; then
514                        #echo Linking $name to $i
515                        (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
516                    fi
517                fi
518            done
519        else
520            # NO: We undo any _mpi symbolically linked files
521            for ii in $MPI_FILES ; do
522                i=`echo $ii | sed 's:^\./::'`
523                name=`echo $i | sed 's:_mpi::' `
524                if test -L $BUILD_DIR/$name ; then
525                    cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
526                    RETVAL=$?
527                    if test "x$RETVAL" = x0 ; then
528                        #echo Un-linking $name from $linktarg
529                        rm -f $BUILD_DIR/$name
530                    fi
531                fi
532            done
533        fi
534    
535    }
536    
537  linkdata()  linkdata()
538  {  {
539      # linkdata flag      # linkdata run_dir input_dir_1 input_dir_2 ...
540      #      #
541      # symbolically link data files to run directory      # symbolically link data files to run directory
542      if [ $1 -ne 0 ]; then      if test -d $1 ; then
543          ( cd $2 ;  ln -sf ../input/* . )          (
544                cd $1 ; shift
545                echo 'linkdata from dirs:' $*
546                inpMPI=`(cd ../$1 ; find . -name "*.mpi" -print | sed 's:^\./::')`
547                for xx in $inpMPI ; do
548                  if test -r "../"$1"/"$xx ; then
549                    # found 1 _mpi sfx file in 1rst input dir and it is readable
550                    yy=`echo $xx | sed 's:\.mpi$::'`
551                    if test "x$MPI" = "xt" ; then
552                    # mpi test: remove symbolic link & link _mpi sfx file
553                        if test -h $yy ; then rm -f $yy ; fi
554                        if test ! -r $yy ; then
555                            ln -sf "../"$1"/"$xx $yy ;
556                            printf " $xx" 1>&2
557                        fi
558                    else
559                    # not mpi test: remove symbolic link
560                        if test -h $yy ; then rm -f $yy ; fi
561                    fi
562                  fi
563                done
564                if test -r "../"$1"/eedata.mth" ; then
565                # found eedata.mth in 1rst input dir and it is readable
566                    if test "x$MULTI_THREAD" = "xt" ; then
567                    # multi-threaded test: remove symbolic link & link eedata.mth
568                        if test -h eedata ; then rm -f eedata ; fi
569                        if test ! -r eedata ; then
570                            ln -sf "../"$1"/eedata.mth" eedata ;
571                            printf ' eedata.mth' 1>&2
572                        fi
573                    else
574                    # not multi-threaded test: remove eedata symbolic link
575                        if test -h eedata ; then rm -f eedata ; fi
576                    fi
577                fi
578                prevDir='NONE'
579                for ldir in $* ; do
580                    if test -d "../"$ldir -a $ldir != $prevDir ; then
581                        printf " ldir=${ldir}:" 1>&2
582                        files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
583                        for i in $files ; do
584                            if test ! -d "../"$ldir/$i ; then
585                                if test ! -r $i  ; then
586                                    printf ' '$i 1>&2
587                                    ln -sf "../"$ldir"/"$i $i
588                                fi
589                            fi
590                        done
591                        printf ' ;' 1>&2
592                        if test -x "../"$ldir"/"prepare_run ; then
593                            "../"$ldir"/"prepare_run 1>&2
594                        else
595                            echo '' 1>&2
596                        fi
597                    fi
598                    prevDir=$ldir
599                done
600            )
601      fi      fi
602  }  }
603    
604  runmodel()  runmodel()
605  {  {
606      # runmodel directory exe      # runmodel directory
607      #      #
608      #  runs the model "exe" in "directory" (exe is relative to directory)      #  runs "$COMMAND in "directory"
609        #  (where "$COMMAND" is relative to "directory")
610      (      (
611          cd $1          cd $1
612          if [ -x $2 ]; then          printf 'runmodel in %s ... ' $1
613              if [ $quick -eq 0 ]; then          if test -L $EXECUTABLE ; then
614                  rm -f output.txt            if test -x "../"$builddir"/"$EXECUTABLE ; then
615              fi              diff -q $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
616              printf 'runmodel: ' 1>&2              outD=$? ; if test $outD != 0 ; then rm -f $EXECUTABLE ; fi
617              make output.txt            else rm -f $EXECUTABLE
618              RETVAL=$?            fi
619              if test "x$RETVAL" = x0 ; then          fi
620                  cp output.txt $CDIR"/output.txt"          if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
621                  return 0              echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_tmp
622                ln -sf "../"$builddir"/"$EXECUTABLE .
623            fi
624            if test ! -x $EXECUTABLE ; then
625                    rm -f $RUNLOG ; touch $RUNLOG
626                    if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
627                    echo " no executable:" $EXECUTABLE >> $RUNLOG
628                    RETVAL=8
629                    ENDVAL=-1
630            else
631                if test ! -f $OUTPUTFILE -o $OUTPUTFILE -ot $EXECUTABLE ; then
632                  # output do not exist or is older than executable:
633                    rm -f $RUNLOG ; touch $RUNLOG
634                    if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
635                    ( eval $COMMAND ) >> $RUNLOG 2>&1
636                    RETVAL=$?
637              else              else
638                  return 1                  RETVAL=0
639                    if test -f $RUNLOG ; then
640                        if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
641                        echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
642                    else
643                        touch $RUNLOG
644                        if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
645                        echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
646                        echo " no previous $RUNLOG: assume NORMAL END" >> $RUNLOG 2>&1
647                    fi
648              fi              fi
649                ENDVAL=`cat $RUNLOG | grep -v 'ABNORMAL END' | grep -c 'NORMAL END'`
650            fi
651            rm -f run.log_tmp
652            if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
653                echo successful
654                printf '=> output from running in %s :\n' $1 1>&2
655                tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
656                # === Reduce the size of the testing emails!
657                #cp $OUTPUTFILE $CDIR"/"$OUTPUTFILE
658                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
659                return 0
660            elif [ $RETVAL -ne 0 -a $ENDVAL -gt 0 ] ; then
661                #-- for some weird cases (run is finihed but with error code)
662                echo 'finished with error (run:' $RETVAL ' end:' $ENDVAL ')'
663                printf '=> output from running in %s :\n' $1 1>&2
664                tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
665                return 0
666            else
667                echo 'failed (run:' $RETVAL ' end:' $ENDVAL ')'
668                printf '=> output from running in %s :\n' $1 1>&2
669                tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
670                cp $RUNLOG $CDIR"/"$RUNLOG
671                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
672                return 1
673          fi          fi
674      )      )
675  }  }
# Line 283  createcodelet() Line 678  createcodelet()
678  {  {
679      # create codelet for comparing model output      # create codelet for comparing model output
680    
681      echo -n "creating the comparison code...  "      printf "creating the comparison code (using CC=$CC)...  "
682      cat > tmp_cmpnum.f <<EOFA      cat > tr_cmpnum.c <<EOF
683        program cmpnum  #include <stdio.h>
684        implicit none  #include <math.h>
685        real*8 a,b,diff  int main( int argc, char** argv )  {
686        integer linnum,best    int linnum,cmplin,best,lncnt;
687        best=-16    double a,b,abave,relerr;
688    99  read(*,*,end=70,err=60) linnum,a,b    best = -22;
689        diff=0.5*(abs(a)+abs(b))    lncnt = 0;
690  c     print *,a,b,diff,abs(a-b)/diff    while( 1 & ( (lncnt+=1) < 999 ) )  {
691        if (diff.gt.1.e-12) then      scanf("%d", &linnum);
692          diff=abs(a-b)/diff      if (linnum == -1)  break;
693          if (diff.gt.0.) then      scanf("%lf", &a);  scanf("%lf", &b);
694  c         print *,int(log10(diff)),diff      abave = 0.5*(fabs(a)+fabs(b));
695            linnum=int(log10(diff))      if ( abave == abave ) {
696            best=max(best,linnum)        if (abave > 0.0) {
697          endif          relerr=fabs(a-b)/abave;
698        else          if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
699          if (best.eq.-16.and.diff.ne.0.) best=-22          else { cmplin = -16 ; }
700        endif          best = (best > cmplin) ? best : cmplin; }
701        goto 99        else { cmplin = -22 ; }
702    60  stop 'cmpnum: An error occured reading a,b'     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
703    70  print *,-best        }
704        end     else {
705  EOFA     /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
706          break; }
707      }
708      if (lncnt == 999) best=-29;
709      if (linnum != -1) best=-99;
710      printf("%d\n", -best);
711      return 0;
712    }
713    EOF
714        $CC -o tr_cmpnum tr_cmpnum.c -lm
715    
716      f77 tmp_cmpnum.f      if [ -x ./tr_cmpnum ]; then
     if [ -x ./a.out ]; then  
717          echo "OK"          echo "OK"
718          return 0          return 0
719      else      else
720          echo          echo
721          echo "createcodelet: failed to compile codelet" | tee          echo "ERROR: failed to compile comparison code -- please specify"
722            echo "  a C compiler using the CC environment variable."
723          exit 1          exit 1
724      fi      fi
725  }  }
# Line 327  formatresults() Line 731  formatresults()
731      nm=$1      nm=$1
732      printf '%s %s %s %s' $2 $3 $4 $5      printf '%s %s %s %s' $2 $3 $4 $5
733      shift; shift; shift; shift; shift;      shift; shift; shift; shift; shift;
734      printf '%3s' $@      listPrt=$@
735            listRes=`echo $listPrt | sed 's/>//' | sed 's/<//'`
736      if [ $1 = '--' ]; then      xx=`echo $listPrt | sed 's/.*>//' | sed 's/<.*//' | awk '{print $1}'`
737        printf '%3s' $listPrt
738    #   line below does not work on hp-ux_ia64 : do those substitutions later on
739    #   printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</'
740    
741        if [ $xx = '..' ]; then
742            printf ' N/O '
743        elif [ $xx = '--' ]; then
744            printf ' N/O '
745        elif [ $xx = 99 ]; then
746          printf ' N/O '          printf ' N/O '
747      else      else
748          if [ $1 -gt 12 ]; then          if [ $xx -ge $MATCH_CRIT ]; then
749              printf ' pass'              printf ' pass'
750          else          else
751              printf ' FAIL'              printf ' FAIL'
# Line 340  formatresults() Line 753  formatresults()
753      fi      fi
754      printf '  %s' $nm      printf '  %s' $nm
755      printf '\n'      printf '\n'
       
 }  
   
 show_help()  
 {  
     cat - << EOF  
 $0 [-help] [-quick] [-verbose] dir1 [dir2] [...]  
  -help      Show this help message  
  -quick     Skip "genmake" and "make depend" if the Makefile exists  
  -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.  
  -noieee    By default, $0 uses the -ieee option for genmake. This turns it off.  
  -cleanup   Aggresively removes all model output, executables and object files  
             and then exits. Use with care.  
756    
 Normal usage:  
  $0 *       Configure, compile, run and analyze in all experiment directories  
 EOF  
757  }  }
758    
759  scandirs()  scandirs()
760  {  {
761      if [ $# -eq 0 ]; then      if [ $# -eq 1 ]; then
762          for arg in * ; do          for arg in * ; do
763              test -d $arg/input && echo $arg              test -f $arg/$1 && echo $arg
764          done          done
765      else      else
766          echo $*          echo $*
767      fi      fi
768  }  }
769    
770    
771  ###############################################################################  check_eedata()
772  ###############################################################################  {
773        # check_eedata size.h eedata
774        if [ $# -eq 2 ] ; then
775          if test -f $1 -a -f $2 ; then
776          sx=`grep "^     & *nSx *=" $1 | sed "s/^     & *nSx *=//" | sed 's/, *$//'`
777          nx=`grep "^ *nTx *=" $2 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
778          if test "x$nx" = x ; then
779            rx=10
780          else
781            rx=`expr $sx % $nx`
782          fi
783          sy=`grep "^     & *nSy *=" $1 | sed "s/^     & *nSy *=//" | sed 's/, *$//'`
784          ny=`grep "^ *nTy *=" $2 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
785          if test "x$ny" = x ; then
786            ry=20
787          else
788            ry=`expr $sy % $ny`
789          fi
790          echo `expr $rx + $ry`
791        else
792          echo '-1'
793          fi
794        else
795          echo '-2'
796        fi
797    
798    }
799    
800  ###############################################################################  ###############################################################################
801    
802    
803  #  Default properties  #  Default properties
804  debug=0  debug=0
805  verbose=1  verbose=1
 quick=0  
806  clean=0  clean=0
 ieee=1  
 expts=''  
807    
808  OPTFILES=  IEEE=true
809  ADDRESSES=edhill@mitgcm.org  if test "x$MITGCM_IEEE" != x ; then
810        IEEE=$MITGCM_IEEE
811    fi
812    GSL=f
813    
814    CLEANUP=f
815    NORUN=f
816    QUICK=f
817    NOMAKE=f
818    NOGENMAKE=f
819    NOCLEAN=f
820    NODEPEND=f
821    POSTCLEAN=f
822    
823    BASH=
824    OPTFILE=NONE
825    ADDRESSES=
826  TESTDIRS=  TESTDIRS=
827    SKIPDIRS=
828  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
829  MPACK="$MPACKDIR/mpack"  HAVE_MPACK=
830    MPACK=
831    COMMAND=
832    if test "x$MAKE" = x ; then
833        MAKE=make
834    fi
835    if test "x$CC" = x ; then
836        CC=cc
837    fi
838    JOBS=
839    MPI=f
840    MULTI_THREAD=f
841    OUTDIR=
842    DELDIR=
843    USE_R4=
844    
845    ADM=
846    OADM=
847    
848    # list of pTracers to check for monitor output
849    PTRACERS_NUM="1 2 3 4 5"
850    
851    MATCH_CRIT=13
852    
853  echo -n "parsing options...  "  printf "parsing options...  "
854    
855  ac_prev=  ac_prev=
856  for ac_option ; do  for ac_option ; do
# Line 407  for ac_option ; do Line 863  for ac_option ; do
863      fi      fi
864    
865      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
866        
867      case $ac_option in      case $ac_option in
868                    
869          -help | --help | -h | --h)          -help | --help | -h | --h)
870              usage ;;              usage ;;
871                    
872          -optfile | --optfile | -of | --of)          -optfile | --optfile | -of | --of)
873              ac_prev=OPTFILES ;;              ac_prev=OPTFILE ;;
874          -optfile=* | --optfile=* | -of=* | --of=*)          -optfile=* | --optfile=* | -of=* | --of=*)
875              OPTFILES=$ac_optarg ;;              OPTFILE=$ac_optarg ;;
876                    
877          -addr | --addr | -a | --a)          -addr | --addr | -a | --a)
878              ac_prev=ADDRESSES ;;              ac_prev=ADDRESSES ;;
879          -addr=* | --addr=*)          -addr=* | --addr=* | -a=* | --a=*)
880              ADDRESSES=$ac_optarg ;;              ADDRESSES=$ac_optarg ;;
881            -mpackdir | --mpackdir | -mpd | --mpd)
882                ac_prev=MPACKDIR ;;
883            -mpackdir=* | --mpackdir=* | -mpd=* | --mpd=*)
884                MPACKDIR=$ac_optarg ;;
885    
886          -tdir | --tdir | -t | --t)          -tdir | --tdir | -t | --t)
887              ac_prev=TESTDIRS ;;              ac_prev=TESTDIRS ;;
888          -tdir=* | --tdir=*)          -tdir=* | --tdir=* | -t=* | --t=*)
889              TESTDIRS=$ac_optarg ;;              TESTDIRS=$ac_optarg ;;
890    
891          -quick) quick=1 ;;          -skipdir | --skipdir | -skd | --skd)
892                ac_prev=SKIPDIRS ;;
893            -skipdir=* | --skipdir=* | -skd=* | --skd=*)
894                SKIPDIRS=$ac_optarg ;;
895    
896            -bash | --bash | -b | --b)
897                ac_prev=BASH ;;
898            -bash=* | --bash=* | -b=* | --b=*)
899                BASH=$ac_optarg ;;
900    
901            -command | --command | -c | --c)
902                ac_prev=COMMAND ;;
903            -command=* | --command=* | -c=* | --c=*)
904                COMMAND=$ac_optarg ;;
905    
906            -make | --make | -m | --m)
907                ac_prev=MAKE ;;
908            -make=* | --make=* | -m=* | --m=*)
909                MAKE=$ac_optarg ;;
910    
911            -odir | --odir)
912                ac_prev=OUTDIR ;;
913            -odir=* | --odir=*)
914                OUTDIR=$ac_optarg ;;
915    
916            -ptracers | --ptracers | -ptr | --ptr)
917                ac_prev=PTRACERS_NUM ;;
918            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
919                PTRACERS_NUM=$ac_optarg ;;
920    
921            -match | --match ) ac_prev=MATCH_CRIT ;;
922            -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
923    
924            -j | --j) ac_prev=JOBS ;;
925            -j=* | --j=*) JOBS=$ac_optarg ;;
926    
927            -clean | --clean)
928                CLEANUP=t ; DELDIR=t ;;
929    
930            -norun | --norun | -nr | --nr)
931                NORUN=t ;;
932            -runonly | --runonly | -ro | --ro)
933                QUICK=t ; NOMAKE=t ;;
934            -quick | --quick | -q | --q)
935                QUICK=t ;;
936            -nogenmake | --nogenmake | -ng | --ng)
937                NOGENMAKE=t ;;
938            -noclean | --noclean | -nc | --nc)
939                NOCLEAN=t ;;
940            -nodepend | --nodepend | -nd | --nd)
941                NODEPEND=t ;;
942    
943            -postclean | --postclean | -pc | --pc)
944                POSTCLEAN=t ;;
945    
946            -mpi) MPI=t ;;
947    
948            -mth) MULTI_THREAD=t ;;
949    
950            -adm | -ad) ADM=t ;;
951    
952            -oad) OADM=t; NODEPEND=t ;;
953    
954            -ieee) IEEE=true ;;
955            -noieee) IEEE= ;;
956            -gsl) GSL=t ;;
957    
958          -verbose) verbose=2 ;;          -verbose) verbose=2 ;;
959          -debug) debug=1 ;;          -debug) debug=1 ;;
         -clean) clean=1 ;;  
         -noieee) ieee=0 ;;  
960          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
961    
962            -deldir | -dd) DELDIR=t ;;
963    
964            -use_r4|-ur4) USE_R4=t ;;
965    
966            -ts) TS=t;;
967            -papis) PAPIS=t;;
968            -pcls) PCL=t;;
969    
970          -*)          -*)
971              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
972              usage              usage
973              ;;              ;;
974            
975          *)          *)
976              echo "Error: unrecognized argument: "$ac_option              echo "Error: unrecognized argument: "$ac_option
977              usage              usage
978              ;;              ;;
979            
980       esac       esac
981        
982  done  done
983    
984    if test "x$QUICK" = xt ; then
985        NOGENMAKE=t
986        NOCLEAN=t
987        NODEPEND=t
988    fi
989    
990    #- setting for forward or ADM testing
991    if test "x$ADM" = xt ; then
992        code_dir=code_ad
993        inputdir=input_ad
994        ref_outp="output_adm.txt"
995        EXECUTABLE="mitgcmuv_ad"
996    elif test "x$OADM" = xt ; then
997        code_dir=code_oad
998        inputdir=input_oad
999        ref_outp="output_oadm.txt"
1000        EXECUTABLE="mitgcmuv_ad"
1001    else
1002        code_dir=code
1003        inputdir=input
1004        ref_outp="output.txt"
1005        EXECUTABLE="mitgcmuv"
1006    fi
1007    
1008  if test "x$TESTDIRS" = x ; then  if test "x$TESTDIRS" = x ; then
1009      TESTDIRS=`scandirs`      LIST=`scandirs results/$ref_outp`
1010    else
1011        #- expand group of experiments:
1012        LIST=" "
1013        for xx in $TESTDIRS
1014        do
1015          case $xx in
1016            'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
1017                     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
1018                     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
1019                    ;;
1020            'tutorials')
1021                     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
1022            *)       LIST=${LIST}" "$xx ;;
1023          esac
1024        done
1025    fi
1026    #echo 'LIST='${LIST}'<'
1027    #- skip dirs, remove duplicate and non-directory:
1028    TESTDIRS=" "
1029    count=0
1030    for xx in $LIST
1031    do
1032        yy=`echo $SKIPDIRS | grep -c $xx`
1033        if test $yy = 0 ; then
1034            if test -d $xx ; then
1035                yy=`echo $TESTDIRS | grep -c $xx`
1036                if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
1037            else count=1 ;
1038                echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
1039            fi
1040        else
1041            if test $count = 1 ; then echo -n ", \"$xx\""
1042            else count=1 ; echo "" ;  echo -n " skip: \"$xx\""
1043            fi
1044        fi
1045    done
1046    if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
1047    #echo 'TESTDIRS='${TESTDIRS}'<'
1048    
1049    if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
1050        OPTFILE=$MITGCM_OF
1051    fi
1052    
1053    RUNLOG="run.log"
1054    OUTPUTFILE=$ref_outp
1055    if test "x$COMMAND" = x ; then
1056        COMMAND="./$EXECUTABLE > $OUTPUTFILE"
1057    fi
1058    if test "x$MPI" = xt ; then
1059        OUTPUTFILE="STDOUT.0000"
1060  fi  fi
1061    
1062  echo "OK"  echo "OK (COMMAND= $COMMAND )"
1063    
1064    # set the Default List of output variables to be checked:
1065    #  (use default or load experiment-specific list from file "tr_checklist")
1066    # content : 1rst = main variable used to decide if it pass or FAIL
1067    #         others = number of matching digits to be printed in summary.txt
1068    if test "x$ADM" = x -a "x$OADM" = x; then
1069        DEF_CHECK_LIST='PS PS T+ S+ U+ V+ pt1+ pt2+ pt3+ pt4+ pt5+'
1070        EMPTY_RESULTS='.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..'
1071        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1072        ii=`echo $EMPTY_RESULTS | awk '{print NF}'`
1073        EMPTY_RESULTS=$EMPTY_RESULTS`expr $LEN_CHECK_LIST - $ii | awk 'BEGIN{FS=":"}{for(i=1;i<=$1;i++){printf "  ."}}'`
1074    else
1075        DEF_CHECK_LIST='Grad Cost Grad'
1076        EMPTY_RESULTS='.. ..'
1077        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1078    fi
1079    
1080  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
1081  createcodelet  if test -x tr_cmpnum ; then
1082        echo "skipping comparison code build"
1083    else
1084        createcodelet
1085    fi
1086    
1087  #  build the mpack utility  #  build the mpack utility (if ADDRESSES = NONE, do it to test the build)
1088  build_mpack  if test "x$ADDRESSES" = x ; then
1089        echo "skipping mpack build"
1090    else
1091        build_mpack
1092    fi
1093    
1094  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
1095    CMDLINE=$0
1096    for xx in "$@" ; do nw=`echo $xx | wc -w`
1097        if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
1098                            else CMDLINE="$CMDLINE '$xx'" ; fi
1099    done
1100    #for xx in "$@" ; do CMDLINE="$CMDLINE '$xx'" ; done
1101  MACH=`hostname`  MACH=`hostname`
1102  UNAMEA=`uname -a`  UNAMEA=`uname -a`
1103  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
1104  BASE=$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
1105    if test "x$OUTDIR" != x ; then
1106        BASE="tr_"$OUTDIR"_"$DATE"_"
1107    else
1108        short_name=`hostname | sed 's/\..*$//'`
1109        BASE="tr_"$short_name"_"$DATE"_"
1110    fi
1111  DNUM=0  DNUM=0
1112  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
1113  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 475  done Line 1117  done
1117  mkdir $DRESULTS  mkdir $DRESULTS
1118  RETVAL=$?  RETVAL=$?
1119  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
1120      echo "Error: can't create results directory \"./$DRESULTS\""      echo "ERROR: Can't create results directory \"./$DRESULTS\""
1121      exit 1      exit 1
1122  fi  fi
1123  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
1124  date > $SUMMARY  start_date=`date`
1125  cat << EOF >> $SUMMARY  echo $start_date > $SUMMARY
1126                  T           S           U           V  echo 'run:' $CMDLINE >> $SUMMARY
1127  G D M    c        m  s        m  s        m  s        m  s  echo 'on :' $UNAMEA  >> $SUMMARY
1128  E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .  
1129  N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d  of_path=
1130  2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .  if test "x$OPTFILE" != xNONE ; then
1131        if test -r $OPTFILE ; then
1132            # get the path
1133            path=${OPTFILE%/*}
1134            if test "x$path" = x ; then
1135                of_path=`pwd`
1136            else
1137                of_path=`( cd $path > /dev/null 2>&1 ; pwd )`
1138            fi
1139            file=${OPTFILE##*/}
1140            OPTFILE=$of_path/$file
1141            cp $OPTFILE $DRESULTS
1142            echo >> $SUMMARY
1143            echo "  OPTFILE=$OPTFILE" >> $SUMMARY
1144        else
1145            echo | tee $SUMMARY
1146            echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
1147            exit 1
1148        fi
1149    else
1150        echo >> $SUMMARY
1151        echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
1152        echo "   so the genmake default will be used." >> $SUMMARY
1153    fi
1154    echo
1155    echo >> $SUMMARY
1156    if test "x$ADM" = x -a "x$OADM" = x; then
1157        if [ $MATCH_CRIT -lt 10 ] ;
1158        then line_0="default  "$MATCH_CRIT ;
1159        else line_0="default "$MATCH_CRIT ; fi
1160           line_0="$line_0  ----T-----  ----S-----  ----U-----  ----V-----"
1161        line_1="G D M    c        m  s        m  s        m  s        m  s"
1162        line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
1163        line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
1164        line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
1165        for ii in $PTRACERS_NUM ; do
1166            line_0="$line_0  --PTR 0"$ii"--"
1167            line_1="$line_1        m  s"
1168            line_2="$line_2  m  m  e  ."
1169            line_3="$line_3  i  a  a  d"
1170            line_4="$line_4  n  x  n  ."
1171        done
1172        echo "$line_0" | tee -a $SUMMARY
1173        echo "$line_1" | tee -a $SUMMARY
1174        echo "$line_2" | tee -a $SUMMARY
1175        echo "$line_3" | tee -a $SUMMARY
1176        echo "$line_4" | tee -a $SUMMARY
1177        echo " "       | tee -a $SUMMARY
1178    else
1179        echo "ADJOINT=true" >> $SUMMARY
1180        echo >> $SUMMARY
1181        if [ $MATCH_CRIT -lt 10 ] ;
1182        then line_0="default     "$MATCH_CRIT ;
1183        else line_0="default    "$MATCH_CRIT ; fi
1184        echo "$line_0" | tee -a $SUMMARY
1185        cat << EOF | tee -a $SUMMARY
1186    G D M    C  G
1187    E p a R  o  r
1188    N n k u  s  a
1189    2 d e n  t  d
1190    
1191  EOF  EOF
1192    fi
1193    echo "-------------------------------------------------------------------------------"
1194    
1195  NDIR=0  #  ...and each test directory...
1196    for dir in $TESTDIRS ; do
 #  For each optfile...  
 for OPTFILE in $OPTFILES ; do  
1197    
1198      OPTFILE=`pwd`"/$OPTFILE"      # set builddir & rundir:
1199      if test ! -r $OPTFILE ; then      builddir="build"
1200          echo "Error: can't read optfile \"$OPTFILE\""      if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1201          exit 1      rundir="run"
1202        if test ! -d $dir/$rundir ; then
1203            rundir=$builddir
1204      fi      fi
1205      echo      CODE_DIR=$dir/$code_dir
1206      echo "OPTFILE=$OPTFILE" >> $SUMMARY      BUILD_DIR=$dir/$builddir
     echo >> $SUMMARY  
       
     #  ...and each test directory...  
     for dir in $TESTDIRS ; do  
           
         #  Create an output dir for each OPTFILE/tdir combination  
         CDIR=$DRESULTS"/"$DRESULTS"_"$NDIR  
         mkdir $CDIR  
         CDIR=`pwd`"/$CDIR"  
1207    
1208          #  ...configue, make, run, and compare the output.      #  Cleanup only!
1209          echo "-------------------------------------------------------------------------------"      if test "x$CLEANUP" = xt ; then
1210          echo          echo -n '  --- dir:' $BUILD_DIR ': '
1211          echo "Experiment:  $dir"          makeclean $BUILD_DIR
1212          echo          rm -f $BUILD_DIR/$EXECUTABLE
1213          unset genmake makedepend make run          if test -d $dir/$rundir/CVS ; then
1214          results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'              echo -n '  --- dir:' $dir/$rundir ': '
1215          ( cd $dir/input; rm -f *.{o,f,c,F} *.[f,F]90 work* output.txt Make* make.log; )              run_clean $dir/$rundir
         if [ -r $dir/build ]; then  
             seperatebuilddir=1  
             builddir=build  
             rundir=build  
             ( cd $dir/build; ln -sf ../input/* . )  
         else  
             seperatebuilddir=0  
             builddir=input  
             rundir=input  
1216          fi          fi
1217            trdir=`( cd $dir ; find . -type d -name "tr_run.*" -print | sed 's/^.\///')`
1218            ttd=`echo $trdir | wc -w`
1219            if test $ttd != 0 ; then
1220                echo '  --- rm dir:' $trdir
1221                ( cd $dir ; rm -rf $trdir )
1222            fi
1223            continue
1224        fi
1225    
1226          #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
1227          #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
1228          if test ! -r $dir"/results/output.txt" ; then      fout=$dir"/results/"$ref_outp
1229              echo | tee $SUMMARY      if test ! -r $fout ; then
1230              echo "can't read \"$dir/results/output.txt\" -- skipping $dir" \          echo "can't read \"$fout\" -- skipping $dir"
1231                  | tee $SUMMARY          continue
1232              continue      fi
1233    
1234        # Check for specific files for particular type of run
1235    
1236        if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1237            echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1238            continue
1239        fi
1240        if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1241            echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1242            continue
1243        fi
1244        if test "x$MPI" = "xt" -a "x$MULTI_THREAD" = "xt" ; then
1245          retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/input/eedata.mth"`
1246          if test $retv != 0 ; then
1247            echo "input/eedata.mth tiling misfit -- skipping $dir"
1248            continue
1249          fi
1250        fi
1251    
1252        #  Check whether there are "extra runs" for this testdir
1253        extra_runs=
1254        if test "x$NORUN" = xf ; then
1255            ex_run_dirs=`( cd $dir ; echo $inputdir.* )`
1256        fi
1257        #echo "ex_run_dirs='$ex_run_dirs'"
1258        for exd in $ex_run_dirs ; do
1259            name=`echo $exd | sed -e "s/$inputdir\.//"`
1260            refExOut=`echo $ref_outp | sed "s/\./.${name}./"`
1261            outf="$dir/results/$refExOut"
1262            if test -f $outf -a -r $outf ; then
1263              if test "x$MULTI_THREAD" = "xt" ; then
1264                if test -r $dir"/"$exd"/eedata.mth" ; then
1265                  if test "x$MPI" = "xt" ; then
1266                    retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/"$exd"/eedata.mth"`
1267                    if test $retv = 0 ; then
1268                        extra_runs="$extra_runs $name"
1269                    else
1270                        echo $exd"/eedata.mth tiling misfit -- skipping $dir"
1271                    fi
1272                  else
1273                    extra_runs="$extra_runs $name"
1274                  fi
1275                #else echo $dir"/"$exd"/eedata.mth: not found"
1276                fi
1277              else
1278                extra_runs="$extra_runs $name"
1279              fi
1280          fi          fi
1281        done
1282    
1283        echo
1284        if test "x$extra_runs" = "x" ; then
1285           echo "Experiment:  $dir"
1286        else
1287           echo "Experiment:  $dir ; extra_runs=$extra_runs"
1288        fi
1289        echo
1290        unset genmake makedepend make run
1291        results=$EMPTY_RESULTS
1292    
1293        #  Create an output dir for each OPTFILE/tdir combination
1294        locDIR=$DRESULTS"/"$dir
1295        mkdir $locDIR
1296        CDIR=`pwd`"/$locDIR"
1297    
1298        if test "x$NORUN" = xt ; then
1299                run=N
1300          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1301              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1302                && symlink_mpifiles $dir $code_dir $builddir \
1303                && makedependmodel $dir/$builddir && makedepend=Y \
1304                && makemodel $dir/$builddir && make=Y
1305        else
1306            genmakemodel $dir/$builddir && genmake=Y \
1307                && makeclean $dir/$builddir \
1308                && symlink_mpifiles $dir $code_dir $builddir \
1309              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1310              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1311              && linkdata $seperatebuilddir $dir/$rundir \              && run_clean $dir/$rundir \
1312              && runmodel $dir/$builddir mitgcmuv && run=Y \              && linkdata $dir/$rundir $inputdir \
1313              && results=`testoutput $dir $rundir`              && runmodel $dir/$rundir && run=Y \
1314          echo              && results=`testoutput_run $dir $rundir $ref_outp`
1315          formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \      fi
1316              ${run:-N} $results      #echo "results='$results'"
         echo  
         formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \  
             ${run:-N} $results >> $SUMMARY  
         echo "fresults='" > $CDIR"/summary.txt"  
         formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \  
             ${run:-N} $results >> $CDIR"/summary.txt"  
         echo "'" >> $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"  
1317    
1318          (          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1319              cd $DRESULTS          echo 1>&2
1320              tar -cf $NDIR".tar" $DRESULTS"_"$NDIR > /dev/null 2>&1          echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1321              gzip $NDIR".tar"          touch $locDIR"/summary.txt"
1322          )          echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1323            echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1324            echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1325            echo "DATE='$DATE'" >> $locDIR"/summary.txt"
1326            echo "tdir='$dir'" >> $locDIR"/summary.txt"
1327            if test "x$ADM" = xt ; then
1328                head -1 $dir/$builddir/taf_ad.log >> $locDIR"/summary.txt"
1329                grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1330                                    >> $locDIR"/summary.txt"
1331            fi
1332    
1333            for ex in $extra_runs ; do
1334                unset run
1335                results=$EMPTY_RESULTS
1336                #  reference output file
1337                refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1338                #  Create an output dir for each OPTFILE/tdir.ex combination
1339                locDIR=$DRESULTS"/"$dir"."$ex
1340                mkdir $locDIR
1341                CDIR=`pwd`"/$locDIR"
1342                test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1343                run_clean $dir/tr_run.$ex
1344                linkdata $dir/tr_run.$ex $inputdir.$ex $inputdir
1345                runmodel $dir/tr_run.$ex && run=Y \
1346                && results=`testoutput_run $dir tr_run.$ex $refExOut`
1347                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1348                fres="$fres.$ex"
1349                echo 1>&2
1350                echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1351                touch $locDIR"/summary.txt"
1352                echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1353                echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1354                echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1355                echo "DATE='$DATE'" >> $locDIR"/summary.txt"
1356                echo "tdir='$dir.$ex'" >> $locDIR"/summary.txt"
1357                if test "x$ADM" = xt ; then
1358                    head -1 $dir/$builddir/taf_ad.log >> $locDIR"/summary.txt"
1359                    grep -A3 'Seconds in section "ALL' $dir/tr_run.$ex/$OUTPUTFILE \
1360                                       >> $locDIR"/summary.txt"
1361                fi
1362                if test "x$POSTCLEAN" = xt ; then
1363                    run_clean $dir/tr_run.$ex
1364                fi
1365            done
1366    
1367        if test -f $DRESULTS"/"genmake_state ; then : ; else
1368            if test -f $dir/$builddir/Makefile ; then
1369                mkOpt=`grep '^# OPTFILE=' $dir/$builddir/Makefile 2>/dev/null | head -1 | sed 's/^# //'`
1370                echo "from '$dir/$builddir/Makefile', extract:" > $DRESULTS/genmake_state
1371                sed -n '/^# executed by:/,+1 p' $dir/$builddir/Makefile >> $DRESULTS/genmake_state
1372                echo $mkOpt >> $DRESULTS/genmake_state
1373            fi
1374        fi
1375        #postclean $dir/$builddir
1376        if test "x$POSTCLEAN" = xt ; then
1377            makeclean $dir/$builddir \
1378                && run_clean $dir/$rundir
1379        fi
1380    
1381          $MPACK -s MITgcm-test -m 1000000 $DRESULTS"/"$NDIR".tar.gz" $ADDRESSES      echo "-------------------------------------------------------------------------------"
1382    
1383    done
1384    
1385    printf "Start time:  " >> $SUMMARY
1386    echo "$start_date" >> $SUMMARY
1387    printf "End time:    " >> $SUMMARY
1388    date >> $SUMMARY
1389    
1390    #  If addresses were supplied and mpack built successfully, then try
1391    #  to send email using mpack.
1392    if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1393        echo "No results email was sent."
1394    else
1395        if test "x$HAVE_MPACK" = xt ; then
1396            tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1397                && gzip $DRESULTS".tar" \
1398                && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1399          RETVAL=$?          RETVAL=$?
1400          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1401              echo "Warning: \"$MPACK\" failed -- please contact <edhill@mitgcm.org>"              echo
1402                echo "Warning: The tar, gzip, & mpack step failed.  Please send email"
1403                echo "  to <MITgcm-support@mitgcm.org> for help.  You may copy the "
1404                echo "  summary of results from the directory \"$DRESULTS\"."
1405                echo
1406          else          else
1407              rm -f $DRESULTS"/"$NDIR".tar*"              echo
1408                echo "An email containing results was sent to the following addresses:"
1409                echo "  \"$ADDRESSES\""
1410                echo
1411                test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"
1412                test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"
1413          fi          fi
1414        fi
1415    fi
1416    
1417          NDIR=$(( $NDIR + 1 ))  if test "x$QUICK" = xf -a "x$NORUN" = xf ; then
1418                rm -f tr_cmpnum.c tr_cmpnum
1419      done  fi
 done  
1420    
1421  rm tmp_cmpnum.f a.out  if test "x$CLEANUP" != xt ; then
1422        cat $SUMMARY | sed 's/ \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \. //'
1423        if test -e tr_out.txt ; then
1424            mv tr_out.txt tr_out.txt.old
1425        fi
1426        cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1427    fi
1428    
1429  cat $SUMMARY  if test "x$DELDIR" = xt ; then
1430        rm -rf $DRESULTS
1431    fi
1432    

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

  ViewVC Help
Powered by ViewVC 1.1.22