1 /* An array of these stores all the data for the graph/matrix. */
2 struct vtx_data {
3 	int vwgt;		/* weight of vertex */
4 	int nedges;		/* number of neighbors of vertex in subgraph */
5 				/* Note: above always includes self-edge first */
6 	int *edges;		/* neighbor list in subgraph numbering scheme */
7 	float *ewgts;		/* weights of all the edges */
8 				/* Note: above 2 fields have self-edge first */
9 };
10 
11 
12 /* An Array of lists made of these stores scheduler's message table. */
13 struct msg_data{
14 	int dest;		/* destination of the message */
15 	double dur;		/* duration of message */
16 	double beg;		/* time at which message begins */
17 	double end;		/* time at which message end */
18 	struct list *route;	/* linked list of ints stores message route */
19 	struct msg_data *pntr;	/* pointer to next outgoing message from this set */
20 };
21 
22 
23 /* A linked list of these stores the selective orthogonalization set */
24 struct orthlink {
25 	int depth;		/* bottom of list is 0, previous is 1 etc */
26 	int index;		/* position in list of ritz vals (i index) */
27 	double ritzval;		/* good ritz value */
28 	double betaji;		/* residual bound on good ritz pair */
29 	double tau;		/* from orthogonality recursion */
30 	double prevtau;		/* from orthogonality recursion */
31 	double *vec;		/* vector to orthogonalize against */
32 	struct orthlink *pntr;	/* pointer to next link */
33 };
34 
35 /* A linked list of these stores the selective orthogonalization set */
36 struct orthlink_float {
37 	int depth;		/* bottom of list is 0, previous is 1 etc */
38 	int index;		/* position in list of ritz vals (i index) */
39 	double ritzval;		/* good ritz value */
40 	double betaji;		/* residual bound on good ritz pair */
41 	double tau;		/* from orthogonality recursion */
42 	double prevtau;		/* from orthogonality recursion */
43 	float *vec;		/* vector to orthogonalize against */
44 	struct orthlink_float *pntr;	/* pointer to next link */
45 };
46 
47 
48 
49 /* A linked list of these stores the minimum elements of a vector */
50 struct scanlink {
51 	double val;		/* value of vector entry */
52 	int indx;		/* index of corresponding entry */
53 	struct scanlink *pntr;	/* pointer to next link */
54 };
55 
56 /* These store the phantom edges needed to keep a subgraph connected */
57 struct edgeslist {
58 	 int vtx1;               /* first vertex in edge */
59 	 int vtx2;               /* second vertex in edge */
60 	 struct edgeslist *next; /* pointer to next element in list */
61  };
62 
63 /* These store all the data needed to modify edges for connectivity. */
64 struct connect_data {
65 	struct ilists *old_edges;	/* overwritten old edges */
66 	struct flists *old_ewgts;	/* overwritten old weights */
67 	struct edgeslist *new_edges;	/* list of new edges */
68 	int old_nedges;		/* original number of edges in graph */
69 };
70 
71 /* Information about subsets of processors is needed in recurse. */
72 struct set_info {
73 	short setnum;		/* assignment value for this set */
74 	short ndims;		/* log of # processors if hypercube */
75 	short low[3];		/* low limit for grid dimensions if mesh */
76 	short span[3];		/* size of grid dimensions if mesh */
77 	struct set_info *next;	/* pointer to next element in linked list */
78 };
79 
80 /* Linked list stuff for various uses */
81 struct list {				/* linked list of integers */
82 	int num;			/* element number */
83 	struct list *next;		/* ptr to next element in list */
84 };
85 
86 struct lists {				/* linked list of lists */
87 	struct list *begin;		/* pointer to list */
88 	struct lists *nextlist;		/* next list header */
89 };
90 
91 struct bilist {				/* bidirectional list */
92 	struct bilist *prev;		/* pointer to previous element */
93 	struct bilist *next;		/* ptr to next element in list */
94 };
95 
96 struct ipairs {				/* stores pairs of integers */
97 	int val1;
98 	int val2;
99 };
100 
101 struct ilists {				/* linked list of integer lists */
102 	int *list;
103 	struct ilists *next;
104 };
105 
106 struct flists {				/* linked list of floating lists */
107 	float *list;
108 	struct flists *next;
109 };
110