xc
|
Object that can partition and load balance a PartitionedDomain. More...
#include <DomainPartitioner.h>
Public Member Functions | |
DomainPartitioner (GraphPartitioner &theGraphPartitioner, LoadBalancer &theLoadBalancer) | |
Constructor. More... | |
DomainPartitioner (GraphPartitioner &theGraphPartitioner) | |
Constructor. More... | |
virtual void | setPartitionedDomain (PartitionedDomain &theDomain) |
virtual int | partition (int numParts, bool useMainDomain=false, int mainPartition=0) |
Method invoked to partition the Domain. More... | |
virtual int | balance (Graph &theWeightedSubdomainGraph) |
Load balance. More... | |
virtual int | getNumPartitions (void) const |
Returns the number of partitions in the PartitionedDomain. | |
virtual Graph & | getPartitionGraph (void) |
Return the partition graph. More... | |
virtual Graph & | getColoredGraph (void) |
Return the colored graph. More... | |
virtual int | swapVertex (int from, int to, int vertexTag, bool adjacentVertexNotInOther=true) |
Moves a vertes from subdomain from to subdomain to. More... | |
virtual int | swapBoundary (int from, int to, bool adjacentVertexNotInOther=true) |
Method to move from from to to, all elements on the interface of from that are adjacent with to. More... | |
virtual int | releaseVertex (int from, int vertexTag, Graph &theWeightedPartitionGraph, bool mustReleaseToLighter=true, double factorGreater=1.0, bool adjacentVertexNotInOther=true) |
Method which when invoked will take the element given by vertex reference of the vertex whose tag is given by vertexTag from subdomain from and place it in the subdomain to which it is most attracted (to which it is most connected). More... | |
virtual int | releaseBoundary (int from, Graph &theWeightedPartitionGraph, bool mustReleaseToLighter=true, double factorGreater=1.0, bool adjacentVertexNotInOther=true) |
Release all the elements on the boundary of subdomain from . More... | |
![]() | |
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. | |
![]() | |
EntityWithProperties (EntityWithProperties *owr=nullptr) | |
Default constructor. | |
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. | |
![]() | |
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 |
Additional Inherited Members | |
![]() | |
typedef std::map< std::string, boost::python::object > | PythonDict |
![]() | |
static void | resetStandardOutput (void) |
Reset the standard output streams to its defaults buffers. | |
![]() | |
static int | getVerbosityLevel (void) |
Get the value of the verbosity level. | |
static void | setVerbosityLevel (const int &) |
Set the value of the verbosity level. | |
![]() | |
template<class T > | |
void | string_to (T &, const std::string &) const |
![]() | |
bool | isEqual (const EntityWithProperties &) const |
Return true if both objects are equal. | |
![]() | |
virtual bool | isEqual (const EntityWithOwner &) const |
Return true if both objects are equal. | |
![]() | |
static CommandEntity * | entcmd_cast (boost::any &data) |
![]() | |
static int | verbosity = 1 |
Object that owns THIS ONE. More... | |
Object that can partition and load balance a PartitionedDomain.
A DomainPartitioner is an object used to partition and load balance a PartitionedDomain. The DomainPartitioner uses the element graph of the domain to partition and load balance. Derived types can use the node graph of the domain. The partitioner uses a GraphPartitioner and a LoadBalancingAlgo to partition and load balance the domain.
XC::DomainPartitioner::DomainPartitioner | ( | GraphPartitioner & | theGraphPartitioner, |
LoadBalancer & | theLoadBalancer | ||
) |
Constructor.
Constructs a DomainPartitioner which will use {theGraphPartitioner} to initially partition the PartitionedDomain using the element graph and the theLoadBalancer
to load balance the PartitionedDomain. The max number of subdomains that the Domain can be partitioned is currently set at 8.
XC::DomainPartitioner::DomainPartitioner | ( | GraphPartitioner & | theGraphPartitioner | ) |
Constructor.
Constructs a DomainPartitioner which will use {theGraphPartitioner} to initially partition the PartitionedDomain. The max number of subdomains that the Domain can be partitioned is currently set at 8.
|
virtual |
Load balance.
Checks first to see that the partitionFlag
has been set; if it hasn'nt an error message is printed and a \(-1\) is returned. If a LoadBalancer was passed in the constructor balance() is invoked on this object; if no LoadBalancer was passed nothing is done and method returns \(0\). If balancing is performed, the DomainPartitioner invokes hasDomainChanged() on each Subdomain; if the Subdomain has changed invokeChangeOnAnalysis(). Finally {hasDomainChanged()} is invoked on the PartitionedDomain; if it has changed invokeChangeOnAnalysis(). partitionFlag
is set to true.
Method which invokes {setPartitioner(this)} on the LoadBalancingAlgo. It then invokes {balance(load)} on this object, where load
is vector of size numParts
containing the load of each subdomain.
|
virtual |
Return the colored graph.
A method which returns the current colored graph representing the partitioning of the elements in the subdomains. Does this by invoking getElementGraph() on the PartitionedDomain. Note that this is the same graph that was colored by the DomainPartitioner in partitioning the PartitionedDomain.
|
virtual |
Return the partition graph.
Method which returns the partition graph. This is a graph with a vertex for every partition and an edge between partitions if there exists an element in one partition which is connected to an element in the other partition.
|
virtual |
Method invoked to partition the Domain.
Method invoked to partition the Domain. It first checks to see that the PartitionedDomain has at least numParts
Subdomains, with tags 1 through numParts
; if not prints an error message and returns -1. It then asks the domain for the element graph. This graph is then partitioned using the GraphPartitioner into numParts
; if partitioning fails an error message is printed and \(-10 +\) number returned from GraphPartitioner is returned. If successful the domain is partitioned according to the following rules: {itemize} All nodes which are internal to a partition are added using the addNode() method of the Subdomain. These nodes are removed from the PartionedDomain using removeNode(). External nodes (these are nodes shared across partitions as a result of element connectivity or MP_Constraints are added to those Subdomains whose elements reference them. They are added using the addExternalNode() command. SFreedom_Constraints whose node is interior to a Subdomain are removed from the PartitionedDomain and added to the Subdomain. MP_Constraints whose two nodes are interior to a Subdomain are removed from the PartitionedDomain and added to the Subdomain. The elements are sent to the partition whose tag is given by the color of the vertex in the partitioned (colored) element graph. The elements are removed from the PartitionedDomain using {removeElement()} and added to the Subdomain using addElement(). For the loads, a check is made to ensure that each Subdomain has a LoadCase with a tag equal to the tags in the LoadCases that have been added to the PartitionedDomain; if not new LoadCases are created and added to the Subdomain. It then iterates through all the NodalLoads in the LoadCases in the PartionedDomain, if the corresponding node is external the NodalLoad is removed and added to the corresponding LoadCase in the Subdomain. ELEMENTAL LOADS are not yet dealt with. {itemize}
The DomainPartitioner invokes hasDomainChanged() on each Subdomain; if the Subdomain has changed invokeChangeOnAnalysis(). Finally {hasDomainChanged()} is invoked on the PartitionedDomain; if it has changed invokeChangeOnAnalysis(). partitionFlag
is set to true.
|
virtual |
Release all the elements on the boundary of subdomain from
.
Method which when invoked will release all the elements on the boundary of subdomain from
. It performs the operation by creating an ID of all the vertices on the boundary of the from
Subdomain. Then releaseBoundary() is invoked on all these vertices.
|
virtual |
Method which when invoked will take the element given by vertex reference of the vertex whose tag is given by vertexTag
from subdomain from
and place it in the subdomain to which it is most attracted (to which it is most connected).
If it is equally attracted to two subdomains it is sent to the one with the lightest load (the loads on the subdomains are given in the {theWeightedPartitionGraph}. If the mustReleaseToLighter
is {true} a check is first made to see if the load on the intended subdomain is lighter than the load in from
and that the ratio in load between from and the new domain is greater than {factorGreater}; if this is the case the element is swapped, if not the element is not swapped. An additional requirement that the vertex that is to be swapped is not adjacent to any other partition can also be set. The method determines which partition the vertex is to be sent to and then returns the result of invoking swapVertex() on itself, with this partition used as the to
argument in the arguments.
|
virtual |
Method to move from from to to, all elements on the interface of from that are adjacent with to.
Method which when invoked will take all the boundary elements in subdomain from
that are connected to elements in subdomain {to} and place them in subdomain to
. If adjacentVertexOther
is true
no Elements which are connected to elements in subdomains other than to
and from
are moved. Returns \(0\) if successful, returns an error message and \(-1\) if PartitionedDomain has not been partitioned, \(-2\) if from
Subdomain does not exist, \(-3\) if {to Subdomain} does not exist. The Elements, Nodes, NodalLoads, SFreedom_Constraints and MP_Constraints that need to be moved between the two Subdomains, or between the PartitionedDomain and Subdomains are also moved. NO ELEMENTAL LOADS are moved yet. It performs the operation by creating an ID of vertices and then using code similar to that used in {swapVertex()}; swapVErtex() is not called repeatedly as this was found to be too slow.
|
virtual |
Moves a vertes from subdomain from to subdomain to.
Method which will take the element given by vertex reference of the vertex whose tag is given by vertexTag
from subdomain from
and place it in subdomain to
. If notAdjacentOther
is {true} a check is made to ensure that the vertex to be swapped is not adjacent to a vertex in any other partition. Returns \(0\) if successful, returns an error message and \(-1\) if PartitionedDomain has not been partitioned, \(-2\) if from
Subdomain does not exist, \(-3\) if {to Subdomain} does not exist, \(-4\) if a vertex given by tag
does not exist, returns \(-5\) if notAdjacentOther
was true and the vertex was adjacent to a vertex in another partition, and returns \(-6\) if no Element with a tag similar to tag
exists (this should not happen if element graph is built correctly). The Element, Nodes, NodalLoads, SFreedom_Constraints and MP_Constraints that need to be moved between the two Subdomains, or between the PartitionedDomain and Subdomains are also moved. NO ELEMENTAL LOADS are moved yet.