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

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.146

  ViewVC Help
Powered by ViewVC 1.1.22