HArD::Core2D
Hybrid Arbitrary Degree::Core 2D - Library to implement 2D schemes with edge and cell polynomials as unknowns
Loading...
Searching...
No Matches
ddrcore.hpp
Go to the documentation of this file.
1// Core data structures and methods required to implement the discrete de Rham sequence in 3D
2//
3// Provides:
4// - Full and partial polynomial spaces on the element, faces, and edges
5// - Generic routines to create quadrature nodes over cells and faces of the mesh
6//
7// Author: Daniele Di Pietro (daniele.di-pietro@umontpellier.fr), Jerome Droniou (jerome.droniou@monash.edu)
8//
9
10/*
11 *
12 * This library was developed around HHO methods, although some parts of it have a more
13 * general purpose. If you use this code or part of it in a scientific publication,
14 * please mention the following book as a reference for the underlying principles
15 * of HHO schemes:
16 *
17 * The Hybrid High-Order Method for Polytopal Meshes: Design, Analysis, and Applications.
18 * D. A. Di Pietro and J. Droniou. Modeling, Simulation and Applications, vol. 19.
19 * Springer International Publishing, 2020, xxxi + 525p. doi: 10.1007/978-3-030-37203-3.
20 * url: https://hal.archives-ouvertes.fr/hal-02151813.
21 *
22 */
23
24/*
25 * The DDR sequence has been designed in
26 *
27 * Fully discrete polynomial de Rham sequences of arbitrary degree on polygons and polyhedra.
28 * D. A. Di Pietro, J. Droniou, and F. Rapetti, 33p, 2019. url: https://arxiv.org/abs/1911.03616.
29 *
30 * If you use this code in a scientific publication, please mention the above article.
31 *
32 */
33
34
35#ifndef DDRCORE_HPP
36#define DDRCORE_HPP
37
38#include <memory>
39#include <iostream>
40
41#include <basis.hpp>
43
50namespace HArDCore2D
51{
52
59 //------------------------------------------------------------------------------
60
62 class DDRCore
63 {
64 public:
65 // Types for element bases
72
73 // Type for edge basis
75
77
80 struct CellBases
81 {
83 typedef Cell GeometricSupport;
84
85 std::unique_ptr<PolyBasisCellType> Polykpo;
86 std::unique_ptr<PolyBasisCellType> Polyk;
87 std::unique_ptr<PolyBasisCellType> Polykmo;
88 std::unique_ptr<PolyBasisCellType> Polykmtwo;
89 std::unique_ptr<Poly2BasisCellType> Polyk2;
90 //NEW
91 std::unique_ptr<Poly2BasisCellType> Polykmo2;
92 //ENDNEW
93 std::unique_ptr<RolyBasisCellType> Rolykmo;
94 std::unique_ptr<RolyComplBasisCellType> RolyComplk;
95 std::unique_ptr<RolyComplBasisCellType> RolyComplkmo;
96 std::unique_ptr<RolyComplBasisCellType> RolyComplkp2;
97 std::unique_ptr<GolyComplBasisCellType> GolyComplkp2;
98 };
99
101
103 {
105 typedef Edge GeometricSupport;
106
107 std::unique_ptr<PolyBasisEdgeType> Polykpo;
108 std::unique_ptr<PolyBasisEdgeType> Polyk;
109 std::unique_ptr<PolyBasisEdgeType> Polykmo;
110 };
111
113 DDRCore(const Mesh & mesh, size_t K, bool use_threads = true, std::ostream & output = std::cout);
114
116 const Mesh & mesh() const
117 {
118 return m_mesh;
119 }
120
122 const size_t & degree() const
123 {
124 return m_K;
125 }
126
128 inline const CellBases & cellBases(size_t iT) const
129 {
130 // Make sure that the basis has been created
131 assert( m_cell_bases[iT] );
132 return *m_cell_bases[iT].get();
133 }
134
136 inline const EdgeBases & edgeBases(size_t iE) const
137 {
138 // Make sure that the basis has been created
139 assert( m_edge_bases[iE] );
140 return *m_edge_bases[iE].get();
141 }
142
143 private:
145 CellBases _construct_cell_bases(size_t iT);
146
148 EdgeBases _construct_edge_bases(size_t iE);
149
150 // Pointer to the mesh
151 const Mesh & m_mesh;
152 // Degree
153 const size_t m_K;
154 // Output stream
155 std::ostream & m_output;
156
157 // Cell bases
158 std::vector<std::unique_ptr<CellBases> > m_cell_bases;
159 // Edge bases
160 std::vector<std::unique_ptr<EdgeBases> > m_edge_bases;
161
162 };
163
164} // end of namespace HArDCore2D
165
166#endif // DDRCORE_HPP
Construct all polynomial spaces for the DDR sequence.
Definition ddrcore.hpp:63
Definition basis.hpp:313
Vector family obtained by tensorization of a scalar family.
Definition basis.hpp:561
Definition Mesh2D.hpp:26
Family< RolyComplBasisCell > RolyComplBasisCellType
Definition ddrcore.hpp:71
const Mesh & mesh() const
Return a const reference to the mesh.
Definition ddrcore.hpp:116
std::unique_ptr< RolyComplBasisCellType > RolyComplkp2
Definition ddrcore.hpp:96
std::unique_ptr< PolyBasisEdgeType > Polykmo
Definition ddrcore.hpp:109
Family< MonomialScalarBasisEdge > PolyBasisEdgeType
Definition ddrcore.hpp:74
const size_t & degree() const
Return the polynomial degree.
Definition ddrcore.hpp:122
Family< GolyComplBasisCell > GolyComplBasisCellType
Definition ddrcore.hpp:69
std::unique_ptr< Poly2BasisCellType > Polykmo2
Definition ddrcore.hpp:91
std::unique_ptr< PolyBasisEdgeType > Polykpo
Definition ddrcore.hpp:107
Family< GradientBasis< ShiftedBasis< MonomialScalarBasisCell > > > GolyBasisCellType
Definition ddrcore.hpp:68
std::unique_ptr< RolyComplBasisCellType > RolyComplkmo
Definition ddrcore.hpp:95
Edge GeometricSupport
Geometric support.
Definition ddrcore.hpp:105
std::unique_ptr< GolyComplBasisCellType > GolyComplkp2
Definition ddrcore.hpp:97
std::unique_ptr< PolyBasisCellType > Polykpo
Definition ddrcore.hpp:85
const CellBases & cellBases(size_t iT) const
Return cell bases for element iT.
Definition ddrcore.hpp:128
std::unique_ptr< RolyComplBasisCellType > RolyComplk
Definition ddrcore.hpp:94
Family< MonomialScalarBasisCell > PolyBasisCellType
Definition ddrcore.hpp:66
std::unique_ptr< PolyBasisCellType > Polykmo
Definition ddrcore.hpp:87
std::unique_ptr< PolyBasisCellType > Polykmtwo
Definition ddrcore.hpp:88
std::unique_ptr< RolyBasisCellType > Rolykmo
Definition ddrcore.hpp:93
Family< CurlBasis< ShiftedBasis< MonomialScalarBasisCell > > > RolyBasisCellType
Definition ddrcore.hpp:70
std::unique_ptr< Poly2BasisCellType > Polyk2
Definition ddrcore.hpp:89
const EdgeBases & edgeBases(size_t iE) const
Return edge bases for edge iE.
Definition ddrcore.hpp:136
TensorizedVectorFamily< PolyBasisCellType, 2 > Poly2BasisCellType
Definition ddrcore.hpp:67
Cell GeometricSupport
Geometric support.
Definition ddrcore.hpp:83
std::unique_ptr< PolyBasisEdgeType > Polyk
Definition ddrcore.hpp:108
std::unique_ptr< PolyBasisCellType > Polyk
Definition ddrcore.hpp:86
bool use_threads
Definition HHO_DiffAdvecReac.hpp:47
size_t K
Definition HHO_DiffAdvecReac.hpp:46
Definition ddr-klplate.hpp:27
Structure to store element bases.
Definition ddrcore.hpp:81
Structure to store edge bases.
Definition ddrcore.hpp:103