Changeset 17754


Ignore:
Timestamp:
04/16/14 16:45:24 (11 years ago)
Author:
Mathieu Morlighem
Message:

NEW: better split in tetras

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/classes/model.m

    r17724 r17754  
    11441144                        md.mesh=mesh3dtetras(md.mesh);
    11451145
    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
    11511220                        pos_elements = repmat([1:md.mesh.numberofelements]',3,1);
    11521221
Note: See TracChangeset for help on using the changeset viewer.