/[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.19 by edhill, Tue Nov 25 17:22:47 2003 UTC revision 1.120 by utke, Thu Jan 29 21:45:43 2009 UTC
# Line 11  usage() Line 11  usage()
11      echo      echo
12      echo "where possible OPTIONS are:"      echo "where possible OPTIONS are:"
13      echo "  (-help|-h)               print usage"      echo "  (-help|-h)               print usage"
14      echo "  (-mpi)                   use MPI input files"      echo "  (-mth)                   run multi threaded (using eedata.mth)"
15        echo "  (-mpi)                   compile and run using MPI"
16      echo "  (-ieee|-noieee)          if possible, use IEEE compiler flags"      echo "  (-ieee|-noieee)          if possible, use IEEE compiler flags"
17      echo "  (-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/.*=//' | cat -n > 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/.*=//' | cat -n > 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()
184  {  {
185      # dashnum n1 n2 n3 ...      # testoutput_run directory subdir reference_output
186      #      #
187      #  print numbers using %3i format or "--" if number = 99      #  test output from 1 run in "directory"
188    # --> same processing for adjoint & forward test
189      for num in $@ ; do          # default list of output variables to be checked:
190          if [ $num = 99 ]; then          #  1rst : main variable used to decide if it pass or FAIL
191              printf ' --'          #  others : number of matching digits to be printed in summary.txt
192          else          listChk=$DEF_CHECK_LIST
193              printf '%3i' $num          #  load experiment-specific list from file "tr_checklist" (if it exist)
194          fi          if test -r $1/$2/tr_checklist ; then listChk=`cat $1/$2/tr_checklist` ; fi
195      done          sVar=`echo $listChk | awk '{print $1}'`
196  }          # remove 1rst var and expand the list: + => min max mean s.d
197            listVar=`echo $listChk | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' \
198  testoutput()                                 | sed 's/+//g' | sed "s/^$sVar//"`
199  {          if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(I)='$listVar'" 1>&2 ; fi
200      # testoutput diretory subdir          # check for ptracer output in reference_output file :
201      #          outpref=$1/results/$3
202      #  test output in "directory"          ptr_mon="trcstat_ptracerXX_min trcstat_ptracerXX_max"
203            ptr_mon="$ptr_mon trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
204      if [ $debug -gt 0 ]; then          for ii in $PTRACERS_NUM ; do
205          echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2              ptrfound=0
206      fi              for jj in $ptr_mon ; do
207      testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2; cg2dres=$?                  name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
208      if [ $debug -gt 0 ]; then                  tst=`grep $name $outpref | wc -l | awk '{print $1}'`
209          echo testoutput: cg2dres=$cg2dres 1>&2                  if test ! "x$tst" = x0 ; then ptrfound=1 ; fi
210      fi              done
211      testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2; tmin=$?              if test $ptrfound = '1' ; then
212      testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2; tmax=$?                  eval "HAVE_PTR0"$ii"=t"
213      testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2; tmean=$?              else
214      testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2; tsd=$?                  eval "HAVE_PTR0"$ii"=f"
215      testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2; smin=$?                if test "x$ADM" = x -a "x$OADM" = x; then
216      testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2; smax=$?                # remove this ptr from the list of output variable to check
217      testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2; smean=$?                # echo "-- ptr test=" $tst "number of var=" `echo $listVar | awk '{print NF}'` 1>&2
218      testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2; ssd=$?                  listVar=`echo "$listVar" | sed "s/ pt$ii..//g"`
219      testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2; umin=$?                fi
220      testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2; umax=$?              fi
221      testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2; umean=$?          #   eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"' 1>&2
222      testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2; usd=$?          done
223      testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2; vmin=$?          tst=`echo $sVar $listVar | awk '{ for(i=2;i<=NF;i++){if($i==$1)t+=1}; print t }'`
224      testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2; vmax=$?          if test $tst != 1 ; then
225      testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2; vmean=$?            if test $tst = 0 ; then echo "==> WARNING: selected var >$sVar< not found" 1>&2
226      testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2; vsd=$?                   else echo "==> WARNING: found selected var >$sVar< $tst times" 1>&2 ; fi
227                  echo "==> WARNING: in checked list:" $listVar 1>&2
228      dashnum $cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd \          #- put it back once:
229          $umin $umax $umean $usd $vmin $vmax $vmean $vsd            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 183  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 219  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 260  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 273  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 281  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 test "x$1" = x1 ; then      if test -d $1 ; then
522          (          (
523              cd $2              cd $1 ; shift
524              files=`( cd ../input ; ls -1 | grep -v CVS )`              if test -r "../"$1"/eedata.mth" ; then
525              for i in $files ; do              # found eedata.mth in 1rst input dir and it is readable
526                  if test ! -d "../input/"$i ; then                  if test "x$MULTI_THREAD" = "xt" ; then
527                      ln -sf "../input/"$i $i                  # 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                  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              done
558          )          )
559      fi      fi
# Line 309  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 330  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 374  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 390  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    MATCH_CRIT=13
770    
771  echo -n "parsing options...  "  printf "parsing options...  "
772    
773  ac_prev=  ac_prev=
774  for ac_option ; do  for ac_option ; do
# Line 483  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 504  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 516  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            -postclean | --postclean | -pc | --pc)
858                POSTCLEAN=t ;;
859    
860          -mpi) MPI=t ;;          -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 545  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    fi
1018  DNUM=0  DNUM=0
1019  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
1020  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 575  done Line 1024  done
1024  mkdir $DRESULTS  mkdir $DRESULTS
1025  RETVAL=$?  RETVAL=$?
1026  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
1027      echo "Error: can't create results directory \"./$DRESULTS\""      echo "ERROR: Can't create results directory \"./$DRESULTS\""
1028      exit 1      exit 1
1029  fi  fi
1030  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
 echo -n "Start time:  " >> $SUMMARY  
1031  start_date=`date`  start_date=`date`
1032  echo $start_date > $SUMMARY  echo $start_date > $SUMMARY
1033  cat << EOF >> $SUMMARY  echo 'run:' $CMDLINE >> $SUMMARY
1034                  T           S           U           V  echo 'on :' $UNAMEA  >> $SUMMARY
 G D M    c        m  s        m  s        m  s        m  s  
 E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .  
 N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d  
 2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .  
   
 EOF  
   
 NDIR=0  
1035    
1036  of_path=  of_path=
1037  if test "x$OPTFILE" != xNONE ; then  if test "x$OPTFILE" != xNONE ; then
# Line 605  if test "x$OPTFILE" != xNONE ; then Line 1045  if test "x$OPTFILE" != xNONE ; then
1045          fi          fi
1046          file=${OPTFILE##*/}          file=${OPTFILE##*/}
1047          OPTFILE=$of_path/$file          OPTFILE=$of_path/$file
1048            cp $OPTFILE $DRESULTS
1049            echo >> $SUMMARY
1050            echo "  OPTFILE=$OPTFILE" >> $SUMMARY
1051      else      else
1052          echo          echo | tee $SUMMARY
1053          echo "WARNING: can't read OPTFILE=\"$OPTFILE\" but will try to use it..."          echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
1054            exit 1
1055      fi      fi
1056    else
1057        echo >> $SUMMARY
1058        echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
1059        echo "   so the genmake default will be used." >> $SUMMARY
1060  fi  fi
1061  echo  echo
 echo "OPTFILE=$OPTFILE" >> $SUMMARY  
1062  echo >> $SUMMARY  echo >> $SUMMARY
1063    if test "x$ADM" = x -a "x$OADM" = x; then
1064        if [ $MATCH_CRIT -lt 10 ] ;
1065        then line_0="default  "$MATCH_CRIT ;
1066        else line_0="default "$MATCH_CRIT ; fi
1067           line_0="$line_0  ----T-----  ----S-----  ----U-----  ----V-----"
1068    #   line_0="            ----T-----  ----S-----  ----U-----  ----V-----"
1069        line_1="G D M    c        m  s        m  s        m  s        m  s"
1070        line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
1071        line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
1072        line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
1073        for ii in $PTRACERS_NUM ; do
1074            line_0="$line_0  --PTR 0"$ii"--"
1075            line_1="$line_1        m  s"
1076            line_2="$line_2  m  m  e  ."
1077            line_3="$line_3  i  a  a  d"
1078            line_4="$line_4  n  x  n  ."
1079        done
1080        echo "$line_0" | tee -a $SUMMARY
1081        echo "$line_1" | tee -a $SUMMARY
1082        echo "$line_2" | tee -a $SUMMARY
1083        echo "$line_3" | tee -a $SUMMARY
1084        echo "$line_4" | tee -a $SUMMARY
1085        echo " "       | tee -a $SUMMARY
1086    else
1087        echo "ADJOINT=true" >> $SUMMARY
1088        echo >> $SUMMARY
1089        if [ $MATCH_CRIT -lt 10 ] ;
1090        then line_0="default     "$MATCH_CRIT ;
1091        else line_0="default    "$MATCH_CRIT ; fi
1092        echo "$line_0" | tee -a $SUMMARY
1093        cat << EOF | tee -a $SUMMARY
1094    G D M    C  G
1095    E p a R  o  r
1096    N n k u  s  a
1097    2 d e n  t  d
1098    
1099    EOF
1100    fi
1101    
1102  #  ...and each test directory...  #  ...and each test directory...
1103  for dir in $TESTDIRS ; do  for dir in $TESTDIRS ; do
1104            
1105        # set builddir & rundir:
1106        builddir="build"
1107        if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1108        rundir="run"
1109        if test ! -d $dir/$rundir ; then
1110            rundir=$builddir
1111        fi
1112        CODE_DIR=$dir/$code_dir
1113        BUILD_DIR=$dir/$builddir
1114    
1115      #  Cleanup only!      #  Cleanup only!
1116      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1117          if test -r $dir/build/Makefile ; then          if test -r $BUILD_DIR/Makefile ; then
1118              ( cd $dir/build ; make CLEAN )              echo '  ------  clean dir:' $dir/$builddir
1119                ( cd $BUILD_DIR ; make CLEAN )
1120          fi          fi
1121          if test -r $dir/input/Makefile ; then          if test -d $dir/$rundir/CVS ; then
1122              ( cd $dir/input ; make CLEAN )              echo '  ------  clean dir:' $dir/$rundir
1123                run_clean $dir/$rundir
1124          fi          fi
1125            (
1126                cd $dir
1127                rm -rf tr_run.*
1128            )
1129          continue          continue
1130      fi      fi
1131    
1132      #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
1133      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
1134      if test ! -r $dir"/results/output.txt" ; then      fout=$dir"/results/"$ref_outp
1135          echo "can't read \"$dir/results/output.txt\" -- skipping $dir"      if test ! -r $fout ; then
1136            echo "can't read \"$fout\" -- skipping $dir"
1137          continue          continue
1138      fi      fi
1139    
1140      echo "-------------------------------------------------------------------------------"      # Check for specific files for particular type of run
     echo  
     echo "Experiment:  $dir"  
     echo  
     unset genmake makedepend make run  
     results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'  
1141    
1142      builddir="input"      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1143      rundir="input"          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1144      use_seperate_build=0          continue
     if test -d $dir/build -a -r $dir/build ; then  
         builddir="build"  
         rundir="build"  
         use_seperate_build=1  
         linkdata $use_seperate_build $dir/$rundir  
     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"  
   
     #  Is this an MPI run?  
     if test "x$MPI" = xt ; then  
         FILES=$MPI_FILES  
         endings="_mpi"  
     else  
         FILES=$NOMPI_FILES  
         endings="_nompi"  
1145      fi      fi
1146            if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1147      #  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)"  
1148          continue          continue
1149      fi      fi
1150        
1151      #  If we have the $FILES and they differ, copy the $FILES to $BUILD_DIR      #  Check whether there are "extra runs" for this testdir
1152      if test "x$have_files" = xt ; then      extra_runs=
1153          for i in $FILES ; do      ex_run_dirs=`( cd $dir ; echo $inputdir.* )`
1154              sstr="s|$endings||"      #echo "ex_run_dirs='$ex_run_dirs'"
1155              name=`echo $i | sed -e $sstr `      for exd in $ex_run_dirs ; do
1156              cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1          name=`echo $exd | sed -e "s/$inputdir\.//"`
1157              RETVAL=$?          refExOut=`echo $ref_outp | sed "s/\./.${name}./"`
1158              if test "x$RETVAL" != x0 ; then          outf="$dir/results/$refExOut"
1159                  cp $CODE_DIR/$i $BUILD_DIR/$name          if test -f $outf -a -r $outf ; then
1160                if test "x$MULTI_THREAD" = "xt" ; then
1161                    if test -r $dir"/"$exd"/eedata.mth" ; then
1162                        extra_runs="$extra_runs $name"
1163                    #else echo $dir"/"$exd"/eedata.mth: not found"
1164                    fi
1165                else
1166                    extra_runs="$extra_runs $name"
1167              fi              fi
1168          done          fi
1169        done
1170    
1171        echo "-------------------------------------------------------------------------------"
1172        echo
1173        if test "x$extra_runs" = "x" ; then
1174           echo "Experiment:  $dir"
1175        else
1176           echo "Experiment:  $dir ; extra_runs=$extra_runs"
1177      fi      fi
1178            echo
1179        unset genmake makedepend make run
1180        results=$EMPTY_RESULTS
1181    
1182      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1183      CDIR=$DRESULTS"/"$DRESULTS"_"$NDIR      rel_CDIR=$DRESULTS"/"$dir
1184      mkdir $CDIR      mkdir $rel_CDIR
1185      CDIR=`pwd`"/$CDIR"      CDIR=`pwd`"/$rel_CDIR"
1186            
1187      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1188          makeclean $dir/$builddir          echo '====>>> this is to check that we never go through this part <<< ==='
1189            makeclean $dir/$builddir \
1190                && run_clean $dir/$rundir
1191      else      else
1192          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1193              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1194                && run_clean $dir/$rundir \
1195                && symlink_mpifiles $dir $code_dir $builddir \
1196              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1197              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1198              && linkdata $use_seperate_build $dir/$rundir \              && linkdata $dir/$rundir $inputdir input \
1199              && runmodel $dir/$rundir && run=Y \              && runmodel $dir/$rundir && run=Y \
1200              && results=`testoutput $dir $rundir`              && results=`testoutput_run $dir $rundir $ref_outp`
1201      fi      fi
1202            
1203      echo      echo
1204      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1205          ${run:-N} $results          echo
1206      echo          echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1207      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          touch $CDIR"/summary.txt"
1208          ${run:-N} $results >> $SUMMARY          echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1209      echo "fresults='" > $CDIR"/summary.txt"          echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1210      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1211          ${run:-N} $results >> $CDIR"/summary.txt"          echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1212      echo "'" >> $CDIR"/summary.txt"          echo "tdir='$dir'" >> $CDIR"/summary.txt"
1213      echo "MACH='$MACH'" >> $CDIR"/summary.txt"          if test "x$ADM" = xt ; then
1214      echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"              head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt"
1215      echo "DATE='$DATE'" >> $CDIR"/summary.txt"              grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1216      echo "tdir='$dir'" >> $CDIR"/summary.txt"                                  >> $CDIR"/summary.txt"
       
     (  
         cd $DRESULTS  
         tar -cf $NDIR".tar" $DRESULTS"_"$NDIR > /dev/null 2>&1  
         gzip $NDIR".tar"  
     )  
       
     if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then  
         echo "No mail sent"  
     else  
         $MPACK -s MITgcm-test -m 1000000 $DRESULTS"/"$NDIR".tar.gz" $ADDRESSES  
         RETVAL=$?  
         if test "x$RETVAL" != x0 ; then  
             echo "Warning: \"$MPACK\" failed -- please contact <edhill@mitgcm.org>"  
         else  
             rm -f $DRESULTS"/"$NDIR".tar*"  
1217          fi          fi
     fi  
1218    
1219      echo "-------------------------------------------------------------------------------"          for ex in $extra_runs ; do
1220                unset run
1221                results=$EMPTY_RESULTS
1222                #  reference output file
1223                refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1224                #  Create an output dir for each OPTFILE/tdir.ex combination
1225                rel_CDIR=$DRESULTS"/"$dir"."$ex
1226                mkdir $rel_CDIR
1227                CDIR=`pwd`"/$rel_CDIR"
1228                test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1229                run_clean $dir/tr_run.$ex
1230                linkdata $dir/tr_run.$ex $inputdir.$ex $inputdir input
1231                runmodel $dir/tr_run.$ex && run=Y \
1232                && results=`testoutput_run $dir tr_run.$ex $refExOut`
1233                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1234                fres="$fres.$ex"
1235                echo
1236                echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1237                touch $CDIR"/summary.txt"
1238                echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1239                echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1240                echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1241                echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1242                echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1243                if test "x$ADM" = xt ; then
1244                    head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt"
1245                    grep -A3 'Seconds in section "ALL' $dir/tr_run.$ex/$OUTPUTFILE \
1246                                       >> $CDIR"/summary.txt"
1247                fi
1248                if test "x$POSTCLEAN" = xt ; then
1249                    run_clean $dir/tr_run.$ex
1250                fi
1251            done
1252    
1253        #postclean $dir/$builddir
1254        if test "x$POSTCLEAN" = xt ; then
1255            makeclean $dir/$builddir \
1256                && run_clean $dir/$rundir
1257        fi
1258            
1259      NDIR=$(( $NDIR + 1 ))      echo "-------------------------------------------------------------------------------"
1260            
1261  done  done
1262    
1263  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1264  echo $start_date >> $SUMMARY  echo "$start_date" >> $SUMMARY
1265  echo -n "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
1266  date >> $SUMMARY  date >> $SUMMARY
1267    
1268  rm tmp_cmpnum.f a.out  #  If addresses were supplied and mpack built successfully, then try
1269    #  to send email using mpack.
1270    if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1271        echo "No results email was sent."
1272    else
1273        if test "x$HAVE_MPACK" = xt ; then
1274            tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1275                && gzip $DRESULTS".tar" \
1276                && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1277            RETVAL=$?
1278            if test "x$RETVAL" != x0 ; then
1279                echo
1280                echo "Warning: The tar, gzip, & mpack step failed.  Please send email"
1281                echo "  to <MITgcm-support@mitgcm.org> for help.  You may copy the "
1282                echo "  summary of results from the directory \"$DRESULTS\"."
1283                echo
1284            else
1285                echo
1286                echo "An email containing results was sent to the following addresses:"
1287                echo "  \"$ADDRESSES\""
1288                echo
1289            fi
1290            test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"
1291            test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"
1292        fi
1293    fi
1294    
1295    rm -f tr_cmpnum.c tr_cmpnum
1296    
1297  if test "x$CLEANUP" != xt ; then  if test "x$CLEANUP" != xt ; then
1298      cat $SUMMARY      cat $SUMMARY | sed 's/ \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \. //'
1299      if test -e tr.out ; then      if test -e tr_out.txt ; then
1300          mv tr.out tr.out.old          mv tr_out.txt tr_out.txt.old
1301      fi      fi
1302      cat $SUMMARY > tr.out      cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1303    fi
1304    
1305    if test "x$DELDIR" = xt ; then
1306        rm -rf $DRESULTS
1307  fi  fi
1308    

Legend:
Removed from v.1.19  
changed lines
  Added in v.1.120

  ViewVC Help
Powered by ViewVC 1.1.22