* Number>. In particular, if order == 1 and the derivative is the Jacobian of
* $\mathbf F(\mathbf x)$, then Tensor[i] = $\nabla F_i(\mathbf x)$.
*/
- operator Tensor<order + 1, dim, Number>() const;
+ template <typename Number2>
+ operator Tensor<order + 1, dim, Number2>() const;
/**
* Converts a DerivativeForm<1, dim, 1, Number> to Tensor<1, dim, Number>.
*/
- operator Tensor<1, dim, Number>() const;
+ template <typename Number2>
+ operator Tensor<1, dim, Number2>() const;
/**
* Return the transpose of a rectangular DerivativeForm,
template <int order, int dim, int spacedim, typename Number>
+template <typename Number2>
inline DerivativeForm<order, dim, spacedim, Number>::
-operator Tensor<1, dim, Number>() const
+operator Tensor<1, dim, Number2>() const
{
Assert((1 == spacedim) && (order == 1),
ExcMessage("Only allowed for spacedim==1."));
template <int order, int dim, int spacedim, typename Number>
+template <typename Number2>
inline DerivativeForm<order, dim, spacedim, Number>::
-operator Tensor<order + 1, dim, Number>() const
+operator Tensor<order + 1, dim, Number2>() const
{
Assert((dim == spacedim), ExcMessage("Only allowed when dim==spacedim."));
- Tensor<order + 1, dim, Number> t;
+ Tensor<order + 1, dim, Number2> t;
if (dim == spacedim)
for (unsigned int j = 0; j < dim; ++j)
Number>::set_gradient(val_and_grad.second,
j,
unit_gradients[i + j]);
- gradients[i + j] =
- static_cast<typename internal::FEPointEvaluation::
- EvaluatorTypeTraits<dim,
- n_components,
- Number>::gradient_type>(
- apply_transformation(mapping_info->get_mapping_data()
- .inverse_jacobians[i + j]
- .transpose(),
- unit_gradients[i + j]));
+ gradients[i + j] = static_cast<gradient_type>(
+ apply_transformation(mapping_info->get_mapping_data()
+ .inverse_jacobians[i + j]
+ .transpose(),
+ unit_gradients[i + j]));
}
}
}
for (unsigned int j = 0; j < n_lanes && i + j < n_points; ++j)
{
gradients[i + j] =
- static_cast<typename internal::FEPointEvaluation::
- EvaluatorTypeTraits<dim, n_components, Number>::
- gradient_type>(apply_transformation(
+ static_cast<gradient_type>(apply_transformation(
mapping_info->get_mapping_data().inverse_jacobians[i + j],
gradients[i + j]));
internal::FEPointEvaluation::
--- /dev/null
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2022 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE.md at
+// the top level directory of deal.II.
+//
+// ---------------------------------------------------------------------
+
+
+// Check that all template specializations of FEPointEvaluation are
+// compiling.
+
+#include <deal.II/matrix_free/fe_point_evaluation.h>
+
+#include "../tests.h"
+
+template <int n_components, int dim, int spacedim, typename Number>
+void
+test()
+{
+ return; // nothing to do, since we are only interested if the code
+ // compiles
+
+ std::unique_ptr<Mapping<dim, spacedim>> mapping;
+ std::unique_ptr<FiniteElement<dim, spacedim>> fe;
+
+ FEPointEvaluation<n_components, dim, spacedim, Number> fpe(
+ *mapping, *fe, UpdateFlags::update_default);
+
+ Triangulation<dim, spacedim> tria;
+
+ fpe.reinit(tria.begin(), ArrayView<const Point<dim>>());
+
+ fpe.evaluate(ArrayView<const Number>(), EvaluationFlags::values);
+
+ fpe.integrate(ArrayView<Number>(), EvaluationFlags::values);
+}
+
+int
+main()
+{
+ initlog();
+
+ test<1, 1, 1, double>();
+ test<2, 1, 1, double>();
+
+ test<1, 2, 2, double>();
+ test<2, 2, 2, double>();
+ test<3, 2, 2, double>();
+
+ test<1, 3, 3, double>();
+ test<2, 3, 3, double>();
+ test<3, 3, 3, double>();
+ test<4, 3, 3, double>();
+
+ test<1, 1, 1, float>();
+ test<2, 1, 1, float>();
+
+ test<1, 2, 2, float>();
+ test<2, 2, 2, float>();
+ test<3, 2, 2, float>();
+
+ test<1, 3, 3, float>();
+ test<2, 3, 3, float>();
+ test<3, 3, 3, float>();
+ test<4, 3, 3, float>();
+
+ deallog << "OK!" << std::endl;
+}