/[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.14 by edhill, Fri Nov 7 21:32:19 2003 UTC revision 1.142 by jmc, Thu Oct 7 20:59:39 2010 UTC
# Line 1  Line 1 
1  #!/bin/bash  #! /usr/bin/env bash
2  #  #
3  #  $Header$  #  $Header$
4  #  $Name$  #  $Name$
# 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 "  (-ieee|-noieee)          if possible, use IEEE compiler flags"      echo "  (-mpi)                   compile and run using MPI"
16      echo "  (-optfile=|-of=)STRING   list of optfiles to use"      echo "  (-ieee/-noieee)          if possible, use IEEE compiler flags"
17      echo "  (-a|-addr)STRING         list of email recipients"      echo "                             (DEF=\"-ieee\")"
18      echo "                             (DEF=\"edhill@mitgcm.org\")"      echo "  (-gsl)                   compile with \"-gsl\" flag"
19      echo "  (-t|-tdir)STRING         list of test dirs to use"      echo "  (-use_r4|-ur4)           if allowed, use real*4 type for '_RS' variable"
20      echo "                             (DEF=\"\" which builds all)"      echo "  (-optfile|-of) STRING    list of optfiles to use"
21      echo "  (-b|-bash)STRING         location of \"bash\" executable"      echo "  (-addr|-a) STRING        list of email recipients"
22      echo "                             (DEF=\"\" for \"/bin/bash\")"      echo "                             (DEF=\"\" no email is sent)"
23      echo "  (-command)STRING         command to run"      echo "  (-mpackdir|-mpd) DIR     location of the mpack utility"
24      echo "                             (DEF=\"make output.txt\")"      echo "                             (DEF=\"../tools/mpack-1.6\")"
25      echo "  (-m|-make)STRING         command to use for \"make\""      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\")"      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\""      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\""      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""
50      echo "  (-nogenmake|-ng)         skip the genmake stage"      echo "  (-nogenmake|-ng)         skip the genmake stage"
51      echo "  (-noclean|-nc)           skip the \"make clean\" stage"      echo "  (-noclean|-nc)           skip the \"make clean\" stage"
52      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"      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      echo
58      echo "and where STRING follows a whitespace-delimited format"      echo "and where STRING can be a whitespace-delimited list"
59      echo "such as:"      echo "such as:"
60        echo
61      echo "  -t 'exp0 exp2 exp3' "      echo "  -t 'exp0 exp2 exp3' "
62      echo "  -addr='abc@123.com testing@home.org'"      echo "  -addr='abc@123.com testing@home.org'"
63      echo      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
67      exit 1      exit 1
68  }  }
69    
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
164        if [ $verbose -gt 1 ]; then
165            cat tmp3.txt 1>&2
166      fi      fi
167      compare_lines      echo "-1" >> tmp3.txt
168      digits_of_similarity=$?      # 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      testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2; tmin=$?          # remove 1rst var and expand the list: + => min max mean s.d
200      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' \
201      testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2; tmean=$?                                 | sed 's/+//g' | sed "s/^$sVar//"`
202      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
203      testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2; smin=$?          # check for ptracer output in reference_output file :
204      testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2; smax=$?          outpref=$1/results/$3
205      testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2; smean=$?          ptr_mon="trcstat_ptracerXX_min trcstat_ptracerXX_max"
206      testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2; ssd=$?          ptr_mon="$ptr_mon trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
207      testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2; umin=$?          for ii in $PTRACERS_NUM ; do
208      testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2; umax=$?              ptrfound=0
209      testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2; umean=$?              for jj in $ptr_mon ; do
210      testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2; usd=$?                  name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
211      testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2; vmin=$?                  tst=`grep $name $outpref | wc -l | awk '{print $1}'`
212      testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2; vmax=$?                  if test ! "x$tst" = x0 ; then ptrfound=1 ; fi
213      testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2; vmean=$?              done
214      testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2; vsd=$?              if test $ptrfound = '1' ; then
215                        eval "HAVE_PTR0"$ii"=t"
216      dashnum $cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd \              else
217          $umin $umax $umean $usd $vmin $vmax $vmean $vsd                  eval "HAVE_PTR0"$ii"=f"
218                  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()
# Line 183  genmakemodel() Line 310  genmakemodel()
310      if test "x$NOGENMAKE" = xt ; then      if test "x$NOGENMAKE" = xt ; then
311          echo "genmake skipped!"          echo "genmake skipped!"
312      else      else
313          GENMAKE2="$BASH ../../../tools/genmake2"          if test "x$BASH" = x ; then
314                GENMAKE2="../../../tools/genmake2"
315            else
316                GENMAKE2="$BASH ../../../tools/genmake2 -bash $BASH"
317            fi
318          (          (
319              cd $1;              cd $1;
320              command="$GENMAKE2  -ds -m $MAKE --mods=../code"              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              if test "x$OPTFILE" != xNONE ; then
332                  command="$command --optfile=$OPTFILE"                  command="$command -optfile=$OPTFILE"
                 # echo "  command=\"$command\""  
333              fi              fi
334              if test "x$IEEE" != x ; then              if test "x$IEEE" != x ; then
335                  command="$command -ieee"                  command="$command -ieee"
336              fi              fi
337              # echo "command: \"$command\""              if test "x$GSL" = xt ; then
338              printf 'genmake ... ' 1>&2                  command="$command -gsl"
339              $command > make.log 2>&1              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 > make.log 2>&1
362              RETVAL=$?              RETVAL=$?
363              for i in genmake_state genmake_optfile genmake_local Makefile ; do              #  Reduce the size of the testing emails!
364                  if test -r $i ; then              head -100 Makefile > $CDIR/Makefile_head
                     cp $i $CDIR  
                 fi  
             done  
365              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
366                  tail make.log                  tail make.log
367                  echo "genmakemodel: genmake failed" 1>&2                  echo "genmakemodel: genmake failed"
368                  cp make.log $CDIR                  cp genmake_* make.log $CDIR
369                  return 1                  return 1
370              else              else
371                  echo "succesful" 1>&2                  echo "successful"
372              fi              fi
373          )          )
374      fi      fi
# Line 219  makeclean() Line 378  makeclean()
378  {  {
379      # makeclean directory      # makeclean directory
380      if test "x$NOCLEAN" = xt ; then      if test "x$NOCLEAN" = xt ; then
381          echo "make CLEAN skipped!"          echo "make Clean skipped!"
382      else      else
383          (          (
384              cd $1;              cd $1;
385              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  
386              if test -r Makefile ; then              if test -r Makefile ; then
387                  $MAKE CLEAN >> make.log 2>&1                  printf 'clean build-dir: make Clean ... '
388                    $MAKE Clean >> make.log 2>&1
389                  RETVAL=$?                  RETVAL=$?
390                  if test "x$RETVAL" != x0 ; then                  if test "x$RETVAL" != x0 ; then
391                      tail make.log                      tail make.log
392                      echo "makeclean: \"make CLEAN\" failed" 1>&2                      echo "makeclean: \"make Clean\" failed"
393                      cp make.log $CDIR"/make.log"                      cp make.log $CDIR"/make.log"
394                      return 1                      return 1
395                  fi                  fi
396                    echo successful
397                else
398                    echo ''
399              fi              fi
400              echo succesful 1>&2              exit 0
401            )
402        fi
403    }
404    
405    run_clean()
406    {
407        # run_clean directory
408        if test "x$NOCLEAN" = xt ; then
409            echo "run_clean skipped!"
410        else
411            (
412                cd $1;
413                printf 'clean run-dir ... '
414                # part of what is done after "make clean" when doing "make CLEAN"
415                find . -name "*.meta" -exec rm {} \;
416                find . -name "*.data" -exec rm {} \;
417                find . -name "fort.*" -exec rm {} \;
418                find . -type l -exec rm {} \;
419                rm -f $EXECUTABLE *.txt STD* *diagnostics.log datetime
420                rm -rf mnc_test_*
421                rm -f *_MIT_CE_000.opt0000 costfunction*0000
422                echo successful
423              exit 0              exit 0
424          )          )
425      fi      fi
# Line 251  makedependmodel() Line 433  makedependmodel()
433      else      else
434          (          (
435              cd $1;              cd $1;
436              printf 'make depend ... ' 1>&2              printf 'make depend ... '
437              $MAKE depend >> make.log 2>&1              $MAKE depend >> make.log 2>&1
438              RETVAL=$?              RETVAL=$?
439              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
440                  tail make.log                  tail make.log
441                  echo "makedependmodel: make depend failed" 1>&2                  echo "makedependmodel: make depend failed"
442                  cp make.log $CDIR"/make.log"                  cp make.log $CDIR"/make.log"
443                  return 1                  return 1
444              else              else
445                  echo succesful 1>&2                  echo successful
446              fi              fi
447          )          )
448      fi      fi
# Line 270  makemodel() Line 452  makemodel()
452  {  {
453      # makemodel directory      # makemodel directory
454      (      (
455        if test "x$NOMAKE" = xt ; then
456            cd $1;
457            if test -x $EXECUTABLE ; then
458                echo "make skipped!"
459            else
460                echo "no executable!"
461                return 2
462            fi
463        else
464          cd $1;          cd $1;
465          if test -r Makefile ; then          if test -r Makefile ; then
466              printf 'make ... ' 1>&2              printf 'make ... '
467              $MAKE >> make.log 2>&1              if test "x$ADM" = xt ; then
468                    $MAKE adall >> make.log 2>&1
469                elif test "x$OADM" = xt ; then
470                    $MAKE adAll >> make.log 2>&1
471                else
472                    if test "x$JOBS" = x ; then
473                        $MAKE >> make.log 2>&1
474                    else
475                        $MAKE -j $JOBS >> make.log 2>&1
476                    fi
477                fi
478              RETVAL=$?              RETVAL=$?
479              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
480                  tail make.log                  tail make.log
481                  echo failed 1>&2                  echo failed
482                  cp make.log $CDIR"/make.log"                  cp make.log $CDIR"/make.log"
483                    rm -f $EXECUTABLE
484                  return 1                  return 1
485              else              else
486                  echo succesful 1>&2                  echo successful
487              fi              fi
488          fi          fi
489        fi
490      )      )
491  }  }
492    
493    symlink_mpifiles()
494    {
495        # Put special links so that MPI specific files are used
496        # This MUST be invoked between makeclean and makelinks because
497        # the Makefile will link to non-mpi files by default
498    
499        dir=$1
500        code_dir=$2
501        BUILD_DIR=$dir/$3
502        CODE_DIR=$dir/$code_dir
503    
504        # These are files that should replace their counter-part when using -mpi
505        MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi" -print)`
506    
507        #  Is this an MPI run?
508        if test "x$MPI" = xt ; then
509            # YES: We symbolically link these files to the build
510            # dir so long as there is no real file in place
511            for ii in $MPI_FILES ; do
512                i=`echo $ii | sed 's:^\./::'`
513                name=`echo $i | sed 's:_mpi::' `
514                cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1
515                RETVAL=$?
516                if test "x$RETVAL" != x0 ; then
517                    if ! test -f $BUILD_DIR/$i ; then
518                        #echo Linking $name to $i
519                        (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
520                    fi
521                fi
522            done
523        else
524            # NO: We undo any _mpi symbolically linked files
525            for ii in $MPI_FILES ; do
526                i=`echo $ii | sed 's:^\./::'`
527                name=`echo $i | sed 's:_mpi::' `
528                if test -L $BUILD_DIR/$name ; then
529                    cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
530                    RETVAL=$?
531                    if test "x$RETVAL" = x0 ; then
532                        #echo Un-linking $name from $linktarg
533                        rm -f $BUILD_DIR/$name
534                    fi
535                fi
536            done
537        fi
538    
539    }
540    
541  linkdata()  linkdata()
542  {  {
543      # linkdata flag      # linkdata run_dir input_dir_1 input_dir_2 ...
544      #      #
545      # symbolically link data files to run directory      # symbolically link data files to run directory
546      if test "x$1" = x1 ; then      if test -d $1 ; then
547          (          (
548              cd $2              cd $1 ; shift
549              files=`( cd ../input ; ls -1 | grep -v CVS )`              echo 'linkdata from dirs:' $*
550              for i in $files ; do              inpMPI=`(cd ../$1 ; find . -name "*.mpi" -print | sed 's:^\./::')`
551                  if test ! -d "../input/"$i ; then              for xx in $inpMPI ; do
552                      ln -sf "../input/"$i $i                if test -r "../"$1"/"$xx ; then
553                    # found 1 _mpi sfx file in 1rst input dir and it is readable
554                    yy=`echo $xx | sed 's:\.mpi$::'`
555                    if test "x$MPI" = "xt" ; then
556                    # mpi test: remove symbolic link & link _mpi sfx file
557                        if test -h $yy ; then rm -f $yy ; fi
558                        if test ! -r $yy ; then
559                            ln -sf "../"$1"/"$xx $yy ;
560                            printf " $xx" 1>&2
561                        fi
562                    else
563                    # not mpi test: remove symbolic link
564                        if test -h $yy ; then rm -f $yy ; fi
565                  fi                  fi
566                  fi
567                done
568                if test -r "../"$1"/eedata.mth" ; then
569                # found eedata.mth in 1rst input dir and it is readable
570                    if test "x$MULTI_THREAD" = "xt" ; then
571                    # multi-threaded test: remove symbolic link & link eedata.mth
572                        if test -h eedata ; then rm -f eedata ; fi
573                        if test ! -r eedata ; then
574                            ln -sf "../"$1"/eedata.mth" eedata ;
575                            printf ' eedata.mth' 1>&2
576                        fi
577                    else
578                    # not multi-threaded test: remove eedata symbolic link
579                        if test -h eedata ; then rm -f eedata ; fi
580                    fi
581                fi
582                prevDir='NONE'
583                for ldir in $* ; do
584                    if test -d "../"$ldir -a $ldir != $prevDir ; then
585                        printf " ldir=${ldir}:" 1>&2
586                        files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
587                        for i in $files ; do
588                            if test ! -d "../"$ldir/$i ; then
589                                if test ! -r $i  ; then
590                                    printf ' '$i 1>&2
591                                    ln -sf "../"$ldir"/"$i $i
592                                fi
593                            fi
594                        done
595                        printf ' ;' 1>&2
596                        if test -x "../"$ldir"/"prepare_run ; then
597                            "../"$ldir"/"prepare_run 1>&2
598                        else
599                            echo '' 1>&2
600                        fi
601                    fi
602                    prevDir=$ldir
603              done              done
604          )          )
605      fi      fi
# Line 309  runmodel() Line 609  runmodel()
609  {  {
610      # runmodel directory      # runmodel directory
611      #      #
612      #  runs "$COMMAND" in "directory"      #  runs "$COMMAND in "directory"
613      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
614      (      (
615          cd $1          cd $1
616          printf 'runmodel: ' 1>&2          printf 'runmodel in %s ... ' $1
617          # make output.txt          if test -L $EXECUTABLE ; then
618          $COMMAND            if test -x "../"$builddir"/"$EXECUTABLE ; then
619          RETVAL=$?              diff -q $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
620          if test "x$RETVAL" = x0 ; then              outD=$? ; if test $outD != 0 ; then rm -f $EXECUTABLE ; fi
621              cp output.txt $CDIR"/output.txt"            else rm -f $EXECUTABLE
622              fi
623            fi
624            if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
625                echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_tmp
626                ln -sf "../"$builddir"/"$EXECUTABLE .
627            fi
628            if test ! -x $EXECUTABLE ; then
629                    rm -f $RUNLOG ; touch $RUNLOG
630                    if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
631                    echo " no executable:" $EXECUTABLE >> $RUNLOG
632                    RETVAL=8
633                    ENDVAL=-1
634            else
635                if test ! -f $OUTPUTFILE -o $OUTPUTFILE -ot $EXECUTABLE ; then
636                  # output do not exist or is older than executable:
637                    rm -f $RUNLOG ; touch $RUNLOG
638                    if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
639                    ( eval $COMMAND ) >> $RUNLOG 2>&1
640                    RETVAL=$?
641                else
642                    RETVAL=0
643                    if test -f $RUNLOG ; then
644                        if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
645                        echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
646                    else
647                        touch $RUNLOG
648                        if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
649                        echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
650                        echo " no previous $RUNLOG: assume NORMAL END" >> $RUNLOG 2>&1
651                    fi
652                fi
653                ENDVAL=`cat $RUNLOG | grep -v 'ABNORMAL END' | grep -c 'NORMAL END'`
654            fi
655            rm -f run.log_tmp
656            if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
657                echo successful
658                printf '=> output from running in %s :\n' $1 1>&2
659                tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
660                # === Reduce the size of the testing emails!
661                #cp $OUTPUTFILE $CDIR"/"$OUTPUTFILE
662                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
663                return 0
664            elif [ $RETVAL -ne 0 -a $ENDVAL -gt 0 ] ; then
665                #-- for some weird cases (run is finihed but with error code)
666                echo 'finished with error (run:' $RETVAL ' end:' $ENDVAL ')'
667                printf '=> output from running in %s :\n' $1 1>&2
668                tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
669              return 0              return 0
670          else          else
671                echo 'failed (run:' $RETVAL ' end:' $ENDVAL ')'
672                printf '=> output from running in %s :\n' $1 1>&2
673                tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
674                cp $RUNLOG $CDIR"/"$RUNLOG
675                if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
676              return 1              return 1
677          fi          fi
678      )      )
# Line 330  createcodelet() Line 682  createcodelet()
682  {  {
683      # create codelet for comparing model output      # create codelet for comparing model output
684    
685      echo -n "creating the comparison code...  "      printf "creating the comparison code (using CC=$CC)...  "
686      cat > tmp_cmpnum.f <<EOFA      cat > tr_cmpnum.c <<EOF
687        program cmpnum  #include <stdio.h>
688        implicit none  #include <math.h>
689        real*8 a,b,diff  int main( int argc, char** argv )  {
690        integer linnum,best    int linnum,cmplin,best,lncnt;
691        best=-16    double a,b,abave,relerr;
692    99  read(*,*,end=70,err=60) linnum,a,b    best = -22;
693        diff=0.5*(abs(a)+abs(b))    lncnt = 0;
694  c     print *,a,b,diff,abs(a-b)/diff    while( 1 & ( (lncnt+=1) < 999 ) )  {
695        if (diff.gt.1.e-12) then      scanf("%d", &linnum);
696          diff=abs(a-b)/diff      if (linnum == -1)  break;
697          if (diff.gt.0.) then      scanf("%lf", &a);  scanf("%lf", &b);
698  c         print *,int(log10(diff)),diff      abave = 0.5*(fabs(a)+fabs(b));
699            linnum=int(log10(diff))      if ( abave == abave ) {
700            best=max(best,linnum)        if (abave > 0.0) {
701          endif          relerr=fabs(a-b)/abave;
702        else          if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
703          if (best.eq.-16.and.diff.ne.0.) best=-22          else { cmplin = -16 ; }
704        endif          best = (best > cmplin) ? best : cmplin; }
705        goto 99        else { cmplin = -22 ; }
706    60  stop 'cmpnum: An error occured reading a,b'     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
707    70  print *,-best        }
708        end     else {
709  EOFA     /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
710          break; }
711      }
712      if (lncnt == 999) best=-29;
713      if (linnum != -1) best=-99;
714      printf("%d\n", -best);
715      return 0;
716    }
717    EOF
718        $CC -o tr_cmpnum tr_cmpnum.c -lm
719    
720      f77 tmp_cmpnum.f      if [ -x ./tr_cmpnum ]; then
     if [ -x ./a.out ]; then  
721          echo "OK"          echo "OK"
722          return 0          return 0
723      else      else
724          echo          echo
725          echo "createcodelet: failed to compile codelet"          echo "ERROR: failed to compile comparison code -- please specify"
726            echo "  a C compiler using the CC environment variable."
727          exit 1          exit 1
728      fi      fi
729  }  }
# Line 374  formatresults() Line 735  formatresults()
735      nm=$1      nm=$1
736      printf '%s %s %s %s' $2 $3 $4 $5      printf '%s %s %s %s' $2 $3 $4 $5
737      shift; shift; shift; shift; shift;      shift; shift; shift; shift; shift;
738      printf '%3s' $@      listPrt=$@
739            listRes=`echo $listPrt | sed 's/>//' | sed 's/<//'`
740      if [ $1 = '--' ]; then      xx=`echo $listPrt | sed 's/.*>//' | sed 's/<.*//' | awk '{print $1}'`
741        printf '%3s' $listPrt
742    #   line below does not work on hp-ux_ia64 : do those substitutions later on
743    #   printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</'
744    
745        if [ $xx = '..' ]; then
746            printf ' N/O '
747        elif [ $xx = '--' ]; then
748            printf ' N/O '
749        elif [ $xx = 99 ]; then
750          printf ' N/O '          printf ' N/O '
751      else      else
752          if [ $1 -gt 12 ]; then          if [ $xx -ge $MATCH_CRIT ]; then
753              printf ' pass'              printf ' pass'
754          else          else
755              printf ' FAIL'              printf ' FAIL'
# Line 387  formatresults() Line 757  formatresults()
757      fi      fi
758      printf '  %s' $nm      printf '  %s' $nm
759      printf '\n'      printf '\n'
       
 }  
   
 show_help()  
 {  
     cat - << EOF  
 $0 [-help] [-quick] [-verbose] dir1 [dir2] [...]  
760    
  -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  
761  }  }
762    
763  scandirs()  scandirs()
764  {  {
765      if [ $# -eq 0 ]; then      if [ $# -eq 1 ]; then
766          for arg in * ; do          for arg in * ; do
767              test -d $arg/input && echo $arg              test -f $arg/$1 && echo $arg
768          done          done
769      else      else
770          echo $*          echo $*
771      fi      fi
772  }  }
773    
774    
775  ###############################################################################  check_eedata()
776  ###############################################################################  {
777        # check_eedata size.h eedata
778        if [ $# -eq 2 ] ; then
779          if test -f $1 -a -f $2 ; then
780          sx=`grep "^     & *nSx *=" $1 | sed "s/^     & *nSx *=//" | sed 's/, *$//'`
781          nx=`grep "^ *nTx *=" $2 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
782          if test "x$nx" = x ; then
783            rx=10
784          else
785            rx=`expr $sx % $nx`
786          fi
787          sy=`grep "^     & *nSy *=" $1 | sed "s/^     & *nSy *=//" | sed 's/, *$//'`
788          ny=`grep "^ *nTy *=" $2 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
789          if test "x$ny" = x ; then
790            ry=20
791          else
792            ry=`expr $sy % $ny`
793          fi
794          echo `expr $rx + $ry`
795        else
796          echo '-1'
797          fi
798        else
799          echo '-2'
800        fi
801    
802    }
803    
804  ###############################################################################  ###############################################################################
805    
806    
# Line 430  scandirs() Line 808  scandirs()
808  debug=0  debug=0
809  verbose=1  verbose=1
810  clean=0  clean=0
 expts=''  
 # ieee=1  
811    
812  IEEE=  IEEE=true
813  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
814      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
815  fi  fi
816    GSL=f
817    
818  CLEANUP=f  CLEANUP=f
819    NORUN=f
820  QUICK=f  QUICK=f
821    NOMAKE=f
822  NOGENMAKE=f  NOGENMAKE=f
823  NOCLEAN=f  NOCLEAN=f
824  NODEPEND=f  NODEPEND=f
825    POSTCLEAN=f
826    
827  BASH=  BASH=
828  OPTFILE=NONE  OPTFILE=NONE
829  ADDRESSES=  ADDRESSES=
830  TESTDIRS=  TESTDIRS=
831    SKIPDIRS=
832  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
833  MPACK="$MPACKDIR/mpack"  HAVE_MPACK=
834  COMMAND="make output.txt"  MPACK=
835  MAKE=make  COMMAND=
836    MKDEPEND=
837    if test "x$MAKE" = x ; then
838        MAKE=make
839    fi
840    if test "x$CC" = x ; then
841        CC=cc
842    fi
843    JOBS=
844  MPI=f  MPI=f
845    MULTI_THREAD=f
846    OUTDIR=
847    DELDIR=
848    USE_R4=
849    
850    ADM=
851    OADM=
852    
853    # list of pTracers to check for monitor output
854    PTRACERS_NUM="1 2 3 4 5"
855    
856  echo -n "parsing options...  "  MATCH_CRIT=13
857    
858    printf "parsing options...  "
859    
860  ac_prev=  ac_prev=
861  for ac_option ; do  for ac_option ; do
# Line 468  for ac_option ; do Line 868  for ac_option ; do
868      fi      fi
869    
870      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
871        
872      case $ac_option in      case $ac_option in
873                    
874          -help | --help | -h | --h)          -help | --help | -h | --h)
# Line 481  for ac_option ; do Line 881  for ac_option ; do
881                    
882          -addr | --addr | -a | --a)          -addr | --addr | -a | --a)
883              ac_prev=ADDRESSES ;;              ac_prev=ADDRESSES ;;
884          -addr=* | --addr=*)          -addr=* | --addr=* | -a=* | --a=*)
885              ADDRESSES=$ac_optarg ;;              ADDRESSES=$ac_optarg ;;
886            -mpackdir | --mpackdir | -mpd | --mpd)
887                ac_prev=MPACKDIR ;;
888            -mpackdir=* | --mpackdir=* | -mpd=* | --mpd=*)
889                MPACKDIR=$ac_optarg ;;
890    
891          -tdir | --tdir | -t | --t)          -tdir | --tdir | -t | --t)
892              ac_prev=TESTDIRS ;;              ac_prev=TESTDIRS ;;
893          -tdir=* | --tdir=*)          -tdir=* | --tdir=* | -t=* | --t=*)
894              TESTDIRS=$ac_optarg ;;              TESTDIRS=$ac_optarg ;;
895    
896            -skipdir | --skipdir | -skd | --skd)
897                ac_prev=SKIPDIRS ;;
898            -skipdir=* | --skipdir=* | -skd=* | --skd=*)
899                SKIPDIRS=$ac_optarg ;;
900    
901          -bash | --bash | -b | --b)          -bash | --bash | -b | --b)
902              ac_prev=BASH ;;              ac_prev=BASH ;;
903          -bash=* | --bash=*)          -bash=* | --bash=* | -b=* | --b=*)
904              BASH=$ac_optarg ;;              BASH=$ac_optarg ;;
905    
906          -command | --command | -c | --c)          -command | --command | -c | --c)
907              ac_prev=COMMAND ;;              ac_prev=COMMAND ;;
908          -command=* | --command=*)          -command=* | --command=* | -c=* | --c=*)
909              COMMAND=$ac_optarg ;;              COMMAND=$ac_optarg ;;
910    
911            -makedepend | --makedepend | -md | --md)
912                ac_prev=MKDEPEND ;;
913            -makedepend=* | --makedepend=* | -md=* | --md=*)
914                MKDEPEND=$ac_optarg ;;
915    
916          -make | --make | -m | --m)          -make | --make | -m | --m)
917              ac_prev=MAKE ;;              ac_prev=MAKE ;;
918          -make=* | --make=*)          -make=* | --make=* | -m=* | --m=*)
919              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
920    
921            -odir | --odir)
922                ac_prev=OUTDIR ;;
923            -odir=* | --odir=*)
924                OUTDIR=$ac_optarg ;;
925    
926            -ptracers | --ptracers | -ptr | --ptr)
927                ac_prev=PTRACERS_NUM ;;
928            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*)
929                PTRACERS_NUM=$ac_optarg ;;
930    
931            -match | --match ) ac_prev=MATCH_CRIT ;;
932            -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
933    
934            -j | --j) ac_prev=JOBS ;;
935            -j=* | --j=*) JOBS=$ac_optarg ;;
936    
937          -clean | --clean)          -clean | --clean)
938              CLEANUP=t ;;              CLEANUP=t ; DELDIR=t ;;
939    
940            -norun | --norun | -nr | --nr)
941                NORUN=t ;;
942            -runonly | --runonly | -ro | --ro)
943                QUICK=t ; NOMAKE=t ;;
944          -quick | --quick | -q | --q)          -quick | --quick | -q | --q)
945              QUICK=t ;;              QUICK=t ;;
946          -nogenmake | --nogenmake | -ng | --ng)          -nogenmake | --nogenmake | -ng | --ng)
# Line 516  for ac_option ; do Line 950  for ac_option ; do
950          -nodepend | --nodepend | -nd | --nd)          -nodepend | --nodepend | -nd | --nd)
951              NODEPEND=t ;;              NODEPEND=t ;;
952    
953          -mpi) MPI=true ;;          -postclean | --postclean | -pc | --pc)
954                POSTCLEAN=t ;;
955    
956            -mpi) MPI=t ;;
957    
958            -mth) MULTI_THREAD=t ;;
959    
960            -adm | -ad) ADM=t ;;
961    
962            -oad) OADM=t; NODEPEND=t ;;
963    
964          -ieee) IEEE=true ;;          -ieee) IEEE=true ;;
965          -noieee) IEEE= ;;          -noieee) IEEE= ;;
966            -gsl) GSL=t ;;
967    
968          -verbose) verbose=2 ;;          -verbose) verbose=2 ;;
969          -debug) debug=1 ;;          -debug) debug=1 ;;
970          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
971    
972            -deldir | -dd) DELDIR=t ;;
973    
974            -use_r4|-ur4) USE_R4=t ;;
975    
976            -ts) TS=t;;
977            -papis) PAPIS=t;;
978            -pcls) PCL=t;;
979    
980          -*)          -*)
981              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
982              usage              usage
983              ;;              ;;
984            
985          *)          *)
986              echo "Error: unrecognized argument: "$ac_option              echo "Error: unrecognized argument: "$ac_option
987              usage              usage
988              ;;              ;;
989            
990       esac       esac
991        
992  done  done
993    
994  if test "x$QUICK" = xt ; then  if test "x$QUICK" = xt ; then
# Line 545  if test "x$QUICK" = xt ; then Line 997  if test "x$QUICK" = xt ; then
997      NODEPEND=t      NODEPEND=t
998  fi  fi
999    
1000    #- setting for forward or ADM testing
1001    if test "x$ADM" = xt ; then
1002        code_dir=code_ad
1003        inputdir=input_ad
1004        ref_outp="output_adm.txt"
1005        EXECUTABLE="mitgcmuv_ad"
1006    elif test "x$OADM" = xt ; then
1007        code_dir=code_oad
1008        inputdir=input_oad
1009        ref_outp="output_oadm.txt"
1010        EXECUTABLE="mitgcmuv_ad"
1011    else
1012        code_dir=code
1013        inputdir=input
1014        ref_outp="output.txt"
1015        EXECUTABLE="mitgcmuv"
1016    fi
1017    
1018    xx=`echo $TESTDIRS | awk '{print $1}'`
1019  if test "x$TESTDIRS" = x ; then  if test "x$TESTDIRS" = x ; then
1020      TESTDIRS=`scandirs`      LIST=`scandirs results/$ref_outp`
1021    elif test $xx = 'start_from' ; then
1022        xx=`echo $TESTDIRS | awk '{print $2}'`
1023        LIST=`scandirs results/$ref_outp | sed -n "/$xx/,$ p"`
1024    else
1025        #- expand group of experiments:
1026        LIST=" "
1027        for xx in $TESTDIRS
1028        do
1029          case $xx in
1030            'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
1031                     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
1032                     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
1033                    ;;
1034            'tutorials')
1035                     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
1036            *)       LIST=${LIST}" "$xx ;;
1037          esac
1038        done
1039  fi  fi
1040    #echo 'LIST='${LIST}'<'
1041    #- skip dirs, remove duplicate and non-directory:
1042    TESTDIRS=" "
1043    count=0
1044    for xx in $LIST
1045    do
1046        yy=`echo $SKIPDIRS | grep -c $xx`
1047        if test $yy = 0 ; then
1048            if test -d $xx ; then
1049                yy=`echo $TESTDIRS | grep -c $xx`
1050                if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
1051            else count=1 ;
1052                echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
1053            fi
1054        else
1055            if test $count = 1 ; then echo -n ", \"$xx\""
1056            else count=1 ; echo "" ;  echo -n " skip: \"$xx\""
1057            fi
1058        fi
1059    done
1060    if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
1061    #echo 'TESTDIRS='${TESTDIRS}'<'
1062    
1063  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
1064      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
1065  fi  fi
1066    
1067  echo "OK"  RUNLOG="run.log"
1068    OUTPUTFILE=$ref_outp
1069    if test "x$COMMAND" = x ; then
1070        COMMAND="./$EXECUTABLE > $OUTPUTFILE"
1071    fi
1072    if test "x$MPI" = xt ; then
1073        OUTPUTFILE="STDOUT.0000"
1074    fi
1075    
1076    echo "OK (COMMAND= $COMMAND )"
1077    
1078    # set the Default List of output variables to be checked:
1079    #  (use default or load experiment-specific list from file "tr_checklist")
1080    # content : 1rst = main variable used to decide if it pass or FAIL
1081    #         others = number of matching digits to be printed in summary.txt
1082    if test "x$ADM" = x -a "x$OADM" = x; then
1083        DEF_CHECK_LIST='PS PS T+ S+ U+ V+ pt1+ pt2+ pt3+ pt4+ pt5+'
1084        EMPTY_RESULTS='.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..'
1085        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1086        ii=`echo $EMPTY_RESULTS | awk '{print NF}'`
1087        EMPTY_RESULTS=$EMPTY_RESULTS`expr $LEN_CHECK_LIST - $ii | awk 'BEGIN{FS=":"}{for(i=1;i<=$1;i++){printf "  ."}}'`
1088    else
1089        DEF_CHECK_LIST='Grad Cost Grad'
1090        EMPTY_RESULTS='.. ..'
1091        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1092    fi
1093    
1094  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
1095  createcodelet  if test -x tr_cmpnum ; then
1096        echo "skipping comparison code build"
1097    else
1098        createcodelet
1099    fi
1100    
1101  #  build the mpack utility  #  build the mpack utility (if ADDRESSES = NONE, do it to test the build)
1102  build_mpack  if test "x$ADDRESSES" = x ; then
1103        echo "skipping mpack build"
1104    else
1105        build_mpack
1106    fi
1107    
1108  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
1109    CMDLINE=$0
1110    for xx in "$@" ; do nw=`echo $xx | wc -w`
1111        if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
1112                            else CMDLINE="$CMDLINE '$xx'" ; fi
1113    done
1114    #for xx in "$@" ; do CMDLINE="$CMDLINE '$xx'" ; done
1115  MACH=`hostname`  MACH=`hostname`
1116  UNAMEA=`uname -a`  UNAMEA=`uname -a`
1117  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
1118  BASE=$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
1119    if test "x$OUTDIR" != x ; then
1120        BASE="tr_"$OUTDIR"_"$DATE"_"
1121    else
1122        short_name=`hostname | sed 's/\..*$//'`
1123        BASE="tr_"$short_name"_"$DATE"_"
1124    fi
1125  DNUM=0  DNUM=0
1126  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
1127  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 575  done Line 1131  done
1131  mkdir $DRESULTS  mkdir $DRESULTS
1132  RETVAL=$?  RETVAL=$?
1133  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
1134      echo "Error: can't create results directory \"./$DRESULTS\""      echo "ERROR: Can't create results directory \"./$DRESULTS\""
1135      exit 1      exit 1
1136  fi  fi
1137  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
1138  echo -n "Start time:  " >> $SUMMARY  start_date=`date`
1139  date > $SUMMARY  echo $start_date > $SUMMARY
1140  date > dfile  echo 'run:' $CMDLINE >> $SUMMARY
1141  cat << EOF >> $SUMMARY  echo 'on :' $UNAMEA  >> $SUMMARY
                 T           S           U           V  
 G D M    c        m  s        m  s        m  s        m  s  
 E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .  
 N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d  
 2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .  
   
 EOF  
   
 NDIR=0  
1142    
1143  of_path=  of_path=
1144  if test "x$OPTFILE" != xNONE ; then  if test "x$OPTFILE" != xNONE ; then
# Line 605  if test "x$OPTFILE" != xNONE ; then Line 1152  if test "x$OPTFILE" != xNONE ; then
1152          fi          fi
1153          file=${OPTFILE##*/}          file=${OPTFILE##*/}
1154          OPTFILE=$of_path/$file          OPTFILE=$of_path/$file
1155            cp $OPTFILE $DRESULTS
1156            echo >> $SUMMARY
1157            echo "  OPTFILE=$OPTFILE" >> $SUMMARY
1158      else      else
1159          echo          echo | tee $SUMMARY
1160          echo "WARNING: can't read OPTFILE=\"$OPTFILE\" but will try to use it..."          echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
1161            exit 1
1162      fi      fi
1163    else
1164        echo >> $SUMMARY
1165        echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY
1166        echo "   so the genmake default will be used." >> $SUMMARY
1167  fi  fi
1168  echo  echo
 echo "OPTFILE=$OPTFILE" >> $SUMMARY  
1169  echo >> $SUMMARY  echo >> $SUMMARY
1170    if test "x$ADM" = x -a "x$OADM" = x; then
1171        if [ $MATCH_CRIT -lt 10 ] ;
1172        then line_0="default  "$MATCH_CRIT ;
1173        else line_0="default "$MATCH_CRIT ; fi
1174           line_0="$line_0  ----T-----  ----S-----  ----U-----  ----V-----"
1175        line_1="G D M    c        m  s        m  s        m  s        m  s"
1176        line_2="E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
1177        line_3="N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
1178        line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
1179        for ii in $PTRACERS_NUM ; do
1180            line_0="$line_0  --PTR 0"$ii"--"
1181            line_1="$line_1        m  s"
1182            line_2="$line_2  m  m  e  ."
1183            line_3="$line_3  i  a  a  d"
1184            line_4="$line_4  n  x  n  ."
1185        done
1186        echo "$line_0" | tee -a $SUMMARY
1187        echo "$line_1" | tee -a $SUMMARY
1188        echo "$line_2" | tee -a $SUMMARY
1189        echo "$line_3" | tee -a $SUMMARY
1190        echo "$line_4" | tee -a $SUMMARY
1191        echo " "       | tee -a $SUMMARY
1192    else
1193        echo "ADJOINT=true" >> $SUMMARY
1194        echo >> $SUMMARY
1195        if [ $MATCH_CRIT -lt 10 ] ;
1196        then line_0="default     "$MATCH_CRIT ;
1197        else line_0="default    "$MATCH_CRIT ; fi
1198        echo "$line_0" | tee -a $SUMMARY
1199        cat << EOF | tee -a $SUMMARY
1200    G D M    C  G
1201    E p a R  o  r
1202    N n k u  s  a
1203    2 d e n  t  d
1204    
1205    EOF
1206    fi
1207    echo "-------------------------------------------------------------------------------"
1208    
1209  #  ...and each test directory...  #  ...and each test directory...
1210  for dir in $TESTDIRS ; do  for dir in $TESTDIRS ; do
1211        
1212        # set builddir & rundir:
1213        builddir="build"
1214        if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1215        rundir="run"
1216        if test ! -d $dir/$rundir ; then
1217            rundir=$builddir
1218        fi
1219        CODE_DIR=$dir/$code_dir
1220        BUILD_DIR=$dir/$builddir
1221    
1222      #  Cleanup only!      #  Cleanup only!
1223      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1224          if test -r $dir/build/Makefile ; then          echo -n '  --- dir:' $BUILD_DIR ': '
1225              ( cd $dir/build ; make CLEAN )          makeclean $BUILD_DIR
1226            rm -f $BUILD_DIR/$EXECUTABLE
1227            if test -d $dir/$rundir/CVS ; then
1228                echo -n '  --- dir:' $dir/$rundir ': '
1229                run_clean $dir/$rundir
1230          fi          fi
1231          if test -r $dir/input/Makefile ; then          trdir=`( cd $dir ; find . -type d -name "tr_run.*" -print | sed 's/^.\///')`
1232              ( cd $dir/input ; make CLEAN )          ttd=`echo $trdir | wc -w`
1233            if test $ttd != 0 ; then
1234                echo '  --- rm dir:' $trdir
1235                ( cd $dir ; rm -rf $trdir )
1236          fi          fi
1237          continue          continue
1238      fi      fi
1239    
1240      #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
1241      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
1242      if test ! -r $dir"/results/output.txt" ; then      fout=$dir"/results/"$ref_outp
1243          echo "can't read \"$dir/results/output.txt\" -- skipping $dir"      if test ! -r $fout ; then
1244            echo "can't read \"$fout\" -- skipping $dir"
1245          continue          continue
1246      fi      fi
1247    
1248      echo "-------------------------------------------------------------------------------"      # Check for specific files for particular type of run
     echo  
     echo "Experiment:  $dir"  
     echo  
     unset genmake makedepend make run  
     results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'  
1249    
1250      builddir="input"      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1251      rundir="input"          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1252      use_seperate_build=0          continue
     if test -d $dir/build -a -r $dir/build ; then  
         builddir="build"  
         rundir="build"  
         use_seperate_build=1  
         linkdata $use_seperate_build $dir/$rundir  
1253      fi      fi
1254            if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1255      CODE_DIR=$dir/code          echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1256      BUILD_DIR=$dir/$builddir          continue
     MPI_FILES="CPP_EEOPTIONS.h_mpi SIZE.h_mpi"  
     NOMPI_FILES="CPP_EEOPTIONS.h_nompi SIZE.h_nompi"  
   
     #  Is this an MPI run?  
     if test "x$MPI" = xt ; then  
         FILES=$MPI_FILES  
         endings="_mpi"  
     else  
         FILES=$NOMPI_FILES  
         endings="_nompi"  
1257      fi      fi
1258            if test "x$MPI" = "xt" -a "x$MULTI_THREAD" = "xt" ; then
1259      #  Check to see that we have the files        retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/input/eedata.mth"`
1260      have_files=t        if test $retv != 0 ; then
1261      for i in $FILES ; do          echo "input/eedata.mth tiling misfit -- skipping $dir"
         if test ! -r $CODE_DIR/$i ; then  
             echo "Warning: can't read file $CODE_DIR/$i"  
             have_files=f  
         fi  
     done  
     if test "x$have_files" != xt -a "x$MPI" = xt ; then  
         echo "Skipping $dir due to lack of input files (see above warning)"  
1262          continue          continue
1263          fi
1264      fi      fi
1265        
1266      #  If we have the $FILES and they differ, copy the $FILES to $BUILD_DIR      #  Check whether there are "extra runs" for this testdir
1267      if test "x$have_files" = xt ; then      extra_runs=
1268          for i in $FILES ; do      if test "x$NORUN" = xf ; then
1269              sstr="s|$endings||"          ex_run_dirs=`( cd $dir ; echo $inputdir.* )`
1270              name=`echo $i | sed -e $sstr `      fi
1271              cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1      #echo "ex_run_dirs='$ex_run_dirs'"
1272              RETVAL=$?      for exd in $ex_run_dirs ; do
1273              if test "x$RETVAL" != x0 ; then          name=`echo $exd | sed -e "s/$inputdir\.//"`
1274                  cp $CODE_DIR/$i $BUILD_DIR/$name          refExOut=`echo $ref_outp | sed "s/\./.${name}./"`
1275            outf="$dir/results/$refExOut"
1276            if test -f $outf -a -r $outf ; then
1277              if test "x$MULTI_THREAD" = "xt" ; then
1278                if test -r $dir"/"$exd"/eedata.mth" ; then
1279                  if test "x$MPI" = "xt" ; then
1280                    retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/"$exd"/eedata.mth"`
1281                    if test $retv = 0 ; then
1282                        extra_runs="$extra_runs $name"
1283                    else
1284                        echo $exd"/eedata.mth tiling misfit -- skipping $dir"
1285                    fi
1286                  else
1287                    extra_runs="$extra_runs $name"
1288                  fi
1289                #else echo $dir"/"$exd"/eedata.mth: not found"
1290              fi              fi
1291          done            else
1292                extra_runs="$extra_runs $name"
1293              fi
1294            fi
1295        done
1296    
1297        echo
1298        if test "x$extra_runs" = "x" ; then
1299           echo "Experiment:  $dir"
1300        else
1301           echo "Experiment:  $dir ; extra_runs=$extra_runs"
1302      fi      fi
1303            echo
1304        unset genmake makedepend make run
1305        results=$EMPTY_RESULTS
1306    
1307      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1308      CDIR=$DRESULTS"/"$DRESULTS"_"$NDIR      locDIR=$DRESULTS"/"$dir
1309      mkdir $CDIR      mkdir $locDIR
1310      CDIR=`pwd`"/$CDIR"      CDIR=`pwd`"/$locDIR"
1311        
1312      if test "x$CLEANUP" = xt ; then      if test "x$NORUN" = xt ; then
1313          makeclean $dir/$builddir              run=N
1314            genmakemodel $dir/$builddir && genmake=Y \
1315                && makeclean $dir/$builddir \
1316                && symlink_mpifiles $dir $code_dir $builddir \
1317                && makedependmodel $dir/$builddir && makedepend=Y \
1318                && makemodel $dir/$builddir && make=Y
1319      else      else
1320          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1321              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1322                && symlink_mpifiles $dir $code_dir $builddir \
1323              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1324              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1325              && linkdata $use_seperate_build $dir/$rundir \              && run_clean $dir/$rundir \
1326                && linkdata $dir/$rundir $inputdir \
1327              && runmodel $dir/$rundir && run=Y \              && runmodel $dir/$rundir && run=Y \
1328              && results=`testoutput $dir $rundir`              && results=`testoutput_run $dir $rundir $ref_outp`
1329      fi      fi
1330            #echo "results='$results'"
1331      echo  
1332      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1333          ${run:-N} $results          echo 1>&2
1334      echo          echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1335      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          touch $locDIR"/summary.txt"
1336          ${run:-N} $results >> $SUMMARY          echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1337      echo "fresults='" > $CDIR"/summary.txt"          echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1338      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1339          ${run:-N} $results >> $CDIR"/summary.txt"          echo "DATE='$DATE'" >> $locDIR"/summary.txt"
1340      echo "'" >> $CDIR"/summary.txt"          echo "tdir='$dir'" >> $locDIR"/summary.txt"
1341      echo "MACH='$MACH'" >> $CDIR"/summary.txt"          if test "x$ADM" = xt ; then
1342      echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"              head -1 $dir/$builddir/taf_ad.log >> $locDIR"/summary.txt"
1343      echo "DATE='$DATE'" >> $CDIR"/summary.txt"              grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1344      echo "tdir='$dir'" >> $CDIR"/summary.txt"                                  >> $locDIR"/summary.txt"
       
     (  
         cd $DRESULTS  
         tar -cf $NDIR".tar" $DRESULTS"_"$NDIR > /dev/null 2>&1  
         gzip $NDIR".tar"  
     )  
       
     if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then  
         echo "No mail sent"  
     else  
         $MPACK -s MITgcm-test -m 1000000 $DRESULTS"/"$NDIR".tar.gz" $ADDRESSES  
         RETVAL=$?  
         if test "x$RETVAL" != x0 ; then  
             echo "Warning: \"$MPACK\" failed -- please contact <edhill@mitgcm.org>"  
         else  
             rm -f $DRESULTS"/"$NDIR".tar*"  
1345          fi          fi
1346    
1347            for ex in $extra_runs ; do
1348                unset run
1349                results=$EMPTY_RESULTS
1350                #  reference output file
1351                refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1352                #  Create an output dir for each OPTFILE/tdir.ex combination
1353                locDIR=$DRESULTS"/"$dir"."$ex
1354                mkdir $locDIR
1355                CDIR=`pwd`"/$locDIR"
1356                test ! -e "$dir/tr_run.$ex" && mkdir "$dir/tr_run.$ex"
1357                run_clean $dir/tr_run.$ex
1358                linkdata $dir/tr_run.$ex $inputdir.$ex $inputdir
1359                runmodel $dir/tr_run.$ex && run=Y \
1360                && results=`testoutput_run $dir tr_run.$ex $refExOut`
1361                fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1362                fres="$fres.$ex"
1363                echo 1>&2
1364                echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1365                touch $locDIR"/summary.txt"
1366                echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1367                echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1368                echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1369                echo "DATE='$DATE'" >> $locDIR"/summary.txt"
1370                echo "tdir='$dir.$ex'" >> $locDIR"/summary.txt"
1371                if test "x$ADM" = xt ; then
1372                    head -1 $dir/$builddir/taf_ad.log >> $locDIR"/summary.txt"
1373                    grep -A3 'Seconds in section "ALL' $dir/tr_run.$ex/$OUTPUTFILE \
1374                                       >> $locDIR"/summary.txt"
1375                fi
1376                if test "x$POSTCLEAN" = xt ; then
1377                    run_clean $dir/tr_run.$ex
1378                fi
1379            done
1380    
1381        if test -f $DRESULTS"/"genmake_state ; then : ; else
1382            if test -f $dir/$builddir/Makefile ; then
1383                mkOpt=`grep '^# OPTFILE=' $dir/$builddir/Makefile 2>/dev/null | head -1 | sed 's/^# //'`
1384                echo "from '$dir/$builddir/Makefile', extract:" > $DRESULTS/genmake_state
1385                sed -n '/^# executed by:/,+1 p' $dir/$builddir/Makefile >> $DRESULTS/genmake_state
1386                echo $mkOpt >> $DRESULTS/genmake_state
1387            fi
1388        fi
1389        #postclean $dir/$builddir
1390        if test "x$POSTCLEAN" = xt ; then
1391            makeclean $dir/$builddir \
1392                && run_clean $dir/$rundir
1393      fi      fi
1394    
1395      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1396        
     NDIR=$(( $NDIR + 1 ))  
       
1397  done  done
1398    
1399  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1400  date -r dfile >> $SUMMARY  echo "$start_date" >> $SUMMARY
1401  echo -n "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
1402  date >> $SUMMARY  date >> $SUMMARY
1403    
1404  rm tmp_cmpnum.f a.out dfile  #  If addresses were supplied and mpack built successfully, then try
1405    #  to send email using mpack.
1406    if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then
1407        echo "No results email was sent."
1408    else
1409        if test "x$HAVE_MPACK" = xt ; then
1410            tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1411                && gzip $DRESULTS".tar" \
1412                && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1413            RETVAL=$?
1414            if test "x$RETVAL" != x0 ; then
1415                echo
1416                echo "Warning: The tar, gzip, & mpack step failed.  Please send email"
1417                echo "  to <MITgcm-support@mitgcm.org> for help.  You may copy the "
1418                echo "  summary of results from the directory \"$DRESULTS\"."
1419                echo
1420            else
1421                echo
1422                echo "An email containing results was sent to the following addresses:"
1423                echo "  \"$ADDRESSES\""
1424                echo
1425                test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"
1426                test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"
1427            fi
1428        fi
1429    fi
1430    
1431    if test "x$QUICK" = xf -a "x$NORUN" = xf ; then
1432        rm -f tr_cmpnum.c tr_cmpnum
1433    fi
1434    
1435  if test "x$CLEANUP" != xt ; then  if test "x$CLEANUP" != xt ; then
1436      cat $SUMMARY      cat $SUMMARY | sed 's/ \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \. //'
1437      if test -e tr.out ; then      if test -e tr_out.txt ; then
1438          mv tr.out tr.out.old          mv tr_out.txt tr_out.txt.old
1439      fi      fi
1440      cat $SUMMARY > tr.out      cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1441    fi
1442    
1443    if test "x$DELDIR" = xt ; then
1444        rm -rf $DRESULTS
1445  fi  fi
1446    

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.142

  ViewVC Help
Powered by ViewVC 1.1.22