127 int i,j,k,v0,cols,facemaxnbv;
128 int elementnbf,elementnbv,facenbv;
129 int *elementfaces = NULL;
130 int *elementfaces_markers = NULL;
138 cols = facemaxnbv + 1;
139 elementfaces = xNew<int>(elementnbf*cols);
140 elementfaces_markers = xNew<int>(elementnbf);
142 elementfaces_markers[0] = 1;
143 elementfaces_markers[1] = 1;
144 elementfaces[cols*0+0] = 3; elementfaces[cols*0+1] = 0; elementfaces[cols*0+2] = 1; elementfaces[cols*0+3] = 2;
145 elementfaces[cols*1+0] = 3; elementfaces[cols*1+1] = 3; elementfaces[cols*1+2] = 4; elementfaces[cols*1+3] = 5;
147 elementfaces_markers[2] = 2;
148 elementfaces_markers[3] = 2;
149 elementfaces_markers[4] = 2;
150 elementfaces[cols*2+0] = 4; elementfaces[cols*2+1] = 1; elementfaces[cols*2+2] = 2; elementfaces[cols*2+3] = 5; elementfaces[cols*2+4] = 4;
151 elementfaces[cols*3+0] = 4; elementfaces[cols*3+1] = 2; elementfaces[cols*3+2] = 0; elementfaces[cols*3+3] = 3; elementfaces[cols*3+4] = 5;
152 elementfaces[cols*4+0] = 4; elementfaces[cols*4+1] = 0; elementfaces[cols*4+2] = 1; elementfaces[cols*4+3] = 4; elementfaces[cols*4+4] = 3;
158 cols = facemaxnbv + 1;
159 elementfaces = xNew<int>(elementnbf*cols);
160 elementfaces_markers = xNew<int>(elementnbf);
162 elementfaces_markers[0] = 1;
163 elementfaces_markers[1] = 1;
164 elementfaces_markers[2] = 1;
165 elementfaces_markers[3] = 1;
166 elementfaces[cols*0+0] = 3; elementfaces[cols*0+1] = 0; elementfaces[cols*0+2] = 1; elementfaces[cols*0+3] = 2;
167 elementfaces[cols*1+0] = 3; elementfaces[cols*1+1] = 0; elementfaces[cols*1+2] = 3; elementfaces[cols*1+3] = 1;
168 elementfaces[cols*2+0] = 3; elementfaces[cols*2+1] = 1; elementfaces[cols*2+2] = 3; elementfaces[cols*2+3] = 2;
169 elementfaces[cols*3+0] = 3; elementfaces[cols*3+1] = 0; elementfaces[cols*3+2] = 2; elementfaces[cols*3+3] = 3;
176 int *element_face_connectivity = xNew<int>(iomodel->
numberofelements*elementnbf);
177 int *element_vface_connectivity = NULL;
184 int facescols = 4+facemaxnbv;
_assert_(facescols>6);
187 int* facestemp = xNew<int>(maxnbf*facescols);
188 int* vfacestemp = xNew<int>(maxnbf*4);
189 for(i=0;i<maxnbf;i++) facestemp[i*facescols+1]=-1;
193 int* next_face = xNew<int>(maxnbf);
198 int* v = xNew<int>(facemaxnbv);
200 for(j=0;j<elementnbf;j++){
203 facenbv = elementfaces[cols*j+0];
204 for(k=0;k<facenbv;k++){
205 v[k] = iomodel->
elements[i*elementnbv + elementfaces[cols*j+k+1]] - 1;
210 v0 = v[0];
_assert_(v0>=0 && v0<iomodel->numberofvertices);
216 for(
int f=head_minv[v0]; f!=-1; f=next_face[f]){
217 if(facestemp[f*facescols+5]==v[1]+1 && facestemp[f*facescols+6]==v[2]+1){
219 facestemp[f*facescols+1]=i+1;
220 element_face_connectivity[i*elementnbf+j]=f;
230 facestemp[nbf*facescols+0] = i+1;
231 facestemp[nbf*facescols+2] = elementfaces_markers[j];
232 facestemp[nbf*facescols+3] = facenbv;
233 for(k=0;k<facenbv;k++) facestemp[nbf*facescols+4+k] = v[k]+1;
236 element_face_connectivity[i*elementnbf+j]=nbf;
239 next_face[nbf] = head_minv[v0];
254 for(k=0;k<4;k++) v[k] = iomodel->
elements[i*elementnbv + elementfaces[cols*j+k+1]] - 1;
256 v0 = v[0];
_assert_(v0>=0 && v0<iomodel->numberofvertices);
258 for(
int f=head_minv[v0]; f!=-1; f=next_face[f]){
259 if(vfacestemp[f*4+1]==v[1]+1 && vfacestemp[f*4+2]==v[2]+1){
261 element_vface_connectivity[i*3+(j-2)]=f;
266 for(k=0;k<4;k++) vfacestemp[nbvf*4+k] = v[k]+1;
267 element_vface_connectivity[i*3+(j-2)]=nbvf;
268 next_face[nbvf] = head_minv[v0];
269 head_minv[v0] = nbvf;
277 xDelete<int>(head_minv);
278 xDelete<int>(next_face);
280 xDelete<int>(elementfaces);
281 xDelete<int>(elementfaces_markers);
284 int* faces = xNew<int>(nbf*facescols);
285 xMemCpy<int>(faces,facestemp,nbf*facescols);
286 xDelete<int>(facestemp);
287 int* vfaces = xNew<int>(nbvf*4);
288 xMemCpy<int>(vfaces,vfacestemp,nbvf*4);
289 xDelete<int>(vfacestemp);
292 iomodel->
faces = faces;