Documentation of define_SST_clim


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


Help text


  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.


Cross-Reference Information

This script calls

Listing of script define_SST_clim




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