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

Diff of /MITgcm/verification/testreport

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

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

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

  ViewVC Help
Powered by ViewVC 1.1.22