79 lines
1.9 KiB
Matlab
79 lines
1.9 KiB
Matlab
% 将 SBCmesh.mat 导出为 OpticsFEM3D 可读文本网格 SBCmesh.dat
|
||
% 用法:先运行 getMesh.m 生成 SBCmesh.mat,再运行本脚本
|
||
|
||
clc;
|
||
if ~isfile('SBCmesh.mat')
|
||
error('请先运行 getMesh.m 生成 SBCmesh.mat');
|
||
end
|
||
load('SBCmesh.mat', 'mesh');
|
||
|
||
fid = fopen('SBCmesh1.dat', 'w');
|
||
fprintf(fid, 'NbrVertex\n%d\nVertex\n', mesh.NbrVertex);
|
||
% 兼容 Vertex 为 3×N 或 N×3
|
||
V = mesh.Vertex;
|
||
if size(V,1) == 3 && size(V,2) ~= 3
|
||
V = V';
|
||
end
|
||
for i = 1:mesh.NbrVertex
|
||
fprintf(fid, '%.16g %.16g %.16g\n', V(i,1), V(i,2), V(i,3));
|
||
end
|
||
|
||
T = mesh.Tet;
|
||
if size(T,1) == 4 && size(T,2) ~= 4
|
||
T = T';
|
||
end
|
||
fprintf(fid, 'NbrTet\n%d\nTet\n', mesh.NbrTet);
|
||
for i = 1:mesh.NbrTet
|
||
fprintf(fid, '%d %d %d %d\n', T(i,1), T(i,2), T(i,3), T(i,4));
|
||
end
|
||
|
||
fprintf(fid, 'DomainOfTet\n');
|
||
for i = 1:mesh.NbrTet
|
||
fprintf(fid, '%d\n', mesh.DomainOfTet(i));
|
||
end
|
||
|
||
fprintf(fid, 'NbrEdge\n%d\nEdge\n', mesh.NbrEdge);
|
||
for i = 1:mesh.NbrEdge
|
||
fprintf(fid, '%d %d\n', mesh.Edge(i,1), mesh.Edge(i,2));
|
||
end
|
||
|
||
EOT = mesh.EdgeOfTet;
|
||
if size(EOT,1) == 6
|
||
EOT = EOT';
|
||
end
|
||
fprintf(fid, 'EdgeOfTet\n');
|
||
for i = 1:mesh.NbrTet
|
||
fprintf(fid, '%d %d %d %d %d %d\n', EOT(i,1), EOT(i,2), EOT(i,3), EOT(i,4), EOT(i,5), EOT(i,6));
|
||
end
|
||
|
||
Tr = mesh.Tri;
|
||
if size(Tr,1) == 3
|
||
Tr = Tr';
|
||
end
|
||
fprintf(fid, 'NbrTri\n%d\nTri\n', mesh.NbrTri);
|
||
for i = 1:mesh.NbrTri
|
||
fprintf(fid, '%d %d %d\n', Tr(i,1), Tr(i,2), Tr(i,3));
|
||
end
|
||
|
||
fprintf(fid, 'DomainOfTri\n');
|
||
for i = 1:mesh.NbrTri
|
||
fprintf(fid, '%d\n', mesh.DomainOfTri(i));
|
||
end
|
||
|
||
fprintf(fid, 'ConnOfTri\n');
|
||
for i = 1:mesh.NbrTri
|
||
fprintf(fid, '%d %d\n', mesh.ConnOfTri(i,1), mesh.ConnOfTri(i,2));
|
||
end
|
||
|
||
% 面法向(与 getMesh.m 中 NormOfFace 一致)
|
||
normRows = [1;2;3;4;5;14];
|
||
fprintf(fid, 'NormOfFace\n%d\n', numel(normRows));
|
||
for k = 1:length(normRows)
|
||
d = normRows(k);
|
||
n = mesh.NormOfFace(d,:);
|
||
fprintf(fid, '%d %.16g %.16g %.16g\n', d, n(1), n(2), n(3));
|
||
end
|
||
|
||
fclose(fid);
|
||
fprintf('已写出 SBCmesh.dat\n');
|