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