0
|
1 |
#======================================================================
|
|
2 |
# S V E L _ C O R R E C T I O N S . P L
|
|
3 |
# doc: Thu Dec 30 01:35:18 2010
|
|
4 |
# dlm: Thu Dec 30 01:40:13 2010
|
|
5 |
# (c) 2010 A.M. Thurnherr
|
|
6 |
# uE-Info: 86 20 NIL 0 0 72 2 2 4 NIL ofnI
|
|
7 |
#======================================================================
|
|
8 |
|
|
9 |
sub sscorr_w($$$$) # sound-speed correction for w
|
|
10 |
{ # see RDI Coord. Trans. manual sec. 4.1, ...
|
|
11 |
my($wObs,$wCTD,$dADCP,$dBin) = @_; # but there is an error: the ^2 applies to the []
|
|
12 |
my($tanSqBeamAngle) = tan(rad($LADCP{BEAM_ANGLE}))**2;
|
|
13 |
|
|
14 |
$dADCP = int($dADCP); # @sVelProf is binned to 1m
|
|
15 |
$dBin = int($dBin);
|
|
16 |
|
|
17 |
while (!numberp($sVelProf[$dADCP])) { $dADCP--; } # skip gaps & bottom of profile
|
|
18 |
while (!numberp($sVelProf[$dBin ])) { $dBin--; }
|
|
19 |
|
|
20 |
my($Kn) = sqrt(1 + (1 - $sVelProf[$dBin]/$sVelProf[$dADCP])**2 * $tanSqBeamAngle);
|
|
21 |
return ($wObs*$sVelProf[$dBin]/1500 - $wCTD) / $Kn;
|
|
22 |
}
|
|
23 |
|
|
24 |
sub calc_binDepths($) # see RDI Coord Trans manual sec. 4.2
|
|
25 |
{
|
|
26 |
my($ens) = @_;
|
|
27 |
my(@bindz);
|
|
28 |
|
|
29 |
my($tanSqBeamAngle) = tan(rad($LADCP{BEAM_ANGLE}))**2;
|
|
30 |
my($curdz) = 0; # calc avg sndspeed btw transducer & 1st bin
|
|
31 |
$curdz-- until numberp($sVelProf[int($LADCP{ENSEMBLE}[$ens]->{CTD_DEPTH}+$curdz)]);
|
|
32 |
my($avgss) = my($ADCPss) = $sVelProf[int($LADCP{ENSEMBLE}[$ens]->{CTD_DEPTH}+$curdz)];
|
|
33 |
|
|
34 |
my($sumss) = my($nss) = 0;
|
|
35 |
if ($LADCP{ENSEMBLE}[$ens]->{XDUCER_FACING_UP}) {
|
|
36 |
while ($curdz >= -$LADCP{DISTANCE_TO_BIN1_CENTER}*cos(rad($LADCP{ENSEMBLE}[$ens]->{TILT}))) {
|
|
37 |
if (numberp($sVelProf[int($LADCP{ENSEMBLE}[$ens]->{CTD_DEPTH}+$curdz)])) {
|
|
38 |
$sumss += $sVelProf[int($LADCP{ENSEMBLE}[$ens]->{CTD_DEPTH}+$curdz)]; $nss++;
|
|
39 |
}
|
|
40 |
$curdz--;
|
|
41 |
}
|
|
42 |
} else {
|
|
43 |
while ($curdz <= $LADCP{DISTANCE_TO_BIN1_CENTER}*cos(rad($LADCP{ENSEMBLE}[$ens]->{TILT}))) {
|
|
44 |
if (numberp($sVelProf[int($LADCP{ENSEMBLE}[$ens]->{CTD_DEPTH}+$curdz)])) {
|
|
45 |
$sumss += $sVelProf[int($LADCP{ENSEMBLE}[$ens]->{CTD_DEPTH}+$curdz)]; $nss++;
|
|
46 |
}
|
|
47 |
$curdz++;
|
|
48 |
}
|
|
49 |
}
|
|
50 |
$avgss = $sumss/$nss if ($nss>0);
|
|
51 |
|
|
52 |
my($Kn) = sqrt(1 + (1 - $avgss/$ADCPss)**2 * $tanSqBeamAngle);
|
|
53 |
$bindz[0] = $LADCP{ENSEMBLE}[$ens]->{XDUCER_FACING_UP} ?
|
|
54 |
- $LADCP{DISTANCE_TO_BIN1_CENTER}*$Kn*$avgss/1500*cos(rad($LADCP{ENSEMBLE}[$ens]->{TILT})) :
|
|
55 |
+ $LADCP{DISTANCE_TO_BIN1_CENTER}*$Kn*$avgss/1500*cos(rad($LADCP{ENSEMBLE}[$ens]->{TILT}));
|
|
56 |
|
|
57 |
for (my($bin)=1; $bin<=$LADCP_lastBin-1; $bin++) {
|
|
58 |
$sumss = $nss = 0;
|
|
59 |
if ($LADCP{ENSEMBLE}[$ens]->{XDUCER_FACING_UP}) {
|
|
60 |
while ($curdz >= $bindz[$bin-1]-$LADCP{BIN_LENGTH}*cos(rad($LADCP{ENSEMBLE}[$ens]->{TILT}))) {
|
|
61 |
if (numberp($sVelProf[int($LADCP{ENSEMBLE}[$ens]->{CTD_DEPTH}+$curdz)])) {
|
|
62 |
$sumss += $sVelProf[int($LADCP{ENSEMBLE}[$ens]->{CTD_DEPTH}+$curdz)]; $nss++;
|
|
63 |
}
|
|
64 |
$curdz--;
|
|
65 |
}
|
|
66 |
} else {
|
|
67 |
while ($curdz <= $bindz[$bin-1]+$LADCP{BIN_LENGTH}*cos(rad($LADCP{ENSEMBLE}[$ens]->{TILT}))) {
|
|
68 |
if (numberp($sVelProf[int($LADCP{ENSEMBLE}[$ens]->{CTD_DEPTH}+$curdz)])) {
|
|
69 |
$sumss += $sVelProf[int($LADCP{ENSEMBLE}[$ens]->{CTD_DEPTH}+$curdz)]; $nss++;
|
|
70 |
}
|
|
71 |
$curdz++;
|
|
72 |
}
|
|
73 |
}
|
|
74 |
$avgss = $sumss/$nss if ($nss > 0); # otherwise, leave avgss as is
|
|
75 |
|
|
76 |
$Kn = sqrt(1 + (1 - $avgss/$ADCPss)**2 * $tanSqBeamAngle);
|
|
77 |
$bindz[$bin] = $LADCP{ENSEMBLE}[$ens]->{XDUCER_FACING_UP} ?
|
|
78 |
$bindz[$bin-1] - $LADCP{BIN_LENGTH}*$Kn*$avgss/1500*cos(rad($LADCP{ENSEMBLE}[$ens]->{TILT})) :
|
|
79 |
$bindz[$bin-1] + $LADCP{BIN_LENGTH}*$Kn*$avgss/1500*cos(rad($LADCP{ENSEMBLE}[$ens]->{TILT}));
|
|
80 |
}
|
|
81 |
|
|
82 |
my(@bindepth);
|
|
83 |
for (my($i)=0; $i<@bindz; $i++) {
|
|
84 |
$bindepth[$i] = $LADCP{ENSEMBLE}[$ens]->{CTD_DEPTH} + $bindz[$i];
|
|
85 |
}
|
|
86 |
return @bindepth;
|
|
87 |
}
|
|
88 |
|
|
89 |
1;
|