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

Diff of /MITgcm/verification/testreport

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

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

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

  ViewVC Help
Powered by ViewVC 1.1.22