1 |
enderton |
1.1 |
function [uE,vN] = cubeuv2uvEN_C(u,v,AngleCS,AngleSN,XG,YG) |
2 |
|
|
% [uE,vN] = cubeuv2uvEN_C(u,v,AngleCS,AngleSN,XG,YG) |
3 |
|
|
% |
4 |
|
|
% Rotate cube sphere C-grid U and V vector components of to east-west (uE), |
5 |
|
|
% north-south (vN) components locateds and cube sphere grid centers. |
6 |
|
|
% |
7 |
|
|
% Incoming u and v matricies are assumed to be cube sphere C-grid vector |
8 |
|
|
% fields where the first two dimensions are (6*nc nc), where nc is the cube |
9 |
|
|
% face resolution. There may up to 4 additional dimensions (likely z and |
10 |
|
|
% time, trials, etc.) beyond this. |
11 |
|
|
% |
12 |
|
|
% e.g. |
13 |
|
|
% |
14 |
|
|
% >> u=rdmds('uVeltave.0000513360'); |
15 |
|
|
% >> v=rdmds('vVeltave.0000513360'); |
16 |
|
|
% >> AngleCS=rdmds('AngleCS'); |
17 |
|
|
% >> AngleSN=rdmds('AngleSN'); |
18 |
|
|
% >> XG=rdmds('XG'); |
19 |
|
|
% >> YG=rdmds('YG'); |
20 |
enderton |
1.2 |
% >> [uE,vN] = cubeuv2uvEN_C(u,v,AngleCS,AngleSN,XG,YG); |
21 |
enderton |
1.1 |
|
22 |
|
|
if ~isequal(size(u,1),6.*size(u,2)) | ... |
23 |
|
|
~isequal(size(v,1),6.*size(v,2)) |
24 |
|
|
error(['Error in CS-dimensions: ',... |
25 |
|
|
'u = ',mat2str(size(u)),', ',... |
26 |
|
|
'v = ',mat2str(size(v))]); |
27 |
|
|
end |
28 |
|
|
|
29 |
|
|
% Parse dimension information, flatted extra dimensions. |
30 |
|
|
dim=size(u); nc=dim(2); nz=prod(dim(3:end)); |
31 |
|
|
u=reshape(u,[6*nc nc nz]); |
32 |
|
|
v=reshape(v,[6*nc nc nz]); |
33 |
|
|
|
34 |
|
|
% Do simple average to put u,v at the cell center (A-grid). |
35 |
|
|
[uu,vv] = split_UV_cub(u,v); |
36 |
|
|
uu=reshape(uu,[nc+1 nc nz 6]); |
37 |
|
|
vv=reshape(vv,[nc nc+1 nz 6]); |
38 |
|
|
u=(uu(1:nc,:,:,:)+uu(2:nc+1,:,:,:))/2; |
39 |
|
|
v=(vv(:,1:nc,:,:)+vv(:,2:nc+1,:,:))/2; |
40 |
|
|
u=reshape(permute(u,[1 4 2 3]),[6*nc*nc nz]); |
41 |
|
|
v=reshape(permute(v,[1 4 2 3]),[6*nc*nc nz]); |
42 |
|
|
|
43 |
|
|
% Make rotation to find uE, vN. |
44 |
|
|
uE=NaN.*zeros(6*nc*nc,nz); |
45 |
|
|
vN=NaN.*zeros(6*nc*nc,nz); |
46 |
|
|
for k=1:nz; |
47 |
|
|
uE(:,k)=AngleCS(:).*u(:,k)-AngleSN(:).*v(:,k); |
48 |
|
|
vN(:,k)=AngleSN(:).*u(:,k)+AngleCS(:).*v(:,k); |
49 |
|
|
end |
50 |
|
|
uE = reshape(uE,dim); |
51 |
|
|
vN = reshape(vN,dim); |