Documentation of coads_sst_calc_GR


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


Help text

cd /home/disk/tao/data/coads/coads1
filin = 'sst.mean.nc';

Cross-Reference Information

This script calls

Listing of script coads_sst_calc_GR


clear
cd /home/disk/tao/data/coads/sstanom4by6
filin = 'sstcoadsanom4by6.18541993.nc'

lim1 = 553;
%lim2 = 1512;
lim2 = 1680;
varnam = 'data';
nc = netcdf(filin, 'nowrite');
  ts = nc{varnam}(lim1:lim2,:,:);
  datets = nc{'time'}(lim1:lim2);
  lat = nc{'lat'}(:);
  lon = nc{'lon'}(:);
  add_offset = nc{varnam}.add_offset(:);
  scale_factor = nc{varnam}.scale_factor(:);
  mv = nc{varnam}.missing_value(:);
nc = close(nc)
ts = ts * scale_factor;
ts = ts + add_offset;
mv = mv * scale_factor;
mv = mv + add_offset;

cd /home/disk/tao/data/coads/coads1a
filin = 'sst.mean.8095.nc';
nc = netcdf(filin, 'nowrite');
  ts2 = nc{var}(:,:,:);
  add_offset = nc{var}.add_offset(:);
  scale_factor = nc{var}.scale_factor(:);
  mv2 = nc{var}.missing_value(:);
nc = close(nc);
ts2 = ts2 * scale_factor;
ts2 = ts2 + add_offset;
mv2 = mv2 * scale_factor;
mv2 = mv2 + add_offset;

ts2(find(ts2 == mv2)) = mv * ones(size(find(ts2 == mv2)));
ts = [ts; ts2];
clear ts2

[ntim, nlat, nlon] = size(ts);
ts = reshape(ts, ntim, nlat*nlon);
tsave = mean(ts);
kp = find(tsave ~= mv);

ts = ts(:, kp);

kp2 = [];
for i = 1:length(kp);
  sznan = length(find(ts(:, i) == mv));
  if sznan < 1002;
    kp2 = [kp2, i];
  end;
end;
kp3 = find(ismember(kp, kp(kp2)));
ts = ts(:, kp3);
kp = kp(kp3);

ts(find(ts == mv)) = NaN * ones(size(find(ts == mv)));
[ts, clim] = annave(ts);

%  Find CT*:

getlp = 0;
if getlp;

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

  cd /home/disk/hayes2/dvimont/data
  save coads_2x2_sst.mat tshp tslp ts;

else

  cd /home/disk/hayes2/dvimont/data
  load coads_2x2_sst.mat
  ntim = size(ts, 1);
  nlat = length(lat);
  nlon = length(lon);

end

%kptime = 37:(ntim - 36)

%kptime = 1:ntim;
kptime = 1:612;
ntim = 612;

clear tslp
%[tshp, clim] = annave(tshp);
tsnew = NaN * ones(length(kptime), nlat*nlon);
tsnew(:, kp) = ts(kptime, :);
tsnew = reshape(tsnew, length(kptime), nlat, nlon);

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

ct = (ctstar - mean2(ctstar)) / std(ctstar(find(~isnan(ctstar))));
ctpat = regress_nan(ctstar, ts(kptime, :));

%  Highpass filter:

ctstar = ct - myrunning_ave(myrunning_ave(ct, 25),37);
ctstar = (ctstar - mean2(ctstar)) / std(ctstar(find(~isnan(ctstar))));
cthpat = regress_nan(ctstar, ts(kptime, :));


tem = NaN * ones(1, nlat*nlon);
tem(kp) = cthpat;
tem = reshape(tem, nlat, nlon);

get_global
default_global
FRAME = [min(lon) (min(lon) + 360) -90 90];

figure(1)
sd(1)
gcont(tem, [-1:.2:1]);
dc
sd(2)
plot(ctstar)
set(gca, 'XTick', [1:120:1153], 'XTickLabel', [1900:10:2000])
axis([0 ntim+1 -3 4])
grid

%  Now look at EOF's:

kptime = 1:500;
clear tshp
[ts, dum] = annave(ts(kptime, :));
ntim = size(ts, 1);

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

%c = covar_nan(tsnew', tsnew');

%  Try a different approach:

n_not_nan = zeros(ntim);
tsc = zeros(size(tsnew));
for i = 1:ntim;
  kpc = find(~isnan(tsnew(i,:)));
  tsc(i,kpc) = tsnew(i,kpc);
  n_not_nan(i,kpc) = ones(1,length(kpc));
end

n = n_not_nan * n_not_nan';

c = (tsc * tsc') * 1./n;

[lam, pcs, per] = eof(c);
pcs = ones(ntim,1) * (1./(std(pcs))) .* (pcs - ones(ntim, 1)*mean(pcs));
%lds = pcs(:,1:10)'*ts/ntim;

tm = ntim
num = 1;
tem2 = pcs(1:tm,num);
tem2 = (tem2 - mean(tem2)) / std(tem2);
tem = NaN * ones(1, nlat*nlon);
tem(1, kp) = regress_nan(tem2, ts(1:tm, :));
tem = reshape(tem, nlat, nlon);

figure(1)
sd(1)
gcont(tem, [-5:.25:5]);
dc
sd(2)
plot(tem2);
%set(gca, 'XTick', [1:120:1153], 'XTickLabel', [1900:10:2000])
axis([0 (tm+1) -3 3])
%axis([1 ntim+1-500 -3 4])
grid

%  Now regress ct* against GR:

g = pcs(:,1);
g = (g - mean(g)) / std(g);

ind = find(~isnan(ctstar(1:500)));
gr = g - corr(g(ind), ctstar(ind)) * ctstar(kptime);
gr = (gr - mean2(gr)) / std(gr(ind));

tem = NaN * ones(1, nlat*nlon);
tem(1,kp) = regress_nan(gr, ts);
tem = reshape(tem, nlat, nlon);
tem = myrunning_ave(myrunning_ave(tem', 2)', 2);

cint = 0.1;
sd(1)
gcont(tem, [-5:cint:5])
dc
title(['COADS:  GR pattern'])
xlabel(['Contour Interval:  ' num2str(cint) ' K (std)^-^1'])
sd(2)
plot(gr)
set(gca, 'XTick', [1:60:626], 'XTickLabel', [1950:5:2000])
axis([0 ntim+1 -3 4])
xlabel('Year:  ticks correspond to January')
ylabel('STD')
title(['Low Pass GR time series'])
grid


%  Check out other possibilities:

grlp = myrunning_ave(gr, 25);
grlp = myrunning_ave(grlp, 37);
grlp = (grlp - mean2(grlp)) / std(grlp(find(~isnan(grlp))));

cint = 0.1;
tem = NaN * ones(1, nlat*nlon);
tem(1, kp) = regress_nan(grlp, ts);
tem = reshape(tem, nlat, nlon);
%tem = myrunning_ave(tem, 2);
%tem = myrunning_ave(tem', 2);
%tem = tem';
sd(1)
gcont(tem, [-5:cint:5])
dc
title(['COADS2x2:  Low Pass GR pattern'])
xlabel(['Contour Interval:  ' num2str(cint) ' K (std)^-^1'])
sd(2)
plot(grlp)
set(gca, 'XTick', [1:60:626], 'XTickLabel', [1950:5:2000])
axis([0 ntim+1 -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);

cint = 0.1;
tem = NaN * ones(1, nlat*nlon);
tem(1, kp) = regress_nan(grhp, ts);
tem = reshape(tem, nlat, nlon);
tem = myrunning_ave(myrunning_ave(tem', 2), 2)';
sd(1)
gcont(tem, [-5:cint:5])
dc
title(['COADS2x2:  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

%  Just for the heck of it, try rotating the loadings.

nkp = 80;    %  Allows 50% var explained

lds = zeros(nkp, size(ts, 2));
for i = 1:nkp;
  lds(i,:) = regress_nan(pcs(:,i)', ts);  
end

wgt = diag(lds * lds');
rlds = ((1./sqrt(wgt)) * ones(1, size(lds, 2))) .* lds;
[frot, var] = varimax(rlds', lam(1:nkp), nkp, 1, 'N');


prot = frot' * resid' / size(frot,1);
prot = prot';
ptem = prot - (ones(size(prot, 1), 1) * mean(prot));
ptem = ptem .* (ones(size(prot, 1), 1) * (1./(std(prot))));
ftem = ptem' * resid ./ ntim;
ftem = ftem';