Files
cpp-thirdparty/winx64/include/metis/parmetis.h
Bassem Girgis 81b4b9e273 Initial commit
2018-12-20 17:34:07 -06:00

164 lines
6.0 KiB
C

/*
* Copyright 1997-2003, Regents of the University of Minnesota
*
* parmetis.h
*
* This file contains function prototypes and constrant definitions for
* ParMETIS
*
* Started 7/21/03
* George
*
*/
#ifndef __parmetis_h__
#define __parmetis_h__
#include <mpi.h>
#include <metis/metis.h>
#ifndef _MSC_VER
#define __cdecl
#endif
#if IDXTYPEWIDTH == 32
/*#define IDX_T MPI_INT32_T */
#define IDX_T MPI_INT
#define KEEP_BIT 0x40000000L
#elif IDXTYPEWIDTH == 64
/*#define IDX_T MPI_INT64_T */
#define IDX_T MPI_LONG_LONG_INT
#define KEEP_BIT 0x4000000000000000LL
#else
#error "Incorrect user-supplied value fo IDXTYPEWIDTH"
#endif
#if REALTYPEWIDTH == 32
#define REAL_T MPI_FLOAT
#elif REALTYPEWIDTH == 64
#define REAL_T MPI_DOUBLE
#else
#error "Incorrect user-supplied value fo REALTYPEWIDTH"
#endif
/*************************************************************************
* Constants
**************************************************************************/
#define PARMETIS_MAJOR_VERSION 4
#define PARMETIS_MINOR_VERSION 0
#define PARMETIS_SUBMINOR_VERSION 3
/*************************************************************************
* Function prototypes
**************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/*-------------------------------------------------------------------
* API Introduced with Release 3.0 (current API)
*--------------------------------------------------------------------*/
int __cdecl ParMETIS_V3_PartKway(
idx_t *vtxdist, idx_t *xadj, idx_t *adjncy, idx_t *vwgt,
idx_t *adjwgt, idx_t *wgtflag, idx_t *numflag, idx_t *ncon, idx_t *nparts,
real_t *tpwgts, real_t *ubvec, idx_t *options, idx_t *edgecut, idx_t *part,
MPI_Comm *comm);
int __cdecl ParMETIS_V3_PartGeomKway(
idx_t *vtxdist, idx_t *xadj, idx_t *adjncy, idx_t *vwgt,
idx_t *adjwgt, idx_t *wgtflag, idx_t *numflag, idx_t *ndims, real_t *xyz,
idx_t *ncon, idx_t *nparts, real_t *tpwgts, real_t *ubvec, idx_t *options,
idx_t *edgecut, idx_t *part, MPI_Comm *comm);
int __cdecl ParMETIS_V3_PartGeom(
idx_t *vtxdist, idx_t *ndims, real_t *xyz, idx_t *part, MPI_Comm *comm);
int __cdecl ParMETIS_V3_RefineKway(
idx_t *vtxdist, idx_t *xadj, idx_t *adjncy, idx_t *vwgt,
idx_t *adjwgt, idx_t *wgtflag, idx_t *numflag, idx_t *ncon, idx_t *nparts,
real_t *tpwgts, real_t *ubvec, idx_t *options, idx_t *edgecut,
idx_t *part, MPI_Comm *comm);
int __cdecl ParMETIS_V3_AdaptiveRepart(
idx_t *vtxdist, idx_t *xadj, idx_t *adjncy, idx_t *vwgt,
idx_t *vsize, idx_t *adjwgt, idx_t *wgtflag, idx_t *numflag, idx_t *ncon,
idx_t *nparts, real_t *tpwgts, real_t *ubvec, real_t *ipc2redist,
idx_t *options, idx_t *edgecut, idx_t *part, MPI_Comm *comm);
int __cdecl ParMETIS_V3_Mesh2Dual(
idx_t *elmdist, idx_t *eptr, idx_t *eind, idx_t *numflag,
idx_t *ncommonnodes, idx_t **xadj, idx_t **adjncy, MPI_Comm *comm);
int __cdecl ParMETIS_V3_PartMeshKway(
idx_t *elmdist, idx_t *eptr, idx_t *eind, idx_t *elmwgt,
idx_t *wgtflag, idx_t *numflag, idx_t *ncon, idx_t *ncommonnodes, idx_t *nparts,
real_t *tpwgts, real_t *ubvec, idx_t *options, idx_t *edgecut, idx_t *part,
MPI_Comm *comm);
int __cdecl ParMETIS_V3_NodeND(
idx_t *vtxdist, idx_t *xadj, idx_t *adjncy, idx_t *numflag,
idx_t *options, idx_t *order, idx_t *sizes, MPI_Comm *comm);
int __cdecl ParMETIS_V32_NodeND(
idx_t *vtxdist, idx_t *xadj, idx_t *adjncy, idx_t *vwgt,
idx_t *numflag, idx_t *mtype, idx_t *rtype, idx_t *p_nseps, idx_t *s_nseps,
real_t *ubfrac, idx_t *seed, idx_t *dbglvl, idx_t *order,
idx_t *sizes, MPI_Comm *comm);
int __cdecl ParMETIS_SerialNodeND(
idx_t *vtxdist, idx_t *xadj, idx_t *adjncy, idx_t *numflag,
idx_t *options, idx_t *order, idx_t *sizes, MPI_Comm *comm);
#ifdef __cplusplus
}
#endif
/*------------------------------------------------------------------------
* Enum type definitions
*-------------------------------------------------------------------------*/
/*! Operation type codes */
typedef enum {
PARMETIS_OP_KMETIS,
PARMETIS_OP_GKMETIS,
PARMETIS_OP_GMETIS,
PARMETIS_OP_RMETIS,
PARMETIS_OP_AMETIS,
PARMETIS_OP_OMETIS,
PARMETIS_OP_M2DUAL,
PARMETIS_OP_MKMETIS
} pmoptype_et;
/*************************************************************************
* Various constants used for the different parameters
**************************************************************************/
/* Matching types */
#define PARMETIS_MTYPE_LOCAL 1 /* Restrict matching to within processor vertices */
#define PARMETIS_MTYPE_GLOBAL 2 /* Remote vertices can be matched */
/* Separator refinement types */
#define PARMETIS_SRTYPE_GREEDY 1 /* Vertices are visted from highest to lowest gain */
#define PARMETIS_SRTYPE_2PHASE 2 /* Separators are refined in a two-phase fashion using
PARMETIS_SRTYPE_GREEDY for the 2nd phase */
/* Coupling types for ParMETIS_V3_RefineKway & ParMETIS_V3_AdaptiveRepart */
#define PARMETIS_PSR_COUPLED 1 /* # of partitions == # of processors */
#define PARMETIS_PSR_UNCOUPLED 2 /* # of partitions != # of processors */
/* Debug levels (fields should be ORed) */
#define PARMETIS_DBGLVL_TIME 1 /* Perform timing analysis */
#define PARMETIS_DBGLVL_INFO 2 /* Perform timing analysis */
#define PARMETIS_DBGLVL_PROGRESS 4 /* Show the coarsening progress */
#define PARMETIS_DBGLVL_REFINEINFO 8 /* Show info on communication during folding */
#define PARMETIS_DBGLVL_MATCHINFO 16 /* Show info on matching */
#define PARMETIS_DBGLVL_RMOVEINFO 32 /* Show info on communication during folding */
#define PARMETIS_DBGLVL_REMAP 64 /* Determines if remapping will take place */
#endif