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

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

  ViewVC Help
Powered by ViewVC 1.1.22