/[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.44 by edhill, Mon Jul 12 14:02:25 2004 UTC revision 1.146 by jmc, Tue Nov 2 22:53:11 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 "  (-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"      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"      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    
# Line 47  usage() Line 71  usage()
71  build_mpack()  build_mpack()
72  {  {
73      printf "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              echo
78              echo "Error: can't find \"$MPACKDIR\""              echo "Error: can't find \"$MPACKDIR\""
# Line 56  build_mpack() Line 81  build_mpack()
81              echo              echo
82              HAVE_MPACK=f              HAVE_MPACK=f
83          fi          fi
         printf "building mpack...  "  
84          if test "x$CC" = x ; then          if test "x$CC" = x ; then
85              export CC=cc              export CC=cc
86          fi          fi
87            printf "building mpack (using CC=$CC)...  "
88          ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1          ( 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
# Line 70  build_mpack() Line 95  build_mpack()
95          else          else
96              rm -f tr_build_mpack.out              rm -f tr_build_mpack.out
97              HAVE_MPACK=t              HAVE_MPACK=t
98                echo "done"
99          fi          fi
100      else      else
101          HAVE_MPACK=t          HAVE_MPACK=t
102            echo "already exist"
103      fi      fi
     echo "OK"  
104  }  }
105    
106  testoutput_for_prop()  testoutput_var()
107  {  {
108      # testoutput_for_prop dir s1 label subdir extension      # 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/.*=//' | cat -n > 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$5 1>&2          echo testoutput_var: grep "$2" $1/results/$5 1>&2
132      fi      fi
133      grep "$2" $1/results/output.txt$5 | sed 's/.*=//' | cat -n > tmp2.txt      grep "$2" $1/results/$5 | sed 's/.*=//' | cat -n > tmp2.txt
134      lncnt=`wc -l tmp2.txt | awk '{print $1}' `      lncntB=`wc -l tmp2.txt | awk '{print $1}' `
135      if [ $lncnt -lt 3 ]; then      if [ $lncntB -lt 2 ]; then
136          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
137              echo Not enough lines of output when searching for "$2" 1>&2              echo Not enough lines of output when searching for "$2" 1>&2
138          fi          fi
139          return 99          return 99
140      fi      fi
141        if [ $lncntA -ne $lncntB ]; then
142            if [ $verbose -gt 0 ]; then
143                echo Not same Nb of lines when searching for "$2" ":" $lncntA $lncntB 1>&2
144            fi
145            return 99
146        fi
147        has_nan=`cat tmp1.txt | grep -i nan | wc -l`
148        if [ $has_nan -gt 0  ] ; then
149            echo testoutput_var: $OUTPUTFILE contains $has_nan NaN values  1>&2
150            return 99
151        fi
152        has_inf=`cat tmp1.txt | grep -i inf | wc -l`
153        if [ $has_inf -gt 0  ] ; then
154            echo testoutput_var: $OUTPUTFILE contains $has_inf Inf values  1>&2
155            return 99
156        fi
157      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
158          echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2          echo testoutput_var: join tmp1.txt tmp2.txt 1>&2
159      fi      fi
160      join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt      join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt
161      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
162          echo testoutput_for_prop: compare_lines 1>&2          echo testoutput_var: compare_lines 1>&2
163      fi      fi
164      if [ $verbose -gt 1 ]; then      if [ $verbose -gt 1 ]; then
165          cat tmp3.txt 1>&2          cat tmp3.txt 1>&2
# Line 124  testoutput_for_prop() Line 167  testoutput_for_prop()
167      echo "-1" >> tmp3.txt      echo "-1" >> tmp3.txt
168      # 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
169      cat tmp3.txt | sed -e 's|:||g' > tmp4.txt      cat tmp3.txt | sed -e 's|:||g' > tmp4.txt
170      digits_of_similarity=`./tmp_cmpnum < tmp4.txt`      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 -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  
 }  
182    
183  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  
184  }  }
185    
186  testoutput()  testoutput_run()
187  {  {
188      # testoutput directory subdir extension      # testoutput_run directory subdir reference_output
189      #      #
190      #  test output in "directory"      #  test output from 1 run in "directory"
191      if test "x$ADM" = x ; then  # --> 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 $3; 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 $3; tmin=$?          # remove 1rst var and expand the list: + => min max mean s.d
200          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' \
201          testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2 $3; tmean=$?                                 | sed 's/+//g' | sed "s/^$sVar//"`
202          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
203          testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2 $3; smin=$?          # check for ptracer output in reference_output file :
204          testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2 $3; smax=$?          outpref=$1/results/$3
205          testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2 $3; smean=$?          ptr_mon="trcstat_ptracerXX_min trcstat_ptracerXX_max"
206          testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2 $3; ssd=$?          ptr_mon="$ptr_mon trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
207          testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2 $3; umin=$?          for ii in $PTRACERS_NUM ; do
208          testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2 $3; umax=$?              ptrfound=0
209          testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2 $3; umean=$?              for jj in $ptr_mon ; do
210          testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2 $3; usd=$?                  name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
211          testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2 $3; vmin=$?                  tst=`grep $name $outpref | wc -l | awk '{print $1}'`
212          testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2 $3; vmax=$?                  if test ! "x$tst" = x0 ; then ptrfound=1 ; fi
213          testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2 $3; vmean=$?              done
214          testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2 $3; vsd=$?              if test $ptrfound = '1' ; then
215          dashnum $cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd \                  eval "HAVE_PTR0"$ii"=t"
216              $umin $umax $umean $usd $vmin $vmax $vmean $vsd              else
217      else                  eval "HAVE_PTR0"$ii"=f"
218          testoutput_ad $1 $2 "precision_grdchk_result"                if test "x$ADM" = x -a "x$OADM" = x; then
219      fi                # 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 221  genmakemodel() Line 318  genmakemodel()
318          (          (
319              cd $1;              cd $1;
320              command="$GENMAKE2  -ds -m $MAKE"              command="$GENMAKE2  -ds -m $MAKE"
321              if test "x$ADM" = x ; then              if test "x$MKDEPEND" != x ; then
322                  command="$command --mods=../code"                  command="$command -makedepend=$MKDEPEND"
323              else              fi
324                if test "x$ADM" = xt ; then
325                  command="$command --mods=../code_ad"                  command="$command --mods=../code_ad"
326                  command="$command -adof=../../../tools/adjoint_options/adjoint_staf"              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              fi
331              if test "x$OPTFILE" != xNONE ; then              if test "x$OPTFILE" != xNONE ; then
332                  command="$command --optfile=$OPTFILE"                  command="$command -optfile=$OPTFILE"
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              printf 'genmake ... ' 1>&2              if test "x$GSL" = xt ; then
338              $command > make.log 2>&1                  command="$command -gsl"
339                fi
340                if test "x$MPI" = xt ; then
341                    command="$command -mpi"
342                fi
343                if test "x$MULTI_THREAD" = xt ; then
344                #- run multi-threaded using OpenMP:
345                    command="$command -omp"
346                fi
347                if test "x$USE_R4" = xt ; then
348                    command="$command -use_r4"
349                fi
350                if test "x$TS" = xt ; then
351                    command="$command -ts"
352                fi
353                if test "x$PAPIS" = xt ; then
354                    command="$command -papis"
355                else
356                if test "x$PCLS" = xt ; then
357                    command="$command -pcls"
358                fi
359                fi
360                printf 'genmake ... '
361                eval $command > genmake.tr_log 2>&1
362              RETVAL=$?              RETVAL=$?
363              #  Reduce the size of the testing emails!              #  Reduce the size of the testing emails!
364              #  cp Makefile $CDIR              head -100 Makefile > $CDIR/Makefile_head
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 genmake_* make.log $CDIR                  cp genmake_* genmake.tr_log $CDIR
369                  return 1                  return 1
370              else              else
371                  echo "successful" 1>&2                  echo "successful"
372              fi              fi
373          )          )
374      fi      fi
# Line 253  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 successful 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 286  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 successful 1>&2                  echo successful
448              fi              fi
449          )          )
450      fi      fi
# Line 305  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              if test "x$ADM" = x ; then              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                  if test "x$JOBS" = x ; then
475                      $MAKE >> make.log 2>&1                      $MAKE >> make.tr_log 2>&1
476                  else                  else
477                      $MAKE -j $JOBS >> make.log 2>&1                      $MAKE -j $JOBS >> make.tr_log 2>&1
478                  fi                  fi
             else  
                 $MAKE adall >> make.log 2>&1  
479              fi              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 successful 1>&2                  echo successful
489              fi              fi
490          fi          fi
491        fi
492      )      )
493  }  }
494    
# Line 342  symlink_mpifiles() Line 504  symlink_mpifiles()
504      CODE_DIR=$dir/$code_dir      CODE_DIR=$dir/$code_dir
505    
506      # These are files that should replace their counter-part when using -mpi      # These are files that should replace their counter-part when using -mpi
507      MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`      MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi" -print)`
508    
509      #  Is this an MPI run?      #  Is this an MPI run?
510      if test "x$MPI" = xt ; then      if test "x$MPI" = xt ; then
# Line 355  symlink_mpifiles() Line 517  symlink_mpifiles()
517              RETVAL=$?              RETVAL=$?
518              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
519                  if ! test -f $BUILD_DIR/$i ; then                  if ! test -f $BUILD_DIR/$i ; then
520                  #echo Linking $name to $i                      #echo Linking $name to $i
521                      (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)                      (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)
522                  fi                  fi
523              fi              fi
524          done          done
525      else      else
526      # NO: We undo any _mpi symbolically linked files          # NO: We undo any _mpi symbolically linked files
527          for ii in $MPI_FILES ; do          for ii in $MPI_FILES ; do
528              i=`echo $ii | sed 's:^\./::'`              i=`echo $ii | sed 's:^\./::'`
529              name=`echo $i | sed 's:_mpi::' `              name=`echo $i | sed 's:_mpi::' `
530              if test -L $BUILD_DIR/$name ; then              if test -L $BUILD_DIR/$name ; then
531                  linktarg=`(cd $BUILD_DIR; readlink $name)`                  cmp $BUILD_DIR/$name "../$code_dir/$name"_mpi > /dev/null 2>&1
532                  if test $linktarg = "../$code_dir/$name"_mpi ; then                  RETVAL=$?
533                  #echo Un-linking $name from $linktarg                  if test "x$RETVAL" = x0 ; then
534                        #echo Un-linking $name from $linktarg
535                      rm -f $BUILD_DIR/$name                      rm -f $BUILD_DIR/$name
536                  fi                  fi
537              fi              fi
538          done          done
539      fi      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              if test "x$ADM" = x ; then              echo 'linkdata from dirs:' $*
552                  files=`( cd ../input ; ls -1 | grep -v CVS )`              inpMPI=`(cd ../$1 ; find . -name "*.mpi" -print | sed 's:^\./::')`
553                  for i in $files ; do              for xx in $inpMPI ; do
554                      if test ! -d "../input/"$i ; then                if test -r "../"$1"/"$xx ; then
555                          ln -sf "../input/"$i $i                  # 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                      fi
564                  done                  else
565              else                  # not mpi test: remove symbolic link
566                  files=`( cd ../input ; ls -1 *.bin | grep -v CVS )`                      if test -h $yy ; then rm -f $yy ; fi
567                  for i in $files ; do                  fi
568                      if test ! -d "../input/"$i ; then                fi
569                          ln -sf "../input/"$i $i              done
570                      fi              if test -r "../"$1"/eedata.mth" ; then
571                  done              # found eedata.mth in 1rst input dir and it is readable
572                  files=`( cd ../input_ad ; ls -1 | grep -v CVS )`                  if test "x$MULTI_THREAD" = "xt" ; then
573                  for i in $files ; do                  # multi-threaded test: remove symbolic link & link eedata.mth
574                      if test ! -d "../input_ad/"$i ; then                      if test -h eedata ; then rm -f eedata ; fi
575                          ln -sf "../input_ad/"$i $i                      if test ! -r eedata ; then
576                            ln -sf "../"$1"/eedata.mth" eedata ;
577                            printf ' eedata.mth' 1>&2
578                      fi                      fi
579                  done                  else
580                    # not multi-threaded test: remove eedata symbolic link
581                        if test -h eedata ; then rm -f eedata ; fi
582                    fi
583              fi              fi
584                prevDir='NONE'
585                for ldir in $* ; do
586                    if test -d "../"$ldir -a $ldir != $prevDir ; then
587                        printf " ldir=${ldir}:" 1>&2
588                        files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
589                        for i in $files ; do
590                            if test ! -d "../"$ldir/$i ; then
591                                if test ! -r $i  ; then
592                                    printf ' '$i 1>&2
593                                    ln -sf "../"$ldir"/"$i $i
594                                fi
595                            fi
596                        done
597                        printf ' ;' 1>&2
598                        if test -x "../"$ldir"/"prepare_run ; then
599                            "../"$ldir"/"prepare_run 1>&2
600                        else
601                            echo '' 1>&2
602                        fi
603                    fi
604                    prevDir=$ldir
605                done
606          )          )
607      fi      fi
608  }  }
# Line 414  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          echo            if test -x "../"$builddir"/"$EXECUTABLE ; then
621          # echo "COMMAND='$COMMAND'"              diff -q $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
622          # echo "pwd='"`pwd`"'"              outD=$? ; if test $outD != 0 ; then rm -f $EXECUTABLE ; fi
623          ( eval $COMMAND ) >> run.log 2>&1            else rm -f $EXECUTABLE
624          RETVAL=$?            fi
625          if test "x$RETVAL" = x0 ; then          fi
626              echo successful 1>&2          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!              # === Reduce the size of the testing emails!
663              # if test "x$ADM" = x ; then              #cp $OUTPUTFILE $CDIR"/"$OUTPUTFILE
664              #   cp output.txt $CDIR"/output.txt"              if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
665              # else              return 0
666              #   cp output.txt_adm $CDIR"/output.txt_adm"          elif [ $RETVAL -ne 0 -a $ENDVAL -gt 0 ] ; then
667              # fi              #-- 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              tail run.log              echo 'failed (run:' $RETVAL ' end:' $ENDVAL ')'
674              echo failed 1>&2              printf '=> output from running in %s :\n' $1 1>&2
675              cp run.log $CDIR"/run.log"              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 447  createcodelet() Line 684  createcodelet()
684  {  {
685      # create codelet for comparing model output      # create codelet for comparing model output
686    
687      printf "creating the comparison code...  "      printf "creating the comparison code (using CC=$CC)...  "
688      cat > tmp_cmpnum.c <<EOF      cat > tr_cmpnum.c <<EOF
689  #include <stdio.h>  #include <stdio.h>
690  #include <math.h>  #include <math.h>
691  int main( int argc, char** argv )  {  int main( int argc, char** argv )  {
692    int linnum,best,lncnt;    int linnum,cmplin,best,lncnt;
693    double a,b,diff;    double a,b,abave,relerr;
694    best = -16;    best = -22;
695    lncnt = 0;    lncnt = 0;
696    while( 1 & (lncnt+=1) < 999 )  {    while( 1 & ( (lncnt+=1) < 999 ) )  {
697      scanf("%d", &linnum);      scanf("%d", &linnum);
698      if (linnum == -1)  break;      if (linnum == -1)  break;
699      scanf("%lf", &a);  scanf("%lf", &b);      scanf("%lf", &a);  scanf("%lf", &b);
700      diff = 0.5*(fabs(a)+fabs(b));      abave = 0.5*(fabs(a)+fabs(b));
701      if (diff > 1.e-12) {      if ( abave == abave ) {
702        diff=fabs(a-b)/diff;        if (abave > 0.0) {
703        if (diff > 0.0) {          relerr=fabs(a-b)/abave;
704          linnum = (int)log10(diff);          if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
705          best = (best > linnum) ? best : linnum;          else { cmplin = -16 ; }
706        }          best = (best > cmplin) ? best : cmplin; }
707        else {        else { cmplin = -22 ; }
708          if (best == -16 && diff != 0)  best = -22;     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
709        }        }
710      }     else {
711       /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
712          break; }
713    }    }
714    if (lncnt == 999) best=-29;    if (lncnt == 999) best=-29;
715      if (linnum != -1) best=-99;
716    printf("%d\n", -best);    printf("%d\n", -best);
717    return 0;    return 0;
718  }  }
719  EOF  EOF
720      cc -o tmp_cmpnum tmp_cmpnum.c -lm      $CC -o tr_cmpnum tr_cmpnum.c -lm
721    
722      if [ -x ./tmp_cmpnum ]; then      if [ -x ./tr_cmpnum ]; then
723          echo "OK"          echo "OK"
724          return 0          return 0
725      else      else
726          echo          echo
727          echo "ERROR: failed to compile comparison code"          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 496  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 509  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 550  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=true  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  HAVE_MPACK=  HAVE_MPACK=
836  MPACK="$MPACKDIR/mpack"  MPACK=
837  COMMAND=  COMMAND=
838  MAKE=make  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=  JOBS=
846  MPI=f  MPI=f
847    MULTI_THREAD=f
848    OUTDIR=
849  DELDIR=  DELDIR=
850    USE_R4=
851    
852  ADM=  ADM=
853    OADM=
854    
855    # list of pTracers to check for monitor output
856    PTRACERS_NUM="1 2 3 4 5"
857    
858    MATCH_CRIT=13
859    
860  printf "parsing options...  "  printf "parsing options...  "
861    
# Line 593  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 606  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          -j) ac_prev=JOBS ;;          -odir | --odir)
924          -j=*) JOBS=$ac_optarg ;;              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 644  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            -postclean | --postclean | -pc | --pc)
956                POSTCLEAN=t ;;
957    
958          -mpi) MPI=t ;;          -mpi) MPI=t ;;
959    
960            -mth) MULTI_THREAD=t ;;
961    
962          -adm | -ad) ADM=t ;;          -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 ;;
# Line 657  for ac_option ; do Line 973  for ac_option ; do
973    
974          -deldir | -dd) DELDIR=t ;;          -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 677  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  if test "x$ADM" = xt -a "x$COMMAND" = x ; then  RUNLOG="run.tr_log"
1070      COMMAND="./mitgcmuv_ad > output.txt_adm 2>&1"  OUTPUTFILE=$ref_outp
 fi  
   
1071  if test "x$COMMAND" = x ; then  if test "x$COMMAND" = x ; then
1072      COMMAND="make output.txt"      COMMAND="./$EXECUTABLE > $OUTPUTFILE"
1073    fi
1074    if test "x$MPI" = xt ; then
1075        OUTPUTFILE="STDOUT.0000"
1076  fi  fi
1077    
1078  echo "OK"  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  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then  if test "x$ADDRESSES" = x ; then
1105      echo "skipping mpack build"      echo "skipping mpack build"
1106  else  else
1107      build_mpack      build_mpack
1108  fi  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="tr_"$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 723  if test "x$RETVAL" != x0 ; then Line 1137  if test "x$RETVAL" != x0 ; then
1137      exit 1      exit 1
1138  fi  fi
1139  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
 printf "Start time:  " >> $SUMMARY  
1140  start_date=`date`  start_date=`date`
1141  echo $start_date > $SUMMARY  echo $start_date > $SUMMARY
1142    echo 'run:' $CMDLINE >> $SUMMARY
1143    echo 'on :' $UNAMEA  >> $SUMMARY
1144    
1145  of_path=  of_path=
1146  if test "x$OPTFILE" != xNONE ; then  if test "x$OPTFILE" != xNONE ; then
# Line 754  else Line 1169  else
1169  fi  fi
1170  echo  echo
1171  echo >> $SUMMARY  echo >> $SUMMARY
1172  if test "x$ADM" = x ; then  if test "x$ADM" = x -a "x$OADM" = x; then
1173      cat << EOF | tee -a $SUMMARY      if [ $MATCH_CRIT -lt 10 ] ;
1174                  T           S           U           V      then line_0="default  "$MATCH_CRIT ;
1175  G D M    c        m  s        m  s        m  s        m  s      else line_0="default "$MATCH_CRIT ; fi
1176  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-----"
1177  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"
1178  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  ."
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  EOF      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  else
1195      echo "ADJOINT=true" >> $SUMMARY      echo "ADJOINT=true" >> $SUMMARY
1196      echo >> $SUMMARY      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      cat << EOF | tee -a $SUMMARY
1202  G D M    C  G  G D M    C  G
1203  E p a R  o  r  E p a R  o  r
# Line 774  N n k u  s  a Line 1206  N n k u  s  a
1206    
1207  EOF  EOF
1208  fi  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      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  
1250      if test ! -r $fout ; then      if test ! -r $fout ; then
1251          echo "can't read \"$fout\" -- skipping $dir"          echo "can't read \"$fout\" -- skipping $dir"
1252          continue          continue
1253      fi      fi
1254    
1255      builddir="input"      # Check for specific files for particular type of run
1256      rundir="input"  
1257      use_seperate_build=0      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then
1258      if test -d $dir/build -a -r $dir/build ; then          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1259          builddir="build"          continue
1260          rundir="build"      fi
1261          use_seperate_build=1      if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1262          linkdata $use_seperate_build $dir/$rundir          echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1263            continue
1264        fi
1265        if test "x$MPI" = "xt" -a "x$MULTI_THREAD" = "xt" ; then
1266          retv=`check_eedata $CODE_DIR"/SIZE.h_mpi" $dir"/input/eedata.mth"`
1267          if test $retv != 0 ; then
1268            echo "input/eedata.mth tiling misfit -- skipping $dir"
1269            continue
1270          fi
1271      fi      fi
1272        
1273      #  Check whether there are "extra runs" for this testdir      #  Check whether there are "extra runs" for this testdir
1274      extra_runs=      extra_runs=
1275      if test "x$ADM" = x -a "x$use_seperate_build" = x1 ; then      if test "x$NORUN" = xf ; then
1276          ex_run_dirs=`( cd $dir ; echo input.* )`          ex_run_dirs=`( cd $dir ; echo $inputdir.* )`
1277          echo "ex_run_dirs='$ex_run_dirs'"      fi
1278          for exd in $ex_run_dirs ; do      #echo "ex_run_dirs='$ex_run_dirs'"
1279              name=`echo $exd | sed -e 's/input.//g'`      for exd in $ex_run_dirs ; do
1280              outf="$dir/results/output.txt.$name"          name=`echo $exd | sed -e "s/$inputdir\.//"`
1281              if test -f $outf -a -r $outf ; then          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"                  extra_runs="$extra_runs $name"
1295                  fi
1296                #else echo $dir"/"$exd"/eedata.mth: not found"
1297              fi              fi
1298          done            else
1299      fi              extra_runs="$extra_runs $name"
1300              fi
1301            fi
1302        done
1303    
1304      if test "x$ADM" = x ; then      echo
1305          code_dir=code      if test "x$extra_runs" = "x" ; then
1306          CODE_DIR=$dir/code         echo "Experiment:  $dir"
1307      else      else
1308          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  
1309      fi      fi
   
     echo "-------------------------------------------------------------------------------"  
     echo  
     echo "Experiment:  $dir"  
1310      echo      echo
1311      unset genmake makedepend make run      unset genmake makedepend make run
1312      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'      results=$EMPTY_RESULTS
1313    
1314      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir for each OPTFILE/tdir combination
1315      rel_CDIR=$DRESULTS"/"$dir      locDIR=$DRESULTS"/"$dir
1316      mkdir $rel_CDIR      mkdir $locDIR
1317      CDIR=`pwd`"/$rel_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 \              && 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  
     if test "x$ADM" = x ; then  
1339          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1340          echo          echo 1>&2
1341          echo "$fres" >> $SUMMARY          echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1342          echo "fresults='$fres'" > $CDIR"/summary.txt"          touch $locDIR"/summary.txt"
1343          echo "MACH='$MACH'" >> $CDIR"/summary.txt"          echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1344          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"          echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1345          echo "DATE='$DATE'" >> $CDIR"/summary.txt"          echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1346          echo "tdir='$dir'" >> $CDIR"/summary.txt"          echo "DATE='$DATE'" >> $locDIR"/summary.txt"
1347            echo "tdir='$dir'" >> $locDIR"/summary.txt"
1348            if test "x$ADM" = xt ; then
1349                head -1 $dir/$builddir/taf_ad.log >> $locDIR"/summary.txt"
1350                grep -A3 'Seconds in section "ALL' $dir/$rundir/$OUTPUTFILE \
1351                                    >> $locDIR"/summary.txt"
1352            fi
1353    
         OLD_COMMAND=$COMMAND  
         COMMAND="./mitgcmuv > output.txt"  
1354          for ex in $extra_runs ; do          for ex in $extra_runs ; do
1355              test -e "$dir/tr_run.$ex" && rm -rf "$dir/tr_run.$ex"              unset run
1356              mkdir "$dir/tr_run.$ex"              results=$EMPTY_RESULTS
1357              links=`( cd "$dir/input" > /dev/null 2>&1 ; ls -1 | grep -v CVS )`              #  reference output file
1358              (              refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1359                  cd "$dir/tr_run.$ex"              #  Create an output dir for each OPTFILE/tdir.ex combination
1360                  for i in $links; do              locDIR=$DRESULTS"/"$dir"."$ex
1361                      ln -s ../input/$i $i              mkdir $locDIR
1362                  done              CDIR=`pwd`"/$locDIR"
1363              )              test ! -e "$dir/$pfxdir.$ex" && mkdir "$dir/$pfxdir.$ex"
1364              links=`( cd "$dir/input.$ex" > /dev/null 2>&1 ; ls -1 | grep -v CVS )`              run_clean $dir/$pfxdir.$ex
1365              (              linkdata $dir/$pfxdir.$ex $inputdir.$ex $inputdir
1366                  cd "$dir/tr_run.$ex"              runmodel $dir/$pfxdir.$ex && run=Y \
1367                  for i in $links; do              && results=`testoutput_run $dir $pfxdir.$ex $refExOut`
                     test -e $i  &&  rm -f $i  
                     ln -s ../input.$ex/$i $i  
                 done  
                 ln -s ../$builddir/mitgcmuv mitgcmuv  
             )  
             runmodel $dir/tr_run.$ex && run=Y \  
                 && results=`testoutput $dir tr_run.$ex "."$ex`  
             fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`  
1368              fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`              fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1369              fres="$fres.$ex"              fres="$fres.$ex"
1370              echo              echo 1>&2
1371              echo "$fres" >> $SUMMARY              echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1372              echo "fresults='$fres'" > $CDIR"/summary.txt"              touch $locDIR"/summary.txt"
1373              echo "MACH='$MACH'" >> $CDIR"/summary.txt"              echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1374              echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"              echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1375              echo "DATE='$DATE'" >> $CDIR"/summary.txt"              echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1376              echo "tdir='$dir'" >> $CDIR"/summary.txt"              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          done
1387          COMMAND=$OLD_COMMAND  
1388      else      if test -f $DRESULTS"/"genmake_state ; then : ; else
1389          fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`          if test -f $dir/$builddir/Makefile ; then
1390          fres=$fres"$results   $dir"              mkOpt=`grep '^# OPTFILE=' $dir/$builddir/Makefile 2>/dev/null | head -1 | sed 's/^# //'`
1391          echo              echo "from '$dir/$builddir/Makefile', extract:" > $DRESULTS/genmake_state
1392          echo "$fres" >> $SUMMARY              sed -n '/^# executed by:/,+1 p' $dir/$builddir/Makefile >> $DRESULTS/genmake_state
1393          echo "fresults='$fres'" > $CDIR"/summary.txt"              echo $mkOpt >> $DRESULTS/genmake_state
1394          echo "MACH='$MACH'" >> $CDIR"/summary.txt"          fi
1395          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"      fi
1396          echo "DATE='$DATE'" >> $CDIR"/summary.txt"      #postclean $dir/$builddir
1397          echo "tdir='$dir'" >> $CDIR"/summary.txt"      if test "x$POSTCLEAN" = xt ; then
1398            makeclean $dir/$builddir \
1399                && run_clean $dir/$rundir
1400      fi      fi
1401        
1402      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1403        
1404  done  done
1405    
1406  printf "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1407  echo $start_date >> $SUMMARY  echo "$start_date" >> $SUMMARY
1408  printf "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
1409  date >> $SUMMARY  date >> $SUMMARY
1410    
# Line 953  else Line 1429  else
1429              echo "An email containing results was sent to the following addresses:"              echo "An email containing results was sent to the following addresses:"
1430              echo "  \"$ADDRESSES\""              echo "  \"$ADDRESSES\""
1431              echo              echo
1432                test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"
1433                test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"
1434          fi          fi
         test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"  
         test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"  
1435      fi      fi
1436  fi  fi
1437    
1438  # rm -f tmp_cmpnum.f a.out  if test "x$QUICK" = xf -a "x$NORUN" = xf ; then
1439  rm -f tmp_cmpnum.c tmp_cmpnum      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.txt ; then      if test -e tr_out.txt ; then
1445          mv tr_out.txt tr_out.txt.old          mv tr_out.txt tr_out.txt.old
1446      fi      fi
1447      cat $SUMMARY > tr_out.txt      cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1448  fi  fi
1449    
1450  if test "x$DELDIR" = xt ; then  if test "x$DELDIR" = xt ; then

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

  ViewVC Help
Powered by ViewVC 1.1.22