1 |
#! /usr/bin/env bash |
2 |
|
3 |
# $Header: $ |
4 |
# $Name: $ |
5 |
#set -x |
6 |
|
7 |
comp_1fld() |
8 |
{ |
9 |
# comp_1fld select_string select_var print_var file_1 file_2 |
10 |
echo ' ' >> $logfil |
11 |
uu="$1$2" |
12 |
egrep "${uu}" $4 | sed 's/.*=//' | nl > tmp1.txt |
13 |
egrep "${uu}" $5 | sed 's/.*=//' | nl > tmp2.txt |
14 |
if test -s tmp1.txt ; then nl1=`sed -n '$=' tmp1.txt` ; else nl1=0 ; fi |
15 |
if test -s tmp2.txt ; then nl2=`sed -n '$=' tmp2.txt` ; else nl2=0 ; fi |
16 |
if [ $nl1 -ne $nl2 ] ; then |
17 |
cmp=0 |
18 |
echo $cmp $3 ' ; nb output:' $nl1 $nl2 |
19 |
echo $cmp $3 ' ; nb output:' $nl1 $nl2 >> $logfil |
20 |
rm -f tmp1.txt tmp2.txt |
21 |
elif [ $nl1 -le 1 ] ; then |
22 |
cmp=16 |
23 |
echo '--' $3 ' ; not enough output:' $nl1 $nl2 |
24 |
echo '--' $3 ' ; not enough output:' $nl1 $nl2 >> $logfil |
25 |
rm -f tmp1.txt tmp2.txt |
26 |
else |
27 |
join tmp1.txt tmp2.txt > tmp3.txt |
28 |
cmp=`$compex < tmp3.txt 2> tmp4.txt` |
29 |
err=`egrep -c ' error ' tmp4.txt` |
30 |
if [ $err -ge 1 ] ; then |
31 |
echo $cmp $3 ':' $compex 'gives' $err 'error(s)' |
32 |
echo $cmp $3 ':' $compex 'gives' $err 'error(s)' >> $logfil |
33 |
cmp=0 |
34 |
elif test -s tmp4.txt ; then |
35 |
cat tmp4.txt |
36 |
echo $cmp $3 ' <- set to 0' |
37 |
echo $cmp $3 ' <- set to 0' >> $logfil |
38 |
cmp=0 |
39 |
else |
40 |
printf '%2i %s\n' $cmp $3 |
41 |
printf '%2i %s\n' $cmp $3 >> $logfil |
42 |
fi |
43 |
if test -f cmpnum.log |
44 |
then cat cmpnum.log >> $logfil ; rm -f cmpnum.log ; fi |
45 |
rm -f tmp1.txt tmp2.txt tmp3.txt tmp4.txt |
46 |
fi |
47 |
if [ $cmp -lt $gMin ] ; then gMin=$cmp ; fi |
48 |
} |
49 |
|
50 |
kAd=0 |
51 |
if [ $# -ge 3 ] ; then |
52 |
if test $3 = 'AD' ; then |
53 |
kAd=1 ; fil1=$1 ; fil2=$2 ; shift |
54 |
fi |
55 |
fi |
56 |
case $# in |
57 |
2|3) ;; |
58 |
*) echo "Usage: `basename $0` outp_file_1 outp_file_2 [AD][D,nh,ad,tl,S,I,L,#]" |
59 |
echo " compare output from DEBUG_STATS (=D) or from [AD] MONITOR, with:" |
60 |
echo " nh (+cg3d) ; ad= Adj.Grad ; tl= Tang.Lin ; S= SeaIce only ;" |
61 |
echo " E= exf ; I= ThSI ; L= land ; M= StreamIce ; # = number of pTrac" |
62 |
exit ;; |
63 |
esac |
64 |
if test $kAd = 0 ; then fil1=$1 ; fil2=$2 ; fi |
65 |
flag=0 |
66 |
if test $# = 3 ; then flag=$3 ; fi |
67 |
logfil=comp_res.log |
68 |
|
69 |
echo 'flag=' $flag ' ; file_1 file_2 =' $fil1 $fil2 |
70 |
|
71 |
#platform=`uname -i` |
72 |
platform=`uname -m` |
73 |
exDir=`echo $HOME/mitgcm/bin` |
74 |
compex=`ls $exDir/cmpnum.$platform 2>/dev/null` |
75 |
if test x$compex = x |
76 |
then compex=`ls $exDir/cmpnum 2>/dev/null` ; fi |
77 |
if test x$compex = x |
78 |
then echo "executable: $exDir/cmpnum not found" ; exit ; fi |
79 |
#echo $compex |
80 |
if test -x $compex |
81 |
then echo ' use executable:' $compex |
82 |
else echo "executable: $compex not found" ; exit |
83 |
fi |
84 |
|
85 |
echo 'flag=' $flag ' ; file_1 file_2 =' $fil1 $fil2 > $logfil |
86 |
echo ' use executable:' $compex >> $logfil |
87 |
|
88 |
listA='eta uvel vvel wvel theta salt' |
89 |
listB='u v w W' |
90 |
listC='pe_b ke_max ke_mean vort_r_min vort_r_max vort_a_sd vort_p_sd cg2d' |
91 |
if test $flag = 'nh'; then listC=$listC' cg3d' ; flag=0; fi |
92 |
|
93 |
listS='_min _max _mean _sd _del2' |
94 |
|
95 |
listDy='EtaN Uvel Vvel Wvel Theta Salt Gu Gv Gt Gs GuNm1 GvNm1 GtNm1 GsNm1 cg2d_b cg2d_x' |
96 |
#listDy='Gu Gv cg2d_b' |
97 |
listDb=' min max mean S.D.' |
98 |
|
99 |
listE='ustress vstress hflux sflux uwind vwind wspeed atemp aqh precip swflux lwflux swdown lwdown' |
100 |
if test $kAd = 0 ; then listE="$listE evap" ; fi |
101 |
|
102 |
listSI='uice vice area heff hsnow' |
103 |
|
104 |
listI='Ice_Area IceH_ave IceH_max SnwH_ave Tsrf_ave Tic1_ave Tic2_ave' |
105 |
listH='_S _N' |
106 |
|
107 |
listL='SnwH_ave TotEnerg Tsrf_ave Tgr1_ave Tgr2_ave grdW_ave' |
108 |
listZ='_S _T _N' |
109 |
|
110 |
listAD='Cost AdGrd FDGrd' |
111 |
#- with old ADM output: |
112 |
#listAD='cost grad' |
113 |
listTL='tlCst tlGrd fwGrd' |
114 |
|
115 |
gMin=16; |
116 |
|
117 |
if test $flag = 0 |
118 |
then |
119 |
zz='MON dynstat_' |
120 |
if test $kAd = 1 ; then zz='MON ad_dynstat_' ; fi |
121 |
for yy in $listA |
122 |
do |
123 |
for ss in $listS |
124 |
do |
125 |
xx=${yy}$ss |
126 |
if test $kAd = 1 ; then xx='ad'$xx ; fi |
127 |
comp_1fld "$zz" $xx $xx $fil1 $fil2 |
128 |
done |
129 |
done |
130 |
fi |
131 |
|
132 |
if test $flag = 0 -a $kAd = 0 |
133 |
then |
134 |
zz='MON advcfl_' |
135 |
for yy in $listB |
136 |
do |
137 |
xx='CFL_'$yy |
138 |
comp_1fld "$zz" $yy $xx $fil1 $fil2 |
139 |
done |
140 |
fi |
141 |
|
142 |
if test $flag = 0 -a $kAd = 0 |
143 |
then |
144 |
for xx in $listC |
145 |
do |
146 |
# echo ' ' >> $logfil |
147 |
zz='MON ' |
148 |
if test $xx = cg2d -o $xx = cg3d ; then zz=$xx; yy=_init_res ; else yy=$xx ; fi |
149 |
#echo $yy |
150 |
comp_1fld "$zz" $yy $xx $fil1 $fil2 |
151 |
done |
152 |
fi |
153 |
|
154 |
if test $flag = 'D' |
155 |
then |
156 |
for yy in $listDy |
157 |
do |
158 |
for xx in $listDb |
159 |
do |
160 |
zz=${yy}' .*'$xx |
161 |
comp_1fld "$zz" '=' "${yy}[${xx}]" $fil1 $fil2 |
162 |
done |
163 |
done |
164 |
echo 'Minimum match= ' $gMin |
165 |
exit |
166 |
fi |
167 |
|
168 |
if test $flag = 'E' -a $kAd = 0 |
169 |
then |
170 |
zz='MON exf_' |
171 |
for yy in $listE |
172 |
do |
173 |
for ss in $listS |
174 |
do |
175 |
xx=${yy}$ss |
176 |
comp_1fld "$zz" $xx $xx $fil1 $fil2 |
177 |
done |
178 |
done |
179 |
echo 'Minimum match= ' $gMin |
180 |
exit |
181 |
fi |
182 |
if test $flag = 'E' -a $kAd = 1 |
183 |
then |
184 |
zz='MON ad_exf_' |
185 |
for yy in $listE |
186 |
do |
187 |
for ss in $listS |
188 |
do |
189 |
xx='ad'${yy}$ss |
190 |
comp_1fld "$zz" $xx $xx $fil1 $fil2 |
191 |
done |
192 |
done |
193 |
echo 'Minimum match= ' $gMin |
194 |
exit |
195 |
fi |
196 |
|
197 |
if test $flag = 'S' |
198 |
then |
199 |
zz='MON seaice_' |
200 |
for yy in $listSI |
201 |
do |
202 |
for ss in $listS |
203 |
do |
204 |
xx=${yy}$ss |
205 |
comp_1fld "$zz" $xx $xx $fil1 $fil2 |
206 |
done |
207 |
done |
208 |
echo 'Minimum match= ' $gMin |
209 |
exit |
210 |
fi |
211 |
|
212 |
if test $flag = 'I' |
213 |
then |
214 |
zz='MON thSI_' |
215 |
for yy in $listI |
216 |
do |
217 |
for ss in $listH |
218 |
do |
219 |
xx=${yy}$ss |
220 |
comp_1fld "$zz" $xx $xx $fil1 $fil2 |
221 |
done |
222 |
done |
223 |
echo 'Minimum match= ' $gMin |
224 |
exit |
225 |
fi |
226 |
|
227 |
if test $flag = 'L' |
228 |
then |
229 |
zz='MON land_' |
230 |
for yy in $listL |
231 |
do |
232 |
for ss in $listZ |
233 |
do |
234 |
xx=${yy}$ss |
235 |
comp_1fld "$zz" $xx $xx $fil1 $fil2 |
236 |
done |
237 |
done |
238 |
echo 'Minimum match= ' $gMin |
239 |
exit |
240 |
fi |
241 |
|
242 |
if test $flag = 'M' |
243 |
then |
244 |
listM='StrmIc' |
245 |
zz='STREAMICE_' |
246 |
listN='FP_ERR' |
247 |
for yy in $listM |
248 |
do |
249 |
for ss in $listN |
250 |
do |
251 |
xx=$ss |
252 |
comp_1fld "$zz" $xx $yy $fil1 $fil2 |
253 |
done |
254 |
done |
255 |
echo 'Minimum match= ' $gMin |
256 |
exit |
257 |
fi |
258 |
|
259 |
if test $flag = 'ad' |
260 |
then |
261 |
zz=' ADM ' |
262 |
#- with old ADM output: |
263 |
# zz=' ADM precision_derivative_' |
264 |
echo $fil1 ' output ADM:' |
265 |
grep "$zz" $fil1 | sed "s/.*$zz/ /" |
266 |
echo $fil2 ' output ADM:' |
267 |
grep "$zz" $fil2 | sed "s/.*$zz/ /" |
268 |
for yy in $listAD |
269 |
do |
270 |
case $yy in |
271 |
'Cost') xx='ref_cost_function' ;; |
272 |
'AdGrd') xx='adjoint_gradient' ;; |
273 |
'FDGrd') xx='finite-diff_grad' ;; |
274 |
*) xx=$yy ;; |
275 |
esac |
276 |
for ss in 'result' |
277 |
do |
278 |
comp_1fld "$zz" $xx $yy $fil1 $fil2 |
279 |
done |
280 |
done |
281 |
echo 'Minimum match= ' $gMin |
282 |
exit |
283 |
fi |
284 |
|
285 |
if test $flag = 'tl' |
286 |
then |
287 |
zz=' TLM ' |
288 |
echo $fil1 ' output TLM:' |
289 |
grep "$zz" $fil1 | sed "s/.*$zz/ /" |
290 |
echo $fil2 ' output TLM:' |
291 |
grep "$zz" $fil2 | sed "s/.*$zz/ /" |
292 |
for yy in $listTL |
293 |
do |
294 |
case $yy in |
295 |
'tlCst') xx='ref_cost_function' ;; |
296 |
'tlGrd') xx='tangent-lin_grad' ;; |
297 |
'fwGrd') xx='finite-diff_grad' ;; |
298 |
*) xx=$yy ;; |
299 |
esac |
300 |
for ss in 'result' |
301 |
do |
302 |
comp_1fld "$zz" $xx $yy $fil1 $fil2 |
303 |
done |
304 |
done |
305 |
echo 'Minimum match= ' $gMin |
306 |
exit |
307 |
fi |
308 |
|
309 |
if [ $flag -ge 1 -a $flag -le 9 ] |
310 |
then |
311 |
zz='MON trcstat_' |
312 |
if test $kAd = 1 ; then zz='MON ad_trcstat_' ; fi |
313 |
it=1 |
314 |
while [ $it -le $flag ] |
315 |
do |
316 |
yy='ptracer0'$it |
317 |
if test $kAd = 1 ; then yy='ad'$yy ; fi |
318 |
for ss in $listS |
319 |
do |
320 |
xx=${yy}$ss |
321 |
comp_1fld "$zz" $xx $xx $fil1 $fil2 |
322 |
done |
323 |
it=`expr $it + 1` |
324 |
done |
325 |
fi |
326 |
|
327 |
echo 'Minimum match= ' $gMin |
328 |
exit |