author | A.M. Thurnherr <athurnherr@yahoo.com> |
Wed, 13 May 2015 21:30:27 +0000 | |
changeset 35 | 3d769eee8c4f |
parent 33 | dd5b67a41791 |
permissions | -rwxr-xr-x |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
1 |
#!/usr/bin/perl |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
2 |
#====================================================================== |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
3 |
# L A D C P I N T S H |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
4 |
# doc: Thu Oct 14 21:22:50 2010 |
35 | 5 |
# dlm: Wed May 13 19:47:05 2015 |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
6 |
# (c) 2010 A.M. Thurnherr & E. Firing |
35 | 7 |
# uE-Info: 61 30 NIL 0 0 72 0 2 4 NIL ofnI |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
8 |
#====================================================================== |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
9 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
10 |
$antsSummary = 'integrate LADCP shear'; |
35 | 11 |
$antsMinLibVersion = 6.0; |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
12 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
13 |
# NOTES: |
6 | 14 |
# - the core of this code is a simplified version of avg_sh.m and |
15 |
# int_sh.m written by Eric Firing |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
16 |
# - comments beginning with ## are taken from Eric's code |
6 | 17 |
# - cubic velocity interpolation across PPI gap from Eric's code has |
18 |
# not been implemented (yet?) |
|
19 |
# - low-pass-filtered shear code has not yet been implemented |
|
20 |
# - currently, shear gaps are assumed to have vanishing shear; |
|
7 | 21 |
# better solutions are possible |
22 |
# - elapsed time is simply copied from shear elapsed time (i.e. |
|
23 |
# it is not interpolated onto the new depth grid) |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
24 |
|
6 | 25 |
# WEIRDNESSES IN Eric's CODE: |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
26 |
# - in Eric's [avg_sh.m] the calculation of output shear stddev incorrectly assumes that the 4th column |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
27 |
# in the shear profile is stddev, rather than variance. However, as far as I can tell, this output |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
28 |
# is not used anywhere in Eric's code |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
29 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
30 |
# HISTORY: |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
31 |
# Oct 14, 2010: - created |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
32 |
# Oct 20, 2010: - first working version |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
33 |
# Oct 23, 2010: - added support for -b) |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
34 |
# Oct 24, 2010: - fix spuriously small variances that can occur for BT velocities based on very small |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
35 |
# samples (i.e. primarily when chosing a small -r) |
1 | 36 |
# Dec 9, 2010: - allowed for empty BT file |
2 | 37 |
# Feb 16, 2011: - BUG: gaps in shear data were not handled correctly in baroclinic solution |
3 | 38 |
# Jul 7, 2011: - added -m |
5 | 39 |
# Jul 19, 2011: - added shear sigma output for shear inversion |
40 |
# - BUG: dc/uc v component was not correctly referenced |
|
6 | 41 |
# Jul 24, 2011: - BUG: BT constraint was erroneously assumed to be available for dc,uc only, if it |
42 |
# was available for <dc,uc> combo profile |
|
43 |
# Jul 25, 2011: - BUG: nan in either of ul/dl u_z.sig caused combined u_z.sig to be nan, too |
|
44 |
# Jul 27, 2011: - removed code related to smoothed shear |
|
45 |
# - replaced -r by -n |
|
46 |
# - removed shear sigma output |
|
47 |
# - replaced ndata by nsamp |
|
48 |
# - removed -w (Eric's way of dealing with dc/uc temporal variability) |
|
7 | 49 |
# Feb 19, 2012: - added processing of elapsed time |
50 |
# - adapted to new shear file layout (nsamp instead of nshear) |
|
51 |
# - BUG: uplooker data was not used for downcasts and and only partially for combo data |
|
11 | 52 |
# May 16, 2012: - adapted to ANTSlib V5.0 |
15 | 53 |
# May 25, 2012: - added code to read LDEO_IX bottom-track data |
16 | 54 |
# Jun 14, 2012: - noticed that -b now works also with LDEO SADCP files :-); renamed -b option to -r |
20 | 55 |
# Jun 5, 2013: - BUG: code bombed when either UC or DC was missing |
56 |
# Jun 28, 2013: - adapated to new :: convention |
|
57 |
# - make sure LADCP DUL metadata are dealt with correctly |
|
58 |
# Jul 12, 2013: - clarified -u usage with better messages |
|
25
91bd907db97f
before debugging weird nsamp problem
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
20
diff
changeset
|
59 |
# Mar 20, 2014: - fiddled while debugging [LADCPproc] |
29 | 60 |
# Jun 7, 2014: - improved error messages |
35 | 61 |
# May 13, 2015: - belatedly adapted to ANTS V6 (library versioning) |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
62 |
|
11 | 63 |
($ANTS) = (`which ANTSlib` =~ m{^(.*)/[^/]*$}); |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
64 |
require "$ANTS/ants.pl"; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
65 |
require "$ANTS/libstats.pl"; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
66 |
|
16 | 67 |
&antsUsage('dm:n:r:s:w:u:',0, |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
68 |
'[-d)ebug]', |
16 | 69 |
'[-r)eference with <BT or SADCP file> [-m)in <samp[10]>]]', |
20 | 70 |
'[secondary -u)plooker <shear file>]', |
6 | 71 |
'[min -n) <shear samp[10]>]', |
72 |
'[output -s)hear-pro <file>]', |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
73 |
'[LADCP shear file]'); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
74 |
|
16 | 75 |
croak("$0: -m meaningless without -r\n") |
76 |
if defined($opt_m) && !defined($opt_r); |
|
3 | 77 |
|
15 | 78 |
&antsCardOpt(\$opt_n,10); # minimum number of samples for shear |
79 |
$minBTsamp = &antsCardOpt($opt_m,10); # minimum number of samples for BT data |
|
1 | 80 |
|
16 | 81 |
&antsFileOpt($opt_r); # reference velocity file |
1 | 82 |
|
83 |
&antsFileOpt($opt_u); # UL shear file |
|
20 | 84 |
if (defined($opt_u)) { |
85 |
open(ULF,$opt_u) || croak("$opt_u: $!\n"); |
|
86 |
%UL_P = &antsFileParams(ULF); |
|
87 |
} |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
88 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
89 |
#====================================================================== |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
90 |
# Step 1: Read and Average Shear Data |
6 | 91 |
# - depth bins with less than $opt_n values are blanked out |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
92 |
#====================================================================== |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
93 |
|
6 | 94 |
sub wavg_sig(@) |
95 |
{ |
|
96 |
my($sumSq) = my($n) = 0; |
|
97 |
for (my($i)=0; $i<$#_; $i+=2) { |
|
98 |
next unless numberp($_[$i+1]); |
|
99 |
$sumSq += $_[$i] * $_[$i+1]**2; |
|
100 |
$n += $_[$i]; |
|
101 |
} |
|
102 |
return ($n>0) ? sqrt($sumSq/$n) : nan; |
|
103 |
} |
|
104 |
||
105 |
||
20 | 106 |
#-------------------- |
107 |
# Handle Metadata |
|
108 |
#-------------------- |
|
109 |
||
110 |
if (%UL_P) { |
|
111 |
croak("$0: inconsistent vertical resolution\n") |
|
112 |
unless ($P{LADCPproc::vertical_resolution} == $UL_P{LADCPproc::vertical_resolution}); |
|
113 |
||
114 |
unless ($P{LADCPproc::bin_length} == $UL_P{LADCPproc::bin_length}) { |
|
115 |
&antsInfo("Warnining: different DL/UL bin lengths; derived spectra cannot be corrected"); |
|
116 |
&antsAddParams('LADCPproc::bin_length','', |
|
117 |
'LADCPproc::DL_bin_length',$P{LADCPproc::bin_length}, |
|
118 |
'LADCPproc::UL_bin_length',$UL_P{LADCPproc::bin_length}); |
|
119 |
} |
|
120 |
} |
|
121 |
||
122 |
$depthF = fnrNoErr('depth'); # layout of [LADCPproc] output |
|
123 |
unless (defined($depthF)) { |
|
124 |
if (defined($opt_u)) { |
|
125 |
croak("No 'depth' field in primary shear file (extraneous -u?)\n"); |
|
126 |
} else { |
|
127 |
croak("No 'depth' field in primary shear file\n"); |
|
128 |
} |
|
129 |
} |
|
130 |
||
7 | 131 |
$dc_nshF = fnrNoErr('dc_nshear'); |
132 |
$dc_nshF = fnr('dc_nsamp') unless defined($dc_nshF); |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
133 |
$dc_uzF = fnr('dc_u_z'); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
134 |
$dc_uzsF = fnrNoErr('dc_u_z.sig'); |
7 | 135 |
$dc_uzsF = fnr('dc_u_z_sig') unless defined($dc_uzsF); |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
136 |
$dc_vzF = fnr('dc_v_z'); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
137 |
$dc_vzsF = fnrNoErr('dc_v_z.sig'); |
7 | 138 |
$dc_vzsF = fnr('dc_v_z_sig') unless defined($dc_vzsF); |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
139 |
$dc_wzF = fnr('dc_w_z'); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
140 |
$dc_wzsF = fnrNoErr('dc_w_z.sig'); |
7 | 141 |
$dc_wzsF = fnr('dc_w_z_sig') unless defined($dc_wzsF); |
142 |
$dc_elapsedF = fnr('dc_elapsed'); |
|
143 |
$uc_nshF = fnrNoErr('uc_nshear'); |
|
144 |
$uc_nshF = fnr('uc_nsamp') unless defined($uc_nshF); |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
145 |
$uc_uzF = fnr('uc_u_z'); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
146 |
$uc_uzsF = fnrNoErr('uc_u_z.sig'); |
7 | 147 |
$uc_uzsF = fnr('uc_u_z_sig') unless defined($uc_uzsF); |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
148 |
$uc_vzF = fnr('uc_v_z'); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
149 |
$uc_vzsF = fnrNoErr('uc_v_z.sig'); |
7 | 150 |
$uc_vzsF = fnr('uc_v_z_sig') unless defined($uc_vzsF); |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
151 |
$uc_wzF = fnr('uc_w_z'); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
152 |
$uc_wzsF = fnrNoErr('uc_w_z.sig'); |
7 | 153 |
$uc_wzsF = fnr('uc_w_z_sig') unless defined($uc_wzsF); |
154 |
$uc_elapsedF = fnr('uc_elapsed'); |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
155 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
156 |
my(@gaps); my($curGap) = 0; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
157 |
|
1 | 158 |
for (my($r)=0; &antsIn(); $r++) { |
159 |
my(@UL_); |
|
160 |
if (defined($opt_u)) { |
|
5 | 161 |
@UL_ = &antsFileIn(ULF); # read UL shear data |
162 |
undef($opt_u) unless (@UL_); # cheap trick |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
163 |
} |
20 | 164 |
|
1 | 165 |
$depth[$r] = $ants_[0][$depthF]; ## depth grid values |
18 | 166 |
croak("$opt_u: inconsistent depth record $r (DL: $depth[$r]; UL: $UL_[$depthF])\n") |
1 | 167 |
if defined($opt_u) && ($UL_[$depthF] != $depth[$r]); |
168 |
||
6 | 169 |
$dc_nsamp = $ants_[0][$dc_nshF]; # number of shear samples |
170 |
$uc_nsamp = $ants_[0][$uc_nshF]; |
|
1 | 171 |
if (defined($opt_u)) { |
6 | 172 |
$dl_nsamp = $dc_nsamp + $uc_nsamp; |
173 |
$dc_nsamp += $UL_[$dc_nshF]; |
|
174 |
$uc_nsamp += $UL_[$uc_nshF]; |
|
25
91bd907db97f
before debugging weird nsamp problem
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
20
diff
changeset
|
175 |
$ul_nsamp = $dc_nsamp + $uc_nsamp; |
1 | 176 |
} |
25
91bd907db97f
before debugging weird nsamp problem
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
20
diff
changeset
|
177 |
|
91bd907db97f
before debugging weird nsamp problem
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
20
diff
changeset
|
178 |
$dc_nsamp[$r] = $dc_nsamp; # save for each record |
6 | 179 |
$uc_nsamp[$r] = $uc_nsamp; |
180 |
$nsamp[$r] = $dc_nsamp + $uc_nsamp; |
|
181 |
if (defined($opt_u)) { |
|
182 |
$ul_nsamp[$r] = $ul_nsamp; |
|
183 |
$dl_nsamp[$r] = $dl_nsamp; |
|
184 |
} |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
185 |
|
5 | 186 |
if (defined($opt_u)) { # dual-head instrument |
6 | 187 |
if ($dc_nsamp > 0) { # downcast shear |
188 |
my($DLf) = $ants_[0][$dc_nshF] / $dc_nsamp; |
|
189 |
my($ULf) = $UL_[$dc_nshF] / $dc_nsamp; |
|
7 | 190 |
if ($DLf>0 && $ULf>0) { |
1 | 191 |
$dc_uz[$r] = $DLf*$ants_[0][$dc_uzF] + $ULf*$UL_[$dc_uzF]; |
192 |
$dc_vz[$r] = $DLf*$ants_[0][$dc_vzF] + $ULf*$UL_[$dc_vzF]; |
|
193 |
$dc_wz[$r] = $DLf*$ants_[0][$dc_wzF] + $ULf*$UL_[$dc_wzF]; |
|
7 | 194 |
$dc_elapsed[$r] = $DLf*$ants_[0][$dc_elapsedF] + $ULf*$UL_[$dc_elapsedF]; |
1 | 195 |
} elsif ($DLf > 0) { |
196 |
$dc_uz[$r] = $ants_[0][$dc_uzF]; |
|
197 |
$dc_vz[$r] = $ants_[0][$dc_vzF]; |
|
198 |
$dc_wz[$r] = $ants_[0][$dc_wzF]; |
|
7 | 199 |
$dc_elapsed[$r] = $ants_[0][$dc_elapsedF]; |
1 | 200 |
} else { |
201 |
$dc_uz[$r] = $UL_[$dc_uzF]; |
|
202 |
$dc_vz[$r] = $UL_[$dc_vzF]; |
|
203 |
$dc_wz[$r] = $UL_[$dc_wzF]; |
|
7 | 204 |
$dc_elapsed[$r] = $UL_[$dc_elapsedF]; |
1 | 205 |
} |
206 |
} else { |
|
7 | 207 |
$dc_uz[$r] = $dc_vz[$r] = $dc_wz[$r] = $dc_elapsed[$r] = nan; |
1 | 208 |
} |
6 | 209 |
if ($uc_nsamp > 0) { # upcast shear |
210 |
my($DLf) = $ants_[0][$uc_nshF] / $uc_nsamp; |
|
211 |
my($ULf) = $UL_[$uc_nshF] / $uc_nsamp; |
|
1 | 212 |
if ($DLf>0 && $Ulf>0) { |
213 |
$uc_uz[$r] = $DLf*$ants_[0][$uc_uzF] + $ULf*$UL_[$uc_uzF]; |
|
214 |
$uc_vz[$r] = $DLf*$ants_[0][$uc_vzF] + $ULf*$UL_[$uc_vzF]; |
|
215 |
$uc_wz[$r] = $DLf*$ants_[0][$uc_wzF] + $ULf*$UL_[$uc_wzF]; |
|
7 | 216 |
$uc_elapsed[$r] = $DLf*$ants_[0][$uc_elapsedF] + $ULf*$UL_[$uc_elapsedF]; |
1 | 217 |
} elsif ($DLf > 0) { |
218 |
$uc_uz[$r] = $ants_[0][$uc_uzF]; |
|
219 |
$uc_vz[$r] = $ants_[0][$uc_vzF]; |
|
220 |
$uc_wz[$r] = $ants_[0][$uc_wzF]; |
|
7 | 221 |
$uc_elapsed[$r] = $ants_[0][$uc_elapsedF]; |
1 | 222 |
} else { |
223 |
$uc_uz[$r] = $UL_[$uc_uzF]; |
|
224 |
$uc_vz[$r] = $UL_[$uc_vzF]; |
|
225 |
$uc_wz[$r] = $UL_[$uc_wzF]; |
|
7 | 226 |
$uc_elapsed[$r] = $UL_[$uc_elapsedF]; |
1 | 227 |
} |
228 |
} else { |
|
7 | 229 |
$uc_uz[$r] = $uc_vz[$r] = $uc_wz[$r] = $uc_elapsed[$r] = nan; |
1 | 230 |
} |
5 | 231 |
} else { # downlooker only |
6 | 232 |
if ($dc_nsamp > 0) { # downcast shear |
1 | 233 |
$dc_uz[$r] = $ants_[0][$dc_uzF]; |
234 |
$dc_vz[$r] = $ants_[0][$dc_vzF]; |
|
235 |
$dc_wz[$r] = $ants_[0][$dc_wzF]; |
|
7 | 236 |
$dc_elapsed[$r] = $ants_[0][$dc_elapsedF]; |
1 | 237 |
} else { |
7 | 238 |
$dc_uz[$r] = $dc_vz[$r] = $dc_wz[$r] = $dc_elapsed[$r] = nan; |
1 | 239 |
} |
6 | 240 |
if ($uc_nsamp > 0) { # upcast shear |
1 | 241 |
$uc_uz[$r] = $ants_[0][$uc_uzF]; |
242 |
$uc_vz[$r] = $ants_[0][$uc_vzF]; |
|
243 |
$uc_wz[$r] = $ants_[0][$uc_wzF]; |
|
7 | 244 |
$uc_elapsed[$r] = $ants_[0][$uc_elapsedF]; |
1 | 245 |
} else { |
7 | 246 |
$uc_uz[$r] = $uc_vz[$r] = $uc_wz[$r] = $uc_elapsed[$r] = nan; |
1 | 247 |
} |
248 |
} |
|
249 |
||
6 | 250 |
if ($nsamp[$r] > 0) { |
251 |
my($dcf) = $dc_nsamp / $nsamp[$r]; |
|
252 |
my($ucf) = $uc_nsamp / $nsamp[$r]; |
|
253 |
if ($dcf>0 && $ucf>0) { |
|
254 |
$uz[$r] = $dcf*$dc_uz[$r] + $ucf*$uc_uz[$r]; |
|
255 |
$vz[$r] = $dcf*$dc_vz[$r] + $ucf*$uc_vz[$r]; |
|
256 |
$wz[$r] = $dcf*$dc_wz[$r] + $ucf*$uc_wz[$r]; |
|
7 | 257 |
$elapsed[$r] = $dcf*$dc_elapsed[$r] + $ucf*$uc_elapsed[$r]; |
6 | 258 |
} elsif ($dcf > 0) { |
1 | 259 |
$uz[$r] = $dc_uz[$r]; |
260 |
$vz[$r] = $dc_vz[$r]; |
|
261 |
$wz[$r] = $dc_wz[$r]; |
|
7 | 262 |
$elapsed[$r] = $dc_elapsed[$r]; |
6 | 263 |
} else { |
1 | 264 |
$uz[$r] = $uc_uz[$r]; |
265 |
$vz[$r] = $uc_vz[$r]; |
|
266 |
$wz[$r] = $uc_wz[$r]; |
|
7 | 267 |
$elapsed[$r] = $uc_elapsed[$r]; |
6 | 268 |
} |
269 |
} else { |
|
7 | 270 |
$uz[$r] = $vz[$r] = $wz[$r] = $elapsed[$r] = nan; |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
271 |
} |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
272 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
273 |
if (numberp($uz[$r]) && $curGap>0) { # end of gap |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
274 |
push(@gaps,$curGap) unless ($r == $curGap); # do not report "gap" at beginning of profile |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
275 |
# print(STDERR "$curGap-gap at $depth[$r]m\n"); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
276 |
$curGap = 0; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
277 |
} elsif (!numberp($uz[$r])) { # currently in gap |
6 | 278 |
# print(STDERR "in gap at $depth[$r]m (nsamp = $nsamp[$r], $dc_nsamp,$uc_nsamp)\n"); |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
279 |
$curGap++; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
280 |
} |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
281 |
|
6 | 282 |
if ($nsamp[$r] > 0) { |
1 | 283 |
if (defined($opt_u)) { |
6 | 284 |
$uzsig[$r] = wavg_sig($ants_[0][$dc_nshF],$ants_[0][$dc_uzsF], |
285 |
$UL_[$dc_nshF], $UL_[$dc_uzsF], |
|
286 |
$ants_[0][$uc_nshF],$ants_[0][$uc_uzsF], |
|
287 |
$UL_[$uc_nshF], $UL_[$uc_uzsF]); |
|
288 |
$vzsig[$r] = wavg_sig($ants_[0][$dc_nshF],$ants_[0][$dc_vzsF], |
|
289 |
$UL_[$dc_nshF], $UL_[$dc_vzsF], |
|
290 |
$ants_[0][$uc_nshF],$ants_[0][$uc_vzsF], |
|
291 |
$UL_[$uc_nshF], $UL_[$uc_vzsF]); |
|
292 |
$wzsig[$r] = wavg_sig($ants_[0][$dc_nshF],$ants_[0][$dc_wzsF], |
|
293 |
$UL_[$dc_nshF], $UL_[$dc_wzsF], |
|
294 |
$ants_[0][$uc_nshF],$ants_[0][$uc_wzsF], |
|
295 |
$UL_[$uc_nshF], $UL_[$uc_wzsF]); |
|
296 |
} else { # DL only |
|
297 |
$uzsig[$r] = wavg_sig($ants_[0][$dc_nshF],$ants_[0][$dc_uzsF], |
|
298 |
$ants_[0][$uc_nshF],$ants_[0][$uc_uzsF]); |
|
299 |
$vzsig[$r] = wavg_sig($ants_[0][$dc_nshF],$ants_[0][$dc_vzsF], |
|
300 |
$ants_[0][$uc_nshF],$ants_[0][$uc_vzsF]); |
|
301 |
$wzsig[$r] = wavg_sig($ants_[0][$dc_nshF],$ants_[0][$dc_wzsF], |
|
302 |
$ants_[0][$uc_nshF],$ants_[0][$uc_wzsF]); |
|
1 | 303 |
} |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
304 |
} else { |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
305 |
$uzsig[$r] = $vzsig[$r] = $wzsig[$r] = nan; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
306 |
} |
5 | 307 |
|
6 | 308 |
if ($dc_nsamp > 0) { # same calc for downcast only |
5 | 309 |
if (defined($opt_u)) { |
6 | 310 |
$dc_uzsig[$r] = wavg_sig($ants_[0][$dc_nshF],$ants_[0][$dc_uzsF], |
311 |
$UL_[$dc_nshF], $UL_[$dc_uzsF]); |
|
312 |
$dc_vzsig[$r] = wavg_sig($ants_[0][$dc_nshF],$ants_[0][$dc_vzsF], |
|
313 |
$UL_[$dc_nshF], $UL_[$dc_vzsF]); |
|
314 |
$dc_wzsig[$r] = wavg_sig($ants_[0][$dc_nshF],$ants_[0][$dc_wzsF], |
|
315 |
$UL_[$dc_nshF], $UL_[$dc_wzsF]); |
|
5 | 316 |
} else { |
317 |
$dc_uzsig[$r] = $ants_[0][$dc_uzsF]; |
|
318 |
$dc_vzsig[$r] = $ants_[0][$dc_vzsF]; |
|
319 |
$dc_wzsig[$r] = $ants_[0][$dc_wzsF]; |
|
320 |
} |
|
321 |
} else { |
|
322 |
$uzsig[$r] = $vzsig[$r] = $wzsig[$r] = nan; |
|
323 |
} |
|
324 |
||
6 | 325 |
if ($uc_nsamp > 0) { # same calc for upcast only |
5 | 326 |
if (defined($opt_u)) { |
6 | 327 |
$uc_uzsig[$r] = wavg_sig($ants_[0][$uc_nshF],$ants_[0][$uc_uzsF], |
328 |
$UL_[$uc_nshF], $UL_[$uc_uzsF]); |
|
329 |
$uc_vzsig[$r] = wavg_sig($ants_[0][$uc_nshF],$ants_[0][$uc_vzsF], |
|
330 |
$UL_[$uc_nshF], $UL_[$uc_vzsF]); |
|
331 |
$uc_wzsig[$r] = wavg_sig($ants_[0][$uc_nshF],$ants_[0][$uc_wzsF], |
|
332 |
$UL_[$uc_nshF], $UL_[$uc_wzsF]); |
|
5 | 333 |
} else { |
334 |
$uc_uzsig[$r] = $ants_[0][$uc_uzsF]; |
|
335 |
$uc_vzsig[$r] = $ants_[0][$uc_vzsF]; |
|
336 |
$uc_wzsig[$r] = $ants_[0][$uc_wzsF]; |
|
337 |
} |
|
338 |
} else { |
|
339 |
$uzsig[$r] = $vzsig[$r] = $wzsig[$r] = nan; |
|
340 |
} |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
341 |
} |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
342 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
343 |
if (@gaps) { |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
344 |
&antsAddParams('shear_gaps',"@gaps"); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
345 |
print(STDERR "shear gaps: @gaps\n"); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
346 |
} else { |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
347 |
&antsAddParams('shear_gaps',0); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
348 |
} |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
349 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
350 |
#=============================================================================== |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
351 |
# Step 2: Low-Pass filter high-quality shear data; not yet implemented |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
352 |
#=============================================================================== |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
353 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
354 |
#====================================================================== |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
355 |
# Step 3: Integrate Shear |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
356 |
# - z(vel) = z(sh) + DZ/2 |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
357 |
#====================================================================== |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
358 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
359 |
my($DZ) = $depth[1] - $depth[0]; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
360 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
361 |
for (my($r)=my($u)=my($v)=my($w)=my($dc_u)=my($dc_v)=my($dc_w)=my($uc_u)=my($uc_v)=my($uc_w)=0; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
362 |
$r<@depth; $r++) { |
6 | 363 |
if ($nsamp[$r] >= $opt_n) { |
364 |
$u = $u[$r] = $u + $DZ*$uz[$r]; |
|
365 |
$v = $v[$r] = $v + $DZ*$vz[$r]; |
|
366 |
$w = $w[$r] = $w + $DZ*$wz[$r]; |
|
367 |
} |
|
368 |
if ($dc_nsamp[$r] >= $opt_n) { |
|
369 |
$dc_u = $dc_u[$r] = $dc_u + $DZ*$dc_uz[$r]; |
|
370 |
$dc_v = $dc_v[$r] = $dc_v + $DZ*$dc_vz[$r]; |
|
371 |
$dc_w = $dc_w[$r] = $dc_w + $DZ*$dc_wz[$r]; |
|
372 |
} |
|
373 |
if ($uc_nsamp[$r] >= $opt_n) { |
|
374 |
$uc_u = $uc_u[$r] = $uc_u + $DZ*$uc_uz[$r]; |
|
375 |
$uc_v = $uc_v[$r] = $uc_v + $DZ*$uc_vz[$r]; |
|
376 |
$uc_w = $uc_w[$r] = $uc_w + $DZ*$uc_wz[$r]; |
|
377 |
} |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
378 |
} |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
379 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
380 |
#====================================================================== |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
381 |
# Step 4: Reference Velocities |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
382 |
#====================================================================== |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
383 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
384 |
my($refU,$refV,$refW,$dc_refU,$dc_refV,$dc_refW,$uc_refU,$uc_refV,$uc_refW); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
385 |
|
25
91bd907db97f
before debugging weird nsamp problem
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
20
diff
changeset
|
386 |
if (defined($opt_r)) { # reference using velocity profile |
16 | 387 |
print(STDERR "Loading reference-velocity data from $opt_r...\n") |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
388 |
if ($opt_d); |
16 | 389 |
open(BTF,$opt_r) || croak("$opt_r: $!\n"); |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
390 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
391 |
my(@BTL) = &antsFileLayout(BTF); |
15 | 392 |
if (@BTL) { # valid ANTS file |
393 |
my($BTdF,$BTndF,$BTuF,$BTvF,$BTwF,$BTusF,$BTvsF,$BTwsF); |
|
394 |
for (my($f)=0; $f<@BTL; $f++) { |
|
395 |
$BTdF = $f if ($BTL[$f] eq 'depth'); |
|
396 |
$BTuF = $f if ($BTL[$f] eq 'u'); |
|
397 |
$BTvF = $f if ($BTL[$f] eq 'v'); |
|
398 |
$BTwF = $f if ($BTL[$f] eq 'w'); |
|
399 |
$BTusF = $f if ($BTL[$f] eq 'u.sig'); |
|
400 |
$BTvsF = $f if ($BTL[$f] eq 'v.sig'); |
|
401 |
$BTwsF = $f if ($BTL[$f] eq 'w.sig'); |
|
402 |
$BTndF = $f if ($BTL[$f] eq 'nsamp'); |
|
403 |
$BTerrF= $f if ($BTL[$f] eq 'err'); |
|
404 |
} |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
405 |
|
15 | 406 |
if (defined($BTdF) && defined($BTuF) && # from LADCPproc |
407 |
defined($BTvF) && defined($BTwF) && |
|
408 |
defined($BTusF) && defined($BTvsF) && |
|
409 |
defined($BTwsF) && defined($BTndF)) { |
|
410 |
while (my(@BTr) = &antsFileIn(BTF)) { |
|
411 |
my($gi) = int($BTr[$BTdF] / $DZ); |
|
412 |
next unless ($BTr[$BTndF] >= $minBTsamp); |
|
413 |
$BT_nsamp[$gi] = $BTr[$BTndF]; |
|
414 |
$BT_u[$gi] = $BTr[$BTuF]; |
|
415 |
$BT_v[$gi] = $BTr[$BTvF]; |
|
416 |
$BT_w[$gi] = $BTr[$BTwF]; |
|
417 |
$BT_u_var[$gi] = $BTr[$BTusF]**2; |
|
418 |
$BT_v_var[$gi] = $BTr[$BTvsF]**2; |
|
419 |
$BT_w_var[$gi] = $BTr[$BTwsF]**2; |
|
420 |
} |
|
421 |
&fixLowSampStat(\@BT_u_var,@BT_nsamp); # remove spurious small variances |
|
422 |
&fixLowSampStat(\@BT_v_var,@BT_nsamp); |
|
423 |
&fixLowSampStat(\@BT_w_var,@BT_nsamp); |
|
424 |
} elsif (defined($BTdF) && defined($BTuF) && # LDEO_IX ANTS format |
|
425 |
defined($BTvF) && defined($BTerrF)) { |
|
29 | 426 |
croak("$0: -m not supported for LDEO_IX output\n") |
15 | 427 |
if defined($opt_m); |
428 |
while (my(@BTr) = &antsFileIn(BTF)) { |
|
429 |
my($gi) = int($BTr[$BTdF] / $DZ); |
|
430 |
$BT_u[$gi] = $BTr[$BTuF]; |
|
431 |
$BT_v[$gi] = $BTr[$BTvF]; |
|
432 |
$BT_u_var[$gi] = $BTr[$BTerrF]**2; |
|
433 |
$BT_v_var[$gi] = $BTr[$BTerrF]**2; |
|
434 |
# print(STDERR "$gi $BT_u[$gi] $BT_v[$gi] $BT_u_var[$gi] $BT_v_var[$gi]\n"); |
|
435 |
} |
|
436 |
} else { |
|
16 | 437 |
croak("$opt_r: not a valid reference-velocity file (ANTS format)\n"); |
15 | 438 |
} |
439 |
} else { # non-ANTS file (LDEO_IX assumed) |
|
29 | 440 |
croak("$0: -m not supported for LDEO_IX output\n") |
15 | 441 |
if defined($opt_m); |
442 |
while (<BTF>) { |
|
443 |
last if /^Columns\s+=\s+z:u:v:err/; |
|
444 |
} |
|
16 | 445 |
croak("$opt_r: not a valid reference-velocity file (non-ANTS format)\n") |
15 | 446 |
unless /^Columns\s+=\s+z:u:v:err/; |
447 |
while (<BTF>) { |
|
448 |
my($depth,$u,$v,$err) = split; |
|
449 |
croak("$0: cannot handle non-numeric BT data (implementation restriction)\n") |
|
450 |
unless numberp($depth) && numberp($u) && numberp($v) && numberp($err); |
|
451 |
my($gi) = int($depth / $DZ); |
|
452 |
$BT_u[$gi] = $u; |
|
453 |
$BT_v[$gi] = $v; |
|
454 |
$BT_u_var[$gi] = $err**2; |
|
455 |
$BT_v_var[$gi] = $err**2; |
|
456 |
# print(STDERR "$gi $BT_u[$gi] $BT_v[$gi] $BT_u_var[$gi] $BT_v_var[$gi]\n"); |
|
457 |
} |
|
458 |
} |
|
459 |
close(BTF); |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
460 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
461 |
my($sumU,$sumV,$sumW,$dc_sumU,$dc_sumV,$dc_sumW, # average integrated-shear velocities |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
462 |
$uc_sumU,$uc_sumV,$uc_sumW); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
463 |
my($nSumVel,$dc_nSumVel,$uc_nSumVel); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
464 |
my($wSumBTu,$wSumBTv,$wSumBTw); # weighted sums of BT-ref'd velocities |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
465 |
my($dc_wSumBTu,$dc_wSumBTv,$dc_wSumBTw); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
466 |
my($uc_wSumBTu,$uc_wSumBTv,$uc_wSumBTw); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
467 |
my($sumVarBTu,$sumVarBTv,$sumVarBTw); # sum of variances of BT-ref'd vels |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
468 |
my($dc_sumVarBTu,$dc_sumVarBTv,$dc_sumVarBTw); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
469 |
my($uc_sumVarBTu,$uc_sumVarBTv,$uc_sumVarBTw); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
470 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
471 |
for (my($r)=0; $r<@depth; $r++) { |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
472 |
if (numberp($BT_u[$r]) && numberp($u[$r])) { |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
473 |
$nSumVel++; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
474 |
$sumU += $u[$r]; $sumV += $v[$r]; $sumW += $w[$r]; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
475 |
$wSumBTu += $BT_u[$r] / $BT_u_var[$r]; $sumVarBTu += 1/$BT_u_var[$r]; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
476 |
$wSumBTv += $BT_v[$r] / $BT_v_var[$r]; $sumVarBTv += 1/$BT_v_var[$r]; |
15 | 477 |
if (@BT_w) { |
478 |
$wSumBTw += $BT_w[$r] / $BT_w_var[$r]; $sumVarBTw += 1/$BT_w_var[$r]; |
|
479 |
} |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
480 |
} |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
481 |
if (numberp($BT_u[$r]) && numberp($dc_u[$r])) { |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
482 |
$dc_nSumVel++; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
483 |
$dc_sumU += $dc_u[$r]; $dc_sumV += $dc_v[$r]; $dc_sumW += $dc_w[$r]; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
484 |
$dc_wSumBTu += $BT_u[$r] / $BT_u_var[$r]; $dc_sumVarBTu += 1/$BT_u_var[$r]; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
485 |
$dc_wSumBTv += $BT_v[$r] / $BT_v_var[$r]; $dc_sumVarBTv += 1/$BT_v_var[$r]; |
15 | 486 |
if (@BT_w) { |
487 |
$dc_wSumBTw += $BT_w[$r] / $BT_w_var[$r]; $dc_sumVarBTw += 1/$BT_w_var[$r]; |
|
488 |
} |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
489 |
} |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
490 |
if (numberp($BT_u[$r]) && numberp($uc_u[$r])) { |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
491 |
$uc_nSumVel++; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
492 |
$uc_sumU += $uc_u[$r]; $uc_sumV += $uc_v[$r]; $uc_sumW += $uc_w[$r]; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
493 |
$uc_wSumBTu += $BT_u[$r] / $BT_u_var[$r]; $uc_sumVarBTu += 1/$BT_u_var[$r]; |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
494 |
$uc_wSumBTv += $BT_v[$r] / $BT_v_var[$r]; $uc_sumVarBTv += 1/$BT_v_var[$r]; |
15 | 495 |
if (@BT_w) { |
496 |
$uc_wSumBTw += $BT_w[$r] / $BT_w_var[$r]; $uc_sumVarBTw += 1/$BT_w_var[$r]; |
|
497 |
} |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
498 |
} |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
499 |
} |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
500 |
|
1 | 501 |
if ($nSumVel > 0) { |
502 |
$refU = $sumU/$nSumVel - $wSumBTu/$sumVarBTu; |
|
503 |
$refV = $sumV/$nSumVel - $wSumBTv/$sumVarBTv; |
|
15 | 504 |
$refW = $sumW/$nSumVel - $wSumBTw/$sumVarBTw if (@BT_w); |
505 |
||
6 | 506 |
if ($dc_nSumVel > 0) { |
507 |
$dc_refU = $dc_sumU/$dc_nSumVel - $dc_wSumBTu/$dc_sumVarBTu; |
|
508 |
$dc_refV = $dc_sumV/$dc_nSumVel - $dc_wSumBTv/$dc_sumVarBTv; |
|
15 | 509 |
$dc_refW = $dc_sumW/$dc_nSumVel - $dc_wSumBTw/$dc_sumVarBTw if (@BT_w); |
6 | 510 |
} else { |
25
91bd907db97f
before debugging weird nsamp problem
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
20
diff
changeset
|
511 |
&antsInfo("$opt_r: insufficient reference-velocity data to constrain DC profile --- baroclinic profile only"); |
6 | 512 |
} |
1 | 513 |
|
6 | 514 |
if ($uc_nSumVel > 0) { |
515 |
$uc_refU = $uc_sumU/$uc_nSumVel - $uc_wSumBTu/$uc_sumVarBTu; |
|
516 |
$uc_refV = $uc_sumV/$uc_nSumVel - $uc_wSumBTv/$uc_sumVarBTv; |
|
15 | 517 |
$uc_refW = $uc_sumW/$uc_nSumVel - $uc_wSumBTw/$uc_sumVarBTw if (@BT_w); |
6 | 518 |
} else { |
25
91bd907db97f
before debugging weird nsamp problem
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
20
diff
changeset
|
519 |
&antsInfo("$opt_r: insufficient reference-velocity data to constrain UC profile --- baroclinic profile only"); |
6 | 520 |
} |
1 | 521 |
} else { |
16 | 522 |
&antsInfo("$opt_r: no valid reference-velocity data --- baroclinic profiles only"); |
1 | 523 |
} |
524 |
} |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
525 |
|
5 | 526 |
unless (defined($refU)) { # no reference velocity => use zero mean |
6 | 527 |
my($sumU,$sumV,$sumW,$nSumVel); |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
528 |
for (my($r)=0; $r<@depth; $r++) { |
2 | 529 |
if (numberp($u[$r])) { |
530 |
$nSumVel++; |
|
15 | 531 |
$sumU += $u[$r]; $sumV += $v[$r]; $sumW += $w[$r] if (@BT_w); |
2 | 532 |
} |
6 | 533 |
} |
15 | 534 |
$refU = $sumU / $nSumVel; $refV = $sumV / $nSumVel; $refW = $sumW / $nSumVel if (@BT_w); |
6 | 535 |
} |
536 |
unless (defined($dc_refU)) { |
|
537 |
my($dc_sumU,$dc_sumV,$dc_sumW,$dc_nSumVel); |
|
538 |
for (my($r)=0; $r<@depth; $r++) { |
|
2 | 539 |
if (numberp($dc_u[$r])) { |
540 |
$dc_nSumVel++; |
|
15 | 541 |
$dc_sumU += $dc_u[$r]; $dc_sumV += $dc_v[$r]; $dc_sumW += $dc_w[$r] if (@BT_w); |
2 | 542 |
} |
6 | 543 |
} |
20 | 544 |
if ($dc_nSumVel) { |
545 |
$dc_refU = $dc_sumU / $dc_nSumVel; $dc_refV = $dc_sumV / $dc_nSumVel; |
|
546 |
$dc_refW = $dc_sumW / $dc_nSumVel if (@BT_w); |
|
547 |
} |
|
6 | 548 |
} |
549 |
unless (defined($uc_refU)) { |
|
550 |
my($uc_sumU,$uc_sumV,$uc_sumW,$uc_nSumVel); |
|
551 |
for (my($r)=0; $r<@depth; $r++) { |
|
2 | 552 |
if (numberp($uc_u[$r])) { |
553 |
$uc_nSumVel++; |
|
15 | 554 |
$uc_sumU += $uc_u[$r]; $uc_sumV += $uc_v[$r]; $uc_sumW += $uc_w[$r] if (@BT_w); |
2 | 555 |
} |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
556 |
} |
20 | 557 |
if ($uc_nSumVel) { |
558 |
$uc_refU = $uc_sumU / $uc_nSumVel; $uc_refV = $uc_sumV / $uc_nSumVel; |
|
559 |
$uc_refW = $uc_sumW / $uc_nSumVel if (@BT_w); |
|
560 |
} |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
561 |
} |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
562 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
563 |
for (my($r)=0; $r<@depth; $r++) { # reference velocities |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
564 |
$u[$r] -= $refU if defined($u[$r]); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
565 |
$v[$r] -= $refV if defined($v[$r]); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
566 |
$w[$r] -= $refW if defined($w[$r]); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
567 |
$dc_u[$r] -= $dc_refU if defined($dc_u[$r]); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
568 |
$dc_v[$r] -= $dc_refV if defined($dc_v[$r]); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
569 |
$dc_w[$r] -= $dc_refW if defined($dc_w[$r]); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
570 |
$uc_u[$r] -= $uc_refU if defined($uc_u[$r]); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
571 |
$uc_v[$r] -= $uc_refV if defined($uc_v[$r]); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
572 |
$uc_w[$r] -= $uc_refW if defined($uc_w[$r]); |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
573 |
} |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
574 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
575 |
#====================================================================== |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
576 |
# Determine X Factor |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
577 |
#====================================================================== |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
578 |
|
20 | 579 |
if ($dc_nSumVel && $uc_nSumVel) { |
580 |
my($first_w,$last_w); |
|
581 |
for (my($r)=0; !defined($first_w) || !defined($last_w); $r++) { |
|
582 |
$first_w = $dc_w[$r] unless defined($first_w); |
|
583 |
$last_w = $uc_w[$r] unless defined($last_w); |
|
584 |
} |
|
585 |
||
586 |
my($X_Factor) = 100 * abs($last_w-$first_w) / sqrt(@depth / $DZ); |
|
587 |
&antsAddParams('X-Factor',$X_Factor); |
|
588 |
printf(STDERR "X-Factor = %.1f\n",$X_Factor); |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
589 |
} |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
590 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
591 |
#====================================================================== |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
592 |
# Output Velocity Profile |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
593 |
#====================================================================== |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
594 |
|
7 | 595 |
@antsNewLayout = ('depth','elapsed','u','v','w','nsamp', |
596 |
'dc_elapsed','dc_u','dc_v','dc_w','dc_nsamp', |
|
597 |
'uc_elapsed','uc_u','uc_v','uc_w','uc_nsamp'); |
|
5 | 598 |
|
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
599 |
for (my($r)=0; $r<@depth; $r++) { |
5 | 600 |
&antsOut($depth[$r]+$DZ/2, |
7 | 601 |
$elapsed[$r],$u[$r],$v[$r],$w[$r],$nsamp[$r], |
602 |
$dc_elapsed[$r],$dc_u[$r],$dc_v[$r],$dc_w[$r],$dc_nsamp[$r], |
|
603 |
$uc_elapsed[$r],$uc_u[$r],$uc_v[$r],$uc_w[$r],$uc_nsamp[$r]); |
|
6 | 604 |
} |
605 |
||
606 |
#====================================================================== |
|
607 |
# Output Averaged Shear Profile |
|
608 |
#====================================================================== |
|
609 |
||
610 |
if (defined($opt_s)) { |
|
7 | 611 |
@antsNewLayout = ('depth','elapsed','u_z','v_z','w_z','u_z.sig','v_z.sig','w_z.sig','nsamp', |
612 |
'dc_elapsed','dc_u_z','dc_v_z','dc_w_z','dc_u_z.sig','dc_v_z.sig','dc_w_z.sig','dc_nsamp', |
|
613 |
'uc_elapsed','uc_u_z','uc_v_z','uc_w_z','uc_u_z.sig','uc_v_z.sig','uc_w_z.sig','uc_nsamp'); |
|
6 | 614 |
&antsOut('EOF'); |
615 |
close(STDOUT); |
|
616 |
open(STDOUT,">$opt_s") || croak("$opt_s: $!\n"); |
|
617 |
for (my($r)=0; $r<@depth; $r++) { |
|
7 | 618 |
&antsOut($depth[$r],$elapsed[$r],$uz[$r],$vz[$r],$wz[$r],$uzsig[$r],$vzsig[$r],$wzsig[$r],$nsamp[$r], |
619 |
$dc_elapsed[$r],$dc_uz[$r],$dc_vz[$r],$dc_wz[$r],$dc_uzsig[$r],$dc_vzsig[$r],$dc_wzsig[$r],$dc_nsamp[$r], |
|
620 |
$uc_elapsed[$r],$uc_uz[$r],$uc_vz[$r],$uc_wz[$r],$uc_uzsig[$r],$uc_vzsig[$r],$uc_wzsig[$r],$uc_nsamp[$r]); |
|
6 | 621 |
} |
0
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
622 |
} |
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
623 |
|
de00d0f32431
initial version to process P403 yoyo
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff
changeset
|
624 |
&antsExit(); |