Global Index (short | long) | Local contents | Local Index (short | long)
This program contains code to look at SST differences between 1980-'present', and 1950-1979. This is in order to determine how to alter the Shea, Trenberth and Reynolds climatology, with which the CCM3.6 is forced.
| This script calls | |
|---|---|
%
% Plot the differences. For printing ease, only use seasonal
% average differences.
%
get_global
default_global
top = squeeze(mean(climcur([1 2 12], :, :) - climstr([1 2 12], :, :)));
bot = squeeze(mean(climcur(3:5, :, :) - climstr(3:5, :, :)));
%top = myrunning_ave(top, 3);top = myrunning_ave(top', 3)';
%bot = myrunning_ave(bot, 3);bot = myrunning_ave(bot', 3)';
%top = top .* lm; bot = bot .* lm;
top = myrunning_ave(top, 4);top = myrunning_ave(top', 6)';
bot = myrunning_ave(bot, 4);bot = myrunning_ave(bot', 6)';
dataset = ['COADS 4x6'];
%dataset = ['JONES'];
%dataset = ['NMC'];
%dataset = ['Reynolds EOF'];
cint = 0.2;
figure(1)
sp(1)
gcont(top, [-10:cint:10]);
dc;
title([dataset ': DJF SST, (1980-92) - (1950-79)']);
xlabel(['Contour Interval: ' num2str(cint) ' K']);
sp(2)
gcont(bot, [-10:cint:10]);
dc;
title([dataset ': MAM SST, (1980-92) - (1950-79)']);
xlabel(['Contour Interval: ' num2str(cint) ' K']);
cd /home/disk/tao/dvimont/matlab/CCM/Plots
top = squeeze(mean(climcur(6:8, :, :) - climstr(6:8, :, :)));
bot = squeeze(mean(climcur(9:11, :, :) - climstr(9:11, :, :)));
cint = 0.2;
sp(1)
gcont(top, [-10:cint:10]);
dc;
title([dataset ': JJA SST, (1980-92) - (1950-79)']);
xlabel(['Contour Interval: ' num2str(cint) ' K']);
sp(2)
gcont(bot, [-10:cint:10]);
dc;
title([dataset ': SON SST, (1980-92) - (1950-79)']);
xlabel(['Contour Interval: ' num2str(cint) ' K']);
cd /home/disk/tao/dvimont/matlab/CCM/Plots
%
% From here on, it's just getting the data. The graphics part is
% above. This is just to make things easier when cutting and pasting.
%
p = 1992; % Set present date to 1992
% First, look at the COADS climatology.
cd /home/disk/tao/data/coads/coads1
v = ['sst'];
ind1 = 1153; % Corresponds to January, 1950
%ind2 = 1512; % Corresponds to December, 1979
ind2 = 1248; % Corresponds to December, 1957
nc = netcdf('sst.mean.nc', 'nowrite');
nc = netcdf('sst.mean.nc', 'nowrite');
sststr = nc{v}(ind1:ind2,:,:);
lat = nc{'lat'}(:);
lon = nc{'lon'}(:);
mv = nc{v}.missing_value(:);
ao = nc{v}.add_offset(:);
sf = nc{v}.scale_factor(:);
nc = close(nc);
sststr(find(sststr == mv)) = NaN * ones(size(find(sststr == mv)));
sststr = sststr * sf;
sststr = sststr + ao;
[sststr, climstr] = annave(sststr);
cd /home/disk/tao/data/coads/coads1a
ind3 = 1; % Corresponds to January, 1980
ind4 = 144; % Corresponds to December, 1992
nc = netcdf('sst.mean.8095.nc', 'nowrite');
sstcur = nc{v}(ind3:ind4,:,:);
mv = nc{v}.missing_value(:);
ao = nc{v}.add_offset(:);
sf = nc{v}.scale_factor(:);
nc = close(nc);
sstcur(find(sstcur == mv)) = NaN * ones(size(find(sstcur == mv)));
sstcur = sstcur * sf;
sstcur = sstcur + ao;
[sstcur, climcur] = annave(sstcur);
%
% Now look at Jones data set
%
cd /home/disk/tao/data/gridded_land_and_ocean_temp
v = ['temp'];
nc = netcdf('jones18541995.nc', 'nowrite');
time = nc{'time'}(:);
year = floor(time / 1e10);
ind1 = min(find(year == 1950));
ind2 = max(find(year == 1979));
ind3 = min(find(year == 1980));
ind4 = max(find(year == 1992));
sststr = nc{v}(ind1:ind2,:,:);
sstcur = nc{v}(ind3:ind4,:,:);
lat = nc{'lat'}(:);
lon = nc{'lon'}(:);
mv = nc{v}.missing_value(:);
ao = nc{v}.add_offset(:);
sf = nc{v}.scale_factor(:);
nc = close(nc);
sststr(find(sststr == mv)) = NaN * ones(size(find(sststr == mv)));
sststr = sststr * sf;
sststr = sststr + ao;
[sststr, climstr] = annave(sststr);
sstcur(find(sstcur == mv)) = NaN * ones(size(find(sstcur == mv)));
sstcur = sstcur * sf;
sstcur = sstcur + ao;
[sstcur, climcur] = annave(sstcur);
%
% NMC: Here we'll have to compare with 1958 to 1979.
%
cd /home/disk/tao/data/nmc.reanalysis/monthly
nc = netcdf('land.sfc.gauss.nc','nowrite');
lm = nc{'land'}(:);
nc = close(nc);
lm(find(lm)) = NaN * ones(size(find(lm)));
lm = lm + 1;
v = ['air'];
nc = netcdf('sst.mon.mean.nc', 'nowrite');
ind1 = 1;
ind2 = 264;
ind3 = 265;
ind4 = 480;
sststr = nc{v}(ind1:ind2,:,:);
sstcur = nc{v}(ind3:ind4,:,:);
lat = nc{'lat'}(:);
lon = nc{'lon'}(:);
mv = nc{v}.missing_value(:);
ao = nc{v}.add_offset(:);
sf = nc{v}.scale_factor(:);
nc = close(nc);
sststr(find(sststr == mv)) = NaN * ones(size(find(sststr == mv)));
sststr = sststr * sf;
sststr = sststr + ao;
[sststr, climstr] = annave(sststr);
sstcur(find(sstcur == mv)) = NaN * ones(size(find(sstcur == mv)));
sstcur = sstcur * sf;
sstcur = sstcur + ao;
[sstcur, climcur] = annave(sstcur);
%
% Look at EOF reconstructed data:
%
cd /home/disk/tao/data/reynolds/eof
v = ['data'];
nc = netcdf('ssteof5092.nc', 'nowrite');
ind1 = 1;
ind2 = 360;
ind3 = 361;
ind4 = 516;
sststr = nc{v}(ind1:ind2,:,:);
sstcur = nc{v}(ind3:ind4,:,:);
lat = nc{'lat'}(:);
lon = nc{'lon'}(:);
mv = nc{v}.missing_value(:);
ao = nc{v}.add_offset(:);
sf = nc{v}.scale_factor(:);
nc = close(nc);
sststr(find(sststr == mv)) = NaN * ones(size(find(sststr == mv)));
sststr = sststr * sf;
sststr = sststr + ao;
[sststr, climstr] = annave(sststr);
sstcur(find(sstcur == mv)) = NaN * ones(size(find(sstcur == mv)));
sstcur = sstcur * sf;
sstcur = sstcur + ao;
[sstcur, climcur] = annave(sstcur);
%
% Compare COADS and JONES 1950-58 to 1958-79. This is to
% determine if the NMC data set is fine to use for this.
%
cd /home/disk/tao/data/coads/coads1
v= ['sst'];
ind1 = 1153; % Corresponds to January, 1950
ind2 = 1248; % Corresponds to December, 1957
ind3 = 1249;
ind4 = 1512;
nc = netcdf('sst.mean.nc', 'nowrite');
sststr = nc{v}(ind1:ind2,:,:);
sstcur = nc{v}(ind3:ind4,:,:);
lat = nc{'lat'}(:);
lon = nc{'lon'}(:);
mv = nc{v}.missing_value(:);
ao = nc{v}.add_offset(:);
sf = nc{v}.scale_factor(:);
nc = close(nc);
sststr(find(sststr == mv)) = NaN * ones(size(find(sststr == mv)));
sststr = sststr * sf;
sststr = sststr + ao;
[sststr, climstr] = annave(sststr);
sstcur(find(sstcur == mv)) = NaN * ones(size(find(sstcur == mv)));
sstcur = sstcur * sf;
sstcur = sstcur + ao;
[sstcur, climcur] = annave(sstcur);
coads_diff = climstr - climcur;
%
% Now look at Jones data set
%
cd /home/disk/tao/data/gridded_land_and_ocean_temp
v = ['temp'];
nc = netcdf('jones18541995.nc', 'nowrite');
time = nc{'time'}(:);
year = floor(time / 1e10);
ind1 = min(find(year == 1950));
ind2 = max(find(year == 1957));
ind3 = min(find(year == 1958));
ind4 = max(find(year == 1979));
sststr = nc{v}(ind1:ind2,:,:);
sstcur = nc{v}(ind3:ind4,:,:);
latj = nc{'lat'}(:);
lonj = nc{'lon'}(:);
mv = nc{v}.missing_value(:);
ao = nc{v}.add_offset(:);
sf = nc{v}.scale_factor(:);
nc = close(nc);
sststr(find(sststr == mv)) = NaN * ones(size(find(sststr == mv)));
sststr = sststr * sf;
sststr = sststr + ao;
[sststr, climstr] = annave(sststr);
sstcur(find(sstcur == mv)) = NaN * ones(size(find(sstcur == mv)));
sstcur = sstcur * sf;
sstcur = sstcur + ao;
[sstcur, climcur] = annave(sstcur);
jones_diff = climstr - climcur;
get_global
default_global
figure(1)
mon = [1 2 12]; monlab = ['DJF'];
sp(1)
tem = squeeze(mean2(coads_diff(mon,:,:)));
tem = myrunning_ave(tem, 3);
tem = myrunning_ave(tem', 3)';
gcont(tem, [-10:.5:10]);
dc
title(['COADS SST ' monlab ': (1950-57)-(1958-79)']);
xlabel(['Contour Interval 0.25 C']);
sp(2)
XAX = lonj;
YAX = latj;
tem = squeeze(mean2(jones_diff(mon,:,:)));
gcont(tem, [-10:.25:10]);
dc;
title(['JONES SST ' monlab ': (1950-57)-(1958-79)']);
xlabel(['Contour Interval 0.25 C']);
%
%
%
% Finally, interpolate the NMC stuff to the CCM grid:
%
%
%
cd /home/disk/tao/data/nmc.reanalysis/monthly
nc = netcdf('land.sfc.gauss.nc','nowrite');
lm = nc{'land'}(:);
nc = close(nc);
lm = -1 * (lm - 1);
v = ['air'];
nc = netcdf('sst.mon.mean.nc', 'nowrite');
ind1 = 1;
ind2 = 264;
ind3 = 265;
ind4 = 480;
sststr = nc{v}(ind1:ind2,:,:);
sstcur = nc{v}(ind3:ind4,:,:);
lat = nc{'lat'}(:);
lon = nc{'lon'}(:);
mv = nc{v}.missing_value(:);
ao = nc{v}.add_offset(:);
sf = nc{v}.scale_factor(:);
nc = close(nc);
sststr(find(sststr == mv)) = NaN * ones(size(find(sststr == mv)));
sststr = sststr * sf;
sststr = sststr + ao;
[sststr, climstr] = annave(sststr);
sstcur(find(sstcur == mv)) = NaN * ones(size(find(sstcur == mv)));
sstcur = sstcur * sf;
sstcur = sstcur + ao;
[sstcur, climcur] = annave(sstcur);
nmc_diff = climcur - climstr;
for i = 1:12;
nmc_diff(i,:,:) = lm .* squeeze(nmc_diff(i,:,:));
end
for i = 1:12;
tem = squeeze(nmc_diff(i,:,:));
tem = myrunning_ave(tem, 3);
tem = myrunning_ave(tem', 3)';
nmc_diff(i,:,:) = tem;
end
for i = 1:12;
nmc_diff(i,:,:) = lm .* squeeze(nmc_diff(i,:,:));
end
[xk, yk] = keep_var([0 360 -45 60], lon, lat);
ssta = zeros(size(nmc_diff));
ssta(:,yk,xk) = nmc_diff(:,yk,xk);