Loading [MathJax]/extensions/tex2jax.js
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#include "Node.h"
18
19namespace MeshLib
20{
31{
32public:
33 explicit NodeAdjacencyTable(Mesh const& mesh) { createTable(mesh); }
34
35 std::size_t size() const { return _data.size(); }
36
37 std::size_t getNodeDegree(std::size_t const node_id) const
38 {
39 return _data[node_id].size();
40 }
41
42 std::vector<std::size_t> const& getAdjacentNodes(
43 std::size_t const node_id) const
44 {
45 return _data[node_id];
46 }
47
48 void createTable(Mesh const& mesh)
49 {
50 _data.resize(mesh.getNumberOfNodes());
51
52 auto const& connections =
54 for (auto const node_id : mesh.getNodes() | MeshLib::views::ids)
55 {
56 auto const& connected_nodes = connections[node_id];
57 std::vector<std::size_t>& row = _data[node_id];
58 row.reserve(connected_nodes.size());
59 std::transform(connected_nodes.cbegin(), connected_nodes.cend(),
60 std::back_inserter(row),
61 [](Node const* const n) { return n->getID(); });
62 }
63 }
64
65private:
66 std::vector<std::vector<std::size_t>> _data;
67};
68
69} // namespace MeshLib
Definition of the Mesh class.
Definition of the Node class.
std::vector< Node * > const & getNodes() const
Get the nodes-vector for the mesh.
Definition Mesh.h:108
std::size_t getNumberOfNodes() const
Get the number of nodes.
Definition Mesh.h:102
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
constexpr ranges::views::view_closure ids
For an element of a range view return its id.
Definition Mesh.h:227
std::vector< std::vector< Node * > > calculateNodesConnectedByElements(Mesh const &mesh)
Definition Mesh.cpp:308