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

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

  ViewVC Help
Powered by ViewVC 1.1.22