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

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

  ViewVC Help
Powered by ViewVC 1.1.22