XIAN-FEM-2026June/3D opticsfem-master/compare/load_SBCmesh_dat.m

55 lines
1.6 KiB
Matlab

function mesh = load_SBCmesh_dat(datFile)
%LOAD_SBCMESH_DAT Read SBCmesh.dat (1-based indices, same as MATLAB getMesh).
fid = fopen(datFile, 'r');
assert(fid > 0, 'Cannot open mesh file: %s', datFile);
tag = fscanf(fid, '%s', 1);
assert(strcmp(tag, 'NbrVertex'), 'Expected NbrVertex');
mesh.NbrVertex = fscanf(fid, '%d', 1);
tag = fscanf(fid, '%s', 1);
assert(strcmp(tag, 'Vertex'));
mesh.Vertex = reshape(fscanf(fid, '%f', mesh.NbrVertex * 3), 3, []).';
tag = fscanf(fid, '%s', 1);
assert(strcmp(tag, 'NbrTet'));
mesh.NbrTet = fscanf(fid, '%d', 1);
tag = fscanf(fid, '%s', 1);
assert(strcmp(tag, 'Tet'));
mesh.Tet = reshape(fscanf(fid, '%d', mesh.NbrTet * 4), 4, []).';
tag = fscanf(fid, '%s', 1);
assert(strcmp(tag, 'DomainOfTet'));
mesh.DomainOfTet = fscanf(fid, '%d', mesh.NbrTet);
tag = fscanf(fid, '%s', 1);
assert(strcmp(tag, 'NbrEdge'));
mesh.NbrEdge = fscanf(fid, '%d', 1);
tag = fscanf(fid, '%s', 1);
assert(strcmp(tag, 'Edge'));
fscanf(fid, '%f', mesh.NbrEdge * 2);
tag = fscanf(fid, '%s', 1);
assert(strcmp(tag, 'EdgeOfTet'));
mesh.EdgeOfTet = reshape(fscanf(fid, '%d', mesh.NbrTet * 6), 6, []).';
tag = fscanf(fid, '%s', 1);
assert(strcmp(tag, 'NbrTri'));
mesh.NbrTri = fscanf(fid, '%d', 1);
tag = fscanf(fid, '%s', 1);
assert(strcmp(tag, 'Tri'));
mesh.Tri = reshape(fscanf(fid, '%d', mesh.NbrTri * 3), 3, []).';
tag = fscanf(fid, '%s', 1);
assert(strcmp(tag, 'DomainOfTri'));
mesh.DomainOfTri = fscanf(fid, '%d', mesh.NbrTri);
if ~feof(fid)
tag = fscanf(fid, '%s', 1);
if strcmp(tag, 'ConnOfTri')
mesh.ConnOfTri = reshape(fscanf(fid, '%d', mesh.NbrTri * 2), 2, []).';
end
end
fclose(fid);
end