/[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.32 by edhill, Sun Dec 7 07:06:13 2003 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=\"noieee\")"      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"
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\""
43      echo "  (-nogenmake|-ng)         skip the genmake stage"      echo "  (-nogenmake|-ng)         skip the genmake stage"
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"
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    
63  #  build the mpack utility  #  build the mpack utility
64  build_mpack()  build_mpack()
65  {  {
66      echo -n "building the mpack utility...  "      printf "building the mpack utility...  "
67      if test ! -x "$MPACKDIR/mpack" ; then      if test ! -x "$MPACKDIR/mpack" ; then
68          if test ! -d $MPACKDIR ; then          if test ! -d $MPACKDIR ; then
69              echo              echo
# Line 54  build_mpack() Line 73  build_mpack()
73              echo              echo
74              HAVE_MPACK=f              HAVE_MPACK=f
75          fi          fi
76          echo -n "building mpack...  "          printf "building mpack...  "
77          if test "x$CC" = x ; then          if test "x$CC" = x ; then
78              export CC=cc              export CC=cc
79          fi          fi
# Line 75  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      # 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 1>&2          echo testoutput_var: grep "$2" $1/results/$5 1>&2
123      fi      fi
124      grep "$2" $1/results/output.txt | 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 122  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 155  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  }  }
207    
208  testoutput()  check_for_add_mon_output()
209  {  {
210      # testoutput directory subdir      # Check for additional types of monitor output
211      #      if test "x$1" = x ; then
212      #  test output in "directory"          return
     if test "x$ADM" = x ; then  
         if [ $debug -gt 0 ]; then  
             echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2  
         fi  
         testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2; cg2dres=$?  
         if [ $debug -gt 0 ]; then  
             echo testoutput: cg2dres=$cg2dres 1>&2  
         fi  
         testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2; tmin=$?  
         testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2; tmax=$?  
         testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2; tmean=$?  
         testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2; tsd=$?  
         testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2; smin=$?  
         testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2; smax=$?  
         testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2; smean=$?  
         testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2; ssd=$?  
         testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2; umin=$?  
         testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2; umax=$?  
         testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2; umean=$?  
         testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2; usd=$?  
         testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2; vmin=$?  
         testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2; vmax=$?  
         testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2; vmean=$?  
         testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2; vsd=$?  
         dashnum $cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd \  
             $umin $umax $umean $usd $vmin $vmax $vmean $vsd  
     else  
         testoutput_ad $1 $2 "precision_grdchk_result"  
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"
220        ptr_add="$ptr_add trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
221        for ii in $PTRACERS_NUM ; do
222            for jj in $ptr_add ; do
223                name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
224                tst=`grep $name $1 | wc -l | awk '{print $1}'`
225                if test ! "x$tst" = x0 ; then
226                    eval "HAVE_PTR0"$ii"=t"
227                fi
228            done
229            #  eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"'
230        done
231    }
232    
233    testoutput_run()
234    {
235        # testoutput_run directory subdir reference_output
236        #
237        #  test output from 1 run in "directory"
238    #   if test "x$ADM" = x ; then
239            # default list of output variables to be checked:
240            #  1rst : main variable used to decide if it pass or FAIL
241            #  others : number of matching digits to be printed in summary.txt
242            listChk=$DEF_CHECK_LIST
243            #  load experiment-specific list from file "tr_checklist" (if it exist)
244            if test -r $1/$2/tr_checklist ; then listChk=`cat $1/$2/tr_checklist` ; fi
245            sVar=`echo $listChk | awk '{print $1}'`
246            # remove 1rst var and expand the list: + => min max mean s.d
247            listVar=`echo $listChk | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' \
248                                   | sed 's/+//g' | sed "s/^$sVar//"`
249            if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(I)='$listVar'" 1>&2 ; fi
250            for ii in 1 2 3 4 5 6 7 8 9 ; do
251              tst=`eval 'echo "$HAVE_PTR0'$ii'"'`
252             #echo "-- ptr test=" $tst "number of var=" `echo $listVar | awk '{print NF}'` 1>&2
253              if test "x$tst" != xt ; then listVar=`echo "$listVar" | sed "s/ pt$ii..//g"` ; fi
254            done
255            tst=`echo $sVar $listVar | awk '{ for(i=2;i<=NF;i++){t+=($i==$1)}; print t }'`
256            if test $tst != 1 ; then
257              if test $tst = 0 ; then echo "==> WARNING: selected var >$sVar< not found" 1>&2
258                     else echo "==> WARNING: found selected var >$sVar< $tst times" 1>&2 ; fi
259              echo "==> WARNING: in checked list:" $listVar 1>&2
260            #- put it back once:
261              listVar=" $sVar "`echo "$listVar " | sed "s/ $sVar / /g"`
262            fi
263            if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(M)='$listVar'" 1>&2 ; fi
264            echo "listVar='$listVar'" > $CDIR"/summary.txt"
265            allargs=""
266            for xx in $listVar
267            do
268              case $xx in
269               'PS')  if [ $debug -gt 0 ]
270                      then echo testoutput_run: testoutput_var $1 cg2d_init_res 1>&2 ; fi
271                      testoutput_var $1 "cg2d_init_res" "Press. Solver (cg2d)" $2 $3; yy=$?
272                      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              'Grad') testoutput_var $1 "ADM  precision_derivative_grad" "ADM Grad" $2 $3; yy=$? ;;
275               'Tmn') testoutput_var $1 "dynstat_theta_min"  "Theta minimum"  $2 $3; yy=$? ;;
276               'Tmx') testoutput_var $1 "dynstat_theta_max"  "Theta maximum"  $2 $3; yy=$? ;;
277               'Tav') testoutput_var $1 "dynstat_theta_mean" "Theta mean"     $2 $3; yy=$? ;;
278               'Tsd') testoutput_var $1 "dynstat_theta_sd"   "Theta Std.Dev"  $2 $3; yy=$? ;;
279               'Smn') testoutput_var $1 "dynstat_salt_min"  "Salt minimum"    $2 $3; yy=$? ;;
280               '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               '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               'Umx') testoutput_var $1 "dynstat_uvel_max"  "U maximum"       $2 $3; yy=$? ;;
285               'Uav') testoutput_var $1 "dynstat_uvel_mean" "U mean"          $2 $3; yy=$? ;;
286               '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 211  genmakemodel() Line 342  genmakemodel()
342      if test "x$NOGENMAKE" = xt ; then      if test "x$NOGENMAKE" = xt ; then
343          echo "genmake skipped!"          echo "genmake skipped!"
344      else      else
345          GENMAKE2="$BASH ../../../tools/genmake2"          if test "x$BASH" = x ; then
346                GENMAKE2="../../../tools/genmake2"
347            else
348                GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
349            fi
350          (          (
351              cd $1;              cd $1;
352              command="$GENMAKE2  -ds -m $MAKE"              command="$GENMAKE2  -ds -m $MAKE"
# Line 219  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 227  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=$?
380              cp Makefile $CDIR              #  Reduce the size of the testing emails!
381                head -100 Makefile > $CDIR/Makefile_head
382              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
383                  tail make.log                  tail make.log
384                  echo "genmakemodel: genmake failed" 1>&2                  echo "genmakemodel: genmake failed" 1>&2
# Line 247  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 271  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 302  makemodel() Line 470  makemodel()
470          if test -r Makefile ; then          if test -r Makefile ; then
471              printf 'make ... ' 1>&2              printf 'make ... ' 1>&2
472              if test "x$ADM" = x ; then              if test "x$ADM" = x ; then
473                  $MAKE >> make.log 2>&1                  if test "x$JOBS" = x ; then
474                        $MAKE >> make.log 2>&1
475                    else
476                        $MAKE -j $JOBS >> make.log 2>&1
477                    fi
478              else              else
479                  $MAKE adall >> make.log 2>&1                  $MAKE adall >> make.log 2>&1
480              fi              fi
# Line 329  symlink_mpifiles() Line 501  symlink_mpifiles()
501      code_dir=$2      code_dir=$2
502      BUILD_DIR=$dir/$3      BUILD_DIR=$dir/$3
503      CODE_DIR=$dir/$code_dir      CODE_DIR=$dir/$code_dir
504        
505      # These are files that should replace their counter-part when using -mpi      # These are files that should replace their counter-part when using -mpi
506      MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`      MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`
507    
# Line 344  symlink_mpifiles() Line 516  symlink_mpifiles()
516              RETVAL=$?              RETVAL=$?
517              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
518                  if ! test -f $BUILD_DIR/$i ; then                  if ! test -f $BUILD_DIR/$i ; then
519                  #echo Linking $name to $i                      #echo Linking $name to $i
520                      (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)                      (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
521                  fi                  fi
522              fi              fi
523          done          done
524      else      else
525      # NO: We undo any _mpi symbolically linked files          # NO: We undo any _mpi symbolically linked files
526          for ii in $MPI_FILES ; do          for ii in $MPI_FILES ; do
527              i=`echo $ii | sed 's:^\./::'`              i=`echo $ii | sed 's:^\./::'`
528              name=`echo $i | sed 's:_mpi::' `              name=`echo $i | sed 's:_mpi::' `
529              if test -L $BUILD_DIR/$name ; then              if test -L $BUILD_DIR/$name ; then
530                  linktarg=`(cd $BUILD_DIR; readlink $name)`                  cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
531                  if test $linktarg = "../$code_dir/$name"_mpi ; then                  RETVAL=$?
532                  #echo Un-linking $name from $linktarg                  if test "x$RETVAL" = x0 ; then
533                        #echo Un-linking $name from $linktarg
534                      rm -f $BUILD_DIR/$name                      rm -f $BUILD_DIR/$name
535                  fi                  fi
536              fi              fi
# Line 368  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                        if test ! -r eedata ; then
556                            ln -sf "../"$1"/eedata.mth" eedata ;
557                            printf 'eedata.mth ' 1>&2
558                      fi                      fi
559                  done                  else
560              else                  # not multi-threaded test: remove eedata symbolic link
561                  files=`( cd ../input ; ls -1 *.bin | grep -v CVS )`                      if test -h eedata ; then rm -f eedata ; fi
562                  for i in $files ; do                  fi
                     if test ! -d "../input/"$i ; then  
                         ln -sf "../input/"$i $i  
                     fi  
                 done  
                 files=`( cd ../input_ad ; ls -1 | grep -v CVS )`  
                 for i in $files ; do  
                     if test ! -d "../input_ad/"$i ; then  
                         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 407  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          $COMMAND >> run.log 2>&1          echo
597          RETVAL=$?          if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
598          if test "x$RETVAL" = x0 ; then              echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_00
599              echo successful 1>&2              ln -sf "../"$builddir"/"$EXECUTABLE .
600              if test "x$ADM" = x ; then          fi
601                  cp output.txt $CDIR"/output.txt"          if test ! -x $EXECUTABLE ; then
602                    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              else
615                  cp output.txt_adm $CDIR"/output.txt_adm"                  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              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
632                echo successful 1>&2
633                # === Reduce the size of the testing emails!
634                #cp $OUTPUTFILE $CDIR"/"$OUTPUTFILE
635                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
642              return 1              return 1
643          fi          fi
644      )      )
# Line 432  createcodelet() Line 648  createcodelet()
648  {  {
649      # create codelet for comparing model output      # create codelet for comparing model output
650    
651      echo -n "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;    int linnum,cmplin,best,lncnt;
657    double a,b,diff;    double a,b,abave,relerr;
658    best = -16;    best = -22;
659    while( 1 )  {    lncnt = 0;
660      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;
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 479  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 495  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 536  clean=0 Line 748  clean=0
748  expts=''  expts=''
749  # ieee=1  # ieee=1
750    
751  IEEE=  IEEE=true
752  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
753      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
754  fi  fi
# Line 547  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=
780  MPI=f  MPI=f
781    MULTI_THREAD=f
782    OUTDIR=
783    DELDIR=
784    
785  ADM=  ADM=
786    
787  echo -n "parsing options...  "  # Additional monitor types
788    PTRACERS_NUM="1 2 3 4 5"
789    
790    MATCH_CRIT=13
791    
792    printf "parsing options...  "
793    
794  ac_prev=  ac_prev=
795  for ac_option ; do  for ac_option ; do
# Line 595  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 610  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 ;;
860            -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 622  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 633  for ac_option ; do Line 887  for ac_option ; do
887          -debug) debug=1 ;;          -debug) debug=1 ;;
888          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
889    
890            -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 653  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 686  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 699  if test "x$RETVAL" != x0 ; then Line 1035  if test "x$RETVAL" != x0 ; then
1035      exit 1      exit 1
1036  fi  fi
1037  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
1038  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1039  start_date=`date`  start_date=`date`
1040  echo $start_date > $SUMMARY  echo $start_date > $SUMMARY
1041    
# Line 731  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      cat << EOF | tee -a $SUMMARY      if [ $MATCH_CRIT -lt 10 ] ;
1071                  T           S           U           V      then line_0="default  "$MATCH_CRIT ;
1072  G D M    c        m  s        m  s        m  s        m  s      else line_0="default "$MATCH_CRIT ; fi
1073  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-----"
1074  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-----"
1075  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"
1076        line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
1077  EOF      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  ."
1079        for ii in $PTRACERS_NUM ; do
1080            #  tst=`eval 'echo $HAVE_PTR0'$ii`
1081            #  if test "x$tst" = xt ; then
1082            line_0="$line_0  --PTR 0"$ii"--"
1083            line_1="$line_1        m  s"
1084            line_2="$line_2  m  m  e  ."
1085            line_3="$line_3  i  a  a  d"
1086            line_4="$line_4  n  x  n  ."
1087            #  fi
1088        done
1089        echo "$line_0" | tee -a $SUMMARY
1090        echo "$line_1" | tee -a $SUMMARY
1091        echo "$line_2" | tee -a $SUMMARY
1092        echo "$line_3" | tee -a $SUMMARY
1093        echo "$line_4" | tee -a $SUMMARY
1094        echo " "       | tee -a $SUMMARY
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 757  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 769  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
   
     builddir="input"  
     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  
       
1143      if test "x$ADM" = x ; then      if test "x$ADM" = x ; then
1144          code_dir=code          check_for_add_mon_output  $fout
         CODE_DIR=$dir/code  
     else  
         code_dir=code_ad  
         CODE_DIR=$dir/code_ad  
1145      fi      fi
1146    
1147        # Check for additional types of monitor output
1148    
1149        builddir="build"
1150        if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1151        rundir="run"
1152        if test ! -d $dir/$rundir ; then
1153            rundir=$builddir
1154        fi
1155        CODE_DIR=$dir/$code_dir
1156      BUILD_DIR=$dir/$builddir      BUILD_DIR=$dir/$builddir
1157    
1158      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
1159          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1160          continue          continue
1161      fi      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
1168        extra_runs=
1169        if test "x$ADM" = x ; then
1170            ex_run_dirs=`( cd $dir ; echo input.* )`
1171            #echo "ex_run_dirs='$ex_run_dirs'"
1172            for exd in $ex_run_dirs ; do
1173                name=`echo $exd | sed -e 's/input.//g'`
1174                outf="$dir/results/output.$name.txt"
1175                if test -f $outf -a -r $outf ; then
1176                    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
1185            done
1186        fi
1187    
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 815  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      else          echo
1224          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
1225          fres=$fres"$results   $dir"          touch $CDIR"/summary.txt"
1226            echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1227            echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1228            echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1229            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1230            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1231    
1232            for ex in $extra_runs ; do
1233                unset run
1234                results=$EMPTY_RESULTS
1235                #  Create an output dir for each OPTFILE/tdir.ex combination
1236                rel_CDIR=$DRESULTS"/"$dir"."$ex
1237                mkdir $rel_CDIR
1238                CDIR=`pwd`"/$rel_CDIR"
1239                test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1240                run_clean $dir/tr_run.$ex
1241                linkdata $dir/tr_run.$ex input.$ex input
1242                runmodel $dir/tr_run.$ex && run=Y \
1243                    && results=`testoutput_run $dir tr_run.$ex "output.${ex}.txt"`
1244                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1245                fres="$fres.$ex"
1246                echo
1247                echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1248                touch $CDIR"/summary.txt"
1249                echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1250                echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1251                echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1252                echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1253                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
1258    #   else
1259    #       fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`
1260    #       fres=$fres"$results   $dir"
1261    #       echo
1262    #       echo "$fres" >> $SUMMARY
1263    #       touch $CDIR"/summary.txt"
1264    #       echo "fresults='$fres'" >> $CDIR"/summary.txt"
1265    #       echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1266    #       echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1267    #       echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1268    #       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
     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"  
1280            
1281      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1282            
1283  done  done
1284    
1285  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1286  echo $start_date >> $SUMMARY  echo $start_date >> $SUMMARY
1287  echo -n "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
1288  date >> $SUMMARY  date >> $SUMMARY
1289    
1290  #  If addresses were supplied and mpack built successfully, then try  #  If addresses were supplied and mpack built successfully, then try
# Line 859  else Line 1295  else
1295      if test "x$HAVE_MPACK" = xt ; then      if test "x$HAVE_MPACK" = xt ; then
1296          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1297              && gzip $DRESULTS".tar" \              && gzip $DRESULTS".tar" \
1298              && $MPACK -s MITgcm-test -m 1500000 $DRESULTS".tar.gz" $ADDRESSES              && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1299          RETVAL=$?          RETVAL=$?
1300          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1301              echo              echo
# Line 878  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
1326    
1327    if test "x$DELDIR" = xt ; then
1328        rm -rf $DRESULTS
1329  fi  fi
1330    

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

  ViewVC Help
Powered by ViewVC 1.1.22