12 if(iomodel->
edges)
return;
20 int elementnbe,elementnbv;
21 int *elementedges = NULL;
22 int *elementedges_markers = NULL;
29 elementedges = xNew<int>(elementnbe*2);
30 elementedges_markers = xNew<int>(elementnbe);
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;
38 elementedges = xNew<int>(elementnbe*2);
39 elementedges_markers = xNew<int>(elementnbe);
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;
50 elementedges = xNew<int>(elementnbe*2);
51 elementedges_markers = xNew<int>(elementnbe);
52 elementedges[2*0+0] = 0; elementedges[2*0+1] = 3; elementedges_markers[0] = 2;
53 elementedges[2*1+0] = 1; elementedges[2*1+1] = 4; elementedges_markers[1] = 2;
54 elementedges[2*2+0] = 2; elementedges[2*2+1] = 5; elementedges_markers[2] = 2;
55 elementedges[2*3+0] = 1; elementedges[2*3+1] = 2; elementedges_markers[3] = 1;
56 elementedges[2*4+0] = 2; elementedges[2*4+1] = 0; elementedges_markers[4] = 1;
57 elementedges[2*5+0] = 0; elementedges[2*5+1] = 1; elementedges_markers[5] = 1;
58 elementedges[2*6+0] = 4; elementedges[2*6+1] = 5; elementedges_markers[6] = 1;
59 elementedges[2*7+0] = 5; elementedges[2*7+1] = 3; elementedges_markers[7] = 1;
60 elementedges[2*8+0] = 3; elementedges[2*8+1] = 4; elementedges_markers[8] = 1;
63 _error_(
"mesh dimension not supported yet");
70 int *edgestemp = xNew<int>(maxnbe*3);
71 int *vedgestemp = xNew<int>(maxnbe*2);
72 int *hedgestemp = xNew<int>(maxnbe*2);
73 int *element_edge_connectivity = xNew<int>(iomodel->
numberofelements*elementnbe);
74 int *element_vedge_connectivity = NULL;
75 int *element_hedge_connectivity = NULL;
83 int* next_edge = xNew<int>(maxnbe);
90 for(j=0;j<elementnbe;j++){
93 v1 = iomodel->
elements[i*elementnbv+elementedges[2*j+0]]-1;
_assert_(v1>=0 & v1<iomodel->numberofvertices);
94 v2 = iomodel->
elements[i*elementnbv+elementedges[2*j+1]]-1;
_assert_(v2>=0 & v2<iomodel->numberofvertices);
105 for(
int e=head_minv[v1]; e!=-1; e=next_edge[e]){
106 if(edgestemp[e*3+1]==v2+1){
108 element_edge_connectivity[i*elementnbe+j]=e;
118 edgestemp[nbe*3+0] = v1+1;
119 edgestemp[nbe*3+1] = v2+1;
120 edgestemp[nbe*3+2] = elementedges_markers[j];
123 element_edge_connectivity[i*elementnbe+j]=nbe;
126 next_edge[nbe] = head_minv[v1];
142 v1 = iomodel->
elements[i*elementnbv+elementedges[2*j+0]]-1;
_assert_(v1>=0 & v1<iomodel->numberofvertices);
143 v2 = iomodel->
elements[i*elementnbv+elementedges[2*j+1]]-1;
_assert_(v2>=0 & v2<iomodel->numberofvertices);
144 if(v2<v1){ v3=v2; v2=v1; v1=v3;}
146 for(
int e=head_minv[v1]; e!=-1; e=next_edge[e]){
147 if(vedgestemp[e*2+1]==v2+1){
149 element_vedge_connectivity[i*3+j]=e;
154 vedgestemp[nbve*2+0] = v1+1;
155 vedgestemp[nbve*2+1] = v2+1;
156 element_vedge_connectivity[i*3+j]=nbve;
157 next_edge[nbve] = head_minv[v1];
158 head_minv[v1] = nbve;
166 v1 = iomodel->
elements[i*elementnbv+elementedges[2*j+0]]-1;
_assert_(v1>=0 & v1<iomodel->numberofvertices);
167 v2 = iomodel->
elements[i*elementnbv+elementedges[2*j+1]]-1;
_assert_(v2>=0 & v2<iomodel->numberofvertices);
168 if(v2<v1){ v3=v2; v2=v1; v1=v3;}
170 for(
int e=head_minv[v1]; e!=-1; e=next_edge[e]){
171 if(hedgestemp[e*2+1]==v2+1){
173 element_hedge_connectivity[i*6+(j-3)]=e;
178 hedgestemp[nbhe*2+0] = v1+1;
179 hedgestemp[nbhe*2+1] = v2+1;
180 element_hedge_connectivity[i*6+(j-3)]=nbhe;
181 next_edge[nbhe] = head_minv[v1];
182 head_minv[v1] = nbhe;
190 xDelete<int>(head_minv);
191 xDelete<int>(next_edge);
192 xDelete<int>(elementedges);
193 xDelete<int>(elementedges_markers);
196 int* edges = xNew<int>(nbe*3);
197 for(
int i=0;i<3*nbe;i++) edges[i] = edgestemp[i];
198 xDelete<int>(edgestemp);
199 int* vedges = xNew<int>(nbve*2);
200 for(
int i=0;i<2*nbve;i++) vedges[i] = vedgestemp[i];
201 xDelete<int>(vedgestemp);
202 int* hedges = xNew<int>(nbhe*2);
203 for(
int i=0;i<2*nbhe;i++) hedges[i] = hedgestemp[i];
204 xDelete<int>(hedgestemp);
207 iomodel->
edges = edges;