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

79 lines
2.0 KiB
Matlab
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

% 将 SBCmesh.mat 导出为 OpticsFEM3D 可读文本网格 SBCmesh.dat
% 用法:先运行 getMesh.m 生成 SBCmesh.mat再运行本脚本
clc;
if ~isfile('doublePBC_mesh.mat')
error('请先运行 getMesh.m 生成SCDmesh.mat');
end
load('doublePBC_mesh.mat', 'mesh');
fid = fopen('doublePBC_mesh.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('已写出 doublePBC_mesh.dat\n');