6#include <unsupported/Eigen/KroneckerProduct>
35 typedef std::function<Eigen::Vector2d(
const Eigen::Vector2d &)>
FunctionType;
40 const Eigen::MatrixXd & _rot,
41 const Eigen::MatrixXd & _potential
76 std::unique_ptr<Poly2BasisEdgeType>
Polyk2;
87 return m_sxgrad.
mesh();
108 const int doe_cell = -1
177 * Eigen::KroneckerProduct(m_sxgrad.
edgeGradient(iE), Eigen::Matrix2d::Identity());
192 * Eigen::KroneckerProduct(m_sxgrad.
edgePotential(iE), Eigen::Matrix2d::Identity());
209 Eigen::MatrixXd GradPermutedBasis
223 * Eigen::KroneckerProduct(GradPermutedBasis, Eigen::Matrix2d::Identity());
262 * Eigen::KroneckerProduct(m_sxgrad.
cellPotential(iT), Eigen::Matrix2d::Identity());
282 double hTm2 = std::pow(
mesh().cell(iT)->diam(), -2);
283 return hTm2 * Eigen::KroneckerProduct(m_sxgrad.
computeStabilisation(iT, weight), Eigen::Matrix2d::Identity());
288 const std::vector<Eigen::VectorXd> & list_dofs,
289 const std::string typegrad=
"full"
294 const Eigen::VectorXd & u
303 assert( m_cell_bases[iT] );
304 return *m_cell_bases[iT].get();
317 assert( m_edge_bases[iE] );
318 return *m_edge_bases[iE].get();
330 return *m_cell_operators[iT];
336 return *m_cell_operators[
T.global_index()];
341 EdgeBases _compute_edge_bases(
size_t iE);
342 CellBases _compute_cell_bases(
size_t iT);
347 const DDRCore m_ddrcore_for_sxcurl;
353 std::vector<std::unique_ptr<CellBases> > m_cell_bases;
355 std::vector<std::unique_ptr<EdgeBases> > m_edge_bases;
358 std::ostream & m_output;
360 LocalOperators _compute_cell_operators(
size_t iT);
364 std::vector<std::unique_ptr<LocalOperators> > m_cell_operators;
Construct all polynomial spaces for the DDR sequence.
Definition ddrcore.hpp:63
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
Vector version of sXgrad, the arbitrary order space with nodal primal unknowns.
Definition vsxgrad.hpp:32
Base class for global DOF spaces.
Definition variabledofspace.hpp:17
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:59
const Eigen::MatrixXd cellPotential(size_t iT) const
Return the potential operator (expressed on Polykpo3) on the cell of index iT.
Definition vsxgrad.hpp:257
const size_t & degree() const
Return the polynomial degree.
Definition sxgrad.hpp:55
std::function< Eigen::Vector2d(const Eigen::Vector2d &)> FunctionType
Definition vsxgrad.hpp:35
const Mesh & mesh() const
Return the mesh.
Definition sxgrad.hpp:49
Family< CurlBasis< ShiftedBasis< MonomialScalarBasisCell > > > RolyBasisCellType
Definition vsxgrad.hpp:58
std::unique_ptr< PolyBasisEdgeType > Polykmo
Definition ddrcore.hpp:109
std::unique_ptr< Poly2x2BasisCellType > Polykpo2x2
Definition vsxgrad.hpp:69
const Eigen::MatrixXd edgeGradient(size_t iE) const
Return the gradient operator (expressed on Polyk3) on the edge of index iE.
Definition vsxgrad.hpp:172
std::unique_ptr< Poly2BasisEdgeType > Polyk2
Definition vsxgrad.hpp:76
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:251
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:245
MatrixFamily< DDRCore::PolyBasisCellType, dimspace > Poly2x2BasisCellType
Definition vsxgrad.hpp:57
auto Polyk2(size_t iT) const -> const Poly2BasisCellType &
Definition vsxgrad.hpp:157
const SXGrad & sXgrad() const
Return the underlying sXgrad space.
Definition vsxgrad.hpp:91
auto RolyComplk(size_t iT) const -> const RolyComplBasisCellType &
Definition vsxgrad.hpp:165
std::unique_ptr< Poly2BasisEdgeType > Polykmo2
Definition vsxgrad.hpp:75
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:284
const Eigen::MatrixXd cellSymGradient(const Cell &T) const
Return the symmetric gradient operator (expressed on Polyk3x3) on cell T.
Definition vsxgrad.hpp:239
std::unique_ptr< Poly2BasisCellType > Polykmo2
Definition ddrcore.hpp:91
std::unique_ptr< Poly2BasisCellType > Polykmo2
Definition vsxgrad.hpp:67
std::unique_ptr< Poly2BasisCellType > Polykptwo2
Definition vsxgrad.hpp:68
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:328
std::unique_ptr< PolyBasisEdgeType > Polykpo
Definition ddrcore.hpp:107
Eigen::MatrixXd potential
Definition vsxgrad.hpp:50
std::unique_ptr< RolyComplBasisCellType > RolyComplkmo
Definition ddrcore.hpp:95
TensorizedVectorFamily< DDRCore::PolyBasisCellType, dimspace > Poly2BasisCellType
Definition vsxgrad.hpp:56
Family< MonomialScalarBasisCell > PolyBasisCellType
Definition vsxgrad.hpp:55
const EdgeBases & edgeBases(size_t iE) const
Return edge bases for the edge of index iE.
Definition vsxgrad.hpp:315
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:181
TensorizedVectorFamily< DDRCore::PolyBasisEdgeType, dimspace > Poly2BasisEdgeType
Definition vsxgrad.hpp:62
std::vector< VectorRd > computeVertexValues(const Eigen::VectorXd &u) const
Computes the values of the potential reconstruction at the mesh vertices.
Definition vsxgrad.cpp:327
auto PolykpoE(size_t iE) const -> const PolyBasisEdgeType &
Definition vsxgrad.hpp:128
auto PolykptwoE(size_t iE) const -> const PolyBasisEdgeType &
Definition vsxgrad.hpp:132
const Eigen::MatrixXd cellPotential(const Cell &T) const
Return the potential operator on cell T.
Definition vsxgrad.hpp:266
auto PolykE(size_t iE) const -> const PolyBasisEdgeType &
Definition vsxgrad.hpp:125
std::unique_ptr< Poly2BasisEdgeType > Polykptwo2
Definition vsxgrad.hpp:78
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:61
Eigen::MatrixXd rot
Definition vsxgrad.hpp:49
const EdgeBases & edgeBases(const Edge &E) const
Return edge bases for edge E.
Definition vsxgrad.hpp:322
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:85
const Eigen::MatrixXd edgePotential(size_t iE) const
Return the potential operator (expressed on Polykpo3) on the edge of index iE.
Definition vsxgrad.hpp:187
const Eigen::MatrixXd edgePotential(const Edge &E) const
Return the potential operator (expressed on Polykpo3) on edge E.
Definition vsxgrad.hpp:196
const CellBases & cellBases(const Cell &T) const
Return vector/matrix cell bases for cell T.
Definition vsxgrad.hpp:308
const Eigen::MatrixXd cellGradient(size_t iT) const
Return the gradient operator (expressed on Polyk3x3) on the cell of index iT.
Definition vsxgrad.hpp:203
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:227
std::unique_ptr< Poly2BasisEdgeType > Polykpo2
Definition vsxgrad.hpp:77
std::unique_ptr< RolyBasisCellType > Rolykmo
Definition ddrcore.hpp:93
auto Polykmo(size_t iT) const -> const PolyBasisCellType &
Definition vsxgrad.hpp:142
Eigen::MatrixXd _permute_bases(size_t iT)
Definition vsxgrad.cpp:129
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:276
auto Polykpo(size_t iT) const -> const PolyBasisCellType &
Definition vsxgrad.hpp:137
const size_t & degree() const
Return the polynomial degree.
Definition vsxgrad.hpp:97
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:233
Eigen::MatrixXd _injection(size_t iT)
Definition vsxgrad.cpp:157
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:334
auto Rolyk(size_t iT) const -> const RolyBasisCellType &
Definition vsxgrad.hpp:161
const CellBases & cellBases(size_t iT) const
Return vector/matrix cell bases for the face of index iT.
Definition vsxgrad.hpp:301
auto Polykptwo(size_t iT) const -> const PolyBasisCellType &
Definition vsxgrad.hpp:152
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:39
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:147
bool use_threads
Definition HHO_DiffAdvecReac.hpp:47
if(strcmp(field, 'real')) % real valued entries T
Definition mmread.m:93
Definition ddr-klplate.hpp:27
static auto q
Definition ddrcore-test.hpp:14
Structure for weights (scalar, at the moment) in integral.
Definition integralweight.hpp:33
Definition vsxgrad.hpp:66
Definition vsxgrad.hpp:74
Definition vsxgrad.hpp:38