libLADCP.pl
author A.M. Thurnherr <athurnherr@yahoo.com>
Wed, 16 May 2012 06:31:27 +0000
changeset 0 a5233793bf69
child 3 55a8c407d38e
permissions -rw-r--r--
V5.0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     1
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     2
#                    L I B L A D C P . P L 
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     3
#                    doc: Wed Jun  1 20:38:19 2011
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     4
#                    dlm: Wed Jan 18 18:46:33 2012
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     5
#                    (c) 2011 A.M. Thurnherr
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     6
#                    uE-Info: 103 19 NIL 0 0 72 2 2 4 NIL ofnI
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     7
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     8
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     9
# HISTORY:
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    10
#	Jun  1, 2011: - created
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    11
#	Jul 29, 2011: - improved
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    12
#	Aug 10, 2011: - made correct
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    13
#	Aug 11, 2011: - added "convenient combinations"
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    14
#	Aug 18, 2011: - made buoyancy frequency non-constant in S()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    15
#	Jan  4, 2012: - improved T_VI to allow correcting even without superensembles
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    16
#	Jan  5, 2012: - removed S(), which is just pwrdens/N^2 (rather than
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    17
#				    pwrdens/N^2/(2pi) as I erroneously thought)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    18
#	Jan 18, 2012: - added T_VI_alt() to allow assessment of tilt correction extrema
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    19
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    20
require "$ANTS/libvec.pl";
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    21
require "$ANTS/libfuns.pl";
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    22
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    23
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    24
# Polzin et al., JAOT 2002 LADCP shear corrections
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    25
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    26
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    27
# NOTES:
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    28
#	- apply to downcast data only
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    29
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    30
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    31
# individual corrections
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    32
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    33
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    34
# NB: Dzb = (Dzt == Dzr) assumed
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    35
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    36
sub T_ravg($$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    37
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    38
    my($kz,$Dzb) =
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    39
        &antsFunUsage(2,'ff','<vertical wavenumber[rad/s]> <pulse/bin-length[m]>',@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    40
    return 1 / sinc($kz*$Dzb/2/$PI)**4;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    41
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    42
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    43
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    44
sub T_fdiff($$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    45
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    46
    my($kz,$Dzd) =
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    47
        &antsFunUsage(2,'ff','<vertical wavenumber[rad/s]> <differencing interval[m]>',@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    48
    return 1 / sinc($kz*$Dzd/2/$PI)**2;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    49
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    50
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    51
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    52
sub T_interp($$$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    53
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    54
    my($kz,$Dzb,$Dzg) =
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    55
        &antsFunUsage(3,'fff','<vertical wavenumber[rad/s]> <bin length[m]> <grid resolution[m]>',@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    56
    return 1 / sinc($kz*$Dzb/2/$PI)**4 / sinc($kz*$Dzg/2/$PI)**2;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    57
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    58
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    59
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    60
# NB: Polzin et al claim that Dz should be ADCP bin size, which does not seem to make sense
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    61
sub T_binavg($$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    62
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    63
    my($kz,$Dzg) =
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    64
        &antsFunUsage(2,'ff','<vertical wavenumber[rad/s]> <grid resolution[m]>',@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    65
    return 1 / sinc($kz*$Dzg/2/$PI)**2;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    66
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    67
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    68
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    69
sub T_tilt($$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    70
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    71
    my($kz,$dprime) =
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    72
        &antsFunUsage(2,'ff','<vertical wavenumber[rad/s]> <d-prime[m]>',@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    73
    return 1 / sinc($kz*$dprime/2/$PI)**2;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    74
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    75
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    76
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    77
# convenient combinations
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    78
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    79
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    80
sub LADCP_tilt_dprime($)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    81
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    82
	return -1.2 + 0.0857 * $_[0] - 0.000136 * $_[0]**2;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    83
} 
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    84
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    85
sub T_UH($$$$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    86
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    87
	my($kz,$blen,$grez,$maxrange) =
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    88
        &antsFunUsage(4,'ffff','<vertical wavenumber[rad/s]> <ADCP bin size[m]> <shear grid resolution[m]> <max range[m]>',@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    89
    return T_ravg($kz,$blen) * T_fdiff($kz,$blen) * T_interp($kz,$blen,$grez) * T_tilt($kz,LADCP_tilt_dprime($maxrange));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    90
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    91
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    92
sub T_SM($$$$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    93
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    94
	my($kz,$blen,$grez,$maxrange) =
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    95
        &antsFunUsage(4,'ffff','<vertical wavenumber[rad/s]> <ADCP bin size[m]> <shear grid resolution[m]> <max range[m]>',@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    96
    return T_ravg($kz,$blen) * T_fdiff($kz,$blen) * T_binavg($kz,$grez) * T_tilt($kz,LADCP_tilt_dprime($maxrange));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    97
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    98
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    99
sub T_VI($$$$$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   100
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   101
	my($kz,$blen,$sel,$grez,$maxrange) =
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   102
        &antsFunUsage(5,'ff.ff','<vertical wavenumber[rad/s]> <ADCP bin size[m]> <superensemble size[m]|nan> <shear grid resolution[m]> <max range[m]>',@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   103
	return T_VI_alt($kz,$blen,$sel,$grez,LADCP_tilt_dprime($maxrange));        
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   104
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   105
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   106
sub T_VI_alt($$$$$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   107
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   108
	my($kz,$blen,$sel,$grez,$dprime) =
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   109
        &antsFunUsage(5,'ff.ff','<vertical wavenumber[rad/s]> <ADCP bin size[m]> <superensemble size[m]|nan> <shear grid resolution[m]> <tilt d-prime[m]>',@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   110
	croak("$0: tilt-dprime outside range [0..$blen]\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   111
		unless ($dprime>=0 && $dprime<=$blen);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   112
    return ($sel>0) ? T_ravg($kz,$blen) * T_binavg($kz,$sel) * T_binavg($kz,$grez) * T_tilt($kz,$dprime)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   113
    				: T_ravg($kz,$blen) * T_binavg($kz,$grez) * T_tilt($kz,$dprime);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   114
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   115
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   116
1;