domain/decomposition generators
This commit is contained in:
parent
226dbf38ff
commit
0805dba2a2
|
|
@ -0,0 +1,112 @@
|
||||||
|
function [nxu,nyu,nzu,nxv,nyv,nzv,nxw,nyw,nzw,...
|
||||||
|
xu1,yu1,zu1,xv1,yv1,zv1,xw1,yw1,zw1,xp1,yp1,zp1,dx,dy,dz]=...
|
||||||
|
generate_grid(a,b,c,d,e,f,nxp,nyp,nzp,x_periodic,y_periodic,z_periodic)
|
||||||
|
|
||||||
|
if x_periodic==1
|
||||||
|
nxu=nxp;
|
||||||
|
nxv=nxp;
|
||||||
|
nxw=nxp;
|
||||||
|
else
|
||||||
|
nxu=nxp+1;
|
||||||
|
nxv=nxp;
|
||||||
|
nxw=nxp;
|
||||||
|
end
|
||||||
|
if y_periodic==1
|
||||||
|
nyu=nyp;
|
||||||
|
nyv=nyp;
|
||||||
|
nyw=nyp;
|
||||||
|
else
|
||||||
|
nyu=nyp;
|
||||||
|
nyv=nyp+1;
|
||||||
|
nyw=nyp;
|
||||||
|
end
|
||||||
|
if z_periodic==1
|
||||||
|
nzu=nzp;
|
||||||
|
nzv=nzp;
|
||||||
|
nzw=nzp;
|
||||||
|
else
|
||||||
|
nzu=nzp;
|
||||||
|
nzv=nzp;
|
||||||
|
nzw=nzp+1;
|
||||||
|
end
|
||||||
|
%grid step:
|
||||||
|
if x_periodic==1
|
||||||
|
dx=(b-a)/(nxp);
|
||||||
|
else
|
||||||
|
dx=(b-a)/(nxp-1);
|
||||||
|
end
|
||||||
|
if y_periodic==1
|
||||||
|
dy=(d-c)/(nyp);
|
||||||
|
else
|
||||||
|
dy=(d-c)/(nyp-1);
|
||||||
|
end
|
||||||
|
if z_periodic==1
|
||||||
|
dz=(f-e)/(nzp);
|
||||||
|
else
|
||||||
|
dz=(f-e)/(nzp-1);
|
||||||
|
end
|
||||||
|
%
|
||||||
|
if x_periodic==1
|
||||||
|
xu1=a+((1:nxu)-1)*dx;
|
||||||
|
else
|
||||||
|
xu1=a+((1:nxu)-3/2)*dx;
|
||||||
|
end
|
||||||
|
if y_periodic==1
|
||||||
|
yu1=c+((1:nyu)-1/2)*dy;
|
||||||
|
else
|
||||||
|
yu1=c+((1:nyu)-1)*dy;
|
||||||
|
end
|
||||||
|
if z_periodic==1
|
||||||
|
zu1=e+((1:nzu)-1/2)*dz;
|
||||||
|
else
|
||||||
|
zu1=e+((1:nzu)-1)*dz;
|
||||||
|
end
|
||||||
|
%
|
||||||
|
if x_periodic==1
|
||||||
|
xv1=a+((1:nxv)-1/2)*dx;
|
||||||
|
else
|
||||||
|
xv1=a+((1:nxv)-1)*dx;
|
||||||
|
end
|
||||||
|
if y_periodic==1
|
||||||
|
yv1=c+((1:nyv)-1)*dy;
|
||||||
|
else
|
||||||
|
yv1=c+((1:nyv)-3/2)*dy;
|
||||||
|
end
|
||||||
|
if z_periodic==1
|
||||||
|
zv1=e+((1:nzv)-1/2)*dz;
|
||||||
|
else
|
||||||
|
zv1=e+((1:nzv)-1)*dz;
|
||||||
|
end
|
||||||
|
%
|
||||||
|
if x_periodic==1
|
||||||
|
xw1=a+((1:nxw)-1/2)*dx;
|
||||||
|
else
|
||||||
|
xw1=a+((1:nxw)-1)*dx;
|
||||||
|
end
|
||||||
|
if y_periodic==1
|
||||||
|
yw1=c+((1:nyw)-1/2)*dy;
|
||||||
|
else
|
||||||
|
yw1=c+((1:nyw)-1)*dy;
|
||||||
|
end
|
||||||
|
if z_periodic==1
|
||||||
|
zw1=e+((1:nzw)-1)*dz;
|
||||||
|
else
|
||||||
|
zw1=e+((1:nzw)-3/2)*dz;
|
||||||
|
end
|
||||||
|
%
|
||||||
|
if x_periodic==1
|
||||||
|
xp1=a+((1:nxp)-1/2)*dx;
|
||||||
|
else
|
||||||
|
xp1=a+((1:nxp)-1)*dx;
|
||||||
|
end
|
||||||
|
if y_periodic==1
|
||||||
|
yp1=c+((1:nyp)-1/2)*dy;
|
||||||
|
else
|
||||||
|
yp1=c+((1:nyp)-1)*dy;
|
||||||
|
end
|
||||||
|
if z_periodic==1
|
||||||
|
zp1=e+((1:nzp)-1/2)*dz;
|
||||||
|
else
|
||||||
|
zp1=e+((1:nzp)-1)*dz;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
function [ibegu,iendu,jbegu,jendu,kbegu,kendu,...
|
||||||
|
ibegv,iendv,jbegv,jendv,kbegv,kendv,...
|
||||||
|
ibegw,iendw,jbegw,jendw,kbegw,kendw,...
|
||||||
|
ibegp,iendp,jbegp,jendp,kbegp,kendp]=generate_procgrid(...
|
||||||
|
nxu,nyu,nzu,nxv,nyv,nzv,nxw,nyw,nzw,...
|
||||||
|
nxp,nyp,nzp,nxprocs,nyprocs,nzprocs)
|
||||||
|
%
|
||||||
|
% determine the 3d decomposition (pointers) of fields for u,v,w,p
|
||||||
|
%
|
||||||
|
chi='_';
|
||||||
|
% U:
|
||||||
|
[ibegu,iendu]=mpe_decomp1d(nxu,nxprocs,chi);
|
||||||
|
[jbegu,jendu]=mpe_decomp1d(nyu,nyprocs,chi);
|
||||||
|
[kbegu,kendu]=mpe_decomp1d(nzu,nzprocs,chi);
|
||||||
|
% V:
|
||||||
|
[ibegv,iendv]=mpe_decomp1d(nxv,nxprocs,chi);
|
||||||
|
[jbegv,jendv]=mpe_decomp1d(nyv,nyprocs,chi);
|
||||||
|
[kbegv,kendv]=mpe_decomp1d(nzv,nzprocs,chi);
|
||||||
|
% W:
|
||||||
|
[ibegw,iendw]=mpe_decomp1d(nxw,nxprocs,chi);
|
||||||
|
[jbegw,jendw]=mpe_decomp1d(nyw,nyprocs,chi);
|
||||||
|
[kbegw,kendw]=mpe_decomp1d(nzw,nzprocs,chi);
|
||||||
|
% P:
|
||||||
|
[ibegp,iendp]=mpe_decomp1d(nxp,nxprocs,chi);
|
||||||
|
[jbegp,jendp]=mpe_decomp1d(nyp,nyprocs,chi);
|
||||||
|
[kbegp,kendp]=mpe_decomp1d(nzp,nzprocs,chi);
|
||||||
|
end
|
||||||
|
|
||||||
|
function [s,e]=mpe_decomp1d(n,numprocs,chi)
|
||||||
|
%
|
||||||
|
% determines 1d decomposition (as in fortran dns code)
|
||||||
|
%
|
||||||
|
for myid=0:numprocs-1
|
||||||
|
nlocal = floor(n/ numprocs);
|
||||||
|
s(myid+1) = myid * nlocal + 1;
|
||||||
|
deficit = mod(n,numprocs);
|
||||||
|
s(myid+1) = s(myid+1) + min(myid,deficit);
|
||||||
|
if myid<deficit
|
||||||
|
nlocal = nlocal + 1;
|
||||||
|
end
|
||||||
|
e(myid+1) = s(myid+1) + nlocal - 1;
|
||||||
|
if (e(myid+1)> n | myid==numprocs-1)
|
||||||
|
e(myid+1) = n;
|
||||||
|
end
|
||||||
|
if chi=='p'
|
||||||
|
% /* finally: augment all counts by one */
|
||||||
|
s(myid+1) = s(myid+1) + 1;
|
||||||
|
e(myid+1) = e(myid+1) + 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Reference in New Issue