Fortunately, I have succeeded in creating an Array-orientated structure for holding information, whereby all vertices and edges are stored in arrays. It has been designed so that edges can be used as vertices (during coarsening), so the new vertex will hold the information of both child vertices in the form of an edge (so, in theory, the model can be used iteratively). The design took into account my supervisors advise/guidance that vertices should only know its children, and not its parents or neighbours, if any. See below for a more graphic description.
This is a very new change and I am still working through some issues, most noticeably, how to translate edges from G(n) to G(n+1). The intention of this change is to make the coarsening used in the multilevel algorithm easier for me (as using my current technique makes it very difficult).
Research wise, I have concentrated on the papers referenced in Chris Walshaw's paper, specifically those focused on matching and the problems associated with it (turns out I don't have the paper with me at the moment, nor can I remember who wrote it - so I will update this when I am home so I don't get it wrong).
For now, I will leave you with this attempt of an update, hopefully my next post will be a little more fruitful. As mentioned, a quick intro to how I'm using arrays, is below, once again, please remember it is not finished. Good Day!
-----------------------------------------------------------------
The plan is to have a 2d array of objects for vertices, and another for edges:
Object[|V|][4] vertices, where |V| is the number of vertices, and the 4 variables are (Object o, double x, double y, double z) where o can be anything (that is an Object or type of Object).
Object[|E|][2] edges, where |E| is the total number of edges (not included doubled edges), and the 2 variables are (Object v1, Object v2) where v1 and v2 are vertices from vertices[][].
An object v from vertices[][], can look like this for G(n) where n > 0,
v[0][0] = e[0];
v[0][1] = x coordinate;
v[0][2] = y coordinate;
v[0][3] = z coordinate;
Here the new vertex v is a matching of u1 and u2 that formed e[0]. If no matching is found, it can also be another vertex from the previous graph, i.e. u[0] from u[][].
For G(0) the vertex v will not include an edge or vertex, and instead, can be left to null or can hold some other value (such as an identifier if necessary).
Hopefully this gives you a little insight into the world of carl, good day!
[no pretty pictures this week folks!]







