/[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.154 - (hide annotations) (download)
Fri Jan 14 23:55:00 2011 UTC (13 years, 3 months ago) by jmc
Branch: MAIN
Changes since 1.153: +143 -67 lines
changes to allow to test MPI with different number of processors
for each experiment: create file "SIZE.h.mpi" in each build dir.
Note: update of "-command" argument not yet implemented.

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

  ViewVC Help
Powered by ViewVC 1.1.22