/* An array of these stores all the data for the graph/matrix. */
struct vtx_data {
int vwgt; /* weight of vertex */
int nedges; /* number of neighbors of vertex in subgraph */
/* Note: above always includes self-edge first */
int *edges; /* neighbor list in subgraph numbering scheme */
float *ewgts; /* weights of all the edges */
/* Note: above 2 fields have self-edge first */
};
/* An Array of lists made of these stores scheduler's message table. */
struct msg_data{
int dest; /* destination of the message */
double dur; /* duration of message */
double beg; /* time at which message begins */
double end; /* time at which message end */
struct list *route; /* linked list of ints stores message route */
struct msg_data *pntr; /* pointer to next outgoing message from this set */
};
/* A linked list of these stores the selective orthogonalization set */
struct orthlink {
int depth; /* bottom of list is 0, previous is 1 etc */
int index; /* position in list of ritz vals (i index) */
double ritzval; /* good ritz value */
double betaji; /* residual bound on good ritz pair */
double tau; /* from orthogonality recursion */
double prevtau; /* from orthogonality recursion */
double *vec; /* vector to orthogonalize against */
struct orthlink *pntr; /* pointer to next link */
};
/* A linked list of these stores the selective orthogonalization set */
struct orthlink_float {
int depth; /* bottom of list is 0, previous is 1 etc */
int index; /* position in list of ritz vals (i index) */
double ritzval; /* good ritz value */
double betaji; /* residual bound on good ritz pair */
double tau; /* from orthogonality recursion */
double prevtau; /* from orthogonality recursion */
float *vec; /* vector to orthogonalize against */
struct orthlink_float *pntr; /* pointer to next link */
};
/* A linked list of these stores the minimum elements of a vector */
struct scanlink {
double val; /* value of vector entry */
int indx; /* index of corresponding entry */
struct scanlink *pntr; /* pointer to next link */
};
/* These store the phantom edges needed to keep a subgraph connected */
struct edgeslist {
int vtx1; /* first vertex in edge */
int vtx2; /* second vertex in edge */
struct edgeslist *next; /* pointer to next element in list */
};
/* These store all the data needed to modify edges for connectivity. */
struct connect_data {
struct ilists *old_edges; /* overwritten old edges */
struct flists *old_ewgts; /* overwritten old weights */
struct edgeslist *new_edges; /* list of new edges */
int old_nedges; /* original number of edges in graph */
};
/* Information about subsets of processors is needed in recurse. */
struct set_info {
short setnum; /* assignment value for this set */
short ndims; /* log of # processors if hypercube */
short low[3]; /* low limit for grid dimensions if mesh */
short span[3]; /* size of grid dimensions if mesh */
struct set_info *next; /* pointer to next element in linked list */
};
/* Linked list stuff for various uses */
struct list { /* linked list of integers */
int num; /* element number */
struct list *next; /* ptr to next element in list */
};
struct lists { /* linked list of lists */
struct list *begin; /* pointer to list */
struct lists *nextlist; /* next list header */
};
struct bilist { /* bidirectional list */
struct bilist *prev; /* pointer to previous element */
struct bilist *next; /* ptr to next element in list */
};
struct ipairs { /* stores pairs of integers */
int val1;
int val2;
};
struct ilists { /* linked list of integer lists */
int *list;
struct ilists *next;
};
struct flists { /* linked list of floating lists */
float *list;
struct flists *next;
};
syntax highlighted by Code2HTML, v. 0.9.1