Documentation of calc_seasonal_gr_pat


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


Help text

  Load landmask

Cross-Reference Information

This script calls

Listing of script calc_seasonal_gr_pat


clear
get_global
cd /home/disk/tao/data/nmc.reanalysis/monthly
filin = ['sst.mon.mean.nc'];
nc = netcdf(filin, 'nowrite');
  lat = nc{'lat'}(:);
  lon = nc{'lon'}(:);
  [xk, yk] = keep_var([0 360 -60 60], lon, lat);
  ts = nc{'air'}(1:480,yk,xk);
  datets = nc{'time'}(:);
  add_offset = nc{'air'}.add_offset(:);
  scale_factor = nc{'air'}.scale_factor(:);
nc = close(nc)
ts = ts * scale_factor;
ts = ts + add_offset;
lon = lon(xk);
lat = lat(yk);
[ntim, nlat, nlon] = size(ts);

cd /home/disk/tao/data/nmc.reanalysis
filin = ['landmask.nc'];
nc = netcdf(filin, 'nowrite');
  lm = nc{'lsmask'}(:);
  lmlat = nc{'lat'}(:);
  lmlon = nc{'lon'}(:);
nc = close(nc);

[m,n] = size(lm);

loncyc = [[lmlon((n-9):n) - 360]; lmlon; [lmlon(1:10) + 360]];
lmcyc = [lm(:,(n-9):n) lm lm(:,1:10)];
lm2 = sign(interp2(loncyc, lmlat, lmcyc, lon, lat'));

lndpt = find(reshape(lm2, 1, nlat*nlon) == -1);
ocpt = find(reshape(lm2, 1, nlat*nlon) == 1);
kpt = ocpt;

ts = reshape(ts, ntim, nlat*nlon);
ts = ts(:, ocpt);

%  Eliminate ice points:

ticept = [];
for i = 1:length(ocpt);
  icept = find(ts(:,i) <= 0.);
  seapt = find(~ismember([1:ntim], icept));
  if length(seapt) <= 479;
    ticept = [ticept i];
  elseif ~isempty(icept);
    ts(icept, i) = mean(ts(seapt, i)) * ones(size(icept));
  end
end;

maskpt = union(lndpt, ocpt(ticept));
kpt = ocpt(~ismember(ocpt, ocpt(ticept)));
ts = ts(:, find(~ismember(ocpt, ocpt(ticept))));

%  Calculate ctstar:

[ctx, cty] = keep_var([180 270 -6 6], lon, lat);
tsnew = zeros(ntim, nlat*nlon);
tsnew(:,kpt) = ts;
tsnew = reshape(tsnew, ntim, nlat, nlon);
ct = squeeze(mean(mean(shiftdim(tsnew(:,cty,ctx),1))));
[ct, tem] = annave(ct);
ctstar = ct - myrunning_ave(myrunning_ave(ct, 25), 37);
ctstar = (ctstar - mean(ctstar)) / std(ctstar);

%  Now, calculate GR time series.

[ts, clim] = annave(ts);

if 0
  tslp = rave(ts, 25);
  tslp = rave(tslp, 37);
  [tslp, clim] = annave(tslp);
  cd /home/disk/hayes2/dvimont/data
  save nmc_lp_sst.mat tslp lat lon ntim nlat nlon kpt
end

%  Method 1:  remove ctstar time series from all points:

clear tsnew
a1 = ctstar' * ts / ntim;
tsnct = ts - ctstar*a1;
tsnct = tsnct - ones(ntim, 1) * mean(tsnct);

if 0
  tslpnct = rave(ts, 25);
  tslpnct = rave(tslpnct, 17);
  [tslpnct, clim] = annave(tslpnct);
  cd /home/disk/hayes2/dvimont/data
  save nmc_lpnoct_sst.mat tslpnct lat lon ntim nlat nlon kpt
end

%tsnct = ts;
tsnct = tslpnct;
clear tslpnct

%  Method 2:  calculate eofs, then remove ctstar

tsnew = zeros(ntim, nlat*nlon);
tsnew(:, kpt) = tsnct;
tsnew = cosweight(tsnew, lat);
tsnct = tsnew(:, kpt);
clear tsnew
tim = [25:456]; ntim = length(tim);
tsnct = tsnct(tim,:);

c = tsnct * tsnct' / (length(kpt));
[lam, pcs, per] = eof(c);

if 0
     cd /home/disk/tao/data/nmc.reanalysis/monthly

     filin = ['sst.mon.mean.nc'];

     nc = netcdf(filin, 'nowrite');
       lat = nc{'lat'}(:);
       lon = nc{'lon'}(:);
       [xk, yk] = keep_var([0 360 -90 90], lon, lat);
       ts = nc{'air'}(:,yk,xk);
       datets = nc{'time'}(:);
       add_offset = nc{'air'}.add_offset(:);
       scale_factor = nc{'air'}.scale_factor(:);
     nc = close(nc)
     ts = ts * scale_factor;
     ts = ts + add_offset;

     lon = lon(xk);
     lat = lat(yk);
     [ntim, nlat, nlon] = size(ts);
     ts = reshape(ts, ntim, nlat*nlon);
     [ts, clim] = annave(ts);
elseif 0
     cd /home/disk/hayes2/dvimont/data
     load nmc_lpnoct_sst.mat
     ts = tslpnct; clear tslpnct;
end


pc10 = pcs(:,1:10);
%pc10 = myrunning_ave(pcs(:,1:10), 9);
%pc10 = myrunning_ave(pc10, 5);
pc10 = ones(ntim,1) * (1./(std(pc10(:,1:10)))) .* pc10(:,1:10);

%ts = ts(:, kpt);
tsnct = ts;
a1 = ctstar' * ts / ntim;
tsnct = ts - ctstar*a1;
tsnct = tsnct - ones(ntim, 1) * mean(tsnct);
lds = pc10'*tsnct / ntim;

default_global
FRAME = [0 360 -60 60];

orient landscape
for num = 1:4;
cint = 0.2;
tem = NaN * ones(1, nlat*nlon);
%tem(1, kpt) = lds(num, :);
%tem(1, kpt) = tem2(num, :);
tem(1, kpt) = grpat(num, :);
%tem = lds(num, :);
tem = reshape(tem, nlat, nlon);
%sd(2)
%     plot(1*pc10(:,num))
%     plot(gr2)
%     set(gca, 'XTick',[25:60:500],'XTickLabel',[60:5:100],'YTick',[-3:3])
%     set(gca, 'XTick',[49:60:500],'XTickLabel',[65:5:100],'YTick',[-3:3])
%     axis([0 (length(yrs)+1) -2.5 2])
%     xlabel('Year:  ticks correspond to January')
%     ylabel('STD')
%     title(['PC' num2str(num)])
%     grid
%subplot(2,2,num-0)
%     if ismap(gca); clma; end
sd(1)
     gcont(1*tem, [-5:cint:5])
     dc
     title(['NMC:  LP EOF1, MON = ' num2str(num)])
     xlabel(['Contours:  ' num2str(cint) ' K (std)^-^1'])
end

cd /home/disk/tao/dvimont/matlab/CCM/GR/GR_Plots

gr1 = pc10(:,1) - corr(pc10(:,1),ctstar)*ctstar;
gr1 = (gr1 - mean(gr1)) / std(gr1);
cd /home/disk/hayes2/dvimont/data
tem1 = gr1' * ts / ntim;

yrs = (37:444);
gr2 = rave(rave(gr1(yrs), 25), 37);
gr2 = (gr2 - mean(gr2)) / std(gr2);
tem2 = gr2' * tsnct(yrs,:) / length(yrs);

gr1 = pc10(:,1);
for i = 1:12;
  yrs1 = (36 + [i:12:408]);
%  tem = rave(rave(gr1, 25), 37);
  tem = gr1(yrs1);
  tem = (tem - mean(tem)) / std(tem);
  grpat(i,:) = tem' * tsnct(yrs1,:) / length(yrs1);
end

cd /home/disk/hayes2/dvimont/ccm/ccm3.6/data
save seas_grpat gr2 grpat

%  Check out highpass pc's:

hppc1 = pc10_withct - rave(rave(pc10_withct,25),37);
hppc2 = pc10 - rave(rave(pc10,25),37);
hppc1 = (hppc1 - ones(ntim, 1)*mean(hppc1)) ./ (ones(ntim, 1)*std(hppc1));
hppc2 = (hppc2 - ones(ntim, 1)*mean(hppc2)) ./ (ones(ntim, 1)*std(hppc2));

%
%  I think the best method to do this is the following:
%
%  1.  Load region [0 360 -60 60].
%  2.  Eliminate all points that ever had ice.
%  3.  Calculate HP CT (CT*).
%  4.  Regress TS onto CT*, resulting in n_spatial_points regression
%           coefficients.
%  5.  Subtract CT* times the regression coefficient from each spatial
%           point's time series.
%  6.  Low Pass filter the data to remove all high-frequency phenomenon
%           associated with high frequency component of ENSO.
%  7.  Compute EOF's on this new, low-pass filtered, CT-free data.
%