85 SCOTCH_Num *vertTab, *edgeTab, *permVrtTab;
87 MMG5_int vertNbr, nodeGlbIdx, triaIdx, ballTriIdx;
88 MMG5_int j, k, edgeSiz;
89 MMG5_int *vertOldTab, *permNodTab, ntreal, npreal;
100 for(triaIdx = 1 ; triaIdx <
mesh->nt + 1 ; triaIdx++) {
103 if (!
mesh->tria[triaIdx].v[0])
continue;
104 vertOldTab[triaIdx] = ++vertNbr;
118 if (!memset(vertTab, ~0,
sizeof(SCOTCH_Num)*(vertNbr + 2))) {
119 perror(
" ## Memory problem: memset");
138 for(triaIdx = 1 ; triaIdx <
mesh->nt + 1 ; triaIdx++) {
141 if (!
mesh->tria[triaIdx].v[0])
continue;
143 iadr = 3*(triaIdx-1) + 1;
144 adja = &
mesh->adja[iadr];
145 for (i=0; i<3; i++) {
146 ballTriIdx = adja[i] / 3;
148 if (!ballTriIdx)
continue;
151 if (vertTab[vertOldTab[triaIdx]] < 0)
152 vertTab[vertOldTab[triaIdx]] = edgeNbr;
155 if (edgeNbr >= edgeSiz) {
156 int oldsize = edgeSiz;
165 edgeTab[edgeNbr++] = vertOldTab[ballTriIdx];
168 vertTab[vertNbr+1] = edgeNbr;
171 for(triaIdx = 1 ; triaIdx <
mesh->nt + 1 ; triaIdx++) {
174 if (!
mesh->tria[triaIdx].v[0])
continue;
175 if (vertTab[vertOldTab[triaIdx]] < 0) {
176 if(vertOldTab[triaIdx] == vertNbr) {
177 fprintf(stderr,
" ## Warning: %s: graph error, no renumbering.\n",
183 if(vertTab[vertOldTab[triaIdx] + 1] > 0)
184 vertTab[vertOldTab[triaIdx]] = vertTab[vertOldTab[triaIdx] + 1];
186 if(vertOldTab[triaIdx]+1 == vertNbr) {
187 fprintf(stderr,
" ## Warning: %s: graph error, no renumbering.\n",
196 }
while((vertTab[vertOldTab[triaIdx] + i] < 0) && ((vertOldTab[triaIdx] + i) < vertNbr));
197 if(vertOldTab[triaIdx] + i == vertNbr) {
198 fprintf(stderr,
" ## Warning: %s: graph error, no renumbering.\n",
204 vertTab[vertOldTab[triaIdx]] = vertTab[vertOldTab[triaIdx] + i];
213 SCOTCH_graphInit(&graf) ;
214 CHECK_SCOTCH(SCOTCH_graphBuild(&graf, (SCOTCH_Num) 1, vertNbr, vertTab+1,
215 NULL, NULL, NULL, edgeNbr, edgeTab+1, NULL),
216 "scotch_graphbuild", 0) ;
220 if (
mesh->info.imprim > 6 ||
mesh->info.ddebug )
221 fprintf(stdout,
"checking graph...\n");
223 CHECK_SCOTCH(SCOTCH_graphCheck(&graf),
"scotch_graphcheck", 0);
237 SCOTCH_graphExit(&graf) ;
247 for (j=1; j<=
mesh->nt; j++) {
248 if ( !
mesh->tria[triaIdx].v[0] )
continue;
250 vertOldTab[triaIdx] = permVrtTab[vertOldTab[triaIdx]];
255 for(triaIdx = 1 ; triaIdx <
mesh->nt + 1 ; triaIdx++) {
256 while ( vertOldTab[triaIdx] != triaIdx && vertOldTab[triaIdx] )
266 for(triaIdx = 1 ; triaIdx <
mesh->nt + 1 ; triaIdx++) {
267 ptri = &
mesh->tria[triaIdx];
270 if (!ptri->
v[0])
continue;
274 for(j = 0 ; j <= 2 ; j++) {
276 nodeGlbIdx = ptri->
v[j];
278 if ( permNodTab[nodeGlbIdx] )
continue;
280 ppt = &
mesh->point[nodeGlbIdx];
284 permNodTab[nodeGlbIdx] = ++npreal;
289 for ( k=1; k<=
mesh->np; ++k) {
290 ppt = &
mesh->point[k];
294 if ( permNodTab[k] )
continue;
299 permNodTab[k] = ++npreal;
305 for( triaIdx = 1; triaIdx < ntreal + 1; triaIdx++) {
306 for(j = 0 ; j < 3 ; j++) {
307 mesh->tria[triaIdx].v[j] = permNodTab[
mesh->tria[triaIdx].v[j]];
313 for ( k=1; k<=
mesh->np; ++k ) {
314 permNodGlob[k] = permNodTab[permNodGlob[k]];
319 for (j=1; j<=
mesh->np; j++) {
320 while ( permNodTab[j] != j && permNodTab[j] )
339 for (k=
mesh->npnil; k<mesh->npmax-1; k++) {
340 mesh->point[k].tmp = k+1;
347 for (k=
mesh->nenil; k<mesh->ntmax-1; k++) {
348 mesh->tria[k].v[2] = k+1;