| 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 |
|