/[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.34 by edhill, Fri Mar 12 02:44:34 2004 UTC revision 1.175 by jmc, Wed Aug 15 23:19:21 2012 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)                   use MPI to compile and run on 2 processors"
16      echo "                             (DEF=\"noieee\")"      echo "  (-MPI)  NUMBER           use MPI to compile and run on max NUMBER procs"
17      echo "  (-optfile=|-of=)STRING   list of optfiles to use"      echo "  (-mfile|-mf) STRING      MPI: file with list of possible machines to run on"
18      echo "  (-a|-addr) STRING        list of email recipients"      echo "  (-fast)                  use optfile default for compiler flags (no '-ieee')"
19      echo "                             (DEF=\"edhill@mitgcm.org\")"      echo "                            DEF=off => use IEEE numerics option (if available)"
20      echo "  (-t|-tdir) STRING        list of test dirs to use"      echo "  (-devel)                 use optfile developement flags (if available)"
21      echo "                             (DEF=\"\" which builds all)"      echo "  (-gsl)                   compile with \"-gsl\" flag"
22      echo "  (-b|-bash) STRING        preferred location of a \"bash\" or"      echo "  (-use_r4|-ur4)           if allowed, use real*4 type for '_RS' variable"
23        echo "  (-optfile|-of) STRING    list of optfiles to use"
24        echo "  (-addr|-a) STRING        list of email recipients"
25        echo "                             (DEF=\"\" no email is sent)"
26        echo "  (-mpackdir|-mpd) DIR     location of the mpack utility"
27        echo "                             (DEF=\"../tools/mpack-1.6\")"
28        echo "  (-tdir|-t) STRING        list of group and/or exp. dirs to test"
29        echo "                             (recognized groups: basic, tutorials)"
30        echo "                             (DEF=\"\" which test all)"
31        echo "                             (if list= 'start_from THIS_EXP' then"
32        echo "                              test THIS_EXP + all the following)"
33        echo "  (-skipdir|-skd) STRING   list of exp. dirs to skip"
34        echo "                             (DEF=\"\" which test all)"
35        echo "  (-bash|-b) STRING        preferred location of a \"bash\" or"
36      echo "                             Bourne-compatible \"sh\" shell"      echo "                             Bourne-compatible \"sh\" shell"
37      echo "                             (DEF=\"\" for \"bash\")"      echo "                             (DEF=\"\" for \"bash\")"
38        echo "  (-tlm)                   perform a Tangent Linear run"
39      echo "  (-adm|-ad)               perform an adjoint run"      echo "  (-adm|-ad)               perform an adjoint run"
40      echo "  (-command) STRING        command to run"      echo "  (-oad)                   perform an OpenAD adjoint run"
41      echo "                             (DEF=\"make output.txt\")"      echo "  (-command|-c) STRING     command to run"
42      echo "  (-m|-make) STRING        command to use for \"make\""      echo "  (-makedepend|-md) STRING command to use for \"makedepend\""
43        echo "  (-make|-m) STRING        command to use for \"make\""
44      echo "                             (DEF=\"make\")"      echo "                             (DEF=\"make\")"
45      echo "  (-clean)                 *ONLY* run \"make CLEAN\""      echo "  (-odir) STRING           used to build output directory name"
46        echo "                             (DEF=\"hostname\")"
47    #   echo "  (-ptracers|-ptr) STRING  specify which ptracers to test"
48    #   echo "                             (DEF=\"1 2 3 4 5\")"
49        echo "  (-match) NUMBER          Matching Criteria (number of digits)"
50        echo "                             (DEF=\"$MATCH_CRIT\")"
51        echo "  (-j) JOBS                use \"make -j JOBS\" for parallel builds"
52        echo "  (-ef) STRING             used as genmake2 \"-extra_flag\" argument"
53        echo "  (-clean)                 *ONLY* run \"make CLEAN\" & clean run-dir"
54        echo "  (-norun|-nr)             skip the \"runmodel\" stage (stop after make)"
55        echo "  (-obj)                   only produces objects (=norun & no executable)"
56        echo "  (-runonly|-ro)           *ONLY* run stage (=\"-quick\" without make)"
57      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""      echo "  (-quick|-q)              same as \"-nogenmake -noclean -nodepend\""
58      echo "  (-nogenmake|-ng)         skip the genmake stage"      echo "  (-nogenmake|-ng)         skip the genmake stage"
59      echo "  (-noclean|-nc)           skip the \"make clean\" stage"      echo "  (-noclean|-nc)           skip the \"make clean\" stage"
60      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"      echo "  (-nodepend|-nd)          skip the \"make depend\" stage"
61        echo "  (-postclean|-pc)         after each exp. test, clean build-dir & run-dir"
62        echo "  (-deloutp|-do)           delete output files after successful run"
63        echo "  (-deldir|-dd)            on success, delete the output directory"
64        echo "  (-ts)                    provide timing information per timestep"
65        echo "  (-papis)                 provide MFlop/s per timestep using PAPI"
66        echo "  (-pcls)                  provide MFlop/s per timestep using PCL"
67      echo      echo
68      echo "and where STRING follows a whitespace-delimited format"      echo "and where STRING can be a whitespace-delimited list"
69      echo "such as:"      echo "such as:"
70        echo
71      echo "  -t 'exp0 exp2 exp3' "      echo "  -t 'exp0 exp2 exp3' "
72      echo "  -addr='abc@123.com testing@home.org'"      echo "  -addr='abc@123.com testing@home.org'"
73      echo      echo
74        echo "provided that the expression is properly quoted within the current"
75        echo "shell (note the use of single quotes to protect white space)."
76        echo
77      exit 1      exit 1
78  }  }
79    
# Line 45  usage() Line 81  usage()
81  build_mpack()  build_mpack()
82  {  {
83      printf "building the mpack utility...  "      printf "building the mpack utility...  "
84      if test ! -x "$MPACKDIR/mpack" ; then      MPACK="$MPACKDIR/mpack"
85        if test ! -x $MPACK ; then
86          if test ! -d $MPACKDIR ; then          if test ! -d $MPACKDIR ; then
87              echo              echo
88              echo "Error: can't find \"$MPACKDIR\""              echo "Error: can't find \"$MPACKDIR\""
# Line 54  build_mpack() Line 91  build_mpack()
91              echo              echo
92              HAVE_MPACK=f              HAVE_MPACK=f
93          fi          fi
         printf "building mpack...  "  
94          if test "x$CC" = x ; then          if test "x$CC" = x ; then
95              export CC=cc              export CC=cc
96          fi          fi
97            printf "building mpack (using CC=$CC)...  "
98          ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1          ( cd $MPACKDIR && ./configure && $MAKE ) > tr_build_mpack.out 2>&1
99          RETVAL=$?          RETVAL=$?
100          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
# Line 68  build_mpack() Line 105  build_mpack()
105          else          else
106              rm -f tr_build_mpack.out              rm -f tr_build_mpack.out
107              HAVE_MPACK=t              HAVE_MPACK=t
108                echo "done"
109          fi          fi
110      else      else
111          HAVE_MPACK=t          HAVE_MPACK=t
112            echo "already exist"
113      fi      fi
     echo "OK"  
114  }  }
115    
116  testoutput_for_prop()  testoutput_var()
117  {  {
118      # testoutput_for_prop dir s1 label subdir extension      # testoutput_var dir s1 label subdir reference_output
119      #      #
120      #  compares files in $dir/$subdir/output.txt and $dir/results/output.txt      #  compares 1 variable output selected from file $dir/$subdir/$OUTPUTFILE
121      #  using search strings s1 and text label      #     with same output from reference file $dir/$reference_output
122        #  using search strings s1 and text label
123    
124      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
125          echo testoutput_for_prop: grep "$2" $1/$4/output.txt 1>&2          echo testoutput_var: grep "$2" $1/$4/$OUTPUTFILE 1>&2
126      fi      fi
127      if [ -r $1/$4/output.txt ]; then      if [ -r $1/$4/$OUTPUTFILE ]; then
128          grep "$2" $1/$4/output.txt | sed 's/.*=//' | cat -n > tmp1.txt          grep "$2" $1/$4/$OUTPUTFILE | sed 's/.*=//' | cat -n > tmp1.txt
129          lncnt=`wc -l tmp1.txt | awk '{print $1}' `          lncntA=`wc -l tmp1.txt | awk '{print $1}' `
130          if [ $lncnt -lt 3 ]; then          if [ $lncntA -lt 2 ]; then
131              if [ $verbose -gt 0 ]; then              if [ $verbose -gt 0 ]; then
132                  echo Not enough lines of output when searching for "$2" 1>&2                  echo Not enough lines of output when searching for "$2" 1>&2
133              fi              fi
134              return 99              rm -f tmp1.txt ; return 99
135          fi          fi
136      else      else
137          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
138          return 99          return 99
139      fi      fi
140      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
141          echo testoutput_for_prop: grep "$2" $1/results/output.txt$5 1>&2          echo testoutput_var: grep "$2" $1/$5 1>&2
142      fi      fi
143      grep "$2" $1/results/output.txt$5 | sed 's/.*=//' | cat -n > tmp2.txt      grep "$2" $1/$5 | sed 's/.*=//' | cat -n > tmp2.txt
144      lncnt=`wc -l tmp2.txt | awk '{print $1}' `      lncntB=`wc -l tmp2.txt | awk '{print $1}' `
145      if [ $lncnt -lt 3 ]; then      if [ $lncntB -lt 2 ]; then
146          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
147              echo Not enough lines of output when searching for "$2" 1>&2              echo Not enough lines of output when searching for "$2" 1>&2
148          fi          fi
149          return 99          rm -f tmp1.txt tmp2.txt ; return 99
150        fi
151        if [ $lncntA -ne $lncntB ]; then
152            if [ $verbose -gt 0 ]; then
153                echo Not same Nb of lines when searching for "$2" ":" $lncntA $lncntB 1>&2
154            fi
155            rm -f tmp1.txt tmp2.txt ; return 99
156        fi
157        has_nan=`cat tmp1.txt | grep -i nan | wc -l`
158        if [ $has_nan -gt 0  ] ; then
159            echo testoutput_var: $OUTPUTFILE contains $has_nan NaN values  1>&2
160            rm -f tmp1.txt tmp2.txt ; return 99
161        fi
162        has_inf=`cat tmp1.txt | grep -i inf | wc -l`
163        if [ $has_inf -gt 0  ] ; then
164            echo testoutput_var: $OUTPUTFILE contains $has_inf Inf values  1>&2
165            rm -f tmp1.txt tmp2.txt ; return 99
166      fi      fi
167      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
168          echo testoutput_for_prop: join tmp1.txt tmp2.txt 1>&2          echo testoutput_var: join tmp1.txt tmp2.txt 1>&2
169      fi      fi
170      join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt      join tmp1.txt tmp2.txt | awk '{print $1 " " $2 " " $3}' > tmp3.txt
171      if [ $debug -gt 0 ]; then      if [ $debug -gt 0 ]; then
172          echo testoutput_for_prop: compare_lines 1>&2          echo testoutput_var: compare_lines 1>&2
173      fi      fi
174      if [ $verbose -gt 1 ]; then      if [ $verbose -gt 1 ]; then
175          cat tmp3.txt 1>&2          cat tmp3.txt 1>&2
# Line 122  testoutput_for_prop() Line 177  testoutput_for_prop()
177      echo "-1" >> tmp3.txt      echo "-1" >> tmp3.txt
178      # 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
179      cat tmp3.txt | sed -e 's|:||g' > tmp4.txt      cat tmp3.txt | sed -e 's|:||g' > tmp4.txt
180      digits_of_similarity=`./tmp_cmpnum < tmp4.txt`      digits_of_similarity=`./tr_cmpnum < tmp4.txt`
181      if [ $digits_of_similarity -eq 99 ]; then      if [ $digits_of_similarity -eq 99 ]; then
182          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
183              echo testoutput_for_prop: No comparison was available for \"$2\" 1>&2              echo testoutput_var: No comparison was available for \"$3\" 1>&2
184          fi          fi
185          digits_of_similarity=99          digits_of_similarity=99
186      else      else
187          if [ $verbose -gt 0 ]; then          if [ $verbose -gt 0 ]; then
188              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
189          fi          fi
190      fi      fi
191      rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt      rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt
192        
193      return $digits_of_similarity      return $digits_of_similarity
194  }  }
195    
196  dashnum()  testoutput_run()
197  {  {
198      # dashnum n1 n2 n3 ...      # testoutput_run directory subdir reference_output
199      #      #
200      #  print numbers using %3i format or "--" if number = 99      #  test output from 1 run in "directory"
201    # --> same processing for adjoint & forward test
202      for num in $@ ; do          # default list of output variables to be checked:
203          if [ $num = 99 ]; then          #  1rst : main variable used to decide if it pass or FAIL
204              printf ' --'          #  others : number of matching digits to be printed in summary.txt
205          else          listChk=$DEF_CHECK_LIST
206              printf '%3i' $num          #  load experiment-specific list from file "tr_checklist" (if it exist)
207            if test -r $1/$2/tr_checklist ; then listChk=`cat $1/$2/tr_checklist` ; fi
208            sVar=`echo $listChk | awk '{print $1}'`
209            # remove 1rst var and expand the list: + => min max mean s.d
210            listVar=`echo $listChk | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' \
211                                   | sed 's/+//g' | sed "s/^$sVar//"`
212            if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(I)='$listVar'" 1>&2 ; fi
213            # set ref.outp file-name and, if compressed, uncompress it into subdir
214            refoutp=results/$3
215            if test ! -r $1/results/$3 ; then
216              if test -r $1/results/${3}.gz ; then
217                tmpNam1=$3
218                tmpNam2=`echo $tmpNam1 | sed 's/\..*\././'`
219                if test "x$tmpNam1" = "x$tmpNam2" ; then
220                    tmpNam1=`echo $tmpNam2 | sed 's/\./.std./'`
221                fi
222                refoutp=$2/$tmpNam1
223                if [ $debug -gt 0 ]; then
224                    echo "testoutput_run: gunzip 'results/$3.gz' into '$refoutp'" 1>&2
225                fi
226                gzip -cd $1/results/${3}.gz > $1/$refoutp
227              else
228                echo "missing reference output file '$3' (.gz) in '$1/results/'"
229              fi
230          fi          fi
231      done          # check for ptracer output in reference_output file :
232  }          if test $KIND = 0 ; then
233              ptr_mon="trcstat_ptracerXX_min trcstat_ptracerXX_max"
234  testoutput_ad()            ptr_mon="$ptr_mon trcstat_ptracerXX_mean trcstat_ptracerXX_sd"
235  {            for ii in $PTRACERS_NUM ; do
236      grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $5}' > t05.txt              ptrfound=0
237      grep $3 $1/$2/output.txt_adm | awk '{print NR " " $5}' > t15.txt              for jj in $ptr_mon ; do
238      grep $3 $1/results_ad/output.txt_adm | awk '{print NR " " $6}' > t06.txt                  name=`eval "echo $jj | sed -e 's|XX|0"$ii"|g'"`
239      grep $3 $1/$2/output.txt_adm | awk '{print NR " " $6}' > t16.txt                  tst=`grep $name $1/$refoutp | wc -l | awk '{print $1}'`
240      join t05.txt t15.txt > t5.txt                  if test ! "x$tst" = x0 ; then ptrfound=1 ; fi
241      join t06.txt t16.txt > t6.txt              done
242      echo "-1" >> t5.txt              if test $ptrfound = '1' ; then
243      echo "-1" >> t6.txt                  eval "HAVE_PTR0"$ii"=t"
244      digits_5=`./tmp_cmpnum < t5.txt`              else
245      digits_6=`./tmp_cmpnum < t6.txt`                  eval "HAVE_PTR0"$ii"=f"
246      dashnum $digits_5 $digits_6                # remove this ptr from the list of output variable to check
247      rm -f t[01][56].txt t[56].txt                # echo "-- ptr test=" $tst "number of var=" `echo $listVar | awk '{print NF}'` 1>&2
248  }                  listVar=`echo "$listVar" | sed "s/ pt$ii..//g"`
249                fi
250              # eval 'echo "HAVE_PTR0'$ii' = $HAVE_PTR0'$ii'"' 1>&2
251              done
252            fi
253            tst=`echo $sVar $listVar | awk '{ for(i=2;i<=NF;i++){if($i==$1)t+=1}; print t }'`
254            if test $tst != 1 ; then
255              if test $tst = 0 ; then echo "==> WARNING: selected var >$sVar< not found" 1>&2
256                     else echo "==> WARNING: found selected var >$sVar< $tst times" 1>&2 ; fi
257              echo "==> WARNING: in checked list:" $listVar 1>&2
258            #- put it back once:
259              listVar=" $sVar "`echo "$listVar " | sed "s/ $sVar / /g"`
260            fi
261            if [ $debug -gt 0 ]; then echo "testoutput_run: listVar(M)='$listVar'" 1>&2 ; fi
262            echo "listVar='$listVar'" >> $locDIR"/summary.txt"
263            #---
264            allargs=""
265            for xx in $listVar
266            do
267              case $xx in
268               'PS')  if [ $debug -gt 0 ]
269                      then echo testoutput_run: testoutput_var $1 cg2d_init_res 1>&2 ; fi
270                      testoutput_var $1 "cg2d_init_res" "Press. Solver (cg2d)" $2 $refoutp ; yy=$?
271                      if [ $debug -gt 0 ] ; then echo testoutput_run: cg2dres=$yy 1>&2 ; fi ;;
272              'Cost') testoutput_var $1 "ADM  ref_cost_function" "ADM CostFct" $2 $refoutp ; yy=$? ;;
273             'AdGrd') testoutput_var $1 "ADM  adjoint_gradient"  "ADM Ad Grad" $2 $refoutp ; yy=$? ;;
274             'FDGrd') testoutput_var $1 "ADM  finite-diff_grad"  "ADM FD Grad" $2 $refoutp ; yy=$? ;;
275            'tlmCst') testoutput_var $1 "TLM  ref_cost_function" "TLM CostFct" $2 $refoutp ; yy=$? ;;
276            'tlmGrd') testoutput_var $1 "TLM  tangent-lin_grad"  "TLM TL Grad" $2 $refoutp ; yy=$? ;;
277            'fwdGrd') testoutput_var $1 "TLM  finite-diff_grad"  "TLM FD Grad" $2 $refoutp ; yy=$? ;;
278               'Tmn') testoutput_var $1 "dynstat_theta_min"  "Theta minimum"  $2 $refoutp ; yy=$? ;;
279               'Tmx') testoutput_var $1 "dynstat_theta_max"  "Theta maximum"  $2 $refoutp ; yy=$? ;;
280               'Tav') testoutput_var $1 "dynstat_theta_mean" "Theta mean"     $2 $refoutp ; yy=$? ;;
281               'Tsd') testoutput_var $1 "dynstat_theta_sd"   "Theta Std.Dev"  $2 $refoutp ; yy=$? ;;
282               'Smn') testoutput_var $1 "dynstat_salt_min"  "Salt minimum"    $2 $refoutp ; yy=$? ;;
283               'Smx') testoutput_var $1 "dynstat_salt_max"  "Salt maximum"    $2 $refoutp ; yy=$? ;;
284               'Sav') testoutput_var $1 "dynstat_salt_mean" "Salt mean"       $2 $refoutp ; yy=$? ;;
285               'Ssd') testoutput_var $1 "dynstat_salt_sd"   "Salt Std.Dev"    $2 $refoutp ; yy=$? ;;
286               'Umn') testoutput_var $1 "dynstat_uvel_min"  "U minimum"       $2 $refoutp ; yy=$? ;;
287               'Umx') testoutput_var $1 "dynstat_uvel_max"  "U maximum"       $2 $refoutp ; yy=$? ;;
288               'Uav') testoutput_var $1 "dynstat_uvel_mean" "U mean"          $2 $refoutp ; yy=$? ;;
289               'Usd') testoutput_var $1 "dynstat_uvel_sd"   "U Std.Dev"       $2 $refoutp ; yy=$? ;;
290               'Vmn') testoutput_var $1 "dynstat_vvel_min"  "V minimum"       $2 $refoutp ; yy=$? ;;
291               'Vmx') testoutput_var $1 "dynstat_vvel_max"  "V maximum"       $2 $refoutp ; yy=$? ;;
292               'Vav') testoutput_var $1 "dynstat_vvel_mean" "V mean"          $2 $refoutp ; yy=$? ;;
293               'Vsd') testoutput_var $1 "dynstat_vvel_sd"   "V Std.Dev"       $2 $refoutp ; yy=$? ;;
294            'pt1mn'|'pt2mn'|'pt3mn'|'pt4mn'|'pt5mn') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
295               testoutput_var $1 "trcstat_ptracer0"$ii"_min"  "p0"$ii"_min"   $2 $refoutp ; yy=$? ;;
296            'pt1mx'|'pt2mx'|'pt3mx'|'pt4mx'|'pt5mx') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
297               testoutput_var $1 "trcstat_ptracer0"$ii"_max"  "p0"$ii"_max"   $2 $refoutp ; yy=$? ;;
298            'pt1av'|'pt2av'|'pt3av'|'pt4av'|'pt5av') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
299               testoutput_var $1 "trcstat_ptracer0"$ii"_mean" "p0"$ii"_mean" $2 $refoutp ; yy=$? ;;
300            'pt1sd'|'pt2sd'|'pt3sd'|'pt4sd'|'pt5sd') ii=`echo $xx | sed 's/pt//' | sed 's/..$//'`
301               testoutput_var $1 "trcstat_ptracer0"$ii"_sd"   "p0"$ii"_StDv"  $2 $refoutp ; yy=$? ;;
302             'Qntmn') testoutput_var $1 "forcing_qnet_min" "Qnet minimum"  $2 $refoutp ; yy=$? ;;
303             'Qntmx') testoutput_var $1 "forcing_qnet_max" "Qnet maximum"  $2 $refoutp ; yy=$? ;;
304             'Qntav') testoutput_var $1 "forcing_qnet_mean" "Qnet mean"       $2 $refoutp ; yy=$? ;;
305             'Qntsd') testoutput_var $1 "forcing_qnet_sd"  "Qnet Std.Dev"  $2 $refoutp ; yy=$? ;;
306             'aSImn') testoutput_var $1 "seaice_area_min"   "SIce Area min"   $2 $refoutp ; yy=$? ;;
307             'aSImx') testoutput_var $1 "seaice_area_max"   "SIce Area max"   $2 $refoutp ; yy=$? ;;
308             'aSIav') testoutput_var $1 "seaice_area_mean"  "SIce Area mean"  $2 $refoutp ; yy=$? ;;
309             'aSIsd') testoutput_var $1 "seaice_area_sd"    "SIce Area StDv"  $2 $refoutp ; yy=$? ;;
310             'hSImn') testoutput_var $1 "seaice_heff_min"   "SIce Heff min"   $2 $refoutp ; yy=$? ;;
311             'hSImx') testoutput_var $1 "seaice_heff_max"   "SIce Heff max"   $2 $refoutp ; yy=$? ;;
312             'hSIav') testoutput_var $1 "seaice_heff_mean"  "SIce Heff mean"  $2 $refoutp ; yy=$? ;;
313             'hSIsd') testoutput_var $1 "seaice_heff_sd"    "SIce Heff StDv"  $2 $refoutp ; yy=$? ;;
314             'uSImn') testoutput_var $1 "seaice_uice_min"   "SIce Uice min"   $2 $refoutp ; yy=$? ;;
315             'uSImx') testoutput_var $1 "seaice_uice_max"   "SIce Uice max"   $2 $refoutp ; yy=$? ;;
316             'uSIav') testoutput_var $1 "seaice_uice_mean"  "SIce Uice mean"  $2 $refoutp ; yy=$? ;;
317             'uSIsd') testoutput_var $1 "seaice_uice_sd"    "SIce Uice StDv"  $2 $refoutp ; yy=$? ;;
318             'vSImn') testoutput_var $1 "seaice_vice_min"   "SIce Vice min"   $2 $refoutp ; yy=$? ;;
319             'vSImx') testoutput_var $1 "seaice_vice_max"   "SIce Vice max"   $2 $refoutp ; yy=$? ;;
320             'vSIav') testoutput_var $1 "seaice_vice_mean"  "SIce Vice mean"  $2 $refoutp ; yy=$? ;;
321             'vSIsd') testoutput_var $1 "seaice_vice_sd"    "SIce Vice StDv"  $2 $refoutp ; yy=$? ;;
322            'AthSiG') testoutput_var $1 "thSI_Ice_Area_G" "thSIc Area Global" $2 $refoutp ; yy=$? ;;
323            'AthSiS') testoutput_var $1 "thSI_Ice_Area_S" "thSIc Area South"  $2 $refoutp ; yy=$? ;;
324            'AthSiN') testoutput_var $1 "thSI_Ice_Area_N" "thSIc Area North"  $2 $refoutp ; yy=$? ;;
325            'HthSiG') testoutput_var $1 "thSI_IceH_ave_G" "thSIc H Global"    $2 $refoutp ; yy=$? ;;
326            'HthSiS') testoutput_var $1 "thSI_IceH_ave_S" "thSIc H South"     $2 $refoutp ; yy=$? ;;
327            'HthSiN') testoutput_var $1 "thSI_IceH_ave_N" "thSIc H North"     $2 $refoutp ; yy=$? ;;
328                  *) yy=99; echo "WARNING: asking for var=$xx : not recognized !" 1>&2 ;;
329              esac
330              if test $xx = $sVar
331              then allargs="$allargs > $yy <"
332              else allargs="$allargs $yy"
333              fi
334            done
335    
336  testoutput()          nbVar=`echo $listVar | awk '{print NF}'`
337  {          if [ $nbVar -lt $LEN_CHECK_LIST ] ; then
338      # testoutput directory subdir extension          #-- fill line (up to standard length) with dot:
339      #            adNul=`expr $LEN_CHECK_LIST - $nbVar | awk '{for(i=1;i<=$1;i++){print "."}}'`
340      #  test output in "directory"            echo $allargs $adNul
341      if test "x$ADM" = x ; then          else
342          if [ $debug -gt 0 ]; then            echo $allargs
343              echo testoutput: testoutput_for_prop $1 cg2d_init_res 1>&2          fi
344          fi  # <-- same processing for adjoint & forward test
         testoutput_for_prop $1 "cg2d_init_res" "cg2d init. residual" $2 $3; cg2dres=$?  
         if [ $debug -gt 0 ]; then  
             echo testoutput: cg2dres=$cg2dres 1>&2  
         fi  
         testoutput_for_prop $1 "dynstat_theta_min" "theta minimum" $2 $3; tmin=$?  
         testoutput_for_prop $1 "dynstat_theta_max" "theta maximum" $2 $3; tmax=$?  
         testoutput_for_prop $1 "dynstat_theta_mean" "theta mean" $2 $3; tmean=$?  
         testoutput_for_prop $1 "dynstat_theta_sd" "theta s.d." $2 $3; tsd=$?  
         testoutput_for_prop $1 "dynstat_salt_min" "salt minimum" $2 $3; smin=$?  
         testoutput_for_prop $1 "dynstat_salt_max" "salt maximum" $2 $3; smax=$?  
         testoutput_for_prop $1 "dynstat_salt_mean" "salt mean" $2 $3; smean=$?  
         testoutput_for_prop $1 "dynstat_salt_sd" "salt s.d." $2 $3; ssd=$?  
         testoutput_for_prop $1 "dynstat_uvel_min" "U minimum" $2 $3; umin=$?  
         testoutput_for_prop $1 "dynstat_uvel_max" "U maximum" $2 $3; umax=$?  
         testoutput_for_prop $1 "dynstat_uvel_mean" "U mean" $2 $3; umean=$?  
         testoutput_for_prop $1 "dynstat_uvel_sd" "U s.d." $2 $3; usd=$?  
         testoutput_for_prop $1 "dynstat_vvel_min" "V minimum" $2 $3; vmin=$?  
         testoutput_for_prop $1 "dynstat_vvel_max" "V maximum" $2 $3; vmax=$?  
         testoutput_for_prop $1 "dynstat_vvel_mean" "V mean" $2 $3; vmean=$?  
         testoutput_for_prop $1 "dynstat_vvel_sd" "V s.d." $2 $3; vsd=$?  
         dashnum $cg2dres $tmin $tmax $tmean $tsd $smin $smax $smean $ssd \  
             $umin $umax $umean $usd $vmin $vmax $vmean $vsd  
     else  
         testoutput_ad $1 $2 "precision_grdchk_result"  
     fi  
345  }  }
346    
347  genmakemodel()  genmakemodel()
# Line 219  genmakemodel() Line 358  genmakemodel()
358          (          (
359              cd $1;              cd $1;
360              command="$GENMAKE2  -ds -m $MAKE"              command="$GENMAKE2  -ds -m $MAKE"
361              if test "x$ADM" = x ; then              if test "x$MKDEPEND" != x ; then
362                  command="$command --mods=../code"                  command="$command -makedepend=$MKDEPEND"
363              else              fi
364                if test $KIND = 1 -o $KIND = 2 ; then
365                  command="$command --mods=../code_ad"                  command="$command --mods=../code_ad"
366                  command="$command -adof=../../../tools/adjoint_options/adjoint_staf"              elif test $KIND = 4 ; then
367                    command="$command -adof ../../../tools/adjoint_options/adjoint_oad -mods '../code_oad ../../OpenAD/code_oad_all'"
368                else
369                    command="$command -mods=../code"
370              fi              fi
371              if test "x$OPTFILE" != xNONE ; then              if test "x$OPTFILE" != xNONE ; then
372                  command="$command --optfile=$OPTFILE"                  command="$command -optfile=$OPTFILE"
373              fi              fi
374              if test "x$IEEE" != x ; then              if test $OptLev = 1 ; then
375                  command="$command -ieee"                  command="$command -ieee"
376              fi              fi
377              printf 'genmake ... ' 1>&2              if test $OptLev = 0 ; then
378              $command > make.log 2>&1                  command="$command -devel"
379                fi
380                if test "x$GSL" = xt ; then
381                    command="$command -gsl"
382                fi
383                if test "x$MPI" != x0 ; then
384                    command="$command -mpi"
385                fi
386                if test "x$MULTI_THREAD" = xt ; then
387                #- run multi-threaded using OpenMP:
388                    command="$command -omp"
389                fi
390                if test "x$USE_R4" = xt ; then
391                    command="$command -use_r4"
392                fi
393                if test "x$EXTRFLG" != x ; then
394                    command="$command -extra_flag $EXTRFLG"
395                fi
396                if test "x$TS" = xt ; then
397                    command="$command -ts"
398                fi
399                if test "x$PAPIS" = xt ; then
400                    command="$command -papis"
401                else
402                if test "x$PCLS" = xt ; then
403                    command="$command -pcls"
404                fi
405                fi
406                printf 'genmake ... '
407                eval $command > genmake.tr_log 2>&1
408              RETVAL=$?              RETVAL=$?
409              cp Makefile $CDIR              #  Reduce the size of the testing emails!
410                head -100 Makefile > $CDIR/Makefile_head
411              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
412                  tail make.log                  tail genmake.tr_log
413                  echo "genmakemodel: genmake failed" 1>&2                  echo "genmakemodel: genmake failed"
414                  cp genmake_* make.log $CDIR                  cp genmake.log genmake_* genmake.tr_log $CDIR
415                  return 1                  return 1
416              else              else
417                  echo "successful" 1>&2                  echo "successful"
418              fi              fi
419          )          )
420      fi      fi
# Line 250  genmakemodel() Line 423  genmakemodel()
423  makeclean()  makeclean()
424  {  {
425      # makeclean directory      # makeclean directory
426        if test "x$NODEPEND" = xf ; then rm -f $1/make.tr_log ; fi
427      if test "x$NOCLEAN" = xt ; then      if test "x$NOCLEAN" = xt ; then
428          echo "make CLEAN skipped!"          echo "make Clean skipped!"
429      else      else
430          (          (
431              cd $1;              cd $1;
432              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  
433              if test -r Makefile ; then              if test -r Makefile ; then
434                  $MAKE CLEAN >> make.log 2>&1                  printf 'clean build-dir: make Clean ... '
435                    $MAKE Clean >> make.tr_log 2>&1
436                  RETVAL=$?                  RETVAL=$?
437                  if test "x$RETVAL" != x0 ; then                  if test "x$RETVAL" != x0 ; then
438                      tail make.log                      tail make.tr_log
439                      echo "makeclean: \"make CLEAN\" failed" 1>&2                      echo "makeclean: \"make Clean\" failed"
440                      cp make.log $CDIR"/make.log"                      cp make.tr_log genmake.log genmake.tr_log $CDIR
441                      return 1                      return 1
442                  fi                  fi
443                    echo successful
444                else
445                    echo ''
446              fi              fi
447              echo successful 1>&2              exit 0
448            )
449        fi
450    }
451    
452    run_clean()
453    {
454        # run_clean directory
455        if test "x$NOCLEAN" = xt ; then
456            echo "run_clean skipped!"
457        else
458            (
459                cd $1;
460                printf 'clean run-dir ... '
461                # part of what is done after "make clean" when doing "make CLEAN"
462                find . -name "*.meta" -exec rm {} \;
463                find . -name "*.data" -exec rm {} \;
464                find . -name "fort.*" -exec rm {} \;
465                find . -type l -exec rm {} \;
466                #- should remove executable only if sym-link (alredy done above)
467                rm -f $RUNLOG *.txt STD* w2_tile_topology.????.log *diagnostics.log datetime
468                rm -rf mnc_test_*
469                rm -f *_MIT_CE_000.opt0000 costfunction*0000
470                echo successful
471              exit 0              exit 0
472          )          )
473      fi      fi
# Line 283  makedependmodel() Line 481  makedependmodel()
481      else      else
482          (          (
483              cd $1;              cd $1;
484              printf 'make depend ... ' 1>&2              printf 'make depend ... '
485              $MAKE depend >> make.log 2>&1              $MAKE depend >> make.tr_log 2>&1
486              RETVAL=$?              RETVAL=$?
487              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
488                  tail make.log                  tail make.tr_log
489                  echo "makedependmodel: make depend failed" 1>&2                  echo "makedependmodel: make depend failed"
490                  cp make.log $CDIR"/make.log"                  cp make.tr_log genmake.log genmake.tr_log $CDIR
491                  return 1                  return 1
492              else              else
493                  echo successful 1>&2                  echo successful
494              fi              fi
495          )          )
496      fi      fi
# Line 302  makemodel() Line 500  makemodel()
500  {  {
501      # makemodel directory      # makemodel directory
502      (      (
503        mk_fail=0
504        if test "x$NOMAKE" = xt ; then
505            cd $1;
506            if test -x $EXECUTABLE ; then
507                echo "make skipped!"
508            else
509                echo "no executable!"
510                mk_fail=3
511            fi
512        else
513          cd $1;          cd $1;
514          if test -r Makefile ; then          if test -r Makefile ; then
515              printf 'make ... ' 1>&2              printf 'make ... '
516              if test "x$ADM" = x ; then              if test "x$REPLMAKE" = x ; then
517                  $MAKE >> make.log 2>&1                  $MAKE $TARG >> make.tr_log 2>&1
518              else              else
519                  $MAKE adall >> make.log 2>&1                  $REPLMAKE $TARG >> make.tr_log 2>&1
520              fi              fi
521              RETVAL=$?              RETVAL=$?
522              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
523                  tail make.log                  tail make.tr_log
524                  echo failed 1>&2                  echo failed
525                  cp make.log $CDIR"/make.log"                  cp genmake.log genmake.tr_log $CDIR
526                  return 1                  tail -$NBLINES_MKLOG make.tr_log > $CDIR"/make.tr_log_tail"
527                    rm -f $EXECUTABLE
528                    mk_fail=1
529              else              else
530                  echo successful 1>&2                  echo successful
531              fi              fi
532            else
533                echo "no Makefile !"
534                mk_fail=2
535          fi          fi
536        fi
537        if test $KIND = 2 -a -f taf_ad.log ; then
538                head -1 taf_ad.log >> $CDIR"/summary.txt"
539                nerr=`grep -c 'TAF *.* ERROR ' taf_ad.log`
540                nwar=`grep -c 'TAF RECOMPUTATION *.* WARNING ' taf_ad.log`
541                echo " TAF reports $nerr Errors and $nwar Recomputation Warnings" \
542                                    >> $CDIR"/summary.txt"
543        fi
544        if test $mk_fail != 0 ; then return $mk_fail ; fi
545      )      )
546  }  }
547    
548    mk_mpi_size()
549    {
550        # mk_mpi_size input_file output_file proc_Nb threads_Nb_X threads_Nb_Y
551        #
552        #  make new SIZE.h (=output_file) from SIZE.h_mpi (=input_file)
553        #     for an MPI build with no more than proc_Nb processors ;
554        #  ensure that enough tiles per proc (nSx,nSy) remain for the given
555        #     number of threads (nTx,nTy) ;
556        #  return the effective number of processors.
557    
558        inp=$1
559        out=$2
560        np=$3
561        tx=$4
562        ty=$5
563        tmp=TTT.$$
564    
565        # dirX : select with direction to favor in MPI process repartition
566        #   dirX=1 : prefer to put more proc in X direction
567        #   dirX=0 : prefer to put more proc in Y direction
568        dirX=0
569    
570        px=`grep "^     & *nPx *=" $inp | sed "s/^     & *nPx *= *//" | sed 's/, *$//'`
571        py=`grep "^     & *nPy *=" $inp | sed "s/^     & *nPy *= *//" | sed 's/, *$//'`
572        sx=`grep "^     & *nSx *=" $inp | sed "s/^     & *nSx *= *//" | sed 's/, *$//'`
573        sy=`grep "^     & *nSy *=" $inp | sed "s/^     & *nSy *= *//" | sed 's/, *$//'`
574    
575        #- for each direction, assume # of threads is a multiple of total number of tiles
576        nx=$px
577        if [ `expr $sx % $tx` -ne 0 -a `expr $sx \* $px % $tx` -eq 0 ] ; then
578            nx=`expr $sx \* $px / $tx`
579            if [ $verbose -gt 1 ]; then
580                echo " change px from $px to $nx to accommodate $tx threads"
581            fi
582        fi
583        ny=$py
584        if [ `expr $sy % $ty` -ne 0 -a `expr $sy \* $py % $ty` -eq 0 ] ; then
585            ny=`expr $sy \* $py / $ty`
586            if [ $verbose -gt 1 ]; then
587                echo " change py from $py to $ny to accommodate $ty threads"
588            fi
589        fi
590        #- find the largest divisor of input_file proc Nb, but not larger than $np
591        pp=0
592        i=1
593        while [ $i -le $nx ] ; do
594          if [ `expr $nx % $i` -eq 0 ] ; then
595            j=1
596            while [ $j -le $ny ] ; do
597              if [ `expr $ny % $j` -eq 0 ] ; then
598                ij=`expr $i \* $j`
599                if [ $ij -gt $pp ] ; then
600                    flag=1
601                elif [ $ij -eq $pp ] ; then
602                    flag=$dirX
603                else
604                    flag=0
605                fi
606                if test $flag = 1 ; then
607                  if [ $ij -le $np ] ; then
608                    ix=$i ; jy=$j ; pp=$ij
609                    #echo "  ix,jy= $ix,$jy"
610                  fi
611                fi
612              fi
613              j=`expr $j + 1`
614            done
615          fi
616          i=`expr $i + 1`
617        done
618    
619        #- create new SIZE.h type file:
620        sx=`expr $sx \* $px / $ix`
621        sy=`expr $sy \* $py / $jy`
622        if [ $verbose -gt 1 ]; then
623            echo " px,py,np= $px,$py,$np : New MPI size: px,py= $ix,$jy : sx,sy= $sx,$sy"
624        fi
625        sed "/^     \& *nPx *=/s/[0-9]*,/$ix,/" $inp > $tmp
626        sed "/^     \& *nPy *=/s/[0-9]*,/$jy,/" $tmp > $out
627        sed "/^     \& *nSx *=/s/[0-9]*,/$sx,/" $out > $tmp
628        sed "/^     \& *nSy *=/s/[0-9]*,/$sy,/" $tmp > $out
629        rm -f $tmp
630        return $pp
631    }
632    
633  symlink_mpifiles()  symlink_mpifiles()
634  {  {
635      # Put special links so that MPI specific files are used      # Put special links so that MPI specific files are used
# Line 331  symlink_mpifiles() Line 638  symlink_mpifiles()
638    
639      dir=$1      dir=$1
640      code_dir=$2      code_dir=$2
641      BUILD_DIR=$dir/$3      build_dir=$dir/$3
     CODE_DIR=$dir/$code_dir  
642    
643      # These are files that should replace their counter-part when using -mpi      # These are files that should replace their counter-part when using -mpi
644      MPI_FILES=`(cd $CODE_DIR; find . -name "*_mpi")`      MPI_FILES=`(cd $dir/$code_dir; find . -name "*_mpi" -print)`
645    
646      #  Is this an MPI run?      for ii in $MPI_FILES ; do
647      if test "x$MPI" = xt ; then          i=`echo $ii | sed 's:^\./::'`
648          # YES: We symbolically link these files to the build          name=`echo $i | sed 's:_mpi::'`
649          # dir so long as there is no real file in place          file="../$code_dir/$i"
650          for ii in $MPI_FILES ; do          if test $name = 'SIZE.h' ; then file="SIZE.h.mpi" ; fi
651              i=`echo $ii | sed 's:^\./::'`  
652              name=`echo $i | sed 's:_mpi::' `          #  Is this an MPI run?
653              cmp $CODE_DIR/$i $BUILD_DIR/$name > /dev/null 2>&1          if test "x$MPI" = x0 ; then
654              RETVAL=$?              # NO: We undo any _mpi symbolically linked files
655              if test "x$RETVAL" != x0 ; then              if test -L $build_dir/$name ; then
656                  if ! test -f $BUILD_DIR/$i ; then                  ( cd $build_dir ; cmp $name $file > /dev/null 2>&1 )
657                  #echo Linking $name to $i                  RETVAL=$?
658                      (cd $BUILD_DIR; ln -sf ../$code_dir/$i $name)                  if test "x$RETVAL" = x0 ; then
659                        if [ $verbose -gt 1 ]; then
660                            echo "  Un-linking $name from ../$code_dir" ; fi
661                        rm -f $build_dir/$name
662                  fi                  fi
663              fi              fi
664          done          else
665      else              # YES: We symbolically link these files to the build
666      # NO: We undo any _mpi symbolically linked files              # dir so long as there is no real file in place
667          for ii in $MPI_FILES ; do              ( cd $build_dir ; cmp $name $file > /dev/null 2>&1 )
668              i=`echo $ii | sed 's:^\./::'`              RETVAL=$?
669              name=`echo $i | sed 's:_mpi::' `              if [ $verbose -gt 1 ]; then echo "  cmp $name $file returns: $RETVAL" ; fi
670              if test -L $BUILD_DIR/$name ; then              if test "x$RETVAL" != x0 ; then
671                  linktarg=`(cd $BUILD_DIR; readlink $name)`                  if test -h $build_dir/$name ; then rm -f $build_dir/$name ; fi
672                  if test $linktarg = "../$code_dir/$name"_mpi ; then                  if test ! -r $build_dir/$name ; then
673                  #echo Un-linking $name from $linktarg                      if [ $verbose -gt 1 ]; then echo "  Linking $name to $file" ; fi
674                      rm -f $BUILD_DIR/$name                      (cd $build_dir; ln -sf $file $name)
675                  fi                  fi
676              fi              fi
677          done          fi
678      fi      done
       
679  }  }
680    
681  linkdata()  linkdata()
682  {  {
683      # linkdata flag      # linkdata run_dir input_dir_1 input_dir_2 ...
684      #      #
685      # symbolically link data files to run directory      # symbolically link data files to run directory
686      if test "x$1" = x1 ; then      if test -d $1 ; then
687          (          (
688              cd $2              cd $1 ; shift
689              if test "x$ADM" = x ; then              echo 'linkdata from dirs:' $*
690                  files=`( cd ../input ; ls -1 | grep -v CVS )`              inpMPI=`(cd ../$1 ; find . -name "*.mpi" -print | sed 's:^\./::')`
691                  for i in $files ; do              for xx in $inpMPI ; do
692                      if test ! -d "../input/"$i ; then                if test -r "../"$1"/"$xx ; then
693                          ln -sf "../input/"$i $i                  # found 1 _mpi sfx file in 1rst input dir and it is readable
694                    yy=`echo $xx | sed 's:\.mpi$::'`
695                    if test "x$MPI" = "x0" ; then
696                        # not mpi test: remove symbolic link
697                        if test -h $yy ; then rm -f $yy ; fi
698                    else
699                        # mpi test: remove symbolic link & link .mpi sfx file
700                        if test -h $yy ; then rm -f $yy ; fi
701                        if test ! -r $yy ; then
702                            ln -sf "../"$1"/"$xx $yy ;
703                            printf " $xx" 1>&2
704                      fi                      fi
705                  done                  fi
706              else                fi
707                  files=`( cd ../input ; ls -1 *.bin | grep -v CVS )`              done
708                  for i in $files ; do              if test -r "../"$1"/eedata.mth" ; then
709                      if test ! -d "../input/"$i ; then              # found eedata.mth in 1rst input dir and it is readable
710                          ln -sf "../input/"$i $i                  if test "x$MULTI_THREAD" = "xt" ; then
711                      fi                  # multi-threaded test: remove symbolic link & link eedata.mth
712                  done                      if test -h eedata ; then rm -f eedata ; fi
713                  files=`( cd ../input_ad ; ls -1 | grep -v CVS )`                      if test ! -r eedata ; then
714                  for i in $files ; do                          ln -sf "../"$1"/eedata.mth" eedata ;
715                      if test ! -d "../input_ad/"$i ; then                          printf ' eedata.mth' 1>&2
                         ln -sf "../input_ad/"$i $i  
716                      fi                      fi
717                  done                  else
718                    # not multi-threaded test: remove eedata symbolic link
719                        if test -h eedata ; then rm -f eedata ; fi
720                    fi
721              fi              fi
722                prevDir='NONE'
723                for ldir in $* ; do
724                    if test -d "../"$ldir -a $ldir != $prevDir ; then
725                        printf " ldir=${ldir}:" 1>&2
726                        files=`( cd "../"$ldir ; ls -1 | grep -v CVS )`
727                        for i in $files ; do
728                            if test ! -d "../"$ldir/$i ; then
729                                if test ! -r $i  ; then
730                                    printf ' '$i 1>&2
731                                    ln -sf "../"$ldir"/"$i $i
732                                fi
733                            fi
734                        done
735                        printf ' ;' 1>&2
736                        if test -x "../"$ldir"/"prepare_run ; then
737                            "../"$ldir"/"prepare_run 1>&2
738                        else
739                            echo '' 1>&2
740                        fi
741                    fi
742                    prevDir=$ldir
743                done
744          )          )
745      fi      fi
746  }  }
# Line 407  runmodel() Line 749  runmodel()
749  {  {
750      # runmodel directory      # runmodel directory
751      #      #
752      #  runs "$COMMAND in "directory"      #  runs $COMMAND in "directory"
753      #  (where "$COMMAND" is relative to "directory")      #  (where "$COMMAND" is relative to "directory")
754      (      (
755          cd $1          cd $1
756          printf 'runmodel ... ' 1>&2          printf 'runmodel in %s ... ' $1
757          # make output.txt          if test "x$MPI" != x0 ; then
758          $COMMAND >> run.log 2>&1              #- adjust the MPI run command with the right number of Procs
759          RETVAL=$?              #echo '' ; echo "  COMMAND='$COMMAND'"
760          if test "x$RETVAL" = x0 ; then              COMMAND=`echo $COMMAND | sed "s/ TR_NPROC / $LOC_NPROC /"`
761              echo successful 1>&2              if test "x$MPI_MFILE" != x ; then
762              if test "x$ADM" = x ; then                COMMAND=`echo $COMMAND | sed "s/ TR_MFILE / ..\/..\/$LOC_MFILE /"`
                 cp output.txt $CDIR"/output.txt"  
             else  
                 cp output.txt_adm $CDIR"/output.txt_adm"  
763              fi              fi
764                #echo "  COMMAND='$COMMAND'"
765            fi
766            if test -L $EXECUTABLE ; then
767              if test -x "../"$builddir"/"$EXECUTABLE ; then
768                cmp $EXECUTABLE "../"$builddir"/"$EXECUTABLE > /dev/null 2>&1
769                outD=$? ; if test "x$outD" != x0 ; then rm -f $EXECUTABLE ; fi
770              else rm -f $EXECUTABLE
771              fi
772            fi
773            if test ! -x $EXECUTABLE -a -x "../"$builddir"/"$EXECUTABLE ; then
774                echo " link" $EXECUTABLE "from dir ../"$builddir > run.log_tmp
775                ln -sf "../"$builddir"/"$EXECUTABLE .
776            fi
777            if test ! -x $EXECUTABLE ; then
778                rm -f $RUNLOG ; touch $RUNLOG
779                if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
780                echo " no executable:" $EXECUTABLE >> $RUNLOG
781                RETVAL=8
782                ENDVAL=-1
783            else
784              if test ! -f $OUTPUTFILE -o $OUTPUTFILE -ot $EXECUTABLE ; then
785                # output do not exist or is older than executable:
786                rm -f $OUTPUTFILE $RUNLOG ; touch $RUNLOG
787                if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
788                ( eval $COMMAND ) >> $RUNLOG 2>&1
789                RETVAL=$?
790                ENDVAL=`tail $OUTPUTFILE | grep -c 'PROGRAM MAIN: Execution ended Normally'`
791                if [ $POSTCLEAN -eq 1 -a $ENDVAL -gt 0 ] ; then
792                    find . -name "*.meta" -exec rm {} \;
793                    find . -name "*.data" -exec rm {} \;
794                    rm -rf mnc_test_*
795                fi
796              else
797                RETVAL=0
798                ENDVAL=`tail $OUTPUTFILE | grep -c 'PROGRAM MAIN: Execution ended Normally'`
799                touch $RUNLOG
800                if test -f run.log_tmp ; then cat run.log_tmp >> $RUNLOG ; fi
801                echo "---------->> $OUTPUTFILE is up to date " >> $RUNLOG 2>&1
802              fi
803            fi
804            rm -f run.log_tmp
805            #- in all cases where OutputFile exists, report SIZE (and AD time)
806            if test -f $OUTPUTFILE ; then
807              grep '(PID\.TID 0000\.0001)      n.. =' $OUTPUTFILE \
808                    | sed 's/(PID.TID 0000.0001)     //' >> $CDIR"/summary.txt"
809              if test $KIND = 2 ; then
810                grep -A3 'Seconds in section "ALL' $OUTPUTFILE >> $CDIR"/summary.txt"
811              fi
812            fi
813            if test -s STDERR.0000 ; then cp STDERR.0000 $CDIR"/STDERR.0000" ; fi
814            if [ $RETVAL -eq 0 -a $ENDVAL -gt 0 ] ; then
815                echo successful
816                printf '=> output from running in %s :\n' $1 1>&2
817                tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
818                return 0
819            elif [ $RETVAL -ne 0 -a $ENDVAL -gt 0 ] ; then
820                #-- for some weird cases (run is finihed but with error code)
821                echo 'finished with error (run:' $RETVAL ' end:' $ENDVAL ')'
822                printf '=> output from running in %s :\n' $1 1>&2
823                tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
824              return 0              return 0
825          else          else
826              tail run.log              echo 'failed (run:' $RETVAL ' end:' $ENDVAL ')'
827              echo failed 1>&2              printf '=> output from running in %s :\n' $1 1>&2
828              cp run.log $CDIR"/run.log"              tail $RUNLOG | sed 's/^.*/> &/g' 1>&2
829                cp $RUNLOG $CDIR"/"$RUNLOG
830              return 1              return 1
831          fi          fi
832      )      )
# Line 436  createcodelet() Line 836  createcodelet()
836  {  {
837      # create codelet for comparing model output      # create codelet for comparing model output
838    
839      printf "creating the comparison code...  "      printf "creating the comparison code (using CC=$CC)...  "
840      cat > tmp_cmpnum.c <<EOF      cat > tr_cmpnum.c <<EOF
841  #include <stdio.h>  #include <stdio.h>
842  #include <math.h>  #include <math.h>
843  int main( int argc, char** argv )  {  int main( int argc, char** argv )  {
844    int linnum,best,lncnt;    int linnum,cmplin,best,lncnt;
845    double a,b,diff;    double a,b,abave,relerr;
846    best = -16;    best = -22;
847    lncnt = 0;    lncnt = 0;
848    while( 1 & (lncnt+=1) < 999 )  {    while( 1 & ( (lncnt+=1) < 999 ) )  {
849      scanf("%d", &linnum);      scanf("%d", &linnum);
850      if (linnum == -1)  break;      if (linnum == -1)  break;
851      scanf("%lf", &a);  scanf("%lf", &b);      scanf("%lf", &a);  scanf("%lf", &b);
852      diff = 0.5*(fabs(a)+fabs(b));      abave = 0.5*(fabs(a)+fabs(b));
853      if (diff > 1.e-12) {      if ( abave == abave ) {
854        diff=fabs(a-b)/diff;        if (abave > 0.0) {
855        if (diff > 0.0) {          relerr=fabs(a-b)/abave;
856          linnum = (int)log10(diff);          if (relerr > 0.0) { cmplin = (int)rint(log10(relerr)); }
857          best = (best > linnum) ? best : linnum;          else { cmplin = -16 ; }
858        }          best = (best > cmplin) ? best : cmplin; }
859        else {        else { cmplin = -22 ; }
860          if (best == -16 && diff != 0)  best = -22;     /* printf("%d ; %lf ; %lf\n",cmplin,a,b); */
861        }        }
862      }     else {
863       /* printf("%lf ; %lf ; %lf\n",abave,a,b); */
864          break; }
865    }    }
866    if (lncnt == 999) best=-29;    if (lncnt == 999) best=-29;
867      if (linnum != -1) best=-99;
868    printf("%d\n", -best);    printf("%d\n", -best);
869    return 0;    return 0;
870  }  }
871  EOF  EOF
872      cc -o tmp_cmpnum tmp_cmpnum.c -lm      $CC -o tr_cmpnum tr_cmpnum.c -lm
873    
874      if [ -x ./tmp_cmpnum ]; then      if [ -x ./tr_cmpnum ]; then
875          echo "OK"          echo "OK"
876          return 0          return 0
877      else      else
878          echo          echo
879          echo "ERROR: failed to compile comparison code"          echo "ERROR: failed to compile comparison code -- please specify"
880            echo "  a C compiler using the CC environment variable."
881          exit 1          exit 1
882      fi      fi
883  }  }
# Line 485  formatresults() Line 889  formatresults()
889      nm=$1      nm=$1
890      printf '%s %s %s %s' $2 $3 $4 $5      printf '%s %s %s %s' $2 $3 $4 $5
891      shift; shift; shift; shift; shift;      shift; shift; shift; shift; shift;
892      printf '%3s' $@      listPrt=$@
893            listRes=`echo $listPrt | sed 's/>//' | sed 's/<//'`
894      if [ $1 = '--' ]; then      xx=`echo $listPrt | sed 's/.*>//' | sed 's/<.*//' | awk '{print $1}'`
895        printf '%3s' $listPrt
896    #   line below does not work on hp-ux_ia64 : do those substitutions later on
897    #   printf '%3s' $listPrt | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</'
898    
899        if [ $xx = '..' ]; then
900            printf ' N/O '
901        elif [ $xx = '--' ]; then
902            printf ' N/O '
903        elif [ $xx = 99 ]; then
904          printf ' N/O '          printf ' N/O '
905      else      else
906          if [ $1 -gt 12 ]; then          if [ $xx -ge $MATCH_CRIT ]; then
907              printf ' pass'              printf ' pass'
908          else          else
909              printf ' FAIL'              printf ' FAIL'
# Line 498  formatresults() Line 911  formatresults()
911      fi      fi
912      printf '  %s' $nm      printf '  %s' $nm
913      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.  
914    
 Normal usage:  
  $0 *       Configure, compile, run and analyze in all experiment directories  
 EOF  
915  }  }
916    
917  scandirs()  scandirs()
918  {  {
919      if [ $# -eq 0 ]; then      if [ $# -eq 1 ]; then
920          for arg in * ; do          for arg in * ; do
921              test -d $arg/input && echo $arg             #test -f $arg/$1 && echo $arg
922          done              test -f $arg/$1 -o -f $arg/$1.gz && echo $arg
923            done
924      else      else
925          echo $*          echo $*
926      fi      fi
927  }  }
928    
929    
930    check_eedata()
931    {
932        # check_eedata eedata size.h
933        if [ $# -eq 2 ] ; then
934         if test -f $1 -a -f $2 ; then
935          nx=`grep "^ *nTx *=" $1 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
936          sx=`grep "^     & *nSx *=" $2 | sed "s/^     & *nSx *=//" | sed 's/, *$//'`
937          if test "x$nx" = x ; then
938            rx=10
939          else
940            rx=`expr $sx % $nx`
941          fi
942          ny=`grep "^ *nTy *=" $1 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
943          sy=`grep "^     & *nSy *=" $2 | sed "s/^     & *nSy *=//" | sed 's/, *$//'`
944          if test "x$ny" = x ; then
945            ry=20
946          else
947            ry=`expr $sy % $ny`
948          fi
949          echo `expr $rx + $ry`
950         else
951          echo '-1'
952         fi
953        elif [ $# -eq 1 ] ; then
954         if test -f $1 ; then
955          nx=`grep "^ *nTx *=" $1 | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
956          if test "x$nx" = x ; then nx=1 ; fi
957          ny=`grep "^ *nTy *=" $1 | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
958          if test "x$ny" = x ; then ny=1 ; fi
959         #echo $nx $ny
960          echo $nx
961         else
962          echo '-1'
963         fi
964        else
965          echo '-2'
966        fi
967    
968    }
969    
970  ###############################################################################  ###############################################################################
971    
972    
973  #  Default properties  #  Default properties
974  debug=0  debug=0
975  verbose=1  verbose=1
976  clean=0  NBLINES_MKLOG=16000
 expts=''  
 # ieee=1  
   
 IEEE=  
 if test "x$MITGCM_IEEE" != x ; then  
     IEEE=$MITGCM_IEEE  
 fi  
977    
978    OptLev=1
979    GSL=f
980    
981  CLEANUP=f  CLEANUP=f
982    NORUN=f
983  QUICK=f  QUICK=f
984    NOMAKE=f
985  NOGENMAKE=f  NOGENMAKE=f
986  NOCLEAN=f  NOCLEAN=f
987  NODEPEND=f  NODEPEND=f
988    POSTCLEAN=0
989    
990  BASH=  BASH=
991  OPTFILE=NONE  OPTFILE=NONE
992  ADDRESSES=  ADDRESSES=
993  TESTDIRS=  TESTDIRS=
994    SKIPDIRS=
995  MPACKDIR="../tools/mpack-1.6"  MPACKDIR="../tools/mpack-1.6"
996  HAVE_MPACK=  HAVE_MPACK=
997  MPACK="$MPACKDIR/mpack"  MPACK=
998  COMMAND=  COMMAND=
999  MAKE=make  MKDEPEND=
1000  MPI=f  if test "x$MAKE" = x ; then
1001        MAKE=make
1002    fi
1003    REPLMAKE=
1004    if test "x$CC" = x ; then
1005        CC=cc
1006    fi
1007    JOBS=
1008    TARG=
1009    MPI=0
1010    MPI_MFILE=
1011    MULTI_THREAD=f
1012    OUTDIR=
1013    DELDIR=
1014    USE_R4=
1015    EXTRFLG=
1016    
1017    #- type of testing (KIND):
1018    #   KIND=0 : forward (= default) ;  KIND=1 : Tangent Linear with TAF ;
1019    #   KIND=2 : Adjoint with TAF ;     KIND=4 : Adjoint with OpenAD
1020    KIND=0
1021    
1022  ADM=  # list of pTracers to check for monitor output
1023    PTRACERS_NUM="1 2 3 4 5"
1024    
1025    MATCH_CRIT=10
1026    
1027  printf "parsing options...  "  printf "parsing options...  "
1028    
# Line 580  for ac_option ; do Line 1037  for ac_option ; do
1037      fi      fi
1038    
1039      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`      ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
1040        
1041      case $ac_option in      case $ac_option in
1042                    
1043          -help | --help | -h | --h)          -help | --help | -h | --h) usage ;;
             usage ;;  
           
         -optfile | --optfile | -of | --of)  
             ac_prev=OPTFILE ;;  
         -optfile=* | --optfile=* | -of=* | --of=*)  
             OPTFILE=$ac_optarg ;;  
           
         -addr | --addr | -a | --a)  
             ac_prev=ADDRESSES ;;  
         -addr=* | --addr=*)  
             ADDRESSES=$ac_optarg ;;  
   
         -tdir | --tdir | -t | --t)  
             ac_prev=TESTDIRS ;;  
         -tdir=* | --tdir=*)  
             TESTDIRS=$ac_optarg ;;  
   
         -bash | --bash | -b | --b)  
             ac_prev=BASH ;;  
         -bash=* | --bash=*)  
             BASH=$ac_optarg ;;  
   
         -command | --command | -c | --c)  
             ac_prev=COMMAND ;;  
         -command=* | --command=*)  
             COMMAND=$ac_optarg ;;  
   
         -make | --make | -m | --m)  
             ac_prev=MAKE ;;  
         -make=* | --make=*)  
             MAKE=$ac_optarg ;;  
   
         -clean | --clean)  
             CLEANUP=t ;;  
   
         -quick | --quick | -q | --q)  
             QUICK=t ;;  
         -nogenmake | --nogenmake | -ng | --ng)  
             NOGENMAKE=t ;;  
         -noclean | --noclean | -nc | --nc)  
             NOCLEAN=t ;;  
         -nodepend | --nodepend | -nd | --nd)  
             NODEPEND=t ;;  
   
         -mpi) MPI=t ;;  
1044    
1045          -adm | -ad) ADM=t ;;          -optfile | --optfile | -of | --of) ac_prev=OPTFILE ;;
1046            -optfile=* | --optfile=* | -of=* | --of=*) OPTFILE=$ac_optarg ;;
1047    
1048          -ieee) IEEE=true ;;          -addr | --addr | -a | --a) ac_prev=ADDRESSES ;;
1049          -noieee) IEEE= ;;          -addr=* | --addr=* | -a=* | --a=*) ADDRESSES=$ac_optarg ;;
1050            -mpackdir | --mpackdir | -mpd | --mpd) ac_prev=MPACKDIR ;;
1051            -mpackdir=* | --mpackdir=* | -mpd=* | --mpd=*) MPACKDIR=$ac_optarg ;;
1052    
1053            -tdir | --tdir | -t | --t) ac_prev=TESTDIRS ;;
1054            -tdir=* | --tdir=* | -t=* | --t=*) TESTDIRS=$ac_optarg ;;
1055            -skipdir | --skipdir | -skd | --skd) ac_prev=SKIPDIRS ;;
1056            -skipdir=* | --skipdir=* | -skd=* | --skd=*) SKIPDIRS=$ac_optarg ;;
1057    
1058            -bash | --bash | -b | --b) ac_prev=BASH ;;
1059            -bash=* | --bash=* | -b=* | --b=*) BASH=$ac_optarg ;;
1060    
1061            -command | --command | -c | --c) ac_prev=COMMAND ;;
1062            -command=* | --command=* | -c=* | --c=*) COMMAND=$ac_optarg ;;
1063    
1064            -makedepend | --makedepend | -md | --md) ac_prev=MKDEPEND ;;
1065            -makedepend=* | --makedepend=* | -md=* | --md=*) MKDEPEND=$ac_optarg ;;
1066    
1067            -make | --make | -m | --m) ac_prev=MAKE ;;
1068            -make=* | --make=* | -m=* | --m=*) MAKE=$ac_optarg ;;
1069    
1070            -repl_mk | --repl_mk ) ac_prev=REPLMAKE ;;
1071            -repl_mk=* | --repl_mk=*) REPLMAKE=$ac_optarg ;;
1072    
1073            -odir | --odir) ac_prev=OUTDIR ;;
1074            -odir=* | --odir=*) OUTDIR=$ac_optarg ;;
1075    
1076            -ptracers | --ptracers | -ptr | --ptr) ac_prev=PTRACERS_NUM ;;
1077            -ptracers=* | --ptracers=* | -ptr=* | --ptr=*) PTRACERS_NUM=$ac_optarg ;;
1078    
1079            -match | --match ) ac_prev=MATCH_CRIT ;;
1080            -match=* | --match=* ) MATCH_CRIT=$ac_optarg ;;
1081    
1082            -j | --j) ac_prev=JOBS ;;
1083            -j=* | --j=*) JOBS=$ac_optarg ;;
1084    
1085            -ef | --ef) ac_prev=EXTRFLG ;;
1086            -ef=* | --ef=*) EXTRFLG=$ac_optarg ;;
1087    
1088            -clean | --clean) CLEANUP=t ; DELDIR=t ;;
1089    
1090            -norun | --norun | -nr | --nr) NORUN=t ;;
1091            -obj | --obj ) TARG='obj' ; NORUN=t ;;
1092            -runonly | --runonly | -ro | --ro) QUICK=t ; NOMAKE=t ;;
1093            -quick | --quick | -q | --q) QUICK=t ;;
1094            -nogenmake | --nogenmake | -ng | --ng) NOGENMAKE=t ;;
1095            -noclean | --noclean | -nc | --nc) NOCLEAN=t ;;
1096            -nodepend | --nodepend | -nd | --nd) NODEPEND=t ;;
1097    
1098            -postclean | --postclean | -pc | --pc) POSTCLEAN=2 ;;
1099            -deloutp | --deloutp | -do | --do) POSTCLEAN=1 ;;
1100    
1101            -mpi | --mpi) MPI=2 ;;
1102            -MPI | --MPI) ac_prev=MPI ;;
1103            -MPI=* | --MPI=*) MPI=$ac_optarg ;;
1104    
1105            -mfile | --mfile | -mf | --mf) ac_prev=MPI_MFILE ;;
1106            -mfile=* | --mfile=* | -mf=* | --mf=*) MPI_MFILE=$ac_optarg ;;
1107    
1108            -mth) MULTI_THREAD=t ;;
1109    
1110            -tlm) if test $KIND = 0 ; then KIND=1 ; else
1111                    echo "Error: '-tlm', '-adm' and '-oad' are exclusive" ; usage
1112                  fi ;;
1113            -adm | -ad) if test $KIND = 0 ; then KIND=2 ; else
1114                    echo "Error: '-tlm', '-adm' and '-oad' are exclusive" ; usage
1115                  fi ;;
1116            -oad) if test $KIND = 0 ; then KIND=4 ; NODEPEND=t ; else
1117                    echo "Error: '-tlm', '-adm' and '-oad' are exclusive" ; usage
1118                  fi ;;
1119    
1120            -ieee)   echo "Warning: ignore option '-ieee' (already the default)"
1121                     printf " ... " ;;
1122            -noieee) echo "Warning: will use option '-fast' instead of '-noieee' (obsolete)"
1123                     printf " ... " ; OptLev=`expr $OptLev \* 2` ;;
1124            -fast)  OptLev=`expr $OptLev \* 2` ;;
1125            -devel) OptLev=0 ;;
1126            -gsl) GSL=t ;;
1127    
1128          -verbose) verbose=2 ;;          -verbose) verbose=2 ;;
1129          -debug) debug=1 ;;          -debug) debug=1 ;;
1130          -quiet) verbose=0 ;;          -quiet) verbose=0 ;;
1131    
1132          -*)          -deldir | -dd) DELDIR=t ;;
1133              echo "Error: unrecognized option: "$ac_option  
1134              usage          -use_r4|-ur4) USE_R4=t ;;
1135              ;;  
1136                    -ts) TS=t;;
1137          *)          -papis) PAPIS=t;;
1138              echo "Error: unrecognized argument: "$ac_option          -pcls) PCL=t;;
1139              usage  
1140              ;;          -*) echo "Error: unrecognized option: "$ac_option
1141                        usage ;;
1142            *)  echo "Error: unrecognized argument: "$ac_option
1143                usage ;;
1144    
1145       esac       esac
1146        
1147  done  done
1148    
1149  if test "x$QUICK" = xt ; then  if test "x$QUICK" = xt ; then
# Line 659  if test "x$QUICK" = xt ; then Line 1152  if test "x$QUICK" = xt ; then
1152      NODEPEND=t      NODEPEND=t
1153  fi  fi
1154    
1155    #- check length of MPI machine file:
1156    if test "x$MPI" != x0 -a "x$MPI_MFILE" != x ; then
1157        if test -r $MPI_MFILE ; then
1158            nl=`wc -l $MPI_MFILE | awk '{print $1}'`
1159            if [ $nl -lt $MPI ] ; then
1160              echo "Error: need at least $MPI nodes (currently only $nl) in MPI_MFILE=$MPI_FILE"
1161              usage
1162            fi
1163            if [ $verbose -gt 1 ]; then
1164                echo " MPI_MFILE=$MPI_MFILE : $nl procs for MPI=$MPI run"
1165            fi
1166        else
1167              echo "Error: cannot access MPI_MFILE=$MPI_FILE"
1168              usage
1169        fi
1170    fi
1171    
1172    #- setting for forward or ADM testing
1173    if test $KIND = 1 ; then
1174        TARG=ftlall
1175        code_dir=code_ad
1176        inputdir=input_ad
1177        ref_outp="output_tlm.txt"
1178        EXECUTABLE="mitgcmuv_ftl"
1179    elif test $KIND = 2 ; then
1180        if test "x$TARG" = xobj ; then TARG=adobj ; else TARG=adall ; fi
1181        code_dir=code_ad
1182        inputdir=input_ad
1183        ref_outp="output_adm.txt"
1184        EXECUTABLE="mitgcmuv_ad"
1185    elif test $KIND = 4 ; then
1186        TARG=adAll
1187        code_dir=code_oad
1188        inputdir=input_oad
1189        ref_outp="output_oadm.txt"
1190        EXECUTABLE="mitgcmuv_ad"
1191    else
1192        if test "x$JOBS" != x ; then TARG="-j $JOBS $TARG" ; fi
1193        code_dir=code
1194        inputdir=input
1195        ref_outp="output.txt"
1196        EXECUTABLE="mitgcmuv"
1197    fi
1198    
1199    xx=`echo $TESTDIRS | awk '{print $1}'`
1200  if test "x$TESTDIRS" = x ; then  if test "x$TESTDIRS" = x ; then
1201      TESTDIRS=`scandirs`      LIST=`scandirs results/$ref_outp`
1202    elif test $xx = 'start_from' ; then
1203        xx=`echo $TESTDIRS | awk '{print $2}'`
1204        LIST=`scandirs results/$ref_outp | sed -n "/$xx/,$ p"`
1205    else
1206        #- expand group of experiments:
1207        LIST=" "
1208        for xx in $TESTDIRS
1209        do
1210          case $xx in
1211            'basic') LIST=${LIST}" aim.5l_cs hs94.128x64x5 ideal_2D_oce"
1212                     LIST=${LIST}" lab_sea tutorial_baroclinic_gyre"
1213                     LIST=${LIST}" tutorial_global_oce_latlon tutorial_plume_on_slope"
1214                    ;;
1215            'tutorials')
1216                     LIST=${LIST}" "`ls | grep 'tutorial_'` ;;
1217            *)       LIST=${LIST}" "$xx ;;
1218          esac
1219        done
1220  fi  fi
1221    #echo 'LIST='${LIST}'<'
1222    #- skip dirs, remove duplicate and non-directory:
1223    TESTDIRS=" "
1224    count=0
1225    for xx in $LIST
1226    do
1227        yy=`echo $SKIPDIRS | grep -c $xx`
1228        if test $yy = 0 ; then
1229            if test -d $xx ; then
1230                yy=`echo $TESTDIRS | grep -c $xx`
1231                if test $yy = 0 ; then TESTDIRS=${TESTDIRS}" "$xx ; fi
1232            else count=1 ;
1233                echo ""; echo -n " -- skip \"$xx\" (not a directory !)"
1234            fi
1235        else
1236            if test $count = 1 ; then echo -n ", \"$xx\""
1237            else count=1 ; echo "" ;  echo -n " skip: \"$xx\""
1238            fi
1239        fi
1240    done
1241    if test $count = 1 ; then echo "" ; echo -n " ... " ; fi
1242    #echo 'TESTDIRS='${TESTDIRS}'<'
1243    
1244  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then  if test "x$OPTFILE" = xNONE -a "x$MITGCM_OF" != x ; then
1245      OPTFILE=$MITGCM_OF      OPTFILE=$MITGCM_OF
1246  fi  fi
1247    
1248  if test "x$ADM" = xt -a "x$COMMAND" = x ; then  LOC_MFILE='tr_mpi_mfile'
1249      COMMAND="./mitgcmuv_ad > output.txt_adm 2>&1"  RUNLOG="run.tr_log"
1250  fi  OUTPUTFILE=$ref_outp
   
1251  if test "x$COMMAND" = x ; then  if test "x$COMMAND" = x ; then
1252      COMMAND="make output.txt"      COMMAND="./$EXECUTABLE > $OUTPUTFILE"
1253    fi
1254    if test "x$MPI" != x0 ; then
1255        OUTPUTFILE="STDOUT.0000"
1256  fi  fi
1257    
1258  echo "OK"  echo "OK (COMMAND= $COMMAND )"
1259    
1260    # set the Default List of output variables to be checked:
1261    #  (use default or load experiment-specific list from file "tr_checklist")
1262    # content : 1rst = main variable used to decide if it pass or FAIL
1263    #         others = number of matching digits to be printed in summary.txt
1264    if test $KIND = 1 ; then
1265        DEF_CHECK_LIST='tlmGrd tlmCst tlmGrd fwdGrd'
1266        EMPTY_RESULTS='.. .. ..'
1267        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1268    elif test $KIND = 2 -o $KIND = 4 ; then
1269        DEF_CHECK_LIST='AdGrd Cost AdGrd FDGrd'
1270        EMPTY_RESULTS='.. .. ..'
1271        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1272    else
1273        DEF_CHECK_LIST='PS PS T+ S+ U+ V+ pt1+ pt2+ pt3+ pt4+ pt5+'
1274        EMPTY_RESULTS='.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..'
1275        LEN_CHECK_LIST=`echo $DEF_CHECK_LIST | sed 's/ [a-zA-Z0-9]*+/&mn &mx &av &sd/g' | awk '{print NF-1}'`
1276        ii=`echo $EMPTY_RESULTS | awk '{print NF}'`
1277        EMPTY_RESULTS=$EMPTY_RESULTS`expr $LEN_CHECK_LIST - $ii | awk 'BEGIN{FS=":"}{for(i=1;i<=$1;i++){printf "  ."}}'`
1278    fi
1279    
1280  #  create the FORTRAN comparison code  #  create the FORTRAN comparison code
1281  createcodelet  if test -x tr_cmpnum ; then
1282        echo "skipping comparison code build"
1283    else
1284        createcodelet
1285    fi
1286    
1287  #  build the mpack utility  #  build the mpack utility (if ADDRESSES = NONE, do it to test the build)
1288  if test "x$ADDRESSES" = xNONE -o "x$ADDRESSES" = x ; then  if test "x$ADDRESSES" = x ; then
1289      echo "skipping mpack build"      echo "skipping mpack build"
1290  else  else
1291      build_mpack      build_mpack
1292  fi  fi
1293    
1294  #  Create a uniquely named directory to store results  #  Create a uniquely named directory to store results
1295    CMDLINE=$0
1296    for xx in "$@" ; do nw=`echo $xx | wc -w`
1297        if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
1298                            else CMDLINE="$CMDLINE '$xx'" ; fi
1299    done
1300    #for xx in "$@" ; do CMDLINE="$CMDLINE '$xx'" ; done
1301  MACH=`hostname`  MACH=`hostname`
1302  UNAMEA=`uname -a`  UNAMEA=`uname -a`
1303  DATE=`date +%Y%m%d`  DATE=`date +%Y%m%d`
1304  BASE="tr_"$MACH"_"$DATE"_"  BASE="tr_"$MACH"_"$DATE"_"
1305    if test "x$OUTDIR" != x ; then
1306        BASE="tr_"$OUTDIR"_"$DATE"_"
1307    else
1308        short_name=`hostname | sed 's/\..*$//'`
1309        BASE="tr_"$short_name"_"$DATE"_"
1310    fi
1311  DNUM=0  DNUM=0
1312  DRESULTS="$BASE$DNUM"  DRESULTS="$BASE$DNUM"
1313  while test -e $DRESULTS ; do  while test -e $DRESULTS ; do
# Line 705  if test "x$RETVAL" != x0 ; then Line 1321  if test "x$RETVAL" != x0 ; then
1321      exit 1      exit 1
1322  fi  fi
1323  SUMMARY="$DRESULTS/summary.txt"  SUMMARY="$DRESULTS/summary.txt"
 printf "Start time:  " >> $SUMMARY  
1324  start_date=`date`  start_date=`date`
1325  echo $start_date > $SUMMARY  echo $start_date > $SUMMARY
1326    echo 'run:' $CMDLINE >> $SUMMARY
1327    echo 'on :' $UNAMEA  >> $SUMMARY
1328    
1329  of_path=  of_path=
1330  if test "x$OPTFILE" != xNONE ; then  if test "x$OPTFILE" != xNONE ; then
# Line 731  if test "x$OPTFILE" != xNONE ; then Line 1348  if test "x$OPTFILE" != xNONE ; then
1348      fi      fi
1349  else  else
1350      echo >> $SUMMARY      echo >> $SUMMARY
1351      echo "No \"OPTFILE\" was explicitly specified by testreport," >> $SUMMARY      echo "No \"OPTFILE\" was specified ; genmake2 found and uses:" >> $SUMMARY
1352      echo "   so the genmake default will be used." >> $SUMMARY      #-note: to be filled later after 1rst run
1353  fi  fi
1354  echo  echo
1355  echo >> $SUMMARY  echo >> $SUMMARY
1356  if test "x$ADM" = x ; then  if test $KIND = 0 ; then
1357      cat << EOF | tee -a $SUMMARY      line_0=`printf '%s %2i' 'default' $MATCH_CRIT`
1358                  T           S           U           V         line_0="$line_0  ----T-----  ----S-----  ----U-----  ----V-----"
1359  G D M    c        m  s        m  s        m  s        m  s      line_1="G D M    c        m  s        m  s        m  s        m  s"
1360  E p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  .      line_2="e p a R  g  m  m  e  .  m  m  e  .  m  m  e  .  m  m  e  ."
1361  N n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d      line_3="n n k u  2  i  a  a  d  i  a  a  d  i  a  a  d  i  a  a  d"
1362  2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  .      line_4="2 d e n  d  n  x  n  .  n  x  n  .  n  x  n  .  n  x  n  ."
1363        for ii in $PTRACERS_NUM ; do
1364  EOF          line_0="$line_0  --PTR 0"$ii"--"
1365            line_1="$line_1        m  s"
1366            line_2="$line_2  m  m  e  ."
1367            line_3="$line_3  i  a  a  d"
1368            line_4="$line_4  n  x  n  ."
1369        done
1370  else  else
1371        line_0=`printf '%s %2i' 'default   ' $MATCH_CRIT`
1372      if test $KIND = 1 ; then
1373        echo "TANGLIN=true" >> $SUMMARY
1374        line_1="G D M    C  T  F"
1375        line_2="e p a R  o  L  D"
1376      else
1377      echo "ADJOINT=true" >> $SUMMARY      echo "ADJOINT=true" >> $SUMMARY
1378        line_1="G D M    C  A  F"
1379        line_2="e p a R  o  d  D"
1380      fi
1381        line_3="n n k u  s  G  G"
1382        line_4="2 d e n  t  r  r"
1383      echo >> $SUMMARY      echo >> $SUMMARY
     cat << EOF | tee -a $SUMMARY  
 G D M    C  G  
 E p a R  o  r  
 N n k u  s  a  
 2 d e n  t  d  
   
 EOF  
1384  fi  fi
1385        echo "$line_0" | tee -a $SUMMARY
1386        echo "$line_1" | tee -a $SUMMARY
1387        echo "$line_2" | tee -a $SUMMARY
1388        echo "$line_3" | tee -a $SUMMARY
1389        echo "$line_4" | tee -a $SUMMARY
1390        echo ""        | tee -a $SUMMARY
1391    echo "-------------------------------------------------------------------------------"
1392    
1393  #  ...and each test directory...  #  ...and each test directory...
1394  for dir in $TESTDIRS ; do  for dir in $TESTDIRS ; do
1395        
1396        # set builddir & rundir:
1397        builddir="build"
1398        if test ! -d $dir/$builddir ; then mkdir $dir/$builddir ; fi
1399        rundir="run"
1400        pfxdir="tr_$rundir"
1401        if test ! -d $dir/$rundir ; then
1402            rundir=$builddir
1403        fi
1404        CODE_DIR=$dir/$code_dir
1405        BUILD_DIR=$dir/$builddir
1406    
1407      #  Cleanup only!      #  Cleanup only!
1408      if test "x$CLEANUP" = xt ; then      if test "x$CLEANUP" = xt ; then
1409          if test -r $dir/build/Makefile ; then          echo -n '  --- dir:' $BUILD_DIR ': '
1410              ( cd $dir/build ; make CLEAN )          makeclean $BUILD_DIR
1411            (   cd $BUILD_DIR
1412                rm -f $EXECUTABLE *.bak
1413                rm -f genmake_state genmake_*optfile genmake.log
1414                rm -f SIZE.h.mpi genmake.tr_log make.tr_log
1415            )
1416            if test -d $dir/$rundir/CVS ; then
1417                echo -n '  --- dir:' $dir/$rundir ': '
1418                run_clean $dir/$rundir
1419          fi          fi
1420          if test -r $dir/input/Makefile ; then          trdir=`( cd $dir ; find . -type d -name "$pfxdir.*" -print | sed 's/^.\///')`
1421              ( cd $dir/input ; make CLEAN )          ttd=`echo $trdir | wc -w`
1422            if test $ttd != 0 ; then
1423                echo '  --- rm dir:' $trdir
1424                ( cd $dir ; rm -rf $trdir )
1425          fi          fi
1426          continue          continue
1427      fi      fi
1428    
1429      #  Verify that the testdir exists and contains previous      #  Verify that the testdir exists and contains previous
1430      #  results in the correct location--or skip this directory!      #  results in the correct location--or skip this directory!
1431      fout=      fout=$dir"/results/"$ref_outp
1432      if test "x$ADM" = x ; then     #if test ! -r $fout ; then
1433          fout=$dir"/results/output.txt"      if test ! -r $fout -a ! -r ${fout}.gz ; then
     else  
         fout=$dir"/results_ad/output.txt_adm"  
     fi  
     if test ! -r $fout ; then  
1434          echo "can't read \"$fout\" -- skipping $dir"          echo "can't read \"$fout\" -- skipping $dir"
1435          continue          continue
1436      fi      fi
1437    
1438      builddir="input"      # Check for specific files for particular type of run
1439      rundir="input"  
1440      use_seperate_build=0      if test ! -r $CODE_DIR"/SIZE.h_mpi"  -a "x$MPI" != "x0" ; then
1441      if test -d $dir/build -a -r $dir/build ; then          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"
1442          builddir="build"          continue
         rundir="build"  
         use_seperate_build=1  
         linkdata $use_seperate_build $dir/$rundir  
1443      fi      fi
1444            if test ! -r $dir"/input/eedata.mth" -a "x$MULTI_THREAD" = "xt" ; then
1445      #  Check whether there are "extra runs" for this testdir          echo "can't find \"$dir/input/eedata.mth\" -- skipping $dir"
1446      extra_runs=          continue
     if test "x$ADM" = x -a "x$use_seperate_build" = x1 ; then  
         ex_run_dirs=`( cd $dir ; echo input.* )`  
         echo "ex_run_dirs='$ex_run_dirs'"  
         for exd in $ex_run_dirs ; do  
             name=`echo $exd | sed -e 's/input.//g'`  
             outf="$dir/results/output.txt.$name"  
             if test -f $outf -a -r $outf ; then  
                 extra_runs="$extra_runs $name"  
             fi  
         done  
1447      fi      fi
1448    
1449      if test "x$ADM" = x ; then      if test "x$MPI" != "x0" ; then
1450          code_dir=code          ntx=1 ; nty=1
1451          CODE_DIR=$dir/code          if test "x$MULTI_THREAD" = "xt" ; then
1452      else            ff=$dir"/input/eedata.mth"
1453          code_dir=code_ad            ntx=`grep "^ *nTx *=" $ff | tail -1 | sed 's/^ *nTx *= *//' | sed "s/, *$//"`
1454          CODE_DIR=$dir/code_ad            nty=`grep "^ *nTy *=" $ff | tail -1 | sed 's/^ *nTy *= *//' | sed "s/, *$//"`
1455              if test "x$ntx" = x ; then ntx=1 ; fi
1456              if test "x$nty" = x ; then nty=1 ; fi
1457            fi
1458            #- create new SIZE.h with no more than '$MPI' Procs
1459            mk_mpi_size $CODE_DIR"/SIZE.h_mpi" $BUILD_DIR"/tr_size.mpi" $MPI $ntx $nty
1460            LOC_NPROC=$?
1461            (   cd $BUILD_DIR
1462                if test -r SIZE.h.mpi ; then
1463                    cmp tr_size.mpi SIZE.h.mpi > /dev/null 2>&1 ; RETVAL=$?
1464                else RETVAL=1
1465                fi
1466                if test "x$RETVAL" = x0 ; then
1467                    rm -f tr_size.mpi
1468                else
1469                    rm -f SIZE.h.mpi ; mv tr_size.mpi SIZE.h.mpi
1470                fi
1471            )
1472            if test "x$MPI_MFILE" != x ; then
1473                #- create new MPI machine-file with the right number of Procs
1474                rm -f $LOC_MFILE
1475                cat $MPI_MFILE | sort | uniq | head -$LOC_NPROC > $LOC_MFILE
1476                nl=`wc -l $LOC_MFILE | awk '{print $1}'`
1477                if [ $nl -lt $LOC_NPROC ] ; then
1478                    rm -f $LOC_MFILE
1479                    cat $MPI_MFILE | head -$LOC_NPROC > $LOC_MFILE
1480                    #sed -n "1,$LOC_NPROC p" $MPI_MFILE > $LOC_MFILE
1481                fi
1482                if [ $verbose -gt 1 ]; then
1483                    nl=`wc -l $LOC_MFILE | awk '{print $1}'`
1484                    echo " new LOC_MFILE=$LOC_MFILE : $nl procs for LOC_NPROC=$LOC_NPROC"
1485                fi
1486            fi
1487            if test "x$MULTI_THREAD" = "xt" ; then
1488                retv=`check_eedata $dir"/input/eedata.mth" $BUILD_DIR"/SIZE.h.mpi"`
1489                if test $retv != 0 ; then
1490                    echo "input/eedata.mth tiling misfit -- skipping $dir"
1491                    continue
1492                fi
1493            fi
1494      fi      fi
     BUILD_DIR=$dir/$builddir  
1495    
1496      if test ! -r $CODE_DIR"/SIZE.h_mpi" -a "x$MPI" = "xt" ; then      #  Check whether there are "extra runs" for this testdir
1497          echo "can't find \"$CODE_DIR/SIZE.h_mpi\" -- skipping $dir"      extra_runs=
1498          continue      if test "x$NORUN" = xf ; then
1499            ex_run_dirs=`( cd $dir ; echo $inputdir.* )`
1500      fi      fi
1501        #echo "ex_run_dirs='$ex_run_dirs'"
1502        for exd in $ex_run_dirs ; do
1503            name=`echo $exd | sed -e "s/$inputdir\.//"`
1504            refExOut=`echo $ref_outp | sed "s/\./.${name}./"`
1505            outf="$dir/results/$refExOut"
1506            #if test -f $outf -a -r $outf ; then
1507            if test -r $outf -o -r ${outf}.gz ; then
1508              if test "x$MULTI_THREAD" = "xt" ; then
1509                if test -r $dir"/"$exd"/eedata.mth" ; then
1510                  if test "x$MPI" = "x0" ; then
1511                    extra_runs="$extra_runs $name"
1512                  else
1513                    retv=`check_eedata $dir"/"$exd"/eedata.mth" $BUILD_DIR"/SIZE.h.mpi"`
1514                    if test $retv = 0 ; then
1515                        extra_runs="$extra_runs $name"
1516                    else
1517                        echo $exd"/eedata.mth tiling misfit -- skipping $dir"
1518                    fi
1519                  fi
1520                #else echo $dir"/"$exd"/eedata.mth: not found"
1521                fi
1522              else
1523                extra_runs="$extra_runs $name"
1524              fi
1525            fi
1526        done
1527    
     echo "-------------------------------------------------------------------------------"  
1528      echo      echo
1529      echo "Experiment:  $dir"      if test "x$extra_runs" = "x" ; then
1530            echo "Experiment:  $dir"
1531        else
1532            echo "Experiment:  $dir ; extra_runs=$extra_runs"
1533        fi
1534      echo      echo
1535      unset genmake makedepend make run      unset genmake makedepend make run
1536      results='-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --'      results=$EMPTY_RESULTS
1537    
1538      #  Create an output dir for each OPTFILE/tdir combination      #  Create an output dir & summary.txt file for each tested experiment (tdir)
1539      rel_CDIR=$DRESULTS"/"$dir      locDIR=$DRESULTS"/"$dir
1540      mkdir $rel_CDIR      mkdir $locDIR
1541      CDIR=`pwd`"/$rel_CDIR"      #- report to this experiment local summary file ---
1542            echo "DATE='$DATE' ; tdir='$dir'" > $locDIR"/summary.txt"
1543      if test "x$CLEANUP" = xt ; then      echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1544          makeclean $dir/$builddir      echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1545        CDIR=`pwd`"/$locDIR"
1546    
1547        if test "x$NORUN" = xt ; then
1548                run=N
1549            genmakemodel $dir/$builddir && genmake=Y \
1550                && makeclean $dir/$builddir \
1551                && symlink_mpifiles $dir $code_dir $builddir \
1552                && makedependmodel $dir/$builddir && makedepend=Y \
1553                && makemodel $dir/$builddir && make=Y
1554      else      else
1555          genmakemodel $dir/$builddir && genmake=Y \          genmakemodel $dir/$builddir && genmake=Y \
1556              && makeclean $dir/$builddir \              && makeclean $dir/$builddir \
1557              && symlink_mpifiles $dir $code_dir $builddir \              && symlink_mpifiles $dir $code_dir $builddir \
1558              && makedependmodel $dir/$builddir && makedepend=Y \              && makedependmodel $dir/$builddir && makedepend=Y \
1559              && makemodel $dir/$builddir && make=Y \              && makemodel $dir/$builddir && make=Y \
1560              && linkdata $use_seperate_build $dir/$rundir \              && run_clean $dir/$rundir \
1561                && linkdata $dir/$rundir $inputdir \
1562              && runmodel $dir/$rundir && run=Y \              && runmodel $dir/$rundir && run=Y \
1563              && results=`testoutput $dir $rundir`              && results=`testoutput_run $dir $rundir $ref_outp`
1564      fi      fi
1565            #echo "results='$results'"
1566      echo  
     if test "x$ADM" = x ; then  
1567          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`          fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1568          echo          echo 1>&2
1569          echo "$fres" >> $SUMMARY          echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1570          echo "fresults='$fres'" > $CDIR"/summary.txt"          echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
         echo "MACH='$MACH'" >> $CDIR"/summary.txt"  
         echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"  
         echo "DATE='$DATE'" >> $CDIR"/summary.txt"  
         echo "tdir='$dir'" >> $CDIR"/summary.txt"  
1571    
1572          for ex in $extra_runs ; do          for ex in $extra_runs ; do
1573              test -e "$dir/tr_run" && rm -rf "$dir/tr_run"              unset run
1574              mkdir "$dir/tr_run"              results=$EMPTY_RESULTS
1575              ( cd "$dir/input" ; links=`ls -1 | grep -v CVS` )              #  reference output file
1576              (              refExOut=`echo $ref_outp | sed "s/\./.${ex}./g"`
1577                  cd "$dir/tr_run"              #  Create an output dir & summary.txt file for each extra run (tdir.ex)
1578                  for i in $links; do              locDIR=$DRESULTS"/"$dir"."$ex
1579                      ln -s ../input/$i $i              mkdir $locDIR
1580                  done              #- report to this experiment local summary file ---
1581              )              echo "DATE='$DATE' ; tdir='$dir.$ex'" > $locDIR"/summary.txt"
1582              ( cd "$dir/input.$ex" ; links=`ls -1 | grep -v CVS` )              #echo "MACH='$MACH'" >> $locDIR"/summary.txt"
1583              (              #echo "UNAMEA='$UNAMEA'" >> $locDIR"/summary.txt"
1584                  cd "$dir/tr_run"              CDIR=`pwd`"/$locDIR"
1585                  for i in $links; do              test ! -e "$dir/$pfxdir.$ex" && mkdir "$dir/$pfxdir.$ex"
1586                      test -e $i  &&  rm -f $i              run_clean $dir/$pfxdir.$ex
1587                      ln -s ../input.$ex/$i $i              linkdata $dir/$pfxdir.$ex $inputdir.$ex $inputdir
1588                  done              runmodel $dir/$pfxdir.$ex && run=Y \
1589                  ln -s ../$builddir/Makefile Makefile              && results=`testoutput_run $dir $pfxdir.$ex $refExOut`
                 ln -s ../$builddir/mitgcmuv mitgcmuv  
             )  
             runmodel $dir/tr_run && run=Y \  
                 && results=`testoutput $dir $rundir "."$ex`  
             fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`  
1590              fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`              fres=`formatresults $dir ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N} $results`
1591              fres="$fres.$ex"              fres="$fres.$ex"
1592              echo              echo 1>&2
1593              echo "$fres" >> $SUMMARY              echo "$fres" | sed 's/ 99/ --/g' | sed 's/  > />/' | sed 's/  < /</' >> $SUMMARY
1594              echo "fresults='$fres'" > $CDIR"/summary.txt"              echo "fresults='$fres'" | sed 's/ 99/ --/g' >> $locDIR"/summary.txt"
1595              echo "MACH='$MACH'" >> $CDIR"/summary.txt"              if test "x$POSTCLEAN" = x2 ; then
1596              echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"                  run_clean $dir/$pfxdir.$ex
1597              echo "DATE='$DATE'" >> $CDIR"/summary.txt"              fi
             echo "tdir='$dir'" >> $CDIR"/summary.txt"  
1598          done          done
1599      else  
1600          fres=`printf '%s %s %s %s' ${genmake:-N} ${makedepend:-N} ${make:-N} ${run:-N}`      if test -f $DRESULTS"/"genmake_state ; then : ; else
1601          fres=$fres"$results   $dir"          if test -f $dir/$builddir/Makefile ; then
1602          echo              mkOpt=`grep '^# OPTFILE=' $dir/$builddir/Makefile 2>/dev/null | head -1 | sed 's/^# //'`
1603          echo "$fres" >> $SUMMARY              echo "from '$dir/$builddir/Makefile', extract:" > $DRESULTS/genmake_state
1604          echo "fresults='$fres'" > $CDIR"/summary.txt"              sed -n '/^# executed by:/,+1 p' $dir/$builddir/Makefile >> $DRESULTS/genmake_state
1605          echo "MACH='$MACH'" >> $CDIR"/summary.txt"              echo " $mkOpt" >> $DRESULTS/genmake_state
1606          echo "UNAMEA='$UNAMEA'" >> $CDIR"/summary.txt"              if test "x$OPTFILE" = xNONE ; then
1607          echo "DATE='$DATE'" >> $CDIR"/summary.txt"                  eval $mkOpt
1608          echo "tdir='$dir'" >> $CDIR"/summary.txt"                  sed "/^No \"OPTFILE\" was specified ; genmake2/a\  OPTFILE=${OPTFILE}"\
1609                            $SUMMARY > tr_0.tmp_log
1610                    RETVAL=$?
1611                    if test "x$RETVAL" = x0 ; then rm -f $SUMMARY
1612                            cp tr_0.tmp_log $SUMMARY
1613                    else rm -f tr_0.tmp_log
1614                    fi
1615                fi
1616                gmkLog=$dir/$builddir/genmake.log
1617                grep '^Get compiler version using:' $gmkLog > /dev/null 2>&1
1618                RETVAL=$?
1619                if test "x$RETVAL" = x0 ; then
1620                    echo "from '$gmkLog', extract compiler version:" >> $DRESULTS/genmake_state
1621                    sed -n '/Get compiler version/,/<-- compiler version/p' $gmkLog \
1622                            | grep -v '^... compiler version ' > tr_1.tmp_log
1623                    sed -n '1p' tr_1.tmp_log >> $DRESULTS/genmake_state
1624                    sed -n '2,/^$/p' tr_1.tmp_log | sed '/^$/d' | sed 's/^./ &/' \
1625                            >> $DRESULTS/genmake_state
1626                    rm -f tr_1.tmp_log
1627                fi
1628            fi
1629      fi      fi
1630            #postclean $dir/$builddir
1631        if test "x$POSTCLEAN" = x2 ; then
1632            makeclean $dir/$builddir \
1633                && run_clean $dir/$rundir
1634        fi
1635        if test "x$MPI" != x0 -a "x$MPI_MFILE" != x ; then rm -f $LOC_MFILE ; fi
1636    
1637      echo "-------------------------------------------------------------------------------"      echo "-------------------------------------------------------------------------------"
1638        
1639  done  done
1640    
1641  printf "Start time:  " >> $SUMMARY  printf "Start time:  " >> $SUMMARY
1642  echo $start_date >> $SUMMARY  echo "$start_date" >> $SUMMARY
1643  printf "End time:    " >> $SUMMARY  printf "End time:    " >> $SUMMARY
1644  date >> $SUMMARY  date >> $SUMMARY
1645    
# Line 920  else Line 1651  else
1651      if test "x$HAVE_MPACK" = xt ; then      if test "x$HAVE_MPACK" = xt ; then
1652          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \          tar -cf $DRESULTS".tar" $DRESULTS > /dev/null 2>&1 \
1653              && gzip $DRESULTS".tar" \              && gzip $DRESULTS".tar" \
1654              && $MPACK -s MITgcm-test -m 1500000 $DRESULTS".tar.gz" $ADDRESSES              && $MPACK -s MITgcm-test -m 3555000 $DRESULTS".tar.gz" $ADDRESSES
1655          RETVAL=$?          RETVAL=$?
1656          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1657              echo              echo
# Line 933  else Line 1664  else
1664              echo "An email containing results was sent to the following addresses:"              echo "An email containing results was sent to the following addresses:"
1665              echo "  \"$ADDRESSES\""              echo "  \"$ADDRESSES\""
1666              echo              echo
1667                test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"
1668                test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"
1669          fi          fi
         test -f $DRESULTS".tar"  &&  rm -f $DRESULTS".tar"  
         test -f $DRESULTS".tar.gz"  &&  rm -f $DRESULTS".tar.gz"  
1670      fi      fi
1671  fi  fi
1672    
1673  # rm -f tmp_cmpnum.f a.out  if test "x$QUICK" = xf -a "x$NORUN" = xf ; then
1674  rm -f tmp_cmpnum.c tmp_cmpnum      rm -f tr_cmpnum.c tr_cmpnum
1675    fi
1676    
1677  if test "x$CLEANUP" != xt ; then  if test "x$CLEANUP" != xt ; then
1678      cat $SUMMARY      cat $SUMMARY | sed 's/ \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \.  \. //'
1679      if test -e tr_out.txt ; then      if test -e tr_out.txt ; then
1680          mv tr_out.txt tr_out.txt.old          mv tr_out.txt tr_out.txt.old
1681      fi      fi
1682      cat $SUMMARY > tr_out.txt      cat $SUMMARY | sed '/^[YN] [YN] [YN] [YN]/ s/ \. //g' > tr_out.txt
1683  fi  fi
1684    
1685    if test "x$DELDIR" = xt ; then
1686        rm -rf $DRESULTS
1687    fi

Legend:
Removed from v.1.34  
changed lines
  Added in v.1.175

  ViewVC Help
Powered by ViewVC 1.1.22