/[MITgcm]/MITgcm/verification/testreport
ViewVC logotype

Annotation of /MITgcm/verification/testreport

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.162 - (hide annotations) (download)
Wed May 11 01:51:07 2011 UTC (12 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62x
Changes since 1.161: +2 -2 lines
remove OUTPUTFILE before the exec of run-command

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

  ViewVC Help
Powered by ViewVC 1.1.22