| 1 |
function [G] = generate_grid(varargin) |
| 2 |
% generate_grid(dlon,dllat) |
| 3 |
% generate_grid(dlon,dllat,lon0,lat0) |
| 4 |
% generate_grid(dlon,dllat,lon0,lat0,mask) |
| 5 |
|
| 6 |
switch nargin |
| 7 |
case {2} |
| 8 |
dlon=varargin{1}; |
| 9 |
dlat=varargin{2}; |
| 10 |
lon0=0; |
| 11 |
lat0=-90; |
| 12 |
case {4,5} |
| 13 |
dlon=varargin{1}; |
| 14 |
dlat=varargin{2}; |
| 15 |
lon0=varargin{3}; |
| 16 |
lat0=varargin{4}; |
| 17 |
otherwise |
| 18 |
error('Wrong number of arguments') |
| 19 |
end |
| 20 |
|
| 21 |
[G.xc,G.yc,G.xg,G.yg,G.rac,G.dxg,G.dyg]=grid_sphere(dlon,dlat,lon0,lat0); |
| 22 |
%[G.xc,G.yc,G.xg,G.yg]=grid_sphere(dlon,dlat,lon0,lat0); |
| 23 |
|
| 24 |
if nargin<=4 |
| 25 |
return |
| 26 |
end |
| 27 |
|
| 28 |
G.mskc=mask(varargin{5}); |
| 29 |
|
| 30 |
if prod( size(G.mskc(:,:,1)) == [size(G.xc,1) size(G.yc,2)] )==0 |
| 31 |
disp('Size of mask argument:');size(G.mskc(:,:,1)) |
| 32 |
error('Mask argument (5) has incompatible dimensions with grid') |
| 33 |
end |
| 34 |
|
| 35 |
[xc,yc]=ndgrid(G.xc,G.yc); |
| 36 |
|
| 37 |
xc( find(xc<0) )=xc( find(xc<0) )+360; |
| 38 |
|
| 39 |
mskc=G.mskc(:,:,1); |
| 40 |
j=[]; |
| 41 |
j=[j find( yc>-32.5 & xc>290 )']; |
| 42 |
j=[j find( yc>-32.5 & xc<25 )']; |
| 43 |
%j=[j find( yc>-32 & yc+xc>287 )']; |
| 44 |
j=[j find( yc>9 & yc<60 & (yc-10)+(xc-276)>0 )']; |
| 45 |
j=[j find( yc>17 & yc<60 & xc>261 )']; |
| 46 |
j=[j find( yc>50 & (yc-70)-(xc-270)<0 )']; |
| 47 |
j=[j find( yc>64 & xc<100 & xc>0 )']; |
| 48 |
j=[j find( yc>31 & yc<44 & xc<38 & xc>0 )']; |
| 49 |
matl=0*mskc; |
| 50 |
matl(j)=1; |
| 51 |
matl=matl.*mskc; |
| 52 |
G.matl=matl; |
| 53 |
|
| 54 |
mpac=(1-matl).*mskc; |
| 55 |
j=[]; |
| 56 |
j=[j find( yc>-32.5 & yc<65 )']; |
| 57 |
mpac=0*mskc; |
| 58 |
mpac(j)=1; |
| 59 |
mpac=mpac.*mskc.*(1-matl); |
| 60 |
G.mpac=mpac; |
| 61 |
|
| 62 |
msoc=(1-matl).*(1-mpac).*mskc; |
| 63 |
j=[]; |
| 64 |
j=[j find( yc<0 )']; |
| 65 |
G.msoc=msoc.*mskc.*(1-mpac).*(1-matl); |