1 |
function a = mk3D(b,c) |
2 |
%function a = mk3D(b,c) |
3 |
% => makes a 3D field of the same format as c, based on b, which may be |
4 |
% either [A] a 2D field consistent with c(:,:,1) |
5 |
% or [B] a 1D vector concistent |
6 |
% |
7 |
% in case [A], if b has more that 2D, then the first 2D field is used |
8 |
% in case [B], if the length of b is n3=size(c.f1,3), then we map b(k) to |
9 |
% a(:,:,k). Otherwise we map b(1) to a(:,:,k) and issue a warning. |
10 |
|
11 |
a=c; |
12 |
n3=size(a.f1,3); |
13 |
|
14 |
if isa(b,'gcmfaces'); |
15 |
%go from 2D field to 3D field |
16 |
for iFace=1:a.nFaces; |
17 |
iF=num2str(iFace); |
18 |
eval(['tmp1=b.f' iF ';']); [n1,n2]=size(tmp1); tmp1=tmp1(:); |
19 |
tmp1=tmp1*ones(1,size(a.f1,3)); tmp1=reshape(tmp1,[n1 n2 n3]); |
20 |
eval(['a.f' iF '=tmp1;']); |
21 |
end; |
22 |
elseif isa(b,'double'); |
23 |
if length(b)~=1&length(b)~=n3; fprintf(' mk3D warning: b(1) is used \n'); end; |
24 |
if length(b)~=n3; b=b(1)*ones(1,n3); end; |
25 |
if size(b,1)~=1; b=b'; end; |
26 |
for iFace=1:a.nFaces; |
27 |
iF=num2str(iFace); |
28 |
eval(['tmp1=c.f' iF ';']); tmp2=size(tmp1); n1=tmp2(1); n2=tmp2(2); |
29 |
tmp1=reshape(ones(n1*n2,1)*b,[n1 n2 n3]);; |
30 |
eval(['a.f' iF '=tmp1;']); |
31 |
end; |
32 |
else |
33 |
error('indexing not supported by gcmfaces objects') |
34 |
end |
35 |
|
36 |
|