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

Legend:
Removed from v.1.48  
changed lines
  Added in v.1.139

  ViewVC Help
Powered by ViewVC 1.1.22