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