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