/[MITgcm]/MITgcm_contrib/enderton/Diagnostics/DiagLoad.m
ViewVC logotype

Contents of /MITgcm_contrib/enderton/Diagnostics/DiagLoad.m

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


Revision 1.13 - (show annotations) (download)
Mon Sep 5 18:48:27 2005 UTC (18 years, 8 months ago) by enderton
Branch: MAIN
CVS Tags: HEAD
Changes since 1.12: +7 -9 lines
The long-awaited modification to DiagLoadGradsData.m to allow for reading in data spanning multiple files for Andrea.

1 function [data,xax,yax,time,pltslc] = ...
2 DiagLoad(fln,trl,dat,dad,grd,itr,tst,flu,ddf,gdf,avg,slc,pst,...
3 LoadGridData,DiagDebug,GridSuffix,ZcordFile,Index,Dim,Vector,Mate,...
4 Grads,Year0Iter,SecPerYear,Months,FieldName);
5
6
7 % Load parameters.
8 DiagGenParam;
9 DiagFieldParamA;
10 DiagFieldParamO;
11 DiagFieldParamI;
12 DiagFieldParamC;
13
14 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
15 % Prepare for the various data types, set time %
16 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
17
18 % Currently the function can handle time averages (dat=='Tav'), which must
19 % be monthly mean, and instantaneous data (dat=='Ins'). There is also an
20 % option for generic data (dat=='Non') which, if the field name is exactly
21 % specified, is able to load any type file.
22 if isequal(dat,'Tav')
23 filesuffix = 'tave';
24 if isequal(flu,'C'), mnchandle = 'cpl_tave.*';
25 else , mnchandle = 'tave.*' ; end
26 elseif isequal(dat,'Ins')
27 filesuffix = ''; mnchandle = 'state.*';
28 elseif isequal(dat(1:2),'Mn')
29 filesuffix = '';
30 if ismember(dat,{'MnA','MnO'}), mnchandle = 'monitor.*'; end
31 if isequal(dat,'MnI'), mnchandle = 'monitor_sice.*'; end
32 if isequal(dat,'MnL'), mnchandle = 'monitor_land.*'; end
33 elseif ismember(dat,{'','Non','None'})
34 filesuffix = ''; mnchandle = '';
35 else
36 error(['DataType not recognized: ',datatype]);
37 end
38
39 % Time stuff (itr = 0 is start of new 360 day year).
40 if isempty(Months)
41 months = (itr-Year0Iter)./(30.*24.*3600./tst);
42 else
43 months = Months;
44 end
45 time = months/12;
46
47 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
48 % Read in data %
49 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
50
51 % Open grads files
52 if ~isequal(Grads,0)
53 if DiagDebug, disp([' Debug -- Loading GRADS field.']); end
54 [data,xax,yax,zax,months,time,dim] = ...
55 DiagLoadGradsData(Grads,dad,fln,DiagDebug);
56 if DiagDebug, disp([' Debug -- ''data'' size after load: ',...
57 mat2str(size(data))]); end
58 data = DiagAverage(data,fln,avg,months,ddf,dim);
59 if DiagDebug, disp([' Debug -- ''data'' size after averaging: ',...
60 mat2str(size(data))]); end
61 [data,xax,yax,pltslc] = ...
62 DiagSliceGradsData(fln,flu,slc,data,xax,yax,zax);
63 if DiagDebug, disp([' Debug -- ''data'' size after slicing: ',...
64 mat2str(size(data))]); end
65
66 % Load monitor data.
67 elseif isequal(dat(1:2),'Mn')
68 [data,time] = ...
69 DiagLoadMonitor(fln,mnchandle,dad,itr,tst,SecPerYear,DiagDebug);
70 xax = time; yax = NaN; pltslc = 'timfld';
71
72 % Load AIM physics data. The data is all stuffed into one file called
73 % 'aimPhy' which currently only comes in MDS format. When loading a field,
74 % call the variable name that is used in the actual MITgcm code. These
75 % variables are given in 'DiagGenParam'. Here, we check that to see if the
76 % parameter is an AIM parameter, then load the 'aimPhy' file and extract
77 % the data with the proper index as specified in 'DiagGenParam'. For total
78 % precipitation ('TotP') and evaporation minus precipitation ('EmP') some
79 % simple calculations of the AIM fields are performed and the U and V
80 % stresses (on atmosphere) must converted to a lat-lon grid.
81 elseif ismember(fln,aimparameters)
82 if isequal(ddf,'MNC')
83 error('Aim physics reader not set to handle ''MNC'' data format.')
84 end
85 data = DiagLoad_Local('aimPhy',dat,dad,grd,itr,ddf,filesuffix,mnchandle);
86 if isequal(fln,'TotP')
87 data = data(:,:,PRECNV,:) ...
88 + data(:,:,PRECLS,:);
89 elseif isequal(fln,'EmP')
90 data = data(:,:,EVAP ,:) ...
91 - data(:,:,PRECNV,:) ...
92 - data(:,:,PRECLS,:);
93 elseif ismember(fln,{'USTR','VSTR'})
94 [XC,XG,YC,YG,Ylat,ZC,ZG,RAC,drC,drF,HFacC,HFacW,HFacS,dxG,dyG,dxC,dyC] = ...
95 DiagLoadGridData(LoadGridData,grd,gdf,flu,GridSuffix,ZcordFile);
96 eval(['USTRdata = data(:,:,',num2str(USTR),',:);']);
97 eval(['VSTRdata = data(:,:,',num2str(VSTR),',:);']);
98 [USTRdata,VSTRdata]=uvcube2latlon(XC,YC,USTRdata,VSTRdata,XL,YL);
99 if isequal(fln,'USTR'), data = USTRdata;
100 elseif isequal(fln,'VSTR'), data = VSTRdata; end
101 else
102 eval(['data = data(:,:,',fln,',:);']);
103 end
104 data = squeeze(data(:,:,1,:));
105 data = DiagAverage(data,fln,avg,months,ddf,Dim);
106 [data,xax,yax,pltslc] = ...
107 DiagSlice(data,fln,trl,dat,dad,grd,itr,tst,flu,...
108 ddf,gdf,avg,slc,pst,LoadGridData,GridSuffix,ZcordFile,Vector,FieldName);
109
110 % Load coupled fields. Like AIM, the data is all stuffed into one file
111 % called either 'cplFldtave.*' (MDS) or 'cpl_tave.*' (MNC). Variables within
112 % the MDS files given in 'DiagGenParam', accessed directly with MNC. TX
113 % and TY (stress on ocean) must be converted to lat-lon grid.
114 elseif ismember(fln,cplparameters)
115 if ismember(fln,{'TX','TY'})
116 [XC,XG,YC,YG,Ylat,ZC,ZG,RAC,drC,drF,HFacC,HFacW,HFacS,dxG,dyG,dxC,dyC] = ...
117 DiagLoadGridData(LoadGridData,grd,gdf,flu,GridSuffix,ZcordFile);
118 if isequal(ddf,'MNC')
119 TXdata = DiagLoad_Local('TX',dat,dad,grd,itr,ddf,filesuffix,mnchandle);
120 TYdata = DiagLoad_Local('TY',dat,dad,grd,itr,ddf,filesuffix,mnchandle);
121 elseif isequal(ddf,'MDS')
122 data = DiagLoad_Local('cplFld',dat,dad,grd,itr,ddf,filesuffix,mnchandle);
123 eval(['TXdata = squeeze(data(:,:,',num2str(TX),',:));']);
124 eval(['TYdata = squeeze(data(:,:,',num2str(TY),',:));']);
125 end
126 [TXdata,TYdata]=uvcube2latlon(XC,YC,TXdata,TYdata,XL,YL);
127 if isequal(fln,'TX'), data = TXdata;
128 elseif isequal(fln,'TY'), data = TYdata; end
129 else
130 if isequal(ddf,'MNC')
131 data = DiagLoad_Local(fln,dat,dad,grd,itr,ddf,filesuffix,mnchandle);
132 elseif isequal(ddf,'MDS')
133 data = DiagLoad_Local('cplFld',dat,dad,grd,itr,ddf,filesuffix,mnchandle);
134 eval(['data = squeeze(data(:,:,',fln,',:));']);
135 end
136 if isequal(fln,'SLP'), data = data ./ 100; end
137 end
138 data = DiagAverage(data,fln,avg,months,ddf,Dim);
139 [data,xax,yax,pltslc] = ...
140 DiagSlice(data,fln,trl,dat,dad,grd,itr,tst,flu,...
141 ddf,gdf,avg,slc,pst,LoadGridData,GridSuffix,ZcordFile,Vector,FieldName);
142
143 % Load ice parameters. Note that as the ice variable names appear to be in
144 % constant flux, this part quickly becomes out of date.
145 elseif ismember(fln,iceparameters)
146 if isequal(dat,'Ins')
147 data = DiagLoad_Local([fln,'-T'],dat,dad,grd,itr,ddf,filesuffix,mnchandle);
148 else
149 data = DiagLoad_Local('thSIce_',dat,dad,grd,itr,ddf,filesuffix,mnchandle);
150 eval(['data = data(:,:,',fln,',:);']);
151 data = squeeze(data(:,:,1,:));
152 end
153 data = DiagAverage(data,fln,avg,months,ddf,Dim);
154 [data,xax,yax,pltslc] = ...
155 DiagSlice(data,fln,trl,dat,dad,grd,itr,tst,flu,...
156 ddf,gdf,avg,slc,pst,LoadGridData,GridSuffix,ZcordFile,Vector,FieldName);
157
158 % Load generic fields where no modifications are needed.
159 elseif ismember(fln,{'S','T','Temp','aim_RH','phiHyd','Conv'})
160 data = DiagLoad_Local(fln,dat,dad,grd,itr,ddf,filesuffix,mnchandle);
161 data = DiagAverage(data,fln,avg,months,ddf,Dim);
162 [data,xax,yax,pltslc] = ...
163 DiagSlice(data,fln,trl,dat,dad,grd,itr,tst,...
164 flu,ddf,gdf,avg,slc,pst,LoadGridData,GridSuffix,ZcordFile,Vector,FieldName);
165
166 % Read vertical velocities, eta. Convert from [P] to [hPa] in atmosphere.
167 elseif ismember(fln,{'W','wVel','Eta','ETA'})
168 data = DiagLoad_Local(fln,dat,dad,grd,itr,ddf,filesuffix,mnchandle);
169 if isequal(flu,'A'), data = data./100; end
170 data = DiagAverage(data,fln,avg,months,ddf,Dim);
171 [data,xax,yax,pltslc] = ...
172 DiagSlice(data,fln,trl,dat,dad,grd,itr,tst,...
173 flu,ddf,gdf,avg,slc,pst,LoadGridData,GridSuffix,ZcordFile,Vector,FieldName);
174
175 % Load horizontal velocities, convert to lat-lon grid.
176 elseif ismember(fln,{'U','V','uVel','vVel','fizhi_U','fizhi_V'})
177 if isequal(dat,'Tav')
178 U = DiagLoad_Local('uVel',dat,dad,grd,itr,ddf,filesuffix,mnchandle);
179 V = DiagLoad_Local('vVel',dat,dad,grd,itr,ddf,filesuffix,mnchandle);
180 else isequal(dat,'Ins')
181 U = DiagLoad_Local([fln(1:end-1),'U'],dat,dad,grd,itr,ddf,filesuffix,mnchandle);
182 V = DiagLoad_Local([fln(1:end-1),'V'],dat,dad,grd,itr,ddf,filesuffix,mnchandle);
183 end
184 if isequal(ddf,'MNC')
185 U = U(1:end-1,:,:,:);
186 V = V(:,1:end-1,:,:);
187 end
188 U = DiagAverage(U,fln,avg,months,ddf,Dim);
189 V = DiagAverage(V,fln,avg,months,ddf,Dim);
190 [XC,XG,YC,YG,Ylat,ZC,ZG,RAC,drC,drF,HFacC,HFacW,HFacS,dxG,dyG,dxC,dyC] = ...
191 DiagLoadGridData(LoadGridData,grd,gdf,flu,GridSuffix,ZcordFile);
192 [U,V]=uvcube2latlon(XC,YC,U,V,XL,YL);
193 if ismember(fln,{'U','uVel','fizhi_U'})
194 data = U;
195 elseif ismember(fln,{'V','vVel','fizhi_V'})
196 data = V;
197 end
198 [data,xax,yax,pltslc] = ...
199 DiagSlice(data,fln,trl,dat,dad,grd,itr,tst,...
200 flu,ddf,gdf,avg,slc,pst,LoadGridData,GridSuffix,ZcordFile,Vector,FieldName);
201
202 % Meridional overturning.
203 elseif ismember(fln,{'Bol','Psi','Res'})
204 [XC,XG,YC,YG,Ylat,ZC,ZG,RAC,drC,drF,HFacC,HFacW,HFacS,dxG,dyG,dxC,dyC] = ...
205 DiagLoadGridData(LoadGridData,grd,gdf,flu,GridSuffix,ZcordFile);
206 if isequal(flu,'A'), delM = - 1000*drF ./ g;
207 elseif isequal(flu,'O'), delM = drF; end
208 if ismember(fln,{'Bol','Res'})
209 kwx = DiagLoad_Local('GM_Kwx-T',dat,dad,grd,itr,'MDS','',mnchandle);
210 kwy = DiagLoad_Local('GM_Kwy-T',dat,dad,grd,itr,'MDS','',mnchandle);
211 kwx = DiagAverage(kwx,fln,avg,months,ddf,Dim);
212 kwy = DiagAverage(kwy,fln,avg,months,ddf,Dim);
213 [ub,vb]=calc_Bolus_CS(RAC,dxC,dyC,dxG,dyG,drC ,kwx,kwy,HFacW,HFacS);
214 [psibol,mskG,ylat]=calc_PsiCube(delM,ub.*HFacW,vb.*HFacS,dxG,dyG);
215 end
216 if ismember(fln,{'Psi','Res'})
217 if isequal(dat,'Tav')
218 U = DiagLoad_Local('uVel',dat,dad,grd,itr,ddf,filesuffix,mnchandle);
219 V = DiagLoad_Local('vVel',dat,dad,grd,itr,ddf,filesuffix,mnchandle);
220 else isequal(dat,'Ins')
221 U = DiagLoad_Local('U',dat,dad,grd,itr,ddf,filesuffix,mnchandle);
222 V = DiagLoad_Local('V',dat,dad,grd,itr,ddf,filesuffix,mnchandle);
223 end
224 if isequal(ddf,'MNC')
225 U = U(1:end-1,:,:,:);
226 V = V(:,1:end-1,:,:);
227 end
228 U = DiagAverage(U,fln,avg,months,ddf,Dim);
229 V = DiagAverage(V,fln,avg,months,ddf,Dim);
230 [psiavg,mskG,ylat]=calc_PsiCube(delM,U.*HFacW,V.*HFacS,dxG,dyG);
231 end
232 if isequal(fln,'Psi')
233 data = psiavg(2:end-1,:)';
234 elseif isequal(fln,'Bol')
235 data = psibol(2:end-1,:)';
236 elseif isequal(fln,'Res')
237 data = psibol(2:end-1,:)' + psiavg(2:end-1,:)';
238 end
239 if isequal(flu,'A'), data = data./1e6; end
240 xax = ylat; yax = ZG; pltslc = 'lathgt';
241 eval(['fixedrange = ',fln,'range',flu,';']);
242 datarange = [min(data(:)),max(data(:))];
243 if datarange(1) < fixedrange(1) | ...
244 datarange(2) > fixedrange(2)
245 disp(['***Warning*** Value out of range for ',fln]);
246 disp([' Calculated range: ',mat2str(datarange)]);
247 disp([' Given range: ',mat2str(fixedrange)]);
248 end
249
250
251 % Actual temperature and moist potential temperature. Actual temperature
252 % is calculated as T=Theta*(p/po)^(R/cp). Moist potential temperature is
253 % calculated as Theta_e=Theta*e^(L*q*/cp*T) where q*=(R/Rv)*(es/p) and
254 % es=Ae^(beta*T).
255 elseif ismember(fln,{'ActT','ThetaEc'})
256 if isequal('flu','O'),
257 error('Calculation may only be done for atmosphere!');
258 end
259 [XC,XG,YC,YG,Ylat,ZC,ZG,RAC,drC,drF,...
260 HFacC,HFacW,HFacS,dxG,dyG,dxC,dyC] = ...
261 DiagLoadGridData(LoadGridData,grd,gdf,flu,GridSuffix,ZcordFile);
262 if isequal(ddf,'MDS')
263 theta = DiagLoad_Local('T',dat,dad,grd,itr,ddf,...
264 filesuffix,mnchandle);
265 elseif isequal(ddf,'MNC')
266 theta = DiagLoad_Local('Temp',dat,dad,grd,itr,...
267 ddf,filesuffix,mnchandle);
268 end
269 theta = DiagAverage(theta,fln,avg,months,ddf,Dim);
270 if ismember(fln,{'ActT','ThetaEc'})
271 pres = NaN.*zeros(size(theta));
272 for iz=1:length(ZC), pres(:,:,iz)=ZC(iz); end
273 temp=theta.*(pres./presrefA).^(RdA/cpA);
274 if isequal(fln,'ActT'), data=temp; end
275 end
276 if isequal(fln,'ThetaEc')
277 es=A_CC.*exp(Beta_CC.*(temp-K2C));
278 qstar=(RdA/RvA).*(es./pres);
279 data=theta.*exp(LHvapA.*qstar./cpA./temp);
280 end
281 [data,xax,yax,pltslc] = ...
282 DiagSlice(data,fln,trl,dat,dad,grd,itr,tst,flu,ddf,gdf,...
283 avg,slc,pst,LoadGridData,GridSuffix,ZcordFile,Vector,FieldName);
284
285
286 % Read in variabilities. Here we must make some simple calculations. For
287 % all the variablilty fields there is are (field)^2 fields from which we
288 % can calculate the desired variabilities: sqrt(field*field-(field)^2).
289 % Note that 'ETAstd' is scaled from [P] to [hPa]. For 'KEpri', we should
290 % use the values on either side of a grid, since it will be plotted from
291 % the grid center, but here we just use from one edge out of convenience.
292 elseif isequal(fln,'ETAstd')
293 ETA = DiagLoad_Local('ETA' ,dat,dad,grd,itr,ddf,filesuffix,mnchandle)./100 ;
294 ETA2 = DiagLoad_Local('Eta2',dat,dad,grd,itr,ddf,filesuffix,mnchandle)./10000;
295 data = sqrt(abs(ETA.*ETA-ETA2));
296 data = DiagAverage(data,fln,avg,months,ddf,Dim);
297 [data,xax,yax,pltslc] = ...
298 DiagSlice(data,fln,trl,dat,dad,grd,itr,tst,...
299 flu,ddf,gdf,avg,slc,pst,LoadGridData,GridSuffix,ZcordFile,Vector,FieldName);
300 elseif isequal(fln,'Tstd')
301 T = DiagLoad_Local('T' ,dat,dad,grd,itr,ddf,filesuffix,mnchandle);
302 TT = DiagLoad_Local('TT',dat,dad,grd,itr,ddf,filesuffix,mnchandle);
303 data = sqrt(abs(T.*T-TT));
304 data = DiagAverage(data,fln,avg,months,ddf,Dim);
305 [data,xax,yax,pltslc] = ...
306 DiagSlice(data,fln,trl,dat,dad,grd,itr,tst,...
307 flu,ddf,gdf,avg,slc,pst,LoadGridData,GridSuffix,ZcordFile,Vector,FieldName);
308 elseif isequal(fln,'KEpri')
309 U = DiagLoad_Local('uVel',dat,dad,grd,itr,ddf,filesuffix,mnchandle);
310 V = DiagLoad_Local('vVel',dat,dad,grd,itr,ddf,filesuffix,mnchandle);
311 UU = DiagLoad_Local('UU' ,dat,dad,grd,itr,ddf,filesuffix,mnchandle);
312 VV = DiagLoad_Local('VV' ,dat,dad,grd,itr,ddf,filesuffix,mnchandle);
313 if isequal(ddf,'MNC')
314 U = U(1:end-1,:,:,:); UU = UU(1:end-1,:,:,:);
315 V = V(:,1:end-1,:,:); VV = VV(:,1:end-1,:,:);
316 end
317 U = DiagAverage(U ,fln,avg,months,ddf,Dim);
318 V = DiagAverage(V ,fln,avg,months,ddf,Dim);
319 UU = DiagAverage(UU,fln,avg,months,ddf,Dim);
320 VV = DiagAverage(VV,fln,avg,months,ddf,Dim);
321 data = sqrt(abs((U.*U + V.*V) - (UU + VV)));
322 [data,xax,yax,pltslc] = ...
323 DiagSlice(data,fln,trl,dat,dad,grd,itr,tst,...
324 flu,ddf,gdf,avg,slc,pst,LoadGridData,GridSuffix,ZcordFile,Vector,FieldName);
325
326 % If the field is not recognized, try best to try and open it.
327 else
328 disp([' Unknown field, attempting to load.']);
329 data = DiagLoad_Local(fln,dat,dad,grd,itr,ddf,filesuffix,mnchandle);
330 if DiagDebug, disp([' Debug -- ''data'' size after load: ',mat2str(size(data))]); end
331 if isequal(Vector,1) | isequal(Vector,2) | isequal(Vector,3)
332 if isequal(Vector,1) | isequal(Vector,3)
333 if ~isequal(Index,0)
334 if isequal(Dim,2), U = squeeze(data(:,:,Index,:));
335 elseif isequal(Dim,3), U = squeeze(data(:,:,:,Index,:)); end
336 end
337 if ~isequal(Mate,0)
338 if isequal(Dim,2), V = squeeze(data(:,:,Mate,:));
339 elseif isequal(Dim,3), V = squeeze(data(:,:,:,Mate,:)); end
340 end
341 elseif isequal(Vector,2)
342 if ~isequal(Index,0)
343 if isequal(Dim,2), V = squeeze(data(:,:,Index,:));
344 elseif isequal(Dim,3), V = squeeze(data(:,:,:,Index,:)); end
345 end
346 if ~isequal(Mate,0)
347 if isequal(Dim,2), U = squeeze(data(:,:,Mate,:));
348 elseif isequal(Dim,3), U = squeeze(data(:,:,:,Mate,:)); end
349 end
350 end
351 U = DiagAverage(U,fln,avg,months,ddf,Dim);
352 V = DiagAverage(V,fln,avg,months,ddf,Dim);
353 [XC,XG,YC,YG,Ylat,ZC,ZG,RAC,drC,drF,HFacC,HFacW,HFacS,dxG,dyG,dxC,dyC] = ...
354 DiagLoadGridData(LoadGridData,grd,gdf,flu,GridSuffix,ZcordFile);
355 if isequal(Vector,1) | isequal(Vector,2)
356 [U,V]=uvcube2latlon(XC,YC,U,V,XL,YL);
357 end
358 if isequal(Vector,1)
359 data = U;
360 elseif isequal(Vector,2)
361 data = V;
362 elseif isequal(Vector,3)
363 if isequal(flu,'A'), delM = - 1000*drF ./ g;
364 elseif isequal(flu,'O'), delM = drF; end
365 [psiavg,mskG,ylat]=calc_PsiCube(delM,U.*HFacW,V.*HFacS,dxG,dyG);
366 data = psiavg(2:end-1,:)';
367 if isequal(flu,'A'), data = data./1e6; end
368 xax = ylat; yax = ZG; pltslc = 'lathgt';
369 end
370 if DiagDebug, disp([' Debug -- ''data'' size after vector manipulation: ',mat2str(size(data))]); end
371 else
372 % Sequence here for Vector = 0
373 if ~isequal(Index,0) & isequal(size(Index),[1 1]) & isequal(sign(Index),1)
374 if isequal(Dim,2), data = squeeze(data(:,:,Index,:));
375 elseif isequal(Dim,3), data = squeeze(data(:,:,:,Index,:)); end
376 elseif isequal(size(Index),[1 1]) & ~isequal(sign(Index),1)
377 if isequal(Dim,2), data = sign(Index(1)).*squeeze(data(:,:,abs(Index(1)),:));
378 elseif isequal(Dim,3), data = sign(Index(1)).*squeeze(data(:,:,:,abs(Index(1)),:)); end
379 elseif isequal(size(Index),[1 2])
380 if isequal(Dim,2), data = sign(Index(1)).*squeeze(data(:,:,abs(Index(1)),:)) + sign(Index(2)).*squeeze(data(:,:,abs(Index(2)),:));
381 elseif isequal(Dim,3), data = sign(Index(1)).*squeeze(data(:,:,:,abs(Index(1)),:)) + sign(Index(2)).*squeeze(data(:,:,:,abs(Index(2)),:)); end
382 end
383 if DiagDebug, disp([' Debug -- ''data'' size after indexing: ',mat2str(size(data))]); end
384 data = DiagAverage(data,fln,avg,months,ddf,Dim);
385 % Actual Temperature -- When the FieldName says ActT we assume that
386 % the field that is pointed to in Index is potential temperature
387 if isequal(FieldName,'ActT')
388 [XC,XG,YC,YG,Ylat,ZC,ZG,RAC,drC,drF,HFacC,HFacW,HFacS,dxG,dyG,dxC,dyC] = ...
389 DiagLoadGridData(LoadGridData,grd,gdf,flu,GridSuffix,ZcordFile);
390 pres = NaN.*zeros(size(data));
391 for iz=1:length(ZC), pres(:,:,iz)=ZC(iz); end
392 temp=data.*(pres./presrefA).^(RdA/cpA);
393 data=temp;
394 end
395
396 if DiagDebug, disp([' Debug -- ''data'' size after average: ',mat2str(size(data))]); end
397 end
398 if ~isequal(Vector,3)
399 [data,xax,yax,pltslc] = ...
400 DiagSlice(data,fln,trl,dat,dad,grd,itr,tst,...
401 flu,ddf,gdf,avg,slc,pst,LoadGridData,GridSuffix,ZcordFile,Vector,FieldName);
402 if DiagDebug, disp([' Debug -- ''data'' size after slice: ',mat2str(size(data))]); end
403 if DiagDebug, disp([' Debug -- ''xax'' size: ',mat2str(size(xax))]); end
404 if DiagDebug, disp([' Debug -- ''yax'' size: ',mat2str(size(yax))]); end
405 if DiagDebug, disp([' Debug -- ''pltslc'': ',pltslc]); end
406 end
407 end
408
409 %-------------------------------------------------------------------------%
410 % Local functions %
411 %-------------------------------------------------------------------------%
412
413 % Thus is merely a local function that calls the load data functions
414 % according to the DataFormat for the data specified by dfm.
415 function data = DiagLoad_Local(fln,dat,dad,grd,itr,dfm,filesuffix,mnchandle)
416 if isequal(dfm,'MDS')
417 data = rdmds([dad,'/',fln,filesuffix],itr);
418 elseif isequal(dfm,'MNC')
419 data = rdmnc_mod2([dad,mnchandle],[fln,filesuffix],'iter','T',itr);
420 %if ~isequal(itr,data.iter'), error('Missing iterations in data!'); end
421 eval(['data = data.',fln,filesuffix,';']);
422 else
423 error(['Unrecognized data type: ',dfm]);
424 end

  ViewVC Help
Powered by ViewVC 1.1.22