1 |
function [z6t] = split_Z_cub(z3d) |
function [z6t] = split_Z_cub(z3d) |
2 |
% [z6t] = split_Z_cub(z3d) |
% [z6t] = split_Z_cub(z3d) |
3 |
%--------------------------------------------- |
%--------------------------------------------- |
4 |
% split 2d/3d arrays Z to 2d/3d x 6 faces |
% split 2d/3d arrays z3d to 2d/3d x 6 faces |
5 |
% and add 1 column + 1 row |
% and add 1 column + 1 row |
6 |
% output is z6t(ny+1,ny+1,[nr],6) |
% => output is z6t(nc+1,nc+1,[nr],6) |
7 |
% take the average value (over the 3 neighbours) for the 2 missing corners |
% either input is z3d(nc*6*nc+2,*): includes the 2 missing corners |
8 |
|
% or input is z3d(nc*6,nc,*): => use the average value (from the 3 |
9 |
|
% neighbours) for the 2 missing corners |
10 |
%---------------------------------------------- |
%---------------------------------------------- |
11 |
dim=length(size(z3d)); |
% $Header$ |
12 |
if dim == 2, nr=1; [nx ny]=size(z3d) ; else [nx ny nr]=size(z3d) ; end |
% $Name$ |
|
nyp=ny+1; |
|
|
%================================================================= |
|
|
|
|
|
if dim == 2, |
|
13 |
|
|
14 |
%- split on to 6 tile with overlap in i+1 & j+1 : |
dims=size(z3d); nDim=length(dims); |
15 |
z6t=zeros(nyp,ny+1,6); |
%fprintf(' nDim= %i , dims:',nDim);fprintf(' %i',dims);fprintf('\n'); |
16 |
|
|
17 |
for n=1:6, |
nc=fix((dims(1)-2)/6); nc=fix(sqrt(abs(nc))); |
18 |
z6t([1:ny],[1:ny],n)=z3d([(n-1)*ny+1:n*ny],[1:ny]); |
if dims(1) == nc*nc*6+2, |
19 |
end |
nr=dims(2); if nDim > 2, nr=prod(dims(2:end)); end |
20 |
|
nx=6*nc ; nPg=nx*nc; nPts=nPg+2; dims=[nPts 1 dims(2:end)]; |
21 |
z6t(nyp,[1:ny], 1)=z3d(1+ny,[1:ny]); |
z3d=reshape(z3d,[nPts nr]); |
22 |
z6t(nyp,[2:nyp],2)=z3d([4*ny:-1:1+(4-1)*ny],1); |
zzC=z3d(nPg+1:nPg+2,:); z3d=z3d(1:nPg,:); |
23 |
z6t(nyp,[1:ny], 3)=z3d(1+3*ny,[1:ny]); |
elseif dims(1) == 6*dims(2), |
24 |
z6t(nyp,[2:nyp],4)=z3d([6*ny:-1:1+(6-1)*ny],1); |
if nDim == 2, nr=1; else nr=prod(dims(3:end)); end |
25 |
z6t(nyp,[1:ny], 5)=z3d(1+5*ny,[1:ny]); |
nc=dims(2); nx=6*nc ; nPg=nx*nc; nPts=nPg+2; |
26 |
z6t(nyp,[2:nyp],6)=z3d([2*ny:-1:1+(2-1)*ny],1); |
zzC=zeros(2,nr); |
|
|
|
|
z6t([2:nyp],nyp,1)=z3d(1+2*ny,[ny:-1:1]); |
|
|
z6t([1:ny], nyp,2)=z3d([(3-1)*ny+1:3*ny],1); |
|
|
z6t([2:nyp],nyp,3)=z3d(1+4*ny,[ny:-1:1]); |
|
|
z6t([1:ny], nyp,4)=z3d([(5-1)*ny+1:5*ny],1); |
|
|
z6t([2:nyp],nyp,5)=z3d(1+0*ny,[ny:-1:1]); |
|
|
z6t([1:ny], nyp,6)=z3d([(1-1)*ny+1:1*ny],1); |
|
|
|
|
|
%- missing corner : |
|
|
zz1=z3d(2*ny,1)+z3d(4*ny,1)+z3d(6*ny,1); |
|
|
zz1=zz1/3; |
|
|
z6t(nyp,1,2)=zz1; |
|
|
z6t(nyp,1,4)=zz1; |
|
|
z6t(nyp,1,6)=zz1; |
|
|
|
|
|
zz2=z3d(1,ny)+z3d(1+2*ny,ny)+z3d(1+4*ny,ny); |
|
|
zz2=zz2/3; |
|
|
z6t(1,nyp,1)=zz2; |
|
|
z6t(1,nyp,3)=zz2; |
|
|
z6t(1,nyp,5)=zz2; |
|
|
|
|
27 |
else |
else |
28 |
|
fprintf(' Error in split_Z_cub: bad input dimensions :'); |
29 |
|
fprintf(' %i',dims); fprintf('\n'); |
30 |
|
z6t=0; return |
31 |
|
end |
32 |
|
|
33 |
|
%================================================================= |
34 |
|
|
35 |
%- split on to 6 tile with overlap in i+1 & j+1 : |
z3d=reshape(z3d,[nc 6 nc nr]); z3d=permute(z3d,[1 3 4 2]); |
36 |
z6t=zeros(ny+1,ny+1,nr,6); |
ncp=nc+1; z6t=zeros(ncp,ncp,nr,6); |
37 |
|
|
38 |
for n=1:6, |
%-- split on to 6 faces: |
39 |
z6t([1:ny],[1:ny],:,n)=z3d([(n-1)*ny+1:n*ny],[1:ny],:); |
z6t([1:nc],[1:nc],:,:)=z3d; |
40 |
end |
|
41 |
|
%-- add overlap in i+1 & j+1 : |
42 |
z6t(nyp,[1:ny], :,1)=z3d(1+ny,[1:ny],:); |
z6t(ncp,[1:nc], :,1)=z3d(1,[1:nc],:,2); |
43 |
z6t(nyp,[2:nyp],:,2)=z3d([4*ny:-1:1+(4-1)*ny],1,:); |
z6t(ncp,[2:ncp],:,2)=z3d([nc:-1:1],1,:,4); |
44 |
z6t(nyp,[1:ny], :,3)=z3d(1+3*ny,[1:ny],:); |
z6t(ncp,[1:nc], :,3)=z3d(1,[1:nc],:,4); |
45 |
z6t(nyp,[2:nyp],:,4)=z3d([6*ny:-1:1+(6-1)*ny],1,:); |
z6t(ncp,[2:ncp],:,4)=z3d([nc:-1:1],1,:,6); |
46 |
z6t(nyp,[1:ny], :,5)=z3d(1+5*ny,[1:ny],:); |
z6t(ncp,[1:nc], :,5)=z3d(1,[1:nc],:,6); |
47 |
z6t(nyp,[2:nyp],:,6)=z3d([2*ny:-1:1+(2-1)*ny],1,:); |
z6t(ncp,[2:ncp],:,6)=z3d([nc:-1:1],1,:,2); |
|
|
|
|
z6t([2:nyp],nyp,:,1)=z3d(1+2*ny,[ny:-1:1],:); |
|
|
z6t([1:ny], nyp,:,2)=z3d([(3-1)*ny+1:3*ny],1,:); |
|
|
z6t([2:nyp],nyp,:,3)=z3d(1+4*ny,[ny:-1:1],:); |
|
|
z6t([1:ny], nyp,:,4)=z3d([(5-1)*ny+1:5*ny],1,:); |
|
|
z6t([2:nyp],nyp,:,5)=z3d(1+0*ny,[ny:-1:1],:); |
|
|
z6t([1:ny], nyp,:,6)=z3d([(1-1)*ny+1:1*ny],1,:); |
|
|
|
|
|
%- missing corner : |
|
|
zz1=zeros(1,nr); zz2=zeros(1,nr); |
|
|
zz1=z3d(2*ny,1,:)+z3d(4*ny,1,:)+z3d(6*ny,1,:); |
|
|
zz1=zz1/3; |
|
|
z6t(nyp,1,:,2)=zz1; |
|
|
z6t(nyp,1,:,4)=zz1; |
|
|
z6t(nyp,1,:,6)=zz1; |
|
|
|
|
|
zz2=z3d(ny,1,:)+z3d(ny,1+2*ny,:)+z3d(ny,1+4*ny,:)+z3d(6*ny,1,:); |
|
|
zz2=zz2/3; |
|
|
z6t(1,nyp,:,1)=zz2; |
|
|
z6t(1,nyp,:,3)=zz2; |
|
|
z6t(1,nyp,:,5)=zz2; |
|
48 |
|
|
49 |
|
z6t([2:ncp],ncp,:,1)=z3d(1,[nc:-1:1],:,3); |
50 |
|
z6t([1:nc], ncp,:,2)=z3d([1:nc],1,:,3); |
51 |
|
z6t([2:ncp],ncp,:,3)=z3d(1,[nc:-1:1],:,5); |
52 |
|
z6t([1:nc], ncp,:,4)=z3d([1:nc],1,:,5); |
53 |
|
z6t([2:ncp],ncp,:,5)=z3d(1,[nc:-1:1],:,1); |
54 |
|
z6t([1:nc], ncp,:,6)=z3d([1:nc],1,:,1); |
55 |
|
|
56 |
|
%---------------------------------------------------- |
57 |
|
|
58 |
|
%-- missing corners : |
59 |
|
if dims(1) ~= nPts, |
60 |
|
%- use the average value (from the 3 neighbours) |
61 |
|
zzC(1,:)=z3d(1,nc,:,1)+z3d(1,nc,:,3)+z3d(1,nc,:,5); |
62 |
|
zzC(2,:)=z3d(nc,1,:,2)+z3d(nc,1,:,4)+z3d(nc,1,:,6); |
63 |
|
zzC=zzC/3; |
64 |
|
fprintf('split_Z_cub: fills 2 missing corners with local mean value\n'); |
65 |
|
end |
66 |
|
%- 1rst (nPg+1) = N.W corner of face 1 |
67 |
|
z6t(1,ncp,:,1)=zzC(1,:); |
68 |
|
z6t(1,ncp,:,3)=zzC(1,:); |
69 |
|
z6t(1,ncp,:,5)=zzC(1,:); |
70 |
|
%- 2nd (nPg+2) = S.E corner of face 2 |
71 |
|
z6t(ncp,1,:,2)=zzC(2,:); |
72 |
|
z6t(ncp,1,:,4)=zzC(2,:); |
73 |
|
z6t(ncp,1,:,6)=zzC(2,:); |
74 |
|
|
75 |
|
if nDim > 2, |
76 |
|
z6t=reshape(z6t,[ncp ncp dims(3:end) 6]); |
77 |
|
else |
78 |
|
z6t=squeeze(z6t); |
79 |
end |
end |
80 |
|
|
81 |
return |
return |