/[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.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$  #  $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 > genmake.tr_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 genmake.tr_log
367                  echo "genmakemodel: genmake failed" 1>&2                  echo "genmakemodel: genmake failed"
368                  cp make.log $CDIR                  cp genmake_* genmake.tr_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 218  genmakemodel() Line 377  genmakemodel()
377  makeclean()  makeclean()
378  {  {
379      # makeclean directory      # makeclean directory
380        if test "x$NODEPEND" = xf ; then rm -f $1/make.tr_log ; fi
381      if test "x$NOCLEAN" = xt ; then      if test "x$NOCLEAN" = xt ; then
382          echo "make CLEAN skipped!"          echo "make Clean skipped!"
383      else      else
384          (          (
385              cd $1;              cd $1;
386              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  
387              if test -r Makefile ; then              if test -r Makefile ; then
388                  $MAKE CLEAN >> make.log 2>&1                  printf 'clean build-dir: make Clean ... '
389                    rm -f Makefile.old
390                    $MAKE Clean >> make.tr_log 2>&1
391                  RETVAL=$?                  RETVAL=$?
392                  if test "x$RETVAL" != x0 ; then                  if test "x$RETVAL" != x0 ; then
393                      tail make.log                      tail make.tr_log
394                      echo "makeclean: \"make CLEAN\" failed" 1>&2                      echo "makeclean: \"make Clean\" failed"
395                      cp make.log $CDIR"/make.log"                      cp make.tr_log $CDIR"/make.tr_log"
396                      return 1                      return 1
397                  fi                  fi
398                    echo successful
399                else
400                    echo ''
401              fi              fi
402              echo succesful 1>&2              exit 0
403            )
404        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              exit 0
426          )          )
427      fi      fi
# Line 251  makedependmodel() Line 435  makedependmodel()
435      else      else
436          (          (
437              cd $1;              cd $1;
438              printf 'make depend ... ' 1>&2              printf 'make depend ... '
439              $MAKE depend >> make.log 2>&1              $MAKE depend >> make.tr_log 2>&1
440              RETVAL=$?              RETVAL=$?
441              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
442                  tail make.log                  tail make.tr_log
443                  echo "makedependmodel: make depend failed" 1>&2                  echo "makedependmodel: make depend failed"
444                  cp make.log $CDIR"/make.log"                  cp make.tr_log $CDIR"/make.tr_log"
445                  return 1                  return 1
446              else              else
447                  echo succesful 1>&2                  echo successful
448              fi              fi
449          )          )
450      fi      fi
# Line 270  makemodel() Line 454  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 test "x$1" = x1 ; then      if test -d $1 ; then
549          (          (
550              cd $2              cd $1 ; shift
551              files=`( cd ../input ; ls -1 | grep -v CVS )`              echo 'linkdata from dirs:' $*
552              for i in $files ; do              inpMPI=`(cd ../$1 ; find . -name "*.mpi" -print | sed 's:^\./::')`
553                  if test ! -d "../input/"$i ; then              for xx in $inpMPI ; do
554                      ln -sf "../input/"$i $i                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                  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              done
606          )          )
607      fi      fi
# Line 309  runmodel() Line 611  runmodel()
611  {  {
612      # runmodel directory      # runmodel directory
613      #      #
614      #  runs "$COMMAND" in "directory"      #  runs "$COMMAND in "directory"
615      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
616      (      (
617          cd $1          cd $1
618          printf 'runmodel: ' 1>&2          printf 'runmodel in %s ... ' $1
619          # make output.txt          if test -L $EXECUTABLE ; then
620          $COMMAND            if test -x "../"$builddir"/"$EXECUTABLE ; then
621          RETVAL=$?              diff -q $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
622          if test "x$RETVAL" = x0 ; then              outD=$? ; if test $outD != 0 ; then rm -f $EXECUTABLE ; fi
623              cp output.txt $CDIR"/output.txt"            else rm -f $EXECUTABLE
624              fi
625            fi
626            if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
627                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
644                    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
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              return 0
672          else          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              return 1
679          fi          fi
680      )      )
# Line 330  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 374  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 387  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] [...]  
762    
  -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  
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    
# Line 430  scandirs() Line 810  scandirs()
810  debug=0  debug=0
811  verbose=1  verbose=1
812  clean=0  clean=0
 expts=''  
 # ieee=1  
813    
814  IEEE=  IEEE=true
815  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
816      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
817  fi  fi
818    GSL=f
819    
820  CLEANUP=f  CLEANUP=f
821    NORUN=f
822  QUICK=f  QUICK=f
823    NOMAKE=f
824  NOGENMAKE=f  NOGENMAKE=f
825  NOCLEAN=f  NOCLEAN=f
826  NODEPEND=f  NODEPEND=f
827    POSTCLEAN=f
828    
829  BASH=  BASH=
830  OPTFILE=NONE  OPTFILE=NONE
831  ADDRESSES=  ADDRESSES=
832  TESTDIRS=  TESTDIRS=
833    SKIPDIRS=
834  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
835  MPACK="$MPACKDIR/mpack"  HAVE_MPACK=
836  COMMAND="make output.txt"  MPACK=
837  MAKE=make  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  MPI=f
847    MULTI_THREAD=f
848    OUTDIR=
849    DELDIR=
850    USE_R4=
851    
852    ADM=
853    OADM=
854    
855    # list of pTracers to check for monitor output
856    PTRACERS_NUM="1 2 3 4 5"
857    
858  echo -n "parsing options...  "  MATCH_CRIT=13
859    
860    printf "parsing options...  "
861    
862  ac_prev=  ac_prev=
863  for ac_option ; do  for ac_option ; do
# Line 468  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)
# Line 481  for ac_option ; do Line 883  for ac_option ; do
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            -skipdir | --skipdir | -skd | --skd)
899                ac_prev=SKIPDIRS ;;
900            -skipdir=* | --skipdir=* | -skd=* | --skd=*)
901                SKIPDIRS=$ac_optarg ;;
902    
903          -bash | --bash | -b | --b)          -bash | --bash | -b | --b)
904              ac_prev=BASH ;;              ac_prev=BASH ;;
905          -bash=* | --bash=*)          -bash=* | --bash=* | -b=* | --b=*)
906              BASH=$ac_optarg ;;              BASH=$ac_optarg ;;
907    
908          -command | --command | -c | --c)          -command | --command | -c | --c)
909              ac_prev=COMMAND ;;              ac_prev=COMMAND ;;
910          -command=* | --command=*)          -command=* | --command=* | -c=* | --c=*)
911              COMMAND=$ac_optarg ;;              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)          -make | --make | -m | --m)
919              ac_prev=MAKE ;;              ac_prev=MAKE ;;
920          -make=* | --make=*)          -make=* | --make=* | -m=* | --m=*)
921              MAKE=$ac_optarg ;;              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)          -clean | --clean)
940              CLEANUP=t ;;              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)          -quick | --quick | -q | --q)
947              QUICK=t ;;              QUICK=t ;;
948          -nogenmake | --nogenmake | -ng | --ng)          -nogenmake | --nogenmake | -ng | --ng)
# Line 516  for ac_option ; do Line 952  for ac_option ; do
952          -nodepend | --nodepend | -nd | --nd)          -nodepend | --nodepend | -nd | --nd)
953              NODEPEND=t ;;              NODEPEND=t ;;
954    
955          -mpi) MPI=true ;;          -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 ;;          -ieee) IEEE=true ;;
967          -noieee) IEEE= ;;          -noieee) IEEE= ;;
968            -gsl) GSL=t ;;
969    
970          -verbose) verbose=2 ;;          -verbose) verbose=2 ;;
971          -debug) debug=1 ;;          -debug) debug=1 ;;
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  if test "x$QUICK" = xt ; then
# Line 545  if test "x$QUICK" = xt ; then Line 999  if test "x$QUICK" = xt ; then
999      NODEPEND=t      NODEPEND=t
1000  fi  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  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
1066      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
1067  fi  fi
1068    
1069  echo "OK"  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 575  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  echo -n "Start time:  " >> $SUMMARY  start_date=`date`
1141  date > $SUMMARY  echo $start_date > $SUMMARY
1142  date > dfile  echo 'run:' $CMDLINE >> $SUMMARY
1143  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  
1144    
1145  of_path=  of_path=
1146  if test "x$OPTFILE" != xNONE ; then  if test "x$OPTFILE" != xNONE ; then
# Line 605  if test "x$OPTFILE" != xNONE ; then Line 1154  if test "x$OPTFILE" != xNONE ; then
1154          fi          fi
1155          file=${OPTFILE##*/}          file=${OPTFILE##*/}
1156          OPTFILE=$of_path/$file          OPTFILE=$of_path/$file
1157            cp $OPTFILE $DRESULTS
1158            echo >> $SUMMARY
1159            echo "  OPTFILE=$OPTFILE" >> $SUMMARY
1160      else      else
1161          echo          echo | tee $SUMMARY
1162          echo "WARNING: can't read OPTFILE=\"$OPTFILE\" but will try to use it..."          echo "ERROR: can't read OPTFILE=\"$OPTFILE\"" | tee $SUMMARY
1163            exit 1
1164      fi      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  fi
1170  echo  echo
 echo "OPTFILE=$OPTFILE" >> $SUMMARY  
1171  echo >> $SUMMARY  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
1208    fi
1209    echo "-------------------------------------------------------------------------------"
1210    
1211  #  ...and each test directory...  #  ...and each test directory...
1212  for dir in $TESTDIRS ; do  for dir in $TESTDIRS ; do
1213        
1214        # set builddir & rundir:
1215        builddir="build"
1216        if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1217        rundir="run"
1218        pfxdir="tr_$rundir"
1219        if test ! -d $dir/$rundir ; then
1220            rundir=$builddir
1221        fi
1222        CODE_DIR=$dir/$code_dir
1223        BUILD_DIR=$dir/$builddir
1224    
1225      #  Cleanup only!      #  Cleanup only!
1226      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1227          if test -r $dir/build/Makefile ; then          echo -n '  --- dir:' $BUILD_DIR ': '
1228              ( cd $dir/build ; make CLEAN )          makeclean $BUILD_DIR
1229            (   cd $BUILD_DIR
1230                rm -f $EXECUTABLE *.bak
1231                rm -f genmake_state genmake_*optfile genmake.log
1232                rm -f genmake.tr_log make.tr_log
1233            )
1234            if test -d $dir/$rundir/CVS ; then
1235                echo -n '  --- dir:' $dir/$rundir ': '
1236                run_clean $dir/$rundir
1237          fi          fi
1238          if test -r $dir/input/Makefile ; then          trdir=`( cd $dir ; find . -type d -name "$pfxdir.*" -print | sed 's/^.\///')`
1239              ( cd $dir/input ; make CLEAN )          ttd=`echo $trdir | wc -w`
1240            if test $ttd != 0 ; then
1241                echo '  --- rm dir:' $trdir
1242                ( cd $dir ; rm -rf $trdir )
1243          fi          fi
1244          continue          continue
1245      fi      fi
1246    
1247      #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
1248      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
1249      if test ! -r $dir"/results/output.txt" ; then      fout=$dir"/results/"$ref_outp
1250          echo "can't read \"$dir/results/output.txt\" -- skipping $dir"      if test ! -r $fout ; then
1251            echo "can't read \"$fout\" -- skipping $dir"
1252          continue          continue
1253      fi      fi
1254    
1255      echo "-------------------------------------------------------------------------------"      # Check for specific files for particular type of run
     echo  
     echo "Experiment:  $dir"  
     echo  
     unset genmake makedepend make run  
     results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'  
1256    
1257      builddir="input"      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1258      rundir="input"          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1259      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  
1260      fi      fi
1261            if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1262      CODE_DIR=$dir/code          echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1263      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"  
1264      fi      fi
1265            if test "x$MPI" = "xt" -a "x$MULTI_THREAD" = "xt" ; then
1266      #  Check to see that we have the files        retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/input/eedata.mth"`
1267      have_files=t        if test $retv != 0 ; then
1268      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)"  
1269          continue          continue
1270          fi
1271      fi      fi
1272        
1273      #  If we have the $FILES and they differ, copy the $FILES to $BUILD_DIR      #  Check whether there are "extra runs" for this testdir
1274      if test "x$have_files" = xt ; then      extra_runs=
1275          for i in $FILES ; do      if test "x$NORUN" = xf ; then
1276              sstr="s|$endings||"          ex_run_dirs=`( cd $dir ; echo $inputdir.* )`
1277              name=`echo $i | sed -e $sstr `      fi
1278              cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1      #echo "ex_run_dirs='$ex_run_dirs'"
1279              RETVAL=$?      for exd in $ex_run_dirs ; do
1280              if test "x$RETVAL" != x0 ; then          name=`echo $exd | sed -e "s/$inputdir\.//"`
1281                  cp $CODE_DIR/$i $BUILD_DIR/$name          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              fi
1298          done            else
1299                extra_runs="$extra_runs $name"
1300              fi
1301            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      fi
1310            echo
1311        unset genmake makedepend make run
1312        results=$EMPTY_RESULTS
1313    
1314      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1315      CDIR=$DRESULTS"/"$DRESULTS"_"$NDIR      locDIR=$DRESULTS"/"$dir
1316      mkdir $CDIR      mkdir $locDIR
1317      CDIR=`pwd`"/$CDIR"      CDIR=`pwd`"/$locDIR"
1318        
1319      if test "x$CLEANUP" = xt ; then      if test "x$NORUN" = xt ; then
1320          makeclean $dir/$builddir              run=N
1321            genmakemodel $dir/$builddir && genmake=Y \
1322                && makeclean $dir/$builddir \
1323                && symlink_mpifiles $dir $code_dir $builddir \
1324                && makedependmodel $dir/$builddir && makedepend=Y \
1325                && makemodel $dir/$builddir && make=Y
1326      else      else
1327          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1328              && makeclean $dir/$builddir \              && 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 $use_seperate_build $dir/$rundir \              && run_clean $dir/$rundir \
1333                && linkdata $dir/$rundir $inputdir \
1334              && runmodel $dir/$rundir && run=Y \              && runmodel $dir/$rundir && run=Y \
1335              && results=`testoutput $dir $rundir`              && results=`testoutput_run $dir $rundir $ref_outp`
1336      fi      fi
1337            #echo "results='$results'"
1338      echo  
1339      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1340          ${run:-N} $results          echo 1>&2
1341      echo          echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1342      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          touch $locDIR"/summary.txt"
1343          ${run:-N} $results >> $SUMMARY          echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1344      echo "fresults='" > $CDIR"/summary.txt"          echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1345      formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} \          echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1346          ${run:-N} $results >> $CDIR"/summary.txt"          echo "DATE='$DATE'" >> $locDIR"/summary.txt"
1347      echo "'" >> $CDIR"/summary.txt"          echo "tdir='$dir'" >> $locDIR"/summary.txt"
1348      echo "MACH='$MACH'" >> $CDIR"/summary.txt"          if test "x$ADM" = xt ; then
1349      echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"              head -1 $dir/$builddir/taf_ad.log >> $locDIR"/summary.txt"
1350      echo "DATE='$DATE'" >> $CDIR"/summary.txt"              grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1351      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*"  
1352          fi          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      fi
1401    
1402      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1403        
     NDIR=$(( $NDIR + 1 ))  
       
1404  done  done
1405    
1406  echo -n "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1407  date -r dfile >> $SUMMARY  echo "$start_date" >> $SUMMARY
1408  echo -n "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
1409  date >> $SUMMARY  date >> $SUMMARY
1410    
1411  rm tmp_cmpnum.f a.out dfile  #  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=$?
1421            if test "x$RETVAL" != x0 ; then
1422                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
1428                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
1435        fi
1436    fi
1437    
1438    if test "x$QUICK" = xf -a "x$NORUN" = xf ; then
1439        rm -f tr_cmpnum.c tr_cmpnum
1440    fi
1441    
1442  if test "x$CLEANUP" != xt ; then  if test "x$CLEANUP" != xt ; then
1443      cat $SUMMARY      cat $SUMMARY | sed 's/ \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \. //'
1444      if test -e tr.out ; then      if test -e tr_out.txt ; then
1445          mv tr.out tr.out.old          mv tr_out.txt tr_out.txt.old
1446      fi      fi
1447      cat $SUMMARY > tr.out      cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1448    fi
1449    
1450    if test "x$DELDIR" = xt ; then
1451        rm -rf $DRESULTS
1452  fi  fi
1453    

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

  ViewVC Help
Powered by ViewVC 1.1.22