1# ifndef _GMPOLY_EDGE_HPP 
    2# define _GMPOLY_EDGE_HPP 
   62                    const MonomialScalarBasisEdge & basis1, 
 
   63                    const MonomialScalarBasisEdge & basis2, 
 
   68template<
typename BasisType1, 
typename BasisType2>
 
   70                     const BasisType1 & basis1,   
 
   71                     const BasisType2 & basis2,   
 
   76    static_assert(useAncestor<BasisType1>() || useAncestor<BasisType2>(), 
"No method to compute this Gram matrix");
 
   78    if constexpr (!useAncestor<BasisType1>() && useAncestor<BasisType2>()) {
 
   80    } 
else if constexpr (useAncestor<BasisType1>() && !useAncestor<BasisType2>()) {
 
 
   89template<
typename BasisType1, 
typename BasisType2, 
size_t N>
 
  100        size_t dim1 = anc_gm.rows();
 
  101        size_t dim2 = anc_gm.cols();
 
  103        for (
size_t i=0; 
i<N; 
i++){
 
  104            gm.block(
i*dim1, 
i*dim2, dim1, dim2) = anc_gm;
 
 
  110template<
typename BasisType>
 
  113    return GramMatrix(E, basis, basis, mono_int_map);
 
 
  119Eigen::MatrixXd 
GMDer(
 
  121                  const MonomialScalarBasisEdge & basis1, 
 
  122                  const MonomialScalarBasisEdge & basis2, 
 
  127template<
typename BasisType1, 
typename BasisType2>
 
  129                     const BasisType1 & basis1,   
 
  130                     const BasisType2 & basis2,   
 
  135    static_assert(useAncestor<BasisType1>() || useAncestor<BasisType2>(), 
"No method to compute this Gram matrix");
 
  137    if constexpr (!useAncestor<BasisType1>() && useAncestor<BasisType2>()) {
 
  138      return transformGM(basis2, 
'C', 
GMDer(E, basis1, basis2.ancestor(), mono_int_map) );
 
  139    } 
else if constexpr (useAncestor<BasisType1>() && !useAncestor<BasisType2>()) {
 
  140      return transformGM(basis1, 
'R', 
GMDer(E, basis1.ancestor(), basis2, mono_int_map) );
 
 
  149template<
typename BasisType1, 
typename BasisType2>
 
  153                    const BasisType2 & basis2, 
 
  157    return GMDer(E, basis1.
ancestor(), basis2, mono_int_map)/E.diam();
 
 
  161template<
typename BasisType1, 
typename BasisType2>
 
  164                    const BasisType1 & basis1, 
 
  169    return (
GMDer(E, basis2.
ancestor(), basis1, mono_int_map).transpose())/E.diam();
 
 
Basis for the space of gradients of polynomials.
Definition basis.hpp:1242
 
Vector family obtained by tensorization of a scalar family.
Definition basis.hpp:564
 
for i
Definition convergence_analysis.m:47
 
constexpr const ScalarFamilyType & ancestor() const
Return the ancestor (family that has been tensorized)
Definition basis.hpp:720
 
constexpr const BasisType & ancestor() const
Return the ancestor (basis that the gradient was taken of)
Definition basis.hpp:1289
 
size_t dimension() const
Return the dimension of the family.
Definition basis.hpp:602
 
std::vector< double > MonomialEdgeIntegralsType
Type for list of edge integrals of monomials.
Definition GMpoly_edge.hpp:34
 
MonomialCellIntegralsType CheckIntegralsDegree(const Cell &T, const size_t degree, const MonomialCellIntegralsType &mono_int_map={})
Checks if the degree of an existing list of monomial integrals is sufficient, other re-compute and re...
Definition GMpoly_cell.cpp:76
 
MonomialEdgeIntegralsType IntegrateEdgeMonomials(const Edge &E, const size_t maxdeg)
Compute all integrals of edge monomials up to a total degree.
Definition GMpoly_edge.cpp:6
 
Eigen::MatrixXd transformGM(const Family< BasisType > &family_basis, const char RC, const Eigen::MatrixXd &anc_GM)
Transforms a Gram Matrix from an ancestor to a family basis.
Definition GMpoly_cell.hpp:77
 
Eigen::MatrixXd GMDer(const Edge &E, const MonomialScalarBasisEdge &basis1, const MonomialScalarBasisEdge &basis2, MonomialEdgeIntegralsType mono_int_map={})
Computes the Gram Matrix of the derivative of a monomial basis with another monomial basis.
Definition GMpoly_edge.cpp:49
 
Eigen::MatrixXd GramMatrix(const Cell &T, const MonomialScalarBasisCell &basis1, const MonomialScalarBasisCell &basis2, MonomialCellIntegralsType mono_int_map={})
Computes the Gram Matrix of a pair of local scalar monomial bases.
Definition GMpoly_cell.cpp:86
 
Definition ddr-klplate.hpp:27