Skip to content
Snippets Groups Projects
verticalVelocity.m 2.7 KiB
Newer Older
function [verticalVelocity, time_dummy] = verticalVelocity(pTime, pPressure, pInterval, pMethod, pNop)
% vervelo calculates vertical velocity from pressure
% nop = number of points over which average runs
% assumption: deleted values are represented by NaNs

% 28 Oct 03, HHFurey.  I'm confused.  Arguement 4 is method, and 5 is nop, above - 
% but below doesn't see it that way.  I'll change this and see what happens.
% 29 Oct 03, HHF.  OK, here it is: this routine is fed pressure and date strings that
% are clipped to be the length of the tracked segments - we should be using the entire
% pressure record available, so that we have all vertical velocities possible.
% Also, passed out variable time_dummy because this is only record we
% have of times of vertical velocity calculations.
% 19 September 2012, hhf.  I woudl liek to change hte method to interpolate
% the data onto the time string intrinsic to teh incoming data, not create
% a new time string.  This solves problem of infinite division.

% Dhruv Balwada 9 July 2012 : added lines as time_dummy was not assigned in
% methods other than "SPLINE"


verticalVelocity = ones(size(pPressure)) * NaN;
if strcmp(pMethod, 'average')
  for ix = 1:length(pPressure)
    if ~((ix - pNop < 1) || (ix + pNop > length(pPressure)))
      if ~any(isnan(pPressure([ix - pNop, ix + pNop])))
        verticalVelocity(ix) = -(pPressure(ix + pNop) - pPressure(ix - pNop)) / (pInterval * 2 * pNop);
  time_dummy = pTime;
elseif strcmp(pMethod, 'backward')
  for ix = 1:length(pPressure)
    if ~(ix - pNop < 1)
      if ~any(isnan(pPressure([ix - pNop, ix])))
        verticalVelocity(ix) = -(pPressure(ix) - pPressure(ix - pNop)) / (pInterval * pNop);
  time_dummy = pTime;
elseif strcmp(pMethod, 'forward')
  for ix = 1:length(pPressure)
    if ~(ix + pNop > length(pPressure))
      if ~any(isnan(pPressure([ix, ix + pNop])))
        verticalVelocity(ix) = -(pPressure(ix + pNop) - pPressure(ix)) / (pInterval * pNop);
  time_dummy = pTime;
elseif strcmp(pMethod, 'spline')
   [time_dummy, ~, w] = artoa.data.splineWithDummy( ...
       pTime, ...
       pPressure, ...
       'NaN', ...
       pInterval / 86400 ... % [dbar per day]
   );
                                                        % interval shoudl
                                                        % be in decimal
                                                        % day, not seconds.
   w = w * 1000 / (3600 * 24) ; % conversion to mm/s
   verticalVelocity = -w(:);  % vertical velocities are positive upward
end