DOLFINx 0.9.0
DOLFINx C++ interface
Loading...
Searching...
No Matches
ElementDofLayout.h
1// Copyright (C) 2019 Chris Richardson and Garth N. Wells
2//
3// This file is part of DOLFINx (https://www.fenicsproject.org)
4//
5// SPDX-License-Identifier: LGPL-3.0-or-later
6
7#pragma once
8
9#include <array>
10#include <span>
11#include <vector>
12
13namespace dolfinx::mesh
14{
15enum class CellType;
16}
17
18namespace dolfinx::fem
19{
20
21// TODO: For this class/concept to be robust, the topology of the
22// reference cell needs to be defined.
23//
24// TODO: Handle block dofmaps properly
25
30{
31public:
42 int block_size,
43 const std::vector<std::vector<std::vector<int>>>& entity_dofs,
44 const std::vector<std::vector<std::vector<int>>>& entity_closure_dofs,
45 const std::vector<int>& parent_map,
46 const std::vector<ElementDofLayout>& sub_layouts);
47
49 ElementDofLayout copy() const;
50
52 ElementDofLayout(const ElementDofLayout& dofmap) = default;
53
56
58 ~ElementDofLayout() = default;
59
61 ElementDofLayout& operator=(const ElementDofLayout& dofmap) = default;
62
65
70 bool operator==(const ElementDofLayout& layout) const;
71
75 int num_dofs() const;
76
80 int num_entity_dofs(int dim) const;
81
86 int num_entity_closure_dofs(int dim) const;
87
92 const std::vector<int>& entity_dofs(int dim, int entity_index) const;
93
98 const std::vector<int>& entity_closure_dofs(int dim, int entity_index) const;
99
101 const std::vector<std::vector<std::vector<int>>>& entity_dofs_all() const;
102
105 const std::vector<std::vector<std::vector<int>>>&
107
109 int num_sub_dofmaps() const;
110
112 const ElementDofLayout& sub_layout(std::span<const int> component) const;
113
117 std::vector<int> sub_view(std::span<const int> component) const;
118
120 int block_size() const;
121
125 bool is_view() const;
126
127private:
128 // Block size
129 int _block_size;
130
131 // Mapping of dofs to this ElementDofLayout's immediate parent
132 std::vector<int> _parent_map;
133
134 // Total number of dofs on this element dofmap
135 int _num_dofs;
136
137 // The number of dofs associated with each entity type
138 std::array<int, 4> _num_entity_dofs;
139
140 // The number of dofs associated with each entity type, including all
141 // connected entities of lower dimension.
142 std::array<int, 4> _num_entity_closure_dofs;
143
144 // List of dofs per entity, ordered by dimension.
145 // dof = _entity_dofs[dim][entity][i]
146 std::vector<std::vector<std::vector<int>>> _entity_dofs;
147
148 // List of dofs with connected entities of lower dimension
149 std::vector<std::vector<std::vector<int>>> _entity_closure_dofs;
150
151 // List of sub dofmaps
152 // std::vector<std::shared_ptr<const ElementDofLayout>> _sub_dofmaps;
153 std::vector<ElementDofLayout> _sub_dofmaps;
154};
155
156} // namespace dolfinx::fem
Definition ElementDofLayout.h:30
const std::vector< int > & entity_closure_dofs(int dim, int entity_index) const
Definition ElementDofLayout.cpp:80
ElementDofLayout copy() const
Copy the DOF layout, discarding any parent information.
Definition ElementDofLayout.cpp:45
int num_entity_dofs(int dim) const
Definition ElementDofLayout.cpp:63
const std::vector< int > & entity_dofs(int dim, int entity_index) const
Definition ElementDofLayout.cpp:73
std::vector< int > sub_view(std::span< const int > component) const
Definition ElementDofLayout.cpp:113
const std::vector< std::vector< std::vector< int > > > & entity_closure_dofs_all() const
Definition ElementDofLayout.cpp:92
ElementDofLayout(ElementDofLayout &&dofmap)=default
Move constructor.
bool is_view() const
Definition ElementDofLayout.cpp:140
ElementDofLayout(int block_size, const std::vector< std::vector< std::vector< int > > > &entity_dofs, const std::vector< std::vector< std::vector< int > > > &entity_closure_dofs, const std::vector< int > &parent_map, const std::vector< ElementDofLayout > &sub_layouts)
Definition ElementDofLayout.cpp:18
int num_entity_closure_dofs(int dim) const
Definition ElementDofLayout.cpp:68
~ElementDofLayout()=default
Destructor.
ElementDofLayout & operator=(ElementDofLayout &&dofmap)=default
Move assignment.
int block_size() const
Block size.
Definition ElementDofLayout.cpp:138
ElementDofLayout(const ElementDofLayout &dofmap)=default
Copy constructor.
ElementDofLayout & operator=(const ElementDofLayout &dofmap)=default
Copy assignment.
bool operator==(const ElementDofLayout &layout) const
Definition ElementDofLayout.cpp:52
const ElementDofLayout & sub_layout(std::span< const int > component) const
Get sub-dofmap given by list of components, one for each level.
Definition ElementDofLayout.cpp:100
int num_dofs() const
Definition ElementDofLayout.cpp:61
const std::vector< std::vector< std::vector< int > > > & entity_dofs_all() const
Direct access to all entity dofs (dof = _entity_dofs[dim][entity][i])
Definition ElementDofLayout.cpp:86
int num_sub_dofmaps() const
Get number of sub-dofmaps.
Definition ElementDofLayout.cpp:97
Finite element method functionality.
Definition assemble_matrix_impl.h:26
Mesh data structures and algorithms on meshes.
Definition DofMap.h:32
CellType
Cell type identifier.
Definition cell_types.h:22