コード例 #1
0
ファイル: rbbdf.c プロジェクト: tttwwy/LMF
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");
}
コード例 #2
0
ファイル: options.c プロジェクト: BijanZarif/HiFiLES-solver
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;
  }
}
コード例 #3
0
ファイル: gpmetis.c プロジェクト: amal029/hetrogpart
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 );
}