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> RolyComplkp2;
96 std::unique_ptr<GolyComplBasisCellType> GolyComplkp2;
97 };
98
100
102 {
104 typedef Edge GeometricSupport;
105
106 std::unique_ptr<PolyBasisEdgeType> Polykpo;
107 std::unique_ptr<PolyBasisEdgeType> Polyk;
108 std::unique_ptr<PolyBasisEdgeType> Polykmo;
109 };
110
112 DDRCore(const Mesh & mesh, size_t K, bool use_threads = true, std::ostream & output = std::cout);
113
115 const Mesh & mesh() const
116 {
117 return m_mesh;
118 }
119
121 const size_t & degree() const
122 {
123 return m_K;
124 }
125
127 inline const CellBases & cellBases(size_t iT) const
128 {
129 // Make sure that the basis has been created
130 assert( m_cell_bases[iT] );
131 return *m_cell_bases[iT].get();
132 }
133
135 inline const EdgeBases & edgeBases(size_t iE) const
136 {
137 // Make sure that the basis has been created
138 assert( m_edge_bases[iE] );
139 return *m_edge_bases[iE].get();
140 }
141
142 private:
144 CellBases _construct_cell_bases(size_t iT);
145
147 EdgeBases _construct_edge_bases(size_t iE);
148
149 // Pointer to the mesh
150 const Mesh & m_mesh;
151 // Degree
152 const size_t m_K;
153 // Output stream
154 std::ostream & m_output;
155
156 // Cell bases
157 std::vector<std::unique_ptr<CellBases> > m_cell_bases;
158 // Edge bases
159 std::vector<std::unique_ptr<EdgeBases> > m_edge_bases;
160
161 };
162
163} // end of namespace HArDCore2D
164
165#endif // DDRCORE_HPP
Construct all polynomial spaces for the DDR sequence.
Definition ddrcore.hpp:63
Definition basis.hpp:311
Vector family obtained by tensorization of a scalar family.
Definition basis.hpp:559
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:115
std::unique_ptr< RolyComplBasisCellType > RolyComplkp2
Definition ddrcore.hpp:95
std::unique_ptr< PolyBasisEdgeType > Polykmo
Definition ddrcore.hpp:108
Family< MonomialScalarBasisEdge > PolyBasisEdgeType
Definition ddrcore.hpp:74
const size_t & degree() const
Return the polynomial degree.
Definition ddrcore.hpp:121
Family< GolyComplBasisCell > GolyComplBasisCellType
Definition ddrcore.hpp:69
std::unique_ptr< Poly2BasisCellType > Polykmo2
Definition ddrcore.hpp:91
std::unique_ptr< PolyBasisEdgeType > Polykpo
Definition ddrcore.hpp:106
Family< GradientBasis< ShiftedBasis< MonomialScalarBasisCell > > > GolyBasisCellType
Definition ddrcore.hpp:68
Edge GeometricSupport
Geometric support.
Definition ddrcore.hpp:104
std::unique_ptr< GolyComplBasisCellType > GolyComplkp2
Definition ddrcore.hpp:96
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:127
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:135
TensorizedVectorFamily< PolyBasisCellType, 2 > Poly2BasisCellType
Definition ddrcore.hpp:67
Cell GeometricSupport
Geometric support.
Definition ddrcore.hpp:83
std::unique_ptr< PolyBasisEdgeType > Polyk
Definition ddrcore.hpp:107
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:102