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

Diff of /MITgcm/verification/testreport

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

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

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

  ViewVC Help
Powered by ViewVC 1.1.22