Documentation of calc_new_gr


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


Help text

  Load and configure NMC.REANAL data

Cross-Reference Information

This script calls

Listing of script calc_new_gr


clear

cd /home/disk/tao/data/nmc.reanalysis/monthly
%cd /home/disk/tao/data/reynolds/eof

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

nc = netcdf(filin, 'nowrite');
  ts = nc{'air'}(:,:,:);
  datets = nc{'time'}(:);
  lat = nc{'lat'}(:);
  lon = nc{'lon'}(:);
  add_offset = nc{'air'}.add_offset(:);
  scale_factor = nc{'air'}.scale_factor(:);
nc = close(nc)
ts = ts * scale_factor;
ts = ts + add_offset;

[ntim, nlat, nlon] = size(ts);

%  Load landmask

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

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

%  Eliminate ice points:

ticept = [];
for i = 1:length(ocpt);
  icept = find(ts(:,i) <= -1.8);
  seapt = find(~ismember([1:ntim], icept));
  if length(seapt) <= 120;
    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(:, kpt);

%  Get highpass filtered and lowpass filtered datasets if called for:

gethp = 0;    %  Set to 1 for hp/lp stuff.  This is to save time.
if gethp;

  [ts, clim] = annave(ts);

  tslp = myrunning_ave(ts, 25);
  tslp = myrunning_ave(tslp, 37);
  tshp = ts - tslp;

  cd /home/disk/hayes2/dvimont/data
  save nmc_hp_sst.mat tshp
  save nmc_lp_sst.mat tslp
  save nmc_noice_sst.mat ts
  clear tslp ts tshp
  save lat_lon_kpt.mat lat lon kpt

end

%  Calculate CT*:

cd /home/disk/hayes2/dvimont/data
load nmc_hp_sst.mat
load nmc_logistics.mat

tkp = 1:ntim;
tshp = tshp(tkp,:);
ntim = size(tshp, 1);

tsnew = NaN * ones(ntim, nlat*nlon);
tsnew(:, kpt) = tshp;
tsnew = reshape(tsnew, ntim, nlat, nlon);

ctlim = [180 270 -6 6];
[xk, yk] = keep_var(ctlim, lon, lat);
ctstar = squeeze(mean2(mean2(shiftdim(tsnew(:, yk, xk), 1))));

clear tshp
load nmc_noice_sst.mat
ts = ts(tkp, :);

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

ctpat = ((ctstar - mean(ctstar)) / std(ctstar))' * tsnew / ntim;
ctpat = reshape(ctpat, nlat, nlon);

cd /home/disk/hayes2/dvimont/data
ctstar = (ctstar - mean(ctstar)) / std(ctstar);
%save ct_gr.mat ctstar ctpat
load ct_gr.mat

get_global
define_global

figure(1)
sd(1)
gcont(ctpat, [-5:.2:5])
dc
title(['NMC:  SST regressed on CT*'])
xlabel(['Contour Interval:  0.2 K (std)^-^1'])
sd(2)
plot((ctstar - mean(ctstar)) / std(ctstar))
set(gca, 'XTick',[49:60:409],'XTickLabel',[65:5:100],'YTick',[-3:3])
axis([0 409 -3 3.5])
xlabel('Year:  ticks correspond to January')
ylabel('STD')
title('CT* Time Series')
grid

cd /home/disk/hayes2/dvimont/data/Plots

%  Now, calculate G time series:

cd /home/disk/hayes2/dvimont/data
load nmc_noice_sst.mat
ntim = size(ts, 1);

%[ts, clim] = annave(ts, clim, 1);
%[ts, clim] = annave(ts(37:(ntim-36),:));
%ntim = size(ts, 1);

tsnew = NaN * ones(ntim, nlat*nlon);
tsnew(:, kpt) = ts;
tsnew = reshape(tsnew, ntim, nlat, nlon);
tsnew = cosweight(tsnew, lat);
tsnew = reshape(tsnew, ntim, nlat*nlon);

c = tsnew(:, kpt) * tsnew(:, kpt)' / length(kpt);
[lam, pc, per] = eof(c);

pc10 = ones(ntim,1) * (1./(std(pc(:,1:10)))) .* pc(:,1:10);
lds = pc10'*ts / ntim;

num = 1;
cint = 0.2;
tem = NaN * ones(1, nlat*nlon);
tem(1, kpt) = lds(num, :);
tem = reshape(tem, nlat, nlon);
sd(1)
gcont(tem, [-5:cint:5])
dc
title(['NMC:  EOF' num2str(num) ' of raw SST'])
xlabel(['Contour Interval:  ' num2str(cint) ' K (std)^-^1'])
sd(2)
plot(pc10(:,num))
set(gca, 'XTick',[49:60:409],'XTickLabel',[65:5:100],'YTick',[-3:3])
axis([0 409 -3 3.5])
xlabel('Year:  ticks correspond to January')
ylabel('STD')
title(['PC' num2str(num)])
grid

cd /home/disk/hayes2/dvimont/data/Plots

%  Now, calculate residual time series:

a1 = ctstar' * pc10(:,1) / ntim;
gr = pc10(:,1) - a1*ctstar;
gr = (gr - mean(gr)) / std(gr);

grpat = gr' * ts / ntim;

cint = 0.1;
tem = NaN * ones(1, nlat*nlon);
tem(1, kpt) = grpat;
tem = reshape(tem, nlat, nlon);
sd(1)
gcont(tem, [-5:cint:5])
dc
title(['NMC:  GR pattern'])
xlabel(['Contour Interval:  ' num2str(cint) ' K (std)^-^1'])
sd(2)
plot(gr)
set(gca, 'XTick',[49:60:409],'XTickLabel',[65:5:100],'YTick',[-3:3])
axis([0 409 -3 3.5])
xlabel('Year:  ticks correspond to January')
ylabel('STD')
title(['GR time series'])
grid

cd /home/disk/hayes2/dvimont/data/Plots

%  Check out other possibilities:

tkp = 37:ntim-36;
tkp = 1:ntim;
grlp = myrunning_ave(gr, 25);
grlp = myrunning_ave(grlp, 37);
grlp = (grlp(tkp) - mean(grlp(tkp))) / std(grlp(tkp));
grlppat = grlp' * ts(tkp, :) / length(tkp);

cint = 0.1;
tem = NaN * ones(1, nlat*nlon);
tem(1, kpt) = grlppat;
tem = reshape(tem, nlat, nlon);
tem = myrunning_ave(myrunning_ave(tem', 3)', 3);
sd(1)
gcont(tem, [-5:cint:5])
dc
title(['NMC:  Low Pass GR pattern'])
xlabel(['Contour Interval:  ' num2str(cint) ' K (std)^-^1'])
sd(2)
plot(grlp)
set(gca, 'XTick',[49:60:409],'XTickLabel',[65:5:100],'YTick',[-3:3])
axis([0 409 -2 2])
xlabel('Year:  ticks correspond to January')
ylabel('STD')
title(['Low Pass GR time series'])
grid

cd /home/disk/hayes2/dvimont/data/Plots

grhp = gr - myrunning_ave(myrunning_ave(gr, 25), 37);
grhp = (grhp - mean(grhp)) / std(grhp);
grhppat = grhp' * ts / ntim;

cint = 0.1;
tem = NaN * ones(1, nlat*nlon);
tem(1, kpt) = grhppat;
tem = reshape(tem, nlat, nlon);
sd(1)
gcont(tem, [-5:cint:5])
dc
title(['NMC:  High Pass GR pattern'])
xlabel(['Contour Interval:  ' num2str(cint) ' K (std)^-^1'])
sd(2)
plot(grhp)
set(gca, 'XTick',[49:60:409],'XTickLabel',[65:5:100],'YTick',[-3:3])
axis([0 409 -3 3.5])
xlabel('Year:  ticks correspond to January')
ylabel('STD')
title(['High Pass GR time series'])
grid

cd /home/disk/hayes2/dvimont/data/Plots

%  Check lag/lead relationship:

corr_grct = [];
for i = -24:12;
  corr_i = corr(ctstar, gr, i);
  corr_grct = [corr_grct corr_i];
end

subplot(2,1,1)
bar(-24:12, corr_grct)
grid
title(['Lagged Correlations between GR and CT*'])
xlabel(['Months:  Negative => CT* leads GR;  Positive => CT* lags GR'])
ylabel(['Correlation Coefficient'])
axis([-25 13 -0.2 0.5])

corr_grct = [];
corr_hpgrct = [];
for i = -24:12;
  corr_i = corr(ctstar, grhp, i);
  corr_grct = [corr_grct corr_i];
end

subplot(2,1,2)
bar(-24:12, corr_grct)
grid
title(['Lagged Correlations between High Pass GR and CT*'])
xlabel(['Months:  Negative => CT* leads GR;  Positive => CT* lags GR'])
ylabel(['Correlation Coefficient'])
axis([-25 13 -0.5 0.8])

cd /home/disk/hayes2/dvimont/data/Plots


%
%  Now, add GRLPPAT to sst to force CCM:

cd /home/disk/hayes/dvimont/ccm3.6/data/GR

filin = 'T42M5079.nc'
nc = netcdf(filin, 'nowrite');
  clat = nc{'lat'}(:);
  clon = nc{'lon'}(:);
  sst = nc{'SST'}(:);
nc = close(nc);

lonb = [lon((nlon-4):nlon)-360; lon; lon(1:5)+360];
temb = [tem(:,(nlon-4):nlon) tem tem(:,1:5)];
cgrlp = interp2(lonb, lat, temb, clon, clat');

figure(2)
XAX = clon;
YAX = clat;
gcont(cgrlp, [-5:cint:5]);
dc

cgrlp(find(isnan(cgrlp))) = zeros(size(find(isnan(cgrlp))));

icept = min(min(min(sst)));
sstw = icept * ones(size(sst));
for i = 1:12;
  kpsst = find(squeeze(sst(i,:)) > icept);
  sstw(i,kpsst) = cgrlp(kpsst) + squeeze(sst(i,kpsst));
end;

filin = 'gr_warm_sst.nc';
nc = netcdf(filin, 'write');
  nc{'SST'}(:) = sstw;
nc = close(nc);

sstc = icept * ones(size(sst));
for i = 1:12;
  kpsst = find(squeeze(sst(i,:)) > icept);
  sstc(i,kpsst) = -1*cgrlp(kpsst) + squeeze(sst(i,kpsst));
end;

filin = 'gr_cold_sst.nc';
nc = netcdf(filin, 'write');
  nc{'SST'}(:) = sstc;
nc = close(nc);