- Timestamp:
- 12/21/18 11:06:40 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp
r17924 r23568 17 17 18 18 /*Intermediaries*/ 19 bool exist;20 19 int i,j,v1,v2,v3; 21 int maxnbe,nbe,elementnbe,elementnbv;20 int elementnbe,elementnbv; 22 21 int *elementedges = NULL; 23 22 int *elementedges_markers = NULL; … … 30 29 elementedges = xNew<int>(elementnbe*2); 31 30 elementedges_markers = xNew<int>(elementnbe); 32 elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = 1;33 elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = 1;34 elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;31 elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = -1; 32 elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = -1; 33 elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = -1; 35 34 break; 36 35 case TetraEnum: … … 39 38 elementedges = xNew<int>(elementnbe*2); 40 39 elementedges_markers = xNew<int>(elementnbe); 41 elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = 1;42 elementedges[2*1+0] = 0; elementedges[2*1+1] = 2; elementedges_markers[1] = 1;43 elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;44 elementedges[2*3+0] = 1; elementedges[2*3+1] = 3; elementedges_markers[3] = 1;45 elementedges[2*4+0] = 2; elementedges[2*4+1] = 3; elementedges_markers[4] = 1;46 elementedges[2*5+0] = 0; elementedges[2*5+1] = 3; elementedges_markers[5] = 1;40 elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = -1; 41 elementedges[2*1+0] = 0; elementedges[2*1+1] = 2; elementedges_markers[1] = -1; 42 elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = -1; 43 elementedges[2*3+0] = 1; elementedges[2*3+1] = 3; elementedges_markers[3] = -1; 44 elementedges[2*4+0] = 2; elementedges[2*4+1] = 3; elementedges_markers[4] = -1; 45 elementedges[2*5+0] = 0; elementedges[2*5+1] = 3; elementedges_markers[5] = -1; 47 46 break; 48 47 case PentaEnum: … … 66 65 67 66 /*Maximum number of edges*/ 68 maxnbe = elementnbe*iomodel->numberofelements;67 int maxnbe = elementnbe*iomodel->numberofelements; 69 68 70 69 /*Initialize intermediaries*/ 71 int *edgestemp = xNew<int>(maxnbe*3); /*format: [vertex1 vertex2 marker] */ 72 int *element_edge_connectivity = xNew<int>(iomodel->numberofelements*elementnbe); /*format: [edge1 edge2 ... edgen] */ 70 int *edgestemp = xNew<int>(maxnbe*3); /*format: [vertex1 vertex2 marker]*/ 71 int *vedgestemp = xNew<int>(maxnbe*2); /*format: [vertex1 vertex2] */ 72 int *hedgestemp = xNew<int>(maxnbe*2); /*format: [vertex1 vertex2] */ 73 int *element_edge_connectivity = xNew<int>(iomodel->numberofelements*elementnbe); /*format: [edge1 edge2 ... edgen] */ 74 int *element_vedge_connectivity = NULL; 75 int *element_hedge_connectivity = NULL; 76 if(iomodel->meshelementtype==PentaEnum){ 77 element_vedge_connectivity = xNew<int>(iomodel->numberofelements*3); /*format: [edge1 edge2 ... edgen] */ 78 element_hedge_connectivity = xNew<int>(iomodel->numberofelements*6); /*format: [edge1 edge2 ... edgen] */ 79 } 73 80 74 81 /*Initialize chain*/ … … 78 85 79 86 /*Initialize number of edges*/ 80 nbe= 0;87 int nbe = 0; 81 88 82 89 for(i=0;i<iomodel->numberofelements;i++){ … … 93 100 94 101 /*This edge a priori has not been processed yet*/ 95 exist = false;102 bool exist = false; 96 103 97 104 /*Go through all processed edges connected to v1 and check whether we have seen this edge yet*/ … … 125 132 } 126 133 } 134 int nbve = 0; 135 int nbhe = 0; 136 /*vertical/horizontal edges*/ 137 if(iomodel->meshelementtype==PentaEnum){ 138 for(i=0;i<iomodel->numberofvertices;i++) head_minv[i]=-1; 139 for(i=0;i<iomodel->numberofelements;i++){ 140 for(j=0;j<3;j++){ 141 v1 = iomodel->elements[i*elementnbv+elementedges[2*j+0]]-1; _assert_(v1>=0 & v1<iomodel->numberofvertices); 142 v2 = iomodel->elements[i*elementnbv+elementedges[2*j+1]]-1; _assert_(v2>=0 & v2<iomodel->numberofvertices); 143 if(v2<v1){ v3=v2; v2=v1; v1=v3;} 144 bool exist = false; 145 for(int e=head_minv[v1]; e!=-1; e=next_edge[e]){ 146 if(vedgestemp[e*2+1]==v2+1){ 147 exist = true; 148 element_vedge_connectivity[i*3+j]=e; 149 break; 150 } 151 } 152 if(!exist){ 153 vedgestemp[nbve*2+0] = v1+1; 154 vedgestemp[nbve*2+1] = v2+1; 155 element_vedge_connectivity[i*3+j]=nbve; 156 head_minv[v1] = nbve; 157 nbve++; 158 } 159 } 160 } 161 for(i=0;i<iomodel->numberofvertices;i++) head_minv[i]=-1; 162 for(i=0;i<iomodel->numberofelements;i++){ 163 for(j=3;j<9;j++){ 164 v1 = iomodel->elements[i*elementnbv+elementedges[2*j+0]]-1; _assert_(v1>=0 & v1<iomodel->numberofvertices); 165 v2 = iomodel->elements[i*elementnbv+elementedges[2*j+1]]-1; _assert_(v2>=0 & v2<iomodel->numberofvertices); 166 if(v2<v1){ v3=v2; v2=v1; v1=v3;} 167 bool exist = false; 168 for(int e=head_minv[v1]; e!=-1; e=next_edge[e]){ 169 if(hedgestemp[e*2+1]==v2+1){ 170 exist = true; 171 element_hedge_connectivity[i*6+(j-3)]=e; 172 break; 173 } 174 } 175 if(!exist){ 176 hedgestemp[nbhe*2+0] = v1+1; 177 hedgestemp[nbhe*2+1] = v2+1; 178 element_hedge_connectivity[i*6+(j-3)]=nbhe; 179 head_minv[v1] = nbhe; 180 nbhe++; 181 } 182 } 183 } 184 } 127 185 128 186 /*Clean up*/ 129 187 xDelete<int>(head_minv); 130 188 xDelete<int>(next_edge); 189 xDelete<int>(elementedges); 131 190 xDelete<int>(elementedges_markers); 132 191 133 192 /*Create final edges*/ 134 int* edges = xNew<int>(nbe*3); /*format: [vertex1 vertex2 marker]*/193 int* edges = xNew<int>(nbe*3); 135 194 for(int i=0;i<3*nbe;i++) edges[i] = edgestemp[i]; 136 137 /*Clean up*/138 195 xDelete<int>(edgestemp); 139 xDelete<int>(elementedges); 196 int* vedges = xNew<int>(nbve*2); 197 for(int i=0;i<2*nbve;i++) vedges[i] = vedgestemp[i]; 198 xDelete<int>(vedgestemp); 199 int* hedges = xNew<int>(nbhe*2); 200 for(int i=0;i<2*nbhe;i++) hedges[i] = hedgestemp[i]; 201 xDelete<int>(hedgestemp); 140 202 141 203 /*Assign output pointers*/ 142 iomodel->edges = edges; 204 iomodel->edges = edges; 205 iomodel->verticaledges = vedges; 206 iomodel->horizontaledges = hedges; 143 207 iomodel->elementtoedgeconnectivity = element_edge_connectivity; 208 iomodel->elementtoverticaledgeconnectivity = element_vedge_connectivity; 209 iomodel->elementtohorizontaledgeconnectivity = element_hedge_connectivity; 144 210 iomodel->numberofedges = nbe; 211 iomodel->numberofverticaledges = nbve; 212 iomodel->numberofhorizontaledges = nbhe; 145 213 }/*}}}*/ 146 214 void EdgeOnBoundaryFlags(bool** pflags,IoModel* iomodel){/*{{{*/
Note:
See TracChangeset
for help on using the changeset viewer.