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