xc
|
type of GraphPartitioner which uses 'METIS - Unstructured Graph Partitioning And Sparse Matrix Ordering System', developed by G. More...
#include <MetisNumberer.h>
Public Member Functions | |
bool | setOptions (int Ptype, int Mtype, int coarsenTo, int Rtype, int IPtype) |
Sets the options for the partitioning to those passed as arguments. More... | |
bool | setDefaultOptions (void) |
Sets the default options. | |
int | partition (Graph &theGraph, int numPart) |
Method to partition the graph. More... | |
bool | setOptions (int Ptype, int Mtype, int coarsenTo, int Rtype, int IPtype) |
bool | setDefaultOptions (void) |
int | partitionHexMesh (int *elmnts, int *epart, int *npart, int ne, int nn, int nparts, bool whichToUse) |
int | partition (Graph &theGraph, int numPart) |
Method invoked to partition the graph. More... | |
int | partitionGraph (int *nvtxs, int *xadj, int *adjncy, int *vwgt, int *adjwgt, int *wgtflag, int *numflag, int *nparts, int *options, int *edgecut, int *part, bool whichToUse) |
const ID & | number (Graph &theGraph, int lastVertex=-1) |
Graph numbering. More... | |
const ID & | number (Graph &theGraph, const ID &lastVertices) |
Graph numbering. More... | |
int | sendSelf (Communicator &) |
Send the object. More... | |
int | recvSelf (const Communicator &) |
Receive the object. More... | |
Public Member Functions inherited from XC::MovableObject | |
MovableObject (int classTag, int dbTag) | |
Constructor. More... | |
MovableObject (int classTag) | |
Constructor. More... | |
MovableObject (const MovableObject &) | |
Copy constructor. Doesn't copy the dbTag. | |
MovableObject & | operator= (const MovableObject &) |
Assignment operator. Doesn't copy the dbTag. | |
int | getClassTag (void) const |
Return the class identifier. | |
int | getDbTag (void) const |
Return the object identifier in the database. | |
int | getDbTag (Communicator &) |
Return the object identifier in the database. | |
void | setDbTag (int dbTag) |
Sets the object identifier in the database. | |
void | setDbTag (Communicator &) |
Sets the object identifier in the database if not already set. More... | |
virtual int | setParameter (const std::vector< std::string > &argv, Parameter ¶m) |
Sets the value param to the parameter argv . | |
virtual int | updateParameter (int parameterID, Information &info) |
Updates the parameter identified by parameterID with info . | |
virtual int | activateParameter (int parameterID) |
Activates the parameter identified by parameterID . | |
virtual int | setVariable (const std::string &variable, Information &) |
Set the value of the variable idenfified by var . | |
virtual int | getVariable (const std::string &variable, Information &) |
Return the value of the variable idenfified by var . | |
Public Member Functions inherited from XC::DistributedBase | |
DistributedBase (void) | |
Constructor. | |
virtual | ~DistributedBase (void) |
Destructor. | |
virtual DbTagData & | getDbTagData (void) const |
Returns a vector to store class dbTags. | |
const int & | getDbTagDataPos (const int &i) const |
Returns the data at the i-th position. | |
void | setDbTagDataPos (const int &i, const int &v) |
Sets the data at the i-th position. | |
void | inicComm (const int &dataSize) const |
Initializes communication. | |
Public Member Functions inherited from CommandEntity | |
CommandEntity (CommandEntity *owr=nullptr) | |
Default constructor. | |
CommandEntity * | Owner (void) |
Return a pointer to the object owner. | |
const CommandEntity * | Owner (void) const |
Return un puntero al objeto propietario de ESTE. | |
const StandardOutputWrapper & | getStandardOutputWrapper (void) const |
Return the regular output stream wrapper. | |
StandardOutputWrapper & | getStandardOutputWrapper (void) |
Return the regular output stream wrapper. | |
const std::string & | getLogFileName (void) const |
Returns log file name. | |
void | setLogFileName (const std::string &) |
Sets log file name. | |
const std::string & | getErrFileName (void) const |
Returns err file name. | |
void | setErrFileName (const std::string &) |
Sets error file name. | |
const std::string & | getOutputFileName (void) const |
Returns regular output file name. | |
void | setOutputFileName (const std::string &) |
Sets regular output file name. | |
boost::python::object | evalPy (boost::python::object dict, const std::string &) |
Return the Python object that results from evaluating the argument. | |
boost::python::object | execPy (boost::python::object dict, const std::string &) |
Return the Python objects that results from executing the code in the string argument. | |
boost::python::object | execFilePy (boost::python::object dict, const std::string &) |
Return the Python object that results from executing the code in the file. | |
Public Member Functions inherited from EntityWithProperties | |
EntityWithProperties (EntityWithProperties *owr=nullptr) | |
Default constructor. | |
virtual bool | operator== (const EntityWithProperties &) const |
Comparison operator. | |
void | clearPyProps (void) |
Clear python properties map. | |
bool | hasPyProp (const std::string &) |
Returns true if property exists. | |
boost::python::object | getPyProp (const std::string &str) |
Return the Python object with the name being passed as parameter. | |
void | setPyProp (std::string str, boost::python::object val) |
Sets/appends a value tho the Python object's dictionary. | |
void | copyPropsFrom (const EntityWithProperties &) |
Copy the properties from the argument. | |
boost::python::list | getPropNames (void) const |
Return the names of the object properties weightings. | |
const PythonDict & | getPropertiesDict (void) const |
Return a std::map container with the properties of the object. | |
boost::python::dict | getPyDict (void) const |
Return a Python dictionary containing the object members values. | |
void | setPyDict (const boost::python::dict &) |
Set the values of the object members from a Python dictionary. | |
Public Member Functions inherited from EntityWithOwner | |
EntityWithOwner (EntityWithOwner *owr=nullptr) | |
Default constructor. | |
EntityWithOwner (const EntityWithOwner &) | |
Copy constructor. | |
EntityWithOwner & | operator= (const EntityWithOwner &) |
Assignment operator. | |
virtual bool | operator== (const EntityWithOwner &) const |
Comparison operator. | |
virtual | ~EntityWithOwner (void) |
Virtual destructor. | |
virtual std::string | getClassName (void) const |
Returns demangled class name. | |
void | set_owner (EntityWithOwner *owr) |
Assigns the owner of the object. | |
EntityWithOwner * | Owner (void) |
const EntityWithOwner * | Owner (void) const |
Protected Member Functions | |
Metis (int Ptype, int Mtype, int coarsenTo, int Rtype, int IPtype) | |
GraphNumberer * | getCopy (void) const |
Virtual constructor. | |
Protected Member Functions inherited from XC::GraphPartitioner | |
GraphPartitioner (void) | |
Constructor. | |
Protected Member Functions inherited from XC::GraphNumberer | |
GraphNumberer (int classTag) | |
Constructor. More... | |
Protected Member Functions inherited from CommandEntity | |
template<class T > | |
void | string_to (T &, const std::string &) const |
Friends | |
class | DOF_Numberer |
Additional Inherited Members | |
Public Types inherited from EntityWithProperties | |
typedef std::map< std::string, boost::python::object > | PythonDict |
Static Public Member Functions inherited from CommandEntity | |
static void | resetStandardOutput (void) |
Reset the standard output streams to its defaults buffers. | |
Static Public Member Functions inherited from EntityWithOwner | |
static int | getVerbosityLevel (void) |
Get the value of the verbosity level. | |
static void | setVerbosityLevel (const int &) |
Set the value of the verbosity level. | |
Static Protected Member Functions inherited from CommandEntity | |
static CommandEntity * | entcmd_cast (boost::any &data) |
Static Protected Attributes inherited from EntityWithOwner | |
static int | verbosity = 1 |
Object that owns THIS ONE. More... | |
type of GraphPartitioner which uses 'METIS - Unstructured Graph Partitioning And Sparse Matrix Ordering System', developed by G.
Metis is a type of GraphPartitioner which uses METIS library.
Karypis and V. Kumar at the University of Minnesota. The metis files are found in metis-2.0 which were downloaded.
The Metis graph partitioner calls procedures defined in the METIS library to partition the graph. METIS is currently being developed by G.~Karypis and V.~Kumar at the University of Minnesota. At the present time the Graph to be partitioned MUST have the vertices labeled \(0\) through \(numVertex-1\).
The METIS library uses two integer arrays to represent the graph, {xadj} and adjncy
. \(xadj(i)\) stores the location in adjncy
of the start of the \(i\)'th Vertices adjacent Vertices. adjncy
contains the tags of all the adjacent vertices. For example, the graph which is represented by the following matrix \(A\): 'METIS - Unstructured Graph Partitioning And Sparse Matrix Ordering System', developed by G. Karypis and V. Kumar at the University of Minnesota. The metis files are found in metis-2.0 which were downloaded.
\[ \begin{displaymath} A = \left[ \begin{array}{ccccc} 1 & 0 & 1 & 1 & 0\\ 1 & 1 & 0 & 0 & 0\\ 0 & 1 & 1 & 0 & 0\\ 0 & 0 & 0 & 1 & 1\\ 1 & 1 & 0 & 0 & 1 \end{array} \right] \end{displaymath} \]
is represented by:
\[ \begin{displaymath} \f$ xadj = \left[ \begin{array}{cccccccccccccc} 0 & 2 & 3 & 4 & 5 & 7 \end{array} \right] \f$ \end{displaymath} \]
and
\[ \begin{displaymath} \f$ adjncy = \left[ \begin{array}{cccccccccccccc} 2 & 3 & 0 & 1 & 4 & 0 & 1 \end{array} \right] \f$ \end{displaymath} \]
note that there is no space allocated for the diagonal components.
Graph numbering.
This is the method invoked to perform the graph numbering, that is to assign a unique integer \(1\) through numVertex
, to each Vertex in the Graph. Returns an ordered ID containing the vertex references in the order of the numbering, i.e. \(ID(0)\) contains the integer reference for the vertex assigned the number 1, \(ID(1)\) contains the integer reference for the vertex assigned the number 2 and so on. A side effect of the numbering is that the Tmp
variable of each vertex is set to the number assigned to that vertex. If lastVertex
is not \(-1\) the Vertex whose tag is given by lastVertex
should be numbered last (it does not have to be though THIS MAY CHANGE).
Implements XC::GraphNumberer.
Graph numbering.
This is the method invoked to perform the graph numbering, that is to assign a unique integer \(1\) through numVertex
, to each Vertex in the Graph. Returns an ordered ID containing the vertex references in the order of the numbering, i.e. \(ID(0)\) contains the integer reference for the vertex assigned the number 1, \(ID(1)\) contains the integer reference for the vertex assigned the number 2 and so on. A side effect of the numbering is that the Tmp
variable of each vertex is set to the number assigned to that vertex. If lastVertex
is not \(-1\) the Vertex whose tag is given by lastVertex
should be numbered last (it does not have to be though THIS MAY CHANGE).
Implements XC::GraphNumberer.
|
virtual |
Method to partition the graph.
Method that performs the graph partitioning.
It first creates the arrays needed by the metis lib and then invokes a function from the metis lib to partition the graph. The solors of the vertices of the graph are set to colors 0 through numPart-1 to indicate which partition the vertices are in. Returns -1 if options are not set, -2 if metis failed.
This is the method invoked to partition the graph into numPart
partitions. On completion of the routine each vertex will be assigned a color \(1\) through numPart
, the color assigned indicating the partition to which the vertex belongs.
To partition a number of integer arrays are created, {options[5]}, {partition[numVertex+1]}, {xadj[numVertex+1]} and {adjncy[2*numEdge]} (CURRENTLY ASSUMING GRAPH IS SYMMETRIC - THIS MAY CHANGE & xadj and partition 1 LARGER THAN REQUIRED). If not enough memory is available for the arrays, a warning message is printed and \(-2\) is returned. The data for xadj
and adjncy
are determined from the Vertices of the Graph by iterating over each Vertex from \(0\) through numVertex
\(-1\). If default options are specified {options[0]} is set to \(0\), otherwise \(1\) with {options[1:4] = coarsenTo, mType, ipType, rType}. if pType
equals \(1\) PMETIS
is called, otherwise KMETIS
is called. Both are called with the following arguments: {numVertex, xadj,adjncy, 0, 0, &weightFlag, options, numPart, &numbering, &edgecut, partition} The colors of the partitions are then set equal to the color indicated in partition
. The integer arrays are destroyed and \(0\) returned.
Implements XC::GraphPartitioner.
|
virtual |
Method invoked to partition the graph.
This is the method invoked to partition the graph into numPart
partitions. On completion of the routine each vertex will be assigned a color \(1\) through numPart
, the color assigned indicating the partition to which the vertex belongs. Returns a 0 if successful, a negative number if not; the value depending on the subclass.
Implements XC::GraphPartitioner.
|
virtual |
Receive the object.
Each object has to receive the data needed to be able to recreate itself in the new process after it has been sent through cp
. If the object is an aggregation containing other objects, new objects of the correct type can be constructed using #theBroker. To return 0 if successful or a -1 if not.
Implements XC::MovableObject.
|
virtual |
Send the object.
Each object has to send the data needed to be able to reproduce that object in a remote process. The object uses the methods provided by cp
object to send the data to another channel at the remote actor, the address of the channel is set before this method is called. An object of similar type at the remote actor is invoked with a receiveSelf() to receive the data. Returns 0 if successful (successful in that the data got to the channel), or a - if no data was sent.
Implements XC::MovableObject.
bool XC::Metis::setOptions | ( | int | Ptype, |
int | Mtype, | ||
int | coarsenTo, | ||
int | Rtype, | ||
int | IPtype | ||
) |
Sets the options for the partitioning to those passed as arguments.
Then invokes checkOptions() to see if the options are valid. HOW ABOUT REFERRINGR TO MANUAL TO SEE WHAT OPTIONS MEAN.