/[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.9.2.8 by edhill, Sat Oct 4 02:10:52 2003 UTC revision 1.175 by jmc, Wed Aug 15 23:19:21 2012 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 "  (-mpi)                   use MPI input files"      echo "  (-mth)                   run multi-threaded (using eedata.mth)"
15      echo "  (-optfile=|-of=)STRING   list of optfiles to use"      echo "  (-mpi)                   use MPI to compile and run on 2 processors"
16      echo "  (-a|-addr)STRING         list of email recipients"      echo "  (-MPI)  NUMBER           use MPI to compile and run on max NUMBER procs"
17      echo "                             (DEF=\"edhill@mitgcm.org\")"      echo "  (-mfile|-mf) STRING      MPI: file with list of possible machines to run on"
18      echo "  (-t|-tdir)STRING         list of test dirs to use"      echo "  (-fast)                  use optfile default for compiler flags (no '-ieee')"
19      echo "                             (DEF=\"\" which builds all)"      echo "                            DEF=off => use IEEE numerics option (if available)"
20      echo "  (-b|-bash)STRING         location of \"bash\" executable"      echo "  (-devel)                 use optfile developement flags (if available)"
21      echo "                             (DEF=\"\" for \"/bin/bash\")"      echo "  (-gsl)                   compile with \"-gsl\" flag"
22      echo "  (-command)STRING         command to run"      echo "  (-use_r4|-ur4)           if allowed, use real*4 type for '_RS' variable"
23      echo "                             (DEF=\"make output.txt\")"      echo "  (-optfile|-of) STRING    list of optfiles to use"
24      echo "  (-m|-make)STRING         command to use for \"make\""      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\")"      echo "                             (DEF=\"make\")"
45      echo "  (-clean)                 *ONLY* run \"make CLEAN\""      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\""      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""
58      echo "  (-nogenmake|-ng)         skip the genmake stage"      echo "  (-nogenmake|-ng)         skip the genmake stage"
59      echo "  (-noclean|-nc)           skip the \"make clean\" stage"      echo "  (-noclean|-nc)           skip the \"make clean\" stage"
60      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"      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      echo
68      echo "and where STRING follows a whitespace-delimited format"      echo "and where STRING can be a whitespace-delimited list"
69      echo "such as:"      echo "such as:"
70        echo
71      echo "  -t 'exp0 exp2 exp3' "      echo "  -t 'exp0 exp2 exp3' "
72      echo "  -addr='abc@123.com testing@home.org'"      echo "  -addr='abc@123.com testing@home.org'"
73      echo      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
77      exit 1      exit 1
78  }  }
79    
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
94            if test "x$CC" = x ; then
95                export CC=cc
96          fi          fi
97          echo -n "building mpack...  "          printf "building mpack (using CC=$CC)...  "
98          ( cd $MPACKDIR && ./configure && $MAKE ) > build_mpack.out 2>&1          ( 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 Global"    $2 $refoutp ; yy=$? ;;
326            'HthSiS') testoutput_var $1 "thSI_IceH_ave_S" "thSIc H South"     $2 $refoutp ; yy=$? ;;
327            'HthSiN') testoutput_var $1 "thSI_IceH_ave_N" "thSIc H North"     $2 $refoutp ; yy=$? ;;
328                  *) yy=99; echo "WARNING: asking for var=$xx : not recognized !" 1>&2 ;;
329              esac
330              if test $xx = $sVar
331              then allargs="$allargs > $yy <"
332              else allargs="$allargs $yy"
333              fi
334            done
335    
336      if [ $debug -gt 0 ]; then          nbVar=`echo $listVar | awk '{print NF}'`
337          echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2          if [ $nbVar -lt $LEN_CHECK_LIST ] ; then
338      fi          #-- fill line (up to standard length) with dot:
339      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 "."}}'`
340      if [ $debug -gt 0 ]; then            echo $allargs $adNul
341          echo testoutput: cg2dres=$cg2dres 1>&2          else
342      fi            echo $allargs
343                fi
344      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  
345  }  }
346    
347  genmakemodel()  genmakemodel()
# Line 182  genmakemodel() Line 350  genmakemodel()
350      if test "x$NOGENMAKE" = xt ; then      if test "x$NOGENMAKE" = xt ; then
351          echo "genmake skipped!"          echo "genmake skipped!"
352      else      else
353          GENMAKE2="$BASH ../../../tools/genmake2"          if test "x$BASH" = x ; then
354                GENMAKE2="../../../tools/genmake2"
355            else
356                GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
357            fi
358          (          (
359              cd $1;              cd $1;
360              printf 'genmake ... ' 1>&2              command="$GENMAKE2  -ds -m $MAKE"
361              command="$GENMAKE2  -ds -m $MAKE --mods=../code"              if test "x$MKDEPEND" != x ; then
362                    command="$command -makedepend=$MKDEPEND"
363                fi
364                if test $KIND = 1 -o $KIND = 2 ; then
365                    command="$command --mods=../code_ad"
366                elif test $KIND = 4 ; then
367                    command="$command -adof ../../../tools/adjoint_options/adjoint_oad -mods '../code_oad ../../OpenAD/code_oad_all'"
368                else
369                    command="$command -mods=../code"
370                fi
371              if test "x$OPTFILE" != xNONE ; then              if test "x$OPTFILE" != xNONE ; then
372                  command="$command --optfile=$OPTFILE"                  command="$command -optfile=$OPTFILE"
373                  # echo "  command=\"$command\""              fi
374                if test $OptLev = 1 ; then
375                    command="$command -ieee"
376                fi
377                if test $OptLev = 0 ; then
378                    command="$command -devel"
379                fi
380                if test "x$GSL" = xt ; then
381                    command="$command -gsl"
382                fi
383                if test "x$MPI" != x0 ; then
384                    command="$command -mpi"
385                fi
386                if test "x$MULTI_THREAD" = xt ; then
387                #- run multi-threaded using OpenMP:
388                    command="$command -omp"
389              fi              fi
390              $command > make.log 2>&1              if test "x$USE_R4" = xt ; then
391                    command="$command -use_r4"
392                fi
393                if test "x$EXTRFLG" != x ; then
394                    command="$command -extra_flag $EXTRFLG"
395                fi
396                if test "x$TS" = xt ; then
397                    command="$command -ts"
398                fi
399                if test "x$PAPIS" = xt ; then
400                    command="$command -papis"
401                else
402                if test "x$PCLS" = xt ; then
403                    command="$command -pcls"
404                fi
405                fi
406                printf 'genmake ... '
407                eval $command > genmake.tr_log 2>&1
408              RETVAL=$?              RETVAL=$?
409              for i in genmake_state genmake_optfile genmake_local Makefile ; do              #  Reduce the size of the testing emails!
410                  if test -r $i ; then              head -100 Makefile > $CDIR/Makefile_head
                     cp $i $CDIR  
                 fi  
             done  
411              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
412                  tail make.log                  tail genmake.tr_log
413                  echo "genmakemodel: genmake failed" 1>&2                  echo "genmakemodel: genmake failed"
414                  cp make.log $CDIR                  cp genmake.log genmake_* genmake.tr_log $CDIR
415                  return 1                  return 1
416              else              else
417                  echo "succesful" 1>&2                  echo "successful"
418              fi              fi
419          )          )
420      fi      fi
# Line 213  genmakemodel() Line 423  genmakemodel()
423  makeclean()  makeclean()
424  {  {
425      # makeclean directory      # makeclean directory
426        if test "x$NODEPEND" = xf ; then rm -f $1/make.tr_log ; fi
427      if test "x$NOCLEAN" = xt ; then      if test "x$NOCLEAN" = xt ; then
428          echo "make CLEAN skipped!"          echo "make Clean skipped!"
429      else      else
430          (          (
431              cd $1;              cd $1;
432              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  
433              if test -r Makefile ; then              if test -r Makefile ; then
434                  $MAKE CLEAN >> make.log 2>&1                  printf 'clean build-dir: make Clean ... '
435                    $MAKE Clean >> make.tr_log 2>&1
436                  RETVAL=$?                  RETVAL=$?
437                  if test "x$RETVAL" != x0 ; then                  if test "x$RETVAL" != x0 ; then
438                      tail make.log                      tail make.tr_log
439                      echo "makeclean: \"make CLEAN\" failed" 1>&2                      echo "makeclean: \"make Clean\" failed"
440                      cp make.log $CDIR"/make.log"                      cp make.tr_log genmake.log genmake.tr_log $CDIR
441                      return 1                      return 1
442                  fi                  fi
443                    echo successful
444                else
445                    echo ''
446              fi              fi
447              echo succesful 1>&2              exit 0
448            )
449        fi
450    }
451    
452    run_clean()
453    {
454        # run_clean directory
455        if test "x$NOCLEAN" = xt ; then
456            echo "run_clean skipped!"
457        else
458            (
459                cd $1;
460                printf 'clean run-dir ... '
461                # part of what is done after "make clean" when doing "make CLEAN"
462                find . -name "*.meta" -exec rm {} \;
463                find . -name "*.data" -exec rm {} \;
464                find . -name "fort.*" -exec rm {} \;
465                find . -type l -exec rm {} \;
466                #- should remove executable only if sym-link (alredy done above)
467                rm -f $RUNLOG *.txt STD* w2_tile_topology.????.log *diagnostics.log datetime
468                rm -rf mnc_test_*
469                rm -f *_MIT_CE_000.opt0000 costfunction*0000
470                echo successful
471              exit 0              exit 0
472          )          )
473      fi      fi
# Line 246  makedependmodel() Line 481  makedependmodel()
481      else      else
482          (          (
483              cd $1;              cd $1;
484              printf 'make depend ... ' 1>&2              printf 'make depend ... '
485              $MAKE depend >> make.log 2>&1              $MAKE depend >> make.tr_log 2>&1
486              RETVAL=$?              RETVAL=$?
487              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
488                  tail make.log                  tail make.tr_log
489                  echo "makedependmodel: make depend failed" 1>&2                  echo "makedependmodel: make depend failed"
490                  cp make.log $CDIR"/make.log"                  cp make.tr_log genmake.log genmake.tr_log $CDIR
491                  return 1                  return 1
492              else              else
493                  echo succesful 1>&2                  echo successful
494              fi              fi
495          )          )
496      fi      fi
# Line 265  makemodel() Line 500  makemodel()
500  {  {
501      # makemodel directory      # makemodel directory
502      (      (
503        mk_fail=0
504        if test "x$NOMAKE" = xt ; then
505            cd $1;
506            if test -x $EXECUTABLE ; then
507                echo "make skipped!"
508            else
509                echo "no executable!"
510                mk_fail=3
511            fi
512        else
513          cd $1;          cd $1;
514          if test -r Makefile ; then          if test -r Makefile ; then
515              printf 'make ... ' 1>&2              printf 'make ... '
516              $MAKE >> make.log 2>&1              if test "x$REPLMAKE" = x ; then
517                    $MAKE $TARG >> make.tr_log 2>&1
518                else
519                    $REPLMAKE $TARG >> make.tr_log 2>&1
520                fi
521              RETVAL=$?              RETVAL=$?
522              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
523                  tail make.log                  tail make.tr_log
524                  echo failed 1>&2                  echo failed
525                  cp make.log $CDIR"/make.log"                  cp genmake.log genmake.tr_log $CDIR
526                  return 1                  tail -$NBLINES_MKLOG make.tr_log > $CDIR"/make.tr_log_tail"
527                    rm -f $EXECUTABLE
528                    mk_fail=1
529              else              else
530                  echo succesful 1>&2                  echo successful
531              fi              fi
532            else
533                echo "no Makefile !"
534                mk_fail=2
535          fi          fi
536        fi
537        if test $KIND = 2 -a -f taf_ad.log ; then
538                head -1 taf_ad.log >> $CDIR"/summary.txt"
539                nerr=`grep -c 'TAF *.* ERROR ' taf_ad.log`
540                nwar=`grep -c 'TAF RECOMPUTATION *.* WARNING ' taf_ad.log`
541                echo " TAF reports $nerr Errors and $nwar Recomputation Warnings" \
542                                    >> $CDIR"/summary.txt"
543        fi
544        if test $mk_fail != 0 ; then return $mk_fail ; fi
545      )      )
546  }  }
547    
548    mk_mpi_size()
549    {
550        # mk_mpi_size input_file output_file proc_Nb threads_Nb_X threads_Nb_Y
551        #
552        #  make new SIZE.h (=output_file) from SIZE.h_mpi (=input_file)
553        #     for an MPI build with no more than proc_Nb processors ;
554        #  ensure that enough tiles per proc (nSx,nSy) remain for the given
555        #     number of threads (nTx,nTy) ;
556        #  return the effective number of processors.
557    
558        inp=$1
559        out=$2
560        np=$3
561        tx=$4
562        ty=$5
563        tmp=TTT.$$
564    
565        # dirX : select with direction to favor in MPI process repartition
566        #   dirX=1 : prefer to put more proc in X direction
567        #   dirX=0 : prefer to put more proc in Y direction
568        dirX=0
569    
570        px=`grep "^     & *nPx *=" $inp | sed "s/^     & *nPx *= *//" | sed 's/, *$//'`
571        py=`grep "^     & *nPy *=" $inp | sed "s/^     & *nPy *= *//" | sed 's/, *$//'`
572        sx=`grep "^     & *nSx *=" $inp | sed "s/^     & *nSx *= *//" | sed 's/, *$//'`
573        sy=`grep "^     & *nSy *=" $inp | sed "s/^     & *nSy *= *//" | sed 's/, *$//'`
574    
575        #- for each direction, assume # of threads is a multiple of total number of tiles
576        nx=$px
577        if [ `expr $sx % $tx` -ne 0 -a `expr $sx \* $px % $tx` -eq 0 ] ; then
578            nx=`expr $sx \* $px / $tx`
579            if [ $verbose -gt 1 ]; then
580                echo " change px from $px to $nx to accommodate $tx threads"
581            fi
582        fi
583        ny=$py
584        if [ `expr $sy % $ty` -ne 0 -a `expr $sy \* $py % $ty` -eq 0 ] ; then
585            ny=`expr $sy \* $py / $ty`
586            if [ $verbose -gt 1 ]; then
587                echo " change py from $py to $ny to accommodate $ty threads"
588            fi
589        fi
590        #- find the largest divisor of input_file proc Nb, but not larger than $np
591        pp=0
592        i=1
593        while [ $i -le $nx ] ; do
594          if [ `expr $nx % $i` -eq 0 ] ; then
595            j=1
596            while [ $j -le $ny ] ; do
597              if [ `expr $ny % $j` -eq 0 ] ; then
598                ij=`expr $i \* $j`
599                if [ $ij -gt $pp ] ; then
600                    flag=1
601                elif [ $ij -eq $pp ] ; then
602                    flag=$dirX
603                else
604                    flag=0
605                fi
606                if test $flag = 1 ; then
607                  if [ $ij -le $np ] ; then
608                    ix=$i ; jy=$j ; pp=$ij
609                    #echo "  ix,jy= $ix,$jy"
610                  fi
611                fi
612              fi
613              j=`expr $j + 1`
614            done
615          fi
616          i=`expr $i + 1`
617        done
618    
619        #- create new SIZE.h type file:
620        sx=`expr $sx \* $px / $ix`
621        sy=`expr $sy \* $py / $jy`
622        if [ $verbose -gt 1 ]; then
623            echo " px,py,np= $px,$py,$np : New MPI size: px,py= $ix,$jy : sx,sy= $sx,$sy"
624        fi
625        sed "/^     \& *nPx *=/s/[0-9]*,/$ix,/" $inp > $tmp
626        sed "/^     \& *nPy *=/s/[0-9]*,/$jy,/" $tmp > $out
627        sed "/^     \& *nSx *=/s/[0-9]*,/$sx,/" $out > $tmp
628        sed "/^     \& *nSy *=/s/[0-9]*,/$sy,/" $tmp > $out
629        rm -f $tmp
630        return $pp
631    }
632    
633    symlink_mpifiles()
634    {
635        # Put special links so that MPI specific files are used
636        # This MUST be invoked between makeclean and makelinks because
637        # the Makefile will link to non-mpi files by default
638    
639        dir=$1
640        code_dir=$2
641        build_dir=$dir/$3
642    
643        # These are files that should replace their counter-part when using -mpi
644        MPI_FILES=`(cd $dir/$code_dir; find . -name "*_mpi" -print)`
645    
646        for ii in $MPI_FILES ; do
647            i=`echo $ii | sed 's:^\./::'`
648            name=`echo $i | sed 's:_mpi::'`
649            file="../$code_dir/$i"
650            if test $name = 'SIZE.h' ; then file="SIZE.h.mpi" ; fi
651    
652            #  Is this an MPI run?
653            if test "x$MPI" = x0 ; then
654                # NO: We undo any _mpi symbolically linked files
655                if test -L $build_dir/$name ; then
656                    ( cd $build_dir ; cmp $name $file > /dev/null 2>&1 )
657                    RETVAL=$?
658                    if test "x$RETVAL" = x0 ; then
659                        if [ $verbose -gt 1 ]; then
660                            echo "  Un-linking $name from ../$code_dir" ; fi
661                        rm -f $build_dir/$name
662                    fi
663                fi
664            else
665                # YES: We symbolically link these files to the build
666                # dir so long as there is no real file in place
667                ( cd $build_dir ; cmp $name $file > /dev/null 2>&1 )
668                RETVAL=$?
669                if [ $verbose -gt 1 ]; then echo "  cmp $name $file returns: $RETVAL" ; fi
670                if test "x$RETVAL" != x0 ; then
671                    if test -h $build_dir/$name ; then rm -f $build_dir/$name ; fi
672                    if test ! -r $build_dir/$name ; then
673                        if [ $verbose -gt 1 ]; then echo "  Linking $name to $file" ; fi
674                        (cd $build_dir; ln -sf $file $name)
675                    fi
676                fi
677            fi
678        done
679    }
680    
681  linkdata()  linkdata()
682  {  {
683      # linkdata flag      # linkdata run_dir input_dir_1 input_dir_2 ...
684      #      #
685      # symbolically link data files to run directory      # symbolically link data files to run directory
686      if [ $1 -ne 0 ]; then      if test -d $1 ; then
687          ( cd $2 ;  ln -sf ../input/* . )          (
688                cd $1 ; shift
689                echo 'linkdata from dirs:' $*
690                inpMPI=`(cd ../$1 ; find . -name "*.mpi" -print | sed 's:^\./::')`
691                for xx in $inpMPI ; do
692                  if test -r "../"$1"/"$xx ; then
693                    # found 1 _mpi sfx file in 1rst input dir and it is readable
694                    yy=`echo $xx | sed 's:\.mpi$::'`
695                    if test "x$MPI" = "x0" ; then
696                        # not mpi test: remove symbolic link
697                        if test -h $yy ; then rm -f $yy ; fi
698                    else
699                        # mpi test: remove symbolic link & link .mpi sfx file
700                        if test -h $yy ; then rm -f $yy ; fi
701                        if test ! -r $yy ; then
702                            ln -sf "../"$1"/"$xx $yy ;
703                            printf " $xx" 1>&2
704                        fi
705                    fi
706                  fi
707                done
708                if test -r "../"$1"/eedata.mth" ; then
709                # found eedata.mth in 1rst input dir and it is readable
710                    if test "x$MULTI_THREAD" = "xt" ; then
711                    # multi-threaded test: remove symbolic link & link eedata.mth
712                        if test -h eedata ; then rm -f eedata ; fi
713                        if test ! -r eedata ; then
714                            ln -sf "../"$1"/eedata.mth" eedata ;
715                            printf ' eedata.mth' 1>&2
716                        fi
717                    else
718                    # not multi-threaded test: remove eedata symbolic link
719                        if test -h eedata ; then rm -f eedata ; fi
720                    fi
721                fi
722                prevDir='NONE'
723                for ldir in $* ; do
724                    if test -d "../"$ldir -a $ldir != $prevDir ; then
725                        printf " ldir=${ldir}:" 1>&2
726                        files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
727                        for i in $files ; do
728                            if test ! -d "../"$ldir/$i ; then
729                                if test ! -r $i  ; then
730                                    printf ' '$i 1>&2
731                                    ln -sf "../"$ldir"/"$i $i
732                                fi
733                            fi
734                        done
735                        printf ' ;' 1>&2
736                        if test -x "../"$ldir"/"prepare_run ; then
737                            "../"$ldir"/"prepare_run 1>&2
738                        else
739                            echo '' 1>&2
740                        fi
741                    fi
742                    prevDir=$ldir
743                done
744            )
745      fi      fi
746  }  }
747    
# Line 296  runmodel() Line 749  runmodel()
749  {  {
750      # runmodel directory      # runmodel directory
751      #      #
752      #  runs "$COMMAND" in "directory"      #  runs $COMMAND in "directory"
753      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
754      (      (
755          cd $1          cd $1
756          printf 'runmodel: ' 1>&2          printf 'runmodel in %s ... ' $1
757          # make output.txt          if test "x$MPI" != x0 ; then
758          $COMMAND              #- adjust the MPI run command with the right number of Procs
759          RETVAL=$?              #echo '' ; echo "  COMMAND='$COMMAND'"
760          if test "x$RETVAL" = x0 ; then              COMMAND=`echo $COMMAND | sed "s/ TR_NPROC / $LOC_NPROC /"`
761              cp output.txt $CDIR"/output.txt"              if test "x$MPI_MFILE" != x ; then
762                  COMMAND=`echo $COMMAND | sed "s/ TR_MFILE / ..\/..\/$LOC_MFILE /"`
763                fi
764                #echo "  COMMAND='$COMMAND'"
765            fi
766            if test -L $EXECUTABLE ; then
767              if test -x "../"$builddir"/"$EXECUTABLE ; then
768                cmp $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
769                outD=$? ; if test "x$outD" != x0 ; then rm -f $EXECUTABLE ; fi
770              else rm -f $EXECUTABLE
771              fi
772            fi
773            if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
774                echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_tmp
775                ln -sf "../"$builddir"/"$EXECUTABLE .
776            fi
777            if test ! -x $EXECUTABLE ; then
778                rm -f $RUNLOG ; touch $RUNLOG
779                if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
780                echo " no executable:" $EXECUTABLE >> $RUNLOG
781                RETVAL=8
782                ENDVAL=-1
783            else
784              if test ! -f $OUTPUTFILE -o $OUTPUTFILE -ot $EXECUTABLE ; then
785                # output do not exist or is older than executable:
786                rm -f $OUTPUTFILE $RUNLOG ; touch $RUNLOG
787                if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
788                ( eval $COMMAND ) >> $RUNLOG 2>&1
789                RETVAL=$?
790                ENDVAL=`tail $OUTPUTFILE | grep -c 'PROGRAM MAIN: Execution ended Normally'`
791                if [ $POSTCLEAN -eq 1 -a $ENDVAL -gt 0 ] ; then
792                    find . -name "*.meta" -exec rm {} \;
793                    find . -name "*.data" -exec rm {} \;
794                    rm -rf mnc_test_*
795                fi
796              else
797                RETVAL=0
798                ENDVAL=`tail $OUTPUTFILE | grep -c 'PROGRAM MAIN: Execution ended Normally'`
799                touch $RUNLOG
800                if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
801                echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
802              fi
803            fi
804            rm -f run.log_tmp
805            #- in all cases where OutputFile exists, report SIZE (and AD time)
806            if test -f $OUTPUTFILE ; then
807              grep '(PID\.TID 0000\.0001)      n.. =' $OUTPUTFILE \
808                    | sed 's/(PID.TID 0000.0001)     //' >> $CDIR"/summary.txt"
809              if test $KIND = 2 ; then
810                grep -A3 'Seconds in section "ALL' $OUTPUTFILE >> $CDIR"/summary.txt"
811              fi
812            fi
813            if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
814            if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
815                echo successful
816                printf '=> output from running in %s :\n' $1 1>&2
817                tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
818                return 0
819            elif [ $RETVAL -ne 0 -a $ENDVAL -gt 0 ] ; then
820                #-- for some weird cases (run is finihed but with error code)
821                echo 'finished with error (run:' $RETVAL ' end:' $ENDVAL ')'
822                printf '=> output from running in %s :\n' $1 1>&2
823                tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
824              return 0              return 0
825          else          else
826                echo 'failed (run:' $RETVAL ' end:' $ENDVAL ')'
827                printf '=> output from running in %s :\n' $1 1>&2
828                tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
829                cp $RUNLOG $CDIR"/"$RUNLOG
830              return 1              return 1
831          fi          fi
832      )      )
# Line 317  createcodelet() Line 836  createcodelet()
836  {  {
837      # create codelet for comparing model output      # create codelet for comparing model output
838    
839      echo -n "creating the comparison code...  "      printf "creating the comparison code (using CC=$CC)...  "
840      cat > tmp_cmpnum.f <<EOFA      cat > tr_cmpnum.c <<EOF
841        program cmpnum  #include <stdio.h>
842        implicit none  #include <math.h>
843        real*8 a,b,diff  int main( int argc, char** argv )  {
844        integer linnum,best    int linnum,cmplin,best,lncnt;
845        best=-16    double a,b,abave,relerr;
846    99  read(*,*,end=70,err=60) linnum,a,b    best = -22;
847        diff=0.5*(abs(a)+abs(b))    lncnt = 0;
848  c     print *,a,b,diff,abs(a-b)/diff    while( 1 & ( (lncnt+=1) < 999 ) )  {
849        if (diff.gt.1.e-12) then      scanf("%d", &linnum);
850          diff=abs(a-b)/diff      if (linnum == -1)  break;
851          if (diff.gt.0.) then      scanf("%lf", &a);  scanf("%lf", &b);
852  c         print *,int(log10(diff)),diff      abave = 0.5*(fabs(a)+fabs(b));
853            linnum=int(log10(diff))      if ( abave == abave ) {
854            best=max(best,linnum)        if (abave > 0.0) {
855          endif          relerr=fabs(a-b)/abave;
856        else          if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
857          if (best.eq.-16.and.diff.ne.0.) best=-22          else { cmplin = -16 ; }
858        endif          best = (best > cmplin) ? best : cmplin; }
859        goto 99        else { cmplin = -22 ; }
860    60  stop 'cmpnum: An error occured reading a,b'     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
861    70  print *,-best        }
862        end     else {
863  EOFA     /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
864          break; }
865      }
866      if (lncnt == 999) best=-29;
867      if (linnum != -1) best=-99;
868      printf("%d\n", -best);
869      return 0;
870    }
871    EOF
872        $CC -o tr_cmpnum tr_cmpnum.c -lm
873    
874      f77 tmp_cmpnum.f      if [ -x ./tr_cmpnum ]; then
     if [ -x ./a.out ]; then  
875          echo "OK"          echo "OK"
876          return 0          return 0
877      else      else
878          echo          echo
879          echo "createcodelet: failed to compile codelet"          echo "ERROR: failed to compile comparison code -- please specify"
880            echo "  a C compiler using the CC environment variable."
881          exit 1          exit 1
882      fi      fi
883  }  }
# Line 361  formatresults() Line 889  formatresults()
889      nm=$1      nm=$1
890      printf '%s %s %s %s' $2 $3 $4 $5      printf '%s %s %s %s' $2 $3 $4 $5
891      shift; shift; shift; shift; shift;      shift; shift; shift; shift; shift;
892      printf '%3s' $@      listPrt=$@
893            listRes=`echo $listPrt | sed 's/>//' | sed 's/<//'`
894      if [ $1 = '--' ]; then      xx=`echo $listPrt | sed 's/.*>//' | sed 's/<.*//' | awk '{print $1}'`
895        printf '%3s' $listPrt
896    #   line below does not work on hp-ux_ia64 : do those substitutions later on
897    #   printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</'
898    
899        if [ $xx = '..' ]; then
900            printf ' N/O '
901        elif [ $xx = '--' ]; then
902            printf ' N/O '
903        elif [ $xx = 99 ]; then
904          printf ' N/O '          printf ' N/O '
905      else      else
906          if [ $1 -gt 12 ]; then          if [ $xx -ge $MATCH_CRIT ]; then
907              printf ' pass'              printf ' pass'
908          else          else
909              printf ' FAIL'              printf ' FAIL'
# Line 374  formatresults() Line 911  formatresults()
911      fi      fi
912      printf '  %s' $nm      printf '  %s' $nm
913      printf '\n'      printf '\n'
       
 }  
   
 show_help()  
 {  
     cat - << EOF  
 $0 [-help] [-quick] [-verbose] dir1 [dir2] [...]  
   
  -help|-h      Show this help message  
  -quiet     Reduce the amount of output  
  -verbose   Produce copious amounts of output  
  -debug     Produce even more output which will mean nothing to most  
  -force     Do "make CLEAN" before compiling. This forces a complete rebuild.  
  -clean     Do "make CLEAN" after compiling and testing.  
  -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.  
914    
 Normal usage:  
  $0 *       Configure, compile, run and analyze in all experiment directories  
 EOF  
915  }  }
916    
917  scandirs()  scandirs()
918  {  {
919      if [ $# -eq 0 ]; then      if [ $# -eq 1 ]; then
920          for arg in * ; do          for arg in * ; do
921              test -d $arg/input && echo $arg             #test -f $arg/$1 && echo $arg
922          done              test -f $arg/$1 -o -f $arg/$1.gz && echo $arg
923            done
924      else      else
925          echo $*          echo $*
926      fi      fi
927  }  }
928    
929    
930  ###############################################################################  check_eedata()
931  ###############################################################################  {
932        # check_eedata eedata size.h
933        if [ $# -eq 2 ] ; then
934         if test -f $1 -a -f $2 ; then
935          nx=`grep "^ *nTx *=" $1 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
936          sx=`grep "^     & *nSx *=" $2 | sed "s/^     & *nSx *=//" | sed 's/, *$//'`
937          if test "x$nx" = x ; then
938            rx=10
939          else
940            rx=`expr $sx % $nx`
941          fi
942          ny=`grep "^ *nTy *=" $1 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
943          sy=`grep "^     & *nSy *=" $2 | sed "s/^     & *nSy *=//" | sed 's/, *$//'`
944          if test "x$ny" = x ; then
945            ry=20
946          else
947            ry=`expr $sy % $ny`
948          fi
949          echo `expr $rx + $ry`
950         else
951          echo '-1'
952         fi
953        elif [ $# -eq 1 ] ; then
954         if test -f $1 ; then
955          nx=`grep "^ *nTx *=" $1 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
956          if test "x$nx" = x ; then nx=1 ; fi
957          ny=`grep "^ *nTy *=" $1 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
958          if test "x$ny" = x ; then ny=1 ; fi
959         #echo $nx $ny
960          echo $nx
961         else
962          echo '-1'
963         fi
964        else
965          echo '-2'
966        fi
967    
968    }
969    
970  ###############################################################################  ###############################################################################
971    
972    
973  #  Default properties  #  Default properties
974  debug=0  debug=0
975  verbose=1  verbose=1
976  clean=0  NBLINES_MKLOG=16000
977  expts=''  
978  # ieee=1  OptLev=1
979    GSL=f
980    
981  CLEANUP=f  CLEANUP=f
982    NORUN=f
983  QUICK=f  QUICK=f
984    NOMAKE=f
985  NOGENMAKE=f  NOGENMAKE=f
986  NOCLEAN=f  NOCLEAN=f
987  NODEPEND=f  NODEPEND=f
988    POSTCLEAN=0
989    
990  BASH=  BASH=
991  OPTFILE=NONE  OPTFILE=NONE
992  ADDRESSES=  ADDRESSES=
993  TESTDIRS=  TESTDIRS=
994    SKIPDIRS=
995  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
996  MPACK="$MPACKDIR/mpack"  HAVE_MPACK=
997  COMMAND="make output.txt"  MPACK=
998  MAKE=make  COMMAND=
999  MPI=f  MKDEPEND=
1000    if test "x$MAKE" = x ; then
1001        MAKE=make
1002    fi
1003    REPLMAKE=
1004    if test "x$CC" = x ; then
1005        CC=cc
1006    fi
1007    JOBS=
1008    TARG=
1009    MPI=0
1010    MPI_MFILE=
1011    MULTI_THREAD=f
1012    OUTDIR=
1013    DELDIR=
1014    USE_R4=
1015    EXTRFLG=
1016    
1017    #- type of testing (KIND):
1018    #   KIND=0 : forward (= default) ;  KIND=1 : Tangent Linear with TAF ;
1019    #   KIND=2 : Adjoint with TAF ;     KIND=4 : Adjoint with OpenAD
1020    KIND=0
1021    
1022    # list of pTracers to check for monitor output
1023    PTRACERS_NUM="1 2 3 4 5"
1024    
1025  echo -n "parsing options...  "  MATCH_CRIT=10
1026    
1027    printf "parsing options...  "
1028    
1029  ac_prev=  ac_prev=
1030  for ac_option ; do  for ac_option ; do
# Line 450  for ac_option ; do Line 1037  for ac_option ; do
1037      fi      fi
1038    
1039      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
1040        
1041      case $ac_option in      case $ac_option in
1042                    
1043          -help | --help | -h | --h)          -help | --help | -h | --h) usage ;;
1044              usage ;;  
1045                    -optfile | --optfile | -of | --of) ac_prev=OPTFILE ;;
1046          -optfile | --optfile | -of | --of)          -optfile=* | --optfile=* | -of=* | --of=*) OPTFILE=$ac_optarg ;;
1047              ac_prev=OPTFILE ;;  
1048          -optfile=* | --optfile=* | -of=* | --of=*)          -addr | --addr | -a | --a) ac_prev=ADDRESSES ;;
1049              OPTFILE=$ac_optarg ;;          -addr=* | --addr=* | -a=* | --a=*) ADDRESSES=$ac_optarg ;;
1050                    -mpackdir | --mpackdir | -mpd | --mpd) ac_prev=MPACKDIR ;;
1051          -addr | --addr | -a | --a)          -mpackdir=* | --mpackdir=* | -mpd=* | --mpd=*) MPACKDIR=$ac_optarg ;;
1052              ac_prev=ADDRESSES ;;  
1053          -addr=* | --addr=*)          -tdir | --tdir | -t | --t) ac_prev=TESTDIRS ;;
1054              ADDRESSES=$ac_optarg ;;          -tdir=* | --tdir=* | -t=* | --t=*) TESTDIRS=$ac_optarg ;;
1055            -skipdir | --skipdir | -skd | --skd) ac_prev=SKIPDIRS ;;
1056          -tdir | --tdir | -t | --t)          -skipdir=* | --skipdir=* | -skd=* | --skd=*) SKIPDIRS=$ac_optarg ;;
1057              ac_prev=TESTDIRS ;;  
1058          -tdir=* | --tdir=*)          -bash | --bash | -b | --b) ac_prev=BASH ;;
1059              TESTDIRS=$ac_optarg ;;          -bash=* | --bash=* | -b=* | --b=*) BASH=$ac_optarg ;;
1060    
1061          -bash | --bash | -b | --b)          -command | --command | -c | --c) ac_prev=COMMAND ;;
1062              ac_prev=BASH ;;          -command=* | --command=* | -c=* | --c=*) COMMAND=$ac_optarg ;;
1063          -bash=* | --bash=*)  
1064              BASH=$ac_optarg ;;          -makedepend | --makedepend | -md | --md) ac_prev=MKDEPEND ;;
1065            -makedepend=* | --makedepend=* | -md=* | --md=*) MKDEPEND=$ac_optarg ;;
1066          -command | --command | -c | --c)  
1067              ac_prev=COMMAND ;;          -make | --make | -m | --m) ac_prev=MAKE ;;
1068          -command=* | --command=*)          -make=* | --make=* | -m=* | --m=*) MAKE=$ac_optarg ;;
1069              COMMAND=$ac_optarg ;;  
1070            -repl_mk | --repl_mk ) ac_prev=REPLMAKE ;;
1071          -make | --make | -m | --m)          -repl_mk=* | --repl_mk=*) REPLMAKE=$ac_optarg ;;
1072              ac_prev=MAKE ;;  
1073          -make=* | --make=*)          -odir | --odir) ac_prev=OUTDIR ;;
1074              MAKE=$ac_optarg ;;          -odir=* | --odir=*) OUTDIR=$ac_optarg ;;
1075    
1076          -clean | --clean)          -ptracers | --ptracers | -ptr | --ptr) ac_prev=PTRACERS_NUM ;;
1077              CLEANUP=t ;;          -ptracers=* | --ptracers=* | -ptr=* | --ptr=*) PTRACERS_NUM=$ac_optarg ;;
1078    
1079          -quick | --quick | -q | --q)          -match | --match ) ac_prev=MATCH_CRIT ;;
1080              QUICK=t ;;          -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
1081          -nogenmake | --nogenmake | -ng | --ng)  
1082              NOGENMAKE=t ;;          -j | --j) ac_prev=JOBS ;;
1083          -noclean | --noclean | -nc | --nc)          -j=* | --j=*) JOBS=$ac_optarg ;;
1084              NOCLEAN=t ;;  
1085          -nodepend | --nodepend | -nd | --nd)          -ef | --ef) ac_prev=EXTRFLG ;;
1086              NODEPEND=t ;;          -ef=* | --ef=*) EXTRFLG=$ac_optarg ;;
1087    
1088            -clean | --clean) CLEANUP=t ; DELDIR=t ;;
1089    
1090            -norun | --norun | -nr | --nr) NORUN=t ;;
1091            -obj | --obj ) TARG='obj' ; NORUN=t ;;
1092            -runonly | --runonly | -ro | --ro) QUICK=t ; NOMAKE=t ;;
1093            -quick | --quick | -q | --q) QUICK=t ;;
1094            -nogenmake | --nogenmake | -ng | --ng) NOGENMAKE=t ;;
1095            -noclean | --noclean | -nc | --nc) NOCLEAN=t ;;
1096            -nodepend | --nodepend | -nd | --nd) NODEPEND=t ;;
1097    
1098            -postclean | --postclean | -pc | --pc) POSTCLEAN=2 ;;
1099            -deloutp | --deloutp | -do | --do) POSTCLEAN=1 ;;
1100    
1101            -mpi | --mpi) MPI=2 ;;
1102            -MPI | --MPI) ac_prev=MPI ;;
1103            -MPI=* | --MPI=*) MPI=$ac_optarg ;;
1104    
1105            -mfile | --mfile | -mf | --mf) ac_prev=MPI_MFILE ;;
1106            -mfile=* | --mfile=* | -mf=* | --mf=*) MPI_MFILE=$ac_optarg ;;
1107    
1108            -mth) MULTI_THREAD=t ;;
1109    
1110            -tlm) if test $KIND = 0 ; then KIND=1 ; else
1111                    echo "Error: '-tlm', '-adm' and '-oad' are exclusive" ; usage
1112                  fi ;;
1113            -adm | -ad) if test $KIND = 0 ; then KIND=2 ; else
1114                    echo "Error: '-tlm', '-adm' and '-oad' are exclusive" ; usage
1115                  fi ;;
1116            -oad) if test $KIND = 0 ; then KIND=4 ; NODEPEND=t ; else
1117                    echo "Error: '-tlm', '-adm' and '-oad' are exclusive" ; usage
1118                  fi ;;
1119    
1120            -ieee)   echo "Warning: ignore option '-ieee' (already the default)"
1121                     printf " ... " ;;
1122            -noieee) echo "Warning: will use option '-fast' instead of '-noieee' (obsolete)"
1123                     printf " ... " ; OptLev=`expr $OptLev \* 2` ;;
1124            -fast)  OptLev=`expr $OptLev \* 2` ;;
1125            -devel) OptLev=0 ;;
1126            -gsl) GSL=t ;;
1127    
         -mpi) MPI=t ;;  
1128          -verbose) verbose=2 ;;          -verbose) verbose=2 ;;
1129          -debug) debug=1 ;;          -debug) debug=1 ;;
1130          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
1131    
1132          -*)          -deldir | -dd) DELDIR=t ;;
1133              echo "Error: unrecognized option: "$ac_option  
1134              usage          -use_r4|-ur4) USE_R4=t ;;
1135              ;;  
1136                    -ts) TS=t;;
1137          *)          -papis) PAPIS=t;;
1138              echo "Error: unrecognized argument: "$ac_option          -pcls) PCL=t;;
1139              usage  
1140              ;;          -*) echo "Error: unrecognized option: "$ac_option
1141                        usage ;;
1142            *)  echo "Error: unrecognized argument: "$ac_option
1143                usage ;;
1144    
1145       esac       esac
1146        
1147  done  done
1148    
1149  if test "x$QUICK" = xt ; then  if test "x$QUICK" = xt ; then
# Line 523  if test "x$QUICK" = xt ; then Line 1152  if test "x$QUICK" = xt ; then
1152      NODEPEND=t      NODEPEND=t
1153  fi  fi
1154    
1155    #- check length of MPI machine file:
1156    if test "x$MPI" != x0 -a "x$MPI_MFILE" != x ; then
1157        if test -r $MPI_MFILE ; then
1158            nl=`wc -l $MPI_MFILE | awk '{print $1}'`
1159            if [ $nl -lt $MPI ] ; then
1160              echo "Error: need at least $MPI nodes (currently only $nl) in MPI_MFILE=$MPI_FILE"
1161              usage
1162            fi
1163            if [ $verbose -gt 1 ]; then
1164                echo " MPI_MFILE=$MPI_MFILE : $nl procs for MPI=$MPI run"
1165            fi
1166        else
1167              echo "Error: cannot access MPI_MFILE=$MPI_FILE"
1168              usage
1169        fi
1170    fi
1171    
1172    #- setting for forward or ADM testing
1173    if test $KIND = 1 ; then
1174        TARG=ftlall
1175        code_dir=code_ad
1176        inputdir=input_ad
1177        ref_outp="output_tlm.txt"
1178        EXECUTABLE="mitgcmuv_ftl"
1179    elif test $KIND = 2 ; then
1180        if test "x$TARG" = xobj ; then TARG=adobj ; else TARG=adall ; fi
1181        code_dir=code_ad
1182        inputdir=input_ad
1183        ref_outp="output_adm.txt"
1184        EXECUTABLE="mitgcmuv_ad"
1185    elif test $KIND = 4 ; then
1186        TARG=adAll
1187        code_dir=code_oad
1188        inputdir=input_oad
1189        ref_outp="output_oadm.txt"
1190        EXECUTABLE="mitgcmuv_ad"
1191    else
1192        if test "x$JOBS" != x ; then TARG="-j $JOBS $TARG" ; fi
1193        code_dir=code
1194        inputdir=input
1195        ref_outp="output.txt"
1196        EXECUTABLE="mitgcmuv"
1197    fi
1198    
1199    xx=`echo $TESTDIRS | awk '{print $1}'`
1200  if test "x$TESTDIRS" = x ; then  if test "x$TESTDIRS" = x ; then
1201      TESTDIRS=`scandirs`      LIST=`scandirs results/$ref_outp`
1202    elif test $xx = 'start_from' ; then
1203        xx=`echo $TESTDIRS | awk '{print $2}'`
1204        LIST=`scandirs results/$ref_outp | sed -n "/$xx/,$ p"`
1205    else
1206        #- expand group of experiments:
1207        LIST=" "
1208        for xx in $TESTDIRS
1209        do
1210          case $xx in
1211            'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
1212                     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
1213                     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
1214                    ;;
1215            'tutorials')
1216                     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
1217            *)       LIST=${LIST}" "$xx ;;
1218          esac
1219        done
1220  fi  fi
1221    #echo 'LIST='${LIST}'<'
1222    #- skip dirs, remove duplicate and non-directory:
1223    TESTDIRS=" "
1224    count=0
1225    for xx in $LIST
1226    do
1227        yy=`echo $SKIPDIRS | grep -c $xx`
1228        if test $yy = 0 ; then
1229            if test -d $xx ; then
1230                yy=`echo $TESTDIRS | grep -c $xx`
1231                if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
1232            else count=1 ;
1233                echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
1234            fi
1235        else
1236            if test $count = 1 ; then echo -n ", \"$xx\""
1237            else count=1 ; echo "" ;  echo -n " skip: \"$xx\""
1238            fi
1239        fi
1240    done
1241    if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
1242    #echo 'TESTDIRS='${TESTDIRS}'<'
1243    
1244  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
1245      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
1246  fi  fi
1247    
1248  echo "OK"  LOC_MFILE='tr_mpi_mfile'
1249    RUNLOG="run.tr_log"
1250    OUTPUTFILE=$ref_outp
1251    if test "x$COMMAND" = x ; then
1252        COMMAND="./$EXECUTABLE > $OUTPUTFILE"
1253    fi
1254    if test "x$MPI" != x0 ; then
1255        OUTPUTFILE="STDOUT.0000"
1256    fi
1257    
1258    echo "OK (COMMAND= $COMMAND )"
1259    
1260    # set the Default List of output variables to be checked:
1261    #  (use default or load experiment-specific list from file "tr_checklist")
1262    # content : 1rst = main variable used to decide if it pass or FAIL
1263    #         others = number of matching digits to be printed in summary.txt
1264    if test $KIND = 1 ; then
1265        DEF_CHECK_LIST='tlmGrd tlmCst tlmGrd fwdGrd'
1266        EMPTY_RESULTS='.. .. ..'
1267        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1268    elif test $KIND = 2 -o $KIND = 4 ; then
1269        DEF_CHECK_LIST='AdGrd Cost AdGrd FDGrd'
1270        EMPTY_RESULTS='.. .. ..'
1271        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1272    else
1273        DEF_CHECK_LIST='PS PS T+ S+ U+ V+ pt1+ pt2+ pt3+ pt4+ pt5+'
1274        EMPTY_RESULTS='.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..'
1275        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1276        ii=`echo $EMPTY_RESULTS | awk '{print NF}'`
1277        EMPTY_RESULTS=$EMPTY_RESULTS`expr $LEN_CHECK_LIST - $ii | awk 'BEGIN{FS=":"}{for(i=1;i<=$1;i++){printf "  ."}}'`
1278    fi
1279    
1280  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
1281  createcodelet  if test -x tr_cmpnum ; then
1282        echo "skipping comparison code build"
1283    else
1284        createcodelet
1285    fi
1286    
1287  #  build the mpack utility  #  build the mpack utility (if ADDRESSES = NONE, do it to test the build)
1288  build_mpack  if test "x$ADDRESSES" = x ; then
1289        echo "skipping mpack build"
1290    else
1291        build_mpack
1292    fi
1293    
1294  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
1295    CMDLINE=$0
1296    for xx in "$@" ; do nw=`echo $xx | wc -w`
1297        if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
1298                            else CMDLINE="$CMDLINE '$xx'" ; fi
1299    done
1300    #for xx in "$@" ; do CMDLINE="$CMDLINE '$xx'" ; done
1301  MACH=`hostname`  MACH=`hostname`
1302  UNAMEA=`uname -a`  UNAMEA=`uname -a`
1303  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
1304  BASE=$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
1305    if test "x$OUTDIR" != x ; then
1306        BASE="tr_"$OUTDIR"_"$DATE"_"
1307    else
1308        short_name=`hostname | sed 's/\..*$//'`
1309        BASE="tr_"$short_name"_"$DATE"_"
1310    fi
1311  DNUM=0  DNUM=0
1312  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
1313  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 553  done Line 1317  done
1317  mkdir $DRESULTS  mkdir $DRESULTS
1318  RETVAL=$?  RETVAL=$?
1319  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
1320      echo "Error: can't create results directory \"./$DRESULTS\""      echo "ERROR: Can't create results directory \"./$DRESULTS\""
1321      exit 1      exit 1
1322  fi  fi
1323  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
1324  date > $SUMMARY  start_date=`date`
1325  cat << EOF >> $SUMMARY  echo $start_date > $SUMMARY
1326                  T           S           U           V  echo 'run:' $CMDLINE >> $SUMMARY
1327  G D M    c        m  s        m  s        m  s        m  s  echo 'on :' $UNAMEA  >> $SUMMARY
 E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .  
 N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d  
 2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .  
   
 EOF  
   
 NDIR=0  
1328    
1329    of_path=
1330  if test "x$OPTFILE" != xNONE ; then  if test "x$OPTFILE" != xNONE ; then
1331      if test -r $OPTFILE ; then      if test -r $OPTFILE ; then
1332          OPTFILE=`pwd`"/$OPTFILE"          # get the path
1333            path=${OPTFILE%/*}
1334            if test "x$path" = x ; then
1335                of_path=`pwd`
1336            else
1337                of_path=`( cd $path > /dev/null 2>&1 ; pwd )`
1338            fi
1339            file=${OPTFILE##*/}
1340            OPTFILE=$of_path/$file
1341            cp $OPTFILE $DRESULTS
1342            echo >> $SUMMARY
1343            echo "  OPTFILE=$OPTFILE" >> $SUMMARY
1344        else
1345            echo | tee $SUMMARY
1346            echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
1347            exit 1
1348      fi      fi
1349    else
1350        echo >> $SUMMARY
1351        echo "No \"OPTFILE\" was specified ; genmake2 found and uses:" >> $SUMMARY
1352        #-note: to be filled later after 1rst run
1353  fi  fi
1354  echo  echo
 echo "OPTFILE=$OPTFILE" >> $SUMMARY  
1355  echo >> $SUMMARY  echo >> $SUMMARY
1356    if test $KIND = 0 ; then
1357        line_0=`printf '%s %2i' 'default' $MATCH_CRIT`
1358           line_0="$line_0  ----T-----  ----S-----  ----U-----  ----V-----"
1359        line_1="G D M    c        m  s        m  s        m  s        m  s"
1360        line_2="e p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
1361        line_3="n n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
1362        line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
1363        for ii in $PTRACERS_NUM ; do
1364            line_0="$line_0  --PTR 0"$ii"--"
1365            line_1="$line_1        m  s"
1366            line_2="$line_2  m  m  e  ."
1367            line_3="$line_3  i  a  a  d"
1368            line_4="$line_4  n  x  n  ."
1369        done
1370    else
1371        line_0=`printf '%s %2i' 'default   ' $MATCH_CRIT`
1372      if test $KIND = 1 ; then
1373        echo "TANGLIN=true" >> $SUMMARY
1374        line_1="G D M    C  T  F"
1375        line_2="e p a R  o  L  D"
1376      else
1377        echo "ADJOINT=true" >> $SUMMARY
1378        line_1="G D M    C  A  F"
1379        line_2="e p a R  o  d  D"
1380      fi
1381        line_3="n n k u  s  G  G"
1382        line_4="2 d e n  t  r  r"
1383        echo >> $SUMMARY
1384    fi
1385        echo "$line_0" | tee -a $SUMMARY
1386        echo "$line_1" | tee -a $SUMMARY
1387        echo "$line_2" | tee -a $SUMMARY
1388        echo "$line_3" | tee -a $SUMMARY
1389        echo "$line_4" | tee -a $SUMMARY
1390        echo ""        | tee -a $SUMMARY
1391    echo "-------------------------------------------------------------------------------"
1392    
1393  #  ...and each test directory...  #  ...and each test directory...
1394  for dir in $TESTDIRS ; do  for dir in $TESTDIRS ; do
1395        
1396        # set builddir & rundir:
1397        builddir="build"
1398        if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1399        rundir="run"
1400        pfxdir="tr_$rundir"
1401        if test ! -d $dir/$rundir ; then
1402            rundir=$builddir
1403        fi
1404        CODE_DIR=$dir/$code_dir
1405        BUILD_DIR=$dir/$builddir
1406    
1407      #  Cleanup only!      #  Cleanup only!
1408      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1409          if test -r $dir/build/Makefile ; then          echo -n '  --- dir:' $BUILD_DIR ': '
1410              ( cd $dir/build ; make CLEAN )          makeclean $BUILD_DIR
1411            (   cd $BUILD_DIR
1412                rm -f $EXECUTABLE *.bak
1413                rm -f genmake_state genmake_*optfile genmake.log
1414                rm -f SIZE.h.mpi genmake.tr_log make.tr_log
1415            )
1416            if test -d $dir/$rundir/CVS ; then
1417                echo -n '  --- dir:' $dir/$rundir ': '
1418                run_clean $dir/$rundir
1419          fi          fi
1420          if test -r $dir/input/Makefile ; then          trdir=`( cd $dir ; find . -type d -name "$pfxdir.*" -print | sed 's/^.\///')`
1421              ( cd $dir/input ; make CLEAN )          ttd=`echo $trdir | wc -w`
1422            if test $ttd != 0 ; then
1423                echo '  --- rm dir:' $trdir
1424                ( cd $dir ; rm -rf $trdir )
1425          fi          fi
1426          continue          continue
1427      fi      fi
1428    
1429      #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
1430      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
1431      if test ! -r $dir"/results/output.txt" ; then      fout=$dir"/results/"$ref_outp
1432          echo "can't read \"$dir/results/output.txt\" -- skipping $dir"     #if test ! -r $fout ; then
1433        if test ! -r $fout -a ! -r ${fout}.gz ; then
1434            echo "can't read \"$fout\" -- skipping $dir"
1435          continue          continue
1436      fi      fi
1437    
1438      echo "-------------------------------------------------------------------------------"      # Check for specific files for particular type of run
     echo  
     echo "Experiment:  $dir"  
     echo  
     unset genmake makedepend make run  
     results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'  
1439    
1440      if [ -r $dir/build ]; then      if test ! -r $CODE_DIR"/SIZE.h_mpi"  -a "x$MPI" != "x0" ; then
1441          seperatebuilddir=1          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1442          builddir=build          continue
1443          rundir=build      fi
1444          ( cd $dir/build; ln -sf ../input/* . )      if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1445      else          echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1446          seperatebuilddir=0          continue
         builddir=input  
         rundir=input  
1447      fi      fi
       
     CODE_DIR=$dir/code  
     BUILD_DIR=$dir/$builddir  
     MPI_FILES="CPP_EEOPTIONS.h_mpi SIZE.h_mpi"  
     NOMPI_FILES="CPP_EEOPTIONS.h_nompi SIZE.h_nompi"  
1448    
1449      #  Is this an MPI run?      if test "x$MPI" != "x0" ; then
1450      if test "x$MPI" = xt ; then          ntx=1 ; nty=1
1451          FILES=$MPI_FILES          if test "x$MULTI_THREAD" = "xt" ; then
1452      else            ff=$dir"/input/eedata.mth"
1453          FILES=$NOMPI_FILES            ntx=`grep "^ *nTx *=" $ff | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
1454      fi            nty=`grep "^ *nTy *=" $ff | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
1455                  if test "x$ntx" = x ; then ntx=1 ; fi
1456      #  Check to see that we have the files            if test "x$nty" = x ; then nty=1 ; fi
1457      have_files=t          fi
1458      for i in $FILES ; do          #- create new SIZE.h with no more than '$MPI' Procs
1459          if test ! -r $CODE_DIR/$i ; then          mk_mpi_size $CODE_DIR"/SIZE.h_mpi" $BUILD_DIR"/tr_size.mpi" $MPI $ntx $nty
1460              echo "Warning: can't read file $CODE_DIR/$i"          LOC_NPROC=$?
1461              have_files=f          (   cd $BUILD_DIR
1462                if test -r SIZE.h.mpi ; then
1463                    cmp tr_size.mpi SIZE.h.mpi > /dev/null 2>&1 ; RETVAL=$?
1464                else RETVAL=1
1465                fi
1466                if test "x$RETVAL" = x0 ; then
1467                    rm -f tr_size.mpi
1468                else
1469                    rm -f SIZE.h.mpi ; mv tr_size.mpi SIZE.h.mpi
1470                fi
1471            )
1472            if test "x$MPI_MFILE" != x ; then
1473                #- create new MPI machine-file with the right number of Procs
1474                rm -f $LOC_MFILE
1475                cat $MPI_MFILE | sort | uniq | head -$LOC_NPROC > $LOC_MFILE
1476                nl=`wc -l $LOC_MFILE | awk '{print $1}'`
1477                if [ $nl -lt $LOC_NPROC ] ; then
1478                    rm -f $LOC_MFILE
1479                    cat $MPI_MFILE | head -$LOC_NPROC > $LOC_MFILE
1480                    #sed -n "1,$LOC_NPROC p" $MPI_MFILE > $LOC_MFILE
1481                fi
1482                if [ $verbose -gt 1 ]; then
1483                    nl=`wc -l $LOC_MFILE | awk '{print $1}'`
1484                    echo " new LOC_MFILE=$LOC_MFILE : $nl procs for LOC_NPROC=$LOC_NPROC"
1485                fi
1486            fi
1487            if test "x$MULTI_THREAD" = "xt" ; then
1488                retv=`check_eedata $dir"/input/eedata.mth" $BUILD_DIR"/SIZE.h.mpi"`
1489                if test $retv != 0 ; then
1490                    echo "input/eedata.mth tiling misfit -- skipping $dir"
1491                    continue
1492                fi
1493          fi          fi
     done  
     if test "x$have_files" != xt -a "x$MPI" = xt ; then  
         echo "Skipping $dir due to lack of input files (see above warning)"  
         continue  
1494      fi      fi
1495        
1496      #  If we have the $FILES and they differ, copy the $FILES to $BUILD_DIR      #  Check whether there are "extra runs" for this testdir
1497      if test "x$have_files" = xt ; then      extra_runs=
1498          for i in $FILES ; do      if test "x$NORUN" = xf ; then
1499              cmp $CODE_DIR/$i $BUILD_DIR/$i > /dev/null 2>&1          ex_run_dirs=`( cd $dir ; echo $inputdir.* )`
1500              RETVAL=$?      fi
1501              if test "x$RETVAL" != x0 ; then      #echo "ex_run_dirs='$ex_run_dirs'"
1502                  cp $CODE_DIR/$i $BUILD_DIR/$i      for exd in $ex_run_dirs ; do
1503            name=`echo $exd | sed -e "s/$inputdir\.//"`
1504            refExOut=`echo $ref_outp | sed "s/\./.${name}./"`
1505            outf="$dir/results/$refExOut"
1506            #if test -f $outf -a -r $outf ; then
1507            if test -r $outf -o -r ${outf}.gz ; then
1508              if test "x$MULTI_THREAD" = "xt" ; then
1509                if test -r $dir"/"$exd"/eedata.mth" ; then
1510                  if test "x$MPI" = "x0" ; then
1511                    extra_runs="$extra_runs $name"
1512                  else
1513                    retv=`check_eedata $dir"/"$exd"/eedata.mth" $BUILD_DIR"/SIZE.h.mpi"`
1514                    if test $retv = 0 ; then
1515                        extra_runs="$extra_runs $name"
1516                    else
1517                        echo $exd"/eedata.mth tiling misfit -- skipping $dir"
1518                    fi
1519                  fi
1520                #else echo $dir"/"$exd"/eedata.mth: not found"
1521              fi              fi
1522          done            else
1523                extra_runs="$extra_runs $name"
1524              fi
1525            fi
1526        done
1527    
1528        echo
1529        if test "x$extra_runs" = "x" ; then
1530            echo "Experiment:  $dir"
1531        else
1532            echo "Experiment:  $dir ; extra_runs=$extra_runs"
1533      fi      fi
1534            echo
1535      #  Create an output dir for each OPTFILE/tdir combination      unset genmake makedepend make run
1536      CDIR=$DRESULTS"/"$DRESULTS"_"$NDIR      results=$EMPTY_RESULTS
1537      mkdir $CDIR  
1538      CDIR=`pwd`"/$CDIR"      #  Create an output dir & summary.txt file for each tested experiment (tdir)
1539            locDIR=$DRESULTS"/"$dir
1540      if test "x$CLEANUP" = xt ; then      mkdir $locDIR
1541          makeclean $dir/$builddir      #- report to this experiment local summary file ---
1542        echo "DATE='$DATE' ; tdir='$dir'" > $locDIR"/summary.txt"
1543        echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1544        echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1545        CDIR=`pwd`"/$locDIR"
1546    
1547        if test "x$NORUN" = xt ; then
1548                run=N
1549            genmakemodel $dir/$builddir && genmake=Y \
1550                && makeclean $dir/$builddir \
1551                && symlink_mpifiles $dir $code_dir $builddir \
1552                && makedependmodel $dir/$builddir && makedepend=Y \
1553                && makemodel $dir/$builddir && make=Y
1554      else      else
1555          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1556              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1557                && symlink_mpifiles $dir $code_dir $builddir \
1558              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1559              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1560              && linkdata $seperatebuilddir $dir/$rundir \              && run_clean $dir/$rundir \
1561              && runmodel $dir/$builddir && run=Y \              && linkdata $dir/$rundir $inputdir \
1562              && results=`testoutput $dir $rundir`              && runmodel $dir/$rundir && run=Y \
1563                && results=`testoutput_run $dir $rundir $ref_outp`
1564        fi
1565        #echo "results='$results'"
1566    
1567            fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1568            echo 1>&2
1569            echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1570            echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1571    
1572            for ex in $extra_runs ; do
1573                unset run
1574                results=$EMPTY_RESULTS
1575                #  reference output file
1576                refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1577                #  Create an output dir & summary.txt file for each extra run (tdir.ex)
1578                locDIR=$DRESULTS"/"$dir"."$ex
1579                mkdir $locDIR
1580                #- report to this experiment local summary file ---
1581                echo "DATE='$DATE' ; tdir='$dir.$ex'" > $locDIR"/summary.txt"
1582                #echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1583                #echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1584                CDIR=`pwd`"/$locDIR"
1585                test ! -e "$dir/$pfxdir.$ex" && mkdir "$dir/$pfxdir.$ex"
1586                run_clean $dir/$pfxdir.$ex
1587                linkdata $dir/$pfxdir.$ex $inputdir.$ex $inputdir
1588                runmodel $dir/$pfxdir.$ex && run=Y \
1589                && results=`testoutput_run $dir $pfxdir.$ex $refExOut`
1590                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1591                fres="$fres.$ex"
1592                echo 1>&2
1593                echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1594                echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1595                if test "x$POSTCLEAN" = x2 ; then
1596                    run_clean $dir/$pfxdir.$ex
1597                fi
1598            done
1599    
1600        if test -f $DRESULTS"/"genmake_state ; then : ; else
1601            if test -f $dir/$builddir/Makefile ; then
1602                mkOpt=`grep '^# OPTFILE=' $dir/$builddir/Makefile 2>/dev/null | head -1 | sed 's/^# //'`
1603                echo "from '$dir/$builddir/Makefile', extract:" > $DRESULTS/genmake_state
1604                sed -n '/^# executed by:/,+1 p' $dir/$builddir/Makefile >> $DRESULTS/genmake_state
1605                echo " $mkOpt" >> $DRESULTS/genmake_state
1606                if test "x$OPTFILE" = xNONE ; then
1607                    eval $mkOpt
1608                    sed "/^No \"OPTFILE\" was specified ; genmake2/a\  OPTFILE=${OPTFILE}"\
1609                            $SUMMARY > tr_0.tmp_log
1610                    RETVAL=$?
1611                    if test "x$RETVAL" = x0 ; then rm -f $SUMMARY
1612                            cp tr_0.tmp_log $SUMMARY
1613                    else rm -f tr_0.tmp_log
1614                    fi
1615                fi
1616                gmkLog=$dir/$builddir/genmake.log
1617                grep '^Get compiler version using:' $gmkLog > /dev/null 2>&1
1618                RETVAL=$?
1619                if test "x$RETVAL" = x0 ; then
1620                    echo "from '$gmkLog', extract compiler version:" >> $DRESULTS/genmake_state
1621                    sed -n '/Get compiler version/,/<-- compiler version/p' $gmkLog \
1622                            | grep -v '^... compiler version ' > tr_1.tmp_log
1623                    sed -n '1p' tr_1.tmp_log >> $DRESULTS/genmake_state
1624                    sed -n '2,/^$/p' tr_1.tmp_log | sed '/^$/d' | sed 's/^./ &/' \
1625                            >> $DRESULTS/genmake_state
1626                    rm -f tr_1.tmp_log
1627                fi
1628            fi
1629      fi      fi
1630            #postclean $dir/$builddir
1631      echo      if test "x$POSTCLEAN" = x2 ; then
1632      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          makeclean $dir/$builddir \
1633          ${run:-N} $results              && run_clean $dir/$rundir
1634      echo      fi
1635      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \      if test "x$MPI" != x0 -a "x$MPI_MFILE" != x ; then rm -f $LOC_MFILE ; fi
1636          ${run:-N} $results >> $SUMMARY  
1637      echo "fresults='" > $CDIR"/summary.txt"      echo "-------------------------------------------------------------------------------"
1638      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \  
1639          ${run:-N} $results >> $CDIR"/summary.txt"  done
1640      echo "'" >> $CDIR"/summary.txt"  
1641      echo "MACH='$MACH'" >> $CDIR"/summary.txt"  printf "Start time:  " >> $SUMMARY
1642      echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"  echo "$start_date" >> $SUMMARY
1643      echo "DATE='$DATE'" >> $CDIR"/summary.txt"  printf "End time:    " >> $SUMMARY
1644      echo "tdir='$dir'" >> $CDIR"/summary.txt"  date >> $SUMMARY
1645        
1646      (  #  If addresses were supplied and mpack built successfully, then try
1647          cd $DRESULTS  #  to send email using mpack.
1648          tar -cf $NDIR".tar" $DRESULTS"_"$NDIR > /dev/null 2>&1  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1649          gzip $NDIR".tar"      echo "No results email was sent."
1650      )  else
1651            if test "x$HAVE_MPACK" = xt ; then
1652      if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1653          echo "No mail sent"              && gzip $DRESULTS".tar" \
1654      else              && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
         $MPACK -s MITgcm-test -m 1000000 $DRESULTS"/"$NDIR".tar.gz" $ADDRESSES  
1655          RETVAL=$?          RETVAL=$?
1656          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1657              echo "Warning: \"$MPACK\" failed -- please contact <edhill@mitgcm.org>"              echo
1658                echo "Warning: The tar, gzip, & mpack step failed.  Please send email"
1659                echo "  to <MITgcm-support@mitgcm.org> for help.  You may copy the "
1660                echo "  summary of results from the directory \"$DRESULTS\"."
1661                echo
1662          else          else
1663              rm -f $DRESULTS"/"$NDIR".tar*"              echo
1664                echo "An email containing results was sent to the following addresses:"
1665                echo "  \"$ADDRESSES\""
1666                echo
1667                test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"
1668                test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"
1669          fi          fi
1670      fi      fi
1671    fi
1672    
1673      echo "-------------------------------------------------------------------------------"  if test "x$QUICK" = xf -a "x$NORUN" = xf ; then
1674            rm -f tr_cmpnum.c tr_cmpnum
1675      NDIR=$(( $NDIR + 1 ))  fi
       
 done  
   
 rm tmp_cmpnum.f a.out  
1676    
1677  cat $SUMMARY  if test "x$CLEANUP" != xt ; then
1678        cat $SUMMARY | sed 's/ \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \. //'
1679        if test -e tr_out.txt ; then
1680            mv tr_out.txt tr_out.txt.old
1681        fi
1682        cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1683    fi
1684    
1685    if test "x$DELDIR" = xt ; then
1686        rm -rf $DRESULTS
1687    fi

Legend:
Removed from v.1.9.2.8  
changed lines
  Added in v.1.175

  ViewVC Help
Powered by ViewVC 1.1.22