/[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.101 by jmc, Thu Sep 20 02:46:11 2007 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=\"-ieee\")"      echo "                             (DEF=\"-ieee\")"
18      echo "  (-optfile=|-of=)STRING   list of optfiles to use"      echo "  (-of=|-optfile=)STRING   list of optfiles to use"
19      echo "  (-a|-addr) STRING        list of email recipients"      echo "  (-a|-addr) STRING        list of email recipients"
20      echo "                             (DEF=\"edhill@mitgcm.org\")"      echo "                             (DEF=\"edhill@mitgcm.org\")"
21      echo "  (-t|-tdir) STRING        list of test dirs to use"      echo "  (-t|-tdir) STRING        list of group and/or exp. dirs to test"
22      echo "                             (DEF=\"\" which builds all)"      echo "                             (recognized groups: basic, tutorials)"
23        echo "                             (DEF=\"\" which test all)"
24        echo "  (-skd|-skipdir) STRING   list of exp. dirs to skip"
25        echo "                             (DEF=\"\" which test all)"
26      echo "  (-b|-bash) STRING        preferred location of a \"bash\" or"      echo "  (-b|-bash) STRING        preferred location of a \"bash\" or"
27      echo "                             Bourne-compatible \"sh\" shell"      echo "                             Bourne-compatible \"sh\" shell"
28      echo "                             (DEF=\"\" for \"bash\")"      echo "                             (DEF=\"\" for \"bash\")"
# Line 27  usage() Line 31  usage()
31      echo "                             (DEF=\"make output.txt\")"      echo "                             (DEF=\"make output.txt\")"
32      echo "  (-m|-make) STRING        command to use for \"make\""      echo "  (-m|-make) STRING        command to use for \"make\""
33      echo "                             (DEF=\"make\")"      echo "                             (DEF=\"make\")"
34        echo "  (-odir) STRING           used to build output directory name"
35        echo "                             (DEF=\"hostname\")"
36        echo "  (-ptr|-ptracers) STRING  specify which ptracers to test"
37        echo "                             (DEF=\"1 2 3 4 5\")"
38        echo "  (-match) NUMBER          Matching Criteria (number of digits)"
39        echo "                             (DEF=\"12\")"
40      echo "  (-j) JOBS                use \"make -j JOBS\" for parallel builds"      echo "  (-j) JOBS                use \"make -j JOBS\" for parallel builds"
41      echo "  (-clean)                 *ONLY* run \"make CLEAN\""      echo "  (-clean)                 *ONLY* run \"make CLEAN\""
42      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""
# Line 34  usage() Line 44  usage()
44      echo "  (-noclean|-nc)           skip the \"make clean\" stage"      echo "  (-noclean|-nc)           skip the \"make clean\" stage"
45      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"
46      echo "  (-deldir|-dd)            on success, delete the output directory"      echo "  (-deldir|-dd)            on success, delete the output directory"
47        echo "  (-ts)                    provide timing information per timestep"
48        echo "  (-papis)                 provide MFlop/s per timestep using PAPI"
49        echo "  (-pcls)                  provide MFlop/s per timestep using PCL"
50      echo      echo
51      echo "and where STRING follows a whitespace-delimited format"      echo "and where STRING can be a whitespace-delimited list"
52      echo "such as:"      echo "such as:"
53        echo
54      echo "  -t 'exp0 exp2 exp3' "      echo "  -t 'exp0 exp2 exp3' "
55      echo "  -addr='abc@123.com testing@home.org'"      echo "  -addr='abc@123.com testing@home.org'"
56      echo      echo
57        echo "provided that the expression is properly quoted within the current"
58        echo "shell (note the use of single quotes to protect white space)."
59        echo
60      exit 1      exit 1
61  }  }
62    
# Line 77  build_mpack() Line 94  build_mpack()
94      echo "OK"      echo "OK"
95  }  }
96    
97  testoutput_for_prop()  testoutput_var()
98  {  {
99      # testoutput_for_prop dir s1 label subdir extension      # testoutput_var dir s1 label subdir reference_output
100      #      #
101      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt      #  compares 1 variable output selected from file $dir/$subdir/$OUTPUTFILE
102      #  using search strings s1 and text label      #     with same output from reference file $dir/results/$reference_output
103        #  using search strings s1 and text label
104    
105      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
106          echo testoutput_for_prop: grep "$2" $1/$4/output.txt 1>&2          echo testoutput_var: grep "$2" $1/$4/$OUTPUTFILE 1>&2
107      fi      fi
108      if [ -r $1/$4/output.txt ]; then      if [ -r $1/$4/$OUTPUTFILE ]; then
109          grep "$2" $1/$4/output.txt | sed 's/.*=//' | cat -n > tmp1.txt          grep "$2" $1/$4/$OUTPUTFILE | sed 's/.*=//' | cat -n > tmp1.txt
110          lncnt=`wc -l tmp1.txt | awk '{print $1}' `          lncntA=`wc -l tmp1.txt | awk '{print $1}' `
111          if [ $lncnt -lt 3 ]; then          if [ $lncntA -lt 2 ]; then
112              if [ $verbose -gt 0 ]; then              if [ $verbose -gt 0 ]; then
113                  echo Not enough lines of output when searching for "$2" 1>&2                  echo Not enough lines of output when searching for "$2" 1>&2
114              fi              fi
115              return 99              return 99
116          fi          fi
117      else      else
118          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
119          return 99          return 99
120      fi      fi
121      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
122          echo testoutput_for_prop: grep "$2" $1/results/output.txt$5 1>&2          echo testoutput_var: grep "$2" $1/results/$5 1>&2
123      fi      fi
124      grep "$2" $1/results/output.txt$5 | sed 's/.*=//' | cat -n > tmp2.txt      grep "$2" $1/results/$5 | sed 's/.*=//' | cat -n > tmp2.txt
125      lncnt=`wc -l tmp2.txt | awk '{print $1}' `      lncntB=`wc -l tmp2.txt | awk '{print $1}' `
126      if [ $lncnt -lt 3 ]; then      if [ $lncntB -lt 2 ]; then
127          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
128              echo Not enough lines of output when searching for "$2" 1>&2              echo Not enough lines of output when searching for "$2" 1>&2
129          fi          fi
130          return 99          return 99
131      fi      fi
132        if [ $lncntA -ne $lncntB ]; then
133            if [ $verbose -gt 0 ]; then
134                echo Not same Nb of lines when searching for "$2" ":" $lncntA $lncntB 1>&2
135            fi
136            return 99
137        fi
138        has_nan=`cat tmp1.txt | grep -i nan | wc -l`
139        if [ $has_nan -gt 0  ] ; then
140            echo testoutput_var: $OUTPUTFILE contains $has_nan NaN values  1>&2
141            return 99
142        fi
143        has_inf=`cat tmp1.txt | grep -i inf | wc -l`
144        if [ $has_inf -gt 0  ] ; then
145            echo testoutput_var: $OUTPUTFILE contains $has_inf Inf values  1>&2
146            return 99
147        fi
148      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
149          echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2          echo testoutput_var: join tmp1.txt tmp2.txt 1>&2
150      fi      fi
151      join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt      join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt
152      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
153          echo testoutput_for_prop: compare_lines 1>&2          echo testoutput_var: compare_lines 1>&2
154      fi      fi
155      if [ $verbose -gt 1 ]; then      if [ $verbose -gt 1 ]; then
156          cat tmp3.txt 1>&2          cat tmp3.txt 1>&2
# Line 124  testoutput_for_prop() Line 158  testoutput_for_prop()
158      echo "-1" >> tmp3.txt      echo "-1" >> tmp3.txt
159      # 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
160      cat tmp3.txt | sed -e 's|:||g' > tmp4.txt      cat tmp3.txt | sed -e 's|:||g' > tmp4.txt
161      digits_of_similarity=`./tmp_cmpnum < tmp4.txt`      digits_of_similarity=`./tr_cmpnum < tmp4.txt`
162      if [ $digits_of_similarity -eq 99 ]; then      if [ $digits_of_similarity -eq 99 ]; then
163          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
164              echo testoutput_for_prop: No comparison was available for \"$2\" 1>&2              echo testoutput_var: No comparison was available for \"$3\" 1>&2
165          fi          fi
166          digits_of_similarity=99          digits_of_similarity=99
167      else      else
168          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
169              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
170          fi          fi
171      fi      fi
172      rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt      rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt
# Line 157  dashnum() Line 191  dashnum()
191    
192  testoutput_ad()  testoutput_ad()
193  {  {
194      grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $5}' > t05.txt      grep $3 $1/results_ad/output_adm.txt | awk '{print NR " " $5}' > t05.txt
195      grep $3 $1/$2/output.txt_adm | awk '{print NR " " $5}' > t15.txt      grep $3 $1/$2/$OUTPUTFILE | awk '{print NR " " $5}' > t15.txt
196      grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $6}' > t06.txt      grep $3 $1/results_ad/output_adm.txt | awk '{print NR " " $6}' > t06.txt
197      grep $3 $1/$2/output.txt_adm | awk '{print NR " " $6}' > t16.txt      grep $3 $1/$2/$OUTPUTFILE | awk '{print NR " " $6}' > t16.txt
198      join t05.txt t15.txt > t5.txt      join t05.txt t15.txt > t5.txt
199      join t06.txt t16.txt > t6.txt      join t06.txt t16.txt > t6.txt
200      echo "-1" >> t5.txt      echo "-1" >> t5.txt
201      echo "-1" >> t6.txt      echo "-1" >> t6.txt
202      digits_5=`./tmp_cmpnum < t5.txt`      digits_5=`./tr_cmpnum < t5.txt`
203      digits_6=`./tmp_cmpnum < t6.txt`      digits_6=`./tr_cmpnum < t6.txt`
204      dashnum $digits_5 $digits_6      dashnum $digits_5 $digits_6
205      rm -f t[01][56].txt t[56].txt      rm -f t[01][56].txt t[56].txt
206  }  }
# Line 178  check_for_add_mon_output() Line 212  check_for_add_mon_output()
212          return          return
213      fi      fi
214    
215        for ii in $PTRACERS_NUM ; do
216            eval "HAVE_PTR0"$ii"=f"
217        done
218    
219      ptr_add="trcstat_ptracerXX_min trcstat_ptracerXX_max"      ptr_add="trcstat_ptracerXX_min trcstat_ptracerXX_max"
220      ptr_add="$ptr_add trcstat_ptracerXX_mean trcstat_ptracerXX_sd"      ptr_add="$ptr_add trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
221      for ii in 1 2 3 4 5 ; do      for ii in $PTRACERS_NUM ; do
222          for jj in $ptr_add ; do          for jj in $ptr_add ; do
223              name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`              name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
224              tst=`grep $name $1 | wc -l | awk '{print $1}'`              tst=`grep $name $1 | wc -l | awk '{print $1}'`
# Line 192  check_for_add_mon_output() Line 230  check_for_add_mon_output()
230      done      done
231  }  }
232    
233  testoutput()  testoutput_run()
234  {  {
235      # testoutput directory subdir extension      # testoutput_run directory subdir reference_output
236      #      #
237      #  test output in "directory"      #  test output from 1 run in "directory"
238      if test "x$ADM" = x ; then  #   if test "x$ADM" = x ; then
239          if [ $debug -gt 0 ]; then          # default list of output variables to be checked:
240              echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2          #  1rst : main variable used to decide if it pass or FAIL
241          fi          #  others : number of matching digits to be printed in summary.txt
242          testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2 $3; cg2dres=$?          listChk=$DEF_CHECK_LIST
243          if [ $debug -gt 0 ]; then          #  load experiment-specific list from file "tr_checklist" (if it exist)
244              echo testoutput: cg2dres=$cg2dres 1>&2          if test -r $1/$2/tr_checklist ; then listChk=`cat $1/$2/tr_checklist` ; fi
245          fi          sVar=`echo $listChk | awk '{print $1}'`
246          testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2 $3; tmin=$?          # remove 1rst var and expand the list: + => min max mean s.d
247          testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2 $3; tmax=$?          listVar=`echo $listChk | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' \
248          testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2 $3; tmean=$?                                 | sed 's/+//g' | sed "s/^$sVar//"`
249          testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2 $3; tsd=$?          if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(I)='$listVar'" 1>&2 ; fi
250          testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2 $3; smin=$?          for ii in 1 2 3 4 5 6 7 8 9 ; do
251          testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2 $3; smax=$?            tst=`eval 'echo "$HAVE_PTR0'$ii'"'`
252          testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2 $3; smean=$?           #echo "-- ptr test=" $tst "number of var=" `echo $listVar | awk '{print NF}'` 1>&2
253          testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2 $3; ssd=$?            if test "x$tst" != xt ; then listVar=`echo "$listVar" | sed "s/ pt$ii..//g"` ; fi
254          testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2 $3; umin=$?          done
255          testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2 $3; umax=$?          tst=`echo $sVar $listVar | awk '{ for(i=2;i<=NF;i++){t+=($i==$1)}; print t }'`
256          testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2 $3; umean=$?          if test $tst != 1 ; then
257          testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2 $3; usd=$?            if test $tst = 0 ; then echo "==> WARNING: selected var >$sVar< not found" 1>&2
258          testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2 $3; vmin=$?                   else echo "==> WARNING: found selected var >$sVar< $tst times" 1>&2 ; fi
259          testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2 $3; vmax=$?            echo "==> WARNING: in checked list:" $listVar 1>&2
260          testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2 $3; vmean=$?          #- put it back once:
261          testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2 $3; vsd=$?            listVar=" $sVar "`echo "$listVar " | sed "s/ $sVar / /g"`
262            fi
263          for ii in 1 2 3 4 5 ; do          if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(M)='$listVar'" 1>&2 ; fi
264              testoutput_for_prop $1 "trcstat_ptracer0"$ii"_min"  "p0"$ii"_min"  $2 $3          echo "listVar='$listVar'" > $CDIR"/summary.txt"
265              RETVAL=$? ; eval `echo "p0"$ii"_min="$RETVAL`          allargs=""
266              testoutput_for_prop $1 "trcstat_ptracer0"$ii"_max"  "p0"$ii"_max"  $2 $3          for xx in $listVar
267              RETVAL=$? ; eval `echo "p0"$ii"_max="$RETVAL`          do
268              testoutput_for_prop $1 "trcstat_ptracer0"$ii"_mean" "p0"$ii"_mean" $2 $3            case $xx in
269              RETVAL=$? ; eval `echo "p0"$ii"_mean="$RETVAL`             'PS')  if [ $debug -gt 0 ]
270              testoutput_for_prop $1 "trcstat_ptracer0"$ii"_sd"   "p0"$ii"_sd"   $2 $3                    then echo testoutput_run: testoutput_var $1 cg2d_init_res 1>&2 ; fi
271              RETVAL=$? ; eval `echo "p0"$ii"_sd="$RETVAL`                    testoutput_var $1 "cg2d_init_res" "Press. Solver (cg2d)" $2 $3; yy=$?
272          done                    if [ $debug -gt 0 ] ; then echo testoutput_run: cg2dres=$yy 1>&2 ; fi ;;
273              'Cost') testoutput_var $1 "ADM  precision_derivative_cost" "ADM Cost" $2 $3; yy=$? ;;
274          allargs="$cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd"            'Grad') testoutput_var $1 "ADM  precision_derivative_grad" "ADM Grad" $2 $3; yy=$? ;;
275          allargs="$allargs $umin $umax $umean $usd $vmin $vmax $vmean $vsd"             'Tmn') testoutput_var $1 "dynstat_theta_min"  "Theta minimum"  $2 $3; yy=$? ;;
276          allargs="$allargs $p01_min $p01_max $p01_mean $p01_sd"             'Tmx') testoutput_var $1 "dynstat_theta_max"  "Theta maximum"  $2 $3; yy=$? ;;
277          allargs="$allargs $p02_min $p02_max $p02_mean $p02_sd"             'Tav') testoutput_var $1 "dynstat_theta_mean" "Theta mean"     $2 $3; yy=$? ;;
278          allargs="$allargs $p03_min $p03_max $p03_mean $p03_sd"             'Tsd') testoutput_var $1 "dynstat_theta_sd"   "Theta Std.Dev"  $2 $3; yy=$? ;;
279          allargs="$allargs $p04_min $p04_max $p04_mean $p04_sd"             'Smn') testoutput_var $1 "dynstat_salt_min"  "Salt minimum"    $2 $3; yy=$? ;;
280          allargs="$allargs $p05_min $p05_max $p05_mean $p05_sd"             'Smx') testoutput_var $1 "dynstat_salt_max"  "Salt maximum"    $2 $3; yy=$? ;;
281               'Sav') testoutput_var $1 "dynstat_salt_mean" "Salt mean"       $2 $3; yy=$? ;;
282          eval "dashnum $allargs"             'Ssd') testoutput_var $1 "dynstat_salt_sd"   "Salt Std.Dev"    $2 $3; yy=$? ;;
283               'Umn') testoutput_var $1 "dynstat_uvel_min"  "U minimum"       $2 $3; yy=$? ;;
284      else             'Umx') testoutput_var $1 "dynstat_uvel_max"  "U maximum"       $2 $3; yy=$? ;;
285          testoutput_ad $1 $2 "precision_grdchk_result"             'Uav') testoutput_var $1 "dynstat_uvel_mean" "U mean"          $2 $3; yy=$? ;;
286      fi             'Usd') testoutput_var $1 "dynstat_uvel_sd"   "U Std.Dev"       $2 $3; yy=$? ;;
287               'Vmn') testoutput_var $1 "dynstat_vvel_min"  "V minimum"       $2 $3; yy=$? ;;
288               'Vmx') testoutput_var $1 "dynstat_vvel_max"  "V maximum"       $2 $3; yy=$? ;;
289               'Vav') testoutput_var $1 "dynstat_vvel_mean" "V mean"          $2 $3; yy=$? ;;
290               'Vsd') testoutput_var $1 "dynstat_vvel_sd"   "V Std.Dev"       $2 $3; yy=$? ;;
291            'pt1mn'|'pt2mn'|'pt3mn'|'pt4mn'|'pt5mn') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
292               testoutput_var $1 "trcstat_ptracer0"$ii"_min"  "p0"$ii"_min"   $2 $3; yy=$? ;;
293            'pt1mx'|'pt2mx'|'pt3mx'|'pt4mx'|'pt5mx') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
294               testoutput_var $1 "trcstat_ptracer0"$ii"_max"  "p0"$ii"_max"   $2 $3; yy=$? ;;
295            'pt1av'|'pt2av'|'pt3av'|'pt4av'|'pt5av') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
296               testoutput_var $1 "trcstat_ptracer0"$ii"_mean" "p0"$ii"_mean" $2 $3; yy=$? ;;
297            'pt1sd'|'pt2sd'|'pt3sd'|'pt4sd'|'pt5sd') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
298               testoutput_var $1 "trcstat_ptracer0"$ii"_sd"   "p0"$ii"_StDv"  $2 $3; yy=$? ;;
299             'Qntmn') testoutput_var $1 "extforcing_qnet_min" "Qnet minimum"  $2 $3; yy=$? ;;
300             'Qntmx') testoutput_var $1 "extforcing_qnet_max" "Qnet maximum"  $2 $3; yy=$? ;;
301             'Qntav') testoutput_var $1 "extforcing_qnet_mean" "Qnet mean"    $2 $3; yy=$? ;;
302             'Qntsd') testoutput_var $1 "extforcing_qnet_sd"  "Qnet Std.Dev"  $2 $3; yy=$? ;;
303             'aSImn') testoutput_var $1 "seaice_area_min"   "SIce Area min"   $2 $3; yy=$? ;;
304             'aSImx') testoutput_var $1 "seaice_area_max"   "SIce Area max"   $2 $3; yy=$? ;;
305             'aSIav') testoutput_var $1 "seaice_area_mean"  "SIce Area mean"  $2 $3; yy=$? ;;
306             'aSIsd') testoutput_var $1 "seaice_area_sd"    "SIce Area StDv"  $2 $3; yy=$? ;;
307             'hSImn') testoutput_var $1 "seaice_heff_min"   "SIce Heff min"   $2 $3; yy=$? ;;
308             'hSImx') testoutput_var $1 "seaice_heff_max"   "SIce Hell max"   $2 $3; yy=$? ;;
309             'hSIav') testoutput_var $1 "seaice_heff_mean"  "SIce Hell mean"  $2 $3; yy=$? ;;
310             'hSIsd') testoutput_var $1 "seaice_heff_sd"    "SIce Hell StDv"  $2 $3; yy=$? ;;
311            'AthSiG') testoutput_var $1 "thSI_Ice_Area_G" "thSIc Area Global" $2 $3; yy=$? ;;
312            'AthSiS') testoutput_var $1 "thSI_Ice_Area_S" "thSIc Area South"  $2 $3; yy=$? ;;
313            'AthSiN') testoutput_var $1 "thSI_Ice_Area_N" "thSIc Area North"  $2 $3; yy=$? ;;
314            'HthSiG') testoutput_var $1 "thSI_IceH_ave_G" "thSIc H Global"    $2 $3; yy=$? ;;
315            'HthSiS') testoutput_var $1 "thSI_IceH_ave_S" "thSIc H South"     $2 $3; yy=$? ;;
316            'HthSiN') testoutput_var $1 "thSI_IceH_ave_N" "thSIc H North"     $2 $3; yy=$? ;;
317                  *) yy=99; echo "WARNING: asking for var=$xx : not recognized !" 1>&2 ;;
318              esac
319              if test $xx = $sVar
320              then allargs="$allargs > $yy <"
321              else allargs="$allargs $yy"
322              fi
323            done
324    
325            nbVar=`echo $listVar | awk '{print NF}'`
326            if [ $nbVar -lt $LEN_CHECK_LIST ] ; then
327            #-- fill line (up to standard length) with dot:
328              adNul=`expr $LEN_CHECK_LIST - $nbVar | awk '{for(i=1;i<=$1;i++){print "."}}'`
329              echo $allargs $adNul
330            else
331              echo $allargs
332            fi
333    
334    #   else
335    #       testoutput_ad $1 $2 "precision_grdchk_result"
336    #   fi
337  }  }
338    
339  genmakemodel()  genmakemodel()
# Line 266  genmakemodel() Line 354  genmakemodel()
354                  command="$command --mods=../code"                  command="$command --mods=../code"
355              else              else
356                  command="$command --mods=../code_ad"                  command="$command --mods=../code_ad"
                 command="$command -adof=../../../tools/adjoint_options/adjoint_staf"  
357              fi              fi
358              if test "x$OPTFILE" != xNONE ; then              if test "x$OPTFILE" != xNONE ; then
359                  command="$command --optfile=$OPTFILE"                  command="$command --optfile=$OPTFILE"
# Line 274  genmakemodel() Line 361  genmakemodel()
361              if test "x$IEEE" != x ; then              if test "x$IEEE" != x ; then
362                  command="$command -ieee"                  command="$command -ieee"
363              fi              fi
364                if test "x$MPI" = xt ; then
365                    command="$command -mpi"
366                fi
367                if test "x$TS" = xt ; then
368                    command="$command -ts"
369                fi
370                if test "x$PAPIS" = xt ; then
371                    command="$command -papis"
372                else
373                if test "x$PCLS" = xt ; then
374                    command="$command -pcls"
375                fi
376                fi
377              printf 'genmake ... ' 1>&2              printf 'genmake ... ' 1>&2
378              $command > make.log 2>&1              $command > make.log 2>&1
379              RETVAL=$?              RETVAL=$?
# Line 295  makeclean() Line 395  makeclean()
395  {  {
396      # makeclean directory      # makeclean directory
397      if test "x$NOCLEAN" = xt ; then      if test "x$NOCLEAN" = xt ; then
398          echo "make CLEAN skipped!"          echo "make Clean skipped!"
399      else      else
400          (          (
401              cd $1;              cd $1;
402              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  
403              if test -r Makefile ; then              if test -r Makefile ; then
404                  $MAKE CLEAN >> make.log 2>&1                  printf 'clean build-dir: make Clean ... ' 2>&1
405                    $MAKE Clean >> make.log 2>&1
406                  RETVAL=$?                  RETVAL=$?
407                  if test "x$RETVAL" != x0 ; then                  if test "x$RETVAL" != x0 ; then
408                      tail make.log                      tail make.log
409                      echo "makeclean: \"make CLEAN\" failed" 1>&2                      echo "makeclean: \"make Clean\" failed" 1>&2
410                      cp make.log $CDIR"/make.log"                      cp make.log $CDIR"/make.log"
411                      return 1                      return 1
412                  fi                  fi
# Line 319  makeclean() Line 417  makeclean()
417      fi      fi
418  }  }
419    
420    run_clean()
421    {
422        # run_clean directory
423        if test "x$NOCLEAN" = xt ; then
424            echo "run_clean skipped!"
425        else
426            (
427                cd $1;
428                printf 'clean run-dir ... ' 2>&1
429                # part of what is done after "make clean" when doing "make CLEAN"
430                find . -name "*.meta" -exec rm {} \;
431                find . -name "*.data" -exec rm {} \;
432                find . -name "fort.*" -exec rm {} \;
433                find . -type l -exec rm {} \;
434                rm -f $EXECUTABLE *.txt STD* *diagnostics.log datetime
435                rm -rf mnc_test_*
436                echo successful 1>&2
437                exit 0
438            )
439        fi
440    }
441    
442  makedependmodel()  makedependmodel()
443  {  {
444      # makedependmodel directory      # makedependmodel directory
# Line 421  symlink_mpifiles() Line 541  symlink_mpifiles()
541    
542  linkdata()  linkdata()
543  {  {
544      # linkdata flag      # linkdata run_dir input_dir_1 input_dir_2 ...
545      #      #
546      # symbolically link data files to run directory      # symbolically link data files to run directory
547      if test "x$1" = x1 ; then      if test -d $1 ; then
548          (          (
549              cd $2              cd $1 ; shift
550              if test "x$ADM" = x ; then              if test -r "../"$1"/eedata.mth" ; then
551                  files=`( cd ../input ; ls -1 | grep -v CVS )`              # found eedata.mth in 1rst input dir and it is readable
552                  for i in $files ; do                  if test "x$MULTI_THREAD" = "xt" ; then
553                      if test ! -d "../input/"$i ; then                  # multi-threaded test: remove symbolic link & link eedata.mth
554                          ln -sf "../input/"$i $i                      if test -h eedata ; then rm -f eedata ; fi
555                      fi                      if test ! -r eedata ; then
556                  done                          ln -sf "../"$1"/eedata.mth" eedata ;
557              else                          printf 'eedata.mth ' 1>&2
                 files=`( cd ../input ; ls -1 *.bin | grep -v CVS )`  
                 for i in $files ; do  
                     if test ! -d "../input/"$i ; then  
                         ln -sf "../input/"$i $i  
558                      fi                      fi
559                  done                  else
560                  files=`( cd ../input_ad ; ls -1 | grep -v CVS )`                  # not multi-threaded test: remove eedata symbolic link
561                  for i in $files ; do                      if test -h eedata ; then rm -f eedata ; fi
562                      if test ! -d "../input_ad/"$i ; then                  fi
                         ln -sf "../input_ad/"$i $i  
                     fi  
                 done  
563              fi              fi
564                for ldir in $* ; do
565                    if test -d "../"$ldir ; then
566                        printf 'ldir='${ldir} 1>&2
567                        files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
568                        for i in $files ; do
569                            if test ! -d "../"$ldir/$i ; then
570                                if test ! -r $i  ; then
571                                    printf ' '$i 1>&2
572                                    ln -sf "../"$ldir"/"$i $i
573                                fi
574                            fi
575                        done
576                        if test -x "../"$ldir"/"prepare_run ; then
577                            "../"$ldir"/"prepare_run
578                        fi
579                        printf ' ; ' 1>&2
580                    fi
581                done
582          )          )
583      fi      fi
584  }  }
# Line 460  runmodel() Line 591  runmodel()
591      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
592      (      (
593          cd $1          cd $1
594          printf 'runmodel ... ' 1>&2          printf 'runmodel in %s ...' $1 1>&2
595          # make output.txt          # make output.txt
596          echo          echo
597          rm -f run.log          if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
598          # echo "COMMAND='$COMMAND'"              echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_00
599          # echo "pwd='"`pwd`"'"              ln -sf "../"$builddir"/"$EXECUTABLE .
600          ( eval $COMMAND ) > run.log 2>&1          fi
601          RETVAL=$?          if test ! -x $EXECUTABLE ; then
602          if test "x$RETVAL" = x0 ; then                  rm -f run.log ; touch run.log
603                    if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
604                    echo " no executable:" $EXECUTABLE >> run.log
605                    RETVAL=8
606                    ENDVAL=-1
607            else
608                if test ! -f $OUTPUTFILE -o $OUTPUTFILE -ot $EXECUTABLE ; then
609                  # output do not exist or is older than executable:
610                    rm -f run.log ; touch run.log
611                    if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
612                    ( eval $COMMAND ) >> run.log 2>&1
613                    RETVAL=$?
614                else
615                    RETVAL=0
616                    if test -f run.log ; then
617                        if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
618                        echo "---------->> $OUTPUTFILE is up to date " >> run.log 2>&1
619                    else
620                        touch run.log
621                        if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
622                        echo "---------->> $OUTPUTFILE is up to date " >> run.log 2>&1
623                        echo " no previous run.log: assume NORMAL END" >> run.log 2>&1
624                    fi
625                fi
626                ENDVAL=`cat run.log | grep -v 'ABNORMAL END' | grep -c 'NORMAL END'`
627            fi
628            rm -f run.log_00
629            #if test "x$RETVAL" = x0 ; then
630            if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
631              tail run.log              tail run.log
632              echo successful 1>&2              echo successful 1>&2
633              # === Reduce the size of the testing emails!              # === Reduce the size of the testing emails!
634              # 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  
635              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
636              return 0              return 0
637          else          else
638              tail run.log              tail run.log
639              echo failed 1>&2              echo failed '(run:' $RETVAL ' end:' $ENDVAL ')' 1>&2
640              cp run.log $CDIR"/run.log"              cp run.log $CDIR"/run.log"
641              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
642              return 1              return 1
# Line 494  createcodelet() Line 649  createcodelet()
649      # create codelet for comparing model output      # create codelet for comparing model output
650    
651      printf "creating the comparison code...  "      printf "creating the comparison code...  "
652      cat > tmp_cmpnum.c <<EOF      cat > tr_cmpnum.c <<EOF
653  #include <stdio.h>  #include <stdio.h>
654  #include <math.h>  #include <math.h>
655  int main( int argc, char** argv )  {  int main( int argc, char** argv )  {
656    int linnum,best,lncnt;    int linnum,cmplin,best,lncnt;
657    double a,b,diff;    double a,b,abave,relerr;
658    best = -16;    best = -22;
659    lncnt = 0;    lncnt = 0;
660    while( 1 & (lncnt+=1) < 999 )  {    while( 1 & ( (lncnt+=1) < 999 ) )  {
661      scanf("%d", &linnum);      scanf("%d", &linnum);
662      if (linnum == -1)  break;      if (linnum == -1)  break;
663      scanf("%lf", &a);  scanf("%lf", &b);      scanf("%lf", &a);  scanf("%lf", &b);
664      diff = 0.5*(fabs(a)+fabs(b));      abave = 0.5*(fabs(a)+fabs(b));
665      if (diff > 1.e-12) {      if ( abave == abave ) {
666        diff=fabs(a-b)/diff;        if (abave > 0.0) {
667        if (diff > 0.0) {          relerr=fabs(a-b)/abave;
668          linnum = (int)log10(diff);          if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
669          best = (best > linnum) ? best : linnum;          else { cmplin = -16 ; }
670        }          best = (best > cmplin) ? best : cmplin; }
671        else {        else { cmplin = -22 ; }
672          if (best == -16 && diff != 0)  best = -22;     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
673        }        }
674      }     else {
675       /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
676          break; }
677    }    }
678    if (lncnt == 999) best=-29;    if (lncnt == 999) best=-29;
679      if (linnum != -1) best=-99;
680    printf("%d\n", -best);    printf("%d\n", -best);
681    return 0;    return 0;
682  }  }
683  EOF  EOF
684      cc -o tmp_cmpnum tmp_cmpnum.c -lm      $CC -o tr_cmpnum tr_cmpnum.c -lm
685    
686      if [ -x ./tmp_cmpnum ]; then      if [ -x ./tr_cmpnum ]; then
687          echo "OK"          echo "OK"
688          return 0          return 0
689      else      else
690          echo          echo
691          echo "ERROR: failed to compile comparison code"          echo "ERROR: failed to compile comparison code -- please specify"
692            echo "  a C compiler using the CC environment variable."
693          exit 1          exit 1
694      fi      fi
695  }  }
# Line 542  formatresults() Line 701  formatresults()
701      nm=$1      nm=$1
702      printf '%s %s %s %s' $2 $3 $4 $5      printf '%s %s %s %s' $2 $3 $4 $5
703      shift; shift; shift; shift; shift;      shift; shift; shift; shift; shift;
704      printf '%3s' $@      listPrt=$@
705        listRes=`echo $listPrt | sed 's/>//' | sed 's/<//'`
706        xx=`echo $listPrt | sed 's/.*>//' | sed 's/<.*//' | awk '{print $1}'`
707        printf '%3s' $listPrt
708    #   line below does not work on hp-ux_ia64 : do those substitutions later on
709    #   printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</'
710            
711      if [ $1 = '--' ]; then      if [ $xx = '..' ]; then
712            printf ' N/O '
713        elif [ $xx = '--' ]; then
714            printf ' N/O '
715        elif [ $xx = 99 ]; then
716          printf ' N/O '          printf ' N/O '
717      else      else
718          if [ $1 -gt 12 ]; then          if [ $xx -ge $MATCH_CRIT ]; then
719              printf ' pass'              printf ' pass'
720          else          else
721              printf ' FAIL'              printf ' FAIL'
# Line 558  formatresults() Line 726  formatresults()
726            
727  }  }
728    
 show_help()  
 {  
     cat - << EOF  
 $0 [-help] [-quick] [-verbose] dir1 [dir2] [...]  
   
  -help|-h      Show this help message  
  -quiet     Reduce the amount of output  
  -verbose   Produce copious amounts of output  
  -debug     Produce even more output which will mean nothing to most  
  -force     Do "make CLEAN" before compiling. This forces a complete rebuild.  
  -clean     Do "make CLEAN" after compiling and testing.  
  -cleanup   Aggresively removes all model output, executables and object files  
             and then exits. Use with care.  
   
 Normal usage:  
  $0 *       Configure, compile, run and analyze in all experiment directories  
 EOF  
 }  
   
729  scandirs()  scandirs()
730  {  {
731      if [ $# -eq 0 ]; then      if [ $# -eq 1 ]; then
732          for arg in * ; do          for arg in * ; do
733              test -d $arg/input && echo $arg              test -f $arg/$1 && echo $arg
734          done          done
735      else      else
736          echo $*          echo $*
737      fi      fi
738  }  }
739    
# Line 610  QUICK=f Line 759  QUICK=f
759  NOGENMAKE=f  NOGENMAKE=f
760  NOCLEAN=f  NOCLEAN=f
761  NODEPEND=f  NODEPEND=f
762    POSTCLEAN=f
763    
764  BASH=  BASH=
765  OPTFILE=NONE  OPTFILE=NONE
766  ADDRESSES=  ADDRESSES=
767  TESTDIRS=  TESTDIRS=
768    SKIPDIRS=
769  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
770  HAVE_MPACK=  HAVE_MPACK=
771  MPACK="$MPACKDIR/mpack"  MPACK="$MPACKDIR/mpack"
772  COMMAND=  COMMAND=
773  MAKE=make  if test "x$MAKE" = x ; then
774        MAKE=make
775    fi
776    if test "x$CC" = x ; then
777        CC=cc
778    fi
779  JOBS=  JOBS=
780  MPI=f  MPI=f
781    MULTI_THREAD=f
782    OUTDIR=
783  DELDIR=  DELDIR=
784    
785  ADM=  ADM=
786    
787  # Additional monitor types  # Additional monitor types
788  # HAVE_PTR01=  PTRACERS_NUM="1 2 3 4 5"
789  # HAVE_PTR02=  
790  # HAVE_PTR03=  MATCH_CRIT=13
 # HAVE_PTR04=  
 # HAVE_PTR05=  
791    
792  printf "parsing options...  "  printf "parsing options...  "
793    
# Line 667  for ac_option ; do Line 823  for ac_option ; do
823          -tdir=* | --tdir=*)          -tdir=* | --tdir=*)
824              TESTDIRS=$ac_optarg ;;              TESTDIRS=$ac_optarg ;;
825    
826            -skipdir | --skipdir | -skd | --skd)
827                ac_prev=SKIPDIRS ;;
828            -skipdir=* | --skipdir=*)
829                SKIPDIRS=$ac_optarg ;;
830    
831          -bash | --bash | -b | --b)          -bash | --bash | -b | --b)
832              ac_prev=BASH ;;              ac_prev=BASH ;;
833          -bash=* | --bash=*)          -bash=* | --bash=*)
# Line 682  for ac_option ; do Line 843  for ac_option ; do
843          -make=* | --make=*)          -make=* | --make=*)
844              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
845    
846            -odir | --odir)
847                ac_prev=OUTDIR ;;
848            -odir=* | --odir=*)
849                OUTDIR=$ac_optarg ;;
850    
851            -ptracers | --ptracers | -ptr | --ptr)
852                ac_prev=PTRACERS_NUM ;;
853            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
854                PTRACERS_NUM=$ac_optarg ;;
855    
856            -match | --match ) ac_prev=MATCH_CRIT ;;
857            -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
858    
859          -j) ac_prev=JOBS ;;          -j) ac_prev=JOBS ;;
860          -j=*) JOBS=$ac_optarg ;;          -j=*) JOBS=$ac_optarg ;;
861    
862          -clean | --clean)          -clean | --clean)
863              CLEANUP=t ;;              CLEANUP=t ; DELDIR=t ;;
864    
865          -quick | --quick | -q | --q)          -quick | --quick | -q | --q)
866              QUICK=t ;;              QUICK=t ;;
# Line 697  for ac_option ; do Line 871  for ac_option ; do
871          -nodepend | --nodepend | -nd | --nd)          -nodepend | --nodepend | -nd | --nd)
872              NODEPEND=t ;;              NODEPEND=t ;;
873    
874            -postclean | --postclean | -pc | --pc)
875                POSTCLEAN=t ;;
876    
877          -mpi) MPI=t ;;          -mpi) MPI=t ;;
878    
879            -mth) MULTI_THREAD=t ;;
880    
881          -adm | -ad) ADM=t ;;          -adm | -ad) ADM=t ;;
882    
883          -ieee) IEEE=true ;;          -ieee) IEEE=true ;;
# Line 710  for ac_option ; do Line 889  for ac_option ; do
889    
890          -deldir | -dd) DELDIR=t ;;          -deldir | -dd) DELDIR=t ;;
891    
892            -ts) TS=t;;
893    
894            -papis) PAPIS=t;;
895    
896            -pcls) PCL=t;;
897    
898          -*)          -*)
899              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
900              usage              usage
# Line 730  if test "x$QUICK" = xt ; then Line 915  if test "x$QUICK" = xt ; then
915      NODEPEND=t      NODEPEND=t
916  fi  fi
917    
918    #- setting for forward or ADM testing
919    if test "x$ADM" = xt ; then
920        code_dir=code_ad
921        input_dirs='input_ad input'
922        ref_outp="output_adm.txt"
923        EXECUTABLE="mitgcmuv_ad"
924    else
925        code_dir=code
926        input_dirs='input'
927        ref_outp="output.txt"
928        EXECUTABLE="mitgcmuv"
929    fi
930    
931  if test "x$TESTDIRS" = x ; then  if test "x$TESTDIRS" = x ; then
932      TESTDIRS=`scandirs`  #   if test "x$ADM" = xt ; then
933    #       LIST=`scandirs results_ad/$ref_outp`
934    #   else
935            LIST=`scandirs results/$ref_outp`
936    #   fi
937    else
938        #- expand group of experiments:
939        LIST=" "
940        for xx in $TESTDIRS
941        do
942          case $xx in
943            'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
944                     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
945                     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
946                    ;;
947            'tutorials')
948                     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
949            *)       LIST=${LIST}" "$xx ;;
950          esac
951        done
952  fi  fi
953    #echo 'LIST='${LIST}'<'
954    #- skip dirs, remove duplicate and non-directory:
955    TESTDIRS=" "
956    count=0
957    for xx in $LIST
958    do
959        yy=`echo $SKIPDIRS | grep -c $xx`
960        if test $yy = 0 ; then
961            if test -d $xx ; then
962                yy=`echo $TESTDIRS | grep -c $xx`
963                if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
964            else count=1 ;
965                echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
966            fi
967        else
968            if test $count = 1 ; then echo -n ", \"$xx\""
969            else count=1 ; echo "" ;  echo -n " skip: \"$xx\""
970            fi
971        fi
972    done
973    if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
974    #echo 'TESTDIRS='${TESTDIRS}'<'
975    
976  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
977      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
978  fi  fi
979    
980  if test "x$ADM" = xt -a "x$COMMAND" = x ; then  OUTPUTFILE=$ref_outp
     COMMAND="./mitgcmuv_ad > output.txt_adm 2>&1"  
 fi  
   
981  if test "x$COMMAND" = x ; then  if test "x$COMMAND" = x ; then
982      COMMAND="$MAKE output.txt"      COMMAND="./$EXECUTABLE > $OUTPUTFILE"
983    fi
984    if test "x$MPI" = xt ; then
985        OUTPUTFILE="STDOUT.0000"
986  fi  fi
987    
988  echo "OK"  #echo "OK"
989    echo "OK (COMMAND= $COMMAND )"
990    
991    # set the Default List of output variables to be checked:
992    #  (use default or load experiment-specific list from file "tr_checklist")
993    # content : 1rst = main variable used to decide if it pass or FAIL
994    #         others = number of matching digits to be printed in summary.txt
995    if test "x$ADM" = x ; then
996        DEF_CHECK_LIST='PS PS T+ S+ U+ V+ pt1+ pt2+ pt3+ pt4+ pt5+'
997        EMPTY_RESULTS='.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..'
998        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
999        ii=`echo $EMPTY_RESULTS | awk '{print NF}'`
1000        EMPTY_RESULTS=$EMPTY_RESULTS`expr $LEN_CHECK_LIST - $ii | awk 'BEGIN{FS=":"}{for(i=1;i<=$1;i++){printf "  ."}}'`
1001    else
1002        DEF_CHECK_LIST='Cost Cost Grad'
1003        EMPTY_RESULTS='.. ..'
1004        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1005    fi
1006    
1007  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
1008  createcodelet  createcodelet
# Line 763  MACH=`hostname` Line 1019  MACH=`hostname`
1019  UNAMEA=`uname -a`  UNAMEA=`uname -a`
1020  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
1021  BASE="tr_"$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
1022    if test "x$OUTDIR" != x ; then
1023        BASE="tr_"$OUTDIR"_"$DATE"_"
1024    fi
1025  DNUM=0  DNUM=0
1026  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
1027  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 808  fi Line 1067  fi
1067  echo  echo
1068  echo >> $SUMMARY  echo >> $SUMMARY
1069  if test "x$ADM" = x ; then  if test "x$ADM" = x ; then
1070      line_0="            ----T-----  ----S-----  ----U-----  ----V-----"      if [ $MATCH_CRIT -lt 10 ] ;
1071        then line_0="default  "$MATCH_CRIT ;
1072        else line_0="default "$MATCH_CRIT ; fi
1073           line_0="$line_0  ----T-----  ----S-----  ----U-----  ----V-----"
1074    #   line_0="            ----T-----  ----S-----  ----U-----  ----V-----"
1075      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"
1076      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  ."
1077      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"
1078      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  ."
1079      for ii in 1 2 3 4 5 ; do      for ii in $PTRACERS_NUM ; do
1080          #  tst=`eval 'echo $HAVE_PTR0'$ii`          #  tst=`eval 'echo $HAVE_PTR0'$ii`
1081          #  if test "x$tst" = xt ; then          #  if test "x$tst" = xt ; then
1082          line_0="$line_0  --PTR 0"$ii"--"          line_0="$line_0  --PTR 0"$ii"--"
# Line 832  if test "x$ADM" = x ; then Line 1095  if test "x$ADM" = x ; then
1095  else  else
1096      echo "ADJOINT=true" >> $SUMMARY      echo "ADJOINT=true" >> $SUMMARY
1097      echo >> $SUMMARY      echo >> $SUMMARY
1098        if [ $MATCH_CRIT -lt 10 ] ;
1099        then line_0="default  "$MATCH_CRIT ;
1100        else line_0="default "$MATCH_CRIT ; fi
1101        echo "$line_0" | tee -a $SUMMARY
1102      cat << EOF | tee -a $SUMMARY      cat << EOF | tee -a $SUMMARY
1103  G D M    C  G  G D M    C  G
1104  E p a R  o  r  E p a R  o  r
# Line 847  for dir in $TESTDIRS ; do Line 1114  for dir in $TESTDIRS ; do
1114      #  Cleanup only!      #  Cleanup only!
1115      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1116          if test -r $dir/build/Makefile ; then          if test -r $dir/build/Makefile ; then
1117                echo '  ------  clean dir:' $dir/build
1118              ( cd $dir/build ; make CLEAN )              ( cd $dir/build ; make CLEAN )
1119          fi          fi
1120          if test -r $dir/input/Makefile ; then          if test -d $dir/run/CVS ; then
1121              ( cd $dir/input ; make CLEAN )              echo '  ------  clean dir:' $dir/run
1122                run_clean $dir/run
1123          fi          fi
1124            (
1125                cd $dir
1126                rm -rf tr_run.*
1127            )
1128          continue          continue
1129      fi      fi
1130    
# Line 859  for dir in $TESTDIRS ; do Line 1132  for dir in $TESTDIRS ; do
1132      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
1133      fout=      fout=
1134      if test "x$ADM" = x ; then      if test "x$ADM" = x ; then
1135          fout=$dir"/results/output.txt"          fout=$dir"/results/"$ref_outp
1136      else      else
1137          fout=$dir"/results_ad/output.txt_adm"          fout=$dir"/results_ad/"$ref_outp
1138      fi      fi
1139      if test ! -r $fout ; then      if test ! -r $fout ; then
1140          echo "can't read \"$fout\" -- skipping $dir"          echo "can't read \"$fout\" -- skipping $dir"
1141          continue          continue
1142      fi      fi
1143        if test "x$ADM" = x ; then
1144            check_for_add_mon_output  $fout
1145        fi
1146    
1147      # Check for additional types of monitor output      # Check for additional types of monitor output
     check_for_add_mon_output  $fout  
1148    
1149      builddir="input"      builddir="build"
1150      rundir="input"      if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1151      use_seperate_build=0      rundir="run"
1152      if test -d $dir/build -a -r $dir/build ; then      if test ! -d $dir/$rundir ; then
1153          builddir="build"          rundir=$builddir
         rundir="build"  
         use_seperate_build=1  
         linkdata $use_seperate_build $dir/$rundir  
1154      fi      fi
1155            CODE_DIR=$dir/$code_dir
1156        BUILD_DIR=$dir/$builddir
1157    
1158        if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1159            echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1160            continue
1161        fi
1162        if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1163            echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1164            continue
1165        fi
1166    
1167      #  Check whether there are "extra runs" for this testdir      #  Check whether there are "extra runs" for this testdir
1168      extra_runs=      extra_runs=
1169      if test "x$ADM" = x -a "x$use_seperate_build" = x1 ; then      if test "x$ADM" = x ; then
1170          ex_run_dirs=`( cd $dir ; echo input.* )`          ex_run_dirs=`( cd $dir ; echo input.* )`
1171          echo "ex_run_dirs='$ex_run_dirs'"          #echo "ex_run_dirs='$ex_run_dirs'"
1172          for exd in $ex_run_dirs ; do          for exd in $ex_run_dirs ; do
1173              name=`echo $exd | sed -e 's/input.//g'`              name=`echo $exd | sed -e 's/input.//g'`
1174              outf="$dir/results/output.txt.$name"              outf="$dir/results/output.$name.txt"
1175              if test -f $outf -a -r $outf ; then              if test -f $outf -a -r $outf ; then
1176                  extra_runs="$extra_runs $name"                  if test "x$MULTI_THREAD" = "xt" ; then
1177                        if test -r $dir"/"$exd"/eedata.mth" ; then
1178                            extra_runs="$extra_runs $name"
1179                        #else echo $dir"/"$exd"/eedata.mth: not found"
1180                        fi
1181                    else
1182                        extra_runs="$extra_runs $name"
1183                    fi
1184              fi              fi
1185          done          done
1186      fi      fi
1187    
     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  
   
     if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then  
         echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"  
         continue  
     fi  
   
1188      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1189      echo      echo
1190      echo "Experiment:  $dir"      if test "x$extra_runs" = "x" ; then
1191           echo "Experiment:  $dir"
1192        else
1193           echo "Experiment:  $dir ; extra_runs=$extra_runs"
1194        fi
1195      echo      echo
1196      unset genmake makedepend make run      unset genmake makedepend make run
1197      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'      results=$EMPTY_RESULTS
1198    
1199      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1200      rel_CDIR=$DRESULTS"/"$dir      rel_CDIR=$DRESULTS"/"$dir
# Line 922  for dir in $TESTDIRS ; do Line 1202  for dir in $TESTDIRS ; do
1202      CDIR=`pwd`"/$rel_CDIR"      CDIR=`pwd`"/$rel_CDIR"
1203            
1204      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1205          makeclean $dir/$builddir          echo '====>>> this is to check that we never go through this part <<< ==='
1206            makeclean $dir/$builddir \
1207                && run_clean $dir/$rundir
1208      else      else
1209          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1210              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1211                && run_clean $dir/$rundir \
1212              && symlink_mpifiles $dir $code_dir $builddir \              && symlink_mpifiles $dir $code_dir $builddir \
1213              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1214              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1215              && linkdata $use_seperate_build $dir/$rundir \              && linkdata $dir/$rundir $input_dirs \
1216              && runmodel $dir/$rundir && run=Y \              && runmodel $dir/$rundir && run=Y \
1217              && results=`testoutput $dir $rundir`              && results=`testoutput_run $dir $rundir $ref_outp`
1218      fi      fi
1219            
1220      echo      echo
1221      if test "x$ADM" = x ; then  #   if test "x$ADM" = x ; then
1222          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1223          echo          echo
1224          echo "$fres" >> $SUMMARY          echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1225          echo "fresults='$fres'" > $CDIR"/summary.txt"          touch $CDIR"/summary.txt"
1226            echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1227          echo "MACH='$MACH'" >> $CDIR"/summary.txt"          echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1228          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1229          echo "DATE='$DATE'" >> $CDIR"/summary.txt"          echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1230          echo "tdir='$dir'" >> $CDIR"/summary.txt"          echo "tdir='$dir'" >> $CDIR"/summary.txt"
1231    
         OLD_COMMAND=$COMMAND  
         COMMAND="./mitgcmuv > output.txt"  
1232          for ex in $extra_runs ; do          for ex in $extra_runs ; do
1233              test -e "$dir/tr_run.$ex" && rm -rf "$dir/tr_run.$ex"              unset run
1234              mkdir "$dir/tr_run.$ex"              results=$EMPTY_RESULTS
1235              links=`( cd "$dir/input" > /dev/null 2>&1 ; ls -1 | grep -v CVS )`              #  Create an output dir for each OPTFILE/tdir.ex combination
1236              (              rel_CDIR=$DRESULTS"/"$dir"."$ex
1237                  cd "$dir/tr_run.$ex"              mkdir $rel_CDIR
1238                  for i in $links; do              CDIR=`pwd`"/$rel_CDIR"
1239                      ln -s ../input/$i $i              test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1240                  done              run_clean $dir/tr_run.$ex
1241              )              linkdata $dir/tr_run.$ex input.$ex input
             links=`( cd "$dir/input.$ex" > /dev/null 2>&1 ; ls -1 | grep -v CVS )`  
             (  
                 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  
             )  
1242              runmodel $dir/tr_run.$ex && run=Y \              runmodel $dir/tr_run.$ex && run=Y \
1243                  && results=`testoutput $dir tr_run.$ex "."$ex`                  && results=`testoutput_run $dir tr_run.$ex "output.${ex}.txt"`
             fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`  
1244              fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`              fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1245              fres="$fres.$ex"              fres="$fres.$ex"
1246              echo              echo
1247              echo "$fres" >> $SUMMARY              echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1248              echo "fresults='$fres'" > $CDIR"/summary.txt"              touch $CDIR"/summary.txt"
1249                echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1250              echo "MACH='$MACH'" >> $CDIR"/summary.txt"              echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1251              echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"              echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1252              echo "DATE='$DATE'" >> $CDIR"/summary.txt"              echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1253              echo "tdir='$dir'" >> $CDIR"/summary.txt"              echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1254                if test "x$POSTCLEAN" = xt ; then
1255                    run_clean $dir/tr_run.$ex
1256                fi
1257          done          done
1258          COMMAND=$OLD_COMMAND  #   else
1259      else  #       fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1260          fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`  #       fres=$fres"$results   $dir"
1261          fres=$fres"$results   $dir"  #       echo
1262          echo  #       echo "$fres" >> $SUMMARY
1263          echo "$fres" >> $SUMMARY  #       touch $CDIR"/summary.txt"
1264          echo "fresults='$fres'" > $CDIR"/summary.txt"  #       echo "fresults='$fres'" >> $CDIR"/summary.txt"
1265          echo "MACH='$MACH'" >> $CDIR"/summary.txt"  #       echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1266          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"  #       echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1267          echo "DATE='$DATE'" >> $CDIR"/summary.txt"  #       echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1268          echo "tdir='$dir'" >> $CDIR"/summary.txt"  #       echo "tdir='$dir'" >> $CDIR"/summary.txt"
1269    #   fi
1270        if test "x$ADM" = xt ; then
1271            grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1272                               >> $CDIR"/summary.txt"
1273        fi
1274    
1275        #postclean $dir/$builddir
1276        if test "x$POSTCLEAN" = xt ; then
1277            makeclean $dir/$builddir \
1278                && run_clean $dir/$rundir
1279      fi      fi
1280            
1281      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
# Line 1028  else Line 1314  else
1314      fi      fi
1315  fi  fi
1316    
1317  # rm -f tmp_cmpnum.f a.out  rm -f tr_cmpnum.c tr_cmpnum
 rm -f tmp_cmpnum.c tmp_cmpnum  
1318    
1319  if test "x$CLEANUP" != xt ; then  if test "x$CLEANUP" != xt ; then
1320      cat $SUMMARY      cat $SUMMARY | sed 's/  \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \.//'
1321      if test -e tr_out.txt ; then      if test -e tr_out.txt ; then
1322          mv tr_out.txt tr_out.txt.old          mv tr_out.txt tr_out.txt.old
1323      fi      fi
1324      cat $SUMMARY > tr_out.txt      cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/  \.//g' > tr_out.txt
1325  fi  fi
1326    
1327  if test "x$DELDIR" = xt ; then  if test "x$DELDIR" = xt ; then

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

  ViewVC Help
Powered by ViewVC 1.1.22