You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.1 KiB
83 lines
2.1 KiB
function [MESH,V]=MeshGenerate(num)
|
|
% 剖分立方体为num^3个正六面体网格
|
|
% CUBE 8列,每一行表示一个六面体的8个顶点的序号
|
|
% V=[X,Y,Z], X Y Z表示节点坐标.
|
|
% NeumannBC: 6列
|
|
% e.g. the i-th line [1 0 0 0 0 0] means
|
|
% the 1st face of the i-th element is imposed
|
|
% with Neumann B.C.
|
|
% 1st face: node 1-2-3-4
|
|
% 2nd face: node 2-4-8-6
|
|
% 3rd face: node 4-3-7-8
|
|
% 4th face: node 3-1-5-7
|
|
% 5th face: node 1-2-6-5
|
|
% 6th face: node 6-8-7-5
|
|
|
|
% h: 六面体单元边长
|
|
h=1/num;
|
|
% Number the Nodes
|
|
% X = i * h, Y = j * h, Z = k * h
|
|
% Then index of the node is
|
|
% ( k * (num+1)^2 + j * (num+1) + i+1 )
|
|
V=zeros((num+1)^3,3);
|
|
X=zeros((num+1)^3,1);
|
|
Y=zeros((num+1)^3,1);
|
|
Z=zeros((num+1)^3,1);
|
|
NodeNumber=zeros((num+1),(num+1),(num+1));
|
|
index=1;
|
|
for k=0:num
|
|
for j=0:num
|
|
for i=0:num
|
|
X(index)=i*h;
|
|
Y(index)=j*h;
|
|
Z(index)=k*h;
|
|
NodeNumber(i+1,j+1,k+1)=index;
|
|
index=index+1;
|
|
end
|
|
end
|
|
end
|
|
V(:,1)=X;V(:,2)=Y;V(:,3)=Z;
|
|
|
|
% Number the Cubes
|
|
nel=num^3;% number of elements( cubes here)
|
|
CUBE=zeros(nel,8);
|
|
for index=1:nel
|
|
r = mod(index,(num*num));
|
|
zz = (index-r)/(num*num);
|
|
if r == 0
|
|
%tmp1 = NodeNumber(num+1,num+1,zz+1)
|
|
CUBE(index,8) = NodeNumber(num+1,num+1,zz+1);
|
|
else
|
|
rr = mod(r,num);
|
|
yy = (r-rr)/num;
|
|
if rr==0
|
|
%tmp2 = NodeNumber(num+1,yy+1,zz+2)
|
|
CUBE(index,8) = NodeNumber(num+1,yy+1,zz+2);
|
|
else
|
|
%tmp3 = NodeNumber(rr+1,yy+2,zz+2)
|
|
CUBE(index,8) = NodeNumber(rr+1,yy+2,zz+2);
|
|
end
|
|
end
|
|
CUBE(index,4) = CUBE(index,8) - (num+1)*(num+1);
|
|
CUBE(index,7) = CUBE(index,8) - 1;
|
|
CUBE(index,6) = CUBE(index,8) - (num+1);
|
|
CUBE(index,5) = CUBE(index,6) - 1;
|
|
CUBE(index,3) = CUBE(index,4) - 1;
|
|
CUBE(index,2) = CUBE(index,4) - (num+1);
|
|
CUBE(index,1) = CUBE(index,2) - 1;
|
|
|
|
|
|
|
|
end
|
|
|
|
MESH=CUBE;
|
|
MESH(:,4) = CUBE(:,3);
|
|
MESH(:,3) = CUBE(:,1);
|
|
MESH(:,2) = CUBE(:,2);
|
|
MESH(:,1) = CUBE(:,4);
|
|
|
|
MESH(:,8) = CUBE(:,7);
|
|
MESH(:,7) = CUBE(:,5);
|
|
MESH(:,6) = CUBE(:,6);
|
|
MESH(:,5) = CUBE(:,8);
|
|
end
|