26 int esizes[] = {-1, 3, 4, 8, 4};
45 int esizes[] = {-1, 3, 4, 8, 4};
76 int i, j, jj, k, kk, kkk, l,
m, n, nedges, mask;
78 idxtype *mark, ind[200], wgt[200];
79 int esize, esizes[] = {-1, 3, 4, 8, 4},
80 mgcnum, mgcnums[] = {-1, 2, 3, 4, 2};
83 mark =
idxsmalloc(mask+1, -1,
"GENDUALMETIS: mark");
86 esize = esizes[etype];
87 mgcnum = mgcnums[etype];
90 nptr =
idxsmalloc(nvtxs+1, 0,
"GENDUALMETIS: nptr");
91 for (j=esize*nelmnts, i=0; i<j; i++)
95 nind =
idxmalloc(nptr[nvtxs],
"GENDUALMETIS: nind");
96 for (k=i=0; i<nelmnts; i++) {
97 for (j=0; j<esize; j++, k++)
98 nind[nptr[elmnts[k]]++] = i;
100 for (i=nvtxs; i>0; i--)
104 for (i=0; i<nelmnts; i++)
107 for (i=0; i<nelmnts; i++) {
108 for (m=j=0; j<esize; j++) {
109 n = elmnts[esize*i+j];
110 for (k=nptr[n+1]-1; k>=nptr[n]; k--) {
111 if ((kk = nind[k]) <= i)
115 if ((l = mark[kkk]) == -1) {
120 else if (ind[l] == kk) {
124 for (jj=0; jj<
m; jj++) {
137 for (j=0; j<
m; j++) {
138 if (wgt[j] == mgcnum) {
140 dadjncy[dxadj[i]++] = k;
141 dadjncy[dxadj[k]++] = i;
143 mark[ind[j]&mask] = -1;
148 for (j=i=0; i<nelmnts; i++) {
149 for (k=esize*i; k<dxadj[i]; k++, j++)
150 dadjncy[j] = dadjncy[k];
153 for (i=nelmnts; i>0; i--)
154 dxadj[i] = dxadj[i-1];
171 int i, j, jj, k, kk, kkk, l,
m, n, nedges;
176 nptr =
idxsmalloc(nvtxs+1, 0,
"TRINODALMETIS: nptr");
177 for (j=3*nelmnts, i=0; i<j; i++)
181 nind =
idxmalloc(nptr[nvtxs],
"TRINODALMETIS: nind");
182 for (k=i=0; i<nelmnts; i++) {
183 for (j=0; j<3; j++, k++)
184 nind[nptr[elmnts[k]]++] = i;
186 for (i=nvtxs; i>0; i--)
191 mark =
idxsmalloc(nvtxs, -1,
"TRINODALMETIS: mark");
193 nedges = dxadj[0] = 0;
194 for (i=0; i<nvtxs; i++) {
196 for (j=nptr[i]; j<nptr[i+1]; j++) {
197 for (jj=3*nind[j], k=0; k<3; k++, jj++) {
201 dadjncy[nedges++] = kk;
220 int i, j, jj, k, kk, kkk, l,
m, n, nedges;
225 nptr =
idxsmalloc(nvtxs+1, 0,
"TETNODALMETIS: nptr");
226 for (j=4*nelmnts, i=0; i<j; i++)
230 nind =
idxmalloc(nptr[nvtxs],
"TETNODALMETIS: nind");
231 for (k=i=0; i<nelmnts; i++) {
232 for (j=0; j<4; j++, k++)
233 nind[nptr[elmnts[k]]++] = i;
235 for (i=nvtxs; i>0; i--)
240 mark =
idxsmalloc(nvtxs, -1,
"TETNODALMETIS: mark");
242 nedges = dxadj[0] = 0;
243 for (i=0; i<nvtxs; i++) {
245 for (j=nptr[i]; j<nptr[i+1]; j++) {
246 for (jj=4*nind[j], k=0; k<4; k++, jj++) {
250 dadjncy[nedges++] = kk;
269 int i, j, jj, k, kk, kkk, l,
m, n, nedges;
272 int table[8][3] = {1, 3, 4,
282 nptr =
idxsmalloc(nvtxs+1, 0,
"HEXNODALMETIS: nptr");
283 for (j=8*nelmnts, i=0; i<j; i++)
287 nind =
idxmalloc(nptr[nvtxs],
"HEXNODALMETIS: nind");
288 for (k=i=0; i<nelmnts; i++) {
289 for (j=0; j<8; j++, k++)
290 nind[nptr[elmnts[k]]++] = i;
292 for (i=nvtxs; i>0; i--)
297 mark =
idxsmalloc(nvtxs, -1,
"HEXNODALMETIS: mark");
299 nedges = dxadj[0] = 0;
300 for (i=0; i<nvtxs; i++) {
302 for (j=nptr[i]; j<nptr[i+1]; j++) {
304 for (k=0; k<8; k++) {
305 if (elmnts[jj+k] == i)
311 kk = elmnts[jj+table[k][0]];
314 dadjncy[nedges++] = kk;
316 kk = elmnts[jj+table[k][1]];
319 dadjncy[nedges++] = kk;
321 kk = elmnts[jj+table[k][2]];
324 dadjncy[nedges++] = kk;
342 int i, j, jj, k, kk, kkk, l,
m, n, nedges;
345 int table[4][2] = {1, 3,
351 nptr =
idxsmalloc(nvtxs+1, 0,
"QUADNODALMETIS: nptr");
352 for (j=4*nelmnts, i=0; i<j; i++)
356 nind =
idxmalloc(nptr[nvtxs],
"QUADNODALMETIS: nind");
357 for (k=i=0; i<nelmnts; i++) {
358 for (j=0; j<4; j++, k++)
359 nind[nptr[elmnts[k]]++] = i;
361 for (i=nvtxs; i>0; i--)
366 mark =
idxsmalloc(nvtxs, -1,
"QUADNODALMETIS: mark");
368 nedges = dxadj[0] = 0;
369 for (i=0; i<nvtxs; i++) {
371 for (j=nptr[i]; j<nptr[i+1]; j++) {
373 for (k=0; k<4; k++) {
374 if (elmnts[jj+k] == i)
380 kk = elmnts[jj+table[k][0]];
383 dadjncy[nedges++] = kk;
385 kk = elmnts[jj+table[k][1]];
388 dadjncy[nedges++] = kk;
void GENDUALMETIS(int nelmnts, int nvtxs, int etype, idxtype *elmnts, idxtype *dxadj, idxtype *dadjncy)
void METIS_MeshToNodal(int *ne, int *nn, idxtype *elmnts, int *etype, int *numflag, idxtype *dxadj, idxtype *dadjncy)
void QUADNODALMETIS(int nelmnts, int nvtxs, idxtype *elmnts, idxtype *dxadj, idxtype *dadjncy)
void METIS_MeshToDual(int *ne, int *nn, idxtype *elmnts, int *etype, int *numflag, idxtype *dxadj, idxtype *dadjncy)
#define ChangeMesh2FNumbering
#define ChangeMesh2CNumbering