1 |
edhill |
1.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 |
|
|
|