OGS
NodeAdjacencyTable.h
Go to the documentation of this file.
1 
11 #pragma once
12 
13 #include <algorithm>
14 #include <vector>
15 
16 #include "Mesh.h"
17 
18 namespace MeshLib
19 {
29 class NodeAdjacencyTable final
30 {
31 public:
32  explicit NodeAdjacencyTable(Mesh const& mesh)
33  {
34  _data.resize(mesh.getNodes().size());
35 
36  createTable(mesh);
37  }
38 
39  std::size_t size() const
40  {
41  return _data.size();
42  }
43 
44  std::size_t getNodeDegree(std::size_t const node_id) const
45  {
46  return _data[node_id].size();
47  }
48 
49  std::vector<std::size_t> const& getAdjacentNodes(
50  std::size_t const node_id) const
51  {
52  return _data[node_id];
53  }
54 
55  void createTable(Mesh const& mesh)
56  {
57  auto const& nodes = mesh.getNodes();
58  if (_data.size() != nodes.size())
59  {
60  _data.resize(nodes.size());
61  }
62 
63  auto const& connections =
65  for (auto const* node : nodes)
66  {
67  auto const node_id = node->getID();
68  auto const& connected_nodes = connections[node_id];
69  std::vector<std::size_t>& row = _data[node_id];
70  row.reserve(connected_nodes.size());
71  std::transform(connected_nodes.cbegin(), connected_nodes.cend(),
72  std::back_inserter(row),
73  [](Node const* const n) { return n->getID(); });
74  }
75  }
76 
77 private:
78  std::vector<std::vector<std::size_t>> _data;
79 };
80 
81 } // namespace MeshLib
Definition of the Mesh class.
std::vector< Node * > const & getNodes() const
Get the nodes-vector for the mesh.
Definition: Mesh.h:95
void createTable(Mesh const &mesh)
std::size_t getNodeDegree(std::size_t const node_id) const
std::vector< std::vector< std::size_t > > _data
NodeAdjacencyTable(Mesh const &mesh)
std::vector< std::size_t > const & getAdjacentNodes(std::size_t const node_id) const
std::vector< std::vector< Node * > > calculateNodesConnectedByElements(Mesh const &mesh)
Definition: Mesh.cpp:331