Global Index (short | long) | Local contents | Local Index (short | long)
[dubartdx, dtbarudx, lon_out, lat_out] = get_dutdx(nfrm, pcs, lims, lev, tim);
[dubartdx, dtbarudx, lon_out, lat_out] = get_dutdx(nfrm, pcs, lims, lev, tim);
This function calls | This function is called by |
---|---|
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);