Changeset 17844
- Timestamp:
- 04/25/14 11:00:30 (11 years ago)
- Location:
- issm/trunk-jpl/src/c/modules
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
r17842 r17844 44 44 bool *my_edges = NULL; 45 45 bool *my_faces = NULL; 46 bool *boundaryedge = NULL; 46 47 47 48 switch(finite_element){ … … 74 75 FacesPartitioning(&my_faces,iomodel); 75 76 } 77 EdgeOnBoundaryFlags(&boundaryedge,iomodel); 76 78 break; 77 79 case P2xP4Enum: … … 106 108 } 107 109 for(i=0;i<iomodel->numberofedges;i++){ 108 if(my_edges[i] ){110 if(my_edges[i] && boundaryedge[i]){ 109 111 v1 = iomodel->edges[3*i+0]-1; 110 112 v2 = iomodel->edges[3*i+1]-1; … … 466 468 xDelete<bool>(my_edges); 467 469 xDelete<bool>(my_faces); 470 xDelete<bool>(boundaryedge); 468 471 } -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp
r17842 r17844 144 144 iomodel->numberofedges = nbe; 145 145 }/*}}}*/ 146 void EdgeOnBoundaryFlags(IoModel* iomodel,bool** pflags){ 147 148 /*Get faces and edges*/ 146 void EdgeOnBoundaryFlags(bool** pflags,IoModel* iomodel){/*{{{*/ 147 148 /*Intermediaries*/ 149 bool isv1,isv2; 150 int facenbv,v1,v2; 151 int id_edge,id_element,id_face; 152 int elementnbe; 153 154 /*Mesh dependent variables*/ 155 switch(iomodel->meshelementtype){ 156 case TriaEnum: elementnbe = 3; break; 157 case TetraEnum: elementnbe = 6; break; 158 case PentaEnum: elementnbe = 9; break; 159 default: _error_("mesh dimension not supported yet"); 160 } 161 162 /*Get edges and allocate output*/ 149 163 if(!iomodel->edges) CreateEdges(iomodel); 150 if(!iomodel->faces) CreateFaces(iomodel); 151 152 /*Allocate output*/ 153 bool* flags = xNew<bool>(iomodel->numberofedges); 154 155 /*Now, loop over the faces, whenever it is not connected to a second element, all edges are on boundary*/ 156 for(int i=0;i<iomodel->numberoffaces;i++){ 157 158 if(iomodel->faces[i*iomodel->facescols+4]==-1){ 159 160 /*Get all edges for this face*/ 161 } 164 bool* flags = xNewZeroInit<bool>(iomodel->numberofedges); 165 166 if(iomodel->domaindim==2){ 167 168 /*Count how many times an edge is found in elementtoedgeconnectivity*/ 169 int* counter = xNewZeroInit<int>(iomodel->numberofedges); 170 for(int i=0;i<iomodel->numberofelements;i++){ 171 for(int j=0;j<elementnbe;j++){ 172 counter[iomodel->elementtoedgeconnectivity[elementnbe*i+j]] += 1; 173 } 174 } 175 176 /*Now, loop over the egdes, whenever it is not connected to a second element, the edge is on boundary*/ 177 for(int i=0;i<iomodel->numberofedges;i++){ 178 if(counter[i]==1) flags[i]=true; 179 } 180 181 /*Clean up*/ 182 xDelete<int>(counter); 183 } 184 else if(iomodel->domaindim==3){ 185 186 /*Get faces*/ 187 if(!iomodel->faces) CreateFaces(iomodel); 188 189 /*Now, loop over the faces, whenever it is not connected to a second element, all edges are on boundary*/ 190 for(int id_face=0;id_face<iomodel->numberoffaces;id_face++){ 191 192 if(iomodel->faces[id_face*iomodel->facescols+1]==-1){ 193 194 /*The face is connected to the element e only*/ 195 id_element = iomodel->faces[id_face*iomodel->facescols+0]-1; 196 facenbv = iomodel->faces[id_face*iomodel->facescols+3]; 197 198 /*Get all edges for this element*/ 199 for(int edge = 0; edge<elementnbe; edge++){ 200 201 id_edge = iomodel->elementtoedgeconnectivity[elementnbe*id_element+edge]; 202 v1 = iomodel->edges[id_edge*3+0]; 203 v2 = iomodel->edges[id_edge*3+1]; 204 205 /*Test if v1 is in the face*/ 206 isv1=false; 207 for(int i=0;i<facenbv;i++){ 208 if(iomodel->faces[id_face*iomodel->facescols+4+i] == v1){ 209 isv1 = true; break; 210 } 211 } 212 if(!isv1) continue; 213 214 /*test if v2 is in the face*/ 215 isv2=false; 216 for(int i=0;i<facenbv;i++){ 217 if(iomodel->faces[id_face*iomodel->facescols+4+i] == v2){ 218 isv2 = true; break; 219 } 220 } 221 222 /*If v1 and v2 are found, this edge is on boundary*/ 223 if(isv2) flags[id_edge] = true; 224 } 225 } 226 } 227 } 228 else{ 229 _error_("dimension not supported"); 162 230 } 163 231 164 232 /*Clean up and return*/ 165 233 *pflags = flags; 166 } 234 }/*}}}*/ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
r17842 r17844 33 33 void CreateFaces(IoModel* iomodel); 34 34 void CreateFaces3d(IoModel* iomodel); 35 void EdgeOnBoundaryFlags( IoModel* iomodel,bool** pflags);35 void EdgeOnBoundaryFlags(bool** pflags,IoModel* iomodel); 36 36 37 37 /*Connectivity*/
Note:
See TracChangeset
for help on using the changeset viewer.