OGS
NodeAdjacencyTable.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include <algorithm>
7#include <vector>
8
9#include "Mesh.h"
10#include "Node.h"
11
12namespace MeshLib
13{
24{
25public:
26 explicit NodeAdjacencyTable(Mesh const& mesh) { createTable(mesh); }
27
28 std::size_t size() const { return _data.size(); }
29
30 std::size_t getNodeDegree(std::size_t const node_id) const
31 {
32 return _data[node_id].size();
33 }
34
35 std::vector<std::size_t> const& getAdjacentNodes(
36 std::size_t const node_id) const
37 {
38 return _data[node_id];
39 }
40
41 void createTable(Mesh const& mesh)
42 {
43 _data.resize(mesh.getNumberOfNodes());
44
45 auto const& connections =
47 for (auto const node_id : mesh.getNodes() | MeshLib::views::ids)
48 {
49 auto const& connected_nodes = connections[node_id];
50 std::vector<std::size_t>& row = _data[node_id];
51 row.reserve(connected_nodes.size());
52 std::transform(connected_nodes.cbegin(), connected_nodes.cend(),
53 std::back_inserter(row),
54 [](Node const* const n) { return n->getID(); });
55 }
56 }
57
58private:
59 std::vector<std::vector<std::size_t>> _data;
60};
61
62} // namespace MeshLib
std::vector< Node * > const & getNodes() const
Get the nodes-vector for the mesh.
Definition Mesh.h:97
std::size_t getNumberOfNodes() const
Get the number of nodes.
Definition Mesh.h:91
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:216
std::vector< std::vector< Node * > > calculateNodesConnectedByElements(Mesh const &mesh)
Definition Mesh.cpp:298