27#include <boost/multi_array.hpp>
52 static const std::vector<VectorRd>
basisRd = { VectorRd(1., 0., 0.), VectorRd(0., 1., 0.), VectorRd(0., 0., 1.) };
55 using FType = std::function<T(
const VectorRd&)>;
58 using CellFType = std::function<T(
const VectorRd&,
const Cell *)>;
75 template<
typename GeometricSupport>
87 std::vector<VectorZd> powers;
89 for (
size_t i = 0;
i <=
L;
i++)
91 for (
size_t j = 0;
i +
j <=
L;
j++)
93 powers.push_back(VectorZd(
i,
j,
L -
i -
j));
100 static std::vector<VectorZd>
complete(
const size_t degree)
102 std::vector<VectorZd> powers;
104 for (
size_t l = 0;
l <= degree;
l++)
106 std::vector<VectorZd>
pow_hom = homogeneous(
l);
121 std::vector<Eigen::Vector2i> powers;
123 for (
size_t i = 0;
i <=
L;
i++)
125 powers.push_back(Eigen::Vector2i(
i,
L -
i));
131 static std::vector<Eigen::Vector2i>
complete(
size_t degree)
133 std::vector<Eigen::Vector2i> powers;
135 for (
size_t l = 0;
l <= degree;
l++)
137 std::vector<Eigen::Vector2i>
pow_hom = homogeneous(
l);
138 for (Eigen::Vector2i p :
pow_hom){
183 return (m_degree >= 0 ? (m_degree * (m_degree + 1) * (2 * m_degree + 1) + 9 * m_degree * (m_degree + 1) + 12 * (m_degree + 1)) / 12 : 0);
209 inline VectorRd _coordinate_transform(
const VectorRd &x)
const
211 return (x - m_xT) / m_hT;
218 std::vector<VectorZd> m_powers;
256 return (m_degree + 1) * (m_degree + 2) / 2;
292 return m_jacobian * m_hF;
303 inline Eigen::Vector2d _coordinate_transform(
const VectorRd &x)
const
305 return m_jacobian * (x - m_xF);
313 std::vector<Eigen::Vector2i> m_powers;
364 inline double _coordinate_transform(
const VectorRd &x)
const
366 return (x - m_xE).dot(m_tE) / m_hE;
387 template <
typename BasisType>
403 static const bool hasCurl = BasisType::hasCurl;
413 const Eigen::MatrixXd &
matrix
418 assert((
size_t)
matrix.cols() == basis.dimension() ||
"Inconsistent family initialization");
424 return m_matrix.rows();
430 static_assert(
hasFunction,
"Call to function() not available");
433 for (
auto j = 1;
j < m_matrix.cols();
j++)
435 f += m_matrix(
i,
j) * m_basis.function(
j, x);
443 static_assert(
hasFunction,
"Call to function() not available");
446 for (
auto j = 1;
j < m_matrix.cols();
j++)
457 static_assert(
hasGradient,
"Call to gradient() not available");
460 for (
auto j = 1;
j < m_matrix.cols();
j++)
462 G += m_matrix(
i,
j) * m_basis.gradient(
j, x);
470 static_assert(
hasGradient,
"Call to gradient() not available");
473 for (
auto j = 1;
j < m_matrix.cols();
j++)
483 static_assert(
hasCurl,
"Call to curl() not available");
486 for (
auto j = 1;
j < m_matrix.cols();
j++)
488 C += m_matrix(
i,
j) * m_basis.curl(
j, x);
496 static_assert(
hasCurl,
"Call to curl() not available");
499 for (
auto j = 1;
j < m_matrix.cols();
j++)
509 static_assert(
hasDivergence,
"Call to divergence() not available");
512 for (
auto j = 1;
j < m_matrix.cols();
j++)
514 D += m_matrix(
i,
j) * m_basis.divergence(
j, x);
522 static_assert(
hasDivergence,
"Call to divergence() not available");
525 for (
auto j = 1;
j < m_matrix.cols();
j++)
535 static_assert(
hasHessian,
"Call to hessian() not available");
538 for (
auto j = 1;
j < m_matrix.cols();
j++)
540 H += m_matrix(
i,
j) * m_basis.hessian(
j, x);
548 static_assert(
hasHessian,
"Call to hessian() not available");
551 for (
auto j = 1;
j < m_matrix.cols();
j++)
559 inline const Eigen::MatrixXd &
matrix()
const
573 return m_basis.max_degree();
578 Eigen::MatrixXd m_matrix;
608 template <
typename ScalarFamilyType,
size_t N>
636 static_assert(ScalarFamilyType::tensorRank ==
Scalar,
637 "Vector family can only be constructed from scalar families");
643 return m_scalar_family.dimension() *
N;
649 static_assert(
hasFunction,
"Call to function() not available");
652 ek(
i / m_scalar_family.dimension()) = 1.;
653 return ek * m_scalar_family.function(
i % m_scalar_family.dimension(), x);
659 static_assert(
hasFunction,
"Call to function() not available");
662 ek(
i / m_scalar_family.dimension()) = 1.;
669 static_assert(
hasGradient,
"Call to gradient() not available");
671 GradientValue G = Eigen::Matrix<double, N, dimspace>::Zero();
672 G.row(
i / m_scalar_family.dimension()) = m_scalar_family.gradient(
i % m_scalar_family.dimension(), x);
679 static_assert(
hasGradient,
"Call to gradient() not available");
681 GradientValue G = Eigen::Matrix<double, N, dimspace>::Zero();
689 static_assert(
hasCurl,
"Call to curl() not available");
691 VectorRd
ek = VectorRd::Zero();
692 ek(
i / m_scalar_family.dimension()) = 1.;
693 return m_scalar_family.gradient(
i % m_scalar_family.dimension(), x).cross(
ek);
699 static_assert(
hasCurl,
"Call to curl() not available");
701 VectorRd
ek = VectorRd::Zero();
702 ek(
i / m_scalar_family.dimension()) = 1.;
709 static_assert(
hasDivergence,
"Call to divergence() not available");
711 return m_scalar_family.gradient(
i % m_scalar_family.dimension(), x)(
i / m_scalar_family.dimension());
717 static_assert(
hasDivergence,
"Call to divergence() not available");
725 static_assert(
hasCurlCurl,
"Call to curlcurl() not available");
728 int p =
i / m_scalar_family.dimension();
730 typename ScalarFamilyType::HessianValue
hess = m_scalar_family.hessian(
i % m_scalar_family.dimension(), x);
737 static_assert(
hasCurlCurl,
"Call to curlcurl() not available");
740 int p =
i / m_scalar_family.dimension();
750 return m_scalar_family;
756 return m_scalar_family.max_degree();
776 template<
typename ScalarFamilyType,
size_t N>
804 static_assert(ScalarFamilyType::tensorRank ==
Scalar,
805 "Vector family can only be constructed from scalar families");
808 for (
size_t j = 0;
j <
N;
j++){
809 for (
size_t i = 0;
i <
N;
i++){
810 m_E[
j*
N +
i] = Eigen::Matrix<double, N, N>::Zero();
811 m_E[
j*
N +
i](
i,
j) = 1.;
818 size_t r = m_scalar_family.dimension();
819 size_t j = ( ( (
i/
r)%
N )*
N + (
i/
r)/
N ) *
r + (
i%
r);
820 m_transposeOperator(
i,
j) = 1.;
827 return m_scalar_family.dimension() *
N *
N;
833 static_assert(
hasFunction,
"Call to function() not available");
835 return m_scalar_family.function(
i % m_scalar_family.dimension(), x) * m_E[
i / m_scalar_family.dimension()];
841 static_assert(
hasFunction,
"Call to function() not available");
849 static_assert(
hasDivergence,
"Call to divergence() not available");
851 Eigen::Matrix<double, N, 1> V = m_E[
i/m_scalar_family.dimension()].col( (
i/m_scalar_family.dimension()) /
N);
852 return m_scalar_family.gradient(
i % m_scalar_family.dimension(), x)( (
i / m_scalar_family.dimension()) /
N) * V;
858 static_assert(
hasDivergence,
"Call to divergence() not available");
860 Eigen::Matrix<double, N, 1> V = m_E[
i/m_scalar_family.dimension()].col( (
i/m_scalar_family.dimension()) /
N);
867 return m_scalar_family;
879 return m_transposeOperator;
891 size_t dim_scalar = m_scalar_family.dimension();
900 for (
size_t i = 0;
i<
N;
i++){
916 size_t r = m_scalar_family.dimension();
918 Eigen::MatrixXd
Tr = Eigen::MatrixXd::Zero(
r,
dimension());
938 std::vector<Eigen::Matrix<double, N, N>> m_E;
939 Eigen::MatrixXd m_transposeOperator;
946 template <
typename ScalarFamilyType>
972 const Eigen::Matrix<double, 2, dimspace> &
generators
978 static_assert(ScalarFamilyType::hasFunction,
"Call to function() not available");
979 static_assert(std::is_same<typename ScalarFamilyType::GeometricSupport, Face>::value,
980 "Tangent families can only be defined on faces");
986 return m_scalar_family.dimension() * 2;
992 return m_generators.row(
i / m_scalar_family.dimension()) * m_scalar_family.function(
i % m_scalar_family.dimension(), x);
998 return m_generators.row(
i / m_scalar_family.dimension()).dot(m_scalar_family.gradient(
i % m_scalar_family.dimension(), x));
1004 return m_normal.cross(
1005 m_scalar_family.hessian(
i % m_scalar_family.dimension(), x) *
1006 (m_normal.cross(m_generators.row(
i / m_scalar_family.dimension())) ) );
1012 return m_scalar_family;
1018 return m_scalar_family.max_degree();
1024 return m_generators;
1030 Eigen::Matrix<double, 2, dimspace> m_generators;
1038 template <
typename BasisType>
1075 return m_basis.dimension() - m_shift;
1093 return m_basis.max_degree();
1099 static_assert(
hasFunction,
"Call to function() not available");
1101 return m_basis.function(
i + m_shift, x);
1107 static_assert(
hasGradient,
"Call to gradient() not available");
1109 return m_basis.gradient(
i + m_shift, x);
1115 static_assert(
hasCurl,
"Call to curl() not available");
1117 return m_basis.curl(
i + m_shift, x);
1123 static_assert(
hasDivergence,
"Call to divergence() not available");
1125 return m_basis.divergence(
i + m_shift, x);
1131 static_assert(
hasHessian,
"Call to hessian() not available");
1133 return m_basis.hessian(
i + m_shift, x);
1145 template <
typename BasisType>
1207 static_assert(
hasFunction,
"Call to function() not available");
1209 return m_basis.function(
i, x);
1215 static_assert(
hasGradient,
"Call to gradient() not available");
1217 return m_basis.gradient(
i, x);
1223 static_assert(
hasCurl,
"Call to curl() not available");
1225 return m_basis.curl(
i, x);
1231 static_assert(
hasDivergence,
"Call to divergence() not available");
1233 return m_basis.divergence(
i, x);
1239 static_assert(
hasHessian,
"Call to hessian() not available");
1241 return m_basis.hessian(
i, x);
1254 template <
typename BasisType>
1279 : m_scalar_basis(basis)
1281 static_assert(BasisType::tensorRank ==
Scalar || BasisType::tensorRank ==
Vector,
1282 "Gradient basis can only be constructed starting from scalar or vector bases");
1283 static_assert(BasisType::hasGradient,
1284 "Gradient basis requires gradient() for the original basis to be available");
1291 return m_scalar_basis.dimension();
1297 return m_scalar_basis.gradient(
i, x);
1303 return m_scalar_basis;
1316 template <
typename BasisType>
1322 typedef Eigen::Matrix<double, dimspace, dimspace>
CurlValue;
1343 static_assert((BasisType::tensorRank ==
Vector && std::is_same<typename BasisType::GeometricSupport, Cell>::value) ||
1344 (BasisType::tensorRank ==
Scalar && std::is_same<typename BasisType::GeometricSupport, Face>::value),
1345 "Curl basis can only be constructed starting from vector bases on elements or scalar bases on faces");
1346 static_assert(BasisType::hasCurl,
1347 "Curl basis requires curl() for the original basis to be available");
1353 return m_basis.dimension();
1359 return m_basis.curl(
i, x);
1379 template <
typename BasisType>
1404 : m_vector_basis(basis)
1406 static_assert(BasisType::tensorRank ==
Vector || BasisType::tensorRank ==
Matrix,
1407 "Divergence basis can only be constructed starting from vector bases");
1408 static_assert(BasisType::hasDivergence,
1409 "Divergence basis requires divergence() for the original basis to be available");
1416 return m_vector_basis.dimension();
1422 return m_vector_basis.divergence(
i, x);
1428 return m_vector_basis;
1439 template <
typename ScalarFamilyType>
1444 VectorRd
nF =
F.normal();
1445 Eigen::MatrixXd
rotated_gen = Eigen::MatrixXd::Zero(2, 3);
1464 typedef Eigen::Matrix<double, dimspace, dimspace>
CurlValue;
1511 inline VectorRd _coordinate_transform(
const VectorRd &x)
const
1513 return (x - m_xT) / m_hT;
1519 std::vector<VectorZd> m_powers;
1588 inline VectorRd _coordinate_transform(
const VectorRd &x)
const
1590 return (x - m_xT) / m_hT;
1594 VectorRd direction_value(
size_t i,
const VectorRd &x)
const;
1595 VectorRd direction_curl(
size_t i,
const VectorRd &x)
const;
1602 std::vector<VectorZd> m_powers;
1612 typedef Eigen::Matrix<double, dimspace, dimspace>
CurlValue;
1667 inline Eigen::Vector2d _coordinate_transform(
const VectorRd &x)
const
1669 return m_jacobian * (x - m_xF);
1676 std::vector<Eigen::Vector2i> m_powers;
1686 typedef Eigen::Matrix<double, dimspace, dimspace>
CurlValue;
1725 inline const std::shared_ptr<RolyComplBasisFace> &
rck()
const
1733 std::shared_ptr<RolyComplBasisFace> m_Rck_basis;
1751 template <
typename outValue,
typename inValue,
typename FunctionType>
1753 const boost::multi_array<inValue, 2> &
B_quad,
1754 const FunctionType &
F
1766 template <
typename ScalarBasisType,
size_t N>
1769 const std::vector<Eigen::VectorXd> &
v
1773 size_t k =
v.size();
1775 Eigen::MatrixXd
M = Eigen::MatrixXd::Zero(
r*
k,
r*
N);
1777 for (
size_t i=0;
i <
k;
i++){
1782 for (
size_t j=0;
j <
N;
j++){
1783 M.block(
i*
r,
j*
r,
r,
r) =
v[
i](
j) * Eigen::MatrixXd::Identity(
r,
r);
1800 inline static std::function<Eigen::MatrixXd(
const Eigen::MatrixXd &)>
1801 symmetrise_matrix = [](
const Eigen::MatrixXd & x)->Eigen::MatrixXd {
return 0.5*(x+x.transpose());};
1804 inline static std::function<Eigen::MatrixXd(
const Eigen::MatrixXd &)>
1809 template <
typename ScalarBasisType,
size_t N>
1815 Eigen::MatrixXd
M = Eigen::MatrixXd::Zero(
r,
r*
N*
N);
1817 for (
size_t k=0;
k <
N;
k++){
1818 M.block(0,
k*
r*(
N+1),
r,
r) = Eigen::MatrixXd::Identity(
r,
r);
1835 template <
typename BasisType, BasisFunctionE BasisFunction>
1841 template <
typename BasisType>
1844 static_assert(BasisType::hasFunction,
"Call to function not available");
1848 return basis.function(
i, x);
1865 template <
typename BasisType>
1868 static_assert(BasisType::hasGradient,
"Call to gradient not available");
1872 return basis.gradient(
i, x);
1888 template <
typename BasisType>
1891 static_assert(BasisType::hasCurl,
"Call to curl not available");
1895 return basis.curl(
i, x);
1911 template <
typename BasisType>
1914 static_assert(BasisType::hasDivergence,
"Call to divergence not available");
1918 return basis.divergence(
i, x);
1935 template <
typename BasisType>
1938 static_assert(BasisType::hasHessian,
"Call to hessian not available");
1942 return basis.hessian(
i, x);
1959 template <
typename BasisType>
1962 static_assert(BasisType::hasCurlCurl,
"Call to curl curl not available");
1966 return basis.curlcurl(
i, x);
1984 template <
typename ScalarBasisType,
size_t N>
2016 template <
typename ScalarBasisType,
size_t N>
2048 template <
typename ScalarBasisType,
size_t N>
2064 return basis.
curl(
i, x);
2081 template <
typename ScalarBasisType,
size_t N>
2114 template <
typename ScalarBasisType,
size_t N>
2148 template <
typename ScalarBasisType,
size_t N>
2180 template <
typename ScalarBasisType,
size_t N>
2218 template <BasisFunctionE BasisFunction>
2222 template <
typename BasisType>
2223 static boost::multi_array<typename detail::basis_evaluation_traits<BasisType, BasisFunction>::ReturnValue, 2>
2231 boost::multi_array<typename traits::ReturnValue, 2>
2234 for (
size_t i = 0;
i < basis.dimension();
i++)
2246 template <
typename BasisType>
2247 static boost::multi_array<typename detail::basis_evaluation_traits<Family<BasisType>,
BasisFunction>::ReturnValue, 2>
2255 boost::multi_array<typename traits::ReturnValue, 2>
2260 boost::multi_array<typename traits::ReturnValue, 2>
2273 template <
typename BasisType,
size_t N>
2274 static boost::multi_array<typename detail::basis_evaluation_traits<TensorizedVectorFamily<BasisType, N>,
BasisFunction>::ReturnValue, 2>
2282 boost::multi_array<typename traits::ReturnValue, 2>
2286 const boost::multi_array<typename traits::AncestorBasisFunctionValue, 2>
ancestor_basis_quad
2298 template <
typename BasisType,
size_t N>
2299 static boost::multi_array<typename detail::basis_evaluation_traits<MatrixFamily<BasisType, N>,
BasisFunction>::ReturnValue, 2>
2307 boost::multi_array<typename traits::ReturnValue, 2>
2311 const boost::multi_array<typename traits::AncestorBasisFunctionValue, 2>
ancestor_basis_quad
2337 template <
typename T>
2352 Eigen::MatrixXd B = Eigen::MatrixXd::Zero(
Nb,
Nb);
2360 B(0, 0) = 1. /
norm;
2365 Eigen::RowVectorXd
coeffs = Eigen::RowVectorXd::Zero(
ib);
2403 double scalar_product(
const double &x,
const Eigen::Matrix<double, 1, 1> &y);
2410 double scalar_product(
const Eigen::Matrix<double, N, N> & x,
const Eigen::Matrix<double, N, N> & y)
2412 return (x.transpose() * y).trace();
2416 template <
typename Value>
2418 const boost::multi_array<Value, 2> &
basis_quad,
2430 boost::multi_array<VectorRd, 2>
2432 const boost::multi_array<VectorRd, 2> &
basis_quad,
2437 template <
typename BasisType>
2441 boost::multi_array<typename BasisType::FunctionValue, 2> &
basis_quad
2464 template <
typename BasisType>
2467 const Eigen::MatrixXd &
GM
2471 assert(basis.dimension() ==
size_t(
GM.rows()) &&
GM.rows() ==
GM.cols());
2473 Eigen::MatrixXd
L =
GM.llt().matrixL();
2485 template <
typename FunctionValue>
2487 const boost::multi_array<FunctionValue, 2> &
B2,
2491 const std::string
sym =
"nonsym"
2495 assert(
qr.size() ==
B1.shape()[1] &&
qr.size() ==
B2.shape()[1]);
2500 Eigen::ArrayXd
qr_weights = Eigen::ArrayXd::Zero(
qr.size());
2506 Eigen::MatrixXd
M = Eigen::MatrixXd::Zero(
nrows,
ncols);
2512 for (
size_t j = 0;
j <
jcut;
j++)
2518 std::vector<double>
tmp(
B1.shape()[1]);
2520 auto B1i =
B1[boost::indices[
i][boost::multi_array_types::index_range(0,
B1.shape()[1])]];
2521 auto B2j =
B2[boost::indices[
j][boost::multi_array_types::index_range(0,
B1.shape()[1])]];
2523 std::transform(
B1i.begin(),
B1i.end(),
B2j.begin(),
tmp.begin(), [](FunctionValue
a, FunctionValue
b) ->
double { return scalar_product(a, b); });
2524 Eigen::ArrayXd
tmp_array = Eigen::Map<Eigen::ArrayXd, Eigen::Unaligned>(
tmp.data(),
tmp.size());
2543 template <
typename FunctionValue>
2545 const boost::multi_array<FunctionValue, 2> &
B2,
2547 const std::string
sym =
"nonsym"
2554 template <
typename FunctionValue>
2564 const boost::multi_array<double, 2> &
B2,
2572 const boost::multi_array<double, 2> &
B2,
2576 const std::string
sym =
"nonsym"
2583 const boost::multi_array<double, 2> &
B2,
2585 const std::string
sym =
"nonsym"
2592 const boost::multi_array<VectorRd, 2> &
B2,
2596 const std::string
sym =
"nonsym"
2601 const boost::multi_array<VectorRd, 2> &
B2,
2603 const std::string
sym =
"nonsym"
2607 template<
typename ScalarFamilyType,
size_t N>
2613 Eigen::MatrixXd
Gram = Eigen::MatrixXd::Zero(
MatFam.dimension(),
MatFam.dimension());
2625 template <
typename T>
2648 Eigen::VectorXd V = Eigen::VectorXd::Zero(
n_rows);
2664 template <
typename T,
typename U>
2672 const std::string
sym =
"nonsym"
2700 for (
size_t j = 0;
j <
jcut;
j++)
2714 template <
typename T,
typename U>
2720 const std::string
sym
2751 template <
typename BasisType>
2753 const std::function<
typename BasisType::FunctionValue(
const VectorRd &)> &
f,
2756 const boost::multi_array<typename BasisType::FunctionValue, 2> &
basis_quad,
2757 const Eigen::MatrixXd &
mass_basis = Eigen::MatrixXd::Zero(1,1)
2761 if (
Mass.norm() < 1
e-13){
2765 Eigen::VectorXd
b = Eigen::VectorXd::Zero(basis.dimension());
2766 for (
size_t i = 0;
i < basis.dimension();
i++)
2786 template <
typename BasisType>
2799 m_dim(basis.dimension()),
2812 VectorRd
tF =
F.edge(0)->tangent();
2813 VectorRd
nF =
F.edge_normal(0);
2814 VectorRd
x0 =
F.center_mass() -
F.diam()*(
tF+
nF)/3.0;
2835 m_dim(basis.dimension()),
2847 VectorRd
e0(1., 0., 0.);
2848 VectorRd
e1(0., 1., 0.);
2849 VectorRd
e2(0., 0., 1.);
2850 VectorRd
xT = T.center_mass() - T.diam()*(
e0+
e1+
e2)/3.0;
2874 boost::multi_array<typename BasisType::FunctionValue, 2> &
values
Basis for the space of curls of polynomials.
Definition basis.hpp:1318
Basis (or rather family) of divergence of an existing basis.
Definition basis.hpp:1381
Family of functions expressed as linear combination of the functions of a given basis.
Definition basis.hpp:389
Basis for the complement G^{c,k}(T) in P^k(T)^3 of the range of grad.
Definition basis.hpp:1531
Basis for the complement G^{c,k}(F) in P^k(F)^2 of the range of the gradient on a face.
Definition basis.hpp:1682
Basis for the space of gradients of polynomials.
Definition basis.hpp:1256
Matrix family obtained from a scalar family.
Definition basis.hpp:778
Scalar monomial basis on a cell.
Definition basis.hpp:155
Scalar monomial basis on an edge.
Definition basis.hpp:320
Scalar monomial basis on a face.
Definition basis.hpp:226
Generate a basis restricted to the first "dimension" functions.
Definition basis.hpp:1147
Basis for the complement R^{c,k}(T) in P^k(T)^3 of the range of curl.
Definition basis.hpp:1460
Basis for the complement R^{c,k}(F) in P^k(F)^2 of the range of the vectorial rotational on a face.
Definition basis.hpp:1608
Generate a basis where the function indices are shifted.
Definition basis.hpp:1040
Vector family for polynomial functions that are tangent to a certain place (determined by the generat...
Definition basis.hpp:948
Vector family obtained by tensorization of a scalar family.
Definition basis.hpp:610
static constexpr const bool hasAncestor
Definition basis.hpp:400
Eigen::Matrix< double, dimspace, dimspace *dimspace > HessianValue
Definition basis.hpp:1466
static constexpr const bool hasAncestor
Definition basis.hpp:239
void GradientValue
Definition basis.hpp:1259
DivergenceValue divergence(size_t i, const VectorRd &x) const
Evaluate the divergence of the i-th basis function at point x.
Definition basis.hpp:1229
double DivergenceValue
Definition basis.hpp:1687
double DivergenceValue
Definition basis.hpp:1536
VectorRd FunctionValue
Definition basis.hpp:1462
size_t max_degree() const
Returns the maximum degree of the basis functions.
Definition basis.hpp:358
static const bool hasCurlCurl
Definition basis.hpp:1335
Family< BasisType > l2_orthonormalize(const BasisType &basis, const QuadratureRule &qr, boost::multi_array< typename BasisType::FunctionValue, 2 > &basis_quad)
-orthonormalization: simply consists in using gram_schmidt() with the specific l2 inner product
Definition basis.hpp:2438
MatrixRd AncestorBasisFunctionValue
Definition basis.hpp:2121
VectorRd CurlValue
Definition basis.hpp:1535
const Eigen::MatrixXd symmetriseOperator() const
Return the symmetrisation operator, the rN^2 square matrix that to a given vector of coefficients on ...
Definition basis.hpp:883
Eigen::Matrix< double, dimspace, dimspace *dimspace > HessianValue
Definition basis.hpp:1614
DivergenceValue divergence(size_t i, size_t iqn, const boost::multi_array< DivergenceValue, 2 > &ancestor_divergence_quad) const
Evaluate the divergence of the i-th function at a quadrature point iqn, knowing all the divergences o...
Definition basis.hpp:520
static ReturnValue evaluate(const BasisType &basis, size_t i, size_t iqn, const boost::multi_array< ReturnValue, 2 > &ancestor_hessian_quad)
Definition basis.hpp:1946
static const bool hasGradient
Definition basis.hpp:1269
static const bool hasHessian
Definition basis.hpp:1547
size_t dimension() const
Return the dimension of the family.
Definition basis.hpp:984
Eigen::Matrix< double, 2, dimspace > JacobianType
Definition basis.hpp:1692
size_t dimension() const
Return the dimension of the basis.
Definition basis.hpp:1073
static const bool hasCurl
Definition basis.hpp:1474
static constexpr const bool hasAncestor
Definition basis.hpp:1051
double DivergenceValue
Definition basis.hpp:160
static ReturnValue evaluate(const TensorizedVectorFamily< ScalarBasisType, N > &basis, size_t i, const VectorRd &x)
Definition basis.hpp:2058
VectorRd FunctionValue
Definition basis.hpp:1610
constexpr const BasisType & ancestor() const
Return the ancestor.
Definition basis.hpp:565
MatrixRd HessianValue
Definition basis.hpp:161
VectorRd FunctionValue
Definition basis.hpp:950
static ReturnValue evaluate(const MatrixFamily< ScalarBasisType, N > &basis, size_t i, size_t iqn, const boost::multi_array< double, 2 > &ancestor_basis_quad)
Definition basis.hpp:2168
static const bool hasHessian
Definition basis.hpp:1056
static const bool hasDivergence
Definition basis.hpp:1699
static const bool hasHessian
Definition basis.hpp:1626
void CurlValue
Definition basis.hpp:782
constexpr const BasisType & ancestor() const
Return the ancestor (basis that the gradient was taken of)
Definition basis.hpp:1301
VectorRd CurlValue
Definition basis.hpp:230
static constexpr const TensorRankE tensorRank
Definition basis.hpp:1157
Eigen::Matrix< double, dimspace, dimspace *dimspace > HessianValue
Definition basis.hpp:1688
static ReturnValue evaluate(const MatrixFamily< ScalarBasisType, N > &basis, size_t i, size_t iqn, const boost::multi_array< VectorRd, 2 > &ancestor_basis_quad)
Definition basis.hpp:2200
BasisType::FunctionValue FunctionValue
Definition basis.hpp:1149
CurlValue curl(size_t i, const VectorRd &x) const
Evaluate the two-dimensional curl of the i-th basis function at point x.
Definition basis.cpp:91
static ReturnValue evaluate(const BasisType &basis, size_t i, const VectorRd &x)
Definition basis.hpp:1870
Face GeometricSupport
Definition basis.hpp:956
static const bool hasHessian
Definition basis.hpp:1476
static const bool hasGradient
Definition basis.hpp:333
static const bool hasCurlCurl
Definition basis.hpp:1164
size_t dimPkmo() const
Returns the dimension of P^{k-1}(R^3)
Definition basis.hpp:1581
static ReturnValue evaluate(const TensorizedVectorFamily< ScalarBasisType, N > &basis, size_t i, size_t iqn, const boost::multi_array< MatrixRd, 2 > &ancestor_basis_quad)
Definition basis.hpp:2134
BasisType::DivergenceValue ReturnValue
Definition basis.hpp:1915
GradientValue gradient(size_t i, const VectorRd &x) const
Evaluate the gradient of the i-th basis function at point x.
Definition basis.hpp:1105
static boost::multi_array< typename detail::basis_evaluation_traits< MatrixFamily< BasisType, N >, BasisFunction >::ReturnValue, 2 > compute(const MatrixFamily< BasisType, N > &basis, const QuadratureRule &quad)
Evaluate a Matrix family at quadrature nodes (optimised compared the generic basis evaluation,...
Definition basis.hpp:2300
size_t dimension() const
Return the dimension of the family.
Definition basis.hpp:641
const std::shared_ptr< RolyComplBasisFace > & rck() const
Return the Rck basis.
Definition basis.hpp:1725
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th basis function at point x.
Definition basis.hpp:1295
static constexpr const TensorRankE tensorRank
Definition basis.hpp:1050
boost::multi_array< T, 2 > BasisQuad
type for bases evaluated on quadrature nodes
Definition basis.hpp:61
static const bool hasDivergence
Definition basis.hpp:335
constexpr int dimspace
Dimension, and generic types for vector in correct dimension (makes it easier to translate a code bet...
Definition basis.hpp:50
TensorizedVectorFamily< ScalarBasisType, N >::GradientValue ReturnValue
Definition basis.hpp:2021
static const bool hasGradient
Definition basis.hpp:961
GradientValue gradient(size_t i, const VectorRd &x) const
Evaluate the gradient of the i-th basis function at point x.
Definition basis.cpp:81
constexpr const BasisType & ancestor() const
Return the underlying complete basis.
Definition basis.hpp:1085
BasisType AncestorType
Definition basis.hpp:1166
Family< TensorizedVectorFamily< ScalarBasisType, N > > GenericTensorization(const ScalarBasisType &B, const std::vector< Eigen::VectorXd > &v)
From a scalar family B=(B_1..B_r) and vectors (v_1..v_k) in R^N, constructs a "Family" of "Tensorized...
Definition basis.hpp:1767
static std::function< Eigen::MatrixXd(const Eigen::MatrixXd &)> symmetrise_matrix
Function to symmetrise a matrix (useful together with transform_values_quad)
Definition basis.hpp:1801
static const bool hasHessian
Definition basis.hpp:1334
DivergenceValue divergence(size_t i, size_t iqn, const boost::multi_array< VectorRd, 2 > &ancestor_gradient_quad) const
Evaluate the divergence of the i-th basis function at a quadrature point iqn, knowing all the gradien...
Definition basis.hpp:856
size_t max_degree() const
Returns the maximum degree of the basis functions.
Definition basis.hpp:1498
FunctionValue function(size_t i, size_t iqn, const boost::multi_array< double, 2 > &ancestor_value_quad) const
Evaluate the i-th basis function at a quadrature point iqn, knowing all the values of ancestor basis ...
Definition basis.hpp:657
VectorRd CurlValue
Definition basis.hpp:614
void GradientValue
Definition basis.hpp:1384
Eigen::Matrix< double, dimspace, dimspace *dimspace > HessianValue
Definition basis.hpp:1537
FunctionValue function(size_t i, size_t iqn, const boost::multi_array< FunctionValue, 2 > &ancestor_value_quad) const
Evaluate the i-th function at a quadrature point iqn, knowing all the values of ancestor basis functi...
Definition basis.hpp:441
BasisType::FunctionValue FunctionValue
Definition basis.hpp:391
CurlValue curlcurl(size_t i, size_t iqn, const boost::multi_array< typename ScalarFamilyType::HessianValue, 2 > &ancestor_hessian_quad) const
Evaluate the curl curl of the i-th basis function at a quadrature point iqn, knowing all the values o...
Definition basis.hpp:735
CurlValue curl(size_t i, const VectorRd &x) const
Evaluate the curl of the i-th basis function at point x.
Definition basis.hpp:687
static const bool hasDivergence
Definition basis.hpp:1396
DivergenceBasis< TangentFamily< ScalarFamilyType > > ScalarRotFamily(const TangentFamily< ScalarFamilyType > &tangent_family, const Face &F)
The following function creates the "scalar rot" basis of a TangentFamily on a face.
Definition basis.hpp:1440
TensorizedVectorFamily(const ScalarFamilyType &scalar_family)
Definition basis.hpp:633
static const bool hasFunction
Definition basis.hpp:332
static std::vector< VectorZd > homogeneous(const size_t L)
Definition basis.hpp:85
static boost::multi_array< typename detail::basis_evaluation_traits< TensorizedVectorFamily< BasisType, N >, BasisFunction >::ReturnValue, 2 > compute(const TensorizedVectorFamily< BasisType, N > &basis, const QuadratureRule &quad)
Evaluate a tensorized family at quadrature nodes (optimised compared the generic basis evaluation,...
Definition basis.hpp:2275
const Eigen::MatrixXd transposeOperator() const
Return the transpose operator, the rN^2 square matrix that to a given vector of coefficients on the M...
Definition basis.hpp:877
static const bool hasDivergence
Definition basis.hpp:170
double DivergenceValue
Definition basis.hpp:231
static constexpr const TensorRankE tensorRank
Definition basis.hpp:330
Eigen::Matrix< double, dimspace, dimspace > CurlValue
Definition basis.hpp:1464
ScalarFamilyType AncestorType
Definition basis.hpp:967
static constexpr const TensorRankE tensorRank
Definition basis.hpp:1266
BasisType::GeometricSupport GeometricSupport
Definition basis.hpp:1326
static const bool hasFunction
Definition basis.hpp:1622
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th function at point x.
Definition basis.hpp:428
double DivergenceValue
Definition basis.hpp:615
static const bool hasCurlCurl
Definition basis.hpp:172
static boost::multi_array< typename detail::basis_evaluation_traits< BasisType, BasisFunction >::ReturnValue, 2 > compute(const BasisType &basis, const QuadratureRule &quad)
Generic basis evaluation.
Definition basis.hpp:2224
VectorZd powers(size_t i) const
Returns the powers of the i-th basis function (its degree can be found using powers(i)....
Definition basis.hpp:202
static std::vector< Eigen::Vector2i > homogeneous(const size_t L)
Definition basis.hpp:119
static const bool hasCurl
Definition basis.hpp:334
static constexpr const bool hasAncestor
Definition basis.hpp:789
static const bool hasDivergence
Definition basis.hpp:1271
size_t dimension() const
Compute the dimension of the basis.
Definition basis.hpp:1557
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th basis function at point x.
Definition basis.cpp:271
BasisType::DivergenceValue FunctionValue
Definition basis.hpp:1383
static const bool hasGradient
Definition basis.hpp:402
size_t dimension() const
Dimension of the basis.
Definition basis.hpp:254
static const bool hasGradient
Definition basis.hpp:1331
static constexpr const TensorRankE tensorRank
Definition basis.hpp:958
GradientValue gradient(size_t i, const VectorRd &x) const
Evaluate the gradient of the i-th basis function at point x.
Definition basis.hpp:667
static const bool hasHessian
Definition basis.hpp:1163
static const bool hasCurlCurl
Definition basis.hpp:629
VectorRd GradientValue
Definition basis.hpp:229
static const bool hasCurl
Definition basis.hpp:1624
const JacobianType & jacobian() const
Return the Jacobian of the coordinate system transformation.
Definition basis.hpp:1648
size_t max_degree() const
Returns the maximum degree of the basis functions.
Definition basis.hpp:1091
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th basis function at point x.
Definition basis.hpp:831
DecomposePoly(const Face &F, const BasisType &basis)
Constructor for face.
Definition basis.hpp:2795
double scalar_product(const double &x, const double &y)
Scalar product between two reals.
Definition basis.cpp:308
VectorRd GradientValue
Definition basis.hpp:951
static constexpr const bool hasAncestor
Definition basis.hpp:1471
static const bool hasFunction
Definition basis.hpp:1472
static const bool hasCurl
Definition basis.hpp:169
CurlValue curlcurl(size_t i, const VectorRd &x) const
Evaluate the curl curl of the i-th basis function at point x.
Definition basis.hpp:1002
Face GeometricSupport
Definition basis.hpp:234
static constexpr const TensorRankE tensorRank
Definition basis.hpp:165
Eigen::Matrix< double, N, 1 > DivergenceValue
Definition basis.hpp:783
VectorRd CurlValue
Definition basis.hpp:159
std::function< T(const VectorRd &, const Cell *)> CellFType
type for function of point. T is the return type of the function
Definition basis.hpp:58
static const bool hasHessian
Definition basis.hpp:628
Eigen::MatrixXd gram_schmidt(boost::multi_array< T, 2 > &basis_eval, const std::function< double(size_t, size_t)> &inner_product)
Definition basis.hpp:2338
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th basis function at point x.
Definition basis.hpp:1357
Eigen::Matrix< double, 2, dimspace > generators() const
Returns the generators of the basis functions.
Definition basis.hpp:1022
BasisType::HessianValue ReturnValue
Definition basis.hpp:1939
static const bool hasFunction
Definition basis.hpp:1543
Eigen::Matrix< double, dimspace, dimspace > CurlValue
Definition basis.hpp:1322
VectorRd CurlValue
Definition basis.hpp:324
Eigen::Matrix< double, dimspace, dimspace > GradientValue
Definition basis.hpp:1321
BasisType::CurlValue CurlValue
Definition basis.hpp:1151
Eigen::Matrix< double, N, 1 > FunctionValue
Definition basis.hpp:612
static const bool hasDivergence
Definition basis.hpp:1333
std::function< T(const VectorRd &)> FType
type for function of point. T is the return type of the function
Definition basis.hpp:55
BasisType::HessianValue HessianValue
Definition basis.hpp:1046
VectorRd AncestorBasisFunctionValue
Definition basis.hpp:2023
double DivergenceValue
Definition basis.hpp:1323
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th basis function at point x.
Definition basis.cpp:74
const Eigen::MatrixXd & matrix() const
Return the coefficient matrix.
Definition basis.hpp:559
BasisType::HessianValue HessianValue
Definition basis.hpp:395
double AncestorBasisFunctionValue
Definition basis.hpp:1991
CurlValue curl(size_t i, size_t iqn, const boost::multi_array< VectorRd, 2 > &ancestor_gradient_quad) const
Evaluate the curl of the i-th basis function at a quadrature point iqn, knowing all the gradients of ...
Definition basis.hpp:697
VectorZd powers(size_t i) const
Returns the powers of the i-th basis function (not including the vector part)
Definition basis.hpp:1575
const JacobianType coordinates_system() const
Return the system of coordinates (basis in rows) on the face.
Definition basis.hpp:290
static ReturnValue evaluate(const TensorizedVectorFamily< ScalarBasisType, N > &basis, size_t i, const VectorRd &x)
Definition basis.hpp:2124
TensorizedVectorFamily< ScalarBasisType, N >::CurlValue ReturnValue
Definition basis.hpp:2119
void DivergenceValue
Definition basis.hpp:1386
const ScalarFamilyType & ancestor() const
Return the ancestor (family that has been tensorized)
Definition basis.hpp:865
size_t max_degree() const
Returns the maximum degree of the basis functions.
Definition basis.hpp:754
Eigen::VectorXd l2_projection(const std::function< typename BasisType::FunctionValue(const VectorRd &)> &f, const BasisType &basis, QuadratureRule &quad, const boost::multi_array< typename BasisType::FunctionValue, 2 > &basis_quad, const Eigen::MatrixXd &mass_basis=Eigen::MatrixXd::Zero(1, 1))
Compute the L2-projection of a function.
Definition basis.hpp:2752
static constexpr const bool hasAncestor
Definition basis.hpp:1158
MatrixFamily(const ScalarFamilyType &scalar_family)
Definition basis.hpp:799
static const bool hasGradient
Definition basis.hpp:1160
DivergenceValue divergence(size_t i, const VectorRd &x) const
Evaluate the divergence of the i-th basis function at point x.
Definition basis.hpp:1121
double DivergenceValue
Definition basis.hpp:1613
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th basis function at point x.
Definition basis.hpp:1097
BasisType::GeometricSupport GeometricSupport
Definition basis.hpp:1048
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th basis function at point x.
Definition basis.cpp:221
CurlValue curl(size_t i, const VectorRd &x) const
Evaluate the curl of the i-th basis function at point x.
Definition basis.hpp:1221
Eigen::VectorXd integrate(const FType< T > &f, const BasisQuad< T > &B, const QuadratureRule &qr, size_t n_rows=0)
Computes the vector of integrals (f, phi_i)
Definition basis.hpp:2626
static const bool hasCurl
Definition basis.hpp:403
static const bool hasGradient
Definition basis.hpp:1394
size_t dimension() const
Dimension of the basis.
Definition basis.hpp:1710
boost::multi_array< typename BasisType::FunctionValue, 2 > m_on_basis_nodes
Definition basis.hpp:2891
double DivergenceValue
Definition basis.hpp:1465
static ReturnValue evaluate(const BasisType &basis, size_t i, const VectorRd &x)
Definition basis.hpp:1940
static ReturnValue evaluate(const MatrixFamily< ScalarBasisType, N > &basis, size_t i, const VectorRd &x)
Definition basis.hpp:2158
VectorRd GradientValue
Definition basis.hpp:323
static const bool hasGradient
Definition basis.hpp:1473
VectorZd powers(size_t i) const
Returns the powers of the i-th basis function (not including the vector part)
Definition basis.hpp:1504
static const bool hasCurlCurl
Definition basis.hpp:406
MatrixFamily< ScalarBasisType, N >::DivergenceValue ReturnValue
Definition basis.hpp:2185
HessianValue hessian(size_t i, const VectorRd &x) const
Evaluate the Hessian of the i-th basis function at point x.
Definition basis.cpp:96
double FunctionValue
Definition basis.hpp:228
BasisType::GeometricSupport GeometricSupport
Definition basis.hpp:1389
static const bool hasCurlCurl
Definition basis.hpp:965
static constexpr const bool hasAncestor
Definition basis.hpp:1542
Eigen::Matrix< double, dimspace, dimspace > GradientValue
Definition basis.hpp:1611
ScalarFamilyType AncestorType
Definition basis.hpp:631
static constexpr const bool hasAncestor
Definition basis.hpp:1329
Eigen::Matrix< double, dimspace, dimspace > CurlValue
Definition basis.hpp:1612
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th basis function at point x.
Definition basis.hpp:990
GradientValue gradient(size_t i, size_t iqn, const boost::multi_array< VectorRd, 2 > &ancestor_gradient_quad) const
Evaluate the gradient of the i-th basis function at a quadrature point iqn, knowing all the gradients...
Definition basis.hpp:677
BasisType::HessianValue HessianValue
Definition basis.hpp:1153
constexpr const BasisType & ancestor() const
Return the ancestor (basis that the gradient was taken of)
Definition basis.hpp:1426
static const bool hasHessian
Definition basis.hpp:1700
DivergenceValue divergence(size_t i, const VectorRd &x) const
Evaluate the divergence of the i-th basis function at point x.
Definition basis.hpp:996
static constexpr const TensorRankE tensorRank
Definition basis.hpp:1470
static const bool hasFunction
Definition basis.hpp:790
BasisFunctionE
Definition basis.hpp:1741
DivergenceValue divergence(size_t i, const VectorRd &x) const
Evaluate the divergence of the i-th basis function at point x.
Definition basis.hpp:707
static const bool hasFunction
Definition basis.hpp:1393
BasisType AncestorType
Definition basis.hpp:1337
static const bool hasGradient
Definition basis.hpp:1053
static ReturnValue evaluate(const MatrixFamily< ScalarBasisType, N > &basis, size_t i, const VectorRd &x)
Definition basis.hpp:2190
MatrixFamily< ScalarBasisType, N >::FunctionValue ReturnValue
Definition basis.hpp:2153
static ReturnValue evaluate(const TensorizedVectorFamily< ScalarBasisType, N > &basis, size_t i, const VectorRd &x)
Definition basis.hpp:2026
VectorRd FunctionValue
Definition basis.hpp:1320
GradientValue gradient(size_t i, const VectorRd &x) const
Evaluate the gradient of the i-th function at point x.
Definition basis.hpp:455
double FunctionValue
Definition basis.hpp:157
BasisType::GradientValue GradientValue
Definition basis.hpp:1150
VectorRd FunctionValue
Definition basis.hpp:1533
static const bool hasFunction
Definition basis.hpp:240
TensorizedVectorFamily< ScalarBasisType, N >::DivergenceValue ReturnValue
Definition basis.hpp:2086
BasisType m_basis
Definition basis.hpp:2889
boost::multi_array< VectorRd, 2 > vector_product(const boost::multi_array< VectorRd, 2 > &basis_quad, const VectorRd &v)
Compute the vector (cross) product between the evaluation of a basis and a constant vector.
Definition basis.cpp:324
static ReturnValue evaluate(const BasisType &basis, size_t i, const VectorRd &x)
Definition basis.hpp:1893
static const bool hasDivergence
Definition basis.hpp:1475
static const bool hasCurlCurl
Definition basis.hpp:1273
DivergenceBasis(const BasisType &basis)
Constructor.
Definition basis.hpp:1403
TensorRankE
Definition basis.hpp:64
static std::vector< Eigen::Vector2i > complete(size_t degree)
Definition basis.hpp:131
static const bool hasCurlCurl
Definition basis.hpp:1627
VectorRd CurlValue
Definition basis.hpp:952
static const bool hasFunction
Definition basis.hpp:1696
DivergenceValue divergence(size_t i, const VectorRd &x) const
Evaluate the divergence of the i-th basis function at point x.
Definition basis.hpp:847
static const bool hasCurl
Definition basis.hpp:1545
DivergenceValue divergence(size_t i, const VectorRd &x) const
Evaluate the divergence of the i-th function at point x.
Definition basis.hpp:507
Eigen::Matrix< double, N, dimspace > GradientValue
Definition basis.hpp:613
CurlValue curlcurl(size_t i, const VectorRd &x) const
Evaluate the curl curl of the i-th basis function at point x. We use the formula curl curl = - Laplac...
Definition basis.hpp:723
static constexpr const bool hasAncestor
Definition basis.hpp:1695
void CurlValue
Definition basis.hpp:1385
static ReturnValue evaluate(const TensorizedVectorFamily< ScalarBasisType, N > &basis, size_t i, size_t iqn, const boost::multi_array< VectorRd, 2 > &ancestor_basis_quad)
Definition basis.hpp:2036
CurlValue curl(size_t i, size_t iqn, const boost::multi_array< CurlValue, 2 > &ancestor_curl_quad) const
Evaluate the curl of the i-th function at a quadrature point iqn, knowing all the curls of ancestor b...
Definition basis.hpp:494
double DivergenceValue
Definition basis.hpp:325
static constexpr const bool hasAncestor
Definition basis.hpp:1267
static constexpr const bool hasAncestor
Definition basis.hpp:621
BasisType::DivergenceValue DivergenceValue
Definition basis.hpp:394
static constexpr const TensorRankE tensorRank
Definition basis.hpp:788
static ReturnValue evaluate(const BasisType &basis, size_t i, const VectorRd &x)
Definition basis.hpp:1964
Eigen::Matrix2d HessianValue
Definition basis.hpp:954
VectorRd AncestorBasisFunctionValue
Definition basis.hpp:2055
BasisType::CurlValue ReturnValue
Definition basis.hpp:1892
Family< BasisType > m_on_basis
Definition basis.hpp:2890
static constexpr const TensorRankE tensorRank
Definition basis.hpp:1391
size_t dimension() const
Compute the dimension of the basis.
Definition basis.hpp:1486
BasisType::GeometricSupport GeometricSupport
Definition basis.hpp:1155
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:338
QuadratureRule get_nodes() const
Return the set of nodes (useful to compute value of polynomial to decompose via evaluate_quad)
Definition basis.hpp:2867
static constexpr const bool hasAncestor
Definition basis.hpp:166
static const bool hasCurlCurl
Definition basis.hpp:1477
static const bool hasCurl
Definition basis.hpp:242
BasisType::CurlValue ReturnValue
Definition basis.hpp:1963
void CurlValue
Definition basis.hpp:1260
static const bool hasFunction
Definition basis.hpp:622
static constexpr const TensorRankE tensorRank
Definition basis.hpp:1541
Eigen::Matrix< double, 2, dimspace > JacobianType
Definition basis.hpp:1618
Eigen::Vector2i powers(size_t i) const
Returns the powers of the i-th basis function.
Definition basis.hpp:1660
BasisType::GeometricSupport GeometricSupport
Definition basis.hpp:397
size_t dimension() const
Dimension of the basis.
Definition basis.hpp:346
CurlValue curl(size_t i, const VectorRd &x) const
Evaluate the curl of the i-th basis function at point x.
Definition basis.cpp:229
double FunctionValue
Definition basis.hpp:322
static ReturnValue evaluate(const BasisType &basis, size_t i, size_t iqn, const boost::multi_array< ReturnValue, 2 > &ancestor_value_quad)
Definition basis.hpp:1852
static ReturnValue evaluate(const BasisType &basis, size_t i, size_t iqn, const boost::multi_array< ReturnValue, 2 > &ancestor_divergence_quad)
Definition basis.hpp:1922
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th basis function at point x.
Definition basis.cpp:151
Family(const BasisType &basis, const Eigen::MatrixXd &matrix)
Constructor.
Definition basis.hpp:411
static constexpr const TensorRankE tensorRank
Definition basis.hpp:238
DivergenceValue divergence(size_t i, const VectorRd &x) const
Evaluate the divergence of the i-th basis function at point x.
Definition basis.cpp:278
boost::multi_array< outValue, 2 > transform_values_quad(const boost::multi_array< inValue, 2 > &B_quad, const FunctionType &F)
Takes an array B_quad of values at quadrature nodes and applies the function F to all of them....
Definition basis.hpp:1752
static const bool hasGradient
Definition basis.hpp:1623
void DivergenceValue
Definition basis.hpp:1261
static ReturnValue evaluate(const TensorizedVectorFamily< ScalarBasisType, N > &basis, size_t i, size_t iqn, const boost::multi_array< double, 2 > &ancestor_basis_quad)
Definition basis.hpp:2004
const JacobianType & jacobian() const
Return the Jacobian of the coordinate system transformation.
Definition basis.hpp:284
static const bool hasFunction
Definition basis.hpp:1330
BasisType::GradientValue GradientValue
Definition basis.hpp:392
void HessianValue
Definition basis.hpp:1387
static ReturnValue evaluate(const TensorizedVectorFamily< ScalarBasisType, N > &basis, size_t i, const VectorRd &x)
Definition basis.hpp:2091
size_t dimension() const
Dimension of the family. This is actually the number of functions in the family, not necessarily line...
Definition basis.hpp:422
size_t max_degree() const
Returns the maximum degree of the basis functions.
Definition basis.hpp:196
void HessianValue
Definition basis.hpp:616
TensorizedVectorFamily< ScalarBasisType, N >::CurlValue ReturnValue
Definition basis.hpp:2053
size_t dimension() const
Compute the dimension of the basis.
Definition basis.hpp:181
static ReturnValue evaluate(const BasisType &basis, size_t i, size_t iqn, const boost::multi_array< ReturnValue, 2 > &ancestor_gradient_quad)
Definition basis.hpp:1876
const size_t matrixSize() const
Return the dimension of the matrices in the family.
Definition basis.hpp:871
static const bool hasGradient
Definition basis.hpp:168
HessianValue hessian(size_t i, const VectorRd &x) const
Evaluate the hessian of the i-th basis function at point x.
Definition basis.cpp:40
static const bool hasCurl
Definition basis.hpp:793
Family< MatrixFamily< ScalarBasisType, N > > IsotropicMatrixFamily(const ScalarBasisType &B)
From a scalar family B, constructs a "Family" of "MatrixFamily" (built on B, of size NxN) that repres...
Definition basis.hpp:1810
static const bool hasDivergence
Definition basis.hpp:1546
BasisType AncestorType
Definition basis.hpp:1275
ScalarFamilyType::GeometricSupport GeometricSupport
Definition basis.hpp:786
DivergenceValue divergence(size_t i, size_t iqn, const boost::multi_array< VectorRd, 2 > &ancestor_gradient_quad) const
Evaluate the divergence of the i-th basis function at a quadrature point iqn, knowing all the gradien...
Definition basis.hpp:715
static const bool hasFunction
Definition basis.hpp:401
Family< BasisType > family(boost::multi_array< typename BasisType::FunctionValue, 2 > &values)
Returns the decomposed polynomials as a Family of the provided basis.
Definition basis.hpp:2873
size_t m_dim
Definition basis.hpp:2888
static const bool hasCurl
Definition basis.hpp:1270
BasisType::DivergenceValue DivergenceValue
Definition basis.hpp:1152
static constexpr const TensorRankE tensorRank
Definition basis.hpp:399
static const bool hasGradient
Definition basis.hpp:791
constexpr const BasisType & ancestor() const
Return the ancestor (basis that the gradient was taken of)
Definition basis.hpp:1363
Eigen::Matrix< double, dimspace, dimspace > GradientValue
Definition basis.hpp:1463
const VectorRd & normal() const
Return the normal to the face used in the computation of the curl.
Definition basis.hpp:1719
const Eigen::MatrixXd traceOperator() const
Returns the matrix corresponding to the trace, expressed as a linear operator between that MatrixFami...
Definition basis.hpp:914
static const bool hasCurl
Definition basis.hpp:1332
Eigen::Matrix3d MatrixRd
Definition basis.hpp:51
BasisType::GradientValue FunctionValue
Definition basis.hpp:1258
static const bool hasHessian
Definition basis.hpp:171
static const bool hasDivergence
Definition basis.hpp:1055
static const bool hasDivergence
Definition basis.hpp:243
static const bool hasGradient
Definition basis.hpp:1697
Eigen::Vector2i powers(size_t i) const
Returns the powers of the i-th basis function (its degree can be found using powers(i)....
Definition basis.hpp:296
size_t dimension() const
Compute the dimension of the basis.
Definition basis.hpp:1289
static const bool hasHessian
Definition basis.hpp:964
size_t max_degree() const
Returns the maximum degree of the basis functions.
Definition basis.hpp:272
static const bool hasCurl
Definition basis.hpp:1161
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th basis function at point x.
Definition basis.hpp:647
static const bool hasFunction
Definition basis.hpp:1052
size_t m_nb_nodes
Definition basis.hpp:2892
static constexpr const TensorRankE tensorRank
Definition basis.hpp:1328
size_t max_degree() const
Returns the maximum degree of the basis functions.
Definition basis.hpp:1569
void GradientValue
Definition basis.hpp:781
static const bool hasCurl
Definition basis.hpp:627
Edge GeometricSupport
Definition basis.hpp:328
static ReturnValue evaluate(const BasisType &basis, size_t i, size_t iqn, const boost::multi_array< ReturnValue, 2 > &ancestor_curlcurl_quad)
Definition basis.hpp:1970
Eigen::Matrix< double, dimspace, dimspace > GradientValue
Definition basis.hpp:1534
size_t max_degree() const
Returns the maximum degree of the basis functions.
Definition basis.hpp:571
VectorRd GradientValue
Definition basis.hpp:158
static const bool hasFunction
Definition basis.hpp:1159
static const bool hasFunction
Definition basis.hpp:1268
ScalarFamilyType::GeometricSupport GeometricSupport
Definition basis.hpp:618
size_t dimension() const
Dimension of the basis.
Definition basis.hpp:1636
static constexpr const TensorRankE tensorRank
Definition basis.hpp:1620
static const bool hasDivergence
Definition basis.hpp:404
RestrictedBasis(const BasisType &basis, const size_t &dimension)
Constructor.
Definition basis.hpp:1169
HessianValue hessian(size_t i, const VectorRd &x) const
Evaluate the hessian of the i-th function at point x.
Definition basis.hpp:533
static const bool hasFunction
Definition basis.hpp:167
size_t shift() const
Return the shift.
Definition basis.hpp:1079
static std::vector< VectorZd > complete(const size_t degree)
Definition basis.hpp:100
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th basis function at point x.
Definition basis.hpp:1205
Eigen::Matrix< double, dimspace, dimspace *dimspace > HessianValue
Definition basis.hpp:1324
BasisType::DivergenceValue DivergenceValue
Definition basis.hpp:1045
static const bool hasDivergence
Definition basis.hpp:963
static const bool hasCurl
Definition basis.hpp:1698
Eigen::MatrixXd compute_weighted_gram_matrix(const FType< VectorRd > &f, const BasisQuad< VectorRd > &B1, const BasisQuad< double > &B2, const QuadratureRule &qr, size_t n_rows, size_t n_cols)
Computes the Gram-like matrix of integrals (f dot phi_i, phi_j)
Definition basis.cpp:491
HessianValue hessian(size_t i, const VectorRd &x) const
Evaluate the hessian of the i-th basis function at point x.
Definition basis.hpp:1129
BasisType::GradientValue GradientValue
Definition basis.hpp:1043
static const bool hasGradient
Definition basis.hpp:241
TensorizedVectorFamily< ScalarBasisType, N >::FunctionValue ReturnValue
Definition basis.hpp:1989
static const bool hasCurl
Definition basis.hpp:962
DecomposePoly(const Cell &T, const BasisType &basis)
Constructor for cell.
Definition basis.hpp:2831
static const bool hasDivergence
Definition basis.hpp:1625
static constexpr const bool hasAncestor
Definition basis.hpp:959
static const bool hasFunction
Definition basis.hpp:960
static ReturnValue evaluate(const BasisType &basis, size_t i, size_t iqn, const boost::multi_array< ReturnValue, 2 > &ancestor_curl_quad)
Definition basis.hpp:1899
Eigen::Matrix< double, dimspace, dimspace > GradientValue
Definition basis.hpp:1685
static const bool hasHessian
Definition basis.hpp:405
size_t max_degree() const
Returns the maximum degree of the basis functions.
Definition basis.hpp:1016
FunctionValue function(size_t i, size_t iqn, const boost::multi_array< double, 2 > &ancestor_value_quad) const
Evaluate the i-th basis function at a quadrature point iqn, knowing all the values of ancestor basis ...
Definition basis.hpp:839
static const bool hasHessian
Definition basis.hpp:336
BasisType AncestorType
Definition basis.hpp:408
static const bool hasHessian
Definition basis.hpp:794
constexpr const BasisType & ancestor() const
Return the underlying complete basis.
Definition basis.hpp:1188
static const bool hasGradient
Definition basis.hpp:623
static const bool hasCurlCurl
Definition basis.hpp:337
Face GeometricSupport
Definition basis.hpp:1616
static const bool hasCurlCurl
Definition basis.hpp:245
BasisType::FunctionValue ReturnValue
Definition basis.hpp:1845
static ReturnValue evaluate(const TensorizedVectorFamily< ScalarBasisType, N > &basis, size_t i, size_t iqn, const boost::multi_array< VectorRd, 2 > &ancestor_basis_quad)
Definition basis.hpp:2068
BasisType::GeometricSupport GeometricSupport
Definition basis.hpp:1264
static constexpr const bool hasAncestor
Definition basis.hpp:331
static const bool hasGradient
Definition basis.hpp:1544
CurlValue curl(size_t i, const VectorRd &x) const
Evaluate the curl of the i-th basis function at point x.
Definition basis.hpp:1113
static constexpr const bool hasAncestor
Definition basis.hpp:1392
static ReturnValue evaluate(const TensorizedVectorFamily< ScalarBasisType, N > &basis, size_t i, const VectorRd &x)
Definition basis.hpp:1994
size_t dimension() const
Compute the dimension of the basis.
Definition basis.hpp:1414
TangentFamily(const ScalarFamilyType &scalar_family, const Eigen::Matrix< double, 2, dimspace > &generators)
Constructor.
Definition basis.hpp:970
const VectorRd & normal() const
Return the normal to the face used in the computation of the curl.
Definition basis.hpp:278
BasisType::FunctionValue FunctionValue
Definition basis.hpp:1042
VectorRd AncestorBasisFunctionValue
Definition basis.hpp:2187
static const bool hasDivergence
Definition basis.hpp:792
BasisType AncestorType
Definition basis.hpp:1400
static const bool hasCurlCurl
Definition basis.hpp:1057
void HessianValue
Definition basis.hpp:784
VectorRd AncestorBasisFunctionValue
Definition basis.hpp:2088
GradientValue gradient(size_t i, const VectorRd &x) const
Evaluate the gradient of the i-th basis function at point x.
Definition basis.cpp:127
BasisType AncestorType
Definition basis.hpp:1059
GradientValue gradient(size_t i, size_t iqn, const boost::multi_array< GradientValue, 2 > &ancestor_gradient_quad) const
Evaluate the gradient of the i-th function at a quadrature point iqn, knowing all the gradients of an...
Definition basis.hpp:468
GradientValue gradient(size_t i, const VectorRd &x) const
Evaluate the gradient of the i-th basis function at point x.
Definition basis.hpp:1213
HessianValue hessian(size_t i, const VectorRd &x) const
Evaluate the hessian of the i-th basis function at point x.
Definition basis.hpp:1237
static const bool hasCurlCurl
Definition basis.hpp:1701
static boost::multi_array< typename detail::basis_evaluation_traits< Family< BasisType >, BasisFunction >::ReturnValue, 2 > compute(const Family< BasisType > &basis, const QuadratureRule &quad)
Evaluate a 'Family' of functions at quadrature nodes (optimised compared the generic basis evaluation...
Definition basis.hpp:2248
HessianValue hessian(size_t i, size_t iqn, const boost::multi_array< HessianValue, 2 > &ancestor_hessian_quad) const
Evaluate the hessian of the i-th function at a quadrature point iqn, knowing all the hessian of ances...
Definition basis.hpp:546
Eigen::Matrix< double, dimspace, dimspace > CurlValue
Definition basis.hpp:1686
ScalarFamilyType AncestorType
Definition basis.hpp:797
static const bool hasCurl
Definition basis.hpp:1054
Eigen::Matrix< double, N, N > FunctionValue
Definition basis.hpp:780
DivergenceValue divergence(size_t i, const VectorRd &x) const
Evaluate the divergence of the i-th basis function at point x.
Definition basis.cpp:158
ShiftedBasis(const BasisType &basis, const int shift)
Constructor.
Definition basis.hpp:1062
static const bool hasCurl
Definition basis.hpp:1395
static const bool hasCurlCurl
Definition basis.hpp:795
BasisType::CurlValue CurlValue
Definition basis.hpp:393
BasisType::GradientValue ReturnValue
Definition basis.hpp:1869
BasisType::CurlValue CurlValue
Definition basis.hpp:1044
static std::function< Eigen::MatrixXd(const Eigen::MatrixXd &)> skew_symmetrise_matrix
Function to skew-symmetrise a matrix (useful together with transform_values_quad)
Definition basis.hpp:1805
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th basis function at point x.
Definition basis.cpp:22
double AncestorBasisFunctionValue
Definition basis.hpp:2155
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th basis function at point x.
Definition basis.cpp:296
CurlBasis(const BasisType &basis)
Constructor.
Definition basis.hpp:1340
static const bool hasHessian
Definition basis.hpp:1397
constexpr const ScalarFamilyType & ancestor() const
Return the ancestor (family that has been tensorized)
Definition basis.hpp:748
static const std::vector< VectorRd > basisRd
Definition basis.hpp:52
size_t max_degree() const
Returns the maximum degree of the basis functions.
Definition basis.hpp:1654
static ReturnValue evaluate(const TensorizedVectorFamily< ScalarBasisType, N > &basis, size_t i, size_t iqn, const boost::multi_array< VectorRd, 2 > &ancestor_basis_quad)
Definition basis.hpp:2101
Cell GeometricSupport
Definition basis.hpp:163
size_t dimension() const
Return the dimension of the basis.
Definition basis.hpp:1182
GradientBasis(const BasisType &basis)
Constructor.
Definition basis.hpp:1278
void HessianValue
Definition basis.hpp:1262
size_t dimension() const
Compute the dimension of the basis.
Definition basis.hpp:1351
static constexpr const bool hasAncestor
Definition basis.hpp:1621
static const bool hasHessian
Definition basis.hpp:244
CurlValue curl(size_t i, const VectorRd &x) const
Evaluate the curl of the i-th function at point x.
Definition basis.hpp:481
static const bool hasDivergence
Definition basis.hpp:1162
Eigen::MatrixXd compute_gram_matrix(const boost::multi_array< VectorRd, 2 > &B1, const boost::multi_array< double, 2 > &B2, const QuadratureRule &qr)
Compute the Gram-like matrix given a family of vector-valued and one of scalar-valued functions by te...
Definition basis.cpp:353
Face GeometricSupport
Definition basis.hpp:1690
Cell GeometricSupport
Definition basis.hpp:1468
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th basis function at point x.
Definition basis.hpp:1420
static ReturnValue evaluate(const BasisType &basis, size_t i, const VectorRd &x)
Definition basis.hpp:1846
static constexpr const TensorRankE tensorRank
Definition basis.hpp:1694
static const bool hasDivergence
Definition basis.hpp:626
QuadratureRule m_nodes
Nodes for the interpolation.
Definition basis.hpp:2893
static constexpr const TensorRankE tensorRank
Definition basis.hpp:620
MatrixRd HessianValue
Definition basis.hpp:232
static const bool hasCurlCurl
Definition basis.hpp:1398
double DivergenceValue
Definition basis.hpp:953
double HessianValue
Definition basis.hpp:326
FunctionValue function(size_t i, const VectorRd &x) const
Evaluate the i-th basis function at point x.
Definition basis.cpp:122
static const bool hasHessian
Definition basis.hpp:1272
size_t dimension() const
Return the dimension of the family.
Definition basis.hpp:825
const Eigen::MatrixXd symmetricBasis() const
Returns the matrix that can be used, in a Family of this MatrixBasis, to create a basis of the subspa...
Definition basis.hpp:889
VectorRd FunctionValue
Definition basis.hpp:1684
Cell GeometricSupport
Definition basis.hpp:1539
static ReturnValue evaluate(const BasisType &basis, size_t i, const VectorRd &x)
Definition basis.hpp:1916
constexpr const ScalarFamilyType & ancestor() const
Return the ancestor (family used for the tangent)
Definition basis.hpp:1010
static const bool hasCurlCurl
Definition basis.hpp:1548
Eigen::Matrix< double, 2, dimspace > JacobianType
Definition basis.hpp:236
GradientValue gradient(size_t i, const VectorRd &x) const
Evaluate the gradient of the i-th basis function at point x.
Definition basis.cpp:29
size_t max_degree() const
Returns the maximum degree of the basis functions.
Definition basis.hpp:1194
@ CurlCurl
Definition basis.hpp:1747
@ Function
Definition basis.hpp:1742
@ Hessian
Definition basis.hpp:1746
@ Gradient
Definition basis.hpp:1743
@ Divergence
Definition basis.hpp:1745
@ Curl
Definition basis.hpp:1744
@ Matrix
Definition basis.hpp:67
@ Vector
Definition basis.hpp:66
@ Scalar
Definition basis.hpp:65
size_t L
Definition HHO_DiffAdvecReac.hpp:46
std::vector< QuadratureNode > QuadratureRule
Definition quadraturerule.hpp:61
Definition PastixInterface.hpp:16
Definition ddr-magnetostatics.hpp:41
Structure to decompose a set of polynomials on a basis on a face or a cell.
Definition basis.hpp:2788
Compute vectors listing the powers of monomial basis functions (for a cell or face,...
Definition basis.hpp:77
Basis dimensions for various polynomial spaces on edges/faces/elements (when relevant): Pk,...
Definition polynomialspacedimension.hpp:54
Basis evaluation traits. Only specialization of 'BasisFunction' (=Function, Gradient,...
Definition basis.hpp:1837
Evaluate a basis at quadrature nodes. 'BasisFunction' (=Function, Gradient, Curl, Divergence or Hessi...
Definition basis.hpp:2220