📄 struct.h
字号:
/* * Copyright 1997, Regents of the University of Minnesota * * struct.h * * This file contains data structures for ILU routines. * * Started 9/26/95 * George * * $Id: struct.h 2501 2007-11-20 02:33:29Z benkirk $ *//* Indexes are as long as integers for now */#ifdef IDXTYPE_INT#define IDX_DATATYPE MPI_INT#define MAX_INT INT_MAX#define MIN_INT INT_MIN#else#define IDX_DATATYPE MPI_SHORT#define MAX_INT SHRT_MAX#define MIN_INT SHRT_MIN#endif/************************************************************************** The following data structure stores key-value pair**************************************************************************/struct KeyValueType { idxtype key; idxtype val;};typedef struct KeyValueType KeyValueType;/************************************************************************** The following data structure stores key-value pair**************************************************************************/struct KVType { int key; float val;};typedef struct KVType KVType;/************************************************************************** The following data structure stores key-value pair**************************************************************************/struct FKeyValueType { float key; idxtype val;};typedef struct FKeyValueType FKeyValueType;/************************************************************************** The following data structure stores key-key-value triplets**************************************************************************/struct KeyKeyValueType { idxtype key1, key2; idxtype val;};typedef struct KeyKeyValueType KeyKeyValueType;/************************************************************************** The following data structure is used to store the buckets for the * refinment algorithms**************************************************************************/struct PQueueType { int nnodes; int maxnnodes; idxtype *perm, *iperm, *values; /* iperm[i] stores where the ith entry is located perm[i] stores the entry that is located in the ith position */};typedef struct PQueueType PQueueType;/************************************************************************** The following data structure is used to store the buckets for the* refinment algorithms**************************************************************************/struct FPQueueType { int type; /* The type of the representation used */ int nnodes; int maxnodes; /* Heap version of the data structure */ FKeyValueType *heap; idxtype *locator;};typedef struct FPQueueType FPQueueType;/************************************************************************** The following data structure stores an edge**************************************************************************/struct edgedef { idxtype edge; idxtype ewgt;};typedef struct edgedef EdgeType;/************************************************************************** This data structure holds various working space data**************************************************************************/struct workspacedef { idxtype *core; /* Where pairs, indices, and degrees are coming from */ int maxcore; int nlarge; /* The size of 'Large' */ KeyValueType *pairs; /* Large pair array used during setup */ idxtype *indices; /* Large array of indxtype used for various purposes */ /* Auxiliary parameters */ idxtype *pv1, *pv2, *pv3, *pv4; /* Vectors of npes+1 size used in various places */ KeyValueType *pepairs1, *pepairs2; EdgeType *degrees;};typedef struct workspacedef WorkSpaceType;/************************************************************************** The following data structure holds information on degrees for k-way* partition**************************************************************************/struct rinfodef { int id, ed; /* ID/ED of edges */ int ndegrees; /* The number of different ext-degrees */ EdgeType *degrees; /* List of edges */};typedef struct rinfodef RInfoType;/************************************************************************** The following data structure holds information on degrees for k-way* partition**************************************************************************/struct nrinfodef { int edegrees[2]; };typedef struct nrinfodef NRInfoType;/************************************************************************** The following data structure stores a sparse matrix in CSR format* The diagonal entry is in the first position of each row.**************************************************************************/struct matrixdef { int nrows, nnzs; /* Number of rows and nonzeros in the matrix */ idxtype *rowptr; idxtype *colind; float *values; float *transfer;};typedef struct matrixdef MatrixType;/************************************************************************** This data structure holds the input graph**************************************************************************/struct graphdef { int gnvtxs, nvtxs, nedges, ncon, nobj; idxtype *xadj; /* Pointers to the locally stored vertices */ idxtype *vwgt; /* Vertex weights */ float *nvwgt; /* Vertex weights */ idxtype *vsize; /* Vertex size */ idxtype *adjncy; /* Array that stores the adjacency lists of nvtxs */ idxtype *adjwgt; /* Array that stores the weights of the adjacency lists */ idxtype *vtxdist; /* Distribution of vertices */ idxtype *match; idxtype *cmap; idxtype *label; /* Communication/Setup parameters */ int nnbrs, nrecv, nsend; /* The number of neighboring processors */ idxtype *peind; /* Array of size nnbrs storing the neighboring PEs */ idxtype *sendptr, *sendind; /* CSR format of the vertices that are sent */ idxtype *recvptr, *recvind; /* CSR format of the vertices that are received */ idxtype *imap; /* The inverse map of local to global indices */ idxtype *pexadj, *peadjncy, *peadjloc; /* CSR format of the PEs each vertex is adjancent to */ int nlocal; /* Number of interior vertices */ idxtype *lperm; /* lperm[0:nlocal] points to interior vertices, the rest are interface */ /* Communication parameters for projecting the partition. * These are computed during CreateCoarseGraph and used during projection * Note that during projection, the meaning of received and sent is reversed! */ idxtype *rlens, *slens; /* Arrays of size nnbrs of how many vertices you are sending and receiving */ KeyValueType *rcand; /* Partition parameters */ idxtype *where, *home; idxtype *lpwgts, *gpwgts; float *lnpwgts, *gnpwgts; RInfoType *rinfo; /* Node refinement information */ NRInfoType *nrinfo; int nsep; /* The number of vertices in the separator */ idxtype *sepind; /* The indices of the vertices in the separator */ int lmincut, mincut; int level; int match_type; int edgewgt_type; struct graphdef *coarser, *finer;};typedef struct graphdef GraphType;/************************************************************************** The following data type implements a timer**************************************************************************/typedef double timer;/************************************************************************** The following structure stores information used by parallel kmetis**************************************************************************/struct controldef { int mype, npes; /* Info about the parallel system */ int CoarsenTo; /* The # of vertices in the coarsest graph */ int dbglvl; /* Controls the debuging output of the program */ int nparts; /* The number of partitions */ int foldf; /* What is the folding factor */ int ipart; /* The type of initial partitioning */ int xyztype; /* The type of coordinate indexing */ int seed; /* Random number seed */ int sync; /* Random number seed */ float *tpwgts; /* Target subdomain weights */ int tvwgts[MAXNCON]; float ubvec[MAXNCON]; int partType; int ps_relation; float redist_factor, redist_base, ipc_factor; float edge_size_ratio; MatrixType *matrix; MPI_Comm gcomm; MPI_Comm comm; /* MPI Communicator */ MPI_Request sreq[MAX_PES], rreq[MAX_PES]; /* MPI send and receive requests */ MPI_Status statuses[MAX_PES]; MPI_Status status; /* Various Timers */ timer TotalTmr, InitPartTmr, MatchTmr, ContractTmr, CoarsenTmr, RefTmr, SetupTmr, ColorTmr, ProjectTmr, KWayInitTmr, KWayTmr, MoveTmr, RemapTmr, AuxTmr1, AuxTmr2, AuxTmr3, AuxTmr4, AuxTmr5, AuxTmr6;};typedef struct controldef CtrlType;/************************************************************************** The following data structure stores a mesh.**************************************************************************/struct meshdef { int etype; int gnelms, gnns; int nelms, nns; int ncon; int esize, gminnode; idxtype *elmdist; idxtype *elements; idxtype *elmwgt;};typedef struct meshdef MeshType;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -