87 minprior->
Gelim = NULL;
137 auxbin = minprior->
auxbin;
138 auxtmp = minprior->
auxtmp;
139 for (u = 0; u < nvtx; u++)
144 for (istage = 0; istage < nstages; istage++)
145 { stageinfo = minprior->
stageinfo + istage;
146 stageinfo->
nstep = 0;
147 stageinfo->
welim = 0;
149 stageinfo->
ops = 0.0;
161 PORD_INT nvtx, nstages, istage, scoretype, ordtype;
172 if ((nstages < 1) || (nstages > nvtx))
173 { fprintf(stderr,
"\nError in function orderMinPriority\n"
174 " no valid number of stages in multisector (#stages = %d)\n",
180 { fprintf(stderr,
"\nError in function orderMinPriority\n"
181 " not enough stages in multisector (#stages = %d)\n", nstages);
198 for (istage = 1; istage < nstages; istage++)
205 fprintf(stderr,
"\nError in function orderMinPriority\n"
206 " unrecognized ordering type %d\n", ordtype);
214 for (istage = 0; istage < nstages; istage++)
215 printf(
"%4d. stage: #steps %6d, weight %6d, nzl %8d, ops %e\n", istage,
236 PORD_INT *stage, *reachset, *auxbin, *auxtmp, *auxaux;
240 Gelim = minprior->
Gelim;
241 bucket = minprior->
bucket;
243 stageinfo = minprior->
stageinfo + istage;
245 auxaux = minprior->
auxaux;
246 auxbin = minprior->
auxbin;
247 auxtmp = minprior->
auxtmp;
248 pflag = &(minprior->
flag);
250 nvtx = Gelim->
G->
nvtx;
252 score = Gelim->
score;
255 printf(
"\nSTARTING NEW ELIMINATION STAGE (nedges %d, maxedges %d)\n\n",
265 for (u = 0; u < nvtx; u++)
266 if ((score[u] == -1) && (stage[u] <= istage))
267 { reachset[nreach++] = u;
268 score[u] = degree[u];
277 updateScore(Gelim, reachset, nreach, scoretype, auxbin);
279 for (i = 0; i < nreach; i++)
290 nreach = minprior->
nreach;
293 printf(
"checking arrays auxtmp and auxbin\n");
294 for (u = 0; u < nvtx; u++)
295 if ((auxtmp[u] >= *pflag) || (auxbin[u] != -1))
296 { printf(
"ERROR: flag = %d, auxtmp[%d] = %d, auxbin[%d] = %d\n",
297 *pflag, u, auxtmp[u], u, auxbin[u]);
313 findIndNodes(Gelim, reachset, nreach, auxbin, auxaux, auxtmp, pflag);
317 printf(
"checking arrays auxtmp and auxbin\n");
318 for (u = 0; u < nvtx; u++)
319 if ((auxtmp[u] >= *pflag) || (auxbin[u] != -1))
320 { printf(
"ERROR: flag = %d, auxtmp[%d] = %d, auxbin[%d] = %d\n",
321 *pflag, u, auxtmp[u], u, auxbin[u]);
330 for (i = 0; i < nreach; i++)
342 updateScore(Gelim, reachset, nreach, scoretype, auxbin);
348 for (i = 0; i < nreach; i++)
365 PORD_INT *stage, *reachset, *auxtmp;
366 PORD_INT *xadj, *adjncy, *vwght, *len, *degree, *score;
367 PORD_INT *pflag, *pnreach, nelim, minscr, vwghtu, u, v, i, istart, istop;
370 Gelim = minprior->
Gelim;
371 bucket = minprior->
bucket;
373 stageinfo = minprior->
stageinfo + istage;
375 pnreach = &(minprior->
nreach);
376 auxtmp = minprior->
auxtmp;
377 pflag = &(minprior->
flag);
379 xadj = Gelim->
G->
xadj;
384 score = Gelim->
score;
387 printf(
"\nStarting new elimination step (nedges %d, maxedges %d)\n",
411 stageinfo->
welim += vwghtu;
421 istop = istart + len[u];
422 for (i = istart; i < istop; i++)
424 if (auxtmp[v] < *pflag)
425 { auxtmp[v] = *pflag;
426 if (stage[v] <= istage)
428 reachset[(*pnreach)++] = v;
433 printf(
"Node %d (weight %d, score %d) eliminated: (boundary weight %d)\n",
434 u, vwghtu, minscr, degree[u]);
435 for (i = istart; i < istop; i++)
436 printf(
"%4d (degree %2d)", adjncy[i], degree[adjncy[i]]);
447 stageinfo->
ops += (tri*tri*tri) / 3.0 + (tri*tri) / 2.0 - (5*tri) / 6.0;
448 stageinfo->
ops += (tri*tri*rec) + (rec*(rec+1)*tri);
456 if (scoretype / 10 == 0)
460 if (score[u] > minscr)
#define OPTION_NODE_SELECTION1
#define OPTION_NODE_SELECTION2
#define pord_starttimer(var)
#define pord_stoptimer(var)
#define mymalloc(ptr, nr, type)
PORD_INT eliminateStep(minprior_t *minprior, PORD_INT istage, PORD_INT scoretype)
void freeMinPriority(minprior_t *minprior)
elimtree_t * orderMinPriority(minprior_t *minprior, options_t *options, timings_t *cpus)
minprior_t * setupMinPriority(multisector_t *ms)
minprior_t * newMinPriority(PORD_INT nvtx, PORD_INT nstages)
void eliminateStage(minprior_t *minprior, PORD_INT istage, PORD_INT scoretype, timings_t *cpus)
PORD_INT minBucket(bucket_t *)
void findIndNodes(gelim_t *, PORD_INT *, PORD_INT, PORD_INT *, PORD_INT *, PORD_INT *, PORD_INT *)
void insertBucket(bucket_t *, PORD_INT, PORD_INT)
void freeElimGraph(gelim_t *)
void printElimGraph(gelim_t *)
void updateDegree(gelim_t *, PORD_INT *, PORD_INT, PORD_INT *)
void freeBucket(bucket_t *)
void updateAdjncy(gelim_t *, PORD_INT *, PORD_INT, PORD_INT *, PORD_INT *)
void removeBucket(bucket_t *, PORD_INT)
gelim_t * setupElimGraph(graph_t *)
bucket_t * setupBucket(PORD_INT, PORD_INT, PORD_INT)
elimtree_t * extractElimTree(gelim_t *)
void buildElement(gelim_t *Gelim, PORD_INT me)
void updateScore(gelim_t *, PORD_INT *, PORD_INT, PORD_INT, PORD_INT *)
struct _minprior minprior_t
struct _stageinfo stageinfo_t
struct _multisector multisector_t
struct _elimtree elimtree_t