Documentation of get_dutdx


Global Index (short | long) | Local contents | Local Index (short | long)


Function Synopsis

[dubartdx, dtbarudx, lon_out, lat_out] = get_dutdx(nfrm, pcs, lims, lev, tim);

Help text


  [dubartdx, dtbarudx, lon_out, lat_out] = get_dutdx(nfrm, pcs, lims, lev, tim);


Cross-Reference Information

This function calls This function is called by

Listing of function get_dutdx

function [dubartdx, dtbarudx, lon_out, lat_out] = get_dutdx(nfrm, pcs, lims, lev, tim);

% lims = [179 270 -9 9]; lev = 1:7; tim = 101:550; nfrm = 6;

cdtem = ['cd ' eval('pwd')];

%  Get variables from netcdf files

cd /home/disk/hayes2/dvimont/csiro/data

u = getnc('u', lims, lev, tim);
[latu, lonu, depthu] = getll('u', lims);
u = u / 100;

t = getnc('temp', lims, lev, tim);
[latt, lont, deptht] = getll('temp', lims);
t = t + 273.15;

%  Interpolate t to u grid

[ntim, nlev, nlat, nlon] = size(t);

t = ( t(:,:,1:(nlat-1),:) + t(:,:,2:nlat,:) ) / 2;
t = ( t(:,:,:,1:(nlon-1)) + t(:,:,:,2:nlon) ) / 2;

%  Get mean and anomalies

[u, ubar] = remove_mean(u);
[t, tbar] = remove_mean(t);
[ntim, nlev, nlat, nlon] = size(u);

%  Get regressions

lag = 0; lg = lag*pi/180; lg2 = 1;
num = 1; lind = 1;

%  Store all regressions under one variable

j = sqrt(-1); num = 1;
timeseries = sqrt(2)*pcs(:,num)./std(pcs(:,num));
clear temtim ureg vreg
u = reshape(u, ntim, nlev*nlat*nlon);
t = reshape(t, ntim, nlev*nlat*nlon);
for i = 1:nfrm
  wgt = conj(exp(j * ((i-1) * pi/(lg2*nfrm) + lg) ));
  temtim(:,i) = squeeze(real(wgt .* timeseries));
  ureg(i, :) = temtim(:,i)' * u ./ ntim;
  treg(i, :) = temtim(:,i)' * t ./ ntim;
end

%  Get ubart and tbaru

ubart = (ones(nfrm, 1) * reshape(ubar, 1, nlev*nlat*nlon)) .* treg;
tbaru = (ones(nfrm, 1) * reshape(tbar, 1, nlev*nlat*nlon)) .* ureg;
ubart = reshape(shiftdim(reshape(ubart, nfrm, nlev, nlat*nlon), 1), nlev, nlat*nlon*nfrm);
tbaru = reshape(shiftdim(reshape(tbaru, nfrm, nlev, nlat*nlon), 1), nlev, nlat*nlon*nfrm);

%  Integrate vertically

d1 = depthu(1);
depthw = [];
for i = 1:nlev;
  depthw = [depthw; depthu(i)+d1];
  d1 = depthu(i+1) - depthu(i) - d1;
end
dz = diff([0; depthw]);

ubart = dz' * ubart;
tbaru = dz' * tbaru;

%  Get x-derivative

ubart = shiftdim(reshape(ubart, nlat, nlon, nfrm), 2);
tbaru = shiftdim(reshape(tbaru, nlat, nlon, nfrm), 2);

global RADUS DEGREE RADIAN

clear dubartdx dtbarudx
for i = 1:nfrm;
  [dubartdx(i,:,:) lon2] = sph_gradx1(squeeze(ubart(i,:,:)), RADIAN*latu, RADIAN*lonu, 0);
  [dtbarudx(i,:,:) lon2] = sph_gradx1(squeeze(tbaru(i,:,:)), RADIAN*latu, RADIAN*lonu, 0);
end

%  Convert to output units

cwat = 4.218e3;  %  heat capacity of liquid water, J/(kg K)
rhowat = 1e3;    %  density of liquid water, kg/m^3

lon_out = DEGREE*lon2;
lat_out = latu;
dtbarudx = -1 * cwat * rhowat * dtbarudx;
dubartdx = -1 * cwat * rhowat * dubartdx;

eval(cdtem);