HArD::Core3D
Hybrid Arbitrary Degree::Core 3D - Library to implement 3D schemes with vertex, edge, face and cell polynomials as unknowns
Loading...
Searching...
No Matches
vemcore.hpp
Go to the documentation of this file.
1// Core data structures and methods required to implement the de Rham VEM sequence in 3D
2//
3// Provides:
4// - Full and partial polynomial spaces on the element, faces, and edges
5//
6// Author: Jerome Droniou (jerome.droniou@monash.edu)
7//
8
9
10
11#ifndef VEMCORE_HPP
12#define VEMCORE_HPP
13
14#include <memory>
15#include <iostream>
16
17#include <basis.hpp>
19
26namespace HArDCore3D
27{
28
35 //------------------------------------------------------------------------------
36
38 class VEMCore
39 {
40 public:
41 // Types for element bases
48
49 // Types for face bases
54
55 // Type for edge basis
57
59
62 struct CellBases
63 {
65 typedef Cell GeometricSupport;
66
67 std::unique_ptr<PolyBasisCellType> Polykpo;
68 std::unique_ptr<PolyBasisCellType> Polyk;
69 std::unique_ptr<PolyBasisCellType> Polykmo;
70 std::unique_ptr<ShiftedBasis<PolyBasisCellType> > Polyk0;
71 std::unique_ptr<ShiftedBasis<PolyBasisCellType> > Polykpo0;
72 std::unique_ptr<Poly3BasisCellType> Polyk3;
73 std::unique_ptr<GolyBasisCellType> Golykmo;
74 std::unique_ptr<GolyComplBasisCellType> GolyComplk;
75 std::unique_ptr<GolyComplBasisCellType> GolyComplkpo;
76 std::unique_ptr<RolyBasisCellType> Rolykmo;
77 std::unique_ptr<RolyComplBasisCellType> RolyComplk;
78 std::unique_ptr<RolyComplBasisCellType> RolyComplkp2;
79 };
80
82
83 struct FaceBases
84 {
86 typedef Face GeometricSupport;
87
88 std::unique_ptr<PolyBasisFaceType> Polykp2;
89 std::unique_ptr<PolyBasisFaceType> Polykpo;
90 std::unique_ptr<PolyBasisFaceType> Polyk;
91 std::unique_ptr<PolyBasisFaceType> Polykmo;
92 std::unique_ptr<ShiftedBasis<PolyBasisFaceType> > Polyk0;
93 std::unique_ptr<TangentFamily<PolyBasisFaceType>> Polykpo2;
94 std::unique_ptr<Poly2BasisFaceType> Polyk2;
95 std::unique_ptr<RolyBasisFaceType> Rolykmo;
96 std::unique_ptr<RolyComplBasisFaceType> RolyComplkmo;
97 std::unique_ptr<RolyComplBasisFaceType> RolyComplk;
98 std::unique_ptr<RolyComplBasisFaceType> RolyComplkpo;
99 };
100
102
104 {
106 typedef Edge GeometricSupport;
107
108 std::unique_ptr<PolyBasisEdgeType> Polykpo;
109 std::unique_ptr<PolyBasisEdgeType> Polyk;
110 std::unique_ptr<PolyBasisEdgeType> Polykmo;
111 };
112
114 VEMCore(const Mesh & mesh, size_t K, bool use_threads = true, std::ostream & output = std::cout);
115
117 const Mesh & mesh() const
118 {
119 return m_mesh;
120 }
121
123 const size_t & degree() const
124 {
125 return m_K;
126 }
127
129 inline const CellBases & cellBases(size_t iT) const
130 {
131 // Make sure that the basis has been created
132 assert( m_cell_bases[iT] );
133 return *m_cell_bases[iT].get();
134 }
135
137 inline const FaceBases & faceBases(size_t iF) const
138 {
139 // Make sure that the basis has been created
140 assert( m_face_bases[iF] );
141 return *m_face_bases[iF].get();
142 }
143
145 inline const EdgeBases & edgeBases(size_t iE) const
146 {
147 // Make sure that the basis has been created
148 assert( m_edge_bases[iE] );
149 return *m_edge_bases[iE].get();
150 }
151
152 private:
154 CellBases _construct_cell_bases(size_t iT);
155
157 FaceBases _construct_face_bases(size_t iF);
158
160 EdgeBases _construct_edge_bases(size_t iE);
161
162 // Pointer to the mesh
163 const Mesh & m_mesh;
164 // Degree
165 const size_t m_K;
166 // Output stream
167 std::ostream & m_output;
168
169 // Cell bases
170 std::vector<std::unique_ptr<CellBases> > m_cell_bases;
171 // Face bases
172 std::vector<std::unique_ptr<FaceBases> > m_face_bases;
173 // Edge bases
174 std::vector<std::unique_ptr<EdgeBases> > m_edge_bases;
175
176 };
177
178} // end of namespace HArDCore3D
179
180#endif // VEMCORE_HPP
Family of functions expressed as linear combination of the functions of a given basis.
Definition basis.hpp:389
Vector family for polynomial functions that are tangent to a certain place (determined by the generat...
Definition basis.hpp:948
Vector family obtained by tensorization of a scalar family.
Definition basis.hpp:610
Construct all polynomial spaces for the VEM sequence.
Definition vemcore.hpp:39
Class to describe a mesh.
Definition MeshND.hpp:17
@ Matrix
Definition basis.hpp:67
bool use_threads
Definition HHO_DiffAdvecReac.hpp:47
size_t K
Definition HHO_DiffAdvecReac.hpp:46
std::unique_ptr< Poly2BasisFaceType > Polyk2
Definition vemcore.hpp:94
std::unique_ptr< PolyBasisCellType > Polykmo
Definition vemcore.hpp:69
Face GeometricSupport
Geometric support.
Definition vemcore.hpp:86
std::unique_ptr< RolyBasisFaceType > Rolykmo
Definition vemcore.hpp:95
std::unique_ptr< RolyComplBasisCellType > RolyComplkp2
Definition vemcore.hpp:78
const EdgeBases & edgeBases(size_t iE) const
Return edge bases for edge iE.
Definition vemcore.hpp:145
std::unique_ptr< PolyBasisEdgeType > Polykmo
Definition vemcore.hpp:110
std::unique_ptr< PolyBasisEdgeType > Polyk
Definition vemcore.hpp:109
std::unique_ptr< TangentFamily< PolyBasisFaceType > > Polykpo2
Definition vemcore.hpp:93
const size_t & degree() const
Return the polynomial degree.
Definition vemcore.hpp:123
const CellBases & cellBases(size_t iT) const
Return cell bases for element iT.
Definition vemcore.hpp:129
Family< MonomialScalarBasisEdge > PolyBasisEdgeType
Definition vemcore.hpp:56
Family< MonomialScalarBasisFace > PolyBasisFaceType
Definition vemcore.hpp:50
std::unique_ptr< ShiftedBasis< PolyBasisFaceType > > Polyk0
Definition vemcore.hpp:92
std::unique_ptr< PolyBasisFaceType > Polykpo
Definition vemcore.hpp:89
const Mesh & mesh() const
Return a const reference to the mesh.
Definition vemcore.hpp:117
std::unique_ptr< RolyComplBasisFaceType > RolyComplkpo
Definition vemcore.hpp:98
std::unique_ptr< RolyComplBasisCellType > RolyComplk
Definition vemcore.hpp:77
std::unique_ptr< GolyComplBasisCellType > GolyComplkpo
Definition vemcore.hpp:75
std::unique_ptr< GolyBasisCellType > Golykmo
Definition vemcore.hpp:73
TensorizedVectorFamily< PolyBasisCellType, 3 > Poly3BasisCellType
Definition vemcore.hpp:43
Family< GradientBasis< ShiftedBasis< MonomialScalarBasisCell > > > GolyBasisCellType
Definition vemcore.hpp:44
std::unique_ptr< PolyBasisFaceType > Polykmo
Definition vemcore.hpp:91
std::unique_ptr< GolyComplBasisCellType > GolyComplk
Definition vemcore.hpp:74
std::unique_ptr< RolyComplBasisFaceType > RolyComplk
Definition vemcore.hpp:97
std::unique_ptr< PolyBasisCellType > Polyk
Definition vemcore.hpp:68
Edge GeometricSupport
Geometric support.
Definition vemcore.hpp:106
std::unique_ptr< Poly3BasisCellType > Polyk3
Definition vemcore.hpp:72
std::unique_ptr< PolyBasisFaceType > Polyk
Definition vemcore.hpp:90
std::unique_ptr< PolyBasisFaceType > Polykp2
Definition vemcore.hpp:88
const FaceBases & faceBases(size_t iF) const
Return face bases for face iF.
Definition vemcore.hpp:137
std::unique_ptr< ShiftedBasis< PolyBasisCellType > > Polykpo0
Definition vemcore.hpp:71
std::unique_ptr< RolyComplBasisFaceType > RolyComplkmo
Definition vemcore.hpp:96
std::unique_ptr< PolyBasisEdgeType > Polykpo
Definition vemcore.hpp:108
Family< RolyComplBasisFace > RolyComplBasisFaceType
Definition vemcore.hpp:53
Cell GeometricSupport
Geometric support.
Definition vemcore.hpp:65
std::unique_ptr< RolyBasisCellType > Rolykmo
Definition vemcore.hpp:76
Family< CurlBasis< GolyComplBasisCell > > RolyBasisCellType
Definition vemcore.hpp:46
std::unique_ptr< ShiftedBasis< PolyBasisCellType > > Polyk0
Definition vemcore.hpp:70
Family< RolyComplBasisCell > RolyComplBasisCellType
Definition vemcore.hpp:47
Family< GolyComplBasisCell > GolyComplBasisCellType
Definition vemcore.hpp:45
std::unique_ptr< PolyBasisCellType > Polykpo
Definition vemcore.hpp:67
Family< CurlBasis< ShiftedBasis< MonomialScalarBasisFace > > > RolyBasisFaceType
Definition vemcore.hpp:52
Family< MonomialScalarBasisCell > PolyBasisCellType
Definition vemcore.hpp:42
TangentFamily< PolyBasisFaceType > Poly2BasisFaceType
Definition vemcore.hpp:51
Definition ddr-magnetostatics.hpp:41
Structure to store element bases.
Definition vemcore.hpp:63
Structure to store edge bases.
Definition vemcore.hpp:104
Structure to store face bases.
Definition vemcore.hpp:84