}
-template <>
-void
-FE_Poly<PolynomialSpace<1>, 1, 2>::fill_fe_values(
- const Triangulation<1, 2>::cell_iterator &,
- const CellSimilarity::Similarity cell_similarity,
- const Quadrature<1> & quadrature,
- const Mapping<1, 2> & mapping,
- const Mapping<1, 2>::InternalDataBase &mapping_internal,
- const dealii::internal::FEValuesImplementation::MappingRelatedData<1, 2>
- & mapping_data,
- const FiniteElement<1, 2>::InternalDataBase &fe_internal,
- dealii::internal::FEValuesImplementation::FiniteElementRelatedData<1, 2>
- &output_data) const
-{
- // convert data object to internal data for this class. fails with an
- // exception if that is not possible
- Assert(dynamic_cast<const InternalData *>(&fe_internal) != nullptr,
- ExcInternalError());
- const InternalData &fe_data =
- static_cast<const InternalData &>(fe_internal); // NOLINT
-
- // transform gradients and higher derivatives. there is nothing to do
- // for values since we already emplaced them into output_data when
- // we were in get_data()
- if (fe_data.update_each & update_gradients &&
- cell_similarity != CellSimilarity::translation)
- for (unsigned int k = 0; k < this->dofs_per_cell; ++k)
- mapping.transform(make_array_view(fe_data.shape_gradients, k),
- mapping_covariant,
- mapping_internal,
- make_array_view(output_data.shape_gradients, k));
-
- if (fe_data.update_each & update_hessians &&
- cell_similarity != CellSimilarity::translation)
- {
- for (unsigned int k = 0; k < this->dofs_per_cell; ++k)
- mapping.transform(make_array_view(fe_data.shape_hessians, k),
- mapping_covariant_gradient,
- mapping_internal,
- make_array_view(output_data.shape_hessians, k));
-
- for (unsigned int k = 0; k < this->dofs_per_cell; ++k)
- for (unsigned int i = 0; i < quadrature.size(); ++i)
- for (unsigned int j = 0; j < 2; ++j)
- output_data.shape_hessians[k][i] -=
- mapping_data.jacobian_pushed_forward_grads[i][j] *
- output_data.shape_gradients[k][i][j];
- }
-
- if (fe_data.update_each & update_3rd_derivatives &&
- cell_similarity != CellSimilarity::translation)
- {
- for (unsigned int k = 0; k < this->dofs_per_cell; ++k)
- mapping.transform(make_array_view(fe_data.shape_3rd_derivatives, k),
- mapping_covariant_hessian,
- mapping_internal,
- make_array_view(output_data.shape_3rd_derivatives,
- k));
-
- for (unsigned int k = 0; k < this->dofs_per_cell; ++k)
- correct_third_derivatives(output_data,
- mapping_data,
- quadrature.size(),
- k);
- }
-}
-
-
-template <>
-void
-FE_Poly<PolynomialSpace<2>, 2, 3>::fill_fe_values(
- const Triangulation<2, 3>::cell_iterator &,
- const CellSimilarity::Similarity cell_similarity,
- const Quadrature<2> & quadrature,
- const Mapping<2, 3> & mapping,
- const Mapping<2, 3>::InternalDataBase &mapping_internal,
- const dealii::internal::FEValuesImplementation::MappingRelatedData<2, 3>
- & mapping_data,
- const FiniteElement<2, 3>::InternalDataBase &fe_internal,
- dealii::internal::FEValuesImplementation::FiniteElementRelatedData<2, 3>
- &output_data) const
-{
- // convert data object to internal data for this class. fails with an
- // exception if that is not possible
- Assert(dynamic_cast<const InternalData *>(&fe_internal) != nullptr,
- ExcInternalError());
- const InternalData &fe_data =
- static_cast<const InternalData &>(fe_internal); // NOLINT
-
- // transform gradients and higher derivatives. there is nothing to do
- // for values since we already emplaced them into output_data when
- // we were in get_data()
- if (fe_data.update_each & update_gradients &&
- cell_similarity != CellSimilarity::translation)
- for (unsigned int k = 0; k < this->dofs_per_cell; ++k)
- mapping.transform(make_array_view(fe_data.shape_gradients, k),
- mapping_covariant,
- mapping_internal,
- make_array_view(output_data.shape_gradients, k));
-
- if (fe_data.update_each & update_hessians &&
- cell_similarity != CellSimilarity::translation)
- {
- for (unsigned int k = 0; k < this->dofs_per_cell; ++k)
- mapping.transform(make_array_view(fe_data.shape_hessians, k),
- mapping_covariant_gradient,
- mapping_internal,
- make_array_view(output_data.shape_hessians, k));
-
- for (unsigned int k = 0; k < this->dofs_per_cell; ++k)
- for (unsigned int i = 0; i < quadrature.size(); ++i)
- for (unsigned int j = 0; j < 3; ++j)
- output_data.shape_hessians[k][i] -=
- mapping_data.jacobian_pushed_forward_grads[i][j] *
- output_data.shape_gradients[k][i][j];
- }
-
- if (fe_data.update_each & update_3rd_derivatives &&
- cell_similarity != CellSimilarity::translation)
- {
- for (unsigned int k = 0; k < this->dofs_per_cell; ++k)
- mapping.transform(make_array_view(fe_data.shape_3rd_derivatives, k),
- mapping_covariant_hessian,
- mapping_internal,
- make_array_view(output_data.shape_3rd_derivatives,
- k));
-
- for (unsigned int k = 0; k < this->dofs_per_cell; ++k)
- correct_third_derivatives(output_data,
- mapping_data,
- quadrature.size(),
- k);
- }
-}
-
-
#include "fe_poly.inst"
DEAL_II_NAMESPACE_CLOSE