1 |
gmaze |
1.1 |
% |
2 |
|
|
% THIS IS NOT A FUNCTION ! |
3 |
|
|
% |
4 |
|
|
% Plot time series of all variables |
5 |
|
|
% 1 var / figure |
6 |
|
|
% Outputs recording |
7 |
|
|
% |
8 |
|
|
|
9 |
|
|
clear |
10 |
|
|
global sla netcdf_domain |
11 |
|
|
pv_checkpath |
12 |
|
|
|
13 |
|
|
netcdf_domain = 'climode'; |
14 |
|
|
|
15 |
|
|
% Date series: |
16 |
|
|
TIME = ['20030201';'20030205';'20030212';'20030219';'20030226';... |
17 |
|
|
'20030301';'20030305';'20030312']; |
18 |
|
|
TIME = ['20030201';'20030205';'20030212';'20030219';'20030226';... |
19 |
|
|
'20030301';'20030305']; |
20 |
|
|
nt = size(TIME,1); |
21 |
|
|
|
22 |
|
|
|
23 |
|
|
iso = 25.8; % Which sigma-theta surface ? |
24 |
|
|
getiso = 1; % We compute the isoST by default |
25 |
|
|
outimg = 'img_tmp'; % Output directory |
26 |
|
|
prtimg = 1; % Do we record figures as jpg files ? |
27 |
|
|
|
28 |
|
|
% Plots type: |
29 |
|
|
% 1: individual simple maps |
30 |
|
|
% 2: meridional or zonal sections |
31 |
|
|
% 3: meridional or zonal sections with Jz vectors at the surface |
32 |
|
|
% 4: custom it |
33 |
|
|
pl = 3; |
34 |
|
|
|
35 |
|
|
if pl==2|pl==3, getiso = 0; end |
36 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
37 |
|
|
% Video loop: |
38 |
|
|
for it = 1 : nt |
39 |
|
|
|
40 |
|
|
% Date: |
41 |
|
|
snapshot = TIME(it,:); |
42 |
|
|
|
43 |
|
|
%%%%%%%%%%%%%%%% |
44 |
|
|
% NETCDF files name: |
45 |
|
|
filPV = 'splPV'; |
46 |
|
|
filST = 'SIGMATHETA'; |
47 |
|
|
filT = 'THETA'; |
48 |
|
|
filTx = 'TAUX'; |
49 |
|
|
filTy = 'TAUY'; |
50 |
|
|
filJFz = 'JFz'; |
51 |
|
|
filJBz = 'JBz'; |
52 |
|
|
filQnet = 'Qnet'; |
53 |
|
|
filQEk = 'QEk'; |
54 |
|
|
filMLD = 'KPPmld'; |
55 |
|
|
|
56 |
|
|
% Path and extension to find them: |
57 |
|
|
pathname = strcat('netcdf-files',sla); |
58 |
|
|
ext = 'nc'; |
59 |
|
|
|
60 |
|
|
% Load fields: |
61 |
|
|
disp('load fields...') |
62 |
|
|
% (I keep proper axis for each variables in case of one day they would be different) |
63 |
|
|
ferfile = strcat(pathname,sla,snapshot,sla,filPV,'.',netcdf_domain,'.',ext); |
64 |
|
|
ncQ = netcdf(ferfile,'nowrite'); |
65 |
|
|
[Qlon Qlat Qdpt] = coordfromnc(ncQ); |
66 |
|
|
Q = ncQ{4}(:,:,:); clear ncQ ferfile |
67 |
|
|
[nz ny nx] = size(Q); |
68 |
|
|
|
69 |
|
|
ferfile = strcat(pathname,sla,snapshot,sla,filST,'.',netcdf_domain,'.',ext); |
70 |
|
|
ncST = netcdf(ferfile,'nowrite'); |
71 |
|
|
[STlon STlat STdpt] = coordfromnc(ncST); |
72 |
|
|
ST = ncST{4}(:,:,:); clear ncST ferfile |
73 |
|
|
|
74 |
|
|
ferfile = strcat(pathname,sla,snapshot,sla,filT,'.',netcdf_domain,'.',ext); |
75 |
|
|
ncT = netcdf(ferfile,'nowrite'); |
76 |
|
|
[Tlon Tlat Tdpt] = coordfromnc(ncT); |
77 |
|
|
T = ncT{4}(:,:,:); clear ncT ferfile |
78 |
|
|
|
79 |
|
|
ferfile = strcat(pathname,sla,snapshot,sla,filTx,'.',netcdf_domain,'.',ext); |
80 |
|
|
ncTx = netcdf(ferfile,'nowrite'); |
81 |
|
|
[Txlon Txlat Txdpt] = coordfromnc(ncTx); |
82 |
|
|
Tx = ncTx{4}(1,:,:); clear ncTx ferfile |
83 |
|
|
ferfile = strcat(pathname,sla,snapshot,sla,filTy,'.',netcdf_domain,'.',ext); |
84 |
|
|
ncTy = netcdf(ferfile,'nowrite'); |
85 |
|
|
[Tylon Tylat Tydpt] = coordfromnc(ncTy); |
86 |
|
|
Ty = ncTy{4}(1,:,:); clear ncTy ferfile |
87 |
|
|
|
88 |
|
|
ferfile = strcat(pathname,sla,snapshot,sla,filJFz,'.',netcdf_domain,'.',ext); |
89 |
|
|
ncJFz = netcdf(ferfile,'nowrite'); |
90 |
|
|
[JFzlon JFzlat JFzdpt] = coordfromnc(ncJFz); |
91 |
|
|
JFz = ncJFz{4}(1,:,:); |
92 |
|
|
|
93 |
|
|
ferfile = strcat(pathname,sla,snapshot,sla,filJBz,'.',netcdf_domain,'.',ext); |
94 |
|
|
ncJBz = netcdf(ferfile,'nowrite'); |
95 |
|
|
[JBzlon JBzlat JBzdpt] = coordfromnc(ncJBz); |
96 |
|
|
JBz = ncJBz{4}(1,:,:); |
97 |
|
|
|
98 |
|
|
ferfile = strcat(pathname,sla,snapshot,sla,filQnet,'.',netcdf_domain,'.',ext); |
99 |
|
|
ncQnet = netcdf(ferfile,'nowrite'); |
100 |
|
|
[Qnetlon Qnetlat Qnetdpt] = coordfromnc(ncQnet); |
101 |
|
|
Qnet = ncQnet{4}(1,:,:); |
102 |
|
|
|
103 |
|
|
ferfile = strcat(pathname,sla,snapshot,sla,filQEk,'.',netcdf_domain,'.',ext); |
104 |
|
|
ncQEk = netcdf(ferfile,'nowrite'); |
105 |
|
|
[QEklon QEklat QEkdpt] = coordfromnc(ncQEk); |
106 |
|
|
QEk = ncQEk{4}(1,:,:); |
107 |
|
|
|
108 |
|
|
ferfile = strcat(pathname,sla,snapshot,sla,filMLD,'.',netcdf_domain,'.',ext); |
109 |
|
|
ncMLD = netcdf(ferfile,'nowrite'); |
110 |
|
|
[MLDlon MLDlat MLDdpt] = coordfromnc(ncMLD); |
111 |
|
|
MLD = -ncMLD{4}(1,:,:); |
112 |
|
|
|
113 |
|
|
%%%%%%%%%%%%%%%% |
114 |
|
|
% Q is defined on the same grid of ST but troncated by extrem 2 points, then here |
115 |
|
|
% make all fields defined with same limits... |
116 |
|
|
disp('Reshape them') |
117 |
|
|
ST = squeeze(ST(2:nz+1,2:ny+1,2:nx+1)); |
118 |
|
|
STdpt = STdpt(2:nz+1); |
119 |
|
|
STlon = STlon(2:nx+1); |
120 |
|
|
STlat = STlat(2:ny+1); |
121 |
|
|
T = squeeze(T(2:nz+1,2:ny+1,2:nx+1)); |
122 |
|
|
Tdpt = Tdpt(2:nz+1); |
123 |
|
|
Tlon = Tlon(2:nx+1); |
124 |
|
|
Tlat = Tlat(2:ny+1); |
125 |
|
|
JBz = squeeze(JBz(2:ny+1,2:nx+1)); |
126 |
|
|
JBzlon = JBzlon(2:nx+1); |
127 |
|
|
JBzlat = JBzlat(2:ny+1); |
128 |
|
|
Qnet = squeeze(Qnet(2:ny+1,2:nx+1)); |
129 |
|
|
Qnetlon = Qnetlon(2:nx+1); |
130 |
|
|
Qnetlat = Qnetlat(2:ny+1); |
131 |
|
|
MLD = squeeze(MLD(2:ny+1,2:nx+1)); |
132 |
|
|
MLDlon = MLDlon(2:nx+1); |
133 |
|
|
MLDlat = MLDlat(2:ny+1); |
134 |
|
|
|
135 |
|
|
% Grid: |
136 |
|
|
global domain subdomain2 subdomain |
137 |
|
|
grid_setup |
138 |
|
|
%subdomain = subdomain2; |
139 |
|
|
|
140 |
|
|
|
141 |
|
|
%%%%%%%%%%%%%%%% |
142 |
|
|
% Here we determine the isosurface and its depth: |
143 |
|
|
if getiso |
144 |
|
|
disp('Get iso-ST') |
145 |
|
|
[Iiso mask] = subfct_getisoS(ST,iso); |
146 |
|
|
Diso = ones(size(Iiso)).*NaN; |
147 |
|
|
Qiso = ones(size(Iiso)).*NaN; |
148 |
|
|
for ix = 1 : size(ST,3) |
149 |
|
|
for iy = 1 : size(ST,2) |
150 |
|
|
if ~isnan(Iiso(iy,ix)) |
151 |
|
|
Diso(iy,ix) = STdpt(Iiso(iy,ix)); |
152 |
|
|
Qiso(iy,ix) = Q(Iiso(iy,ix),iy,ix); |
153 |
|
|
end %if |
154 |
|
|
end, end %for iy, ix |
155 |
|
|
end %if |
156 |
|
|
|
157 |
|
|
%%%%%%%%%%%%%%%% |
158 |
|
|
% "Normalise" the PV: |
159 |
|
|
fO = 2*(2*pi/86400)*sin(32*pi/180); |
160 |
|
|
dST = 27.6-25.4; |
161 |
|
|
H = -1000; |
162 |
|
|
RHOo = 1000; |
163 |
|
|
Qref = -fO/RHOo*dST/H; |
164 |
|
|
if getiso, QisoN = Qiso./Qref; end |
165 |
|
|
|
166 |
|
|
|
167 |
|
|
%%%%%%%%%%%%%%%% |
168 |
|
|
%%%%%%%%%%%%%%%% |
169 |
|
|
% Plots: |
170 |
|
|
disp('Plots ...') |
171 |
|
|
|
172 |
|
|
if find(pl==1) |
173 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
174 |
|
|
% Map projection: |
175 |
|
|
m_proj('mercator','long',subdomain.limlon,'lat',subdomain.limlat); |
176 |
|
|
%m_proj('mercator','long',subdomain.limlon,'lat',[25 40]); |
177 |
|
|
m_proj('mercator','long',subdomain.limlon,'lat',[25 50]); |
178 |
|
|
|
179 |
|
|
% Other settings: |
180 |
|
|
CBAR = 'h'; % Colorbar orientation |
181 |
|
|
Tcontour = [17 19]; Tcolor = [0 0 0]; % Theta contours |
182 |
|
|
Hcontour = [0:200:600]; Hcolor = [0 0 0]; % MLD contours |
183 |
|
|
unit = ''; % Default unit |
184 |
|
|
|
185 |
|
|
% Which variables to plot: |
186 |
|
|
%wvar = [1 2 3 4 6]; |
187 |
|
|
wvar = [1 2]; |
188 |
|
|
|
189 |
|
|
% Variables loop: |
190 |
|
|
for ip=1:length(wvar) |
191 |
|
|
% Default: |
192 |
|
|
showT = 1; % Iso-Theta contours |
193 |
|
|
showW = 0; % Windstress arrows |
194 |
|
|
showH = 0; % Mixed Layer Depth |
195 |
|
|
CONT = 0; % Contours instead of pcolor |
196 |
|
|
|
197 |
|
|
figure(ip);clf;hold on;iw=1;jw=1; |
198 |
|
|
if it==1, mini; end |
199 |
|
|
switch wvar(ip) |
200 |
|
|
case 1 |
201 |
|
|
C = Diso; |
202 |
|
|
Clon = Qlon; Clat = Qlat; |
203 |
|
|
tit = strcat(snapshot,' / Depth of \sigma_\theta=',num2str(iso),'kg.m^{-3}'); |
204 |
|
|
showW = 0; % Windstress |
205 |
|
|
cx = [-600 0]; |
206 |
|
|
unit = 'm'; |
207 |
|
|
titf = 'Diso'; |
208 |
|
|
case 2 |
209 |
|
|
C = QisoN; % C = Qiso; |
210 |
|
|
Clon = Qlon; Clat = Qlat; |
211 |
|
|
tit = strcat(snapshot,'/ Potential vorticity field: q = (-f/\rho . d\sigma_\theta/dz) / q_{ref}'); |
212 |
|
|
%tit = strcat(snapshot,'/ Potential vorticity field: q = - f . d\sigma_\theta/dz / \rho'); |
213 |
|
|
showW = 0; % Windstress |
214 |
|
|
cx = [0 1]*10; |
215 |
|
|
unit = char(1); |
216 |
|
|
titf = 'QisoN'; |
217 |
|
|
case 3 |
218 |
|
|
C = JFz; |
219 |
|
|
Clon = JFzlon; Clat = JFzlat; |
220 |
|
|
tit = strcat(snapshot,'/ Mechanical PV flux J^F_z and windstress'); |
221 |
|
|
showW = 1; % Windstress |
222 |
|
|
cx = [-1 1]*10^(-11); |
223 |
|
|
unit = 'kg/m^3/s^2'; |
224 |
|
|
titf = 'JFz'; |
225 |
|
|
case 4 |
226 |
|
|
C = JBz; |
227 |
|
|
Clon = JBzlon; Clat = JBzlat; |
228 |
|
|
tit = strcat(snapshot,'/ Diabatic PV flux J^B_z and windstress'); |
229 |
|
|
showW = 1; % Windstress |
230 |
|
|
cx = [-1 1]*10^(-11); |
231 |
|
|
unit = 'kg/m^3/s^2'; |
232 |
|
|
titf = 'JBz'; |
233 |
|
|
case 5 |
234 |
|
|
C = Qnet; |
235 |
|
|
Clon = Qnetlon; Clat = Qnetlat; |
236 |
|
|
tit = strcat(snapshot,'/ Net surface heat flux Q_{net} and MLD'); |
237 |
|
|
showH = 1; |
238 |
|
|
showW = 1; |
239 |
|
|
cx = [-1 1]*600; |
240 |
|
|
unit = 'W/m^2'; |
241 |
|
|
titf = 'Qnet'; |
242 |
|
|
case 6 |
243 |
|
|
C = JFz./JBz; |
244 |
|
|
Clon = JFzlon; Clat = JFzlat; |
245 |
|
|
tit = strcat(snapshot,'/ Ratio: J^F_z/J^B_z'); |
246 |
|
|
cx = [-1 1]*5; |
247 |
|
|
unit = char(1); |
248 |
|
|
titf = 'JFz_vs_JBz'; |
249 |
|
|
end %switch what to plot |
250 |
|
|
|
251 |
|
|
% Draw variable: |
252 |
|
|
if CONT ~= 1 |
253 |
|
|
m_pcolor(Clon,Clat,C);shading flat |
254 |
|
|
else |
255 |
|
|
m_contourf(Clon,Clat,C,CONTv); |
256 |
|
|
end |
257 |
|
|
caxis(cx); |
258 |
|
|
ccol(ip) = colorbar(CBAR,'fontsize',10); |
259 |
|
|
ctitle(ccol(ip),unit); |
260 |
|
|
title(tit); |
261 |
|
|
|
262 |
|
|
if showT |
263 |
|
|
[cs,h] = m_contour(Tlon,Tlat,squeeze(T(1,:,:)),Tcontour); |
264 |
|
|
clabel(cs,h,'fontsize',8,'color',[0 0 0],'labelspacing',200); |
265 |
|
|
for ih=1:length(h) |
266 |
|
|
set(h(ih),'edgecolor',Tcolor,'linewidth',1); |
267 |
|
|
end |
268 |
|
|
end %if show THETA contours |
269 |
|
|
|
270 |
|
|
if showW |
271 |
|
|
dx = 10*diff(Txlon(1:2)); dy = 8*diff(Txlat(1:2)); |
272 |
|
|
dx = 20*diff(Txlon(1:2)); dy = 10*diff(Txlat(1:2)); |
273 |
|
|
lo = [Txlon(1):dx:Txlon(length(Txlon))]; |
274 |
|
|
la = [Txlat(1):dy:Txlat(length(Txlat))]; |
275 |
|
|
[lo la] = meshgrid(lo,la); |
276 |
|
|
Txn = interp2(Txlat,Txlon,Tx',la,lo); |
277 |
|
|
Tyn = interp2(Txlat,Txlon,Ty',la,lo); |
278 |
|
|
s = 2; |
279 |
|
|
m_quiver(lo,la,Txn,Tyn,s,'w'); |
280 |
|
|
% m_quiver(lo,la,-(1+sin(la*pi/180)).*Txn,(1+sin(la*pi/180)).*Tyn,s,'w'); |
281 |
|
|
end %if show windstress |
282 |
|
|
|
283 |
|
|
if showH |
284 |
|
|
[cs,h] = m_contour(MLDlon,MLDlat,MLD,Hcontour); |
285 |
|
|
clabel(cs,h,'fontsize',8,'color',[0 0 0],'labelspacing',200); |
286 |
|
|
for ih=1:length(h) |
287 |
|
|
set(h(ih),'edgecolor',Hcolor,'linewidth',1); |
288 |
|
|
end |
289 |
|
|
end %if show Mixed Layer depth |
290 |
|
|
|
291 |
|
|
m_coast('patch',[0 0 0]);m_grid |
292 |
|
|
set(gcf,'name',titf); |
293 |
|
|
|
294 |
|
|
%%%%%%%%%%%%%%%% |
295 |
|
|
drawnow |
296 |
|
|
if prtimg |
297 |
|
|
set(gcf,'color','white') |
298 |
|
|
set(gcf,'paperposition',[0.6 6.5 25 14]); |
299 |
|
|
exportj(gcf,1,strcat(outimg,sla,titf,'.',snapshot)); |
300 |
|
|
end %if |
301 |
|
|
|
302 |
|
|
|
303 |
|
|
end %for ip |
304 |
|
|
|
305 |
|
|
|
306 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
307 |
|
|
end %if pl1 |
308 |
|
|
|
309 |
|
|
|
310 |
|
|
|
311 |
|
|
if find(pl==2) |
312 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
313 |
|
|
% Define sections: |
314 |
|
|
sectTYPE = 'z'; % m:meridional or z:zonal sections |
315 |
|
|
switch sectTYPE |
316 |
|
|
case 'm' % Fixed longitude |
317 |
|
|
lo = Qlon(max(find(Qlon<= 360-66 ))); sectNAME = '294E-66W'; |
318 |
|
|
case 'z' % Fixed latitude |
319 |
|
|
la = Qlat(max(find(Qlat<= 36 ))); sectNAME = '36N'; |
320 |
|
|
end %switch |
321 |
|
|
|
322 |
|
|
% Other settings: |
323 |
|
|
CBAR = 'h'; % Colorbar orientation |
324 |
|
|
Tcontour = [17 19]; Tcolor = [0 0 0]; % Theta contours |
325 |
|
|
STcontour = [20:.25:30]; STcolor = [1 1 1]; % Sigma-Theta contours |
326 |
|
|
unit = ''; % Default unit |
327 |
|
|
|
328 |
|
|
% Which variables to plot: |
329 |
|
|
wvar = [4]; |
330 |
|
|
|
331 |
|
|
% Variables loop: |
332 |
|
|
for ip=1:length(wvar) |
333 |
|
|
% Default: |
334 |
|
|
showT = 1; % Iso-Theta contours |
335 |
|
|
showST = 0; % Iso-Sigma-Theta contours |
336 |
|
|
showH = 0; % Mixed Layer Depth |
337 |
|
|
CONT = 0; % Contours instead of pcolor |
338 |
|
|
|
339 |
|
|
figure(ip);clf;hold on;iw=1;jw=1; |
340 |
|
|
%if it==1, mini; end |
341 |
|
|
switch wvar(ip) |
342 |
|
|
case 1 |
343 |
|
|
C = T; |
344 |
|
|
Clon = Tlon; Clat = Tlat; Cdpt = Tdpt; |
345 |
|
|
tit = strcat(snapshot,' / \theta'); |
346 |
|
|
cx = [0 30]; |
347 |
|
|
unit = 'K'; |
348 |
|
|
titf = 'THETA'; |
349 |
|
|
case 2 |
350 |
|
|
C = ST; |
351 |
|
|
Clon = STlon; Clat = STlat; Cdpt = STdpt; |
352 |
|
|
tit = strcat(snapshot,' / \sigma_\theta'); |
353 |
|
|
cx = [24 28]; |
354 |
|
|
unit = 'kg/m^3'; |
355 |
|
|
titf = 'SIGMATHETA'; |
356 |
|
|
case 3 |
357 |
|
|
C = Q/Qref; |
358 |
|
|
Clon = Qlon; Clat = Qlat; Cdpt = Qdpt; |
359 |
|
|
tit = strcat(snapshot,'/ Potential vorticity field: q = (-f/\rho . d\sigma_\theta/dz) / q_{ref}'); |
360 |
|
|
%tit = strcat(snapshot,'/ Potential vorticity field: q = - f . d\sigma_\theta/dz / \rho'); |
361 |
|
|
cx = [0 1]*2; |
362 |
|
|
unit = char(1); |
363 |
|
|
titf = 'splPVn'; |
364 |
|
|
CONTv = [0:1:5]; CONTv = [ [-1:.1:1] [1:1:10]]; |
365 |
|
|
CONT = 1; |
366 |
|
|
showT = 0; |
367 |
|
|
showST = 1; |
368 |
|
|
case 4 |
369 |
|
|
C = Q; |
370 |
|
|
Clon = Qlon; Clat = Qlat; Cdpt = Qdpt; |
371 |
|
|
tit = strcat(snapshot,'/ Potential vorticity field: q = (-f/\rho . d\sigma_\theta/dz)'); |
372 |
|
|
cx = [0 1]*10^(-9); |
373 |
|
|
unit = char(1); |
374 |
|
|
titf = 'splPV'; |
375 |
|
|
unit = '1/s/m'; |
376 |
|
|
CONTv = [ [0:.025:.5] [.5:.1:1] [1:1:10]]*10^(-9); |
377 |
|
|
CONT = 0; |
378 |
|
|
showT = 0; |
379 |
|
|
showST = 1; |
380 |
|
|
end %switch what to plot |
381 |
|
|
|
382 |
|
|
% Find the section: |
383 |
|
|
switch sectTYPE |
384 |
|
|
case 'm' % Fixed longitude |
385 |
|
|
s = max( find( Clon <= lo ) ); |
386 |
|
|
C = squeeze( C(:,:,s) ); |
387 |
|
|
Cx = Clat; Xlab = 'Latitude (^oN)'; |
388 |
|
|
Cy = Cdpt; Ylab = 'Depth(m)'; |
389 |
|
|
|
390 |
|
|
s = max( find( Tlon <= lo ) ); |
391 |
|
|
sectT = squeeze( T(:,:,s) ); sectTx = Tlat; sectTy = Tdpt; |
392 |
|
|
s = max( find(STlon <= lo ) ); |
393 |
|
|
sectST = squeeze(ST(:,:,s) ); sectSTx = STlat; sectSTy = STdpt; |
394 |
|
|
case 'z' % Fixed latitude |
395 |
|
|
s = max( find( Clat <= la ) ); |
396 |
|
|
C = squeeze( C(:,s,:) ); |
397 |
|
|
Cx = 360-Clon; Xlab = 'Longitude (^oW)'; |
398 |
|
|
Cy = Cdpt; Ylab = 'Depth(m)'; |
399 |
|
|
|
400 |
|
|
s = max( find( Tlat <= la ) ); |
401 |
|
|
sectT = squeeze( T(:,s,:) ); sectTx = 360-Tlon; sectTy = Tdpt; |
402 |
|
|
s = max( find(STlat <= la ) ); |
403 |
|
|
sectST = squeeze(ST(:,s,:) ); sectSTx = 360-STlon; sectSTy = STdpt; |
404 |
|
|
end %switch |
405 |
|
|
|
406 |
|
|
% Plots: |
407 |
|
|
clf; hold on |
408 |
|
|
|
409 |
|
|
if CONT ~= 1 |
410 |
|
|
pcolor(Cx,Cy,C); shading interp |
411 |
|
|
colormap(logcolormap(256,12)); |
412 |
|
|
else |
413 |
|
|
[cs,h]=contourf(Cx,Cy,C,CONTv); |
414 |
|
|
colormap(mycolormap(logcolormap(64,5),length(CONTv))); |
415 |
|
|
end |
416 |
|
|
caxis(cx); |
417 |
|
|
ccol(ip) = colorbar(CBAR,'fontsize',10); |
418 |
|
|
ctitle(ccol(ip),unit); |
419 |
|
|
title(strcat('Section:',sectNAME,'/',tit)); |
420 |
|
|
axis([min([Cx(1) Cx(length(Cx))]) max([Cx(1) Cx(length(Cx))]) ... |
421 |
|
|
min([Cy(1) Cy(length(Cy))]) max([Cy(1) Cy(length(Cy))]) ]); |
422 |
|
|
axis([55 75 -400 Cdpt(1)]); |
423 |
|
|
axis([55 75 min([Cy(1) Cy(length(Cy))]) max([Cy(1) Cy(length(Cy))]) ]); |
424 |
|
|
xlabel(Xlab); ylabel(Ylab); |
425 |
|
|
if sectTYPE=='z', set(gca,'xdir','reverse'); end |
426 |
|
|
box on |
427 |
|
|
|
428 |
|
|
if showT |
429 |
|
|
[cs,h]=contour(sectTx,sectTy,sectT,Tcontour); |
430 |
|
|
clabel(cs,h,'fontsize',8,'color',[0 0 0],'labelspacing',200); |
431 |
|
|
for ih=1:length(h) |
432 |
|
|
set(h(ih),'edgecolor',Tcolor,'linewidth',1); |
433 |
|
|
end |
434 |
|
|
end %if show THETA contours |
435 |
|
|
if showST |
436 |
|
|
STcontourE=[25.5 25.75]; |
437 |
|
|
[cs,h]=contour(sectSTx,sectSTy,sectST,STcontour); |
438 |
|
|
clabel(cs,h,'fontsize',8,'color',STcolor,'labelspacing',200); |
439 |
|
|
set(h,'edgecolor',STcolor); |
440 |
|
|
set(h,'linewidth',1); |
441 |
|
|
ch=get(h,'Children'); |
442 |
|
|
for ich=1:length(ch) |
443 |
|
|
%set(ch(ich),'edgecolor',STcolor); |
444 |
|
|
%set(ch(ich),'linewidth',1); |
445 |
|
|
for ii = 1 : length(STcontourE) |
446 |
|
|
if get(ch(ich),'UserData') == STcontourE(ii) |
447 |
|
|
set(ch(ich),'linewidth',2); |
448 |
|
|
end %if |
449 |
|
|
end %for ii |
450 |
|
|
end %for ich |
451 |
|
|
end %if show SIGMATHETA contours |
452 |
|
|
|
453 |
|
|
|
454 |
|
|
%%%%%%%%%%%%%%%% |
455 |
|
|
drawnow |
456 |
|
|
if prtimg |
457 |
|
|
set(gcf,'color','white') |
458 |
|
|
exportj(gcf,1,strcat(outimg,sla,titf,'.',snapshot,'.section_',sectNAME)); |
459 |
|
|
end %if |
460 |
|
|
|
461 |
|
|
end %for ip |
462 |
|
|
|
463 |
|
|
|
464 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
465 |
|
|
end %if pl2 |
466 |
|
|
|
467 |
|
|
|
468 |
|
|
|
469 |
|
|
|
470 |
|
|
|
471 |
|
|
|
472 |
|
|
|
473 |
|
|
|
474 |
|
|
|
475 |
|
|
if find(pl==3) |
476 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
477 |
|
|
% Define sections: |
478 |
|
|
sectTYPE = 'z'; % m:meridional or z:zonal sections |
479 |
|
|
|
480 |
|
|
switch sectTYPE |
481 |
|
|
case 'm' % Fixed longitude |
482 |
|
|
lo = 294; xlim=[20 42]; sectNAME = '294E'; |
483 |
|
|
|
484 |
|
|
case 'z' % Fixed latitude |
485 |
|
|
la = 36; xlim=[55 75]; sectNAME = '36N'; |
486 |
|
|
end %switch |
487 |
|
|
|
488 |
|
|
% Other settings: |
489 |
|
|
CBAR = 'v'; % Colorbar orientation |
490 |
|
|
Tcontour = [17 19]; Tcolor = [0 0 0]; % Theta contours |
491 |
|
|
STcontour = [20:.1:30]; STcolor = [1 1 1]*.5; % Sigma-Theta contours |
492 |
|
|
Hcolor = [0 0 0]; % Mixed layer depth color |
493 |
|
|
unit = ''; % Default unit |
494 |
|
|
|
495 |
|
|
% Which variables to plot: |
496 |
|
|
wvar = [4]; |
497 |
|
|
|
498 |
|
|
% Variables loop: |
499 |
|
|
for ip=1:length(wvar) |
500 |
|
|
% Default: |
501 |
|
|
showT = 1; % Iso-Theta contours |
502 |
|
|
showST = 0; % Iso-Sigma-Theta contours |
503 |
|
|
showH = 0; % Mixed Layer Depth |
504 |
|
|
CONT = 0; % Contours instead of pcolor |
505 |
|
|
|
506 |
|
|
figure(ip);clf;hold on;iw=1;jw=1; |
507 |
|
|
%if it==1, mini; end |
508 |
|
|
switch wvar(ip) |
509 |
|
|
case 1 |
510 |
|
|
C = T; |
511 |
|
|
Clon = Tlon; Clat = Tlat; Cdpt = Tdpt; |
512 |
|
|
tit = strcat(snapshot,' / \theta'); |
513 |
|
|
cx = [0 30]; |
514 |
|
|
unit = 'K'; |
515 |
|
|
titf = 'THETA'; |
516 |
|
|
case 2 |
517 |
|
|
C = ST; |
518 |
|
|
Clon = STlon; Clat = STlat; Cdpt = STdpt; |
519 |
|
|
tit = strcat(snapshot,' / \sigma_\theta'); |
520 |
|
|
cx = [24 28]; |
521 |
|
|
unit = 'kg/m^3'; |
522 |
|
|
titf = 'SIGMATHETA'; |
523 |
|
|
case 3 |
524 |
|
|
C = Q/Qref; |
525 |
|
|
Clon = Qlon; Clat = Qlat; Cdpt = Qdpt; |
526 |
|
|
tit = strcat('/ Potential vorticity field: q = (-f/\rho . d\sigma_\theta/dz) / q_{ref}'); |
527 |
|
|
%tit = strcat(snapshot,'/ Potential vorticity field: q = - f . d\sigma_\theta/dz / \rho'); |
528 |
|
|
cx = [0 1]*2; |
529 |
|
|
unit = char(1); |
530 |
|
|
titf = 'splPVn'; |
531 |
|
|
CONTv = [0:1:5]; CONTv = [ [-1:.1:1] [1:1:10]]; |
532 |
|
|
CONT = 1; |
533 |
|
|
showT = 0; |
534 |
|
|
showST = 1; |
535 |
|
|
case 4 |
536 |
|
|
C = Q; |
537 |
|
|
Clon = Qlon; Clat = Qlat; Cdpt = Qdpt; |
538 |
|
|
tit = strcat('/ Potential vorticity field: q = (-f/\rho . d\sigma_\theta/dz)'); |
539 |
|
|
cx = [0 1]*10^(-9); |
540 |
|
|
unit = char(1); |
541 |
|
|
titf = 'splPV'; |
542 |
|
|
unit = '1/s/m'; |
543 |
|
|
CONTv = [ [0:.025:.5] [.5:.1:1] [1:1:10]]*10^(-9); |
544 |
|
|
CONT = 0; |
545 |
|
|
showT = 0; |
546 |
|
|
showST = 1; |
547 |
|
|
showH = 1; |
548 |
|
|
end %switch what to plot |
549 |
|
|
|
550 |
|
|
% Find the section: |
551 |
|
|
switch sectTYPE |
552 |
|
|
case 'm' % Fixed longitude |
553 |
|
|
s = max( find( Clon <= lo ) ); |
554 |
|
|
C = squeeze( C(:,:,s) ); |
555 |
|
|
Cx = Clat; Xlab = 'Latitude (^oN)'; |
556 |
|
|
Cy = Cdpt; Ylab = 'Depth(m)'; |
557 |
|
|
|
558 |
|
|
s = max( find( Tlon <= lo ) ); |
559 |
|
|
sectT = squeeze( T(:,:,s) ); sectTx = Tlat; sectTy = Tdpt; |
560 |
|
|
s = max( find(STlon <= lo ) ); |
561 |
|
|
sectST = squeeze(ST(:,:,s) ); sectSTx = STlat; sectSTy = STdpt; |
562 |
|
|
s = max( find(MLDlon <= lo ) ); |
563 |
|
|
sectH = squeeze(MLD(:,s) ); sectHx = MLDlat; sectHy = MLDdpt; |
564 |
|
|
|
565 |
|
|
dx = 1; |
566 |
|
|
s = max( find( JFzlon <= lo ) ); |
567 |
|
|
sectJFz = squeeze( JFz(:,s) ); sectJFzx = JFzlat; sectJFzy = JFzdpt; |
568 |
|
|
s = max( find( JBzlon <= lo ) ); |
569 |
|
|
sectJBz = squeeze( JBz(:,s) ); sectJBzx = JBzlat; sectJBzy = JBzdpt; |
570 |
|
|
|
571 |
|
|
case 'z' % Fixed latitude |
572 |
|
|
s = max( find( Clat <= la ) ); |
573 |
|
|
C = squeeze( C(:,s,:) ); |
574 |
|
|
Cx = 360-Clon; Xlab = 'Longitude (^oW)'; |
575 |
|
|
Cy = Cdpt; Ylab = 'Depth(m)'; |
576 |
|
|
|
577 |
|
|
s = max( find( Tlat <= la ) ); |
578 |
|
|
sectT = squeeze( T(:,s,:) ); sectTx = 360-Tlon; sectTy = Tdpt; |
579 |
|
|
s = max( find(STlat <= la ) ); |
580 |
|
|
sectST = squeeze(ST(:,s,:) ); sectSTx = 360-STlon; sectSTy = STdpt; |
581 |
|
|
s = max( find(MLDlat <= la ) ); |
582 |
|
|
sectH = squeeze(MLD(s,:) ); sectHx = 360-MLDlon; sectHy = MLDdpt; |
583 |
|
|
|
584 |
|
|
dx = 1; |
585 |
|
|
s = max( find( JFzlat <= la ) ); |
586 |
|
|
sectJFz = squeeze( JFz(s,:) ); sectJFzx = 360-JFzlon; sectJFzy = JFzdpt; |
587 |
|
|
s = max( find( JBzlat <= la ) ); |
588 |
|
|
sectJBz = squeeze( JBz(s,:) ); sectJBzx = 360-JBzlon; sectJBzy = JBzdpt; |
589 |
|
|
end %switch |
590 |
|
|
|
591 |
|
|
% Plots: |
592 |
|
|
clf; hold on |
593 |
|
|
iw=2;jw=1; |
594 |
|
|
|
595 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%% |
596 |
|
|
sp(1)=subplot(iw,jw,1); hold on |
597 |
|
|
% Change grid: |
598 |
|
|
x = sectJBzx(1:dx:end); |
599 |
|
|
B = sectJBz(1:dx:end); |
600 |
|
|
F = sectJFz(1:dx:end); |
601 |
|
|
BpF = B+F; |
602 |
|
|
col=['b','g','r']; dl = 3; |
603 |
|
|
for ix = 1 : length(x) |
604 |
|
|
FLUX = [B(ix) F(ix) BpF(ix)]; |
605 |
|
|
FLUXposI = find(FLUX>=0); |
606 |
|
|
if ~isempty(FLUXposI) |
607 |
|
|
FLUXpos = FLUX(FLUXposI); |
608 |
|
|
co = col(FLUXposI); |
609 |
|
|
[L Li] = sort(FLUXpos); |
610 |
|
|
for ii = length(L):-1:1 |
611 |
|
|
line([1 1]*x(ix),[0 FLUXpos(Li(ii))],'color',co(Li(ii)),'linewidth',dl) |
612 |
|
|
end, end |
613 |
|
|
FLUXnegI = find(FLUX<0); |
614 |
|
|
if ~isempty(FLUXnegI) |
615 |
|
|
FLUXneg = FLUX(FLUXnegI); |
616 |
|
|
co = col(FLUXnegI); |
617 |
|
|
[L Li] = sort(FLUXneg); |
618 |
|
|
for ii = 1:length(L) |
619 |
|
|
line([1 1]*x(ix),[0 FLUXneg(Li(ii))],'color',co(Li(ii)),'linewidth',dl) |
620 |
|
|
end, end |
621 |
|
|
end |
622 |
|
|
line(get(gca,'xlim'),[0 0],'color','k') |
623 |
|
|
plot(x,BpF,'r'); |
624 |
|
|
grid on, box on |
625 |
|
|
ylabel('PV flux (kg/m^3/s^2)'); |
626 |
|
|
set(gca,'xlim',xlim); |
627 |
|
|
set(gca,'xtick',[xlim(1):2:xlim(2)]); |
628 |
|
|
set(gca,'xticklabel',[]); |
629 |
|
|
set(gca,'ylim',[-1 1]*1*10^(-11)); |
630 |
|
|
set(gca,'xdir','reverse'); |
631 |
|
|
title(strvcat(strcat('Section:',sectNAME,tit,... |
632 |
|
|
' and surface PV flux (blue: J^B_z, green: J^F_z, red: J^B_z+J^F_z)'),... |
633 |
|
|
'(gray: \sigma_\theta, black: Mixed layer depth)')); |
634 |
|
|
|
635 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%% |
636 |
|
|
sp(2)=subplot(iw,jw,2);hold on |
637 |
|
|
|
638 |
|
|
if CONT ~= 1 |
639 |
|
|
pcolor(Cx,Cy,C); shading interp |
640 |
|
|
colormap(logcolormap(256,12)); |
641 |
|
|
else |
642 |
|
|
[cs,h]=contourf(Cx,Cy,C,CONTv); |
643 |
|
|
colormap(mycolormap(logcolormap(64,5),length(CONTv))); |
644 |
|
|
end |
645 |
|
|
caxis(cx); ccol(ip) = colorbar(CBAR,'fontsize',10); ctitle(ccol(ip),unit); |
646 |
|
|
set(gca,'xlim',xlim); |
647 |
|
|
xlabel(Xlab); ylabel(Ylab); |
648 |
|
|
set(gca,'xdir','reverse'); |
649 |
|
|
box on |
650 |
|
|
set(gca,'xtick',[xlim(1):2:xlim(2)]); |
651 |
|
|
set(gca,'xticklabel',[xlim(1):2:xlim(2)]); |
652 |
|
|
set(gca,'ylim',[min([Cy(1) Cy(length(Cy))]) max([Cy(1) Cy(length(Cy))]) ]); |
653 |
|
|
set(gca,'ylim',[-600 max([Cy(1) Cy(length(Cy))])]); |
654 |
|
|
|
655 |
|
|
if showT |
656 |
|
|
[cs,h]=contour(sectTx,sectTy,sectT,Tcontour); |
657 |
|
|
clabel(cs,h,'fontsize',8,'color',[0 0 0],'labelspacing',200); |
658 |
|
|
for ih=1:length(h) |
659 |
|
|
set(h(ih),'edgecolor',Tcolor,'linewidth',1); |
660 |
|
|
end |
661 |
|
|
end %if show THETA contours |
662 |
|
|
|
663 |
|
|
if showST |
664 |
|
|
STcontourE=[25.5 25.75]; |
665 |
|
|
[cs,h]=contour(sectSTx,sectSTy,sectST,STcontour); |
666 |
|
|
clabel(cs,h,'fontsize',8,'color',STcolor,'labelspacing',200); |
667 |
|
|
set(h,'edgecolor',STcolor); |
668 |
|
|
set(h,'linewidth',1); |
669 |
|
|
ch=get(h,'Children'); |
670 |
|
|
for ich=1:length(ch) |
671 |
|
|
%set(ch(ich),'edgecolor',STcolor); |
672 |
|
|
%set(ch(ich),'linewidth',1); |
673 |
|
|
for ii = 1 : length(STcontourE) |
674 |
|
|
if get(ch(ich),'UserData') == STcontourE(ii) |
675 |
|
|
% set(ch(ich),'linewidth',1); |
676 |
|
|
end %if |
677 |
|
|
end %for ii |
678 |
|
|
end %for ich |
679 |
|
|
[cs,h]=contour(sectSTx,sectSTy,sectST,STcontourE); |
680 |
|
|
clabel(cs,h,'fontsize',8,'color',STcolor,'labelspacing',200); |
681 |
|
|
set(h,'edgecolor',[1 1 1]); |
682 |
|
|
set(h,'linewidth',2); |
683 |
|
|
|
684 |
|
|
end %if show SIGMATHETA contours |
685 |
|
|
|
686 |
|
|
if showH |
687 |
|
|
l=line(sectHx,sectH,'color',Hcolor,'linewidth',2); |
688 |
|
|
end %if show Mixed layer depth |
689 |
|
|
|
690 |
|
|
pos1=get(sp(1),'position'); |
691 |
|
|
pos2=get(sp(2),'position'); |
692 |
|
|
dy = .1; |
693 |
|
|
set(sp(1),'position',[pos1(1) pos1(2)+dy pos2(3) pos1(4)-dy]); |
694 |
|
|
%set(sp(2),'position',[pos2(1) pos2(2) pos2(3) pos2(4)+1.3*dy]); |
695 |
|
|
set(sp(2),'position',[pos2(1) pos2(2) pos2(3) pos1(2)+dy-1.01*pos2(2)]); |
696 |
|
|
|
697 |
|
|
|
698 |
|
|
|
699 |
|
|
%%%%%%%%%%%%%%%% |
700 |
|
|
drawnow |
701 |
|
|
set(gcf,'position',[4 48 888 430]); |
702 |
|
|
videotimeline(TIME,it,'b') |
703 |
|
|
if prtimg |
704 |
|
|
set(gcf,'color','white') |
705 |
|
|
set(gcf,'paperposition',[0.6 6.5 27.5 14]); |
706 |
|
|
exportj(gcf,1,strcat(outimg,sla,titf,'.',snapshot,'.withJz.section_',sectNAME)); |
707 |
|
|
end %if |
708 |
|
|
|
709 |
|
|
end %for ip |
710 |
|
|
|
711 |
|
|
|
712 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
713 |
|
|
end %if pl3 |
714 |
|
|
|
715 |
|
|
|
716 |
|
|
|
717 |
|
|
|
718 |
|
|
|
719 |
|
|
|
720 |
|
|
if find(pl==4) |
721 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
722 |
|
|
|
723 |
|
|
clf; |
724 |
|
|
m_proj('mercator','long',subdomain.limlon,'lat',subdomain.limlat); |
725 |
|
|
%m_proj('mercator','long',subdomain.limlon,'lat',[25 40]); |
726 |
|
|
%m_proj('mercator','long',subdomain.limlon,'lat',[25 50]); |
727 |
|
|
|
728 |
|
|
hold on |
729 |
|
|
|
730 |
|
|
m_pcolor(Qnetlon,Qnetlat,Qnet); |
731 |
|
|
caxis([-1 1]*500);canom |
732 |
|
|
|
733 |
|
|
dx = 10*diff(Txlon(1:2)); dy = 8*diff(Txlat(1:2)); |
734 |
|
|
dx = 20*diff(Txlon(1:2)); dy = 10*diff(Txlat(1:2)); |
735 |
|
|
lo = [Txlon(1):dx:Txlon(length(Txlon))]; |
736 |
|
|
la = [Txlat(1):dy:Txlat(length(Txlat))]; |
737 |
|
|
[lo la] = meshgrid(lo,la); |
738 |
|
|
Txn = interp2(Txlat,Txlon,Tx',la,lo); |
739 |
|
|
Tyn = interp2(Txlat,Txlon,Ty',la,lo); |
740 |
|
|
s = 3; |
741 |
|
|
m_quiver(lo,la,Txn,Tyn,s,'k'); |
742 |
|
|
|
743 |
|
|
m_coast('patch',[0 0 0]);m_grid |
744 |
|
|
ccol=colorbar('h');%ctitle(ccol,'m'); |
745 |
|
|
title(strcat(snapshot,'/ Net heat flux (W/m^2)')); |
746 |
|
|
[cs,h]=m_contour(MLDlon,MLDlat,MLD,[0:100:500]); |
747 |
|
|
clabel(cs,h,'labelspacing',600,'fontsize',8); |
748 |
|
|
for ih=1:length(h),set(h(ih),'edgecolor',[1 1 1],'linewidth',1);end; |
749 |
|
|
|
750 |
|
|
M(it) = getframe; |
751 |
|
|
|
752 |
|
|
drawnow |
753 |
|
|
if prtimg |
754 |
|
|
set(gcf,'color','white') |
755 |
|
|
set(gcf,'paperorientation','landscape'); |
756 |
|
|
%set(gcf,'paperposition',[0.6 6.5 25 14]); |
757 |
|
|
print(gcf,'-djpeg100',strcat(outimg,sla,snapshot,'.jpg')); |
758 |
|
|
%exportj(gcf,1,strcat(outimg,sla,snapshot)); |
759 |
|
|
end %if |
760 |
|
|
|
761 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
762 |
|
|
end %if pl4 |
763 |
|
|
|
764 |
|
|
|
765 |
|
|
%%%%%%%%%%%%%%%% |
766 |
|
|
%%%%%%%%%%%%%%%% |
767 |
|
|
|
768 |
|
|
|
769 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
770 |
|
|
end %for it |