/[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.30 by edhill, Fri Dec 5 17:46:32 2003 UTC revision 1.135 by jmc, Thu Mar 4 21:26:27 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 "  (-mpi)                   compile and run using MPI"
16      echo "  (-ieee|-noieee)          if possible, use IEEE compiler flags"      echo "  (-ieee|-noieee)          if possible, use IEEE compiler flags"
17      echo "                             (DEF=\"noieee\")"      echo "                             (DEF=\"-ieee\")"
18      echo "  (-optfile=|-of=)STRING   list of optfiles to use"      echo "  (-gsl)                   compile with \"-gsl\" flag"
19        echo "  (-ur4|-use_r4)           if allowed, use real*4 type for '_RS' variable"
20        echo "  (-of=|-optfile=)STRING   list of optfiles to use"
21      echo "  (-a|-addr) STRING        list of email recipients"      echo "  (-a|-addr) STRING        list of email recipients"
22      echo "                             (DEF=\"edhill@mitgcm.org\")"      echo "                             (DEF=\"\" no email is sent)"
23      echo "  (-t|-tdir) STRING        list of test dirs to use"      echo "  (-mpd|-mpackdir) DIR     location of the mpack utility"
24      echo "                             (DEF=\"\" which builds all)"      echo "                             (DEF=\"../tools/mpack-1.6\")"
25        echo "  (-t|-tdir) STRING        list of group and/or exp. dirs to test"
26        echo "                             (recognized groups: basic, tutorials)"
27        echo "                             (DEF=\"\" which test all)"
28        echo "  (-skd|-skipdir) STRING   list of exp. dirs to skip"
29        echo "                             (DEF=\"\" which test all)"
30      echo "  (-b|-bash) STRING        preferred location of a \"bash\" or"      echo "  (-b|-bash) 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 "  (-oad)                   perform an OpenAD adjoint run"
35      echo "  (-command) STRING        command to run"      echo "  (-command) STRING        command to run"
36      echo "                             (DEF=\"make output.txt\")"      echo "                             (DEF=\"make output.txt\")"
37      echo "  (-m|-make) STRING        command to use for \"make\""      echo "  (-m|-make) STRING        command to use for \"make\""
38      echo "                             (DEF=\"make\")"      echo "                             (DEF=\"make\")"
39        echo "  (-odir) STRING           used to build output directory name"
40        echo "                             (DEF=\"hostname\")"
41        echo "  (-ptr|-ptracers) STRING  specify which ptracers to test"
42        echo "                             (DEF=\"1 2 3 4 5\")"
43        echo "  (-match) NUMBER          Matching Criteria (number of digits)"
44        echo "                             (DEF=\"12\")"
45        echo "  (-j) JOBS                use \"make -j JOBS\" for parallel builds"
46      echo "  (-clean)                 *ONLY* run \"make CLEAN\""      echo "  (-clean)                 *ONLY* run \"make CLEAN\""
47        echo "  (-norun|-nr)             skip the \"runmodel\" stage (stop after 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"
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    
69  #  build the mpack utility  #  build the mpack utility
70  build_mpack()  build_mpack()
71  {  {
72      echo -n "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 54  build_mpack() Line 80  build_mpack()
80              echo              echo
81              HAVE_MPACK=f              HAVE_MPACK=f
82          fi          fi
         echo -n "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 68  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      # 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 1>&2          echo testoutput_var: grep "$2" $1/results/$5 1>&2
131      fi      fi
132      grep "$2" $1/results/output.txt | 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 122  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
       
     return $digits_of_similarity  
 }  
   
 dashnum()  
 {  
     # dashnum n1 n2 n3 ...  
     #  
     #  print numbers using %3i format or "--" if number = 99  
181    
182      for num in $@ ; do      return $digits_of_similarity
         if [ $num = 99 ]; then  
             printf ' --'  
         else  
             printf '%3i' $num  
         fi  
     done  
 }  
   
 testoutput_ad()  
 {  
     grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $5}' > t05.txt  
     grep $3 $1/$2/output.txt_adm | awk '{print NR " " $5}' > t15.txt  
     grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $6}' > t06.txt  
     grep $3 $1/$2/output.txt_adm | awk '{print NR " " $6}' > t16.txt  
     join t05.txt t15.txt > t5.txt  
     join t06.txt t16.txt > t6.txt  
     echo "-1" >> t5.txt  
     echo "-1" >> t6.txt  
     digits_5=`./tmp_cmpnum < t5.txt`  
     digits_6=`./tmp_cmpnum < t6.txt`  
     dashnum $digits_5 $digits_6  
     rm -f t[01][56].txt t[56].txt  
183  }  }
184    
185  testoutput()  testoutput_run()
186  {  {
187      # testoutput directory subdir      # testoutput_run directory subdir reference_output
188      #      #
189      #  test output in "directory"      #  test output from 1 run in "directory"
190      if test "x$ADM" = x ; then  # --> same processing for adjoint & forward test
191          if [ $debug -gt 0 ]; then          # default list of output variables to be checked:
192              echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2          #  1rst : main variable used to decide if it pass or FAIL
193          fi          #  others : number of matching digits to be printed in summary.txt
194          testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2; cg2dres=$?          listChk=$DEF_CHECK_LIST
195          if [ $debug -gt 0 ]; then          #  load experiment-specific list from file "tr_checklist" (if it exist)
196              echo testoutput: cg2dres=$cg2dres 1>&2          if test -r $1/$2/tr_checklist ; then listChk=`cat $1/$2/tr_checklist` ; fi
197          fi          sVar=`echo $listChk | awk '{print $1}'`
198          testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2; tmin=$?          # remove 1rst var and expand the list: + => min max mean s.d
199          testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2; tmax=$?          listVar=`echo $listChk | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' \
200          testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2; tmean=$?                                 | sed 's/+//g' | sed "s/^$sVar//"`
201          testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2; tsd=$?          if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(I)='$listVar'" 1>&2 ; fi
202          testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2; smin=$?          # check for ptracer output in reference_output file :
203          testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2; smax=$?          outpref=$1/results/$3
204          testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2; smean=$?          ptr_mon="trcstat_ptracerXX_min trcstat_ptracerXX_max"
205          testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2; ssd=$?          ptr_mon="$ptr_mon trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
206          testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2; umin=$?          for ii in $PTRACERS_NUM ; do
207          testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2; umax=$?              ptrfound=0
208          testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2; umean=$?              for jj in $ptr_mon ; do
209          testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2; usd=$?                  name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
210          testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2; vmin=$?                  tst=`grep $name $outpref | wc -l | awk '{print $1}'`
211          testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2; vmax=$?                  if test ! "x$tst" = x0 ; then ptrfound=1 ; fi
212          testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2; vmean=$?              done
213          testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2; vsd=$?              if test $ptrfound = '1' ; then
214          dashnum $cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd \                  eval "HAVE_PTR0"$ii"=t"
215              $umin $umax $umean $usd $vmin $vmax $vmean $vsd              else
216      else                  eval "HAVE_PTR0"$ii"=f"
217          testoutput_ad $1 $2 "precision_grdchk_result"                if test "x$ADM" = x -a "x$OADM" = x; then
218      fi                # 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
223            #   eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"' 1>&2
224            done
225            tst=`echo $sVar $listVar | awk '{ for(i=2;i<=NF;i++){if($i==$1)t+=1}; print t }'`
226            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              echo "==> WARNING: in checked list:" $listVar 1>&2
230            #- put it back once:
231              listVar=" $sVar "`echo "$listVar " | sed "s/ $sVar / /g"`
232            fi
233            if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(M)='$listVar'" 1>&2 ; fi
234            echo "listVar='$listVar'" > $CDIR"/summary.txt"
235            allargs=""
236            for xx in $listVar
237            do
238              case $xx in
239               'PS')  if [ $debug -gt 0 ]
240                      then echo testoutput_run: testoutput_var $1 cg2d_init_res 1>&2 ; fi
241                      testoutput_var $1 "cg2d_init_res" "Press. Solver (cg2d)" $2 $3; yy=$?
242                      if [ $debug -gt 0 ] ; then echo testoutput_run: cg2dres=$yy 1>&2 ; fi ;;
243              'Cost') testoutput_var $1 "ADM  precision_derivative_cost" "ADM Cost" $2 $3; yy=$? ;;
244              'Grad') testoutput_var $1 "ADM  precision_derivative_grad" "ADM Grad" $2 $3; yy=$? ;;
245               'Tmn') testoutput_var $1 "dynstat_theta_min"  "Theta minimum"  $2 $3; yy=$? ;;
246               'Tmx') testoutput_var $1 "dynstat_theta_max"  "Theta maximum"  $2 $3; yy=$? ;;
247               'Tav') testoutput_var $1 "dynstat_theta_mean" "Theta mean"     $2 $3; yy=$? ;;
248               'Tsd') testoutput_var $1 "dynstat_theta_sd"   "Theta Std.Dev"  $2 $3; yy=$? ;;
249               'Smn') testoutput_var $1 "dynstat_salt_min"  "Salt minimum"    $2 $3; yy=$? ;;
250               'Smx') testoutput_var $1 "dynstat_salt_max"  "Salt maximum"    $2 $3; yy=$? ;;
251               'Sav') testoutput_var $1 "dynstat_salt_mean" "Salt mean"       $2 $3; yy=$? ;;
252               'Ssd') testoutput_var $1 "dynstat_salt_sd"   "Salt Std.Dev"    $2 $3; yy=$? ;;
253               'Umn') testoutput_var $1 "dynstat_uvel_min"  "U minimum"       $2 $3; yy=$? ;;
254               'Umx') testoutput_var $1 "dynstat_uvel_max"  "U maximum"       $2 $3; yy=$? ;;
255               'Uav') testoutput_var $1 "dynstat_uvel_mean" "U mean"          $2 $3; yy=$? ;;
256               'Usd') testoutput_var $1 "dynstat_uvel_sd"   "U Std.Dev"       $2 $3; yy=$? ;;
257               '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               'Vav') testoutput_var $1 "dynstat_vvel_mean" "V mean"          $2 $3; yy=$? ;;
260               'Vsd') testoutput_var $1 "dynstat_vvel_sd"   "V Std.Dev"       $2 $3; yy=$? ;;
261            'pt1mn'|'pt2mn'|'pt3mn'|'pt4mn'|'pt5mn') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
262               testoutput_var $1 "trcstat_ptracer0"$ii"_min"  "p0"$ii"_min"   $2 $3; yy=$? ;;
263            'pt1mx'|'pt2mx'|'pt3mx'|'pt4mx'|'pt5mx') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
264               testoutput_var $1 "trcstat_ptracer0"$ii"_max"  "p0"$ii"_max"   $2 $3; yy=$? ;;
265            'pt1av'|'pt2av'|'pt3av'|'pt4av'|'pt5av') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
266               testoutput_var $1 "trcstat_ptracer0"$ii"_mean" "p0"$ii"_mean" $2 $3; yy=$? ;;
267            'pt1sd'|'pt2sd'|'pt3sd'|'pt4sd'|'pt5sd') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
268               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             'Qntmx') testoutput_var $1 "forcing_qnet_max" "Qnet maximum"  $2 $3; yy=$? ;;
271             'Qntav') testoutput_var $1 "forcing_qnet_mean" "Qnet mean"       $2 $3; yy=$? ;;
272             'Qntsd') testoutput_var $1 "forcing_qnet_sd"  "Qnet Std.Dev"  $2 $3; yy=$? ;;
273             'aSImn') testoutput_var $1 "seaice_area_min"   "SIce Area min"   $2 $3; yy=$? ;;
274             'aSImx') testoutput_var $1 "seaice_area_max"   "SIce Area max"   $2 $3; yy=$? ;;
275             'aSIav') testoutput_var $1 "seaice_area_mean"  "SIce Area mean"  $2 $3; yy=$? ;;
276             '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             '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             'hSIsd') testoutput_var $1 "seaice_heff_sd"    "SIce Heff StDv"  $2 $3; yy=$? ;;
281            'AthSiG') testoutput_var $1 "thSI_Ice_Area_G" "thSIc Area Global" $2 $3; yy=$? ;;
282            '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 211  genmakemodel() Line 309  genmakemodel()
309      if test "x$NOGENMAKE" = xt ; then      if test "x$NOGENMAKE" = xt ; then
310          echo "genmake skipped!"          echo "genmake skipped!"
311      else      else
312          GENMAKE2="$BASH ../../../tools/genmake2"          if test "x$BASH" = x ; then
313                GENMAKE2="../../../tools/genmake2"
314            else
315                GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
316            fi
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              cp Makefile $CDIR              #  Reduce the size of the testing emails!
361                head -100 Makefile > $CDIR/Makefile_head
362              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
363                  tail make.log                  tail make.log
364                  echo "genmakemodel: genmake failed" 1>&2                  echo "genmakemodel: genmake failed" 1>&2
# Line 247  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 301  makemodel() Line 452  makemodel()
452          cd $1;          cd $1;
453          if test -r Makefile ; then          if test -r Makefile ; then
454              printf 'make ... ' 1>&2              printf 'make ... ' 1>&2
455              if test "x$ADM" = x ; then              if test "x$ADM" = xt ; then
                 $MAKE >> make.log 2>&1  
             else  
456                  $MAKE adall >> make.log 2>&1                  $MAKE adall >> make.log 2>&1
457                elif test "x$OADM" = xt ; then
458                    $MAKE adAll >> make.log 2>&1
459                else
460                    if test "x$JOBS" = x ; then
461                        $MAKE >> make.log 2>&1
462                    else
463                        $MAKE -j $JOBS >> make.log 2>&1
464                    fi
465              fi              fi
466              RETVAL=$?              RETVAL=$?
467              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
468                  tail make.log                  tail make.log
469                  echo failed 1>&2                  echo failed 1>&2
470                  cp make.log $CDIR"/make.log"                  cp make.log $CDIR"/make.log"
471                    rm -f $EXECUTABLE
472                  return 1                  return 1
473              else              else
474                  echo successful 1>&2                  echo successful 1>&2
# Line 331  symlink_mpifiles() Line 489  symlink_mpifiles()
489      CODE_DIR=$dir/$code_dir      CODE_DIR=$dir/$code_dir
490    
491      # These are files that should replace their counter-part when using -mpi      # These are files that should replace their counter-part when using -mpi
492      MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`      MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi" -print)`
493    
494      #  Is this an MPI run?      #  Is this an MPI run?
495      if test "x$MPI" = xt ; then      if test "x$MPI" = xt ; then
# Line 344  symlink_mpifiles() Line 502  symlink_mpifiles()
502              RETVAL=$?              RETVAL=$?
503              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
504                  if ! test -f $BUILD_DIR/$i ; then                  if ! test -f $BUILD_DIR/$i ; then
505                  #echo Linking $name to $i                      #echo Linking $name to $i
506                      (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)                      (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
507                  fi                  fi
508              fi              fi
509          done          done
510      else      else
511      # NO: We undo any _mpi symbolically linked files          # NO: We undo any _mpi symbolically linked files
512          for ii in $MPI_FILES ; do          for ii in $MPI_FILES ; do
513              i=`echo $ii | sed 's:^\./::'`              i=`echo $ii | sed 's:^\./::'`
514              name=`echo $i | sed 's:_mpi::' `              name=`echo $i | sed 's:_mpi::' `
515              if test -L $BUILD_DIR/$name ; then              if test -L $BUILD_DIR/$name ; then
516                  linktarg=`(cd $BUILD_DIR; readlink $name)`                  cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
517                  if test $linktarg = "../$code_dir/$name"_mpi ; then                  RETVAL=$?
518                  #echo Un-linking $name from $linktarg                  if test "x$RETVAL" = x0 ; then
519                        #echo Un-linking $name from $linktarg
520                      rm -f $BUILD_DIR/$name                      rm -f $BUILD_DIR/$name
521                  fi                  fi
522              fi              fi
523          done          done
524      fi      fi
525        
526  }  }
527    
528  linkdata()  linkdata()
529  {  {
530      # linkdata flag      # linkdata run_dir input_dir_1 input_dir_2 ...
531      #      #
532      # symbolically link data files to run directory      # symbolically link data files to run directory
533      if test "x$1" = x1 ; then      if test -d $1 ; then
534          (          (
535              cd $2              cd $1 ; shift
536              if test "x$ADM" = x ; then              inpMPI=`(cd ../$1 ; find . -name "*.mpi" -print | sed 's:^\./::')`
537                  files=`( cd ../input ; ls -1 | grep -v CVS )`              for xx in $inpMPI ; do
538                  for i in $files ; do                if test -r "../"$1"/"$xx ; then
539                      if test ! -d "../input/"$i ; then                  # found 1 _mpi sfx file in 1rst input dir and it is readable
540                          ln -sf "../input/"$i $i                  yy=`echo $xx | sed 's:\.mpi$::'`
541                    if test "x$MPI" = "xt" ; then
542                    # mpi test: remove symbolic link & link _mpi sfx file
543                        if test -h $yy ; then rm -f $yy ; fi
544                        if test ! -r $yy ; then
545                            ln -sf "../"$1"/"$xx $yy ;
546                            printf "$xx " 1>&2
547                      fi                      fi
548                  done                  else
549              else                  # not mpi test: remove symbolic link
550                  files=`( cd ../input ; ls -1 *.bin | grep -v CVS )`                      if test -h $yy ; then rm -f $yy ; fi
551                  for i in $files ; do                  fi
552                      if test ! -d "../input/"$i ; then                fi
553                          ln -sf "../input/"$i $i              done
554                      fi              if test -r "../"$1"/eedata.mth" ; then
555                  done              # found eedata.mth in 1rst input dir and it is readable
556                  files=`( cd ../input_ad ; ls -1 | grep -v CVS )`                  if test "x$MULTI_THREAD" = "xt" ; then
557                  for i in $files ; do                  # multi-threaded test: remove symbolic link & link eedata.mth
558                      if test ! -d "../input_ad/"$i ; then                      if test -h eedata ; then rm -f eedata ; fi
559                          ln -sf "../input_ad/"$i $i                      if test ! -r eedata ; then
560                            ln -sf "../"$1"/eedata.mth" eedata ;
561                            printf 'eedata.mth ' 1>&2
562                      fi                      fi
563                  done                  else
564                    # not multi-threaded test: remove eedata symbolic link
565                        if test -h eedata ; then rm -f eedata ; fi
566                    fi
567              fi              fi
568                prevDir='NONE'
569                for ldir in $* ; do
570                    if test -d "../"$ldir -a $ldir != $prevDir ; then
571                        printf 'ldir='${ldir} 1>&2
572                        files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
573                        for i in $files ; do
574                            if test ! -d "../"$ldir/$i ; then
575                                if test ! -r $i  ; then
576                                    printf ' '$i 1>&2
577                                    ln -sf "../"$ldir"/"$i $i
578                                fi
579                            fi
580                        done
581                        if test -x "../"$ldir"/"prepare_run ; then
582                            "../"$ldir"/"prepare_run
583                        fi
584                        printf ' ; ' 1>&2
585                    fi
586                    prevDir=$ldir
587                done
588          )          )
589      fi      fi
590  }  }
# Line 403  runmodel() Line 593  runmodel()
593  {  {
594      # runmodel directory      # runmodel directory
595      #      #
596      #  runs "$COMMAND in "directory"      #  runs "$COMMAND in "directory"
597      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
598      (      (
599          cd $1          cd $1
600          printf 'runmodel ... ' 1>&2          printf 'runmodel in %s ...' $1 1>&2
601          # make output.txt          # make output.txt
602          $COMMAND >> run.log 2>&1          echo
603          RETVAL=$?          if test -L $EXECUTABLE ; then
604          if test "x$RETVAL" = x0 ; then            if test -x "../"$builddir"/"$EXECUTABLE ; then
605              echo successful 1>&2              diff -q $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
606              if test "x$ADM" = x ; then              outD=$? ; if test $outD != 0 ; then rm -f $EXECUTABLE ; fi
607                  cp output.txt $CDIR"/output.txt"            else rm -f $EXECUTABLE
608              fi
609            fi
610            if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
611                echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_tmp
612                ln -sf "../"$builddir"/"$EXECUTABLE .
613            fi
614            if test ! -x $EXECUTABLE ; then
615                    rm -f $RUNLOG ; touch $RUNLOG
616                    if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
617                    echo " no executable:" $EXECUTABLE >> $RUNLOG
618                    RETVAL=8
619                    ENDVAL=-1
620            else
621                if test ! -f $OUTPUTFILE -o $OUTPUTFILE -ot $EXECUTABLE ; then
622                  # output do not exist or is older than executable:
623                    rm -f $RUNLOG ; touch $RUNLOG
624                    if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
625                    ( eval $COMMAND ) >> $RUNLOG 2>&1
626                    RETVAL=$?
627              else              else
628                  cp output.txt_adm $CDIR"/output.txt_adm"                  RETVAL=0
629                    if test -f $RUNLOG ; then
630                        if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
631                        echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
632                    else
633                        touch $RUNLOG
634                        if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
635                        echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
636                        echo " no previous $RUNLOG: assume NORMAL END" >> $RUNLOG 2>&1
637                    fi
638              fi              fi
639                ENDVAL=`cat $RUNLOG | grep -v 'ABNORMAL END' | grep -c 'NORMAL END'`
640            fi
641            rm -f run.log_tmp
642            if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
643                tail $RUNLOG
644                echo successful 1>&2
645                # === Reduce the size of the testing emails!
646                #cp $OUTPUTFILE $CDIR"/"$OUTPUTFILE
647                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
648                return 0
649            elif [ $RETVAL -ne 0 -a $ENDVAL -gt 0 ] ; then
650                #-- for some weird cases (run is finihed but with error code)
651                tail $RUNLOG
652                echo finished with error '(run:' $RETVAL ' end:' $ENDVAL ')' 1>&2
653              return 0              return 0
654          else          else
655              tail run.log              tail $RUNLOG
656              echo failed 1>&2              echo failed '(run:' $RETVAL ' end:' $ENDVAL ')' 1>&2
657              cp run.log $CDIR"/run.log"              cp $RUNLOG $CDIR"/"$RUNLOG
658                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
659              return 1              return 1
660          fi          fi
661      )      )
# Line 432  createcodelet() Line 665  createcodelet()
665  {  {
666      # create codelet for comparing model output      # create codelet for comparing model output
667    
668      echo -n "creating the comparison code...  "      printf "creating the comparison code (using CC=$CC)...  "
669      cat > tmp_cmpnum.c <<EOF      cat > tr_cmpnum.c <<EOF
670  #include <stdio.h>  #include <stdio.h>
671  #include <math.h>  #include <math.h>
672  int main( int argc, char** argv )  {  int main( int argc, char** argv )  {
673    int linnum,best;    int linnum,cmplin,best,lncnt;
674    double a,b,diff;    double a,b,abave,relerr;
675    best = -16;    best = -22;
676    while( 1 )  {    lncnt = 0;
677      while( 1 & ( (lncnt+=1) < 999 ) )  {
678      scanf("%d", &linnum);      scanf("%d", &linnum);
679      if (linnum == -1)  break;      if (linnum == -1)  break;
680      scanf("%lf", &a);  scanf("%lf", &b);      scanf("%lf", &a);  scanf("%lf", &b);
681      diff = 0.5*(fabs(a)+fabs(b));      abave = 0.5*(fabs(a)+fabs(b));
682      if (diff > 1.e-12) {      if ( abave == abave ) {
683        diff=fabs(a-b)/diff;        if (abave > 0.0) {
684        if (diff > 0.0) {          relerr=fabs(a-b)/abave;
685          linnum = (int)log10(diff);          if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
686          best = (best > linnum) ? best : linnum;          else { cmplin = -16 ; }
687            best = (best > cmplin) ? best : cmplin; }
688          else { cmplin = -22 ; }
689       /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
690        }        }
691        else {     else {
692          if (best == -16 && diff != 0)  best = -22;     /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
693        }        break; }
     }  
694    }    }
695      if (lncnt == 999) best=-29;
696      if (linnum != -1) best=-99;
697    printf("%d\n", -best);    printf("%d\n", -best);
698    return 0;    return 0;
699  }  }
700  EOF  EOF
701      cc -o tmp_cmpnum tmp_cmpnum.c -lm      $CC -o tr_cmpnum tr_cmpnum.c -lm
702    
703      if [ -x ./tmp_cmpnum ]; then      if [ -x ./tr_cmpnum ]; then
704          echo "OK"          echo "OK"
705          return 0          return 0
706      else      else
707          echo          echo
708          echo "ERROR: failed to compile comparison code"          echo "ERROR: failed to compile comparison code -- please specify"
709            echo "  a C compiler using the CC environment variable."
710          exit 1          exit 1
711      fi      fi
712  }  }
# Line 479  formatresults() Line 718  formatresults()
718      nm=$1      nm=$1
719      printf '%s %s %s %s' $2 $3 $4 $5      printf '%s %s %s %s' $2 $3 $4 $5
720      shift; shift; shift; shift; shift;      shift; shift; shift; shift; shift;
721      printf '%3s' $@      listPrt=$@
722            listRes=`echo $listPrt | sed 's/>//' | sed 's/<//'`
723      if [ $1 = '--' ]; then      xx=`echo $listPrt | sed 's/.*>//' | sed 's/<.*//' | awk '{print $1}'`
724        printf '%3s' $listPrt
725    #   line below does not work on hp-ux_ia64 : do those substitutions later on
726    #   printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</'
727    
728        if [ $xx = '..' ]; then
729            printf ' N/O '
730        elif [ $xx = '--' ]; then
731            printf ' N/O '
732        elif [ $xx = 99 ]; then
733          printf ' N/O '          printf ' N/O '
734      else      else
735          if [ $1 -gt 12 ]; then          if [ $xx -ge $MATCH_CRIT ]; then
736              printf ' pass'              printf ' pass'
737          else          else
738              printf ' FAIL'              printf ' FAIL'
# Line 492  formatresults() Line 740  formatresults()
740      fi      fi
741      printf '  %s' $nm      printf '  %s' $nm
742      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.  
743    
 Normal usage:  
  $0 *       Configure, compile, run and analyze in all experiment directories  
 EOF  
744  }  }
745    
746  scandirs()  scandirs()
747  {  {
748      if [ $# -eq 0 ]; then      if [ $# -eq 1 ]; then
749          for arg in * ; do          for arg in * ; do
750              test -d $arg/input && echo $arg              test -f $arg/$1 && echo $arg
751          done          done
752      else      else
753          echo $*          echo $*
754      fi      fi
755  }  }
756    
757    
758    check_eedata()
759    {
760        # check_eedata size.h eedata
761        if [ $# -eq 2 ] ; then
762          if test -f $1 -a -f $2 ; then
763          sx=`grep "^     & *nSx *=" $1 | sed "s/^     & *nSx *=//" | sed 's/, *$//'`
764          nx=`grep "^ *nTx *=" $2 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
765          if test "x$nx" = x ; then
766            rx=10
767          else
768            rx=`expr $sx % $nx`
769          fi
770          sy=`grep "^     & *nSy *=" $1 | sed "s/^     & *nSy *=//" | sed 's/, *$//'`
771          ny=`grep "^ *nTy *=" $2 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
772          if test "x$ny" = x ; then
773            ry=20
774          else
775            ry=`expr $sy % $ny`
776          fi
777          echo `expr $rx + $ry`
778        else
779          echo '-1'
780          fi
781        else
782          echo '-2'
783        fi
784    
785    }
786    
787  ###############################################################################  ###############################################################################
788    
789    
# Line 533  scandirs() Line 791  scandirs()
791  debug=0  debug=0
792  verbose=1  verbose=1
793  clean=0  clean=0
 expts=''  
 # ieee=1  
794    
795  IEEE=  IEEE=true
796  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
797      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
798  fi  fi
799    GSL=f
800    
801  CLEANUP=f  CLEANUP=f
802    NORUN=f
803  QUICK=f  QUICK=f
804  NOGENMAKE=f  NOGENMAKE=f
805  NOCLEAN=f  NOCLEAN=f
806  NODEPEND=f  NODEPEND=f
807    POSTCLEAN=f
808    
809  BASH=  BASH=
810  OPTFILE=NONE  OPTFILE=NONE
811  ADDRESSES=  ADDRESSES=
812  TESTDIRS=  TESTDIRS=
813    SKIPDIRS=
814  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
815  HAVE_MPACK=  HAVE_MPACK=
816  MPACK="$MPACKDIR/mpack"  MPACK=
817  COMMAND=  COMMAND=
818  MAKE=make  if test "x$MAKE" = x ; then
819        MAKE=make
820    fi
821    if test "x$CC" = x ; then
822        CC=cc
823    fi
824    JOBS=
825  MPI=f  MPI=f
826    MULTI_THREAD=f
827    OUTDIR=
828    DELDIR=
829    USE_R4=
830    
831  ADM=  ADM=
832    OADM=
833    
834    # list of pTracers to check for monitor output
835    PTRACERS_NUM="1 2 3 4 5"
836    
837    MATCH_CRIT=13
838    
839  echo -n "parsing options...  "  printf "parsing options...  "
840    
841  ac_prev=  ac_prev=
842  for ac_option ; do  for ac_option ; do
# Line 574  for ac_option ; do Line 849  for ac_option ; do
849      fi      fi
850    
851      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
852        
853      case $ac_option in      case $ac_option in
854                    
855          -help | --help | -h | --h)          -help | --help | -h | --h)
# Line 589  for ac_option ; do Line 864  for ac_option ; do
864              ac_prev=ADDRESSES ;;              ac_prev=ADDRESSES ;;
865          -addr=* | --addr=*)          -addr=* | --addr=*)
866              ADDRESSES=$ac_optarg ;;              ADDRESSES=$ac_optarg ;;
867            -mpackdir | --mpackdir | -mpd | --mpd)
868                ac_prev=MPACKDIR ;;
869            -mpackdir=* | --mpackdir=* | -mpd=* | --mpd=*)
870                MPACKDIR=$ac_optarg ;;
871    
872          -tdir | --tdir | -t | --t)          -tdir | --tdir | -t | --t)
873              ac_prev=TESTDIRS ;;              ac_prev=TESTDIRS ;;
874          -tdir=* | --tdir=*)          -tdir=* | --tdir=*)
875              TESTDIRS=$ac_optarg ;;              TESTDIRS=$ac_optarg ;;
876    
877            -skipdir | --skipdir | -skd | --skd)
878                ac_prev=SKIPDIRS ;;
879            -skipdir=* | --skipdir=*)
880                SKIPDIRS=$ac_optarg ;;
881    
882          -bash | --bash | -b | --b)          -bash | --bash | -b | --b)
883              ac_prev=BASH ;;              ac_prev=BASH ;;
884          -bash=* | --bash=*)          -bash=* | --bash=*)
# Line 610  for ac_option ; do Line 894  for ac_option ; do
894          -make=* | --make=*)          -make=* | --make=*)
895              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
896    
897            -odir | --odir)
898                ac_prev=OUTDIR ;;
899            -odir=* | --odir=*)
900                OUTDIR=$ac_optarg ;;
901    
902            -ptracers | --ptracers | -ptr | --ptr)
903                ac_prev=PTRACERS_NUM ;;
904            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
905                PTRACERS_NUM=$ac_optarg ;;
906    
907            -match | --match ) ac_prev=MATCH_CRIT ;;
908            -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
909    
910            -j) ac_prev=JOBS ;;
911            -j=*) JOBS=$ac_optarg ;;
912    
913          -clean | --clean)          -clean | --clean)
914              CLEANUP=t ;;              CLEANUP=t ; DELDIR=t ;;
915    
916            -norun | --norun | -nr | --nr)
917                NORUN=t ;;
918          -quick | --quick | -q | --q)          -quick | --quick | -q | --q)
919              QUICK=t ;;              QUICK=t ;;
920          -nogenmake | --nogenmake | -ng | --ng)          -nogenmake | --nogenmake | -ng | --ng)
# Line 622  for ac_option ; do Line 924  for ac_option ; do
924          -nodepend | --nodepend | -nd | --nd)          -nodepend | --nodepend | -nd | --nd)
925              NODEPEND=t ;;              NODEPEND=t ;;
926    
927            -postclean | --postclean | -pc | --pc)
928                POSTCLEAN=t ;;
929    
930          -mpi) MPI=t ;;          -mpi) MPI=t ;;
931    
932            -mth) MULTI_THREAD=t ;;
933    
934          -adm | -ad) ADM=t ;;          -adm | -ad) ADM=t ;;
935    
936            -oad) OADM=t; NODEPEND=t ;;
937    
938          -ieee) IEEE=true ;;          -ieee) IEEE=true ;;
939          -noieee) IEEE= ;;          -noieee) IEEE= ;;
940            -gsl) GSL=t ;;
941    
942          -verbose) verbose=2 ;;          -verbose) verbose=2 ;;
943          -debug) debug=1 ;;          -debug) debug=1 ;;
944          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
945    
946            -deldir | -dd) DELDIR=t ;;
947    
948            -ur4|-use_r4) USE_R4=t ;;
949    
950            -ts) TS=t;;
951            -papis) PAPIS=t;;
952            -pcls) PCL=t;;
953    
954          -*)          -*)
955              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
956              usage              usage
957              ;;              ;;
958            
959          *)          *)
960              echo "Error: unrecognized argument: "$ac_option              echo "Error: unrecognized argument: "$ac_option
961              usage              usage
962              ;;              ;;
963            
964       esac       esac
965        
966  done  done
967    
968  if test "x$QUICK" = xt ; then  if test "x$QUICK" = xt ; then
# Line 653  if test "x$QUICK" = xt ; then Line 971  if test "x$QUICK" = xt ; then
971      NODEPEND=t      NODEPEND=t
972  fi  fi
973    
974    #- setting for forward or ADM testing
975    if test "x$ADM" = xt ; then
976        code_dir=code_ad
977        inputdir=input_ad
978        ref_outp="output_adm.txt"
979        EXECUTABLE="mitgcmuv_ad"
980    elif test "x$OADM" = xt ; then
981        code_dir=code_oad
982        inputdir=input_oad
983        ref_outp="output_oadm.txt"
984        EXECUTABLE="mitgcmuv_ad"
985    else
986        code_dir=code
987        inputdir=input
988        ref_outp="output.txt"
989        EXECUTABLE="mitgcmuv"
990    fi
991    
992  if test "x$TESTDIRS" = x ; then  if test "x$TESTDIRS" = x ; then
993      TESTDIRS=`scandirs`      LIST=`scandirs results/$ref_outp`
994    else
995        #- expand group of experiments:
996        LIST=" "
997        for xx in $TESTDIRS
998        do
999          case $xx in
1000            'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
1001                     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
1002                     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
1003                    ;;
1004            'tutorials')
1005                     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
1006            *)       LIST=${LIST}" "$xx ;;
1007          esac
1008        done
1009  fi  fi
1010    #echo 'LIST='${LIST}'<'
1011    #- skip dirs, remove duplicate and non-directory:
1012    TESTDIRS=" "
1013    count=0
1014    for xx in $LIST
1015    do
1016        yy=`echo $SKIPDIRS | grep -c $xx`
1017        if test $yy = 0 ; then
1018            if test -d $xx ; then
1019                yy=`echo $TESTDIRS | grep -c $xx`
1020                if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
1021            else count=1 ;
1022                echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
1023            fi
1024        else
1025            if test $count = 1 ; then echo -n ", \"$xx\""
1026            else count=1 ; echo "" ;  echo -n " skip: \"$xx\""
1027            fi
1028        fi
1029    done
1030    if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
1031    #echo 'TESTDIRS='${TESTDIRS}'<'
1032    
1033  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
1034      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
1035  fi  fi
1036    
1037  if test "x$ADM" = xt -a "x$COMMAND" = x ; then  RUNLOG="run.log"
1038      COMMAND="./mitgcmuv_ad > output.txt_adm 2>&1"  OUTPUTFILE=$ref_outp
 fi  
   
1039  if test "x$COMMAND" = x ; then  if test "x$COMMAND" = x ; then
1040      COMMAND="make output.txt"      COMMAND="./$EXECUTABLE > $OUTPUTFILE"
1041    fi
1042    if test "x$MPI" = xt ; then
1043        OUTPUTFILE="STDOUT.0000"
1044  fi  fi
1045    
1046  echo "OK"  echo "OK (COMMAND= $COMMAND )"
1047    
1048    # set the Default List of output variables to be checked:
1049    #  (use default or load experiment-specific list from file "tr_checklist")
1050    # content : 1rst = main variable used to decide if it pass or FAIL
1051    #         others = number of matching digits to be printed in summary.txt
1052    if test "x$ADM" = x -a "x$OADM" = x; then
1053        DEF_CHECK_LIST='PS PS T+ S+ U+ V+ pt1+ pt2+ pt3+ pt4+ pt5+'
1054        EMPTY_RESULTS='.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..'
1055        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1056        ii=`echo $EMPTY_RESULTS | awk '{print NF}'`
1057        EMPTY_RESULTS=$EMPTY_RESULTS`expr $LEN_CHECK_LIST - $ii | awk 'BEGIN{FS=":"}{for(i=1;i<=$1;i++){printf "  ."}}'`
1058    else
1059        DEF_CHECK_LIST='Grad Cost Grad'
1060        EMPTY_RESULTS='.. ..'
1061        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1062    fi
1063    
1064  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
1065  createcodelet  if test -x tr_cmpnum ; then
1066        echo "skipping comparison code build"
1067    else
1068        createcodelet
1069    fi
1070    
1071  #  build the mpack utility  #  build the mpack utility (if ADDRESSES = NONE, do it to test the build)
1072  build_mpack  if test "x$ADDRESSES" = x ; then
1073        echo "skipping mpack build"
1074    else
1075        build_mpack
1076    fi
1077    
1078  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
1079    CMDLINE=$0
1080    for xx in "$@" ; do nw=`echo $xx | wc -w`
1081        if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
1082                            else CMDLINE="$CMDLINE '$xx'" ; fi
1083    done
1084    #for xx in "$@" ; do CMDLINE="$CMDLINE '$xx'" ; done
1085  MACH=`hostname`  MACH=`hostname`
1086  UNAMEA=`uname -a`  UNAMEA=`uname -a`
1087  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
1088  BASE="tr_"$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
1089    if test "x$OUTDIR" != x ; then
1090        BASE="tr_"$OUTDIR"_"$DATE"_"
1091    else
1092        short_name=`hostname | sed 's/\..*$//'`
1093        BASE="tr_"$short_name"_"$DATE"_"
1094    fi
1095  DNUM=0  DNUM=0
1096  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
1097  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 695  if test "x$RETVAL" != x0 ; then Line 1105  if test "x$RETVAL" != x0 ; then
1105      exit 1      exit 1
1106  fi  fi
1107  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
 echo -n "Start time:  " >> $SUMMARY  
1108  start_date=`date`  start_date=`date`
1109  echo $start_date > $SUMMARY  echo $start_date > $SUMMARY
1110    echo 'run:' $CMDLINE >> $SUMMARY
1111    echo 'on :' $UNAMEA  >> $SUMMARY
1112    
1113  of_path=  of_path=
1114  if test "x$OPTFILE" != xNONE ; then  if test "x$OPTFILE" != xNONE ; then
# Line 726  else Line 1137  else
1137  fi  fi
1138  echo  echo
1139  echo >> $SUMMARY  echo >> $SUMMARY
1140  if test "x$ADM" = x ; then  if test "x$ADM" = x -a "x$OADM" = x; then
1141      cat << EOF | tee -a $SUMMARY      if [ $MATCH_CRIT -lt 10 ] ;
1142                  T           S           U           V      then line_0="default  "$MATCH_CRIT ;
1143  G D M    c        m  s        m  s        m  s        m  s      else line_0="default "$MATCH_CRIT ; fi
1144  E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .         line_0="$line_0  ----T-----  ----S-----  ----U-----  ----V-----"
1145  N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d  #   line_0="            ----T-----  ----S-----  ----U-----  ----V-----"
1146  2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .      line_1="G D M    c        m  s        m  s        m  s        m  s"
1147        line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
1148  EOF      line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
1149        line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
1150        for ii in $PTRACERS_NUM ; do
1151            line_0="$line_0  --PTR 0"$ii"--"
1152            line_1="$line_1        m  s"
1153            line_2="$line_2  m  m  e  ."
1154            line_3="$line_3  i  a  a  d"
1155            line_4="$line_4  n  x  n  ."
1156        done
1157        echo "$line_0" | tee -a $SUMMARY
1158        echo "$line_1" | tee -a $SUMMARY
1159        echo "$line_2" | tee -a $SUMMARY
1160        echo "$line_3" | tee -a $SUMMARY
1161        echo "$line_4" | tee -a $SUMMARY
1162        echo " "       | tee -a $SUMMARY
1163  else  else
1164      echo "ADJOINT=true" >> $SUMMARY      echo "ADJOINT=true" >> $SUMMARY
1165      echo >> $SUMMARY      echo >> $SUMMARY
1166        if [ $MATCH_CRIT -lt 10 ] ;
1167        then line_0="default     "$MATCH_CRIT ;
1168        else line_0="default    "$MATCH_CRIT ; fi
1169        echo "$line_0" | tee -a $SUMMARY
1170      cat << EOF | tee -a $SUMMARY      cat << EOF | tee -a $SUMMARY
1171  G D M    C  G  G D M    C  G
1172  E p a R  o  r  E p a R  o  r
# Line 749  fi Line 1178  fi
1178    
1179  #  ...and each test directory...  #  ...and each test directory...
1180  for dir in $TESTDIRS ; do  for dir in $TESTDIRS ; do
1181        
1182        # set builddir & rundir:
1183        builddir="build"
1184        if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1185        rundir="run"
1186        if test ! -d $dir/$rundir ; then
1187            rundir=$builddir
1188        fi
1189        CODE_DIR=$dir/$code_dir
1190        BUILD_DIR=$dir/$builddir
1191    
1192      #  Cleanup only!      #  Cleanup only!
1193      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1194          if test -r $dir/build/Makefile ; then          echo -n '  --- dir:' $BUILD_DIR ': '
1195              ( cd $dir/build ; make CLEAN )          makeclean $BUILD_DIR
1196            rm -f $BUILD_DIR/$EXECUTABLE
1197            if test -d $dir/$rundir/CVS ; then
1198                echo -n '  --- dir:' $dir/$rundir ': '
1199                run_clean $dir/$rundir
1200          fi          fi
1201          if test -r $dir/input/Makefile ; then          trdir=`( cd $dir ; find . -type d -name "tr_run.*" -print | sed 's/^.\///')`
1202              ( cd $dir/input ; make CLEAN )          ttd=`echo $trdir | wc -w`
1203            if test $ttd != 0 ; then
1204                echo '  --- rm dir:' $trdir
1205                ( cd $dir ; rm -rf $trdir )
1206          fi          fi
1207          continue          continue
1208      fi      fi
1209    
1210      #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
1211      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
1212      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  
1213      if test ! -r $fout ; then      if test ! -r $fout ; then
1214          echo "can't read \"$fout\" -- skipping $dir"          echo "can't read \"$fout\" -- skipping $dir"
1215          continue          continue
1216      fi      fi
1217    
1218      builddir="input"      # Check for specific files for particular type of run
     rundir="input"  
     use_seperate_build=0  
     if test -d $dir/build -a -r $dir/build ; then  
         builddir="build"  
         rundir="build"  
         use_seperate_build=1  
         linkdata $use_seperate_build $dir/$rundir  
     fi  
       
     if test "x$ADM" = x ; then  
         code_dir=code  
         CODE_DIR=$dir/code  
     else  
         code_dir=code_ad  
         CODE_DIR=$dir/code_ad  
     fi  
     BUILD_DIR=$dir/$builddir  
1219    
1220      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1221          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1222          continue          continue
1223      fi      fi
1224        if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1225            echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1226            continue
1227        fi
1228        if test "x$MPI" = "xt" -a "x$MULTI_THREAD" = "xt" ; then
1229          retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/input/eedata.mth"`
1230          if test $retv != 0 ; then
1231            echo "input/eedata.mth tiling misfit -- skipping $dir"
1232            continue
1233          fi
1234        fi
1235    
1236        #  Check whether there are "extra runs" for this testdir
1237        extra_runs=
1238        if test "x$NORUN" = xf ; then
1239            ex_run_dirs=`( cd $dir ; echo $inputdir.* )`
1240        fi
1241        #echo "ex_run_dirs='$ex_run_dirs'"
1242        for exd in $ex_run_dirs ; do
1243            name=`echo $exd | sed -e "s/$inputdir\.//"`
1244            refExOut=`echo $ref_outp | sed "s/\./.${name}./"`
1245            outf="$dir/results/$refExOut"
1246            if test -f $outf -a -r $outf ; then
1247              if test "x$MULTI_THREAD" = "xt" ; then
1248                if test -r $dir"/"$exd"/eedata.mth" ; then
1249                  if test "x$MPI" = "xt" ; then
1250                    retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/"$exd"/eedata.mth"`
1251                    if test $retv = 0 ; then
1252                        extra_runs="$extra_runs $name"
1253                    else
1254                        echo $exd"/eedata.mth tiling misfit -- skipping $dir"
1255                    fi
1256                  else
1257                    extra_runs="$extra_runs $name"
1258                  fi
1259                #else echo $dir"/"$exd"/eedata.mth: not found"
1260                fi
1261              else
1262                extra_runs="$extra_runs $name"
1263              fi
1264            fi
1265        done
1266    
1267      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1268      echo      echo
1269      echo "Experiment:  $dir"      if test "x$extra_runs" = "x" ; then
1270           echo "Experiment:  $dir"
1271        else
1272           echo "Experiment:  $dir ; extra_runs=$extra_runs"
1273        fi
1274      echo      echo
1275      unset genmake makedepend make run      unset genmake makedepend make run
1276      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'      results=$EMPTY_RESULTS
1277    
1278      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1279      rel_CDIR=$DRESULTS"/"$dir      rel_CDIR=$DRESULTS"/"$dir
1280      mkdir $rel_CDIR      mkdir $rel_CDIR
1281      CDIR=`pwd`"/$rel_CDIR"      CDIR=`pwd`"/$rel_CDIR"
1282        
1283      if test "x$CLEANUP" = xt ; then      if test "x$NORUN" = xt ; then
1284          makeclean $dir/$builddir              run=N
1285            genmakemodel $dir/$builddir && genmake=Y \
1286                && makeclean $dir/$builddir \
1287                && run_clean $dir/$rundir \
1288                && symlink_mpifiles $dir $code_dir $builddir \
1289                && makedependmodel $dir/$builddir && makedepend=Y \
1290                && makemodel $dir/$builddir && make=Y
1291      else      else
1292          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1293              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1294                && run_clean $dir/$rundir \
1295              && symlink_mpifiles $dir $code_dir $builddir \              && symlink_mpifiles $dir $code_dir $builddir \
1296              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1297              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1298              && linkdata $use_seperate_build $dir/$rundir \              && linkdata $dir/$rundir $inputdir input \
1299              && runmodel $dir/$rundir && run=Y \              && runmodel $dir/$rundir && run=Y \
1300              && results=`testoutput $dir $rundir`              && results=`testoutput_run $dir $rundir $ref_outp`
1301      fi      fi
1302        
1303        #echo "results='$results'"
1304      echo      echo
     if test "x$ADM" = x ; then  
1305          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1306      else          echo
1307          fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`          echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1308          fres=$fres"$results   $dir"          touch $CDIR"/summary.txt"
1309            echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1310            echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1311            echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1312            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1313            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1314            if test "x$ADM" = xt ; then
1315                head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt"
1316                grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1317                                    >> $CDIR"/summary.txt"
1318            fi
1319    
1320            for ex in $extra_runs ; do
1321                unset run
1322                results=$EMPTY_RESULTS
1323                #  reference output file
1324                refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1325                #  Create an output dir for each OPTFILE/tdir.ex combination
1326                rel_CDIR=$DRESULTS"/"$dir"."$ex
1327                mkdir $rel_CDIR
1328                CDIR=`pwd`"/$rel_CDIR"
1329                test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1330                run_clean $dir/tr_run.$ex
1331                linkdata $dir/tr_run.$ex $inputdir.$ex $inputdir input
1332                runmodel $dir/tr_run.$ex && run=Y \
1333                && results=`testoutput_run $dir tr_run.$ex $refExOut`
1334                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1335                fres="$fres.$ex"
1336                echo
1337                echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1338                touch $CDIR"/summary.txt"
1339                echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1340                echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1341                echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1342                echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1343                echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1344                if test "x$ADM" = xt ; then
1345                    head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt"
1346                    grep -A3 'Seconds in section "ALL' $dir/tr_run.$ex/$OUTPUTFILE \
1347                                       >> $CDIR"/summary.txt"
1348                fi
1349                if test "x$POSTCLEAN" = xt ; then
1350                    run_clean $dir/tr_run.$ex
1351                fi
1352            done
1353    
1354        #postclean $dir/$builddir
1355        if test "x$POSTCLEAN" = xt ; then
1356            makeclean $dir/$builddir \
1357                && run_clean $dir/$rundir
1358      fi      fi
1359      echo  
     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"  
       
1360      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1361        
1362  done  done
1363    
1364  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1365  echo $start_date >> $SUMMARY  echo "$start_date" >> $SUMMARY
1366  echo -n "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
1367  date >> $SUMMARY  date >> $SUMMARY
1368    
1369  #  If addresses were supplied and mpack built successfully, then try  #  If addresses were supplied and mpack built successfully, then try
# Line 855  else Line 1374  else
1374      if test "x$HAVE_MPACK" = xt ; then      if test "x$HAVE_MPACK" = xt ; then
1375          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1376              && gzip $DRESULTS".tar" \              && gzip $DRESULTS".tar" \
1377              && $MPACK -s MITgcm-test -m 1500000 $DRESULTS".tar.gz" $ADDRESSES              && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1378          RETVAL=$?          RETVAL=$?
1379          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1380              echo              echo
# Line 868  else Line 1387  else
1387              echo "An email containing results was sent to the following addresses:"              echo "An email containing results was sent to the following addresses:"
1388              echo "  \"$ADDRESSES\""              echo "  \"$ADDRESSES\""
1389              echo              echo
1390                test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"
1391                test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"
1392          fi          fi
         test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"  
         test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"  
1393      fi      fi
1394  fi  fi
1395    
1396  # rm -f tmp_cmpnum.f a.out  if test "x$QUICK" = xf -a "x$NORUN" = xf ; then
1397  rm -f tmp_cmpnum.c tmp_cmpnum      rm -f tr_cmpnum.c tr_cmpnum
1398    fi
1399    
1400  if test "x$CLEANUP" != xt ; then  if test "x$CLEANUP" != xt ; then
1401      cat $SUMMARY      cat $SUMMARY | sed 's/ \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \. //'
1402      if test -e tr_out.txt ; then      if test -e tr_out.txt ; then
1403          mv tr_out.txt tr_out.txt.old          mv tr_out.txt tr_out.txt.old
1404      fi      fi
1405      cat $SUMMARY > tr_out.txt      cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1406    fi
1407    
1408    if test "x$DELDIR" = xt ; then
1409        rm -rf $DRESULTS
1410  fi  fi
1411    

Legend:
Removed from v.1.30  
changed lines
  Added in v.1.135

  ViewVC Help
Powered by ViewVC 1.1.22