oomph_parmetis_3.1.1/struct.h
Go to the documentation of this file.
1 /*
2  * Copyright 1997, Regents of the University of Minnesota
3  *
4  * struct.h
5  *
6  * This file contains data structures for ILU routines.
7  *
8  * Started 9/26/95
9  * George
10  *
11  * $Id: struct.h,v 1.2 2003/07/21 17:50:22 karypis Exp $
12  */
13 
14 /* Indexes are as long as integers for now */
15 #ifdef IDXTYPE_INT
16 #define IDX_DATATYPE MPI_INT
17 #define MAX_INT INT_MAX
18 #define MIN_INT INT_MIN
19 #else
20 #define IDX_DATATYPE MPI_SHORT
21 #define MAX_INT SHRT_MAX
22 #define MIN_INT SHRT_MIN
23 #endif
24 
25 
26 /*************************************************************************
27 * The following data structure stores key-value pair
28 **************************************************************************/
29 struct KeyValueType {
30  idxtype key;
31  idxtype val;
32 };
33 
34 typedef struct KeyValueType KeyValueType;
35 
36 /*************************************************************************
37 * The following data structure stores key-value pair
38 **************************************************************************/
39 struct KVType {
40  int key;
41  float val;
42 };
43 
44 typedef struct KVType KVType;
45 
46 
47 /*************************************************************************
48 * The following data structure stores key-value pair
49 **************************************************************************/
50 struct FKeyValueType {
51  float key;
53 };
54 
55 typedef struct FKeyValueType FKeyValueType;
56 
57 /*************************************************************************
58 * The following data structure stores key-key-value triplets
59 **************************************************************************/
63 };
64 
65 typedef struct KeyKeyValueType KeyKeyValueType;
66 
67 /*************************************************************************
68 * The following data structure is used to store the buckets for the
69 * refinment algorithms
70 **************************************************************************/
71 struct PQueueType {
72  int nnodes;
73  int maxnnodes;
75  /* iperm[i] stores where the ith entry is located
76  perm[i] stores the entry that is located in the ith position */
77 };
78 
79 typedef struct PQueueType PQueueType;
80 
81 
82 /*************************************************************************
83 * The following data structure is used to store the buckets for the
84 * refinment algorithms
85 **************************************************************************/
86 struct FPQueueType {
87  int type; /* The type of the representation used */
88  int nnodes;
89  int maxnodes;
90 
91  /* Heap version of the data structure */
94 };
95 
96 typedef struct FPQueueType FPQueueType;
97 
98 /*************************************************************************
99 * The following data structure stores an edge
100 **************************************************************************/
101 struct edgedef {
104 };
105 typedef struct edgedef EdgeType;
106 
107 
108 /*************************************************************************
109 * This data structure holds various working space data
110 **************************************************************************/
111 struct workspacedef {
112  idxtype *core; /* Where pairs, indices, and degrees are coming from */
113  int maxcore;
114 
115  int nlarge; /* The size of 'Large' */
116  int nparts, npes; /* The size of the different p* vectors */
117 
118  KeyValueType *pairs; /* Large pair array used during setup */
119  idxtype *indices; /* Large array of indxtype used for various purposes */
120 
121  /* Auxiliary parameters */
122  idxtype *pv1, *pv2, *pv3, *pv4; /* Vectors of npes+1 size used in various places */
124 
126 };
127 
128 typedef struct workspacedef WorkSpaceType;
129 
130 
131 /*************************************************************************
132 * The following data structure holds information on degrees for k-way
133 * partition
134 **************************************************************************/
135 struct rinfodef {
136  int id, ed; /* ID/ED of edges */
137  int ndegrees; /* The number of different ext-degrees */
138  EdgeType *degrees; /* List of edges */
139 };
140 
141 typedef struct rinfodef RInfoType;
142 
143 
144 /*************************************************************************
145 * The following data structure holds information on degrees for k-way
146 * partition
147 **************************************************************************/
148 struct nrinfodef {
149  int edegrees[2];
150 };
151 
152 typedef struct nrinfodef NRInfoType;
153 
154 
155 /*************************************************************************
156 * The following data structure stores a sparse matrix in CSR format
157 * The diagonal entry is in the first position of each row.
158 **************************************************************************/
159 struct matrixdef {
160  int nrows, nnzs; /* Number of rows and nonzeros in the matrix */
163  float *values;
164  float *transfer;
165 };
166 
167 typedef struct matrixdef MatrixType;
168 
169 
170 /*************************************************************************
171 * This data structure holds the input graph
172 **************************************************************************/
173 struct graphdef {
175  idxtype *xadj; /* Pointers to the locally stored vertices */
176  idxtype *vwgt; /* Vertex weights */
177  float *nvwgt; /* Vertex weights */
178  idxtype *vsize; /* Vertex size */
179  idxtype *adjncy; /* Array that stores the adjacency lists of nvtxs */
180  idxtype *adjwgt; /* Array that stores the weights of the adjacency lists */
181  idxtype *vtxdist; /* Distribution of vertices */
182 
184  idxtype *cmap;
185 
186  idxtype *label;
187 
188  /* Communication/Setup parameters */
189  int nnbrs, nrecv, nsend; /* The number of neighboring processors */
190  idxtype *peind; /* Array of size nnbrs storing the neighboring PEs */
191  idxtype *sendptr, *sendind; /* CSR format of the vertices that are sent */
192  idxtype *recvptr, *recvind; /* CSR format of the vertices that are received */
193  idxtype *imap; /* The inverse map of local to global indices */
195  *peadjloc; /* CSR format of the PEs each vertex is adjancent to */
196 
197  int nlocal; /* Number of interior vertices */
198  idxtype *lperm; /* lperm[0:nlocal] points to interior vertices, the rest are interface */
199 
200  /* Communication parameters for projecting the partition.
201  * These are computed during CreateCoarseGraph and used during projection
202  * Note that during projection, the meaning of received and sent is reversed! */
203  idxtype *rlens, *slens; /* Arrays of size nnbrs of how many vertices you are sending and receiving */
205 
206 
207  /* Partition parameters */
210  float *lnpwgts, *gnpwgts;
211  RInfoType *rinfo;
212 
213  /* Node refinement information */
215  int nsep; /* The number of vertices in the separator */
216  idxtype *sepind; /* The indices of the vertices in the separator */
217  idxtype *hmarker; /* Marker for halo nodes (i.e, nodes 2 steps ways
218  from the boundary) */
219 
221 
222  int level;
225 
226  struct graphdef *coarser, *finer;
227 };
228 
229 typedef struct graphdef GraphType;
230 
231 
232 /*************************************************************************
233 * The following data type implements a timer
234 **************************************************************************/
235 typedef double timer;
236 
237 
238 /*************************************************************************
239 * The following structure stores information used by parallel kmetis
240 **************************************************************************/
241 struct controldef {
242  int mype, npes; /* Info about the parallel system */
243  int CoarsenTo; /* The # of vertices in the coarsest graph */
244  int dbglvl; /* Controls the debuging output of the program */
245  int nparts; /* The number of partitions */
246  int foldf; /* What is the folding factor */
247  int mtype; /* The matching type */
248  int ipart; /* The initial partitioning type */
249  int rtype; /* The refinement type */
250  int xyztype; /* The coordinate indexing type */
251  int nseps; /* The number of separators to compute at each bisection */
252  float ubfrac; /* The max/avg fraction for separator bisections */
253  int seed; /* Random number seed */
254  int sync; /* Random number seed */
255  float *tpwgts; /* Target subdomain weights */
257  float ubvec[MAXNCON];
258  int partType;
260 
264 
265  MPI_Comm gcomm;
266  MPI_Comm comm; /* MPI Communicator */
267  MPI_Request sreq[MAX_PES],
268  rreq[MAX_PES]; /* MPI send and receive requests */
269  MPI_Status statuses[MAX_PES];
270  MPI_Status status;
271 
272  /* Various Timers */
276 };
277 
278 typedef struct controldef CtrlType;
279 
280 
281 
282 /*************************************************************************
283 * The following data structure stores a mesh.
284 **************************************************************************/
285 struct meshdef {
286  int etype;
287  int gnelms, gnns;
288  int nelms, nns;
289  int ncon;
294 };
295 
296 typedef struct meshdef MeshType;
297 
MatrixXf MatrixType
Definition: benchmark-blocking-sizes.cpp:52
#define MAXNCON
Definition: oomph_metis_from_parmetis_3.1.1/defs.h:20
int idxtype
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:20
#define MAX_PES
Definition: oomph_parmetis_3.1.1/defs.h:82
double timer
Definition: oomph_parmetis_3.1.1/struct.h:235
Definition: oomph_parmetis_3.1.1/struct.h:50
idxtype val
Definition: oomph_parmetis_3.1.1/struct.h:52
float key
Definition: oomph_parmetis_3.1.1/struct.h:51
Definition: oomph_parmetis_3.1.1/struct.h:86
idxtype * locator
Definition: oomph_parmetis_3.1.1/struct.h:93
int nnodes
Definition: oomph_parmetis_3.1.1/struct.h:88
int maxnodes
Definition: oomph_parmetis_3.1.1/struct.h:89
int type
Definition: oomph_parmetis_3.1.1/struct.h:87
FKeyValueType * heap
Definition: oomph_parmetis_3.1.1/struct.h:92
Definition: oomph_parmetis_3.1.1/struct.h:39
float val
Definition: oomph_parmetis_3.1.1/struct.h:41
int key
Definition: oomph_parmetis_3.1.1/struct.h:40
Definition: oomph_parmetis_3.1.1/struct.h:60
idxtype key1
Definition: oomph_parmetis_3.1.1/struct.h:61
idxtype val
Definition: oomph_parmetis_3.1.1/struct.h:62
idxtype key2
Definition: oomph_parmetis_3.1.1/struct.h:61
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:32
idxtype key
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:33
idxtype val
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:34
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:56
idxtype * iperm
Definition: oomph_parmetis_3.1.1/struct.h:74
int maxnnodes
Definition: oomph_parmetis_3.1.1/struct.h:73
idxtype * perm
Definition: oomph_parmetis_3.1.1/struct.h:74
idxtype * values
Definition: oomph_parmetis_3.1.1/struct.h:74
int nnodes
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:58
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:216
int nparts
Definition: oomph_parmetis_3.1.1/struct.h:245
timer AuxTmr3
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:233
MPI_Status statuses[MAX_PES]
Definition: oomph_parmetis_3.1.1/struct.h:269
MPI_Request rreq[MAX_PES]
Definition: oomph_parmetis_3.1.1/struct.h:268
int dbglvl
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:218
timer ContractTmr
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:232
int xyztype
Definition: oomph_parmetis_3.1.1/struct.h:250
float edge_size_ratio
Definition: oomph_parmetis_3.1.1/struct.h:262
int sync
Definition: oomph_parmetis_3.1.1/struct.h:254
timer ProjectTmr
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:233
float redist_base
Definition: oomph_parmetis_3.1.1/struct.h:261
MPI_Comm comm
Definition: oomph_parmetis_3.1.1/struct.h:266
timer AuxTmr2
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:233
timer RefTmr
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:233
MPI_Status status
Definition: oomph_parmetis_3.1.1/struct.h:270
timer KWayInitTmr
Definition: oomph_parmetis_3.1.1/struct.h:274
float ubvec[MAXNCON]
Definition: oomph_parmetis_3.1.1/struct.h:257
int partType
Definition: oomph_parmetis_3.1.1/struct.h:258
timer CoarsenTmr
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:232
timer AuxTmr6
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:233
timer InitPartTmr
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:232
timer SetupTmr
Definition: oomph_parmetis_3.1.1/struct.h:274
timer MoveTmr
Definition: oomph_parmetis_3.1.1/struct.h:274
int tvwgts[MAXNCON]
Definition: oomph_parmetis_3.1.1/struct.h:256
MPI_Comm gcomm
Definition: oomph_parmetis_3.1.1/struct.h:265
int foldf
Definition: oomph_parmetis_3.1.1/struct.h:246
int nseps
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:226
float ipc_factor
Definition: oomph_parmetis_3.1.1/struct.h:261
int CoarsenTo
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:217
int mype
Definition: oomph_parmetis_3.1.1/struct.h:242
int ipart
Definition: oomph_parmetis_3.1.1/struct.h:248
MatrixType * matrix
Definition: oomph_parmetis_3.1.1/struct.h:263
timer MatchTmr
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:232
int seed
Definition: oomph_parmetis_3.1.1/struct.h:253
timer AuxTmr1
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:233
timer KWayTmr
Definition: oomph_parmetis_3.1.1/struct.h:274
float * tpwgts
Definition: oomph_parmetis_3.1.1/struct.h:255
timer AuxTmr4
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:233
timer ColorTmr
Definition: oomph_parmetis_3.1.1/struct.h:274
int ps_relation
Definition: oomph_parmetis_3.1.1/struct.h:259
float ubfrac
Definition: oomph_parmetis_3.1.1/struct.h:252
MPI_Request sreq[MAX_PES]
Definition: oomph_parmetis_3.1.1/struct.h:267
int npes
Definition: oomph_parmetis_3.1.1/struct.h:242
timer AuxTmr5
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:233
timer TotalTmr
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:232
int mtype
Definition: oomph_parmetis_3.1.1/struct.h:247
timer RemapTmr
Definition: oomph_parmetis_3.1.1/struct.h:275
float redist_factor
Definition: oomph_parmetis_3.1.1/struct.h:261
int rtype
Definition: oomph_parmetis_3.1.1/struct.h:249
Definition: oomph_parmetis_3.1.1/struct.h:101
idxtype edge
Definition: oomph_parmetis_3.1.1/struct.h:102
idxtype ewgt
Definition: oomph_parmetis_3.1.1/struct.h:103
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:158
int gnvtxs
Definition: oomph_parmetis_3.1.1/struct.h:174
float * nvwgt
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:197
idxtype * peadjncy
Definition: oomph_parmetis_3.1.1/struct.h:194
idxtype * sendind
Definition: oomph_parmetis_3.1.1/struct.h:191
idxtype * xadj
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:164
idxtype * lperm
Definition: oomph_parmetis_3.1.1/struct.h:198
idxtype * home
Definition: oomph_parmetis_3.1.1/struct.h:208
idxtype * lpwgts
Definition: oomph_parmetis_3.1.1/struct.h:209
int nvtxs
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:163
RInfoType * rinfo
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:186
KeyValueType * rcand
Definition: oomph_parmetis_3.1.1/struct.h:204
int nsend
Definition: oomph_parmetis_3.1.1/struct.h:189
idxtype * where
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:178
float * gnpwgts
Definition: oomph_parmetis_3.1.1/struct.h:210
idxtype * match
Definition: oomph_parmetis_3.1.1/struct.h:183
idxtype * peadjloc
Definition: oomph_parmetis_3.1.1/struct.h:195
NRInfoType * nrinfo
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:192
idxtype * sendptr
Definition: oomph_parmetis_3.1.1/struct.h:191
idxtype * label
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:172
int match_type
Definition: oomph_parmetis_3.1.1/struct.h:223
idxtype * hmarker
Definition: oomph_parmetis_3.1.1/struct.h:217
float * lnpwgts
Definition: oomph_parmetis_3.1.1/struct.h:210
struct graphdef * coarser
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:200
idxtype * gpwgts
Definition: oomph_parmetis_3.1.1/struct.h:209
idxtype * vsize
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:166
idxtype * adjwgt
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:168
int nsep
Definition: oomph_parmetis_3.1.1/struct.h:215
idxtype * adjncy
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:167
idxtype * recvind
Definition: oomph_parmetis_3.1.1/struct.h:192
int nrecv
Definition: oomph_parmetis_3.1.1/struct.h:189
idxtype * imap
Definition: oomph_parmetis_3.1.1/struct.h:193
idxtype * pexadj
Definition: oomph_parmetis_3.1.1/struct.h:194
struct graphdef * finer
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:200
idxtype * vwgt
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:165
idxtype * peind
Definition: oomph_parmetis_3.1.1/struct.h:190
idxtype * slens
Definition: oomph_parmetis_3.1.1/struct.h:203
int nobj
Definition: oomph_parmetis_3.1.1/struct.h:174
idxtype * sepind
Definition: oomph_parmetis_3.1.1/struct.h:216
int edgewgt_type
Definition: oomph_parmetis_3.1.1/struct.h:224
idxtype * recvptr
Definition: oomph_parmetis_3.1.1/struct.h:192
int ncon
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:196
idxtype * rlens
Definition: oomph_parmetis_3.1.1/struct.h:203
idxtype * cmap
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:174
int nedges
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:163
int nnbrs
Definition: oomph_parmetis_3.1.1/struct.h:189
idxtype * vtxdist
Definition: oomph_parmetis_3.1.1/struct.h:181
int mincut
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:177
int level
Definition: oomph_parmetis_3.1.1/struct.h:222
int lmincut
Definition: oomph_parmetis_3.1.1/struct.h:220
int nlocal
Definition: oomph_parmetis_3.1.1/struct.h:197
Definition: oomph_parmetis_3.1.1/struct.h:159
int nnzs
Definition: oomph_parmetis_3.1.1/struct.h:160
idxtype * colind
Definition: oomph_parmetis_3.1.1/struct.h:162
float * values
Definition: oomph_parmetis_3.1.1/struct.h:163
int nrows
Definition: oomph_parmetis_3.1.1/struct.h:160
idxtype * rowptr
Definition: oomph_parmetis_3.1.1/struct.h:161
float * transfer
Definition: oomph_parmetis_3.1.1/struct.h:164
Definition: oomph_parmetis_3.1.1/struct.h:285
int ncon
Definition: oomph_parmetis_3.1.1/struct.h:289
int nelms
Definition: oomph_parmetis_3.1.1/struct.h:288
int esize
Definition: oomph_parmetis_3.1.1/struct.h:290
idxtype * elements
Definition: oomph_parmetis_3.1.1/struct.h:292
int gminnode
Definition: oomph_parmetis_3.1.1/struct.h:290
int nns
Definition: oomph_parmetis_3.1.1/struct.h:288
idxtype * elmwgt
Definition: oomph_parmetis_3.1.1/struct.h:293
int gnns
Definition: oomph_parmetis_3.1.1/struct.h:287
int gnelms
Definition: oomph_parmetis_3.1.1/struct.h:287
idxtype * elmdist
Definition: oomph_parmetis_3.1.1/struct.h:291
int etype
Definition: oomph_parmetis_3.1.1/struct.h:286
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:148
idxtype edegrees[2]
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:149
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:121
int id
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:122
EdgeType * degrees
Definition: oomph_parmetis_3.1.1/struct.h:138
int ndegrees
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:123
int ed
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:122
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:100
idxtype * indices
Definition: oomph_parmetis_3.1.1/struct.h:119
idxtype * pv4
Definition: oomph_parmetis_3.1.1/struct.h:122
KeyValueType * pepairs1
Definition: oomph_parmetis_3.1.1/struct.h:123
int maxcore
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:102
idxtype * pv2
Definition: oomph_parmetis_3.1.1/struct.h:122
idxtype * pv3
Definition: oomph_parmetis_3.1.1/struct.h:122
idxtype * pv1
Definition: oomph_parmetis_3.1.1/struct.h:122
int nlarge
Definition: oomph_parmetis_3.1.1/struct.h:115
KeyValueType * pairs
Definition: oomph_parmetis_3.1.1/struct.h:118
int npes
Definition: oomph_parmetis_3.1.1/struct.h:116
KeyValueType * pepairs2
Definition: oomph_parmetis_3.1.1/struct.h:123
idxtype * core
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:101
int nparts
Definition: oomph_parmetis_3.1.1/struct.h:116
EdgeType * degrees
Definition: oomph_parmetis_3.1.1/struct.h:125