Changeset 17754
- Timestamp:
- 04/16/14 16:45:24 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/model.m
r17724 r17754 1144 1144 md.mesh=mesh3dtetras(md.mesh); 1145 1145 1146 %Split in 3 tetras 1147 subelement1 = [1 2 3 5]; 1148 subelement2 = [4 6 5 1]; 1149 subelement3 = [5 6 3 1]; 1150 elements=[md.mesh.elements(:,subelement1);md.mesh.elements(:,subelement2);md.mesh.elements(:,subelement3)]; 1146 %Subdivision from Philipp Furnstahl (http://studierstube.icg.tugraz.at/thesis/fuernstahl_thesis.pdf) 1147 steiner = 0; 1148 nbv = md.mesh.numberofvertices; 1149 nbt = 3*md.mesh.numberofelements; 1150 elements = zeros(nbt,4); 1151 for i=1:md.mesh.numberofelements 1152 v1=md.mesh.elements(i,1); v2=md.mesh.elements(i,2); v3=md.mesh.elements(i,3); 1153 v4=md.mesh.elements(i,4); v5=md.mesh.elements(i,5); v6=md.mesh.elements(i,6); 1154 if(min(v2,v4)<min(v1,v5) & min(v1,v6)<min(v3,v4) & min(v3,v5)<min(v2,v6)), 1155 steiner = steiner+1; nbv = nbv+1; nbt = nbt+5; v7 = nbv; 1156 md.mesh.x=[md.mesh.x; mean(md.mesh.x(md.mesh.elements(i,:)))]; 1157 md.mesh.y=[md.mesh.y; mean(md.mesh.y(md.mesh.elements(i,:)))]; 1158 md.mesh.z=[md.mesh.z; mean(md.mesh.z(md.mesh.elements(i,:)))]; 1159 elements(3*(i-1)+1,:) = [v1 v2 v3 v7]; 1160 elements(3*(i-1)+2,:) = [v1 v2 v4 v7]; 1161 elements(3*(i-1)+3,:) = [v2 v4 v5 v7]; 1162 elements(end+1,:) = [v2 v3 v5 v7]; 1163 elements(end+1,:) = [v3 v5 v6 v7]; 1164 elements(end+1,:) = [v1 v3 v6 v7]; 1165 elements(end+1,:) = [v1 v4 v6 v7]; 1166 elements(end+1,:) = [v4 v5 v6 v7]; 1167 elseif(min(v2,v4)<min(v1,v5) & min(v1,v6)<min(v3,v4) & min(v3,v5)>min(v2,v6)), 1168 elements(3*(i-1)+1,:) = [v1 v2 v4 v6]; 1169 elements(3*(i-1)+2,:) = [v2 v4 v5 v6]; 1170 elements(3*(i-1)+3,:) = [v1 v2 v3 v6]; 1171 elseif(min(v2,v4)<min(v1,v5) & min(v1,v6)>min(v3,v4) & min(v3,v5)<min(v2,v6)), 1172 elements(3*(i-1)+1,:) = [v1 v2 v3 v4]; 1173 elements(3*(i-1)+2,:) = [v2 v3 v4 v5]; 1174 elements(3*(i-1)+3,:) = [v3 v4 v5 v6]; 1175 elseif(min(v2,v4)<min(v1,v5) & min(v1,v6)>min(v3,v4) & min(v3,v5)>min(v2,v6)), 1176 elements(3*(i-1)+1,:) = [v1 v2 v3 v4]; 1177 elements(3*(i-1)+2,:) = [v2 v4 v5 v6]; 1178 elements(3*(i-1)+3,:) = [v2 v3 v4 v6]; 1179 elseif(min(v2,v4)>min(v1,v5) & min(v1,v6)<min(v3,v4) & min(v3,v5)>min(v2,v6)), 1180 elements(3*(i-1)+1,:) = [v1 v4 v5 v6]; 1181 elements(3*(i-1)+2,:) = [v1 v2 v3 v5]; 1182 elements(3*(i-1)+3,:) = [v1 v3 v5 v6]; 1183 elseif(min(v2,v4)>min(v1,v5) & min(v1,v6)<min(v3,v4) & min(v3,v5)>min(v2,v6)), 1184 elements(3*(i-1)+1,:) = [v1 v4 v5 v6]; 1185 elements(3*(i-1)+2,:) = [v1 v2 v5 v6]; 1186 elements(3*(i-1)+3,:) = [v1 v2 v3 v6]; 1187 elseif(min(v2,v4)>min(v1,v5) & min(v1,v6)>min(v3,v4) & min(v3,v5)<min(v2,v6)), 1188 elements(3*(i-1)+1,:) = [v1 v3 v4 v5]; 1189 elements(3*(i-1)+2,:) = [v1 v2 v3 v5]; 1190 elements(3*(i-1)+3,:) = [v3 v4 v5 v6]; 1191 elseif(min(v2,v4)>min(v1,v5) & min(v1,v6)<min(v3,v4) & min(v3,v5)<min(v2,v6)), 1192 %NEW 1193 elements(3*(i-1)+1,:) = [v1 v5 v6 v4]; 1194 elements(3*(i-1)+2,:) = [v1 v2 v3 v5]; 1195 elements(3*(i-1)+3,:) = [v5 v6 v3 v1]; 1196 elseif(min(v2,v4)>min(v1,v5) & min(v1,v6)>min(v3,v4) & min(v3,v5)>min(v2,v6)), 1197 steiner = steiner+1; nbv = nbv+1; nbt = nbt+5; v7 = nbv; 1198 md.mesh.x=[md.mesh.x; mean(md.mesh.x(md.mesh.elements(i,:)))]; 1199 md.mesh.y=[md.mesh.y; mean(md.mesh.y(md.mesh.elements(i,:)))]; 1200 md.mesh.z=[md.mesh.z; mean(md.mesh.z(md.mesh.elements(i,:)))]; 1201 elements(3*(i-1)+1,:) = [v1 v2 v3 v7]; 1202 elements(3*(i-1)+2,:) = [v1 v4 v5 v7]; 1203 elements(3*(i-1)+3,:) = [v1 v2 v5 v7]; 1204 elements(end+1,:) = [v2 v5 v6 v7]; 1205 elements(end+1,:) = [v2 v3 v6 v7]; 1206 elements(end+1,:) = [v3 v4 v6 v7]; 1207 elements(end+1,:) = [v1 v3 v4 v7]; 1208 elements(end+1,:) = [v4 v5 v6 v7]; 1209 else 1210 error('Case not supported'); %not supposed to happen! 1211 end 1212 end 1213 %%Split in 3 tetras 1214 %subelement1 = [1 2 3 5]; 1215 %subelement2 = [4 6 5 1]; 1216 %subelement3 = [5 6 3 1]; 1217 %elements=[md.mesh.elements(:,subelement1);md.mesh.elements(:,subelement2);md.mesh.elements(:,subelement3)]; 1218 disp([num2str(steiner) ' Steiner points had to be included']) 1219 1151 1220 pos_elements = repmat([1:md.mesh.numberofelements]',3,1); 1152 1221
Note:
See TracChangeset
for help on using the changeset viewer.