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