--- a/INDEX
+++ b/INDEX
@@ -1,9 +1,9 @@
======================================================================
I N D E X
doc: Wed Jun 18 09:46:58 1997
- dlm: Tue Oct 16 09:12:43 2012
+ dlm: Mon Aug 5 12:16:56 2013
(c) 1997 Andreas Thurnherr
- uE-Info: 122 0 NIL 0 0 72 2 2 4 NIL ofnI
+ uE-Info: 135 78 NIL 0 0 72 2 2 4 NIL ofnI
======================================================================
NOTES:
@@ -114,6 +114,7 @@
[crossings]!!! get records when specific field val is crossed
[data]! get info about data
[ded] data editor
+[deglitch]!!! remove very obvious data glitches
[distfromtrack]!!! calculate minimum perpendicular distance to piece-wise linear track
[Echo] ants versions of echo(1)
[fileavg]!!! avg, stddev files record-by-record
@@ -131,6 +132,7 @@
[list] list data and metadata
[listNC] list netcdf(1) data and metadata
[merge] merge files by matching numeric values
+[msplit] split data file with monotonic key field at list of values
[NCode] encode ANTS to netcdf
[resample] resample data
[.interp.linear] linear interpolation
@@ -141,8 +143,8 @@
[reverse] reverse order of records in file
[scantext] extract numbers from free-format text files
[Sort] sort data
-[Split] split data file according to field value
-[splitCNV] split ASCII SeaBird CNV file
+[Split] split data file according to field value or # of records
+[splitCNV] split ASCII SeaBird CNV file at list of elapsed times
[splitNC] extract multiple ANTS files from single netCDF
[stackplots] plot multiple files with offsets
[subsample] nearest-neighbors; does not need monotonic x field
--- a/antsfilters.pl
+++ b/antsfilters.pl
@@ -1,9 +1,9 @@
#======================================================================
# A N T S F I L T E R S . P L
# doc: Sun Mar 14 15:17:29 1999
-# dlm: Wed Jan 5 23:34:57 2011
+# dlm: Wed Feb 13 11:11:16 2013
# (c) 1999 A.M. Thurnherr
-# uE-Info: 15 48 NIL 0 0 72 2 2 4 NIL ofnI
+# uE-Info: 38 97 NIL 0 0 72 2 2 4 NIL ofnI
#======================================================================
# HISTORY:
@@ -35,9 +35,8 @@
croak("$0: can't handle $ants_[$r][$xfnr] (x field)\n")
unless (numberp($ants_[$r][$xfnr]));
$cdx = $ants_[$r][$xfnr] - $ants_[$r-1][$xfnr];
- croak("$0: input badly non-uniformly spaced " .
- "(rec# $r is $ants_[$r][$xfnr]; previous is $ants_[$r-1][$xfnr];" .
- " target difference is $dx)\n")
+ croak(sprintf("$0: input badly non-uniformly spaced: @ rec#%d dx=%g, %.1fx target dx=%g\n",
+ $r,$cdx,$cdx/$dx,$dx))
if (($dx > 0) && ($cdx > $fac*$dx || $cdx < $dx/$fac)) ||
(($dx < 0) && ($cdx < $fac*$dx || $cdx > $dx/$fac));
$sdx += $cdx;
--- a/antsusage.pl
+++ b/antsusage.pl
@@ -2,9 +2,9 @@
#======================================================================
# A N T S U S A G E . P L
# doc: Fri Jun 19 13:43:05 1998
-# dlm: Mon Oct 29 12:08:54 2012
+# dlm: Tue Apr 2 22:26:55 2013
# (c) 1998 A.M. Thurnherr
-# uE-Info: 153 62 NIL 0 0 70 2 2 4 NIL ofnI
+# uE-Info: 157 44 NIL 0 0 70 2 2 4 NIL ofnI
#======================================================================
# HISTORY:
@@ -151,6 +151,10 @@
# existed)
# Feb 13, 2012: - antsNewFieldOpt simplified by using 2nd arg to fnrNoErr
# Oct 29, 2012: - diabled "no file" messages on special args
+# Mar 29, 2013: - added support for $ANTSLIBS
+# Apr 2, 2013: - BUG: pref{}suff special args did sometimes produce unexpanded as well
+# as expanded output (unexpanded should be produced only if the
+# expansion is empty)
# NOTES:
# - ksh expands {}-arguments with commas in them!!! Use + instead
@@ -223,7 +227,6 @@
croak("$0: -N not supported (implementation restriction)\n")
if defined($opt_N);
}
-
if ($eoo) { # reset args
for ($i=0; $i<=$#ARGV; $i++) {
@@ -268,11 +271,13 @@
if (defined($opt_L)) { # load libraries
foreach $lib (split(',',$opt_L)) {
if (-r "lib$lib.pl") {
-# &antsInfo("loading ./lib$lib.pl");
require "lib$lib.pl";
+ } elsif (-r "$ANTS/lib$lib.pl") {
+ require "$ANTS/lib$lib.pl";
+ } elsif (-r "$ANTSLIBS/lib$lib.pl") {
+ require "$ANTSLIBS/lib$lib.pl";
} else {
-# &antsInfo("loading $ANTS/lib$lib.pl"),
- require "$ANTS/lib$lib.pl";
+ croak("$0: cannot load {.,$ANTS,$ANTSLIBS}/lib$lib.pl\n");
}
}
}
@@ -338,12 +343,13 @@
}
} else {
my($f) = "$pref$range$suff";
+# print(STDERR "f = $pref . $range . $suff\n");
if (-f $f) { push(@exp,$f); }
# else { &antsInfo("$ARGV[$ai]: no file <$f>"); }
}
- @exp = ($ARGV[$ai]) # make sure it *was* special arg
- unless (@exp);
}
+ @exp = ($ARGV[$ai]) # make sure it *was* special arg
+ unless (@exp);
} else { # regular argument
next;
}
--- a/antsutils.pl
+++ b/antsutils.pl
@@ -2,9 +2,9 @@
#======================================================================
# A N T S U T I L S . P L
# doc: Fri Jun 19 23:25:50 1998
-# dlm: Wed Oct 24 09:56:52 2012
+# dlm: Thu Sep 5 21:53:55 2013
# (c) 1998 A.M. Thurnherr
-# uE-Info: 259 43 NIL 0 0 70 10 2 4 NIL ofnI
+# uE-Info: 99 38 NIL 0 0 70 10 2 4 NIL ofnI
#======================================================================
# Miscellaneous auxillary functions
@@ -95,6 +95,8 @@
# May 16, 2012: - adapted to V5.0
# May 31, 2012: - changed ismember() semantics for use in psSamp
# Jun 12, 2012: - added &compactList()
+# Dec 17, 2012: - added default to antsLoadModel()
+# Sep 5, 2013: - FINALLY: added $pi
# fnr notes:
# - matches field names starting with the string given, i.e. "sig" is
@@ -123,6 +125,8 @@
# Number-related funs
#----------------------------------------------------------------------
+$pi = 3.14159265358979; # from $PI in [libvec.pl]
+
$PRACTICALLY_ZERO = 1e-9;
$SMALL_AMOUNT = 1e-6;
@@ -417,27 +421,27 @@
# model-loading funs
#----------------------------------------------------------------------
-sub antsLoadModel($$)
+sub antsLoadModel(...)
{
- my($opt,$pref) = @_;
+ my($opt,$pref,$default) = @_;
my($name);
for ($a=0; # find model name
$a<=$#ARGV && !($ARGV[$a] =~ m/^-\S*$opt$/);
$a++) { }
- if ($a < $#ARGV) { # found
- $name = $ARGV[$a+1]; # load it
- if (-r "$pref.$name") { # local
- &antsInfo("loading local $pref.$name...");
- require "$pref.$name";
- return $name;
- } else {
- my($path) = ($0 =~ m{^(.*)/[^/]*$});
- require "$path/$pref.$name";
- return $name;
- }
- }
- return undef;
+ $name = ($a < $#ARGV) ? $ARGV[$a+1] : $default; # use default if not found
+
+ return undef unless defined($name);
+
+ if (-r "$pref.$name") { # load in local directory
+ &antsInfo("loading local $pref.$name...");
+ require "$pref.$name";
+ return $name;
+ } else { # load from ANTSlib
+ my($path) = ($0 =~ m{^(.*)/[^/]*$});
+ require "$path/$pref.$name";
+ return $name;
+ }
}
sub antsLoadModelWithArgs($$)
--- a/libEOS83.pl
+++ b/libEOS83.pl
@@ -1,9 +1,9 @@
#======================================================================
# L I B E O S 8 3 . P L
# doc: Mon Mar 8 08:22:05 1999
-# dlm: Thu Oct 6 11:44:00 2011
+# dlm: Tue Feb 5 16:42:28 2013
# (c) 1999 A.M. Thurnherr
-# uE-Info: 1 0 NIL 0 0 72 2 2 4 NIL ofnI
+# uE-Info: 20 59 NIL 0 0 72 2 2 4 NIL ofnI
#======================================================================
# Perl Implementation of UNESCO Eqn of State 1983
@@ -17,7 +17,7 @@
# - no temperature scale assumed; set PARAM ITS=90|68
# - T90*1.00024=T68
# - check values calculated with T68
-# - no conductivity unit assumed; set PARAM cond.unit=S/p|mS/cm
+# - no conductivity unit assumed; set PARAM cond.unit=S/m|mS/cm
# HISTORY:
# Mar 08, 1999: - translated by hand from krc
--- a/libGM.pl
+++ b/libGM.pl
@@ -1,9 +1,9 @@
#======================================================================
# L I B G M . P L
# doc: Sun Feb 20 14:43:47 2011
-# dlm: Fri Sep 14 12:35:40 2012
+# dlm: Sat Apr 20 20:05:51 2013
# (c) 2011 A.M. Thurnherr
-# uE-Info: 61 0 NIL 0 0 72 2 2 4 NIL ofnI
+# uE-Info: 62 0 NIL 0 0 72 2 2 4 NIL ofnI
#======================================================================
# HISTORY:
@@ -17,6 +17,7 @@
# Mar 29, 2012: - re-wrote using definition of B(omega) from Munk (1981)
# Aug 23, 2012: - cosmetics?
# Sep 7, 2012: - made N0, E0, b, jstar global
+# Dec 28, 2012: - added allowance for small roundoff error to Sw()
require "$ANTS/libEOS83.pl";
@@ -58,7 +59,7 @@
{
my($j,$N,$omega) = @_;
- return defined($omega)
+ return defined($omega) && ($omega <= $GM_N0)
? $pi / $GM_b * sqrt(($N**2 - $omega**2) / ($GM_N0**2 - $omega**2)) * $j
: $pi * $j * $N / ($GM_b * $GM_N0); # valid, except in vicinity of buoyancy turning frequency (p. 285)
}
@@ -77,6 +78,8 @@
my($omega,$m,$lat,$N) = &antsFunUsage(4,'fff','<frequency[1/s]> <vertical wavenumber[rad/m]> <lat[deg]> <N[rad/s]>',@_);
local($f) = abs(&f($lat));
+ $omega += $PRACTICALLY_ZERO if ($omega < $f);
+ $omega -= $PRACTICALLY_ZERO if ($omega > $N);
return nan if ($omega < $f || $omega > $N);
my($GM_b) = 1300; #m # pycnocline lengthscale
--- a/libLADCP.pl
+++ b/libLADCP.pl
@@ -1,9 +1,9 @@
#======================================================================
# L I B L A D C P . P L
# doc: Wed Jun 1 20:38:19 2011
-# dlm: Thu Oct 25 21:24:59 2012
+# dlm: Wed Jun 26 11:47:45 2013
# (c) 2011 A.M. Thurnherr
-# uE-Info: 22 41 NIL 0 0 70 2 2 4 NIL ofnI
+# uE-Info: 211 0 NIL 0 0 70 2 2 4 NIL ofnI
#======================================================================
# HISTORY:
@@ -19,7 +19,9 @@
# Aug 22, 2012: - added documentation
# - added T_w()
# Sep 24, 2012: - made "k" argument default in T_w()
-# Oct 25, 2012: - renamed T_SM to T_ASM
+# Oct 25, 2012: - renamed T_SM() to T_ASM()
+# Jun 26. 2013: - added T_w_z()
+# - added parameter checks to processing-specific corrections
require "$ANTS/libvec.pl";
require "$ANTS/libfuns.pl";
@@ -124,6 +126,8 @@
{
my($k,$blen,$dz,$range_max) =
&antsFunUsage(4,'ffff','<vertical wavenumber[rad/s]> <ADCP bin size[m]> <shear grid resolution[m]> <range max[m]>',@_);
+ croak("T_UH($k,$blen,$dz,$range_max): bad parameters\n")
+ unless ($k>=0 && $blen>0 && $dz>0 && $range_max>=0);
return T_ravg($k,$blen) * T_fdiff($k,$blen) * T_interp($k,$blen,$dz) * T_tilt($k,dprime($range_max));
}
@@ -137,6 +141,8 @@
{
my($k,$blen,$dz,$range_max) =
&antsFunUsage(4,'ffff','<vertical wavenumber[rad/s]> <ADCP bin size[m]> <shear grid resolution[m]> <range max[m]>',@_);
+ croak("T_ASM($k,$blen,$dz,$range_max): bad parameters\n")
+ unless ($k>=0 && $blen>0 && $dz>0 && $range_max>=0);
return T_ravg($k,$blen) * T_fdiff($k,$blen) * T_binavg($k,$dz) * T_tilt($k,dprime($range_max));
}
@@ -146,6 +152,7 @@
# - velocity inversion method of Visbeck (J. Tech., 2002)
# - only valid if pre-averaging into superensembles is used
# - range_max == 0 disables tilt correction
+# - sel == nan disables pre-averaging correction
#------------------------------------------------------------
sub T_VI($$$$$)
@@ -159,6 +166,8 @@
{
my($k,$blen,$sel,$dz,$dprime) =
&antsFunUsage(5,'ff.ff','<vertical wavenumber[rad/s]> <ADCP bin size[m]> <superensemble size[m]|nan> <shear grid resolution[m]> <tilt d-prime[m]>',@_);
+ croak("T_VI_alt($k,$blen,$sel,$dz,$range_max): bad parameters\n")
+ unless ($k>=0 && $blen>0 && $sel ne '' && $dz>0 && $range_max>=0);
croak("$0: tilt-dprime outside range [0..$blen]\n")
unless ($dprime>=0 && $dprime<=$blen);
return ($sel>0) ? T_ravg($k,$blen) * T_binavg($k,$sel) * T_binavg($k,$dz) * T_tilt($k,$dprime)
@@ -178,8 +187,31 @@
&antsFunUsage(4,'ffff',
'[vertical wavenumber[rad/s]] <ADCP bin size[m]> <output grid resolution[m]> <range max[m]>',
\@fc,'k',undef,undef,undef,@_);
+ croak("T_w($k,$blen,$dz,$range_max): bad parameters\n")
+ unless ($k>=0 && $blen>0 && $dz>0 && $range_max>=0);
return T_ravg($k,$blen) * T_binavg($k,$dz) * T_tilt($k,dprime($range_max));
}
}
+#----------------------------------------------------------------------
+# T_w_z(k,blen,dz,range_max)
+# - vertical-velocity method of Thurnherr (IEEE 2011)
+# - first differencing of gridded shear to calculate dw/dz
+# - NB: grid-scale differentiation assumed
+# - range_max == 0 disables tilt correction
+#----------------------------------------------------------------------
+
+{ my(@fc);
+ sub T_w_z(@)
+ {
+ my($k,$blen,$dz,$range_max) =
+ &antsFunUsage(4,'ffff',
+ '[vertical wavenumber[rad/s]] <ADCP bin size[m]> <output grid resolution[m]> <range max[m]>',
+ \@fc,'k',undef,undef,undef,@_);
+ croak("T_w_z($k,$blen,$dz,$range_max): bad parameters\n")
+ unless ($k>=0 && $blen>0 && $dz>0 && $range_max>=0);
+ return T_ravg($k,$blen) * T_binavg($k,$dz) * T_tilt($k,dprime($range_max)) * T_fdiff($k,$dz);
+ }
+}
+
1;
--- a/libstats.pl
+++ b/libstats.pl
@@ -1,9 +1,9 @@
#======================================================================
# L I B S T A T S . P L
# doc: Wed Mar 24 13:59:27 1999
-# dlm: Mon Oct 15 10:34:21 2012
+# dlm: Mon Jun 10 21:10:04 2013
# (c) 1999 A.M. Thurnherr
-# uE-Info: 90 30 NIL 0 0 72 2 2 4 NIL ofnI
+# uE-Info: 106 0 NIL 0 0 72 2 2 4 NIL ofnI
#======================================================================
# HISTORY:
@@ -102,6 +102,7 @@
sub sum(@)
{
my($N) = my($sum) = 0;
+ @_ = split(/\s+/,$_[0]) if (@_ == 1 && !numberp($_[0]));
for (my($i)=0; $i<=$#_; $i++) { $N++,$sum+=$_[$i] if (numberp($_[$i])); }
return ($N>0)?$sum:nan;
}