*/
QGaussLobatto<1> line_support_points;
+ /**
+ * A vectorized array type to reflect the necessary number of components
+ * for all interpolations to be done by this class.
+ */
+ using VectorizedArrayType =
+ VectorizedArray<double,
+ std::min<std::size_t>(VectorizedArray<double>::size(),
+ (dim <= 2 ? 2 : 4))>;
+
/**
* In case the quadrature rule given represents a tensor product
* we need to store the evaluations of the 1d polynomials at
* the 1d quadrature points. That is what this variable is for.
*/
- internal::MatrixFreeFunctions::ShapeInfo<VectorizedArray<double>>
- shape_info;
+ internal::MatrixFreeFunctions::ShapeInfo<VectorizedArrayType> shape_info;
/**
* In case the quadrature rule given represents a tensor product
* we need to store temporary data in this object.
*/
- mutable AlignedVector<VectorizedArray<double>> scratch;
+ mutable AlignedVector<VectorizedArrayType> scratch;
/**
* In case the quadrature rule given represents a tensor product
* the values at the mapped support points are stored in this object.
*/
- mutable AlignedVector<VectorizedArray<double>> values_dofs;
+ mutable AlignedVector<VectorizedArrayType> values_dofs;
/**
* In case the quadrature rule given represents a tensor product
* the values at the quadrature points are stored in this object.
*/
- mutable AlignedVector<VectorizedArray<double>> values_quad;
+ mutable AlignedVector<VectorizedArrayType> values_quad;
/**
* In case the quadrature rule given represents a tensor product
* the gradients at the quadrature points are stored in this object.
*/
- mutable AlignedVector<VectorizedArray<double>> gradients_quad;
+ mutable AlignedVector<VectorizedArrayType> gradients_quad;
/**
* In case the quadrature rule given represents a tensor product
* the hessians at the quadrature points are stored in this object.
*/
- mutable AlignedVector<VectorizedArray<double>> hessians_quad;
+ mutable AlignedVector<VectorizedArrayType> hessians_quad;
/**
* Indicates whether the given Quadrature object is a tensor product.
{
const UpdateFlags update_flags = data.update_each;
+ using VectorizedArrayType =
+ typename dealii::MappingQ<dim,
+ spacedim>::InternalData::VectorizedArrayType;
const unsigned int n_shape_values = data.n_shape_functions;
const unsigned int n_q_points = data.shape_info.n_q_points;
- constexpr unsigned int n_lanes = VectorizedArray<double>::size();
+ constexpr unsigned int n_lanes = VectorizedArrayType::size();
constexpr unsigned int n_comp = 1 + (spacedim - 1) / n_lanes;
constexpr unsigned int n_hessians = (dim * (dim + 1)) / 2;
}
// do the actual tensorized evaluation
- internal::FEEvaluationFactory<dim, double, VectorizedArray<double>>::
+ internal::FEEvaluationFactory<dim, double, VectorizedArrayType>::
evaluate(n_comp,
evaluation_flag,
data.shape_info,