XIAN-FEM-2026June/三维matlab代码/matlab 3D二阶基+散射边界条件+单周期边界/getMesh.m

53 lines
1.4 KiB
Matlab

clc
clear all
model=mphload('c6.mph');
[m1, m2]=mphmeshstats(model);
%顶点
mesh.NbrVertex=max(size(m2.vertex));%顶点数
mesh.Vertex=m2.vertex'; %顶点坐标 3*n
%四面体
mesh.NbrTet=max(size(m2.elem{2}));%四面体数
mesh.DomainOfTet=m2.elementity{2};%四面体区域索引 n*1
mesh.Tet=m2.elem{2}+1;%四面体顶点索引 4*n
mesh.Tet = sort(mesh.Tet)';
mesh.Tri=sort(m2.elem{3})'+1;
mesh.NbrTri=length(mesh.Tri);
mesh.DomainOfTri=m2.elementity{3};
theta=pi/3;
err=0.01*0.01;
mesh=resortIndex(mesh,theta,err);
%边
%边排序
el2no=mesh.Tet';
n1=el2no([1 1 1 2 2 3],:);
n2=el2no([2 3 4 3 4 4],:);
el_ed2no_array=[n1(:) n2(:)];
%按1-2 1-3 1-4 2-3 2-4 3-4排序
%Edges 全局边n*2 EdgesOfElements四面体边索引 6N*1 sign四面体边方向 6N*1
[mesh.Edge,~,mesh.EdgeOfTet]=unique(el_ed2no_array,'rows');
mesh.NbrEdge=max(size(mesh.Edge));%边数
mesh.EdgeOfTet=reshape(mesh.EdgeOfTet,6,mesh.NbrTet)';
%面
el2no=mesh.Tet';
n1=el2no([1 1 1 2],:);
n2=el2no([2 2 3 3],:);
n3=el2no([3 4 4 4],:);
el_ed2no_array=[n1(:) n2(:) n3(:)];
[mesh.Face,~,mesh.FaceOfTet]=unique(el_ed2no_array,'rows');
mesh.FaceOfTet=reshape(mesh.FaceOfTet,4,mesh.NbrTet)';
mesh.NbrFace=length(mesh.Face);
mesh.ConnOfTri=zeros(mesh.NbrTri,2);
for i=1:mesh.NbrTri
[is,index]=ismember(mesh.Tri(i,:),el_ed2no_array,"rows");
mesh.ConnOfTri(i,1)=fix((index-1)/4)+1;
mesh.ConnOfTri(i,2)=index-(mesh.ConnOfTri(i,1)-1)*4;
end
save('c6.mat',"mesh");