/*
 * Copyright 1997, Regents of the University of Minnesota
 *
 * defs.h
 *
 * This file contains constant definitions
 *
 * Started 8/27/94
 * George
 *
 * $Id: defs.h,v 1.1 2004/08/05 21:33:58 ssherw Exp $
 *
 */

#define METISTITLE              "  METIS 4.0.1 Copyright 1998, Regents of the University of Minnesota\n\n"
#define MAXLINE      1280000

#define LTERM      (void **) 0  /* List terminator for GKfree() */

#define MAXNCON      16    /* The maximum number of constrains */
#define MAXNOBJ      16    /* The maximum number of objectives */

#define PLUS_GAINSPAN     500             /* Parameters for FM buckets */
#define NEG_GAINSPAN      500

#define HTLENGTH    ((1<<11)-1)

/* Meaning of various options[] parameters */
#define OPTION_PTYPE    0
#define OPTION_CTYPE    1
#define OPTION_ITYPE    2
#define OPTION_RTYPE    3
#define OPTION_DBGLVL    4
#define OPTION_OFLAGS    5
#define OPTION_PFACTOR    6
#define OPTION_NSEPS    7

#define OFLAG_COMPRESS    1  /* Try to compress the graph */
#define OFLAG_CCMP    2  /* Find and order connected components */


/* Default options for PMETIS */
#define PMETIS_CTYPE    MATCH_SHEM
#define PMETIS_ITYPE    IPART_GGPKL
#define PMETIS_RTYPE    RTYPE_FM
#define PMETIS_DBGLVL    0

/* Default options for KMETIS */
#define KMETIS_CTYPE    MATCH_SHEM
#define KMETIS_ITYPE    IPART_PMETIS
#define KMETIS_RTYPE    RTYPE_KWAYRANDOM_MCONN
#define KMETIS_DBGLVL    0

/* Default options for OEMETIS */
#define OEMETIS_CTYPE    MATCH_SHEM
#define OEMETIS_ITYPE    IPART_GGPKL
#define OEMETIS_RTYPE    RTYPE_FM
#define OEMETIS_DBGLVL    0

/* Default options for ONMETIS */
#define ONMETIS_CTYPE    MATCH_SHEM
#define ONMETIS_ITYPE    IPART_GGPKL
#define ONMETIS_RTYPE    RTYPE_SEP1SIDED
#define ONMETIS_DBGLVL    0
#define ONMETIS_OFLAGS    OFLAG_COMPRESS
#define ONMETIS_PFACTOR    -1
#define ONMETIS_NSEPS    1

/* Default options for McPMETIS */
#define McPMETIS_CTYPE    MATCH_SHEBM_ONENORM
#define McPMETIS_ITYPE    IPART_RANDOM
#define McPMETIS_RTYPE    RTYPE_FM
#define McPMETIS_DBGLVL    0

/* Default options for McKMETIS */
#define McKMETIS_CTYPE    MATCH_SHEBM_ONENORM
#define McKMETIS_ITYPE    IPART_McHPMETIS
#define McKMETIS_RTYPE    RTYPE_KWAYRANDOM
#define McKMETIS_DBGLVL    0

/* Default options for KVMETIS */
#define KVMETIS_CTYPE    MATCH_SHEM
#define KVMETIS_ITYPE    IPART_PMETIS
#define KVMETIS_RTYPE    RTYPE_KWAYRANDOM
#define KVMETIS_DBGLVL    0


/* Operations supported by stand-alone code */
#define OP_PMETIS    1
#define OP_KMETIS    2
#define OP_OEMETIS    3
#define OP_ONMETIS    4
#define OP_ONWMETIS    5
#define OP_KVMETIS    6


/* Matching Schemes */
#define MATCH_RM    1
#define MATCH_HEM    2
#define MATCH_SHEM    3
#define MATCH_SHEMKWAY    4
#define MATCH_SHEBM_ONENORM  5
#define MATCH_SHEBM_INFNORM  6
#define MATCH_SBHEM_ONENORM  7
#define MATCH_SBHEM_INFNORM  8

/* Initial partitioning schemes for PMETIS and ONMETIS */
#define IPART_GGPKL    1
#define IPART_GGPKLNODE    2
#define IPART_RANDOM    2

/* Refinement schemes for PMETIS */
#define RTYPE_FM    1

/* Initial partitioning schemes for KMETIS */
#define IPART_PMETIS    1

/* Refinement schemes for KMETIS */
#define RTYPE_KWAYRANDOM  1
#define RTYPE_KWAYGREEDY  2
#define RTYPE_KWAYRANDOM_MCONN  3

/* Refinement schemes for ONMETIS */
#define RTYPE_SEP2SIDED    1
#define RTYPE_SEP1SIDED    2

/* Initial Partitioning Schemes for McKMETIS */
#define IPART_McPMETIS    1     /* Simple McPMETIS */
#define IPART_McHPMETIS    2  /* horizontally relaxed McPMETIS */

#define UNMATCHED    -1

#define HTABLE_EMPTY      -1

#define NGR_PASSES    4  /* Number of greedy refinement passes */
#define NLGR_PASSES    5  /* Number of GR refinement during IPartition */

#define LARGENIPARTS    8  /* Number of random initial partitions */
#define SMALLNIPARTS    3  /* Number of random initial partitions */

#define COARSEN_FRACTION  0.75  /* Node reduction between succesive coarsening levels */
#define COARSEN_FRACTION2  0.90  /* Node reduction between succesive coarsening levels */
#define UNBALANCE_FRACTION    1.05

#define COMPRESSION_FRACTION    0.85

#define ORDER_UNBALANCE_FRACTION  1.10

#define MMDSWITCH    200

#define HORIZONTAL_IMBALANCE    1.05

/* Debug Levels */
#define DBG_TIME  1    /* Perform timing analysis */
#define DBG_OUTPUT  2
#define DBG_COARSEN     4    /* Show the coarsening progress */
#define DBG_REFINE  8    /* Show info on communication during folding */
#define DBG_IPART  16    /* Show info on initial partition */
#define DBG_MOVEINFO  32    /* Show info on communication during folding */
#define DBG_KWAYPINFO  64    /* Show info on communication during folding */
#define DBG_SEPINFO  128    /* Show info on communication during folding */
