19 #ifndef LIBMESH_CENTROID_PARTITIONER_H 20 #define LIBMESH_CENTROID_PARTITIONER_H 23 #include "libmesh/partitioner.h" 24 #include "libmesh/point.h" 90 virtual std::unique_ptr<Partitioner>
clone ()
const override 92 return std::make_unique<CentroidPartitioner>(*this);
111 const unsigned int n)
override;
119 const unsigned int n)
override;
133 static bool sort_x (
const std::pair<Point, Elem *> & lhs,
134 const std::pair<Point, Elem *> & rhs);
140 static bool sort_y (
const std::pair<Point, Elem *> & lhs,
141 const std::pair<Point, Elem *> & rhs);
147 static bool sort_z (
const std::pair<Point, Elem *> & lhs,
148 const std::pair<Point, Elem *> & rhs);
154 static bool sort_radial (
const std::pair<Point, Elem *> & lhs,
155 const std::pair<Point, Elem *> & rhs);
171 #endif // LIBMESH_CENTROID_PARTITIONER_H The definition of the element_iterator struct.
virtual void _do_partition(MeshBase &mesh, const unsigned int n) override
Partitions the mesh into n subdomains.
CentroidSortMethod
A typedef which controls the sorting method used for ordering the vertex averages.
The libMesh namespace provides an interface to certain functionality in the library.
This is the MeshBase class.
The Partitioner class provides a uniform interface for partitioning algorithms.
CentroidPartitioner & operator=(const CentroidPartitioner &)=default
virtual PartitionerType type() const override
virtual void partition_range(MeshBase &mesh, MeshBase::element_iterator it, MeshBase::element_iterator end, const unsigned int n) override
Called by the SubdomainPartitioner to partition elements in the range (it, end).
PartitionerType
Defines an enum for mesh partitioner types.
virtual ~CentroidPartitioner()=default
Partitions the Mesh based on the locations of element vertex averages.
static bool sort_radial(const std::pair< Point, Elem *> &lhs, const std::pair< Point, Elem *> &rhs)
Helper function which sorts by the vertex averages's distance from the origin in the internal std::so...
std::vector< std::pair< Point, Elem * > > _elem_vertex_avgs
Vector which holds pairs of vertex averages and their respective element pointers.
static bool sort_y(const std::pair< Point, Elem *> &lhs, const std::pair< Point, Elem *> &rhs)
Helper function which sorts by the vertex average's y-coordinate in the internal std::sort call...
void set_sort_method(const CentroidSortMethod sm)
Setter for the current sorting method.
CentroidSortMethod _sort_method
Flag indicating the type of sort method we are using.
CentroidSortMethod sort_method() const
Getter for the current sorting method.
static bool sort_x(const std::pair< Point, Elem *> &lhs, const std::pair< Point, Elem *> &rhs)
Helper function which sorts by the vertex average's x-coordinate in the internal std::sort call...
void compute_vertex_avgs(MeshBase::element_iterator it, MeshBase::element_iterator end)
Computes a list of element vertex averages for the mesh.
virtual std::unique_ptr< Partitioner > clone() const override
static bool sort_z(const std::pair< Point, Elem *> &lhs, const std::pair< Point, Elem *> &rhs)
Helper function which sorts by the vertex average's z-coordinate in the internal std::sort call...
CentroidPartitioner(const CentroidSortMethod sm=X)
Constructor.