Skip to content
Snippets Groups Projects
vervelo.m 2.56 KiB
Newer Older
function [verticalVelocity, time_dummy] = vervelo(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"

if nargin < 4 % was 3
  pMethod='spline';
end

if nargin < 5 % was 4
  pNop=1;
end

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);
      end
    end
  end
  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);
      end
    end
  end
  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);
      end
    end
  end
  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