void BDFPrintInfo(params_t *params, bigraph_t *bigraph) { printf("******************************************************************************\n"); printf("%s", METISTITLE); printf(" (HEAD: %s, Built on: %s, %s)\n", SVNINFO, __DATE__, __TIME__); printf(" size of idx_t: %zubits, real_t: %zubits, idx_t *: %zubits\n", 8*sizeof(idx_t), 8*sizeof(real_t), 8*sizeof(idx_t *)); printf("\n"); printf("Bipatite Graph Information --------------------------------------------------\n"); printf(" Name: %s, #RowVertices: %"PRIDX", #ColumnVertices: %"PRIDX", #Edges: %"PRIDX"\n", params->filename, bigraph->nrows, bigraph->ncols, bigraph->super->nedges/2); printf("\n"); printf("User Specific Options -------------------------------------------------------\n"); printf(" ctype=%s, rtype=%s, iptype=%s, seed=%"PRIDX", dbglvl=%"PRIDX", ccorder=%s, compress=%s\n", ctypenames[params->ctype], rtypenames[params->rtype], iptypenames[params->iptype], params->seed, params->dbglvl, (params->ccorder ? "YES" : "NO"), (params->compress ? "YES" : "NO")); printf(" density=%.4f, kappa=%d, nrows=%d, ncols=%d, area=%lld\n", params->density, params->kappa, params->nrows, params->ncols, params->nrows*params->ncols); printf("\n"); printf("Inner Options ---------------------------------------------------------------\n"); printf(" niter=%"PRIDX", nseps=%"PRIDX", ncuts=%"PRIDX", nparts=%"PRIDX"\n", params->niter, params->nseps, params->ncuts, params->nparts); printf(" ufactor=%.3f, pfactor=%.2f, nooutput=%s, objtype=%s\n\n", I2RUBFACTOR(params->ufactor), 0.1*params->pfactor, (params->nooutput ? "YES" : "NO"), objtypenames[params->objtype] ); printf("\n"); printf("Node-based Nested Dissection ------------------------------------------------\n"); }
ctrl_t *SetupCtrl(moptype_et optype, idx_t *options, idx_t ncon, idx_t nparts, real_t *tpwgts, real_t *ubvec) { idx_t i, j; ctrl_t *ctrl; ctrl = (ctrl_t *)gk_malloc(sizeof(ctrl_t), "SetupCtrl: ctrl"); memset((void *)ctrl, 0, sizeof(ctrl_t)); switch (optype) { case METIS_OP_PMETIS: ctrl->objtype = GETOPTION(options, METIS_OPTION_OBJTYPE, METIS_OBJTYPE_CUT); ctrl->ctype = GETOPTION(options, METIS_OPTION_CTYPE, METIS_CTYPE_SHEM); ctrl->rtype = METIS_RTYPE_FM; ctrl->ncuts = GETOPTION(options, METIS_OPTION_NCUTS, 1); ctrl->niter = GETOPTION(options, METIS_OPTION_NITER, 10); ctrl->seed = GETOPTION(options, METIS_OPTION_SEED, -1); ctrl->dbglvl = GETOPTION(options, METIS_OPTION_DBGLVL, 0); if (ncon == 1) { ctrl->iptype = GETOPTION(options, METIS_OPTION_IPTYPE, METIS_IPTYPE_GROW); ctrl->ufactor = GETOPTION(options, METIS_OPTION_UFACTOR, PMETIS_DEFAULT_UFACTOR); ctrl->CoarsenTo = 20; } else { ctrl->iptype = GETOPTION(options, METIS_OPTION_IPTYPE, METIS_IPTYPE_RANDOM); ctrl->ufactor = GETOPTION(options, METIS_OPTION_UFACTOR, MCPMETIS_DEFAULT_UFACTOR); ctrl->CoarsenTo = 100; } break; case METIS_OP_KMETIS: ctrl->objtype = GETOPTION(options, METIS_OPTION_OBJTYPE, METIS_OBJTYPE_CUT); ctrl->ctype = GETOPTION(options, METIS_OPTION_CTYPE, METIS_CTYPE_SHEM); ctrl->iptype = METIS_IPTYPE_METISRB; ctrl->rtype = METIS_RTYPE_GREEDY; ctrl->ncuts = GETOPTION(options, METIS_OPTION_NCUTS, 1); ctrl->niter = GETOPTION(options, METIS_OPTION_NITER, 10); ctrl->ufactor = GETOPTION(options, METIS_OPTION_UFACTOR, KMETIS_DEFAULT_UFACTOR); ctrl->minconn = GETOPTION(options, METIS_OPTION_MINCONN, 0); ctrl->contig = GETOPTION(options, METIS_OPTION_CONTIG, 0); ctrl->seed = GETOPTION(options, METIS_OPTION_SEED, -1); ctrl->dbglvl = GETOPTION(options, METIS_OPTION_DBGLVL, 0); break; case METIS_OP_OMETIS: ctrl->objtype = GETOPTION(options, METIS_OPTION_OBJTYPE, METIS_OBJTYPE_NODE); ctrl->ctype = GETOPTION(options, METIS_OPTION_CTYPE, METIS_CTYPE_SHEM); ctrl->rtype = GETOPTION(options, METIS_OPTION_RTYPE, METIS_RTYPE_SEP1SIDED); ctrl->iptype = GETOPTION(options, METIS_OPTION_IPTYPE, METIS_IPTYPE_EDGE); ctrl->nseps = GETOPTION(options, METIS_OPTION_NSEPS, 1); ctrl->niter = GETOPTION(options, METIS_OPTION_NITER, 10); ctrl->ufactor = GETOPTION(options, METIS_OPTION_UFACTOR, OMETIS_DEFAULT_UFACTOR); ctrl->compress = GETOPTION(options, METIS_OPTION_COMPRESS, 1); ctrl->ccorder = GETOPTION(options, METIS_OPTION_CCORDER, 0); ctrl->seed = GETOPTION(options, METIS_OPTION_SEED, -1); ctrl->dbglvl = GETOPTION(options, METIS_OPTION_DBGLVL, 0); ctrl->pfactor = 0.1*GETOPTION(options, METIS_OPTION_PFACTOR, 0); ctrl->CoarsenTo = 100; break; default: gk_errexit(SIGERR, "Unknown optype of %d\n", optype); } ctrl->numflag = GETOPTION(options, METIS_OPTION_NUMBERING, 0); ctrl->optype = optype; ctrl->ncon = ncon; ctrl->nparts = nparts; ctrl->maxvwgt = ismalloc(ncon, 0, "SetupCtrl: maxvwgt"); /* setup the target partition weights */ if (ctrl->optype != METIS_OP_OMETIS) { ctrl->tpwgts = rmalloc(nparts*ncon, "SetupCtrl: ctrl->tpwgts"); if (tpwgts) { rcopy(nparts*ncon, tpwgts, ctrl->tpwgts); } else { for (i=0; i<nparts; i++) { for (j=0; j<ncon; j++) ctrl->tpwgts[i*ncon+j] = 1.0/nparts; } } } else { /* METIS_OP_OMETIS */ /* this is required to allow the pijbm to be defined properly for the edge-based refinement during initial partitioning */ ctrl->tpwgts = rsmalloc(2, .5, "SetupCtrl: ctrl->tpwgts"); } /* setup the ubfactors */ ctrl->ubfactors = rsmalloc(ctrl->ncon, I2RUBFACTOR(ctrl->ufactor), "SetupCtrl: ubfactors"); if (ubvec) rcopy(ctrl->ncon, ubvec, ctrl->ubfactors); for (i=0; i<ctrl->ncon; i++) ctrl->ubfactors[i] += 0.0000499; /* Allocate memory for balance multipliers. Note that for PMETIS/OMETIS routines the memory allocated is more than required as balance multipliers for 2 parts is sufficient. */ ctrl->pijbm = rmalloc(nparts*ncon, "SetupCtrl: ctrl->pijbm"); InitRandom(ctrl->seed); IFSET(ctrl->dbglvl, METIS_DBG_INFO, PrintCtrl(ctrl)); if (!CheckParams(ctrl)) { FreeCtrl(&ctrl); return NULL; } else { return ctrl; } }
void GPPrintInfo(params_t *params, graph_t *graph) { idx_t i; if (params->ufactor == -1) { if (params->ptype == METIS_PTYPE_KWAY) params->ufactor = KMETIS_DEFAULT_UFACTOR; else if (graph->ncon == 1) params->ufactor = PMETIS_DEFAULT_UFACTOR; else params->ufactor = MCPMETIS_DEFAULT_UFACTOR; } FILE *fp; fp = fopen( "metis.log", "a" ); fprintf( fp,"******************************************************************************\n"); fprintf( fp,"%s", METISTITLE); fprintf( fp," (HEAD: %s, Built on: %s, %s)\n", SVNINFO, __DATE__, __TIME__); fprintf( fp," size of idx_t: %zubits, real_t: %zubits, idx_t *: %zubits\n", 8*sizeof(idx_t), 8*sizeof(real_t), 8*sizeof(idx_t *)); fprintf( fp,"\n"); fprintf( fp,"Graph Information -----------------------------------------------------------\n"); fprintf( fp," Name: %s, #Vertices: %"PRIDX", #Edges: %"PRIDX", #Parts: %"PRIDX"\n", params->filename, graph->nvtxs, graph->nedges/2, params->nparts); if (graph->ncon > 1) fprintf( fp," Balancing constraints: %"PRIDX"\n", graph->ncon); fprintf( fp,"\n"); fprintf( fp,"Options ---------------------------------------------------------------------\n"); fprintf( fp," ptype=%s, objtype=%s, ctype=%s, rtype=%s, iptype=%s\n", ptypenames[params->ptype], objtypenames[params->objtype], ctypenames[params->ctype], rtypenames[params->rtype], iptypenames[params->iptype]); fprintf( fp," dbglvl=%"PRIDX", ufactor=%.3f, minconn=%s, contig=%s, nooutput=%s\n", params->dbglvl, I2RUBFACTOR(params->ufactor), (params->minconn ? "YES" : "NO"), (params->contig ? "YES" : "NO"), (params->nooutput ? "YES" : "NO") ); fprintf( fp," seed=%"PRIDX", niter=%"PRIDX", ncuts=%"PRIDX"\n", params->seed, params->niter, params->ncuts); if (params->ubvec) { fprintf( fp," ubvec=("); for (i=0; i<graph->ncon; i++) fprintf( fp,"%s%.2e", (i==0?"":" "), (double)params->ubvec[i]); fprintf( fp,")\n"); } fprintf( fp,"\n"); switch (params->ptype) { case METIS_PTYPE_RB: fprintf( fp,"Recursive Partitioning ------------------------------------------------------\n"); break; case METIS_PTYPE_KWAY: fprintf( fp,"Direct k-way Partitioning ---------------------------------------------------\n"); break; } fclose( fp ); }