function writemesh(varargin) %% writemesh(path, mesh) % Save triangulation as path.xml and path.msh % mesh is a struct with fields Pts, Tet, Tri % alernatively one can use writemesh(path, Pts, Tet, Tri) % Pts should by a n times 3 matrix consisting points of the mesh % Tet is the m times 4 matrix consisting the tetrahedra % Tri is the l times 3 matrix consisting the triangles at the boundary if nargin > 3 mesh.Pts=varargin{2}; mesh.Tet=varargin{3}; mesh.Tri=varargin{4}; writemesh(varargin{1},mesh,varargin(nargin)); elseif isstruct(varargin{2}) rootMeshFile = varargin{1}; % NEW FILE obj = [rootMeshFile,'.msh']; meshfile = fopen(obj,'w'); obj2 = [rootMeshFile,'.xml']; xmlfile = fopen(obj2,'w'); % MESH fprintf(meshfile,['$MeshFormat','\n']); fprintf(meshfile,['2.2 0 8','\n']); fprintf(meshfile,['$EndMeshFormat','\n']); fprintf(xmlfile,['','\n']); fprintf(xmlfile,'\n'); fprintf(xmlfile,['','\n']); mesh = varargin{2}; Nodes = mesh.('Pts'); mesh = rmfield(mesh,'Pts'); Nodes = [(1:size(Nodes,1))' Nodes(:,1:3)]; % POINTS if ~strcmp(varargin{nargin},'mute') disp('Write Points') end fprintf(meshfile,['$Nodes','\n']); fprintf(meshfile,['%i','\n'],size(Nodes,1)); fprintf(xmlfile,[' ','\n']); fprintf(xmlfile,[' ','\n'],size(Nodes,1)); fprintf(meshfile,'%i %13.6f %13.6f %13.6f\n',Nodes'); Nodes(:,1) = Nodes(:,1) - 1; fprintf(xmlfile,' \n',Nodes'); fprintf(meshfile,['$EndNodes','\n']); fprintf(meshfile,['$Elements','\n']); fprintf(meshfile,['%i','\n'],size(mesh.Tet,1)+size(mesh.Tri,1)); fprintf(xmlfile,[' ','\n']); fprintf(xmlfile,[' ','\n'],size(mesh.Tet,1)); % Triangles if ~strcmp(varargin{nargin},'mute') disp('Write Triangles') end tri = mesh.('Tri'); tri = [(1:size(tri,1))' 2*ones(size(tri,1),1) 2*ones(size(tri,1),1) zeros(size(tri,1),1) 2*ones(size(tri,1),1) tri(:,1:3)]; fprintf(meshfile,'%i %i %i %i %i %i %i %i\n',tri'); % Tetrahedra if ~strcmp(varargin{nargin},'mute') disp('Write Tetrahedra') end tet = mesh.('Tet'); tet = [(size(tri,1)+1:size(tri,1)+size(tet,1))' 4*ones(size(tet,1),1) 2*ones(size(tet,1),1) zeros(size(tet,1),1) ones(size(tet,1),1) tet(:,1:4)]; fprintf(meshfile,'%i %i %i %i %i %i %i %i %i\n',tet'); tet = mesh.('Tet'); tet = [(0:size(tet,1)-1)' (tet(:,1:4)-1)]; fprintf(xmlfile,' \n',tet'); fprintf(meshfile,['$EndElements','\n']); fprintf(xmlfile,' \n \n\n'); fclose('all'); end