21#ifndef __MESH_CONNECTIVITY_H
22#define __MESH_CONNECTIVITY_H
25#include <dolfin/log/log.h>
59 {
return _connections.empty(); }
63 {
return _connections.size(); }
66 std::size_t
size(std::size_t entity)
const
68 return (entity + 1) < index_to_position.size()
69 ? index_to_position[entity + 1] - index_to_position[entity] : 0;
75 if (_num_global_connections.empty())
79 dolfin_assert(entity < _num_global_connections.size());
80 return _num_global_connections[entity];
85 const unsigned int*
operator() (std::size_t entity)
const
87 return (entity + 1) < index_to_position.size()
88 ? &_connections[index_to_position[entity]] : 0;
93 {
return _connections; }
100 void init(std::size_t num_entities, std::size_t num_connections);
104 void init(std::vector<std::size_t>& num_connections);
107 void set(std::size_t entity, std::size_t connection, std::size_t pos);
112 void set(std::size_t entity,
const T& connections)
114 dolfin_assert((entity + 1) < index_to_position.size());
115 dolfin_assert(connections.size()
116 == index_to_position[entity + 1]-index_to_position[entity]);
119 std::copy(connections.begin(), connections.end(),
120 _connections.begin() + index_to_position[entity]);
124 void set(std::size_t entity, std::size_t* connections);
129 template <
typename T>
130 void set(
const T& connections)
136 index_to_position.resize(connections.size() + 1);
137 std::int32_t
size = 0;
138 for (std::size_t e = 0; e < connections.size(); e++)
140 index_to_position[e] =
size;
141 size += connections[e].size();
143 index_to_position[connections.size()] =
size;
146 _connections.reserve(
size);
147 for (
auto e = connections.begin(); e != connections.end(); ++e)
148 _connections.insert(_connections.end(), e->begin(), e->end());
150 _connections.shrink_to_fit();
157 dolfin_assert(num_global_connections.size()
158 == index_to_position.size() - 1);
159 _num_global_connections = num_global_connections;
163 std::size_t
hash()
const;
166 std::string
str(
bool verbose)
const;
171 std::size_t _d0, _d1;
174 std::vector<unsigned int> _connections;
178 std::vector<unsigned int> _num_global_connections;
181 std::vector<unsigned int> index_to_position;
Definition MeshConnectivity.h:42
std::size_t size() const
Return total number of connections.
Definition MeshConnectivity.h:62
const std::vector< unsigned int > & operator()() const
Return contiguous array of connections for all entities.
Definition MeshConnectivity.h:92
std::size_t hash() const
Hash of connections.
Definition MeshConnectivity.cpp:128
void set(std::size_t entity, const T &connections)
Definition MeshConnectivity.h:112
bool empty() const
Return true if the total number of connections is equal to zero.
Definition MeshConnectivity.h:58
void set(const T &connections)
Definition MeshConnectivity.h:130
void clear()
Clear all data.
Definition MeshConnectivity.cpp:61
MeshConnectivity(std::size_t d0, std::size_t d1)
Create empty connectivity between given dimensions (d0 – d1)
Definition MeshConnectivity.cpp:31
std::string str(bool verbose) const
Return informal string representation (pretty-print)
Definition MeshConnectivity.cpp:135
void set_global_size(const std::vector< unsigned int > &num_global_connections)
Set global number of connections for all local entities.
Definition MeshConnectivity.h:155
std::size_t size(std::size_t entity) const
Return number of connections for given entity.
Definition MeshConnectivity.h:66
void set(std::size_t entity, std::size_t connection, std::size_t pos)
Set given connection for given entity.
Definition MeshConnectivity.cpp:107
const MeshConnectivity & operator=(const MeshConnectivity &connectivity)
Assignment.
Definition MeshConnectivity.cpp:49
~MeshConnectivity()
Destructor.
Definition MeshConnectivity.cpp:43
void init(std::size_t num_entities, std::size_t num_connections)
Definition MeshConnectivity.cpp:67
std::size_t size_global(std::size_t entity) const
Return global number of connections for given entity.
Definition MeshConnectivity.h:73