HArD::Core2D
Hybrid Arbitrary Degree::Core 2D - Library to implement 2D schemes with edge and cell polynomials as unknowns
Loading...
Searching...
No Matches
vsxgrad.hpp
Go to the documentation of this file.
1#ifndef VSXGRAD_HPP
2#define VSXGRAD_HPP
3
4#include <sxgrad.hpp>
5#include <sxcurl.hpp>
6#include <unsupported/Eigen/KroneckerProduct>
7#include <globaldofspace.hpp>
8#include <vsxcurl.hpp>
9
10
11namespace HArDCore2D
12{
19
33 {
34 public:
35 // Type of continuous functions corresponding to the discrete space VSXgrad
36 typedef std::function<Eigen::Vector2d(const Eigen::Vector2d &)> FunctionType;
37
39 {
41 const Eigen::MatrixXd & _rot,
42 const Eigen::MatrixXd & _potential
43 )
44 : rot(_rot),
45 potential(_potential)
46 {
47 // Do nothing
48 }
49
50 Eigen::MatrixXd rot;
51 Eigen::MatrixXd potential;
52 };
53
54
55 // Types for element bases
61 // Type for edge basis
64
65 // Structure to store vectorial/matrix cell bases (the scalar ones are in m_sxgrad)
66 struct CellBases
67 {
68 std::unique_ptr<Poly2BasisCellType> Polykmo2;
69 std::unique_ptr<Poly2BasisCellType> Polykptwo2;
70 std::unique_ptr<Poly2x2BasisCellType> Polykpo2x2;
71 };
72
73 // Structure to store vectorial/matrix edge bases (the scalar ones are in m_sxgrad)
74 struct EdgeBases
75 {
76 std::unique_ptr<Poly2BasisEdgeType> Polykmo2;
77 std::unique_ptr<Poly2BasisEdgeType> Polyk2;
78 std::unique_ptr<Poly2BasisEdgeType> Polykpo2;
79 std::unique_ptr<Poly2BasisEdgeType> Polykptwo2;
80 };
81
83 VSXGrad(const DDRCore & ddr_core, const SerendipityProblem & sp, bool use_threads = true, std::ostream & output = std::cout);
84
86 const Mesh & mesh() const
87 {
88 return m_sxgrad.mesh();
89 }
90
92 const SXGrad & sXgrad() const
93 {
94 return m_sxgrad;
95 }
96
98 const size_t & degree() const
99 {
100 return m_sxgrad.degree();
101 }
102
104 Eigen::VectorXd interpolate(
105 const FunctionType & q,
106 const int doe_cell = -1
107 ) const;
108
109 //---------------------------------------------------------------------//
110 //---- Gradients and potential reconstructions, and stabilisation -----//
111
112 /* Operators from sXgrad are easily extended into operators on vsXgrad using the Kronecker product
113 These extension corresponds to the abovementioned tensorized basis of sXgrad and, for the codomain,
114 to the tensorized basis of R^2 \otimes P (for P the polynomial space in which the operator of sXgrad
115 lands). We need to do a change of basis of that codomain to represent the operators in the bases
116 stored in the structures EdgeBases, FaceBases and CellBases.
117 */
118
119 //Rename spaces so that their name fit with the fact that we will take degree K+1
120
121
122 inline auto PolykE(size_t iE) const -> const PolyBasisEdgeType& {
123 return *m_sxgrad.edgeBases(iE).Polykmo;
124 }
125 inline auto PolykpoE(size_t iE) const -> const PolyBasisEdgeType& {
126 return *m_sxgrad.edgeBases(iE).Polyk;
127 }
128
129 inline auto PolykptwoE(size_t iE) const -> const PolyBasisEdgeType& {
130 return *m_sxgrad.edgeBases(iE).Polykpo;
131 }
132
133
134 inline auto Polykpo(size_t iT) const -> const PolyBasisCellType& {
135 return *m_sxgrad.cellBases(iT).Polyk;
136 }
137
138
139 inline auto Polykmo(size_t iT) const -> const PolyBasisCellType& {
140 return *m_sxgrad.cellBases(iT).Polykmtwo;
141 }
142
143
144 inline auto Polyk(size_t iT) const -> const PolyBasisCellType& {
145 return *m_sxgrad.cellBases(iT).Polykmo;
146 }
147
148
149 inline auto Polykptwo(size_t iT) const -> const PolyBasisCellType& {
150 return *m_sxgrad.cellBases(iT).Polykpo;
151 }
152
153
154 inline auto Polyk2(size_t iT) const -> const Poly2BasisCellType& {
155 return *m_sxgrad.cellBases(iT).Polykmo2;
156 }
157
158 inline auto Rolyk(size_t iT) const -> const RolyBasisCellType& {
159 return *m_sxgrad.cellBases(iT).Rolykmo;
160 }
161
162 inline auto RolyComplk(size_t iT) const -> const RolyComplBasisCellType& {
163 return *m_sxgrad.cellBases(iT).RolyComplkmo;
164 }
165
166
167
169 inline const Eigen::MatrixXd edgeGradient(size_t iE) const
170 {
171 // The codomain for the edge gradient of sXgrad is Polyk, so we need to change from
172 // R^3 \otimes Polyk to Polyk3 (which is, by construction, Polyk \otimes R^3)
173 return PermuteTensorization(m_sxgrad.edgeBases(iE).Polyk->dimension(), dimspace)
174 * Eigen::KroneckerProduct(m_sxgrad.edgeGradient(iE), Eigen::Matrix2d::Identity());
175 }
176
178 inline const Eigen::MatrixXd edgeGradient(const Edge & E) const
179 {
180 return edgeGradient(E.global_index());
181 }
182
184 inline const Eigen::MatrixXd edgePotential(size_t iE) const
185 {
186 // The codomain for the edge potential of sXgrad is Polykpo, so we need to change from
187 // R^3 \otimes Polykpo to Polykpo3 which is, by construction, Polykpo \otimes R^3
188 return PermuteTensorization(m_sxgrad.edgeBases(iE).Polykpo->dimension(), dimspace)
189 * Eigen::KroneckerProduct(m_sxgrad.edgePotential(iE), Eigen::Matrix2d::Identity());
190 }
191
193 inline const Eigen::MatrixXd edgePotential(const Edge & E) const
194 {
195 return edgePotential(E.global_index());
196 }
197
198
200 inline const Eigen::MatrixXd cellGradient(size_t iT) const
201 {
202 // The codomain for the cell gradient of sXgrad is Polyk3, so we need to change from
203 // R^3 \otimes Polyk3 to Polyk3x3.
204 // Here, Polyk3 = Polyk \otimes R^3, where the R^3=R^3_nabla component represents the derivatives.
205 // We first permute the codomain of m_sxgrad.cellGradient(iT) to make it R^3_nabla \otimes Polyk.
206 Eigen::MatrixXd GradPermutedBasis
207 = PermuteTensorization(dimspace, m_sxgrad.cellBases(iT).Polyk->dimension()) * m_sxgrad.cellGradient(iT);
208
209 // The Kronecker product then gives the cellGradient of vsXgrad in (R^3 \otimes R^3_nabla) \otimes Polyk,
210 // where the first copy of R^3 lists the components of the functions in the vectorized vsXgrad.
211 // We permute this basis to Polyk \otimes (R^3 \otimes R^3_nabla). In this basis, the first index
212 // of R^3 \otimes R^3_nabla goes over the components of the functions, and the second over the coordinates
213 // derivatives.
214 // Polyk3x3 is Polyk \otimes M_N(R) with the basis of M_N(R) listing the canonical
215 // basis vectors in columns; so identifying the basis of R^3 \otimes R^3_nabla with the basis of M_N(R)
216 // organises the functions components in columns and their gradients in rows, which is exactly what
217 // we want. Hence, the matrix obtained on Polyk \otimes (R^3 \otimes R^3_nabla) can directly be interpreted
218 // as the matrix on Polyk \otimes M_N(R) = Polyk3x3.
219 return PermuteTensorization(m_sxgrad.cellBases(iT).Polyk->dimension(), dimspace*dimspace)
220 * Eigen::KroneckerProduct(GradPermutedBasis, Eigen::Matrix2d::Identity());
221 }
222
224 inline const Eigen::MatrixXd cellGradient(const Cell & T) const
225 {
226 return cellGradient(T.global_index());
227 }
228
230 inline const Eigen::MatrixXd cellSymGradient(size_t iT) const
231 {
232 return cellBases(iT).Polykpo2x2->symmetriseOperator() * cellGradient(iT);
233 }
234
236 inline const Eigen::MatrixXd cellSymGradient(const Cell & T) const
237 {
238 return cellSymGradient(T.global_index());
239 }
240
242 inline const Eigen::MatrixXd cellDivergence(size_t iT) const
243 {
244 return cellBases(iT).Polykpo2x2->traceOperator() * cellGradient(iT);
245 }
246
248 inline const Eigen::MatrixXd cellDivergence(const Cell & T) const
249 {
250 return cellDivergence(T.global_index());
251 }
252
254 inline const Eigen::MatrixXd cellPotential(size_t iT) const
255 {
256 // The codomain for the cell potential of sXgrad is Polykpo, so we need to change from
257 // R^3 \otimes Polykpo to Polykpo3 which is, by construction, Polykpo \otimes R^3
258 return PermuteTensorization(m_sxgrad.cellBases(iT).Polykpo->dimension(), dimspace)
259 * Eigen::KroneckerProduct(m_sxgrad.cellPotential(iT), Eigen::Matrix2d::Identity());
260 }
261
263 inline const Eigen::MatrixXd cellPotential(const Cell & T) const
264 {
265 return cellPotential(T.global_index());
266 }
267
269 Eigen::MatrixXd computeGradientFull(
270 const size_t iT,
271 const VSXCurl & vsx_curl
272 ) const;
273
274 Eigen::MatrixXd _permute_bases(size_t iT) const;
275
276 Eigen::MatrixXd _injection(size_t iT);
277
279 Eigen::MatrixXd computeStabilisation(
280 const size_t iT,
281 const IntegralWeight & weight = IntegralWeight(1.)
282 ) const
283 {
284 // The H^1-stabilisation is the L^2-stabilisation divided by h_T^2
285 double hTm2 = std::pow(mesh().cell(iT)->diam(), -2);
286 return hTm2 * Eigen::KroneckerProduct(m_sxgrad.computeStabilisation(iT, weight), Eigen::Matrix2d::Identity());
287 }
288
290 std::vector<double> computeH1norms(
291 const std::vector<Eigen::VectorXd> & list_dofs,
292 const std::string typegrad="full"
293 ) const;
294
296 Eigen::MatrixXd computeL2Stabilisation(
297 const size_t iT,
298 const IntegralWeight & weight = IntegralWeight(1.)
299 ) const
300 {
301 return Eigen::KroneckerProduct(m_sxgrad.computeStabilisation(iT, weight), Eigen::Matrix2d::Identity());
302 }
303
305 Eigen::MatrixXd computeScalarProduct(
306 const size_t iT,
307 const double & penalty_factor = 1.,
308 const Eigen::MatrixXd & mass_Pkpo_T = Eigen::MatrixXd::Zero(1,1),
309 const IntegralWeight & weight = IntegralWeight(1.)
310 ) const ;
311
313 std::vector<VectorRd> computeVertexValues(
314 const Eigen::VectorXd & u
315 ) const;
316
317 //-----------------------//
318 //---- Getters ----------//
319
321 inline const CellBases & cellBases(size_t iT) const
322 {
323 assert( m_cell_bases[iT] );
324 return *m_cell_bases[iT].get();
325 }
326
328 inline const CellBases & cellBases(const Cell & T) const
329 {
330 return cellBases(T.global_index());
331 }
332
334 inline const EdgeBases & edgeBases(size_t iE) const
335 {
336 assert( m_edge_bases[iE] );
337 return *m_edge_bases[iE].get();
338 }
339
341 inline const EdgeBases & edgeBases(const Edge & E) const
342 {
343 return edgeBases(E.global_index());
344 }
345
347 inline const LocalOperators & cellOperators(size_t iT) const
348 {
349 return *m_cell_operators[iT];
350 }
351
353 inline const LocalOperators & cellOperators(const Cell & T) const
354 {
355 return *m_cell_operators[T.global_index()];
356 }
357
358 private:
359 EdgeBases _compute_edge_bases(size_t iE);
360 CellBases _compute_cell_bases(size_t iT);
361
362 const DDRCore & m_ddr_core;
363 const SerendipityProblem& m_sp;
364 const SXGrad m_sxgrad; // Not a reference as it is not created outside this class
365 const DDRCore m_ddrcore_for_sxcurl;
366 const SerendipityProblem m_sp_for_sxcurl;
367 const SXCurl m_sxcurl; // Not a reference as it is not created outside this class
368
369 // Cell bases
370 std::vector<std::unique_ptr<CellBases> > m_cell_bases;
371 // Edge bases
372 std::vector<std::unique_ptr<EdgeBases> > m_edge_bases;
373
374 bool m_use_threads;
375 std::ostream & m_output;
376
377 LocalOperators _compute_cell_operators(size_t iT);
378
379 // Containers for local operators
380 std::vector<std::unique_ptr<LocalOperators> > m_cell_operators;
381
382 };
383
384} // end of namespace HArDCore2D
385#endif
Construct all polynomial spaces for the DDR sequence.
Definition ddrcore.hpp:63
Definition basis.hpp:315
Matrix family obtained from a scalar family.
Definition basis.hpp:750
Discrete Serendipity Hcurl space: local operators, L2 product and global interpolator.
Definition sxcurl.hpp:16
Discrete Serendipity Hgrad space: local operators, L2 product and global interpolator.
Definition sxgrad.hpp:20
Construct all polynomial spaces for the DDR sequence.
Definition serendipity_problem.hpp:20
Vector family obtained by tensorization of a scalar family.
Definition basis.hpp:564
Definition vsxcurl.hpp:11
Vector version of sXgrad, the arbitrary order space with nodal primal unknowns.
Definition vsxgrad.hpp:33
Base class for global DOF spaces.
Definition variabledofspace.hpp:17
Definition Mesh2D.hpp:26
Eigen::MatrixXd PermuteTensorization(const size_t a, const size_t b)
Returns the matrix giving the permutation of the tensorization of a family of size a with a family of...
Definition basis.cpp:224
constexpr int dimspace
Dimension, and generic types for vector in correct dimension (makes it easier to translate a code bet...
Definition basis.hpp:53
Family< RolyComplBasisCell > RolyComplBasisCellType
Definition vsxgrad.hpp:60
const Eigen::MatrixXd cellPotential(size_t iT) const
Return the potential operator (expressed on Polykpo3) on the cell of index iT.
Definition vsxgrad.hpp:254
const size_t & degree() const
Return the polynomial degree.
Definition sxgrad.hpp:55
std::function< Eigen::Vector2d(const Eigen::Vector2d &)> FunctionType
Definition vsxgrad.hpp:36
const Mesh & mesh() const
Return the mesh.
Definition sxgrad.hpp:49
Family< CurlBasis< ShiftedBasis< MonomialScalarBasisCell > > > RolyBasisCellType
Definition vsxgrad.hpp:59
std::unique_ptr< PolyBasisEdgeType > Polykmo
Definition ddrcore.hpp:109
std::unique_ptr< Poly2x2BasisCellType > Polykpo2x2
Definition vsxgrad.hpp:70
const Eigen::MatrixXd edgeGradient(size_t iE) const
Return the gradient operator (expressed on Polyk3) on the edge of index iE.
Definition vsxgrad.hpp:169
std::unique_ptr< Poly2BasisEdgeType > Polyk2
Definition vsxgrad.hpp:77
const Eigen::MatrixXd cellDivergence(const Cell &T) const
Return the divergence operator (expressed on the ancester of Polyk3x3, which should be m_sxgrad....
Definition vsxgrad.hpp:248
const Eigen::MatrixXd cellDivergence(size_t iT) const
Return the divergence operator (expressed on the ancester of Polyk3x3, which should be m_sxgrad....
Definition vsxgrad.hpp:242
MatrixFamily< DDRCore::PolyBasisCellType, dimspace > Poly2x2BasisCellType
Definition vsxgrad.hpp:58
auto Polyk2(size_t iT) const -> const Poly2BasisCellType &
Definition vsxgrad.hpp:154
const SXGrad & sXgrad() const
Return the underlying sXgrad space.
Definition vsxgrad.hpp:92
auto RolyComplk(size_t iT) const -> const RolyComplBasisCellType &
Definition vsxgrad.hpp:162
std::unique_ptr< Poly2BasisEdgeType > Polykmo2
Definition vsxgrad.hpp:76
std::vector< double > computeH1norms(const std::vector< Eigen::VectorXd > &list_dofs, const std::string typegrad="full") const
Compute the H^1 discrete norm, with full or symmetric gradient.
Definition vsxgrad.cpp:360
const Eigen::MatrixXd cellSymGradient(const Cell &T) const
Return the symmetric gradient operator (expressed on Polyk3x3) on cell T.
Definition vsxgrad.hpp:236
std::unique_ptr< Poly2BasisCellType > Polykmo2
Definition ddrcore.hpp:91
std::unique_ptr< Poly2BasisCellType > Polykmo2
Definition vsxgrad.hpp:68
std::unique_ptr< Poly2BasisCellType > Polykptwo2
Definition vsxgrad.hpp:69
Eigen::VectorXd interpolate(const FunctionType &q, const int doe_cell=-1) const
Interpolator of a continuous function.
Definition vsxgrad.cpp:82
const LocalOperators & cellOperators(size_t iT) const
Return cell operators for the cell of index iT.
Definition vsxgrad.hpp:347
std::unique_ptr< PolyBasisEdgeType > Polykpo
Definition ddrcore.hpp:107
Eigen::MatrixXd potential
Definition vsxgrad.hpp:51
std::unique_ptr< RolyComplBasisCellType > RolyComplkmo
Definition ddrcore.hpp:95
TensorizedVectorFamily< DDRCore::PolyBasisCellType, dimspace > Poly2BasisCellType
Definition vsxgrad.hpp:57
Family< MonomialScalarBasisCell > PolyBasisCellType
Definition vsxgrad.hpp:56
const EdgeBases & edgeBases(size_t iE) const
Return edge bases for the edge of index iE.
Definition vsxgrad.hpp:334
std::unique_ptr< PolyBasisCellType > Polykpo
Definition ddrcore.hpp:85
const Eigen::MatrixXd edgeGradient(const Edge &E) const
Return the gradient operator (expressed on Polyk3) on edge E.
Definition vsxgrad.hpp:178
TensorizedVectorFamily< DDRCore::PolyBasisEdgeType, dimspace > Poly2BasisEdgeType
Definition vsxgrad.hpp:63
std::vector< VectorRd > computeVertexValues(const Eigen::VectorXd &u) const
Computes the values of the potential reconstruction at the mesh vertices.
Definition vsxgrad.cpp:440
auto PolykpoE(size_t iE) const -> const PolyBasisEdgeType &
Definition vsxgrad.hpp:125
auto PolykptwoE(size_t iE) const -> const PolyBasisEdgeType &
Definition vsxgrad.hpp:129
Eigen::MatrixXd computeGradientFull(const size_t iT, const VSXCurl &vsx_curl) const
Full discrete gradient from VSXGrad to VSXCurl.
Definition vsxgrad.cpp:304
const Eigen::MatrixXd cellPotential(const Cell &T) const
Return the potential operator on cell T.
Definition vsxgrad.hpp:263
auto PolykE(size_t iE) const -> const PolyBasisEdgeType &
Definition vsxgrad.hpp:122
Eigen::MatrixXd _permute_bases(size_t iT) const
Definition vsxgrad.cpp:129
std::unique_ptr< Poly2BasisEdgeType > Polykptwo2
Definition vsxgrad.hpp:79
const Eigen::MatrixXd edgePotential(size_t iE) const
Return the potential operator on the edge of index iE.
Definition sxgrad.hpp:134
Family< MonomialScalarBasisEdge > PolyBasisEdgeType
Definition vsxgrad.hpp:62
Eigen::MatrixXd rot
Definition vsxgrad.hpp:50
const EdgeBases & edgeBases(const Edge &E) const
Return edge bases for edge E.
Definition vsxgrad.hpp:341
const DDRCore::CellBases & cellBases(size_t iT) const
Return cell bases for the cell of index iT.
Definition sxgrad.hpp:208
const Mesh & mesh() const
Return the mesh.
Definition vsxgrad.hpp:86
const Eigen::MatrixXd edgePotential(size_t iE) const
Return the potential operator (expressed on Polykpo3) on the edge of index iE.
Definition vsxgrad.hpp:184
Eigen::MatrixXd computeScalarProduct(const size_t iT, const double &penalty_factor=1., const Eigen::MatrixXd &mass_Pkpo_T=Eigen::MatrixXd::Zero(1, 1), const IntegralWeight &weight=IntegralWeight(1.)) const
Compute the L2 scalar product.
Definition vsxgrad.cpp:402
const Eigen::MatrixXd edgePotential(const Edge &E) const
Return the potential operator (expressed on Polykpo3) on edge E.
Definition vsxgrad.hpp:193
const CellBases & cellBases(const Cell &T) const
Return vector/matrix cell bases for cell T.
Definition vsxgrad.hpp:328
const Eigen::MatrixXd cellGradient(size_t iT) const
Return the gradient operator (expressed on Polyk3x3) on the cell of index iT.
Definition vsxgrad.hpp:200
std::unique_ptr< PolyBasisCellType > Polykmo
Definition ddrcore.hpp:87
std::unique_ptr< PolyBasisCellType > Polykmtwo
Definition ddrcore.hpp:88
const Eigen::MatrixXd cellGradient(const Cell &T) const
Return the gradient operator (expressed on Polyk3x3) on cell T.
Definition vsxgrad.hpp:224
std::unique_ptr< Poly2BasisEdgeType > Polykpo2
Definition vsxgrad.hpp:78
std::unique_ptr< RolyBasisCellType > Rolykmo
Definition ddrcore.hpp:93
auto Polykmo(size_t iT) const -> const PolyBasisCellType &
Definition vsxgrad.hpp:139
Eigen::MatrixXd computeStabilisation(const size_t iT, const IntegralWeight &weight=IntegralWeight(1.)) const
Compute the H^1-stabilisation (based on the L^2 stabilisation implemented in SXgrad)
Definition vsxgrad.hpp:279
auto Polykpo(size_t iT) const -> const PolyBasisCellType &
Definition vsxgrad.hpp:134
const size_t & degree() const
Return the polynomial degree.
Definition vsxgrad.hpp:98
const Eigen::MatrixXd cellSymGradient(size_t iT) const
Return the symmetric gradient operator (expressed on Polyk3x3) on the cell of index iT.
Definition vsxgrad.hpp:230
Eigen::MatrixXd _injection(size_t iT)
Definition vsxgrad.cpp:173
Eigen::MatrixXd computeStabilisation(const size_t iT, const IntegralWeight &weight=IntegralWeight(1.)) const
Computes only the stabilisation matrix of the (weighted) L2-product for the cell of index iT.
Definition sxgrad.hpp:186
const Eigen::MatrixXd cellGradient(size_t iT) const
Return the full gradient operator on the cell of index iT.
Definition sxgrad.hpp:146
const LocalOperators & cellOperators(const Cell &T) const
Return cell operators for cell T.
Definition vsxgrad.hpp:353
auto Rolyk(size_t iT) const -> const RolyBasisCellType &
Definition vsxgrad.hpp:158
Eigen::MatrixXd computeL2Stabilisation(const size_t iT, const IntegralWeight &weight=IntegralWeight(1.)) const
Compute the L2 stabilisation.
Definition vsxgrad.hpp:296
const CellBases & cellBases(size_t iT) const
Return vector/matrix cell bases for the face of index iT.
Definition vsxgrad.hpp:321
auto Polykptwo(size_t iT) const -> const PolyBasisCellType &
Definition vsxgrad.hpp:149
const DDRCore::EdgeBases & edgeBases(size_t iE) const
Return edge bases for the edge of index iE.
Definition sxgrad.hpp:221
const Eigen::MatrixXd cellPotential(size_t iT) const
Return the potential operator on the cell of index iT.
Definition sxgrad.hpp:158
LocalOperators(const Eigen::MatrixXd &_rot, const Eigen::MatrixXd &_potential)
Definition vsxgrad.hpp:40
std::unique_ptr< PolyBasisEdgeType > Polyk
Definition ddrcore.hpp:108
std::unique_ptr< PolyBasisCellType > Polyk
Definition ddrcore.hpp:86
const Eigen::MatrixXd edgeGradient(size_t iE) const
Return the full gradient operator on the edge of index iE.
Definition sxgrad.hpp:122
auto Polyk(size_t iT) const -> const PolyBasisCellType &
Definition vsxgrad.hpp:144
bool use_threads
Definition HHO_DiffAdvecReac.hpp:45
if(strcmp(field, 'real')) % real valued entries T
Definition mmread.m:93
Definition mhd-solutions.hpp:9
static auto q
Definition ddrcore-test.hpp:14
Structure for weights (scalar, at the moment) in integral.
Definition integralweight.hpp:33
Definition vsxgrad.hpp:67
Definition vsxgrad.hpp:75
Definition vsxgrad.hpp:39