/[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.49 by edhill, Tue Nov 23 21:25:24 2004 UTC revision 1.136 by jmc, Mon Mar 8 16:36:20 2010 UTC
# Line 11  usage() Line 11  usage()
11      echo      echo
12      echo "where possible OPTIONS are:"      echo "where possible OPTIONS are:"
13      echo "  (-help|-h)               print usage"      echo "  (-help|-h)               print usage"
14      echo "  (-mpi)                   use MPI input files"      echo "  (-mth)                   run multi-threaded (using eedata.mth)"
15      echo "  (-ieee|-noieee)          if possible, use IEEE compiler flags"      echo "  (-mpi)                   compile and run using MPI"
16        echo "  (-ieee/-noieee)          if possible, use IEEE compiler flags"
17      echo "                             (DEF=\"-ieee\")"      echo "                             (DEF=\"-ieee\")"
18      echo "  (-optfile=|-of=)STRING   list of optfiles to use"      echo "  (-gsl)                   compile with \"-gsl\" flag"
19      echo "  (-a|-addr) STRING        list of email recipients"      echo "  (-use_r4|-ur4)           if allowed, use real*4 type for '_RS' variable"
20      echo "                             (DEF=\"edhill@mitgcm.org\")"      echo "  (-optfile|-of) STRING    list of optfiles to use"
21      echo "  (-t|-tdir) STRING        list of test dirs to use"      echo "  (-addr|-a) STRING        list of email recipients"
22      echo "                             (DEF=\"\" which builds all)"      echo "                             (DEF=\"\" no email is sent)"
23      echo "  (-b|-bash) STRING        preferred location of a \"bash\" or"      echo "  (-mpackdir|-mpd) DIR     location of the mpack utility"
24        echo "                             (DEF=\"../tools/mpack-1.6\")"
25        echo "  (-tdir|-t) STRING        list of group and/or exp. dirs to test"
26        echo "                             (recognized groups: basic, tutorials)"
27        echo "                             (DEF=\"\" which test all)"
28        echo "  (-skipdir|-skd) STRING   list of exp. dirs to skip"
29        echo "                             (DEF=\"\" which test all)"
30        echo "  (-bash|-b) STRING        preferred location of a \"bash\" or"
31      echo "                             Bourne-compatible \"sh\" shell"      echo "                             Bourne-compatible \"sh\" shell"
32      echo "                             (DEF=\"\" for \"bash\")"      echo "                             (DEF=\"\" for \"bash\")"
33      echo "  (-adm|-ad)               perform an adjoint run"      echo "  (-adm|-ad)               perform an adjoint run"
34      echo "  (-command) STRING        command to run"      echo "  (-oad)                   perform an OpenAD adjoint run"
35      echo "                             (DEF=\"make output.txt\")"      echo "  (-command|-c) STRING     command to run"
36      echo "  (-m|-make) STRING        command to use for \"make\""      echo "  (-make|-m) STRING        command to use for \"make\""
37      echo "                             (DEF=\"make\")"      echo "                             (DEF=\"make\")"
38        echo "  (-odir) STRING           used to build output directory name"
39        echo "                             (DEF=\"hostname\")"
40        echo "  (-ptracers|-ptr) STRING  specify which ptracers to test"
41        echo "                             (DEF=\"1 2 3 4 5\")"
42        echo "  (-match) NUMBER          Matching Criteria (number of digits)"
43        echo "                             (DEF=\"12\")"
44      echo "  (-j) JOBS                use \"make -j JOBS\" for parallel builds"      echo "  (-j) JOBS                use \"make -j JOBS\" for parallel builds"
45      echo "  (-clean)                 *ONLY* run \"make CLEAN\""      echo "  (-clean)                 *ONLY* run \"make CLEAN\""
46        echo "  (-norun|-nr)             skip the \"runmodel\" stage (stop after make)"
47        echo "  (-runonly|-ro)           *ONLY* run stage (=\"-quick\" without make)"
48      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""
49      echo "  (-nogenmake|-ng)         skip the genmake stage"      echo "  (-nogenmake|-ng)         skip the genmake stage"
50      echo "  (-noclean|-nc)           skip the \"make clean\" stage"      echo "  (-noclean|-nc)           skip the \"make clean\" stage"
51      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"
52      echo "  (-deldir|-dd)            on success, delete the output directory"      echo "  (-deldir|-dd)            on success, delete the output directory"
53        echo "  (-ts)                    provide timing information per timestep"
54        echo "  (-papis)                 provide MFlop/s per timestep using PAPI"
55        echo "  (-pcls)                  provide MFlop/s per timestep using PCL"
56      echo      echo
57      echo "and where STRING follows a whitespace-delimited format"      echo "and where STRING can be a whitespace-delimited list"
58      echo "such as:"      echo "such as:"
59        echo
60      echo "  -t 'exp0 exp2 exp3' "      echo "  -t 'exp0 exp2 exp3' "
61      echo "  -addr='abc@123.com testing@home.org'"      echo "  -addr='abc@123.com testing@home.org'"
62      echo      echo
63        echo "provided that the expression is properly quoted within the current"
64        echo "shell (note the use of single quotes to protect white space)."
65        echo
66      exit 1      exit 1
67  }  }
68    
# Line 47  usage() Line 70  usage()
70  build_mpack()  build_mpack()
71  {  {
72      printf "building the mpack utility...  "      printf "building the mpack utility...  "
73      if test ! -x "$MPACKDIR/mpack" ; then      MPACK="$MPACKDIR/mpack"
74        if test ! -x $MPACK ; then
75          if test ! -d $MPACKDIR ; then          if test ! -d $MPACKDIR ; then
76              echo              echo
77              echo "Error: can't find \"$MPACKDIR\""              echo "Error: can't find \"$MPACKDIR\""
# Line 56  build_mpack() Line 80  build_mpack()
80              echo              echo
81              HAVE_MPACK=f              HAVE_MPACK=f
82          fi          fi
         printf "building mpack...  "  
83          if test "x$CC" = x ; then          if test "x$CC" = x ; then
84              export CC=cc              export CC=cc
85          fi          fi
86            printf "building mpack (using CC=$CC)...  "
87          ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1          ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1
88          RETVAL=$?          RETVAL=$?
89          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
# Line 70  build_mpack() Line 94  build_mpack()
94          else          else
95              rm -f tr_build_mpack.out              rm -f tr_build_mpack.out
96              HAVE_MPACK=t              HAVE_MPACK=t
97                echo "done"
98          fi          fi
99      else      else
100          HAVE_MPACK=t          HAVE_MPACK=t
101            echo "already exist"
102      fi      fi
     echo "OK"  
103  }  }
104    
105  testoutput_for_prop()  testoutput_var()
106  {  {
107      # testoutput_for_prop dir s1 label subdir extension      # testoutput_var dir s1 label subdir reference_output
108      #      #
109      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt      #  compares 1 variable output selected from file $dir/$subdir/$OUTPUTFILE
110      #  using search strings s1 and text label      #     with same output from reference file $dir/results/$reference_output
111        #  using search strings s1 and text label
112    
113      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
114          echo testoutput_for_prop: grep "$2" $1/$4/output.txt 1>&2          echo testoutput_var: grep "$2" $1/$4/$OUTPUTFILE 1>&2
115      fi      fi
116      if [ -r $1/$4/output.txt ]; then      if [ -r $1/$4/$OUTPUTFILE ]; then
117          grep "$2" $1/$4/output.txt | sed 's/.*=//' | cat -n > tmp1.txt          grep "$2" $1/$4/$OUTPUTFILE | sed 's/.*=//' | cat -n > tmp1.txt
118          lncnt=`wc -l tmp1.txt | awk '{print $1}' `          lncntA=`wc -l tmp1.txt | awk '{print $1}' `
119          if [ $lncnt -lt 3 ]; then          if [ $lncntA -lt 2 ]; then
120              if [ $verbose -gt 0 ]; then              if [ $verbose -gt 0 ]; then
121                  echo Not enough lines of output when searching for "$2" 1>&2                  echo Not enough lines of output when searching for "$2" 1>&2
122              fi              fi
123              return 99              return 99
124          fi          fi
125      else      else
126          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
127          return 99          return 99
128      fi      fi
129      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
130          echo testoutput_for_prop: grep "$2" $1/results/output.txt$5 1>&2          echo testoutput_var: grep "$2" $1/results/$5 1>&2
131      fi      fi
132      grep "$2" $1/results/output.txt$5 | sed 's/.*=//' | cat -n > tmp2.txt      grep "$2" $1/results/$5 | sed 's/.*=//' | cat -n > tmp2.txt
133      lncnt=`wc -l tmp2.txt | awk '{print $1}' `      lncntB=`wc -l tmp2.txt | awk '{print $1}' `
134      if [ $lncnt -lt 3 ]; then      if [ $lncntB -lt 2 ]; then
135          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
136              echo Not enough lines of output when searching for "$2" 1>&2              echo Not enough lines of output when searching for "$2" 1>&2
137          fi          fi
138          return 99          return 99
139      fi      fi
140        if [ $lncntA -ne $lncntB ]; then
141            if [ $verbose -gt 0 ]; then
142                echo Not same Nb of lines when searching for "$2" ":" $lncntA $lncntB 1>&2
143            fi
144            return 99
145        fi
146        has_nan=`cat tmp1.txt | grep -i nan | wc -l`
147        if [ $has_nan -gt 0  ] ; then
148            echo testoutput_var: $OUTPUTFILE contains $has_nan NaN values  1>&2
149            return 99
150        fi
151        has_inf=`cat tmp1.txt | grep -i inf | wc -l`
152        if [ $has_inf -gt 0  ] ; then
153            echo testoutput_var: $OUTPUTFILE contains $has_inf Inf values  1>&2
154            return 99
155        fi
156      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
157          echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2          echo testoutput_var: join tmp1.txt tmp2.txt 1>&2
158      fi      fi
159      join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt      join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt
160      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
161          echo testoutput_for_prop: compare_lines 1>&2          echo testoutput_var: compare_lines 1>&2
162      fi      fi
163      if [ $verbose -gt 1 ]; then      if [ $verbose -gt 1 ]; then
164          cat tmp3.txt 1>&2          cat tmp3.txt 1>&2
# Line 124  testoutput_for_prop() Line 166  testoutput_for_prop()
166      echo "-1" >> tmp3.txt      echo "-1" >> tmp3.txt
167      # On the SGI O3K (*not* the O2K), "cat -n" inserts a ":" after the line number      # On the SGI O3K (*not* the O2K), "cat -n" inserts a ":" after the line number
168      cat tmp3.txt | sed -e 's|:||g' > tmp4.txt      cat tmp3.txt | sed -e 's|:||g' > tmp4.txt
169      digits_of_similarity=`./tmp_cmpnum < tmp4.txt`      digits_of_similarity=`./tr_cmpnum < tmp4.txt`
170      if [ $digits_of_similarity -eq 99 ]; then      if [ $digits_of_similarity -eq 99 ]; then
171          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
172              echo testoutput_for_prop: No comparison was available for \"$2\" 1>&2              echo testoutput_var: No comparison was available for \"$3\" 1>&2
173          fi          fi
174          digits_of_similarity=99          digits_of_similarity=99
175      else      else
176          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
177              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
178          fi          fi
179      fi      fi
180      rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt      rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt
181        
182      return $digits_of_similarity      return $digits_of_similarity
183  }  }
184    
185  dashnum()  testoutput_run()
186  {  {
187      # dashnum n1 n2 n3 ...      # testoutput_run directory subdir reference_output
188      #      #
189      #  print numbers using %3i format or "--" if number = 99      #  test output from 1 run in "directory"
190    # --> same processing for adjoint & forward test
191      for num in $@ ; do          # default list of output variables to be checked:
192          if [ $num = 99 ]; then          #  1rst : main variable used to decide if it pass or FAIL
193              printf ' --'          #  others : number of matching digits to be printed in summary.txt
194          else          listChk=$DEF_CHECK_LIST
195              printf '%3i' $num          #  load experiment-specific list from file "tr_checklist" (if it exist)
196          fi          if test -r $1/$2/tr_checklist ; then listChk=`cat $1/$2/tr_checklist` ; fi
197      done          sVar=`echo $listChk | awk '{print $1}'`
198  }          # remove 1rst var and expand the list: + => min max mean s.d
199            listVar=`echo $listChk | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' \
200  testoutput_ad()                                 | sed 's/+//g' | sed "s/^$sVar//"`
201  {          if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(I)='$listVar'" 1>&2 ; fi
202      grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $5}' > t05.txt          # check for ptracer output in reference_output file :
203      grep $3 $1/$2/output.txt_adm | awk '{print NR " " $5}' > t15.txt          outpref=$1/results/$3
204      grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $6}' > t06.txt          ptr_mon="trcstat_ptracerXX_min trcstat_ptracerXX_max"
205      grep $3 $1/$2/output.txt_adm | awk '{print NR " " $6}' > t16.txt          ptr_mon="$ptr_mon trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
206      join t05.txt t15.txt > t5.txt          for ii in $PTRACERS_NUM ; do
207      join t06.txt t16.txt > t6.txt              ptrfound=0
208      echo "-1" >> t5.txt              for jj in $ptr_mon ; do
209      echo "-1" >> t6.txt                  name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
210      digits_5=`./tmp_cmpnum < t5.txt`                  tst=`grep $name $outpref | wc -l | awk '{print $1}'`
211      digits_6=`./tmp_cmpnum < t6.txt`                  if test ! "x$tst" = x0 ; then ptrfound=1 ; fi
212      dashnum $digits_5 $digits_6              done
213      rm -f t[01][56].txt t[56].txt              if test $ptrfound = '1' ; then
 }  
   
 check_for_add_mon_output()  
 {  
     # Check for additional types of monitor output  
     if test "x$1" = x ; then  
         return  
     fi  
   
     ptr_add="trcstat_ptracerXX_min trcstat_ptracerXX_max"  
     ptr_add="$ptr_add trcstat_ptracerXX_mean trcstat_ptracerXX_sd"  
     for ii in 1 2 3 4 5 ; do  
         for jj in $ptr_add ; do  
             name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`  
             tst=`grep $name $1 | wc -l | awk '{print $1}'`  
             if test ! "x$tst" = x0 ; then  
214                  eval "HAVE_PTR0"$ii"=t"                  eval "HAVE_PTR0"$ii"=t"
215                else
216                    eval "HAVE_PTR0"$ii"=f"
217                  if test "x$ADM" = x -a "x$OADM" = x; then
218                  # remove this ptr from the list of output variable to check
219                  # echo "-- ptr test=" $tst "number of var=" `echo $listVar | awk '{print NF}'` 1>&2
220                    listVar=`echo "$listVar" | sed "s/ pt$ii..//g"`
221                  fi
222              fi              fi
223            #   eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"' 1>&2
224          done          done
225          #  eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"'          tst=`echo $sVar $listVar | awk '{ for(i=2;i<=NF;i++){if($i==$1)t+=1}; print t }'`
226      done          if test $tst != 1 ; then
227  }            if test $tst = 0 ; then echo "==> WARNING: selected var >$sVar< not found" 1>&2
228                     else echo "==> WARNING: found selected var >$sVar< $tst times" 1>&2 ; fi
229  testoutput()            echo "==> WARNING: in checked list:" $listVar 1>&2
230  {          #- put it back once:
231      # testoutput directory subdir extension            listVar=" $sVar "`echo "$listVar " | sed "s/ $sVar / /g"`
232      #          fi
233      #  test output in "directory"          if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(M)='$listVar'" 1>&2 ; fi
234      if test "x$ADM" = x ; then          echo "listVar='$listVar'" > $CDIR"/summary.txt"
235          if [ $debug -gt 0 ]; then          allargs=""
236              echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2          for xx in $listVar
237          fi          do
238          testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2 $3; cg2dres=$?            case $xx in
239          if [ $debug -gt 0 ]; then             'PS')  if [ $debug -gt 0 ]
240              echo testoutput: cg2dres=$cg2dres 1>&2                    then echo testoutput_run: testoutput_var $1 cg2d_init_res 1>&2 ; fi
241          fi                    testoutput_var $1 "cg2d_init_res" "Press. Solver (cg2d)" $2 $3; yy=$?
242          testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2 $3; tmin=$?                    if [ $debug -gt 0 ] ; then echo testoutput_run: cg2dres=$yy 1>&2 ; fi ;;
243          testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2 $3; tmax=$?            'Cost') testoutput_var $1 "ADM  precision_derivative_cost" "ADM Cost" $2 $3; yy=$? ;;
244          testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2 $3; tmean=$?            'Grad') testoutput_var $1 "ADM  precision_derivative_grad" "ADM Grad" $2 $3; yy=$? ;;
245          testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2 $3; tsd=$?             'Tmn') testoutput_var $1 "dynstat_theta_min"  "Theta minimum"  $2 $3; yy=$? ;;
246          testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2 $3; smin=$?             'Tmx') testoutput_var $1 "dynstat_theta_max"  "Theta maximum"  $2 $3; yy=$? ;;
247          testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2 $3; smax=$?             'Tav') testoutput_var $1 "dynstat_theta_mean" "Theta mean"     $2 $3; yy=$? ;;
248          testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2 $3; smean=$?             'Tsd') testoutput_var $1 "dynstat_theta_sd"   "Theta Std.Dev"  $2 $3; yy=$? ;;
249          testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2 $3; ssd=$?             'Smn') testoutput_var $1 "dynstat_salt_min"  "Salt minimum"    $2 $3; yy=$? ;;
250          testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2 $3; umin=$?             'Smx') testoutput_var $1 "dynstat_salt_max"  "Salt maximum"    $2 $3; yy=$? ;;
251          testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2 $3; umax=$?             'Sav') testoutput_var $1 "dynstat_salt_mean" "Salt mean"       $2 $3; yy=$? ;;
252          testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2 $3; umean=$?             'Ssd') testoutput_var $1 "dynstat_salt_sd"   "Salt Std.Dev"    $2 $3; yy=$? ;;
253          testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2 $3; usd=$?             'Umn') testoutput_var $1 "dynstat_uvel_min"  "U minimum"       $2 $3; yy=$? ;;
254          testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2 $3; vmin=$?             'Umx') testoutput_var $1 "dynstat_uvel_max"  "U maximum"       $2 $3; yy=$? ;;
255          testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2 $3; vmax=$?             'Uav') testoutput_var $1 "dynstat_uvel_mean" "U mean"          $2 $3; yy=$? ;;
256          testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2 $3; vmean=$?             'Usd') testoutput_var $1 "dynstat_uvel_sd"   "U Std.Dev"       $2 $3; yy=$? ;;
257          testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2 $3; vsd=$?             'Vmn') testoutput_var $1 "dynstat_vvel_min"  "V minimum"       $2 $3; yy=$? ;;
258               'Vmx') testoutput_var $1 "dynstat_vvel_max"  "V maximum"       $2 $3; yy=$? ;;
259          for ii in 1 2 3 4 5 ; do             'Vav') testoutput_var $1 "dynstat_vvel_mean" "V mean"          $2 $3; yy=$? ;;
260              testoutput_for_prop $1 "trcstat_ptracer0"$ii"_min"  "p0"$ii"_min"  $2 $3             'Vsd') testoutput_var $1 "dynstat_vvel_sd"   "V Std.Dev"       $2 $3; yy=$? ;;
261              RETVAL=$? ; eval `echo "p0"$ii"_min="$RETVAL`          'pt1mn'|'pt2mn'|'pt3mn'|'pt4mn'|'pt5mn') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
262              testoutput_for_prop $1 "trcstat_ptracer0"$ii"_max"  "p0"$ii"_max"  $2 $3             testoutput_var $1 "trcstat_ptracer0"$ii"_min"  "p0"$ii"_min"   $2 $3; yy=$? ;;
263              RETVAL=$? ; eval `echo "p0"$ii"_max="$RETVAL`          'pt1mx'|'pt2mx'|'pt3mx'|'pt4mx'|'pt5mx') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
264              testoutput_for_prop $1 "trcstat_ptracer0"$ii"_mean" "p0"$ii"_mean" $2 $3             testoutput_var $1 "trcstat_ptracer0"$ii"_max"  "p0"$ii"_max"   $2 $3; yy=$? ;;
265              RETVAL=$? ; eval `echo "p0"$ii"_mean="$RETVAL`          'pt1av'|'pt2av'|'pt3av'|'pt4av'|'pt5av') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
266              testoutput_for_prop $1 "trcstat_ptracer0"$ii"_sd"   "p0"$ii"_sd"   $2 $3             testoutput_var $1 "trcstat_ptracer0"$ii"_mean" "p0"$ii"_mean" $2 $3; yy=$? ;;
267              RETVAL=$? ; eval `echo "p0"$ii"_sd="$RETVAL`          'pt1sd'|'pt2sd'|'pt3sd'|'pt4sd'|'pt5sd') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
268          done             testoutput_var $1 "trcstat_ptracer0"$ii"_sd"   "p0"$ii"_StDv"  $2 $3; yy=$? ;;
269             'Qntmn') testoutput_var $1 "forcing_qnet_min" "Qnet minimum"  $2 $3; yy=$? ;;
270          allargs="$cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd"           'Qntmx') testoutput_var $1 "forcing_qnet_max" "Qnet maximum"  $2 $3; yy=$? ;;
271          allargs="$allargs $umin $umax $umean $usd $vmin $vmax $vmean $vsd"           'Qntav') testoutput_var $1 "forcing_qnet_mean" "Qnet mean"       $2 $3; yy=$? ;;
272          allargs="$allargs $p01_min $p01_max $p01_mean $p01_sd"           'Qntsd') testoutput_var $1 "forcing_qnet_sd"  "Qnet Std.Dev"  $2 $3; yy=$? ;;
273          allargs="$allargs $p02_min $p02_max $p02_mean $p02_sd"           'aSImn') testoutput_var $1 "seaice_area_min"   "SIce Area min"   $2 $3; yy=$? ;;
274          allargs="$allargs $p03_min $p03_max $p03_mean $p03_sd"           'aSImx') testoutput_var $1 "seaice_area_max"   "SIce Area max"   $2 $3; yy=$? ;;
275          allargs="$allargs $p04_min $p04_max $p04_mean $p04_sd"           'aSIav') testoutput_var $1 "seaice_area_mean"  "SIce Area mean"  $2 $3; yy=$? ;;
276          allargs="$allargs $p05_min $p05_max $p05_mean $p05_sd"           'aSIsd') testoutput_var $1 "seaice_area_sd"    "SIce Area StDv"  $2 $3; yy=$? ;;
277             'hSImn') testoutput_var $1 "seaice_heff_min"   "SIce Heff min"   $2 $3; yy=$? ;;
278          eval "dashnum $allargs"           'hSImx') testoutput_var $1 "seaice_heff_max"   "SIce Heff max"   $2 $3; yy=$? ;;
279             'hSIav') testoutput_var $1 "seaice_heff_mean"  "SIce Heff mean"  $2 $3; yy=$? ;;
280      else           'hSIsd') testoutput_var $1 "seaice_heff_sd"    "SIce Heff StDv"  $2 $3; yy=$? ;;
281          testoutput_ad $1 $2 "precision_grdchk_result"          'AthSiG') testoutput_var $1 "thSI_Ice_Area_G" "thSIc Area Global" $2 $3; yy=$? ;;
282      fi          'AthSiS') testoutput_var $1 "thSI_Ice_Area_S" "thSIc Area South"  $2 $3; yy=$? ;;
283            'AthSiN') testoutput_var $1 "thSI_Ice_Area_N" "thSIc Area North"  $2 $3; yy=$? ;;
284            'HthSiG') testoutput_var $1 "thSI_IceH_ave_G" "thSIc H Global"    $2 $3; yy=$? ;;
285            'HthSiS') testoutput_var $1 "thSI_IceH_ave_S" "thSIc H South"     $2 $3; yy=$? ;;
286            'HthSiN') testoutput_var $1 "thSI_IceH_ave_N" "thSIc H North"     $2 $3; yy=$? ;;
287                  *) yy=99; echo "WARNING: asking for var=$xx : not recognized !" 1>&2 ;;
288              esac
289              if test $xx = $sVar
290              then allargs="$allargs > $yy <"
291              else allargs="$allargs $yy"
292              fi
293            done
294    
295            nbVar=`echo $listVar | awk '{print NF}'`
296            if [ $nbVar -lt $LEN_CHECK_LIST ] ; then
297            #-- fill line (up to standard length) with dot:
298              adNul=`expr $LEN_CHECK_LIST - $nbVar | awk '{for(i=1;i<=$1;i++){print "."}}'`
299              echo $allargs $adNul
300            else
301              echo $allargs
302            fi
303    # <-- same processing for adjoint & forward test
304  }  }
305    
306  genmakemodel()  genmakemodel()
# Line 262  genmakemodel() Line 317  genmakemodel()
317          (          (
318              cd $1;              cd $1;
319              command="$GENMAKE2  -ds -m $MAKE"              command="$GENMAKE2  -ds -m $MAKE"
320              if test "x$ADM" = x ; then              if test "x$ADM" = xt ; then
                 command="$command --mods=../code"  
             else  
321                  command="$command --mods=../code_ad"                  command="$command --mods=../code_ad"
322                  command="$command -adof=../../../tools/adjoint_options/adjoint_staf"              elif test "x$OADM" = xt ; then
323                    command="$command -adof ../../../tools/adjoint_options/adjoint_oad -mods '../code_oad ../../OpenAD/code_oad_all'"
324                else
325                    command="$command -mods=../code"
326              fi              fi
327              if test "x$OPTFILE" != xNONE ; then              if test "x$OPTFILE" != xNONE ; then
328                  command="$command --optfile=$OPTFILE"                  command="$command -optfile=$OPTFILE"
329              fi              fi
330              if test "x$IEEE" != x ; then              if test "x$IEEE" != x ; then
331                  command="$command -ieee"                  command="$command -ieee"
332              fi              fi
333                if test "x$GSL" = xt ; then
334                    command="$command -gsl"
335                fi
336                if test "x$MPI" = xt ; then
337                    command="$command -mpi"
338                fi
339                if test "x$MULTI_THREAD" = xt ; then
340                #- run multi-threaded using OpenMP:
341                    command="$command -omp"
342                fi
343                if test "x$USE_R4" = xt ; then
344                    command="$command -use_r4"
345                fi
346                if test "x$TS" = xt ; then
347                    command="$command -ts"
348                fi
349                if test "x$PAPIS" = xt ; then
350                    command="$command -papis"
351                else
352                if test "x$PCLS" = xt ; then
353                    command="$command -pcls"
354                fi
355                fi
356              printf 'genmake ... ' 1>&2              printf 'genmake ... ' 1>&2
357              $command > make.log 2>&1              # $command > make.log 2>&1
358                eval $command > make.log 2>&1
359              RETVAL=$?              RETVAL=$?
360              #  Reduce the size of the testing emails!              #  Reduce the size of the testing emails!
361              head -100 Makefile > $CDIR/Makefile_head              head -100 Makefile > $CDIR/Makefile_head
# Line 295  makeclean() Line 375  makeclean()
375  {  {
376      # makeclean directory      # makeclean directory
377      if test "x$NOCLEAN" = xt ; then      if test "x$NOCLEAN" = xt ; then
378          echo "make CLEAN skipped!"          echo "make Clean skipped!"
379      else      else
380          (          (
381              cd $1;              cd $1;
382              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  
383              if test -r Makefile ; then              if test -r Makefile ; then
384                  $MAKE CLEAN >> make.log 2>&1                  printf 'clean build-dir: make Clean ... ' 2>&1
385                    $MAKE Clean >> make.log 2>&1
386                  RETVAL=$?                  RETVAL=$?
387                  if test "x$RETVAL" != x0 ; then                  if test "x$RETVAL" != x0 ; then
388                      tail make.log                      tail make.log
389                      echo "makeclean: \"make CLEAN\" failed" 1>&2                      echo "makeclean: \"make Clean\" failed" 1>&2
390                      cp make.log $CDIR"/make.log"                      cp make.log $CDIR"/make.log"
391                      return 1                      return 1
392                  fi                  fi
393                    echo successful 1>&2
394                else
395                    echo ''
396              fi              fi
397                exit 0
398            )
399        fi
400    }
401    
402    run_clean()
403    {
404        # run_clean directory
405        if test "x$NOCLEAN" = xt ; then
406            echo "run_clean skipped!"
407        else
408            (
409                cd $1;
410                printf 'clean run-dir ... ' 2>&1
411                # part of what is done after "make clean" when doing "make CLEAN"
412                find . -name "*.meta" -exec rm {} \;
413                find . -name "*.data" -exec rm {} \;
414                find . -name "fort.*" -exec rm {} \;
415                find . -type l -exec rm {} \;
416                rm -f $EXECUTABLE *.txt STD* *diagnostics.log datetime
417                rm -rf mnc_test_*
418                rm -f *_MIT_CE_000.opt0000 costfunction*0000
419              echo successful 1>&2              echo successful 1>&2
420              exit 0              exit 0
421          )          )
# Line 346  makemodel() Line 449  makemodel()
449  {  {
450      # makemodel directory      # makemodel directory
451      (      (
452        if test "x$NOMAKE" = xt ; then
453            cd $1;
454            if test -x $EXECUTABLE ; then
455                echo "make skipped!"
456            else
457                echo "no executable!"
458                return 2
459            fi
460        else
461          cd $1;          cd $1;
462          if test -r Makefile ; then          if test -r Makefile ; then
463              printf 'make ... ' 1>&2              printf 'make ... ' 1>&2
464              if test "x$ADM" = x ; then              if test "x$ADM" = xt ; then
465                    $MAKE adall >> make.log 2>&1
466                elif test "x$OADM" = xt ; then
467                    $MAKE adAll >> make.log 2>&1
468                else
469                  if test "x$JOBS" = x ; then                  if test "x$JOBS" = x ; then
470                      $MAKE >> make.log 2>&1                      $MAKE >> make.log 2>&1
471                  else                  else
472                      $MAKE -j $JOBS >> make.log 2>&1                      $MAKE -j $JOBS >> make.log 2>&1
473                  fi                  fi
             else  
                 $MAKE adall >> make.log 2>&1  
474              fi              fi
475              RETVAL=$?              RETVAL=$?
476              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
477                  tail make.log                  tail make.log
478                  echo failed 1>&2                  echo failed 1>&2
479                  cp make.log $CDIR"/make.log"                  cp make.log $CDIR"/make.log"
480                    rm -f $EXECUTABLE
481                  return 1                  return 1
482              else              else
483                  echo successful 1>&2                  echo successful 1>&2
484              fi              fi
485          fi          fi
486        fi
487      )      )
488  }  }
489    
# Line 381  symlink_mpifiles() Line 497  symlink_mpifiles()
497      code_dir=$2      code_dir=$2
498      BUILD_DIR=$dir/$3      BUILD_DIR=$dir/$3
499      CODE_DIR=$dir/$code_dir      CODE_DIR=$dir/$code_dir
500        
501      # These are files that should replace their counter-part when using -mpi      # These are files that should replace their counter-part when using -mpi
502      MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`      MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi" -print)`
503    
504      #  Is this an MPI run?      #  Is this an MPI run?
505      if test "x$MPI" = xt ; then      if test "x$MPI" = xt ; then
# Line 416  symlink_mpifiles() Line 532  symlink_mpifiles()
532              fi              fi
533          done          done
534      fi      fi
535        
536  }  }
537    
538  linkdata()  linkdata()
539  {  {
540      # linkdata flag      # linkdata run_dir input_dir_1 input_dir_2 ...
541      #      #
542      # symbolically link data files to run directory      # symbolically link data files to run directory
543      if test "x$1" = x1 ; then      if test -d $1 ; then
544          (          (
545              cd $2              cd $1 ; shift
546              if test "x$ADM" = x ; then              inpMPI=`(cd ../$1 ; find . -name "*.mpi" -print | sed 's:^\./::')`
547                  files=`( cd ../input ; ls -1 | grep -v CVS )`              for xx in $inpMPI ; do
548                  for i in $files ; do                if test -r "../"$1"/"$xx ; then
549                      if test ! -d "../input/"$i ; then                  # found 1 _mpi sfx file in 1rst input dir and it is readable
550                          ln -sf "../input/"$i $i                  yy=`echo $xx | sed 's:\.mpi$::'`
551                    if test "x$MPI" = "xt" ; then
552                    # mpi test: remove symbolic link & link _mpi sfx file
553                        if test -h $yy ; then rm -f $yy ; fi
554                        if test ! -r $yy ; then
555                            ln -sf "../"$1"/"$xx $yy ;
556                            printf "$xx " 1>&2
557                      fi                      fi
558                  done                  else
559              else                  # not mpi test: remove symbolic link
560                  files=`( cd ../input ; ls -1 *.bin | grep -v CVS )`                      if test -h $yy ; then rm -f $yy ; fi
561                  for i in $files ; do                  fi
562                      if test ! -d "../input/"$i ; then                fi
563                          ln -sf "../input/"$i $i              done
564                      fi              if test -r "../"$1"/eedata.mth" ; then
565                  done              # found eedata.mth in 1rst input dir and it is readable
566                  files=`( cd ../input_ad ; ls -1 | grep -v CVS )`                  if test "x$MULTI_THREAD" = "xt" ; then
567                  for i in $files ; do                  # multi-threaded test: remove symbolic link & link eedata.mth
568                      if test ! -d "../input_ad/"$i ; then                      if test -h eedata ; then rm -f eedata ; fi
569                          ln -sf "../input_ad/"$i $i                      if test ! -r eedata ; then
570                            ln -sf "../"$1"/eedata.mth" eedata ;
571                            printf 'eedata.mth ' 1>&2
572                      fi                      fi
573                  done                  else
574                    # not multi-threaded test: remove eedata symbolic link
575                        if test -h eedata ; then rm -f eedata ; fi
576                    fi
577              fi              fi
578                prevDir='NONE'
579                for ldir in $* ; do
580                    if test -d "../"$ldir -a $ldir != $prevDir ; then
581                        printf 'ldir='${ldir} 1>&2
582                        files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
583                        for i in $files ; do
584                            if test ! -d "../"$ldir/$i ; then
585                                if test ! -r $i  ; then
586                                    printf ' '$i 1>&2
587                                    ln -sf "../"$ldir"/"$i $i
588                                fi
589                            fi
590                        done
591                        if test -x "../"$ldir"/"prepare_run ; then
592                            "../"$ldir"/"prepare_run
593                        fi
594                        printf ' ; ' 1>&2
595                    fi
596                    prevDir=$ldir
597                done
598          )          )
599      fi      fi
600  }  }
# Line 456  runmodel() Line 603  runmodel()
603  {  {
604      # runmodel directory      # runmodel directory
605      #      #
606      #  runs "$COMMAND in "directory"      #  runs "$COMMAND in "directory"
607      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
608      (      (
609          cd $1          cd $1
610          printf 'runmodel ... ' 1>&2          printf 'runmodel in %s ...' $1 1>&2
611          # make output.txt          # make output.txt
612          echo          echo
613          rm -f run.log          if test -L $EXECUTABLE ; then
614          # echo "COMMAND='$COMMAND'"            if test -x "../"$builddir"/"$EXECUTABLE ; then
615          # echo "pwd='"`pwd`"'"              diff -q $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
616          ( eval $COMMAND ) > run.log 2>&1              outD=$? ; if test $outD != 0 ; then rm -f $EXECUTABLE ; fi
617          RETVAL=$?            else rm -f $EXECUTABLE
618          if test "x$RETVAL" = x0 ; then            fi
619              tail run.log          fi
620            if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
621                echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_tmp
622                ln -sf "../"$builddir"/"$EXECUTABLE .
623            fi
624            if test ! -x $EXECUTABLE ; then
625                    rm -f $RUNLOG ; touch $RUNLOG
626                    if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
627                    echo " no executable:" $EXECUTABLE >> $RUNLOG
628                    RETVAL=8
629                    ENDVAL=-1
630            else
631                if test ! -f $OUTPUTFILE -o $OUTPUTFILE -ot $EXECUTABLE ; then
632                  # output do not exist or is older than executable:
633                    rm -f $RUNLOG ; touch $RUNLOG
634                    if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
635                    ( eval $COMMAND ) >> $RUNLOG 2>&1
636                    RETVAL=$?
637                else
638                    RETVAL=0
639                    if test -f $RUNLOG ; then
640                        if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
641                        echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
642                    else
643                        touch $RUNLOG
644                        if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
645                        echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
646                        echo " no previous $RUNLOG: assume NORMAL END" >> $RUNLOG 2>&1
647                    fi
648                fi
649                ENDVAL=`cat $RUNLOG | grep -v 'ABNORMAL END' | grep -c 'NORMAL END'`
650            fi
651            rm -f run.log_tmp
652            if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
653                tail $RUNLOG
654              echo successful 1>&2              echo successful 1>&2
655              # === Reduce the size of the testing emails!              # === Reduce the size of the testing emails!
656              # if test "x$ADM" = x ; then              #cp $OUTPUTFILE $CDIR"/"$OUTPUTFILE
             #   cp output.txt $CDIR"/output.txt"  
             # else  
             #   cp output.txt_adm $CDIR"/output.txt_adm"  
             # fi  
657              if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi              if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
658              return 0              return 0
659            elif [ $RETVAL -ne 0 -a $ENDVAL -gt 0 ] ; then
660                #-- for some weird cases (run is finihed but with error code)
661                tail $RUNLOG
662                echo finished with error '(run:' $RETVAL ' end:' $ENDVAL ')' 1>&2
663                return 0
664          else          else
665              tail run.log              tail $RUNLOG
666              echo failed 1>&2              echo failed '(run:' $RETVAL ' end:' $ENDVAL ')' 1>&2
667              cp run.log $CDIR"/run.log"              cp $RUNLOG $CDIR"/"$RUNLOG
668              if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi              if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
669              return 1              return 1
670          fi          fi
# Line 493  createcodelet() Line 675  createcodelet()
675  {  {
676      # create codelet for comparing model output      # create codelet for comparing model output
677    
678      printf "creating the comparison code...  "      printf "creating the comparison code (using CC=$CC)...  "
679      cat > tmp_cmpnum.c <<EOF      cat > tr_cmpnum.c <<EOF
680  #include <stdio.h>  #include <stdio.h>
681  #include <math.h>  #include <math.h>
682  int main( int argc, char** argv )  {  int main( int argc, char** argv )  {
683    int linnum,best,lncnt;    int linnum,cmplin,best,lncnt;
684    double a,b,diff;    double a,b,abave,relerr;
685    best = -16;    best = -22;
686    lncnt = 0;    lncnt = 0;
687    while( 1 & (lncnt+=1) < 999 )  {    while( 1 & ( (lncnt+=1) < 999 ) )  {
688      scanf("%d", &linnum);      scanf("%d", &linnum);
689      if (linnum == -1)  break;      if (linnum == -1)  break;
690      scanf("%lf", &a);  scanf("%lf", &b);      scanf("%lf", &a);  scanf("%lf", &b);
691      diff = 0.5*(fabs(a)+fabs(b));      abave = 0.5*(fabs(a)+fabs(b));
692      if (diff > 1.e-12) {      if ( abave == abave ) {
693        diff=fabs(a-b)/diff;        if (abave > 0.0) {
694        if (diff > 0.0) {          relerr=fabs(a-b)/abave;
695          linnum = (int)log10(diff);          if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
696          best = (best > linnum) ? best : linnum;          else { cmplin = -16 ; }
697        }          best = (best > cmplin) ? best : cmplin; }
698        else {        else { cmplin = -22 ; }
699          if (best == -16 && diff != 0)  best = -22;     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
700        }        }
701      }     else {
702       /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
703          break; }
704    }    }
705    if (lncnt == 999) best=-29;    if (lncnt == 999) best=-29;
706      if (linnum != -1) best=-99;
707    printf("%d\n", -best);    printf("%d\n", -best);
708    return 0;    return 0;
709  }  }
710  EOF  EOF
711      cc -o tmp_cmpnum tmp_cmpnum.c -lm      $CC -o tr_cmpnum tr_cmpnum.c -lm
712    
713      if [ -x ./tmp_cmpnum ]; then      if [ -x ./tr_cmpnum ]; then
714          echo "OK"          echo "OK"
715          return 0          return 0
716      else      else
717          echo          echo
718          echo "ERROR: failed to compile comparison code"          echo "ERROR: failed to compile comparison code -- please specify"
719            echo "  a C compiler using the CC environment variable."
720          exit 1          exit 1
721      fi      fi
722  }  }
# Line 542  formatresults() Line 728  formatresults()
728      nm=$1      nm=$1
729      printf '%s %s %s %s' $2 $3 $4 $5      printf '%s %s %s %s' $2 $3 $4 $5
730      shift; shift; shift; shift; shift;      shift; shift; shift; shift; shift;
731      printf '%3s' $@      listPrt=$@
732            listRes=`echo $listPrt | sed 's/>//' | sed 's/<//'`
733      if [ $1 = '--' ]; then      xx=`echo $listPrt | sed 's/.*>//' | sed 's/<.*//' | awk '{print $1}'`
734        printf '%3s' $listPrt
735    #   line below does not work on hp-ux_ia64 : do those substitutions later on
736    #   printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</'
737    
738        if [ $xx = '..' ]; then
739            printf ' N/O '
740        elif [ $xx = '--' ]; then
741            printf ' N/O '
742        elif [ $xx = 99 ]; then
743          printf ' N/O '          printf ' N/O '
744      else      else
745          if [ $1 -gt 12 ]; then          if [ $xx -ge $MATCH_CRIT ]; then
746              printf ' pass'              printf ' pass'
747          else          else
748              printf ' FAIL'              printf ' FAIL'
# Line 555  formatresults() Line 750  formatresults()
750      fi      fi
751      printf '  %s' $nm      printf '  %s' $nm
752      printf '\n'      printf '\n'
       
 }  
   
 show_help()  
 {  
     cat - << EOF  
 $0 [-help] [-quick] [-verbose] dir1 [dir2] [...]  
   
  -help|-h      Show this help message  
  -quiet     Reduce the amount of output  
  -verbose   Produce copious amounts of output  
  -debug     Produce even more output which will mean nothing to most  
  -force     Do "make CLEAN" before compiling. This forces a complete rebuild.  
  -clean     Do "make CLEAN" after compiling and testing.  
  -cleanup   Aggresively removes all model output, executables and object files  
             and then exits. Use with care.  
753    
 Normal usage:  
  $0 *       Configure, compile, run and analyze in all experiment directories  
 EOF  
754  }  }
755    
756  scandirs()  scandirs()
757  {  {
758      if [ $# -eq 0 ]; then      if [ $# -eq 1 ]; then
759          for arg in * ; do          for arg in * ; do
760              test -d $arg/input && echo $arg              test -f $arg/$1 && echo $arg
761          done          done
762      else      else
763          echo $*          echo $*
764      fi      fi
765  }  }
766    
767    
768    check_eedata()
769    {
770        # check_eedata size.h eedata
771        if [ $# -eq 2 ] ; then
772          if test -f $1 -a -f $2 ; then
773          sx=`grep "^     & *nSx *=" $1 | sed "s/^     & *nSx *=//" | sed 's/, *$//'`
774          nx=`grep "^ *nTx *=" $2 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
775          if test "x$nx" = x ; then
776            rx=10
777          else
778            rx=`expr $sx % $nx`
779          fi
780          sy=`grep "^     & *nSy *=" $1 | sed "s/^     & *nSy *=//" | sed 's/, *$//'`
781          ny=`grep "^ *nTy *=" $2 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
782          if test "x$ny" = x ; then
783            ry=20
784          else
785            ry=`expr $sy % $ny`
786          fi
787          echo `expr $rx + $ry`
788        else
789          echo '-1'
790          fi
791        else
792          echo '-2'
793        fi
794    
795    }
796    
797  ###############################################################################  ###############################################################################
798    
799    
# Line 596  scandirs() Line 801  scandirs()
801  debug=0  debug=0
802  verbose=1  verbose=1
803  clean=0  clean=0
 expts=''  
 # ieee=1  
804    
805  IEEE=true  IEEE=true
806  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
807      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
808  fi  fi
809    GSL=f
810    
811  CLEANUP=f  CLEANUP=f
812    NORUN=f
813  QUICK=f  QUICK=f
814    NOMAKE=f
815  NOGENMAKE=f  NOGENMAKE=f
816  NOCLEAN=f  NOCLEAN=f
817  NODEPEND=f  NODEPEND=f
818    POSTCLEAN=f
819    
820  BASH=  BASH=
821  OPTFILE=NONE  OPTFILE=NONE
822  ADDRESSES=  ADDRESSES=
823  TESTDIRS=  TESTDIRS=
824    SKIPDIRS=
825  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
826  HAVE_MPACK=  HAVE_MPACK=
827  MPACK="$MPACKDIR/mpack"  MPACK=
828  COMMAND=  COMMAND=
829  MAKE=make  if test "x$MAKE" = x ; then
830        MAKE=make
831    fi
832    if test "x$CC" = x ; then
833        CC=cc
834    fi
835  JOBS=  JOBS=
836  MPI=f  MPI=f
837    MULTI_THREAD=f
838    OUTDIR=
839  DELDIR=  DELDIR=
840    USE_R4=
841    
842  ADM=  ADM=
843    OADM=
844    
845  # Additional monitor types  # list of pTracers to check for monitor output
846  # HAVE_PTR01=  PTRACERS_NUM="1 2 3 4 5"
847  # HAVE_PTR02=  
848  # HAVE_PTR03=  MATCH_CRIT=13
 # HAVE_PTR04=  
 # HAVE_PTR05=  
849    
850  printf "parsing options...  "  printf "parsing options...  "
851    
# Line 646  for ac_option ; do Line 860  for ac_option ; do
860      fi      fi
861    
862      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
863        
864      case $ac_option in      case $ac_option in
865                    
866          -help | --help | -h | --h)          -help | --help | -h | --h)
# Line 659  for ac_option ; do Line 873  for ac_option ; do
873                    
874          -addr | --addr | -a | --a)          -addr | --addr | -a | --a)
875              ac_prev=ADDRESSES ;;              ac_prev=ADDRESSES ;;
876          -addr=* | --addr=*)          -addr=* | --addr=* | -a=* | --a=*)
877              ADDRESSES=$ac_optarg ;;              ADDRESSES=$ac_optarg ;;
878            -mpackdir | --mpackdir | -mpd | --mpd)
879                ac_prev=MPACKDIR ;;
880            -mpackdir=* | --mpackdir=* | -mpd=* | --mpd=*)
881                MPACKDIR=$ac_optarg ;;
882    
883          -tdir | --tdir | -t | --t)          -tdir | --tdir | -t | --t)
884              ac_prev=TESTDIRS ;;              ac_prev=TESTDIRS ;;
885          -tdir=* | --tdir=*)          -tdir=* | --tdir=* | -t=* | --t=*)
886              TESTDIRS=$ac_optarg ;;              TESTDIRS=$ac_optarg ;;
887    
888            -skipdir | --skipdir | -skd | --skd)
889                ac_prev=SKIPDIRS ;;
890            -skipdir=* | --skipdir=* | -skd=* | --skd=*)
891                SKIPDIRS=$ac_optarg ;;
892    
893          -bash | --bash | -b | --b)          -bash | --bash | -b | --b)
894              ac_prev=BASH ;;              ac_prev=BASH ;;
895          -bash=* | --bash=*)          -bash=* | --bash=* | -b=* | --b=*)
896              BASH=$ac_optarg ;;              BASH=$ac_optarg ;;
897    
898          -command | --command | -c | --c)          -command | --command | -c | --c)
899              ac_prev=COMMAND ;;              ac_prev=COMMAND ;;
900          -command=* | --command=*)          -command=* | --command=* | -c=* | --c=*)
901              COMMAND=$ac_optarg ;;              COMMAND=$ac_optarg ;;
902    
903          -make | --make | -m | --m)          -make | --make | -m | --m)
904              ac_prev=MAKE ;;              ac_prev=MAKE ;;
905          -make=* | --make=*)          -make=* | --make=* | -m=* | --m=*)
906              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
907    
908          -j) ac_prev=JOBS ;;          -odir | --odir)
909          -j=*) JOBS=$ac_optarg ;;              ac_prev=OUTDIR ;;
910            -odir=* | --odir=*)
911                OUTDIR=$ac_optarg ;;
912    
913            -ptracers | --ptracers | -ptr | --ptr)
914                ac_prev=PTRACERS_NUM ;;
915            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
916                PTRACERS_NUM=$ac_optarg ;;
917    
918            -match | --match ) ac_prev=MATCH_CRIT ;;
919            -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
920    
921            -j | --j) ac_prev=JOBS ;;
922            -j=* | --j=*) JOBS=$ac_optarg ;;
923    
924          -clean | --clean)          -clean | --clean)
925              CLEANUP=t ;;              CLEANUP=t ; DELDIR=t ;;
926    
927            -norun | --norun | -nr | --nr)
928                NORUN=t ;;
929            -runonly | --runonly | -ro | --ro)
930                QUICK=t ; NOMAKE=t ;;
931          -quick | --quick | -q | --q)          -quick | --quick | -q | --q)
932              QUICK=t ;;              QUICK=t ;;
933          -nogenmake | --nogenmake | -ng | --ng)          -nogenmake | --nogenmake | -ng | --ng)
# Line 697  for ac_option ; do Line 937  for ac_option ; do
937          -nodepend | --nodepend | -nd | --nd)          -nodepend | --nodepend | -nd | --nd)
938              NODEPEND=t ;;              NODEPEND=t ;;
939    
940            -postclean | --postclean | -pc | --pc)
941                POSTCLEAN=t ;;
942    
943          -mpi) MPI=t ;;          -mpi) MPI=t ;;
944    
945            -mth) MULTI_THREAD=t ;;
946    
947          -adm | -ad) ADM=t ;;          -adm | -ad) ADM=t ;;
948    
949            -oad) OADM=t; NODEPEND=t ;;
950    
951          -ieee) IEEE=true ;;          -ieee) IEEE=true ;;
952          -noieee) IEEE= ;;          -noieee) IEEE= ;;
953            -gsl) GSL=t ;;
954    
955          -verbose) verbose=2 ;;          -verbose) verbose=2 ;;
956          -debug) debug=1 ;;          -debug) debug=1 ;;
# Line 710  for ac_option ; do Line 958  for ac_option ; do
958    
959          -deldir | -dd) DELDIR=t ;;          -deldir | -dd) DELDIR=t ;;
960    
961            -use_r4|-ur4) USE_R4=t ;;
962    
963            -ts) TS=t;;
964            -papis) PAPIS=t;;
965            -pcls) PCL=t;;
966    
967          -*)          -*)
968              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
969              usage              usage
970              ;;              ;;
971            
972          *)          *)
973              echo "Error: unrecognized argument: "$ac_option              echo "Error: unrecognized argument: "$ac_option
974              usage              usage
975              ;;              ;;
976            
977       esac       esac
978        
979  done  done
980    
981  if test "x$QUICK" = xt ; then  if test "x$QUICK" = xt ; then
# Line 730  if test "x$QUICK" = xt ; then Line 984  if test "x$QUICK" = xt ; then
984      NODEPEND=t      NODEPEND=t
985  fi  fi
986    
987    #- setting for forward or ADM testing
988    if test "x$ADM" = xt ; then
989        code_dir=code_ad
990        inputdir=input_ad
991        ref_outp="output_adm.txt"
992        EXECUTABLE="mitgcmuv_ad"
993    elif test "x$OADM" = xt ; then
994        code_dir=code_oad
995        inputdir=input_oad
996        ref_outp="output_oadm.txt"
997        EXECUTABLE="mitgcmuv_ad"
998    else
999        code_dir=code
1000        inputdir=input
1001        ref_outp="output.txt"
1002        EXECUTABLE="mitgcmuv"
1003    fi
1004    
1005  if test "x$TESTDIRS" = x ; then  if test "x$TESTDIRS" = x ; then
1006      TESTDIRS=`scandirs`      LIST=`scandirs results/$ref_outp`
1007    else
1008        #- expand group of experiments:
1009        LIST=" "
1010        for xx in $TESTDIRS
1011        do
1012          case $xx in
1013            'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
1014                     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
1015                     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
1016                    ;;
1017            'tutorials')
1018                     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
1019            *)       LIST=${LIST}" "$xx ;;
1020          esac
1021        done
1022  fi  fi
1023    #echo 'LIST='${LIST}'<'
1024    #- skip dirs, remove duplicate and non-directory:
1025    TESTDIRS=" "
1026    count=0
1027    for xx in $LIST
1028    do
1029        yy=`echo $SKIPDIRS | grep -c $xx`
1030        if test $yy = 0 ; then
1031            if test -d $xx ; then
1032                yy=`echo $TESTDIRS | grep -c $xx`
1033                if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
1034            else count=1 ;
1035                echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
1036            fi
1037        else
1038            if test $count = 1 ; then echo -n ", \"$xx\""
1039            else count=1 ; echo "" ;  echo -n " skip: \"$xx\""
1040            fi
1041        fi
1042    done
1043    if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
1044    #echo 'TESTDIRS='${TESTDIRS}'<'
1045    
1046  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
1047      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
1048  fi  fi
1049    
1050  if test "x$ADM" = xt -a "x$COMMAND" = x ; then  RUNLOG="run.log"
1051      COMMAND="./mitgcmuv_ad > output.txt_adm 2>&1"  OUTPUTFILE=$ref_outp
 fi  
   
1052  if test "x$COMMAND" = x ; then  if test "x$COMMAND" = x ; then
1053      COMMAND="$MAKE output.txt"      COMMAND="./$EXECUTABLE > $OUTPUTFILE"
1054    fi
1055    if test "x$MPI" = xt ; then
1056        OUTPUTFILE="STDOUT.0000"
1057  fi  fi
1058    
1059  echo "OK"  echo "OK (COMMAND= $COMMAND )"
1060    
1061    # set the Default List of output variables to be checked:
1062    #  (use default or load experiment-specific list from file "tr_checklist")
1063    # content : 1rst = main variable used to decide if it pass or FAIL
1064    #         others = number of matching digits to be printed in summary.txt
1065    if test "x$ADM" = x -a "x$OADM" = x; then
1066        DEF_CHECK_LIST='PS PS T+ S+ U+ V+ pt1+ pt2+ pt3+ pt4+ pt5+'
1067        EMPTY_RESULTS='.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..'
1068        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1069        ii=`echo $EMPTY_RESULTS | awk '{print NF}'`
1070        EMPTY_RESULTS=$EMPTY_RESULTS`expr $LEN_CHECK_LIST - $ii | awk 'BEGIN{FS=":"}{for(i=1;i<=$1;i++){printf "  ."}}'`
1071    else
1072        DEF_CHECK_LIST='Grad Cost Grad'
1073        EMPTY_RESULTS='.. ..'
1074        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1075    fi
1076    
1077  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
1078  createcodelet  if test -x tr_cmpnum ; then
1079        echo "skipping comparison code build"
1080    else
1081        createcodelet
1082    fi
1083    
1084  #  build the mpack utility  #  build the mpack utility (if ADDRESSES = NONE, do it to test the build)
1085  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then  if test "x$ADDRESSES" = x ; then
1086      echo "skipping mpack build"      echo "skipping mpack build"
1087  else  else
1088      build_mpack      build_mpack
1089  fi  fi
1090    
1091  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
1092    CMDLINE=$0
1093    for xx in "$@" ; do nw=`echo $xx | wc -w`
1094        if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
1095                            else CMDLINE="$CMDLINE '$xx'" ; fi
1096    done
1097    #for xx in "$@" ; do CMDLINE="$CMDLINE '$xx'" ; done
1098  MACH=`hostname`  MACH=`hostname`
1099  UNAMEA=`uname -a`  UNAMEA=`uname -a`
1100  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
1101  BASE="tr_"$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
1102    if test "x$OUTDIR" != x ; then
1103        BASE="tr_"$OUTDIR"_"$DATE"_"
1104    else
1105        short_name=`hostname | sed 's/\..*$//'`
1106        BASE="tr_"$short_name"_"$DATE"_"
1107    fi
1108  DNUM=0  DNUM=0
1109  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
1110  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 776  if test "x$RETVAL" != x0 ; then Line 1118  if test "x$RETVAL" != x0 ; then
1118      exit 1      exit 1
1119  fi  fi
1120  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
 printf "Start time:  " >> $SUMMARY  
1121  start_date=`date`  start_date=`date`
1122  echo $start_date > $SUMMARY  echo $start_date > $SUMMARY
1123    echo 'run:' $CMDLINE >> $SUMMARY
1124    echo 'on :' $UNAMEA  >> $SUMMARY
1125    
1126  of_path=  of_path=
1127  if test "x$OPTFILE" != xNONE ; then  if test "x$OPTFILE" != xNONE ; then
# Line 807  else Line 1150  else
1150  fi  fi
1151  echo  echo
1152  echo >> $SUMMARY  echo >> $SUMMARY
1153  if test "x$ADM" = x ; then  if test "x$ADM" = x -a "x$OADM" = x; then
1154      line_0="            ----T-----  ----S-----  ----U-----  ----V-----"      if [ $MATCH_CRIT -lt 10 ] ;
1155        then line_0="default  "$MATCH_CRIT ;
1156        else line_0="default "$MATCH_CRIT ; fi
1157           line_0="$line_0  ----T-----  ----S-----  ----U-----  ----V-----"
1158    #   line_0="            ----T-----  ----S-----  ----U-----  ----V-----"
1159      line_1="G D M    c        m  s        m  s        m  s        m  s"      line_1="G D M    c        m  s        m  s        m  s        m  s"
1160      line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."      line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
1161      line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"      line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
1162      line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."      line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
1163      for ii in 1 2 3 4 5 ; do      for ii in $PTRACERS_NUM ; do
         #  tst=`eval 'echo $HAVE_PTR0'$ii`  
         #  if test "x$tst" = xt ; then  
1164          line_0="$line_0  --PTR 0"$ii"--"          line_0="$line_0  --PTR 0"$ii"--"
1165          line_1="$line_1        m  s"          line_1="$line_1        m  s"
1166          line_2="$line_2  m  m  e  ."          line_2="$line_2  m  m  e  ."
1167          line_3="$line_3  i  a  a  d"          line_3="$line_3  i  a  a  d"
1168          line_4="$line_4  n  x  n  ."          line_4="$line_4  n  x  n  ."
         #  fi  
1169      done      done
1170      echo "$line_0" | tee -a $SUMMARY      echo "$line_0" | tee -a $SUMMARY
1171      echo "$line_1" | tee -a $SUMMARY      echo "$line_1" | tee -a $SUMMARY
# Line 832  if test "x$ADM" = x ; then Line 1176  if test "x$ADM" = x ; then
1176  else  else
1177      echo "ADJOINT=true" >> $SUMMARY      echo "ADJOINT=true" >> $SUMMARY
1178      echo >> $SUMMARY      echo >> $SUMMARY
1179        if [ $MATCH_CRIT -lt 10 ] ;
1180        then line_0="default     "$MATCH_CRIT ;
1181        else line_0="default    "$MATCH_CRIT ; fi
1182        echo "$line_0" | tee -a $SUMMARY
1183      cat << EOF | tee -a $SUMMARY      cat << EOF | tee -a $SUMMARY
1184  G D M    C  G  G D M    C  G
1185  E p a R  o  r  E p a R  o  r
# Line 843  fi Line 1191  fi
1191    
1192  #  ...and each test directory...  #  ...and each test directory...
1193  for dir in $TESTDIRS ; do  for dir in $TESTDIRS ; do
1194        
1195        # set builddir & rundir:
1196        builddir="build"
1197        if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1198        rundir="run"
1199        if test ! -d $dir/$rundir ; then
1200            rundir=$builddir
1201        fi
1202        CODE_DIR=$dir/$code_dir
1203        BUILD_DIR=$dir/$builddir
1204    
1205      #  Cleanup only!      #  Cleanup only!
1206      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1207          if test -r $dir/build/Makefile ; then          echo -n '  --- dir:' $BUILD_DIR ': '
1208              ( cd $dir/build ; make CLEAN )          makeclean $BUILD_DIR
1209            rm -f $BUILD_DIR/$EXECUTABLE
1210            if test -d $dir/$rundir/CVS ; then
1211                echo -n '  --- dir:' $dir/$rundir ': '
1212                run_clean $dir/$rundir
1213          fi          fi
1214          if test -r $dir/input/Makefile ; then          trdir=`( cd $dir ; find . -type d -name "tr_run.*" -print | sed 's/^.\///')`
1215              ( cd $dir/input ; make CLEAN )          ttd=`echo $trdir | wc -w`
1216            if test $ttd != 0 ; then
1217                echo '  --- rm dir:' $trdir
1218                ( cd $dir ; rm -rf $trdir )
1219          fi          fi
1220          continue          continue
1221      fi      fi
1222    
1223      #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
1224      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
1225      fout=      fout=$dir"/results/"$ref_outp
     if test "x$ADM" = x ; then  
         fout=$dir"/results/output.txt"  
     else  
         fout=$dir"/results_ad/output.txt_adm"  
     fi  
1226      if test ! -r $fout ; then      if test ! -r $fout ; then
1227          echo "can't read \"$fout\" -- skipping $dir"          echo "can't read \"$fout\" -- skipping $dir"
1228          continue          continue
1229      fi      fi
1230    
1231      # Check for additional types of monitor output      # Check for specific files for particular type of run
     check_for_add_mon_output  $fout  
1232    
1233      builddir="input"      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1234      rundir="input"          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1235      use_seperate_build=0          continue
     if test -d $dir/build -a -r $dir/build ; then  
         builddir="build"  
         rundir="build"  
         use_seperate_build=1  
         linkdata $use_seperate_build $dir/$rundir  
1236      fi      fi
1237            if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1238      #  Check whether there are "extra runs" for this testdir          echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1239      extra_runs=          continue
     if test "x$ADM" = x -a "x$use_seperate_build" = x1 ; then  
         ex_run_dirs=`( cd $dir ; echo input.* )`  
         echo "ex_run_dirs='$ex_run_dirs'"  
         for exd in $ex_run_dirs ; do  
             name=`echo $exd | sed -e 's/input.//g'`  
             outf="$dir/results/output.txt.$name"  
             if test -f $outf -a -r $outf ; then  
                 extra_runs="$extra_runs $name"  
             fi  
         done  
1240      fi      fi
1241        if test "x$MPI" = "xt" -a "x$MULTI_THREAD" = "xt" ; then
1242      if test "x$ADM" = x ; then        retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/input/eedata.mth"`
1243          code_dir=code        if test $retv != 0 ; then
1244          CODE_DIR=$dir/code          echo "input/eedata.mth tiling misfit -- skipping $dir"
1245      else          continue
1246          code_dir=code_ad        fi
         CODE_DIR=$dir/code_ad  
1247      fi      fi
     BUILD_DIR=$dir/$builddir  
1248    
1249      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then      #  Check whether there are "extra runs" for this testdir
1250          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"      extra_runs=
1251          continue      if test "x$NORUN" = xf ; then
1252            ex_run_dirs=`( cd $dir ; echo $inputdir.* )`
1253      fi      fi
1254        #echo "ex_run_dirs='$ex_run_dirs'"
1255        for exd in $ex_run_dirs ; do
1256            name=`echo $exd | sed -e "s/$inputdir\.//"`
1257            refExOut=`echo $ref_outp | sed "s/\./.${name}./"`
1258            outf="$dir/results/$refExOut"
1259            if test -f $outf -a -r $outf ; then
1260              if test "x$MULTI_THREAD" = "xt" ; then
1261                if test -r $dir"/"$exd"/eedata.mth" ; then
1262                  if test "x$MPI" = "xt" ; then
1263                    retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/"$exd"/eedata.mth"`
1264                    if test $retv = 0 ; then
1265                        extra_runs="$extra_runs $name"
1266                    else
1267                        echo $exd"/eedata.mth tiling misfit -- skipping $dir"
1268                    fi
1269                  else
1270                    extra_runs="$extra_runs $name"
1271                  fi
1272                #else echo $dir"/"$exd"/eedata.mth: not found"
1273                fi
1274              else
1275                extra_runs="$extra_runs $name"
1276              fi
1277            fi
1278        done
1279    
1280      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1281      echo      echo
1282      echo "Experiment:  $dir"      if test "x$extra_runs" = "x" ; then
1283           echo "Experiment:  $dir"
1284        else
1285           echo "Experiment:  $dir ; extra_runs=$extra_runs"
1286        fi
1287      echo      echo
1288      unset genmake makedepend make run      unset genmake makedepend make run
1289      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'      results=$EMPTY_RESULTS
1290    
1291      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1292      rel_CDIR=$DRESULTS"/"$dir      rel_CDIR=$DRESULTS"/"$dir
1293      mkdir $rel_CDIR      mkdir $rel_CDIR
1294      CDIR=`pwd`"/$rel_CDIR"      CDIR=`pwd`"/$rel_CDIR"
1295        
1296      if test "x$CLEANUP" = xt ; then      if test "x$NORUN" = xt ; then
1297          makeclean $dir/$builddir              run=N
1298            genmakemodel $dir/$builddir && genmake=Y \
1299                && makeclean $dir/$builddir \
1300                && run_clean $dir/$rundir \
1301                && symlink_mpifiles $dir $code_dir $builddir \
1302                && makedependmodel $dir/$builddir && makedepend=Y \
1303                && makemodel $dir/$builddir && make=Y
1304      else      else
1305          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1306              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1307                && run_clean $dir/$rundir \
1308              && symlink_mpifiles $dir $code_dir $builddir \              && symlink_mpifiles $dir $code_dir $builddir \
1309              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1310              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1311              && linkdata $use_seperate_build $dir/$rundir \              && linkdata $dir/$rundir $inputdir input \
1312              && runmodel $dir/$rundir && run=Y \              && runmodel $dir/$rundir && run=Y \
1313              && results=`testoutput $dir $rundir`              && results=`testoutput_run $dir $rundir $ref_outp`
1314      fi      fi
1315        
1316        #echo "results='$results'"
1317      echo      echo
     if test "x$ADM" = x ; then  
1318          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1319          echo          echo
1320          echo "$fres" >> $SUMMARY          echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1321          echo "fresults='$fres'" > $CDIR"/summary.txt"          touch $CDIR"/summary.txt"
1322            echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1323          echo "MACH='$MACH'" >> $CDIR"/summary.txt"          echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1324          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1325          echo "DATE='$DATE'" >> $CDIR"/summary.txt"          echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1326          echo "tdir='$dir'" >> $CDIR"/summary.txt"          echo "tdir='$dir'" >> $CDIR"/summary.txt"
1327            if test "x$ADM" = xt ; then
1328                head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt"
1329                grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1330                                    >> $CDIR"/summary.txt"
1331            fi
1332    
         OLD_COMMAND=$COMMAND  
         COMMAND="./mitgcmuv > output.txt"  
1333          for ex in $extra_runs ; do          for ex in $extra_runs ; do
1334              test -e "$dir/tr_run.$ex" && rm -rf "$dir/tr_run.$ex"              unset run
1335              mkdir "$dir/tr_run.$ex"              results=$EMPTY_RESULTS
1336              links=`( cd "$dir/input" > /dev/null 2>&1 ; ls -1 | grep -v CVS )`              #  reference output file
1337              (              refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1338                  cd "$dir/tr_run.$ex"              #  Create an output dir for each OPTFILE/tdir.ex combination
1339                  for i in $links; do              rel_CDIR=$DRESULTS"/"$dir"."$ex
1340                      ln -s ../input/$i $i              mkdir $rel_CDIR
1341                  done              CDIR=`pwd`"/$rel_CDIR"
1342              )              test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1343              links=`( cd "$dir/input.$ex" > /dev/null 2>&1 ; ls -1 | grep -v CVS )`              run_clean $dir/tr_run.$ex
1344              (              linkdata $dir/tr_run.$ex $inputdir.$ex $inputdir input
                 cd "$dir/tr_run.$ex"  
                 for i in $links; do  
                     test -e $i  &&  rm -f $i  
                     ln -s ../input.$ex/$i $i  
                 done  
                 ln -s ../$builddir/mitgcmuv mitgcmuv  
             )  
1345              runmodel $dir/tr_run.$ex && run=Y \              runmodel $dir/tr_run.$ex && run=Y \
1346                  && results=`testoutput $dir tr_run.$ex "."$ex`              && results=`testoutput_run $dir tr_run.$ex $refExOut`
             fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`  
1347              fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`              fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1348              fres="$fres.$ex"              fres="$fres.$ex"
1349              echo              echo
1350              echo "$fres" >> $SUMMARY              echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1351              echo "fresults='$fres'" > $CDIR"/summary.txt"              touch $CDIR"/summary.txt"
1352                echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1353              echo "MACH='$MACH'" >> $CDIR"/summary.txt"              echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1354              echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"              echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1355              echo "DATE='$DATE'" >> $CDIR"/summary.txt"              echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1356              echo "tdir='$dir'" >> $CDIR"/summary.txt"              echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1357                if test "x$ADM" = xt ; then
1358                    head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt"
1359                    grep -A3 'Seconds in section "ALL' $dir/tr_run.$ex/$OUTPUTFILE \
1360                                       >> $CDIR"/summary.txt"
1361                fi
1362                if test "x$POSTCLEAN" = xt ; then
1363                    run_clean $dir/tr_run.$ex
1364                fi
1365          done          done
1366          COMMAND=$OLD_COMMAND  
1367      else      #postclean $dir/$builddir
1368          fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`      if test "x$POSTCLEAN" = xt ; then
1369          fres=$fres"$results   $dir"          makeclean $dir/$builddir \
1370          echo              && run_clean $dir/$rundir
         echo "$fres" >> $SUMMARY  
         echo "fresults='$fres'" > $CDIR"/summary.txt"  
         echo "MACH='$MACH'" >> $CDIR"/summary.txt"  
         echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"  
         echo "DATE='$DATE'" >> $CDIR"/summary.txt"  
         echo "tdir='$dir'" >> $CDIR"/summary.txt"  
1371      fi      fi
1372        
1373      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1374        
1375  done  done
1376    
1377  printf "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1378  echo $start_date >> $SUMMARY  echo "$start_date" >> $SUMMARY
1379  printf "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
1380  date >> $SUMMARY  date >> $SUMMARY
1381    
# Line 1022  else Line 1400  else
1400              echo "An email containing results was sent to the following addresses:"              echo "An email containing results was sent to the following addresses:"
1401              echo "  \"$ADDRESSES\""              echo "  \"$ADDRESSES\""
1402              echo              echo
1403                test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"
1404                test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"
1405          fi          fi
         test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"  
         test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"  
1406      fi      fi
1407  fi  fi
1408    
1409  # rm -f tmp_cmpnum.f a.out  if test "x$QUICK" = xf -a "x$NORUN" = xf ; then
1410  rm -f tmp_cmpnum.c tmp_cmpnum      rm -f tr_cmpnum.c tr_cmpnum
1411    fi
1412    
1413  if test "x$CLEANUP" != xt ; then  if test "x$CLEANUP" != xt ; then
1414      cat $SUMMARY      cat $SUMMARY | sed 's/ \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \. //'
1415      if test -e tr_out.txt ; then      if test -e tr_out.txt ; then
1416          mv tr_out.txt tr_out.txt.old          mv tr_out.txt tr_out.txt.old
1417      fi      fi
1418      cat $SUMMARY > tr_out.txt      cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1419  fi  fi
1420    
1421  if test "x$DELDIR" = xt ; then  if test "x$DELDIR" = xt ; then

Legend:
Removed from v.1.49  
changed lines
  Added in v.1.136

  ViewVC Help
Powered by ViewVC 1.1.22