Changeset 17719
- Timestamp:
- 04/14/14 13:34:20 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/m/contrib/dassflow/importgmsh.m ¶
r17610 r17719 1 function md = importgmsh(filename )1 function md = importgmsh(filename,dim) 2 2 3 3 %some checks … … 30 30 x = A(2,:)'; 31 31 y = A(3,:)'; 32 z = A(4,:)'; 33 32 34 A=fscanf(fid,'%s',1); 33 35 if ~strcmp(A,'$EndNodes'), … … 43 45 disp(['Number of elements: ' num2str(nbt) ]); 44 46 counter = 0; 45 index = zeros(0,3); 46 segments = zeros(0,2); 47 segmentmarkers = zeros(0,1); 47 if (dim==2), 48 index = zeros(0,3); 49 segments = zeros(0,2); 50 segmentmarkers = zeros(0,1); 51 elseif (dim==3), 52 index = zeros(0,4); 53 segments = zeros(0,3); 54 segmentmarkers = zeros(0,1); 55 else 56 error('not supported'); 57 end 58 48 59 while(counter<nbt); 49 60 id = fscanf(fid,'%i',1); 50 61 ty = fscanf(fid,'%i',1); 51 if(ty>2) error('Type not supported'); end52 62 nbf = fscanf(fid,'%i',1); 53 63 flags = fscanf(fid,'%i',nbf); 54 64 55 if ty==1, 56 A=fscanf(fid,'%i %i',2); 57 segments(end+1,:)=A; 58 if(flags(1)==5 & flags(2)==3), segmentmarkers(end+1)=3; 59 elseif(flags(1)==1 & flags(2)==4), segmentmarkers(end+1)=4; 60 elseif(flags(1)==2 & flags(2)==1), segmentmarkers(end+1)=1; 61 elseif(flags(1)==4 & flags(2)==2), segmentmarkers(end+1)=2; 62 else error(['flags ' num2str(flags') ' not supported']); 63 end 64 else 65 A=fscanf(fid,'%i %i %i',3); 66 index(end+1,:)=A; 65 switch(ty) 66 case 1, %segments 67 A=fscanf(fid,'%i %i',2); 68 if (dim==2), %Actual element 69 segments(end+1,:)=A; 70 if (flags(1)==5 & flags(2)==3), segmentmarkers(end+1)=3; 71 elseif(flags(1)==1 & flags(2)==4), segmentmarkers(end+1)=4; 72 elseif(flags(1)==2 & flags(2)==1), segmentmarkers(end+1)=1; 73 elseif(flags(1)==4 & flags(2)==2), segmentmarkers(end+1)=2; 74 else error(['flags ' num2str(flags') ' not supported']); 75 end 76 else 77 error('not supported'); 78 end 79 case 2, %tria 80 A=fscanf(fid,'%i %i %i',3); 81 if (dim==2), %Actual element 82 index(end+1,:)=A; 83 else %Boundary element 84 segments(end+1,:)=A; 85 if (flags(1)==3), segmentmarkers(end+1)=3; 86 elseif(flags(1)==4), segmentmarkers(end+1)=4; 87 elseif(flags(1)==1), segmentmarkers(end+1)=1; 88 elseif(flags(1)==2), segmentmarkers(end+1)=2; 89 elseif(flags(1)==5), segmentmarkers(end+1)=5; 90 elseif(flags(1)==6), segmentmarkers(end+1)=6; 91 else error(['flags ' num2str(flags') ' not supported']); 92 end 93 end 94 case 4, %tetra 95 A=fscanf(fid,'%i %i %i %i',4); 96 if (dim==3), %Actual element 97 index(end+1,:)=A; 98 else 99 error('not supported'); 100 end 101 otherwise, 102 error(['Type ' num2str(ty) ' not supported']); 67 103 end 68 104 counter = counter + 1; … … 70 106 71 107 %recreate segments 72 nbs = size(segments,1); 73 segments = [segments zeros(nbs,1)]; 74 for i=1:nbs, 75 E = find(sum(ismember(index,segments(i,:)),2)>1); 76 segments(i,3)=E; 108 if dim==2, 109 nbs = size(segments,1); 110 segments = [segments zeros(nbs,1)]; 111 for i=1:nbs, 112 E = find(sum(ismember(index,segments(i,:)),2)>1); 113 segments(i,3)=E; 114 end 115 else 116 nbs = size(segments,1); 117 segments = [segments zeros(nbs,1)]; 118 for i=1:nbs, 119 E = find(sum(ismember(index,segments(i,:)),2)>2); 120 segments(i,4)=E; 121 end 77 122 end 78 123 … … 81 126 82 127 %Create model 83 md=meshconvert(model,index,x,y); 84 md.mesh=mesh2dvertical(md.mesh); 85 md.mesh.segmentmarkers=segmentmarkers; 86 md.mesh.segments=segments; 87 md.mesh.vertexonbase=zeros(md.mesh.numberofvertices,1); 88 md.mesh.vertexonbase(find(vertexflags(md.mesh,1)))=1; 89 md.mesh.vertexonsurface=zeros(md.mesh.numberofvertices,1); 90 md.mesh.vertexonsurface(find(vertexflags(md.mesh,3)))=1; 128 if 0, %2d triangles 129 md=meshconvert(model,index,x,y); 130 md.mesh=mesh2dvertical(md.mesh); 131 md.mesh.segmentmarkers=segmentmarkers; 132 md.mesh.segments=segments; 133 md.mesh.vertexonbase=zeros(md.mesh.numberofvertices,1); 134 md.mesh.vertexonbase(find(vertexflags(md.mesh,1)))=1; 135 md.mesh.vertexonsurface=zeros(md.mesh.numberofvertices,1); 136 md.mesh.vertexonsurface(find(vertexflags(md.mesh,3)))=1; 137 else 138 md=model(); 139 md.mesh=mesh3dprisms(); 140 md.mesh.x = x; 141 md.mesh.y = y; 142 md.mesh.z = z; 143 md.mesh.elements = index; 144 md.mesh.numberofelements=size(md.mesh.elements,1); 145 md.mesh.numberofvertices=length(md.mesh.x); 146 md.mesh.vertexonbase=zeros(md.mesh.numberofvertices,1); 147 md.mesh.vertexonbase(find(segments(find(segmentmarkers==1),1:3)))=1; 148 md.mesh.vertexonsurface=zeros(md.mesh.numberofvertices,1); 149 md.mesh.vertexonsurface(find(segments(find(segmentmarkers==3),1:3)))=1; 150 end
Note:
See TracChangeset
for help on using the changeset viewer.