17 #include <deal.II/base/polynomials_abf.h> 18 #include <deal.II/base/quadrature_lib.h> 23 DEAL_II_NAMESPACE_OPEN
30 n_pols(compute_n_pols(k))
32 std::vector<std::vector< Polynomials::Polynomial< double > > > pols(dim);
35 for (
unsigned int d=1; d<dim; ++d)
38 for (
unsigned int d=1; d<dim; ++d)
61 ExcDimensionMismatch(values.size(),
n_pols));
63 ExcDimensionMismatch(grads.size(),
n_pols));
65 ExcDimensionMismatch(grad_grads.size(),
n_pols));
66 Assert(third_derivatives.size()==
n_pols|| third_derivatives.size()==0,
67 ExcDimensionMismatch(third_derivatives.size(),
n_pols));
68 Assert(fourth_derivatives.size()==
n_pols|| fourth_derivatives.size()==0,
69 ExcDimensionMismatch(fourth_derivatives.size(),
n_pols));
79 p_values.resize((values.size() == 0) ? 0 : n_sub);
80 p_grads.resize((grads.size() == 0) ? 0 : n_sub);
81 p_grad_grads.resize((grad_grads.size() == 0) ? 0 : n_sub);
85 for (
unsigned int d=0; d<dim; ++d)
99 for (
unsigned int c=0; c<dim; ++c)
100 p(c) = unit_point((c+d)%dim);
105 for (
unsigned int i=0; i<
p_values.size(); ++i)
108 for (
unsigned int i=0; i<
p_grads.size(); ++i)
109 for (
unsigned int d1=0; d1<dim; ++d1)
110 grads[i+d*n_sub][d][(d1+d)%dim] =
p_grads[i][d1];
113 for (
unsigned int d1=0; d1<dim; ++d1)
114 for (
unsigned int d2=0; d2<dim; ++d2)
115 grad_grads[i+d*n_sub][d][(d1+d)%dim][(d2+d)%dim]
119 for (
unsigned int d1=0; d1<dim; ++d1)
120 for (
unsigned int d2=0; d2<dim; ++d2)
121 for (
unsigned int d3=0; d3<dim; ++d3)
122 third_derivatives[i+d*n_sub][d][(d1+d)%dim][(d2+d)%dim][(d3+d)%dim]
126 for (
unsigned int d1=0; d1<dim; ++d1)
127 for (
unsigned int d2=0; d2<dim; ++d2)
128 for (
unsigned int d3=0; d3<dim; ++d3)
129 for (
unsigned int d4=0; d4<dim; ++d4)
130 fourth_derivatives[i+d*n_sub][d][(d1+d)%dim][(d2+d)%dim][(d3+d)%dim][(d4+d)%dim]
140 if (dim == 1)
return k+1;
141 if (dim == 2)
return 2*(k+1)*(k+3);
143 if (dim == 3)
return 3*(k+1)*(k+1)*(k+2);
145 Assert(
false, ExcNotImplemented());
155 DEAL_II_NAMESPACE_CLOSE
std::vector< Tensor< 4, dim > > p_fourth_derivatives
static std::vector< Polynomial< double > > generate_complete_basis(const unsigned int degree)
std::vector< Tensor< 2, dim > > p_grad_grads
std::vector< Tensor< 1, dim > > p_grads
AnisotropicPolynomials< dim > * polynomial_space
std::vector< double > p_values
std::vector< Tensor< 3, dim > > p_third_derivatives
static std::vector< Polynomial< double > > generate_complete_basis(const unsigned int degree)
#define Assert(cond, exc)
void compute(const Point< dim > &unit_point, std::vector< Tensor< 1, dim > > &values, std::vector< Tensor< 2, dim > > &grads, std::vector< Tensor< 3, dim > > &grad_grads, std::vector< Tensor< 4, dim > > &third_derivatives, std::vector< Tensor< 5, dim > > &fourth_derivatives) const
static unsigned int compute_n_pols(unsigned int degree)
PolynomialsABF(const unsigned int k)