1 |
function grph_CS(var,xcs,ycs,xcg,ycg,c1,c2,shift) |
2 |
% grph_CS(var,xcs,ycs,xcg,ycg,c1,c2,shift) : produce a flat plot of the |
3 |
% cube_sphere "var" keeping the initial grid (no interpolation, use "surf") |
4 |
% xcs,ycs,xcg,ycg = center + corner grid point coordinates |
5 |
% c1 < c2 = min & max for the color graph |
6 |
% c1 > c2 = scale with min,max of the field, + c1/100 and + c2/100 |
7 |
% shift=-1 : No coast-line |
8 |
% else : draw coast-line shifted by "shift" degree. |
9 |
%----------------------- |
10 |
|
11 |
% EH3: longitudes must be within the interval: (-180,180] |
12 |
if (min(min(xcs)) <= -180) || (180 < max(max(xcs))) ... |
13 |
|| (min(min(xcg)) <= -180) || (180 < max(max(xcg))) |
14 |
disp('Error: longitudes must be within (-180,180]') |
15 |
return |
16 |
end |
17 |
|
18 |
% EH3: latitudes must be within the interval: [-90,90] |
19 |
if (min(min(ycs)) < -90) || (90 < max(max(ycs))) ... |
20 |
|| (min(min(ycg)) < -90) || (90 < max(max(ycg))) |
21 |
disp('Error: latitudes must be within [-90,90]') |
22 |
return |
23 |
end |
24 |
|
25 |
%------------------------------ |
26 |
nc=size(var,2) ; ncp=nc+1 ; |
27 |
mx=min(min(var)); |
28 |
mn=max(max(var)); |
29 |
for j=1:nc, |
30 |
for i=1:6*nc, |
31 |
if var(i,j) ~= NaN |
32 |
mn=min(var(i,j),mn); mx=max(var(i,j),mx); |
33 |
end |
34 |
end |
35 |
end |
36 |
%------------ |
37 |
if c1 >= c2 |
38 |
mb=(mx-mn)*0.01; |
39 |
c1=mn+mb*c1; |
40 |
c2=mx+mb*c2; |
41 |
if c1*c2 < 0 |
42 |
c2=max(abs([c1 c2])); |
43 |
c1=-c2; |
44 |
end |
45 |
fprintf('min,max %8.3e %8.3e Cmin,max %8.3e %8.3e \n',mn,mx,c1,c2) |
46 |
end |
47 |
%------------------------------ |
48 |
%figure(1); |
49 |
if shift ~= -1 |
50 |
path('/u/u0/jmc/MATLAB',path); |
51 |
set_axis |
52 |
fac=rad ; |
53 |
else |
54 |
fac=1. ; |
55 |
end |
56 |
%--- |
57 |
nbsf = 0 ; ic = 0 ; jc = 0 ; |
58 |
[xx2]=split_Z_cub(xcg); |
59 |
[yy2]=split_Z_cub(ycg); |
60 |
%--- |
61 |
for n=[ 1:6 ], |
62 |
%if n < 5 & n > 2, |
63 |
if n < 7, |
64 |
%-------------------------------------------------------- |
65 |
i0=nc*(n-1); |
66 |
vv1=zeros(ncp,ncp) ; xx1=vv1 ; yy1=vv1 ; |
67 |
for j=1:nc, |
68 |
for i=1:nc, |
69 |
vv1(i,j)=var(i0+i,j) ; |
70 |
end |
71 |
end |
72 |
for j=1:nc, |
73 |
vv1(ncp,j)=vv1(nc,j) ; |
74 |
end |
75 |
for i=1:nc, |
76 |
vv1(i,ncp)=vv1(i,nc) ; |
77 |
end |
78 |
vv1(ncp,ncp)=vv1(nc,nc) ; |
79 |
%----- |
80 |
xx1=xx2(:,:,n); |
81 |
yy1=yy2(:,:,n); |
82 |
if xx1(ncp,1) < -300. ; xx1(ncp,1)=xx1(ncp,1)+360. ; end |
83 |
if xx1(1,ncp) < -300. ; xx1(1,ncp)=xx1(1,ncp)+360. ; end |
84 |
%------------ |
85 |
if shift <= -360 |
86 |
%--- Jump ? (only for debug diagnostic) : |
87 |
for i=1:nc |
88 |
for j=1:nc, |
89 |
if abs(xx1(i,j)-xx1(i,j+1)) > 120 |
90 |
fprintf('N: i,J,xx_j,j+1,+C %3i %3i %3i %8.3e %8.3e %8.3e \n', ... |
91 |
n, i,j,xx1(i,j), xx1(i,j+1), xcs(i0+i,j) ) ; |
92 |
end |
93 |
if abs(xx1(i,j)-xx1(i+1,j)) > 120 |
94 |
fprintf('N: I,j,xx_i,i+1,+C %3i %3i %3i %8.3e %8.3e %8.3e \n', ... |
95 |
n, i,j,xx1(i,j), xx1(i+1,j), xcs(i0+i,j) ) ; |
96 |
end |
97 |
end |
98 |
end |
99 |
%--- |
100 |
end |
101 |
%-------------------------------------- |
102 |
% case where Xc jump from < 180 to > -180 when j goes from jc to jc+1 |
103 |
|
104 |
if n == 4 | n == 3 |
105 |
jc = nc/2 + 1; |
106 |
nbsf=part_surf(nbsf,fac,xx1,yy1,vv1,1,ncp,1,jc,c1,c2) ; |
107 |
for i=1:ncp, |
108 |
if xx1(i,jc) > 120 ; xx1(i,jc)= xx1(i,jc)-360. ; end |
109 |
if yy1(i,jc) == 90 & xx1(i,jc) == 90, xx1(i,jc)=-90; end |
110 |
end |
111 |
nbsf=part_surf(nbsf,fac,xx1,yy1,vv1,1,ncp,jc,ncp,c1,c2) ; |
112 |
%--- |
113 |
% case where Xc jump from < -180 to > 180 when i goes from ic to ic+1 |
114 |
elseif n == 6 |
115 |
ic = nc/2 + 1; |
116 |
nbsf=part_surf(nbsf,fac,xx1,yy1,vv1,ic,ncp,1,ncp,c1,c2) ; |
117 |
for j=1:ncp, |
118 |
if xx1(ic,j) > 120 ; xx1(ic,j)= xx1(ic,j)-360. ; end |
119 |
if yy1(ic,j) == -90 & xx1(ic,j) == 90, xx1(ic,j)=-90; end |
120 |
end |
121 |
nbsf=part_surf(nbsf,fac,xx1,yy1,vv1,1,ic,1,ncp,c1,c2) ; |
122 |
else |
123 |
nbsf=part_surf(nbsf,fac,xx1,yy1,vv1,1,ncp,1,ncp,c1,c2) ; |
124 |
end |
125 |
%-------------------------------------- |
126 |
end |
127 |
end |
128 |
hold off |
129 |
if shift ~= -1 |
130 |
m_proj('Equidistant Cylindrical','lat',90,'lon',[-180+shift 180+shift]) |
131 |
%m_proj('Equidistant Cylindrical','lat',[-0 60],'lon',[-180+shift 180+shift]) |
132 |
m_coast('color',[0 0 0]); |
133 |
m_grid('box','on') |
134 |
end |
135 |
|
136 |
%-- |
137 |
scalHV_colbar([1.0 1.0 0.7 0.7],0); |
138 |
if shift == -1, |
139 |
text(-150*fac,-150*fac,sprintf('min,Max= %9.5g , %9.5g', mn, mx)) |
140 |
%set(gca,'position',[-.1 0.2 0.8 0.75]); % xmin,ymin,xmax,ymax in [0,1] |
141 |
else |
142 |
text(0.,-150.*fac,sprintf('min,Max= %9.5g , %9.5g', mn, mx)) |
143 |
end |
144 |
return |
145 |
%---------------------------------------------------------------------- |
146 |
function nbsf=part_surf(nbsf,fac,xx,yy,vv,i1,i2,j1,j2,c1,c2) |
147 |
S=surf(fac*xx(i1:i2,j1:j2),fac*yy(i1:i2,j1:j2), ... |
148 |
zeros(i2+1-i1,j2+1-j1),vv(i1:i2,j1:j2)) ; |
149 |
if c1 < c2, caxis([c1 c2]) ; end |
150 |
set(S,'LineStyle','-','LineWidth',0.01); |
151 |
set(S,'EdgeColor','none'); |
152 |
%set(S,'Clipping','off'); |
153 |
%get(S) ; |
154 |
%nbsf = nbsf+1 ; if nbsf == 1 ; hold on ; view(0,90) ; end |
155 |
nbsf = nbsf+1 ; if nbsf == 1 ; hold on ; view(0,90) ; end |
156 |
%axis([-180 0 -90 30]) ; % work only without coast-line |
157 |
%axis([90 180 -60 0]) ; % work only without coast-line |
158 |
axis([-180 180 -90 90]) ; % work only without coast-line |
159 |
%axis([30 60 -45 -25]) ; % work only without coast-line |
160 |
return |
161 |
%---------------------------------------------------------------------- |
162 |
|