/************************************************************************* * This function computes the initial bisection of the coarsest graph **************************************************************************/ void InitSeparator(CtrlType *ctrl, GraphType *graph, float ubfactor) { int dbglvl; dbglvl = ctrl->dbglvl; IFSET(ctrl->dbglvl, DBG_REFINE, ctrl->dbglvl -= DBG_REFINE); IFSET(ctrl->dbglvl, DBG_MOVEINFO, ctrl->dbglvl -= DBG_MOVEINFO); IFSET(ctrl->dbglvl, DBG_TIME, starttimer(ctrl->InitPartTmr)); GrowBisectionNode(ctrl, graph, ubfactor); Compute2WayNodePartitionParams(ctrl, graph); IFSET(ctrl->dbglvl, DBG_IPART, printf("Initial Sep: %d\n", graph->mincut)); IFSET(ctrl->dbglvl, DBG_TIME, stoptimer(ctrl->InitPartTmr)); ctrl->dbglvl = dbglvl; }
void InitSeparator(ctrl_t *ctrl, graph_t *graph, idx_t niparts) { real_t ntpwgts[2] = {0.5, 0.5}; mdbglvl_et dbglvl; dbglvl = ctrl->dbglvl; IFSET(ctrl->dbglvl, METIS_DBG_REFINE, ctrl->dbglvl -= METIS_DBG_REFINE); IFSET(ctrl->dbglvl, METIS_DBG_MOVEINFO, ctrl->dbglvl -= METIS_DBG_MOVEINFO); IFSET(ctrl->dbglvl, METIS_DBG_TIME, gk_startcputimer(ctrl->InitPartTmr)); /* this is required for the cut-based part of the refinement */ Setup2WayBalMultipliers(ctrl, graph, ntpwgts); switch (ctrl->iptype) { case METIS_IPTYPE_EDGE: if (graph->nedges == 0) RandomBisection(ctrl, graph, ntpwgts, niparts); else GrowBisection(ctrl, graph, ntpwgts, niparts); Compute2WayPartitionParams(ctrl, graph); ConstructSeparator(ctrl, graph); break; case METIS_IPTYPE_NODE: GrowBisectionNode(ctrl, graph, ntpwgts, niparts); break; default: gk_errexit(SIGERR, "Unkown iptype of %"PRIDX"\n", ctrl->iptype); } IFSET(ctrl->dbglvl, METIS_DBG_IPART, printf("Initial Sep: %"PRIDX"\n", graph->mincut)); IFSET(ctrl->dbglvl, METIS_DBG_TIME, gk_stopcputimer(ctrl->InitPartTmr)); ctrl->dbglvl = dbglvl; }