OGS
NodePartitionedMesh.cpp
Go to the documentation of this file.
1
12#include "NodePartitionedMesh.h"
13
14namespace MeshLib
15{
16std::vector<int> getEndNodeIDRanks(
17 std::size_t const n_global_nodes,
18 std::vector<std::size_t> const& n_regular_base_nodes_at_rank,
19 std::vector<std::size_t> const& n_regular_high_order_nodes_at_rank)
20{
21 std::vector<int> data;
22
23 std::transform(n_regular_base_nodes_at_rank.begin() + 1,
24 n_regular_base_nodes_at_rank.end(),
25 n_regular_high_order_nodes_at_rank.begin() + 1,
26 std::back_inserter(data), std::plus<int>());
27
28 data.push_back(n_global_nodes);
29
30 return data;
31}
32
34 const std::string& name,
35 const std::vector<Node*>& nodes,
36 const std::vector<std::size_t>& glb_node_ids,
37 const std::vector<Element*>& elements,
38 Properties const& properties,
39 const std::size_t n_global_base_nodes,
40 const std::size_t n_global_nodes,
41 const std::size_t n_regular_nodes,
42 std::vector<std::size_t>&& n_regular_base_nodes_at_rank,
43 std::vector<std::size_t>&& n_regular_high_order_nodes_at_rank)
44 : Mesh(name, nodes, elements, properties),
45 _global_node_ids(glb_node_ids),
46 _n_global_base_nodes(n_global_base_nodes),
47 _n_global_nodes(n_global_nodes),
48 _n_regular_nodes(n_regular_nodes),
49 _n_regular_base_nodes_at_rank(std::move(n_regular_base_nodes_at_rank)),
50 _n_regular_high_order_nodes_at_rank(
51 std::move(n_regular_high_order_nodes_at_rank)),
52 _end_node_id_at_rank(
53 getEndNodeIDRanks(n_global_nodes, _n_regular_base_nodes_at_rank,
54 _n_regular_high_order_nodes_at_rank)),
55 _is_single_thread(false)
56{
57}
58
59bool NodePartitionedMesh::isGhostNode(const std::size_t node_id) const
60{
61 return node_id >= _n_regular_nodes;
62}
63
65{
66 auto const& nodes_connections =
68 auto const max_connections = std::max_element(
69 nodes_connections.cbegin(), nodes_connections.cend(),
70 [](auto const& connections_node_a, auto const& connections_node_b)
71 { return (connections_node_a.size() < connections_node_b.size()); });
72 // Return the number of connected nodes +1 for the node itself.
73 return static_cast<std::size_t>(max_connections->size() + 1);
74}
75
77 const std::size_t global_node_id) const
78{
79 return std::upper_bound(std::cbegin(_end_node_id_at_rank),
80 std::cend(_end_node_id_at_rank),
81 global_node_id) -
83}
84} // namespace MeshLib
Definition of mesh class for partitioned mesh (by node) for parallel computing within the framework o...
std::size_t getPartitionID(const std::size_t global_node_id) const
bool isGhostNode(const std::size_t node_id) const
Check whether a node with ID of node_id is a ghost node.
std::size_t _n_regular_nodes
Number of the all regular nodes.
std::vector< int > _end_node_id_at_rank
Gathered the end node id of each rank.
NodePartitionedMesh(const Mesh &mesh)
std::size_t getMaximumNConnectedNodesToNode() const
Get the maximum number of connected nodes to node.
Property manager on mesh items. Class Properties manages scalar, vector or matrix properties....
Definition: Properties.h:36
std::vector< std::vector< Node * > > calculateNodesConnectedByElements(Mesh const &mesh)
Definition: Mesh.cpp:298
std::vector< int > getEndNodeIDRanks(std::size_t const n_global_nodes, std::vector< std::size_t > const &n_regular_base_nodes_at_rank, std::vector< std::size_t > const &n_regular_high_order_nodes_at_rank)