17 #ifndef __deal2__tensor_product_polynomials_h 18 #define __deal2__tensor_product_polynomials_h 21 #include <deal.II/base/config.h> 23 #include <deal.II/base/tensor.h> 24 #include <deal.II/base/point.h> 25 #include <deal.II/base/polynomial.h> 26 #include <deal.II/base/utilities.h> 66 template <
int dim,
typename POLY=Polynomials::Polynomial<
double> >
94 void set_numbering(
const std::vector<unsigned int> &renumber);
119 std::vector<double> &values,
172 unsigned int n ()
const;
204 unsigned int (&indices)[(dim>0?dim:1)])
const;
255 std::vector<double> &values,
308 unsigned int n ()
const;
314 std::vector<std::vector<Polynomials::Polynomial<double> > >
polynomials;
329 unsigned int (&indices)[dim])
const;
347 template <
int dim,
typename POLY>
353 polynomials (pols.begin(), pols.end()),
354 n_tensor_pols(
Utilities::fixed_power<dim>(pols.size())),
355 index_map(n_tensor_pols),
356 index_map_inverse(n_tensor_pols)
363 index_map_inverse[i]=i;
369 template <
int dim,
typename POLY>
382 template <
int dim,
typename POLY>
384 const std::vector<unsigned int> &
391 template <
int dim,
typename POLY>
393 const std::vector<unsigned int> &
396 return index_map_inverse;
402 DEAL_II_NAMESPACE_CLOSE
double compute_value(const unsigned int i, const Point< dim > &p) const
void compute_index(const unsigned int i, unsigned int(&indices)[(dim >0?dim:1)]) const
static const unsigned int invalid_unsigned_int
static const unsigned int dimension
Tensor< 1, dim > compute_grad(const unsigned int i, const Point< dim > &p) const
std::vector< std::vector< Polynomials::Polynomial< double > > > polynomials
std::vector< POLY > polynomials
void output_indices(std::ostream &out) const
Tensor< 2, dim > compute_grad_grad(const unsigned int i, const Point< dim > &p) const
unsigned int n_tensor_pols
std::vector< unsigned int > index_map_inverse
void set_numbering(const std::vector< unsigned int > &renumber)
unsigned int n_tensor_pols
const std::vector< unsigned int > & get_numbering_inverse() const
void compute(const Point< dim > &unit_point, std::vector< double > &values, std::vector< Tensor< 1, dim > > &grads, std::vector< Tensor< 2, dim > > &grad_grads) const
const std::vector< unsigned int > & get_numbering() const
TensorProductPolynomials(const std::vector< Pol > &pols)
std::vector< unsigned int > index_map