/[MITgcm]/MITgcm/verification/testreport
ViewVC logotype

Diff of /MITgcm/verification/testreport

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.30 by edhill, Fri Dec 5 17:46:32 2003 UTC revision 1.109 by jmc, Thu Dec 13 18:28:41 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 "  (-gsl)                   compile with \"-gsl\" flag"
19        echo "  (-of=|-optfile=)STRING   list of optfiles to use"
20      echo "  (-a|-addr) STRING        list of email recipients"      echo "  (-a|-addr) STRING        list of email recipients"
21      echo "                             (DEF=\"edhill@mitgcm.org\")"      echo "                             (DEF=\"\" no email is sent)"
22      echo "  (-t|-tdir) STRING        list of test dirs to use"      echo "  (-t|-tdir) STRING        list of group and/or exp. dirs to test"
23      echo "                             (DEF=\"\" which builds all)"      echo "                             (recognized groups: basic, tutorials)"
24        echo "                             (DEF=\"\" which test all)"
25        echo "  (-skd|-skipdir) STRING   list of exp. dirs to skip"
26        echo "                             (DEF=\"\" which test all)"
27      echo "  (-b|-bash) STRING        preferred location of a \"bash\" or"      echo "  (-b|-bash) STRING        preferred location of a \"bash\" or"
28      echo "                             Bourne-compatible \"sh\" shell"      echo "                             Bourne-compatible \"sh\" shell"
29      echo "                             (DEF=\"\" for \"bash\")"      echo "                             (DEF=\"\" for \"bash\")"
# Line 27  usage() Line 32  usage()
32      echo "                             (DEF=\"make output.txt\")"      echo "                             (DEF=\"make output.txt\")"
33      echo "  (-m|-make) STRING        command to use for \"make\""      echo "  (-m|-make) STRING        command to use for \"make\""
34      echo "                             (DEF=\"make\")"      echo "                             (DEF=\"make\")"
35        echo "  (-odir) STRING           used to build output directory name"
36        echo "                             (DEF=\"hostname\")"
37        echo "  (-ptr|-ptracers) STRING  specify which ptracers to test"
38        echo "                             (DEF=\"1 2 3 4 5\")"
39        echo "  (-match) NUMBER          Matching Criteria (number of digits)"
40        echo "                             (DEF=\"12\")"
41        echo "  (-j) JOBS                use \"make -j JOBS\" for parallel builds"
42      echo "  (-clean)                 *ONLY* run \"make CLEAN\""      echo "  (-clean)                 *ONLY* run \"make CLEAN\""
43      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""
44      echo "  (-nogenmake|-ng)         skip the genmake stage"      echo "  (-nogenmake|-ng)         skip the genmake stage"
45      echo "  (-noclean|-nc)           skip the \"make clean\" stage"      echo "  (-noclean|-nc)           skip the \"make clean\" stage"
46      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"
47        echo "  (-deldir|-dd)            on success, delete the output directory"
48        echo "  (-ts)                    provide timing information per timestep"
49        echo "  (-papis)                 provide MFlop/s per timestep using PAPI"
50        echo "  (-pcls)                  provide MFlop/s per timestep using PCL"
51      echo      echo
52      echo "and where STRING follows a whitespace-delimited format"      echo "and where STRING can be a whitespace-delimited list"
53      echo "such as:"      echo "such as:"
54        echo
55      echo "  -t 'exp0 exp2 exp3' "      echo "  -t 'exp0 exp2 exp3' "
56      echo "  -addr='abc@123.com testing@home.org'"      echo "  -addr='abc@123.com testing@home.org'"
57      echo      echo
58        echo "provided that the expression is properly quoted within the current"
59        echo "shell (note the use of single quotes to protect white space)."
60        echo
61      exit 1      exit 1
62  }  }
63    
64  #  build the mpack utility  #  build the mpack utility
65  build_mpack()  build_mpack()
66  {  {
67      echo -n "building the mpack utility...  "      printf "building the mpack utility...  "
68      if test ! -x "$MPACKDIR/mpack" ; then      if test ! -x "$MPACKDIR/mpack" ; then
69          if test ! -d $MPACKDIR ; then          if test ! -d $MPACKDIR ; then
70              echo              echo
# Line 54  build_mpack() Line 74  build_mpack()
74              echo              echo
75              HAVE_MPACK=f              HAVE_MPACK=f
76          fi          fi
77          echo -n "building mpack...  "          printf "building mpack...  "
78          if test "x$CC" = x ; then          if test "x$CC" = x ; then
79              export CC=cc              export CC=cc
80          fi          fi
# Line 75  build_mpack() Line 95  build_mpack()
95      echo "OK"      echo "OK"
96  }  }
97    
98  testoutput_for_prop()  testoutput_var()
99  {  {
100      # testoutput_for_prop dir s1 label subdir      # testoutput_var dir s1 label subdir reference_output
101      #      #
102      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt      #  compares 1 variable output selected from file $dir/$subdir/$OUTPUTFILE
103      #  using search strings s1 and text label      #     with same output from reference file $dir/results/$reference_output
104        #  using search strings s1 and text label
105    
106      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
107          echo testoutput_for_prop: grep "$2" $1/$4/output.txt 1>&2          echo testoutput_var: grep "$2" $1/$4/$OUTPUTFILE 1>&2
108      fi      fi
109      if [ -r $1/$4/output.txt ]; then      if [ -r $1/$4/$OUTPUTFILE ]; then
110          grep "$2" $1/$4/output.txt | sed 's/.*=//' | cat -n > tmp1.txt          grep "$2" $1/$4/$OUTPUTFILE | sed 's/.*=//' | cat -n > tmp1.txt
111          lncnt=`wc -l tmp1.txt | awk '{print $1}' `          lncntA=`wc -l tmp1.txt | awk '{print $1}' `
112          if [ $lncnt -lt 3 ]; then          if [ $lncntA -lt 2 ]; then
113              if [ $verbose -gt 0 ]; then              if [ $verbose -gt 0 ]; then
114                  echo Not enough lines of output when searching for "$2" 1>&2                  echo Not enough lines of output when searching for "$2" 1>&2
115              fi              fi
116              return 99              return 99
117          fi          fi
118      else      else
119          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
120          return 99          return 99
121      fi      fi
122      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
123          echo testoutput_for_prop: grep "$2" $1/results/output.txt 1>&2          echo testoutput_var: grep "$2" $1/results/$5 1>&2
124      fi      fi
125      grep "$2" $1/results/output.txt | sed 's/.*=//' | cat -n > tmp2.txt      grep "$2" $1/results/$5 | sed 's/.*=//' | cat -n > tmp2.txt
126      lncnt=`wc -l tmp2.txt | awk '{print $1}' `      lncntB=`wc -l tmp2.txt | awk '{print $1}' `
127      if [ $lncnt -lt 3 ]; then      if [ $lncntB -lt 2 ]; then
128          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
129              echo Not enough lines of output when searching for "$2" 1>&2              echo Not enough lines of output when searching for "$2" 1>&2
130          fi          fi
131          return 99          return 99
132      fi      fi
133        if [ $lncntA -ne $lncntB ]; then
134            if [ $verbose -gt 0 ]; then
135                echo Not same Nb of lines when searching for "$2" ":" $lncntA $lncntB 1>&2
136            fi
137            return 99
138        fi
139        has_nan=`cat tmp1.txt | grep -i nan | wc -l`
140        if [ $has_nan -gt 0  ] ; then
141            echo testoutput_var: $OUTPUTFILE contains $has_nan NaN values  1>&2
142            return 99
143        fi
144        has_inf=`cat tmp1.txt | grep -i inf | wc -l`
145        if [ $has_inf -gt 0  ] ; then
146            echo testoutput_var: $OUTPUTFILE contains $has_inf Inf values  1>&2
147            return 99
148        fi
149      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
150          echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2          echo testoutput_var: join tmp1.txt tmp2.txt 1>&2
151      fi      fi
152      join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt      join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt
153      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
154          echo testoutput_for_prop: compare_lines 1>&2          echo testoutput_var: compare_lines 1>&2
155      fi      fi
156      if [ $verbose -gt 1 ]; then      if [ $verbose -gt 1 ]; then
157          cat tmp3.txt 1>&2          cat tmp3.txt 1>&2
# Line 122  testoutput_for_prop() Line 159  testoutput_for_prop()
159      echo "-1" >> tmp3.txt      echo "-1" >> tmp3.txt
160      # 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
161      cat tmp3.txt | sed -e 's|:||g' > tmp4.txt      cat tmp3.txt | sed -e 's|:||g' > tmp4.txt
162      digits_of_similarity=`./tmp_cmpnum < tmp4.txt`      digits_of_similarity=`./tr_cmpnum < tmp4.txt`
163      if [ $digits_of_similarity -eq 99 ]; then      if [ $digits_of_similarity -eq 99 ]; then
164          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
165              echo testoutput_for_prop: No comparison was available for \"$2\" 1>&2              echo testoutput_var: No comparison was available for \"$3\" 1>&2
166          fi          fi
167          digits_of_similarity=99          digits_of_similarity=99
168      else      else
169          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
170              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
171          fi          fi
172      fi      fi
173      rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt      rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt
# Line 138  testoutput_for_prop() Line 175  testoutput_for_prop()
175      return $digits_of_similarity      return $digits_of_similarity
176  }  }
177    
178  dashnum()  check_for_add_mon_output()
179  {  {
180      # dashnum n1 n2 n3 ...      # Check for additional types of monitor output
181      #      if test "x$1" = x ; then
182      #  print numbers using %3i format or "--" if number = 99          return
183        fi
184    
185      for num in $@ ; do      for ii in $PTRACERS_NUM ; do
186          if [ $num = 99 ]; then          eval "HAVE_PTR0"$ii"=f"
             printf ' --'  
         else  
             printf '%3i' $num  
         fi  
187      done      done
 }  
188    
189  testoutput_ad()      ptr_add="trcstat_ptracerXX_min trcstat_ptracerXX_max"
190  {      ptr_add="$ptr_add trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
191      grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $5}' > t05.txt      for ii in $PTRACERS_NUM ; do
192      grep $3 $1/$2/output.txt_adm | awk '{print NR " " $5}' > t15.txt          for jj in $ptr_add ; do
193      grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $6}' > t06.txt              name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
194      grep $3 $1/$2/output.txt_adm | awk '{print NR " " $6}' > t16.txt              tst=`grep $name $1 | wc -l | awk '{print $1}'`
195      join t05.txt t15.txt > t5.txt              if test ! "x$tst" = x0 ; then
196      join t06.txt t16.txt > t6.txt                  eval "HAVE_PTR0"$ii"=t"
197      echo "-1" >> t5.txt              fi
198      echo "-1" >> t6.txt          done
199      digits_5=`./tmp_cmpnum < t5.txt`          #  eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"'
200      digits_6=`./tmp_cmpnum < t6.txt`      done
     dashnum $digits_5 $digits_6  
     rm -f t[01][56].txt t[56].txt  
201  }  }
202    
203  testoutput()  testoutput_run()
204  {  {
205      # testoutput directory subdir      # testoutput_run directory subdir reference_output
206      #      #
207      #  test output in "directory"      #  test output from 1 run in "directory"
208      if test "x$ADM" = x ; then  # --> same processing for adjoint & forward test
209          if [ $debug -gt 0 ]; then          # default list of output variables to be checked:
210              echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2          #  1rst : main variable used to decide if it pass or FAIL
211          fi          #  others : number of matching digits to be printed in summary.txt
212          testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2; cg2dres=$?          listChk=$DEF_CHECK_LIST
213          if [ $debug -gt 0 ]; then          #  load experiment-specific list from file "tr_checklist" (if it exist)
214              echo testoutput: cg2dres=$cg2dres 1>&2          if test -r $1/$2/tr_checklist ; then listChk=`cat $1/$2/tr_checklist` ; fi
215          fi          sVar=`echo $listChk | awk '{print $1}'`
216          testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2; tmin=$?          # remove 1rst var and expand the list: + => min max mean s.d
217          testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2; tmax=$?          listVar=`echo $listChk | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' \
218          testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2; tmean=$?                                 | sed 's/+//g' | sed "s/^$sVar//"`
219          testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2; tsd=$?          if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(I)='$listVar'" 1>&2 ; fi
220          testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2; smin=$?          for ii in 1 2 3 4 5 6 7 8 9 ; do
221          testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2; smax=$?            tst=`eval 'echo "$HAVE_PTR0'$ii'"'`
222          testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2; smean=$?           #echo "-- ptr test=" $tst "number of var=" `echo $listVar | awk '{print NF}'` 1>&2
223          testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2; ssd=$?            if test "x$tst" != xt ; then listVar=`echo "$listVar" | sed "s/ pt$ii..//g"` ; fi
224          testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2; umin=$?          done
225          testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2; umax=$?          tst=`echo $sVar $listVar | awk '{ for(i=2;i<=NF;i++){t+=($i==$1)}; print t }'`
226          testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2; umean=$?          if test $tst != 1 ; then
227          testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2; usd=$?            if test $tst = 0 ; then echo "==> WARNING: selected var >$sVar< not found" 1>&2
228          testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2; vmin=$?                   else echo "==> WARNING: found selected var >$sVar< $tst times" 1>&2 ; fi
229          testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2; vmax=$?            echo "==> WARNING: in checked list:" $listVar 1>&2
230          testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2; vmean=$?          #- put it back once:
231          testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2; vsd=$?            listVar=" $sVar "`echo "$listVar " | sed "s/ $sVar / /g"`
232          dashnum $cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd \          fi
233              $umin $umax $umean $usd $vmin $vmax $vmean $vsd          if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(M)='$listVar'" 1>&2 ; fi
234      else          echo "listVar='$listVar'" > $CDIR"/summary.txt"
235          testoutput_ad $1 $2 "precision_grdchk_result"          allargs=""
236      fi          for xx in $listVar
237            do
238              case $xx in
239               'PS')  if [ $debug -gt 0 ]
240                      then echo testoutput_run: testoutput_var $1 cg2d_init_res 1>&2 ; fi
241                      testoutput_var $1 "cg2d_init_res" "Press. Solver (cg2d)" $2 $3; yy=$?
242                      if [ $debug -gt 0 ] ; then echo testoutput_run: cg2dres=$yy 1>&2 ; fi ;;
243              'Cost') testoutput_var $1 "ADM  precision_derivative_cost" "ADM Cost" $2 $3; yy=$? ;;
244              'Grad') testoutput_var $1 "ADM  precision_derivative_grad" "ADM Grad" $2 $3; yy=$? ;;
245               'Tmn') testoutput_var $1 "dynstat_theta_min"  "Theta minimum"  $2 $3; yy=$? ;;
246               'Tmx') testoutput_var $1 "dynstat_theta_max"  "Theta maximum"  $2 $3; yy=$? ;;
247               'Tav') testoutput_var $1 "dynstat_theta_mean" "Theta mean"     $2 $3; yy=$? ;;
248               'Tsd') testoutput_var $1 "dynstat_theta_sd"   "Theta Std.Dev"  $2 $3; yy=$? ;;
249               'Smn') testoutput_var $1 "dynstat_salt_min"  "Salt minimum"    $2 $3; yy=$? ;;
250               'Smx') testoutput_var $1 "dynstat_salt_max"  "Salt maximum"    $2 $3; yy=$? ;;
251               'Sav') testoutput_var $1 "dynstat_salt_mean" "Salt mean"       $2 $3; yy=$? ;;
252               'Ssd') testoutput_var $1 "dynstat_salt_sd"   "Salt Std.Dev"    $2 $3; yy=$? ;;
253               'Umn') testoutput_var $1 "dynstat_uvel_min"  "U minimum"       $2 $3; yy=$? ;;
254               'Umx') testoutput_var $1 "dynstat_uvel_max"  "U maximum"       $2 $3; yy=$? ;;
255               'Uav') testoutput_var $1 "dynstat_uvel_mean" "U mean"          $2 $3; yy=$? ;;
256               'Usd') testoutput_var $1 "dynstat_uvel_sd"   "U Std.Dev"       $2 $3; yy=$? ;;
257               'Vmn') testoutput_var $1 "dynstat_vvel_min"  "V minimum"       $2 $3; yy=$? ;;
258               'Vmx') testoutput_var $1 "dynstat_vvel_max"  "V maximum"       $2 $3; yy=$? ;;
259               'Vav') testoutput_var $1 "dynstat_vvel_mean" "V mean"          $2 $3; yy=$? ;;
260               'Vsd') testoutput_var $1 "dynstat_vvel_sd"   "V Std.Dev"       $2 $3; yy=$? ;;
261            'pt1mn'|'pt2mn'|'pt3mn'|'pt4mn'|'pt5mn') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
262               testoutput_var $1 "trcstat_ptracer0"$ii"_min"  "p0"$ii"_min"   $2 $3; yy=$? ;;
263            'pt1mx'|'pt2mx'|'pt3mx'|'pt4mx'|'pt5mx') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
264               testoutput_var $1 "trcstat_ptracer0"$ii"_max"  "p0"$ii"_max"   $2 $3; yy=$? ;;
265            'pt1av'|'pt2av'|'pt3av'|'pt4av'|'pt5av') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
266               testoutput_var $1 "trcstat_ptracer0"$ii"_mean" "p0"$ii"_mean" $2 $3; yy=$? ;;
267            'pt1sd'|'pt2sd'|'pt3sd'|'pt4sd'|'pt5sd') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
268               testoutput_var $1 "trcstat_ptracer0"$ii"_sd"   "p0"$ii"_StDv"  $2 $3; yy=$? ;;
269             'Qntmn') testoutput_var $1 "extforcing_qnet_min" "Qnet minimum"  $2 $3; yy=$? ;;
270             'Qntmx') testoutput_var $1 "extforcing_qnet_max" "Qnet maximum"  $2 $3; yy=$? ;;
271             'Qntav') testoutput_var $1 "extforcing_qnet_mean" "Qnet mean"    $2 $3; yy=$? ;;
272             'Qntsd') testoutput_var $1 "extforcing_qnet_sd"  "Qnet Std.Dev"  $2 $3; yy=$? ;;
273             'aSImn') testoutput_var $1 "seaice_area_min"   "SIce Area min"   $2 $3; yy=$? ;;
274             'aSImx') testoutput_var $1 "seaice_area_max"   "SIce Area max"   $2 $3; yy=$? ;;
275             'aSIav') testoutput_var $1 "seaice_area_mean"  "SIce Area mean"  $2 $3; yy=$? ;;
276             'aSIsd') testoutput_var $1 "seaice_area_sd"    "SIce Area StDv"  $2 $3; yy=$? ;;
277             'hSImn') testoutput_var $1 "seaice_heff_min"   "SIce Heff min"   $2 $3; yy=$? ;;
278             'hSImx') testoutput_var $1 "seaice_heff_max"   "SIce Hell max"   $2 $3; yy=$? ;;
279             'hSIav') testoutput_var $1 "seaice_heff_mean"  "SIce Hell mean"  $2 $3; yy=$? ;;
280             'hSIsd') testoutput_var $1 "seaice_heff_sd"    "SIce Hell StDv"  $2 $3; yy=$? ;;
281            'AthSiG') testoutput_var $1 "thSI_Ice_Area_G" "thSIc Area Global" $2 $3; yy=$? ;;
282            'AthSiS') testoutput_var $1 "thSI_Ice_Area_S" "thSIc Area South"  $2 $3; yy=$? ;;
283            'AthSiN') testoutput_var $1 "thSI_Ice_Area_N" "thSIc Area North"  $2 $3; yy=$? ;;
284            'HthSiG') testoutput_var $1 "thSI_IceH_ave_G" "thSIc H Global"    $2 $3; yy=$? ;;
285            'HthSiS') testoutput_var $1 "thSI_IceH_ave_S" "thSIc H South"     $2 $3; yy=$? ;;
286            'HthSiN') testoutput_var $1 "thSI_IceH_ave_N" "thSIc H North"     $2 $3; yy=$? ;;
287                  *) yy=99; echo "WARNING: asking for var=$xx : not recognized !" 1>&2 ;;
288              esac
289              if test $xx = $sVar
290              then allargs="$allargs > $yy <"
291              else allargs="$allargs $yy"
292              fi
293            done
294    
295            nbVar=`echo $listVar | awk '{print NF}'`
296            if [ $nbVar -lt $LEN_CHECK_LIST ] ; then
297            #-- fill line (up to standard length) with dot:
298              adNul=`expr $LEN_CHECK_LIST - $nbVar | awk '{for(i=1;i<=$1;i++){print "."}}'`
299              echo $allargs $adNul
300            else
301              echo $allargs
302            fi
303    # <-- same processing for adjoint & forward test
304  }  }
305    
306  genmakemodel()  genmakemodel()
# Line 211  genmakemodel() Line 309  genmakemodel()
309      if test "x$NOGENMAKE" = xt ; then      if test "x$NOGENMAKE" = xt ; then
310          echo "genmake skipped!"          echo "genmake skipped!"
311      else      else
312          GENMAKE2="$BASH ../../../tools/genmake2"          if test "x$BASH" = x ; then
313                GENMAKE2="../../../tools/genmake2"
314            else
315                GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
316            fi
317          (          (
318              cd $1;              cd $1;
319              command="$GENMAKE2  -ds -m $MAKE"              command="$GENMAKE2  -ds -m $MAKE"
# Line 219  genmakemodel() Line 321  genmakemodel()
321                  command="$command --mods=../code"                  command="$command --mods=../code"
322              else              else
323                  command="$command --mods=../code_ad"                  command="$command --mods=../code_ad"
                 command="$command -adof=../../../tools/adjoint_options/adjoint_staf"  
324              fi              fi
325              if test "x$OPTFILE" != xNONE ; then              if test "x$OPTFILE" != xNONE ; then
326                  command="$command --optfile=$OPTFILE"                  command="$command --optfile=$OPTFILE"
# Line 227  genmakemodel() Line 328  genmakemodel()
328              if test "x$IEEE" != x ; then              if test "x$IEEE" != x ; then
329                  command="$command -ieee"                  command="$command -ieee"
330              fi              fi
331                if test "x$GSL" = xt ; then
332                    command="$command -gsl"
333                fi
334                if test "x$MPI" = xt ; then
335                    command="$command -mpi"
336                fi
337                if test "x$TS" = xt ; then
338                    command="$command -ts"
339                fi
340                if test "x$PAPIS" = xt ; then
341                    command="$command -papis"
342                else
343                if test "x$PCLS" = xt ; then
344                    command="$command -pcls"
345                fi
346                fi
347              printf 'genmake ... ' 1>&2              printf 'genmake ... ' 1>&2
348              $command > make.log 2>&1              $command > make.log 2>&1
349              RETVAL=$?              RETVAL=$?
350              cp Makefile $CDIR              #  Reduce the size of the testing emails!
351                head -100 Makefile > $CDIR/Makefile_head
352              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
353                  tail make.log                  tail make.log
354                  echo "genmakemodel: genmake failed" 1>&2                  echo "genmakemodel: genmake failed" 1>&2
# Line 247  makeclean() Line 365  makeclean()
365  {  {
366      # makeclean directory      # makeclean directory
367      if test "x$NOCLEAN" = xt ; then      if test "x$NOCLEAN" = xt ; then
368          echo "make CLEAN skipped!"          echo "make Clean skipped!"
369      else      else
370          (          (
371              cd $1;              cd $1;
372              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  
373              if test -r Makefile ; then              if test -r Makefile ; then
374                  $MAKE CLEAN >> make.log 2>&1                  printf 'clean build-dir: make Clean ... ' 2>&1
375                    $MAKE Clean >> make.log 2>&1
376                  RETVAL=$?                  RETVAL=$?
377                  if test "x$RETVAL" != x0 ; then                  if test "x$RETVAL" != x0 ; then
378                      tail make.log                      tail make.log
379                      echo "makeclean: \"make CLEAN\" failed" 1>&2                      echo "makeclean: \"make Clean\" failed" 1>&2
380                      cp make.log $CDIR"/make.log"                      cp make.log $CDIR"/make.log"
381                      return 1                      return 1
382                  fi                  fi
# Line 271  makeclean() Line 387  makeclean()
387      fi      fi
388  }  }
389    
390    run_clean()
391    {
392        # run_clean directory
393        if test "x$NOCLEAN" = xt ; then
394            echo "run_clean skipped!"
395        else
396            (
397                cd $1;
398                printf 'clean run-dir ... ' 2>&1
399                # part of what is done after "make clean" when doing "make CLEAN"
400                find . -name "*.meta" -exec rm {} \;
401                find . -name "*.data" -exec rm {} \;
402                find . -name "fort.*" -exec rm {} \;
403                find . -type l -exec rm {} \;
404                rm -f $EXECUTABLE *.txt STD* *diagnostics.log datetime
405                rm -rf mnc_test_*
406                rm -f *_MIT_CE_000.opt0000 costfunction*0000
407                echo successful 1>&2
408                exit 0
409            )
410        fi
411    }
412    
413  makedependmodel()  makedependmodel()
414  {  {
415      # makedependmodel directory      # makedependmodel directory
# Line 302  makemodel() Line 441  makemodel()
441          if test -r Makefile ; then          if test -r Makefile ; then
442              printf 'make ... ' 1>&2              printf 'make ... ' 1>&2
443              if test "x$ADM" = x ; then              if test "x$ADM" = x ; then
444                  $MAKE >> make.log 2>&1                  if test "x$JOBS" = x ; then
445                        $MAKE >> make.log 2>&1
446                    else
447                        $MAKE -j $JOBS >> make.log 2>&1
448                    fi
449              else              else
450                  $MAKE adall >> make.log 2>&1                  $MAKE adall >> make.log 2>&1
451              fi              fi
# Line 329  symlink_mpifiles() Line 472  symlink_mpifiles()
472      code_dir=$2      code_dir=$2
473      BUILD_DIR=$dir/$3      BUILD_DIR=$dir/$3
474      CODE_DIR=$dir/$code_dir      CODE_DIR=$dir/$code_dir
475        
476      # These are files that should replace their counter-part when using -mpi      # These are files that should replace their counter-part when using -mpi
477      MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`      MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`
478    
# Line 344  symlink_mpifiles() Line 487  symlink_mpifiles()
487              RETVAL=$?              RETVAL=$?
488              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
489                  if ! test -f $BUILD_DIR/$i ; then                  if ! test -f $BUILD_DIR/$i ; then
490                  #echo Linking $name to $i                      #echo Linking $name to $i
491                      (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)                      (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
492                  fi                  fi
493              fi              fi
494          done          done
495      else      else
496      # NO: We undo any _mpi symbolically linked files          # NO: We undo any _mpi symbolically linked files
497          for ii in $MPI_FILES ; do          for ii in $MPI_FILES ; do
498              i=`echo $ii | sed 's:^\./::'`              i=`echo $ii | sed 's:^\./::'`
499              name=`echo $i | sed 's:_mpi::' `              name=`echo $i | sed 's:_mpi::' `
500              if test -L $BUILD_DIR/$name ; then              if test -L $BUILD_DIR/$name ; then
501                  linktarg=`(cd $BUILD_DIR; readlink $name)`                  cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
502                  if test $linktarg = "../$code_dir/$name"_mpi ; then                  RETVAL=$?
503                  #echo Un-linking $name from $linktarg                  if test "x$RETVAL" = x0 ; then
504                        #echo Un-linking $name from $linktarg
505                      rm -f $BUILD_DIR/$name                      rm -f $BUILD_DIR/$name
506                  fi                  fi
507              fi              fi
# Line 368  symlink_mpifiles() Line 512  symlink_mpifiles()
512    
513  linkdata()  linkdata()
514  {  {
515      # linkdata flag      # linkdata run_dir input_dir_1 input_dir_2 ...
516      #      #
517      # symbolically link data files to run directory      # symbolically link data files to run directory
518      if test "x$1" = x1 ; then      if test -d $1 ; then
519          (          (
520              cd $2              cd $1 ; shift
521              if test "x$ADM" = x ; then              if test -r "../"$1"/eedata.mth" ; then
522                  files=`( cd ../input ; ls -1 | grep -v CVS )`              # found eedata.mth in 1rst input dir and it is readable
523                  for i in $files ; do                  if test "x$MULTI_THREAD" = "xt" ; then
524                      if test ! -d "../input/"$i ; then                  # multi-threaded test: remove symbolic link & link eedata.mth
525                          ln -sf "../input/"$i $i                      if test -h eedata ; then rm -f eedata ; fi
526                      fi                      if test ! -r eedata ; then
527                  done                          ln -sf "../"$1"/eedata.mth" eedata ;
528              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  
                     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  
529                      fi                      fi
530                  done                  else
531                    # not multi-threaded test: remove eedata symbolic link
532                        if test -h eedata ; then rm -f eedata ; fi
533                    fi
534              fi              fi
535                prevDir='NONE'
536                for ldir in $* ; do
537                    if test -d "../"$ldir -a $ldir != $prevDir ; then
538                        printf 'ldir='${ldir} 1>&2
539                        files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
540                        for i in $files ; do
541                            if test ! -d "../"$ldir/$i ; then
542                                if test ! -r $i  ; then
543                                    printf ' '$i 1>&2
544                                    ln -sf "../"$ldir"/"$i $i
545                                fi
546                            fi
547                        done
548                        if test -x "../"$ldir"/"prepare_run ; then
549                            "../"$ldir"/"prepare_run
550                        fi
551                        printf ' ; ' 1>&2
552                    fi
553                    prevDir=$ldir
554                done
555          )          )
556      fi      fi
557  }  }
# Line 407  runmodel() Line 564  runmodel()
564      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
565      (      (
566          cd $1          cd $1
567          printf 'runmodel ... ' 1>&2          printf 'runmodel in %s ...' $1 1>&2
568          # make output.txt          # make output.txt
569          $COMMAND >> run.log 2>&1          echo
570          RETVAL=$?          if test -L $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
571          if test "x$RETVAL" = x0 ; then              diff -q $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
572              echo successful 1>&2              outD=$? ; if test $outD != 0 ; then rm -f $EXECUTABLE ; rm -f run.log ; fi
573              if test "x$ADM" = x ; then          fi
574                  cp output.txt $CDIR"/output.txt"          if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
575                echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_00
576                ln -sf "../"$builddir"/"$EXECUTABLE .
577            fi
578            if test ! -x $EXECUTABLE ; then
579                    rm -f run.log ; touch run.log
580                    if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
581                    echo " no executable:" $EXECUTABLE >> run.log
582                    RETVAL=8
583                    ENDVAL=-1
584            else
585                if test ! -f $OUTPUTFILE -o $OUTPUTFILE -ot $EXECUTABLE ; then
586                  # output do not exist or is older than executable:
587                    rm -f run.log ; touch run.log
588                    if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
589                    ( eval $COMMAND ) >> run.log 2>&1
590                    RETVAL=$?
591              else              else
592                  cp output.txt_adm $CDIR"/output.txt_adm"                  RETVAL=0
593                    if test -f run.log ; then
594                        if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
595                        echo "---------->> $OUTPUTFILE is up to date " >> run.log 2>&1
596                    else
597                        touch run.log
598                        if test -f run.log_00 ; then cat run.log_00 >> run.log ; fi
599                        echo "---------->> $OUTPUTFILE is up to date " >> run.log 2>&1
600                        echo " no previous run.log: assume NORMAL END" >> run.log 2>&1
601                    fi
602              fi              fi
603                ENDVAL=`cat run.log | grep -v 'ABNORMAL END' | grep -c 'NORMAL END'`
604            fi
605            rm -f run.log_00
606            #if test "x$RETVAL" = x0 ; then
607            if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
608                tail run.log
609                echo successful 1>&2
610                # === Reduce the size of the testing emails!
611                #cp $OUTPUTFILE $CDIR"/"$OUTPUTFILE
612                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
613              return 0              return 0
614          else          else
615              tail run.log              tail run.log
616              echo failed 1>&2              echo failed '(run:' $RETVAL ' end:' $ENDVAL ')' 1>&2
617              cp run.log $CDIR"/run.log"              cp run.log $CDIR"/run.log"
618                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
619              return 1              return 1
620          fi          fi
621      )      )
# Line 432  createcodelet() Line 625  createcodelet()
625  {  {
626      # create codelet for comparing model output      # create codelet for comparing model output
627    
628      echo -n "creating the comparison code...  "      printf "creating the comparison code...  "
629      cat > tmp_cmpnum.c <<EOF      cat > tr_cmpnum.c <<EOF
630  #include <stdio.h>  #include <stdio.h>
631  #include <math.h>  #include <math.h>
632  int main( int argc, char** argv )  {  int main( int argc, char** argv )  {
633    int linnum,best;    int linnum,cmplin,best,lncnt;
634    double a,b,diff;    double a,b,abave,relerr;
635    best = -16;    best = -22;
636    while( 1 )  {    lncnt = 0;
637      while( 1 & ( (lncnt+=1) < 999 ) )  {
638      scanf("%d", &linnum);      scanf("%d", &linnum);
639      if (linnum == -1)  break;      if (linnum == -1)  break;
640      scanf("%lf", &a);  scanf("%lf", &b);      scanf("%lf", &a);  scanf("%lf", &b);
641      diff = 0.5*(fabs(a)+fabs(b));      abave = 0.5*(fabs(a)+fabs(b));
642      if (diff > 1.e-12) {      if ( abave == abave ) {
643        diff=fabs(a-b)/diff;        if (abave > 0.0) {
644        if (diff > 0.0) {          relerr=fabs(a-b)/abave;
645          linnum = (int)log10(diff);          if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
646          best = (best > linnum) ? best : linnum;          else { cmplin = -16 ; }
647        }          best = (best > cmplin) ? best : cmplin; }
648        else {        else { cmplin = -22 ; }
649          if (best == -16 && diff != 0)  best = -22;     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
650        }        }
651      }     else {
652       /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
653          break; }
654    }    }
655      if (lncnt == 999) best=-29;
656      if (linnum != -1) best=-99;
657    printf("%d\n", -best);    printf("%d\n", -best);
658    return 0;    return 0;
659  }  }
660  EOF  EOF
661      cc -o tmp_cmpnum tmp_cmpnum.c -lm      $CC -o tr_cmpnum tr_cmpnum.c -lm
662    
663      if [ -x ./tmp_cmpnum ]; then      if [ -x ./tr_cmpnum ]; then
664          echo "OK"          echo "OK"
665          return 0          return 0
666      else      else
667          echo          echo
668          echo "ERROR: failed to compile comparison code"          echo "ERROR: failed to compile comparison code -- please specify"
669            echo "  a C compiler using the CC environment variable."
670          exit 1          exit 1
671      fi      fi
672  }  }
# Line 479  formatresults() Line 678  formatresults()
678      nm=$1      nm=$1
679      printf '%s %s %s %s' $2 $3 $4 $5      printf '%s %s %s %s' $2 $3 $4 $5
680      shift; shift; shift; shift; shift;      shift; shift; shift; shift; shift;
681      printf '%3s' $@      listPrt=$@
682        listRes=`echo $listPrt | sed 's/>//' | sed 's/<//'`
683        xx=`echo $listPrt | sed 's/.*>//' | sed 's/<.*//' | awk '{print $1}'`
684        printf '%3s' $listPrt
685    #   line below does not work on hp-ux_ia64 : do those substitutions later on
686    #   printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</'
687            
688      if [ $1 = '--' ]; then      if [ $xx = '..' ]; then
689            printf ' N/O '
690        elif [ $xx = '--' ]; then
691            printf ' N/O '
692        elif [ $xx = 99 ]; then
693          printf ' N/O '          printf ' N/O '
694      else      else
695          if [ $1 -gt 12 ]; then          if [ $xx -ge $MATCH_CRIT ]; then
696              printf ' pass'              printf ' pass'
697          else          else
698              printf ' FAIL'              printf ' FAIL'
# Line 495  formatresults() Line 703  formatresults()
703            
704  }  }
705    
 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  
 }  
   
706  scandirs()  scandirs()
707  {  {
708      if [ $# -eq 0 ]; then      if [ $# -eq 1 ]; then
709          for arg in * ; do          for arg in * ; do
710              test -d $arg/input && echo $arg              test -f $arg/$1 && echo $arg
711          done          done
712      else      else
713          echo $*          echo $*
714      fi      fi
715  }  }
716    
# Line 533  scandirs() Line 722  scandirs()
722  debug=0  debug=0
723  verbose=1  verbose=1
724  clean=0  clean=0
 expts=''  
 # ieee=1  
725    
726  IEEE=  IEEE=true
727  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
728      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
729  fi  fi
730    GSL=f
731    
732  CLEANUP=f  CLEANUP=f
733  QUICK=f  QUICK=f
734  NOGENMAKE=f  NOGENMAKE=f
735  NOCLEAN=f  NOCLEAN=f
736  NODEPEND=f  NODEPEND=f
737    POSTCLEAN=f
738    
739  BASH=  BASH=
740  OPTFILE=NONE  OPTFILE=NONE
741  ADDRESSES=  ADDRESSES=
742  TESTDIRS=  TESTDIRS=
743    SKIPDIRS=
744  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
745  HAVE_MPACK=  HAVE_MPACK=
746  MPACK="$MPACKDIR/mpack"  MPACK="$MPACKDIR/mpack"
747  COMMAND=  COMMAND=
748  MAKE=make  if test "x$MAKE" = x ; then
749        MAKE=make
750    fi
751    if test "x$CC" = x ; then
752        CC=cc
753    fi
754    JOBS=
755  MPI=f  MPI=f
756    MULTI_THREAD=f
757    OUTDIR=
758    DELDIR=
759    
760  ADM=  ADM=
761    
762  echo -n "parsing options...  "  # Additional monitor types
763    PTRACERS_NUM="1 2 3 4 5"
764    
765    MATCH_CRIT=13
766    
767    printf "parsing options...  "
768    
769  ac_prev=  ac_prev=
770  for ac_option ; do  for ac_option ; do
# Line 595  for ac_option ; do Line 798  for ac_option ; do
798          -tdir=* | --tdir=*)          -tdir=* | --tdir=*)
799              TESTDIRS=$ac_optarg ;;              TESTDIRS=$ac_optarg ;;
800    
801            -skipdir | --skipdir | -skd | --skd)
802                ac_prev=SKIPDIRS ;;
803            -skipdir=* | --skipdir=*)
804                SKIPDIRS=$ac_optarg ;;
805    
806          -bash | --bash | -b | --b)          -bash | --bash | -b | --b)
807              ac_prev=BASH ;;              ac_prev=BASH ;;
808          -bash=* | --bash=*)          -bash=* | --bash=*)
# Line 610  for ac_option ; do Line 818  for ac_option ; do
818          -make=* | --make=*)          -make=* | --make=*)
819              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
820    
821            -odir | --odir)
822                ac_prev=OUTDIR ;;
823            -odir=* | --odir=*)
824                OUTDIR=$ac_optarg ;;
825    
826            -ptracers | --ptracers | -ptr | --ptr)
827                ac_prev=PTRACERS_NUM ;;
828            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
829                PTRACERS_NUM=$ac_optarg ;;
830    
831            -match | --match ) ac_prev=MATCH_CRIT ;;
832            -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
833    
834            -j) ac_prev=JOBS ;;
835            -j=*) JOBS=$ac_optarg ;;
836    
837          -clean | --clean)          -clean | --clean)
838              CLEANUP=t ;;              CLEANUP=t ; DELDIR=t ;;
839    
840          -quick | --quick | -q | --q)          -quick | --quick | -q | --q)
841              QUICK=t ;;              QUICK=t ;;
# Line 622  for ac_option ; do Line 846  for ac_option ; do
846          -nodepend | --nodepend | -nd | --nd)          -nodepend | --nodepend | -nd | --nd)
847              NODEPEND=t ;;              NODEPEND=t ;;
848    
849            -postclean | --postclean | -pc | --pc)
850                POSTCLEAN=t ;;
851    
852          -mpi) MPI=t ;;          -mpi) MPI=t ;;
853    
854            -mth) MULTI_THREAD=t ;;
855    
856          -adm | -ad) ADM=t ;;          -adm | -ad) ADM=t ;;
857    
858          -ieee) IEEE=true ;;          -ieee) IEEE=true ;;
859          -noieee) IEEE= ;;          -noieee) IEEE= ;;
860            -gsl) GSL=t ;;
861    
862          -verbose) verbose=2 ;;          -verbose) verbose=2 ;;
863          -debug) debug=1 ;;          -debug) debug=1 ;;
864          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
865    
866            -deldir | -dd) DELDIR=t ;;
867    
868            -ts) TS=t;;
869    
870            -papis) PAPIS=t;;
871    
872            -pcls) PCL=t;;
873    
874          -*)          -*)
875              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
876              usage              usage
# Line 653  if test "x$QUICK" = xt ; then Line 891  if test "x$QUICK" = xt ; then
891      NODEPEND=t      NODEPEND=t
892  fi  fi
893    
894    #- setting for forward or ADM testing
895    if test "x$ADM" = xt ; then
896        code_dir=code_ad
897        inputdir=input_ad
898        ref_outp="output_adm.txt"
899        EXECUTABLE="mitgcmuv_ad"
900    else
901        code_dir=code
902        inputdir=input
903        ref_outp="output.txt"
904        EXECUTABLE="mitgcmuv"
905    fi
906    
907  if test "x$TESTDIRS" = x ; then  if test "x$TESTDIRS" = x ; then
908      TESTDIRS=`scandirs`      LIST=`scandirs results/$ref_outp`
909    else
910        #- expand group of experiments:
911        LIST=" "
912        for xx in $TESTDIRS
913        do
914          case $xx in
915            'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
916                     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
917                     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
918                    ;;
919            'tutorials')
920                     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
921            *)       LIST=${LIST}" "$xx ;;
922          esac
923        done
924  fi  fi
925    #echo 'LIST='${LIST}'<'
926    #- skip dirs, remove duplicate and non-directory:
927    TESTDIRS=" "
928    count=0
929    for xx in $LIST
930    do
931        yy=`echo $SKIPDIRS | grep -c $xx`
932        if test $yy = 0 ; then
933            if test -d $xx ; then
934                yy=`echo $TESTDIRS | grep -c $xx`
935                if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
936            else count=1 ;
937                echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
938            fi
939        else
940            if test $count = 1 ; then echo -n ", \"$xx\""
941            else count=1 ; echo "" ;  echo -n " skip: \"$xx\""
942            fi
943        fi
944    done
945    if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
946    #echo 'TESTDIRS='${TESTDIRS}'<'
947    
948  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
949      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
950  fi  fi
951    
952  if test "x$ADM" = xt -a "x$COMMAND" = x ; then  OUTPUTFILE=$ref_outp
     COMMAND="./mitgcmuv_ad > output.txt_adm 2>&1"  
 fi  
   
953  if test "x$COMMAND" = x ; then  if test "x$COMMAND" = x ; then
954      COMMAND="make output.txt"      COMMAND="./$EXECUTABLE > $OUTPUTFILE"
955    fi
956    if test "x$MPI" = xt ; then
957        OUTPUTFILE="STDOUT.0000"
958  fi  fi
959    
960  echo "OK"  echo "OK (COMMAND= $COMMAND )"
961    
962    # set the Default List of output variables to be checked:
963    #  (use default or load experiment-specific list from file "tr_checklist")
964    # content : 1rst = main variable used to decide if it pass or FAIL
965    #         others = number of matching digits to be printed in summary.txt
966    if test "x$ADM" = x ; then
967        DEF_CHECK_LIST='PS PS T+ S+ U+ V+ pt1+ pt2+ pt3+ pt4+ pt5+'
968        EMPTY_RESULTS='.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..'
969        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
970        ii=`echo $EMPTY_RESULTS | awk '{print NF}'`
971        EMPTY_RESULTS=$EMPTY_RESULTS`expr $LEN_CHECK_LIST - $ii | awk 'BEGIN{FS=":"}{for(i=1;i<=$1;i++){printf "  ."}}'`
972    else
973        DEF_CHECK_LIST='Grad Cost Grad'
974        EMPTY_RESULTS='.. ..'
975        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
976    fi
977    
978  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
979  createcodelet  createcodelet
980    
981  #  build the mpack utility  #  build the mpack utility
982  build_mpack  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
983        echo "skipping mpack build"
984    else
985        build_mpack
986    fi
987    
988  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
989  MACH=`hostname`  MACH=`hostname`
990  UNAMEA=`uname -a`  UNAMEA=`uname -a`
991  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
992  BASE="tr_"$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
993    if test "x$OUTDIR" != x ; then
994        BASE="tr_"$OUTDIR"_"$DATE"_"
995    fi
996  DNUM=0  DNUM=0
997  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
998  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 695  if test "x$RETVAL" != x0 ; then Line 1006  if test "x$RETVAL" != x0 ; then
1006      exit 1      exit 1
1007  fi  fi
1008  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
1009  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1010  start_date=`date`  start_date=`date`
1011  echo $start_date > $SUMMARY  echo $start_date > $SUMMARY
1012    
# Line 727  fi Line 1038  fi
1038  echo  echo
1039  echo >> $SUMMARY  echo >> $SUMMARY
1040  if test "x$ADM" = x ; then  if test "x$ADM" = x ; then
1041      cat << EOF | tee -a $SUMMARY      if [ $MATCH_CRIT -lt 10 ] ;
1042                  T           S           U           V      then line_0="default  "$MATCH_CRIT ;
1043  G D M    c        m  s        m  s        m  s        m  s      else line_0="default "$MATCH_CRIT ; fi
1044  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-----"
1045  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-----"
1046  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"
1047        line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
1048  EOF      line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
1049        line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
1050        for ii in $PTRACERS_NUM ; do
1051            #  tst=`eval 'echo $HAVE_PTR0'$ii`
1052            #  if test "x$tst" = xt ; then
1053            line_0="$line_0  --PTR 0"$ii"--"
1054            line_1="$line_1        m  s"
1055            line_2="$line_2  m  m  e  ."
1056            line_3="$line_3  i  a  a  d"
1057            line_4="$line_4  n  x  n  ."
1058            #  fi
1059        done
1060        echo "$line_0" | tee -a $SUMMARY
1061        echo "$line_1" | tee -a $SUMMARY
1062        echo "$line_2" | tee -a $SUMMARY
1063        echo "$line_3" | tee -a $SUMMARY
1064        echo "$line_4" | tee -a $SUMMARY
1065        echo " "       | tee -a $SUMMARY
1066  else  else
1067      echo "ADJOINT=true" >> $SUMMARY      echo "ADJOINT=true" >> $SUMMARY
1068      echo >> $SUMMARY      echo >> $SUMMARY
1069        if [ $MATCH_CRIT -lt 10 ] ;
1070        then line_0="default     "$MATCH_CRIT ;
1071        else line_0="default    "$MATCH_CRIT ; fi
1072        echo "$line_0" | tee -a $SUMMARY
1073      cat << EOF | tee -a $SUMMARY      cat << EOF | tee -a $SUMMARY
1074  G D M    C  G  G D M    C  G
1075  E p a R  o  r  E p a R  o  r
# Line 750  fi Line 1082  fi
1082  #  ...and each test directory...  #  ...and each test directory...
1083  for dir in $TESTDIRS ; do  for dir in $TESTDIRS ; do
1084            
1085        # set builddir & rundir:
1086        builddir="build"
1087        if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1088        rundir="run"
1089        if test ! -d $dir/$rundir ; then
1090            rundir=$builddir
1091        fi
1092        CODE_DIR=$dir/$code_dir
1093        BUILD_DIR=$dir/$builddir
1094    
1095      #  Cleanup only!      #  Cleanup only!
1096      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1097          if test -r $dir/build/Makefile ; then          if test -r $BUILD_DIR/Makefile ; then
1098              ( cd $dir/build ; make CLEAN )              echo '  ------  clean dir:' $dir/build
1099                ( cd $BUILD_DIR ; make CLEAN )
1100          fi          fi
1101          if test -r $dir/input/Makefile ; then          if test -d $dir/$rundir/CVS ; then
1102              ( cd $dir/input ; make CLEAN )              echo '  ------  clean dir:' $dir/$rundir
1103                run_clean $dir/$rundir
1104          fi          fi
1105            (
1106                cd $dir
1107                rm -rf tr_run.*
1108            )
1109          continue          continue
1110      fi      fi
1111    
1112      #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
1113      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
1114      fout=      fout=$dir"/results/"$ref_outp
     if test "x$ADM" = x ; then  
         fout=$dir"/results/output.txt"  
     else  
         fout=$dir"/results_ad/output.txt_adm"  
     fi  
1115      if test ! -r $fout ; then      if test ! -r $fout ; then
1116          echo "can't read \"$fout\" -- skipping $dir"          echo "can't read \"$fout\" -- skipping $dir"
1117          continue          continue
1118      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  
       
1119      if test "x$ADM" = x ; then      if test "x$ADM" = x ; then
1120          code_dir=code          check_for_add_mon_output  $fout
         CODE_DIR=$dir/code  
     else  
         code_dir=code_ad  
         CODE_DIR=$dir/code_ad  
1121      fi      fi
1122      BUILD_DIR=$dir/$builddir  
1123        # Check for additional types of monitor output
1124    
1125      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
1126          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1127          continue          continue
1128      fi      fi
1129        if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1130            echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1131            continue
1132        fi
1133    
1134        #  Check whether there are "extra runs" for this testdir
1135        extra_runs=
1136        ex_run_dirs=`( cd $dir ; echo $inputdir.* )`
1137        #echo "ex_run_dirs='$ex_run_dirs'"
1138        for exd in $ex_run_dirs ; do
1139            name=`echo $exd | sed -e "s/$inputdir\.//"`
1140            refExOut=`echo $ref_outp | sed "s/\./.${name}./"`
1141            outf="$dir/results/$refExOut"
1142            if test -f $outf -a -r $outf ; then
1143                if test "x$MULTI_THREAD" = "xt" ; then
1144                    if test -r $dir"/"$exd"/eedata.mth" ; then
1145                        extra_runs="$extra_runs $name"
1146                    #else echo $dir"/"$exd"/eedata.mth: not found"
1147                    fi
1148                else
1149                    extra_runs="$extra_runs $name"
1150                fi
1151            fi
1152        done
1153    
1154      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1155      echo      echo
1156      echo "Experiment:  $dir"      if test "x$extra_runs" = "x" ; then
1157           echo "Experiment:  $dir"
1158        else
1159           echo "Experiment:  $dir ; extra_runs=$extra_runs"
1160        fi
1161      echo      echo
1162      unset genmake makedepend make run      unset genmake makedepend make run
1163      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'      results=$EMPTY_RESULTS
1164    
1165      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1166      rel_CDIR=$DRESULTS"/"$dir      rel_CDIR=$DRESULTS"/"$dir
# Line 811  for dir in $TESTDIRS ; do Line 1168  for dir in $TESTDIRS ; do
1168      CDIR=`pwd`"/$rel_CDIR"      CDIR=`pwd`"/$rel_CDIR"
1169            
1170      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1171          makeclean $dir/$builddir          echo '====>>> this is to check that we never go through this part <<< ==='
1172            makeclean $dir/$builddir \
1173                && run_clean $dir/$rundir
1174      else      else
1175          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1176              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1177                && run_clean $dir/$rundir \
1178              && symlink_mpifiles $dir $code_dir $builddir \              && symlink_mpifiles $dir $code_dir $builddir \
1179              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1180              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1181              && linkdata $use_seperate_build $dir/$rundir \              && linkdata $dir/$rundir $inputdir input \
1182              && runmodel $dir/$rundir && run=Y \              && runmodel $dir/$rundir && run=Y \
1183              && results=`testoutput $dir $rundir`              && results=`testoutput_run $dir $rundir $ref_outp`
1184      fi      fi
1185            
1186      echo      echo
     if test "x$ADM" = x ; then  
1187          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1188      else          echo
1189          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
1190          fres=$fres"$results   $dir"          touch $CDIR"/summary.txt"
1191            echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1192            echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1193            echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1194            echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1195            echo "tdir='$dir'" >> $CDIR"/summary.txt"
1196            if test "x$ADM" = xt ; then
1197                head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt"
1198                grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1199                                    >> $CDIR"/summary.txt"
1200            fi
1201    
1202            for ex in $extra_runs ; do
1203                unset run
1204                results=$EMPTY_RESULTS
1205                #  reference output file
1206                refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1207                #  Create an output dir for each OPTFILE/tdir.ex combination
1208                rel_CDIR=$DRESULTS"/"$dir"."$ex
1209                mkdir $rel_CDIR
1210                CDIR=`pwd`"/$rel_CDIR"
1211                test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1212                run_clean $dir/tr_run.$ex
1213                linkdata $dir/tr_run.$ex $inputdir.$ex $inputdir input
1214                runmodel $dir/tr_run.$ex && run=Y \
1215                && results=`testoutput_run $dir tr_run.$ex $refExOut`
1216                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1217                fres="$fres.$ex"
1218                echo
1219                echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1220                touch $CDIR"/summary.txt"
1221                echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $CDIR"/summary.txt"
1222                echo "MACH='$MACH'" >> $CDIR"/summary.txt"
1223                echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"
1224                echo "DATE='$DATE'" >> $CDIR"/summary.txt"
1225                echo "tdir='$dir.$ex'" >> $CDIR"/summary.txt"
1226                if test "x$ADM" = xt ; then
1227                    head -1 $dir/$builddir/taf_ad.log >> $CDIR"/summary.txt"
1228                    grep -A3 'Seconds in section "ALL' $dir/tr_run.$ex/$OUTPUTFILE \
1229                                       >> $CDIR"/summary.txt"
1230                fi
1231                if test "x$POSTCLEAN" = xt ; then
1232                    run_clean $dir/tr_run.$ex
1233                fi
1234            done
1235    
1236        #postclean $dir/$builddir
1237        if test "x$POSTCLEAN" = xt ; then
1238            makeclean $dir/$builddir \
1239                && run_clean $dir/$rundir
1240      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"  
1241            
1242      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1243            
1244  done  done
1245    
1246  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1247  echo $start_date >> $SUMMARY  echo $start_date >> $SUMMARY
1248  echo -n "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
1249  date >> $SUMMARY  date >> $SUMMARY
1250    
1251  #  If addresses were supplied and mpack built successfully, then try  #  If addresses were supplied and mpack built successfully, then try
# Line 855  else Line 1256  else
1256      if test "x$HAVE_MPACK" = xt ; then      if test "x$HAVE_MPACK" = xt ; then
1257          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1258              && gzip $DRESULTS".tar" \              && gzip $DRESULTS".tar" \
1259              && $MPACK -s MITgcm-test -m 1500000 $DRESULTS".tar.gz" $ADDRESSES              && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1260          RETVAL=$?          RETVAL=$?
1261          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1262              echo              echo
# Line 874  else Line 1275  else
1275      fi      fi
1276  fi  fi
1277    
1278  # rm -f tmp_cmpnum.f a.out  rm -f tr_cmpnum.c tr_cmpnum
 rm -f tmp_cmpnum.c tmp_cmpnum  
1279    
1280  if test "x$CLEANUP" != xt ; then  if test "x$CLEANUP" != xt ; then
1281      cat $SUMMARY      cat $SUMMARY | sed 's/ \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \. //'
1282      if test -e tr_out.txt ; then      if test -e tr_out.txt ; then
1283          mv tr_out.txt tr_out.txt.old          mv tr_out.txt tr_out.txt.old
1284      fi      fi
1285      cat $SUMMARY > tr_out.txt      cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1286    fi
1287    
1288    if test "x$DELDIR" = xt ; then
1289        rm -rf $DRESULTS
1290  fi  fi
1291    

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

  ViewVC Help
Powered by ViewVC 1.1.22