/[MITgcm]/MITgcm_contrib/gael/matlab_class/ecco_v4/cost_sst.m
ViewVC logotype

Annotation of /MITgcm_contrib/gael/matlab_class/ecco_v4/cost_sst.m

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.16 - (hide annotations) (download)
Tue Mar 22 20:47:48 2016 UTC (9 years, 4 months ago) by gforget
Branch: MAIN
CVS Tags: checkpoint65v
Changes since 1.15: +2 -3 lines
- cost_altimeter.m: also look for sigma in [dirModel 'inputfiles/']; update to 'r5.err'
- cost_seaicearea.m: also look for input files in [dirModel 'inputfiles/']
- cost_sst.m: get sigma_surf_0p5.bin from [dirModel 'inputfiles/']

1 gforget 1.6 function []=cost_sst(dirModel,dirMat,doComp,dirTex,nameTex);
2 gforget 1.1 %object: compute cost function term for sst data
3     %inputs: dimodel is the model directory
4 gforget 1.4 % dirMat is the directory where diagnozed .mat files will be saved
5     % -> set it to '' to use the default [dirModel 'mat/']
6 gforget 1.1 % doComp is a switch (1->compute; 0->display)
7 gforget 1.4 %optional: dirTex is the directory where tex and figures files are created
8     % (if not specified then display all results to screen instead)
9 gforget 1.6 % nameTex is the tex file name (default : 'myPlots')
10 gforget 1.1
11 gforget 1.14 if isempty(dirMat); dirMat=[dirModel 'mat' filesep]; else; dirMat=[dirMat filesep]; end;
12 gforget 1.12 if isempty(dir(dirMat)); mkdir([dirMat]); end;
13 gforget 1.4
14     %determine if and where to create tex and figures files
15 gforget 1.14 dirMat=[dirMat filesep];
16 gforget 1.4 if isempty(who('dirTex'));
17     addToTex=0;
18     else;
19     if ~ischar(dirTex); error('mis-specified dirTex'); end;
20 gforget 1.6 addToTex=1;
21     if isempty(who('nameTex')); nameTex='myPlots'; end;
22 gforget 1.14 fileTex=[dirTex filesep nameTex '.tex'];
23 gforget 1.4 end;
24 gforget 1.1
25     if doComp;
26    
27 gforget 1.7 %grid, params and inputs
28    
29     gcmfaces_global; global myparms;
30 gforget 1.3 if ~isfield(mygrid,'XC'); grid_load('./GRID/',5,'compact'); end;
31     if ~isfield(mygrid,'LATS_MASKS'); gcmfaces_lines_zonal; end;
32 gforget 1.7 if isfield(myparms,'yearFirst'); yearFirst=myparms.yearFirst; yearLast=myparms.yearLast;
33     else; yearFirst=1992; yearLast=2011;
34     end;
35 gforget 1.1
36 gforget 1.13 nameReynolds='reynolds_oiv2_r1';
37     nameRemss='tmi_amsre_oisst_r1';
38     nameL2p='tmi_amsre_l2p_r1';
39     if ~isempty(dir([dirModel nameReynolds '*']));
40     dirData=dirModel; subdirReynolds=''; subdirRemss=''; subdirL2p='';
41 gforget 1.15 elseif ~isempty(dir([dirModel 'inputfiles/' nameReynolds '*']));
42     dirData=[dirModel 'inputfiles/']; subdirReynolds=''; subdirRemss=''; subdirL2p='';
43 gforget 1.13 else;
44 gforget 1.15 error(['could not find ' nameReynolds '*']);
45 gforget 1.1 end;
46    
47 gforget 1.16 nameSigma='sigma_surf_0p5.bin';
48 gforget 1.13 if ~isempty(dir([dirModel nameSigma]));
49     dirSigma=dirModel;
50 gforget 1.15 elseif ~isempty(dir([dirModel 'inputfiles/' nameSigma]));
51     dirSigma=[dirModel 'inputfiles/'];
52 gforget 1.13 else;
53 gforget 1.15 error(['could not find ' nameSigma]);
54 gforget 1.13 end;
55 gforget 1.15
56 gforget 1.16 fld_err=read_bin([dirSigma nameSigma],1,0);
57 gforget 1.1 fld_w=fld_err.^-2;
58    
59 gforget 1.13 nameTbar='m_theta_mon';
60     if ~isempty(dir([dirModel nameTbar '*']));
61     dirTbar=dirModel;
62     else;
63     dirTbar=[dirModel 'barfiles' filesep];
64     end;
65     fileModel=dir([dirTbar nameTbar '*data']); fileModel=fileModel.name;
66 gforget 1.1
67 gforget 1.7 %computational loop
68     mod_m_rey=repmat(NaN*mygrid.mskC(:,:,1),[1 1 12*(yearLast-yearFirst+1)]);
69     mod_m_remss=repmat(NaN*mygrid.mskC(:,:,1),[1 1 12*(yearLast-yearFirst+1)]);
70     %
71     zm_mod=repmat(ones(length(mygrid.LATS),1),[1 12*(yearLast-yearFirst+1)]);
72     zm_rey=repmat(ones(length(mygrid.LATS),1),[1 12*(yearLast-yearFirst+1)]);
73     zm_mod_m_rey=repmat(ones(length(mygrid.LATS),1),[1 12*(yearLast-yearFirst+1)]);
74     zm_remss=repmat(ones(length(mygrid.LATS),1),[1 12*(yearLast-yearFirst+1)]);
75     zm_mod_m_remss=repmat(ones(length(mygrid.LATS),1),[1 12*(yearLast-yearFirst+1)]);
76     %
77     for ycur=yearFirst:yearLast;
78     fprintf(['starting ' num2str(ycur) '\n']);
79     tic;
80 gforget 1.1 for mcur=1:12;
81 gforget 1.7 %load Reynolds SST
82     file0=[dirData subdirReynolds nameReynolds '_' num2str(ycur)];
83 gforget 1.11 if ~isempty(dir(file0)); fld_rey=read_bin(file0,mcur,0); else; fld_rey=NaN*mygrid.mskC(:,:,1); end;
84 gforget 1.7 fld_rey(find(fld_rey==0))=NaN;
85     fld_rey(find(fld_rey<-99))=NaN;
86    
87     %load Remss SST
88     file0=[dirData subdirRemss nameRemss '_' num2str(ycur)];
89 gforget 1.11 if ~isempty(dir(file0)); fld_remss=read_bin(file0,mcur,0); else; fld_remss=NaN*mygrid.mskC(:,:,1); end;
90 gforget 1.7 fld_remss(find(fld_remss==0))=NaN;
91     fld_remss(find(fld_remss<-99))=NaN;
92 gforget 1.1
93 gforget 1.7 %load model SST
94     mm=(ycur-yearFirst)*12+mcur;
95 gforget 1.13 fld_mod=read_bin([dirTbar fileModel],mm,1).*mygrid.mskC(:,:,1);
96 gforget 1.7
97     %store misfit maps
98     mod_m_rey(:,:,mm)=fld_mod-fld_rey;
99     mod_m_remss(:,:,mm)=fld_mod-fld_remss;
100    
101     %comp zonal means
102     zm_mod(:,mm)=calc_zonmean_T(fld_mod.*mygrid.mskC(:,:,1));
103    
104     msk=mygrid.mskC(:,:,1); msk(fld_rey==0)=NaN;
105     zm_rey(:,mm)=calc_zonmean_T(fld_rey.*msk);
106     zm_mod_m_rey(:,mm)=calc_zonmean_T(fld_mod-fld_rey.*msk);
107    
108     msk=mygrid.mskC(:,:,1); msk(fld_remss==0)=NaN;
109     zm_remss(:,mm)=calc_zonmean_T(fld_remss.*msk);
110     zm_mod_m_remss(:,mm)=calc_zonmean_T(fld_mod-fld_remss.*msk);
111 gforget 1.1 end;
112 gforget 1.7 toc;
113 gforget 1.1 end;
114    
115 gforget 1.7 %compute rms maps
116     rms_to_rey=sqrt(nanmean(mod_m_rey.^2,3));
117     rms_to_remss=sqrt(nanmean(mod_m_remss.^2,3));
118 gforget 1.1
119 gforget 1.10 if ~isdir([dirMat 'cost/']); mkdir([dirMat 'cost/']); end;
120     eval(['save ' dirMat '/cost/cost_sst.mat fld_err rms_* zm_*;']);
121 gforget 1.1
122     else;%display previously computed results
123    
124     global mygrid;
125    
126 gforget 1.9 if isdir([dirMat 'cost/']); dirMat=[dirMat 'cost/']; end;
127    
128 gforget 1.4 eval(['load ' dirMat '/cost_sst.mat;']);
129 gforget 1.1
130 gforget 1.8 if ~isempty(who('fld_rms'));
131     figure; m_map_gcmfaces(fld_rms,0,{'myCaxis',[0:0.2:1.2 1.5:0.5:3 4:1:6 8 10]/2});
132     myCaption={'modeled-observed rms -- sea surface temperature (K)'};
133     if addToTex; write2tex(fileTex,2,myCaption,gcf); end;
134     else;
135    
136     figure; m_map_gcmfaces(rms_to_rey,0,{'myCaxis',[0:0.2:1.2 1.5:0.5:3 4:1:6 8 10]/2});
137     myCaption={'modeled-Reynolds rms -- sea surface temperature (K)'};
138     if addToTex; write2tex(fileTex,2,myCaption,gcf); end;
139    
140     figure; m_map_gcmfaces(rms_to_remss,0,{'myCaxis',[0:0.2:1.2 1.5:0.5:3 4:1:6 8 10]/2});
141     myCaption={'modeled-REMSS rms -- sea surface temperature (K)'};
142     if addToTex; write2tex(fileTex,2,myCaption,gcf); end;
143    
144     ny=size(zm_rey,2)/12;
145     [xx,yy]=meshgrid(1992+([1:ny*12]-0.5)/12,mygrid.LATS);
146    
147     figureL;
148     obs=zm_rey; obsCycle=sst_cycle(obs);
149     mod=zm_rey+zm_mod_m_rey; modCycle=sst_cycle(mod);
150     mis=zm_mod_m_rey; misCycle=sst_cycle(mis);
151     subplot(3,1,1); pcolor(xx,yy,obs-obsCycle); shading flat; caxis([-1 1]*1); colorbar;
152     set(gca,'FontSize',14); set(gca,'XTick',[]); ylabel('latitude');
153     title('Reynolds sst anomaly');
154     subplot(3,1,2); pcolor(xx,yy,mod-modCycle); shading flat; caxis([-1 1]*1); colorbar;
155     set(gca,'FontSize',14); set(gca,'XTick',[]); ylabel('latitude');
156     title('ECCO sst anomaly');
157     subplot(3,1,3); pcolor(xx,yy,mis-misCycle); shading flat; caxis([-1 1]*1); colorbar;
158     set(gca,'FontSize',14); ylabel('latitude'); title('ECCO-Reynolds sst misfit');
159     myCaption={'ECCO and Reynolds zonal mean sst anomalies (K)'};
160     if addToTex; write2tex(fileTex,2,myCaption,gcf); end;
161    
162     figureL;
163     obs=zm_remss; obsCycle=sst_cycle(obs);
164     mod=zm_remss+zm_mod_m_remss; modCycle=sst_cycle(mod);
165     mis=zm_mod_m_remss; misCycle=sst_cycle(mis);
166     subplot(3,1,1); pcolor(xx,yy,obs-obsCycle); shading flat; caxis([-1 1]*1); colorbar;
167     set(gca,'FontSize',14); set(gca,'XTick',[]); ylabel('latitude');
168     title('REMSS sst anomaly');
169     subplot(3,1,2); pcolor(xx,yy,mod-modCycle); shading flat; caxis([-1 1]*1); colorbar;
170     set(gca,'FontSize',14); set(gca,'XTick',[]); ylabel('latitude');
171     title('ECCO sst anomaly');
172     subplot(3,1,3); pcolor(xx,yy,mis-misCycle); shading flat; caxis([-1 1]*1); colorbar;
173     set(gca,'FontSize',14); ylabel('latitude'); title('ECCO-REMSS sst misfit');
174     myCaption={'ECCO and REMSS zonal mean sst anomalies (K)'};
175     if addToTex; write2tex(fileTex,2,myCaption,gcf); end;
176 gforget 1.7
177 gforget 1.8 end;
178    
179     end;
180 gforget 1.1
181 gforget 1.8 function [zmCycle]=sst_cycle(zmIn);
182 gforget 1.1
183 gforget 1.8 ny=size(zmIn,2)/12;
184     zmCycle=NaN*zeros(179,12);
185     for mm=1:12;
186     zmCycle(:,mm)=nanmean(zmIn(:,mm:12:ny*12),2);
187 gforget 1.1 end;
188 gforget 1.8 zmCycle=repmat(zmCycle,[1 ny]);
189 gforget 1.1

  ViewVC Help
Powered by ViewVC 1.1.22