41 static inline DEAL_II_ALWAYS_INLINE
42 dealii::Tensor<rank, dim, dealii::VectorizedArray<Number>>
43 value(dealii::Function<dim> & function,
44 dealii::Point<dim, dealii::VectorizedArray<Number>>
const & q_points,
51 AssertThrow(
false, dealii::ExcMessage(
"should not arrive here."));
53 return dealii::Tensor<rank, dim, dealii::VectorizedArray<Number>>();
56 static inline DEAL_II_ALWAYS_INLINE
57 dealii::Tensor<rank, dim, dealii::VectorizedArray<Number>>
59 unsigned int const face,
61 unsigned int const quad_index)
68 AssertThrow(
false, dealii::ExcMessage(
"should not arrive here."));
70 return dealii::Tensor<rank, dim, dealii::VectorizedArray<Number>>();
73 static inline DEAL_II_ALWAYS_INLINE
74 dealii::Tensor<rank, dim, dealii::VectorizedArray<Number>>
76 dealii::Point<dim, dealii::VectorizedArray<Number>>
const & q_points,
77 dealii::Tensor<1, dim, dealii::VectorizedArray<Number>>
const & normals,
80 (void)function_with_normal;
85 AssertThrow(
false, dealii::ExcMessage(
"not implemented."));
87 return dealii::Tensor<rank, dim, dealii::VectorizedArray<Number>>();
90 static inline DEAL_II_ALWAYS_INLINE
91 dealii::SymmetricTensor<rank, dim, dealii::VectorizedArray<Number>>
92 value_symmetric(dealii::Function<dim> & function,
93 dealii::Point<dim, dealii::VectorizedArray<Number>>
const & q_points,
100 AssertThrow(
false, dealii::ExcMessage(
"should not arrive here."));
102 return dealii::SymmetricTensor<rank, dim, dealii::VectorizedArray<Number>>();
105 static inline DEAL_II_ALWAYS_INLINE
106 dealii::SymmetricTensor<rank, dim, dealii::VectorizedArray<Number>>
108 unsigned int const face,
109 unsigned int const q,
110 unsigned int const quad_index)
117 AssertThrow(
false, dealii::ExcMessage(
"should not arrive here."));
119 return dealii::SymmetricTensor<rank, dim, dealii::VectorizedArray<Number>>();
126 static inline DEAL_II_ALWAYS_INLINE
127 dealii::Tensor<0, dim, dealii::VectorizedArray<Number>>
128 value(dealii::Function<dim> & function,
129 dealii::Point<dim, dealii::VectorizedArray<Number>>
const & q_points,
132 dealii::VectorizedArray<Number> value = dealii::make_vectorized_array<Number>(0.0);
134 for(
unsigned int v = 0; v < dealii::VectorizedArray<Number>::size(); ++v)
136 dealii::Point<dim> q_point;
137 for(
unsigned int d = 0; d < dim; ++d)
138 q_point[d] = q_points[d][v];
140 function.set_time(time);
141 value[v] = function.value(q_point);
147 static inline DEAL_II_ALWAYS_INLINE
148 dealii::Tensor<0, dim, dealii::VectorizedArray<Number>>
150 unsigned int const face,
151 unsigned int const q,
152 unsigned int const quad_index)
154 dealii::VectorizedArray<Number> value = dealii::make_vectorized_array<Number>(0.0);
156 for(
unsigned int v = 0; v < dealii::VectorizedArray<Number>::size(); ++v)
157 value[v] = function.get_data(quad_index, face, q, v);
166 static inline DEAL_II_ALWAYS_INLINE
167 dealii::Tensor<1, dim, dealii::VectorizedArray<Number>>
168 value(dealii::Function<dim> & function,
169 dealii::Point<dim, dealii::VectorizedArray<Number>>
const & q_points,
172 dealii::Tensor<1, dim, dealii::VectorizedArray<Number>> value;
174 for(
unsigned int d = 0; d < dim; ++d)
176 for(
unsigned int v = 0; v < dealii::VectorizedArray<Number>::size(); ++v)
178 dealii::Point<dim> q_point;
179 for(
unsigned int i = 0; i < dim; ++i)
180 q_point[i] = q_points[i][v];
182 function.set_time(time);
183 value[d][v] = function.value(q_point, d);
190 static inline DEAL_II_ALWAYS_INLINE
191 dealii::Tensor<1, dim, dealii::VectorizedArray<Number>>
193 unsigned int const face,
194 unsigned int const q,
195 unsigned int const quad_index)
197 dealii::Tensor<1, dim, dealii::VectorizedArray<Number>> value;
199 std::array<dealii::Tensor<1, dim, Number>, dealii::VectorizedArray<Number>::size()>
202 for(
unsigned int v = 0; v < dealii::VectorizedArray<Number>::size(); ++v)
203 tensor_array[v] = function.get_data(quad_index, face, q, v);
205 for(
unsigned int d = 0; d < dim; ++d)
207 for(
unsigned int v = 0; v < dealii::VectorizedArray<Number>::size(); ++v)
208 value[d][v] = tensor_array[v][d];
214 static inline DEAL_II_ALWAYS_INLINE
215 dealii::Tensor<1, dim, dealii::VectorizedArray<Number>>
217 dealii::Point<dim, dealii::VectorizedArray<Number>>
const & q_points,
218 dealii::Tensor<1, dim, dealii::VectorizedArray<Number>>
const & normals,
221 dealii::Tensor<1, dim, dealii::VectorizedArray<Number>> value;
223 for(
unsigned int d = 0; d < dim; ++d)
225 for(
unsigned int v = 0; v < dealii::VectorizedArray<Number>::size(); ++v)
227 dealii::Point<dim> q_point;
228 dealii::Tensor<1, dim> normal;
229 for(
unsigned int i = 0; i < dim; ++i)
231 q_point[i] = q_points[i][v];
232 normal[i] = normals[i][v];
234 function_with_normal.set_time(time);
235 function_with_normal.set_normal_vector(normal);
236 value[d][v] = function_with_normal.value(q_point, d);
247 static inline DEAL_II_ALWAYS_INLINE
248 dealii::Tensor<2, dim, dealii::VectorizedArray<Number>>
249 value(dealii::Function<dim> & function,
250 dealii::Point<dim, dealii::VectorizedArray<Number>>
const & q_points,
253 dealii::Tensor<2, dim, dealii::VectorizedArray<Number>> value;
255 for(
unsigned int d1 = 0; d1 < dim; ++d1)
257 for(
unsigned int d2 = 0; d2 < dim; ++d2)
259 for(
unsigned int v = 0; v < dealii::VectorizedArray<Number>::size(); ++v)
261 dealii::Point<dim> q_point;
263 for(
unsigned int i = 0; i < dim; ++i)
264 q_point[i] = q_points[i][v];
266 function.set_time(time);
268 auto const unrolled_index =
269 dealii::Tensor<2, dim>::component_to_unrolled_index(dealii::TableIndices<2>(d1, d2));
271 value[d1][d2][v] = function.value(q_point, unrolled_index);
279 static inline DEAL_II_ALWAYS_INLINE
280 dealii::Tensor<2, dim, dealii::VectorizedArray<Number>>
282 unsigned int const face,
283 unsigned int const q,
284 unsigned int const quad_index)
286 dealii::Tensor<2, dim, dealii::VectorizedArray<Number>> value;
288 std::array<dealii::Tensor<2, dim, Number>, dealii::VectorizedArray<Number>::size()>
291 for(
unsigned int v = 0; v < dealii::VectorizedArray<Number>::size(); ++v)
292 tensor_array[v] = function.get_data(quad_index, face, q, v);
294 for(
unsigned int d1 = 0; d1 < dim; ++d1)
296 for(
unsigned int d2 = 0; d2 < dim; ++d2)
298 for(
unsigned int v = 0; v < dealii::VectorizedArray<Number>::size(); ++v)
299 value[d1][d2][v] = tensor_array[v][d1][d2];
306 static inline DEAL_II_ALWAYS_INLINE
307 dealii::SymmetricTensor<2, dim, dealii::VectorizedArray<Number>>
308 value_symmetric(dealii::Function<dim> & function,
309 dealii::Point<dim, dealii::VectorizedArray<Number>>
const & q_points,
312 dealii::SymmetricTensor<2, dim, dealii::VectorizedArray<Number>> value;
314 for(
unsigned int d1 = 0; d1 < dim; ++d1)
316 for(
unsigned int d2 = d1; d2 < dim; ++d2)
318 for(
unsigned int v = 0; v < dealii::VectorizedArray<Number>::size(); ++v)
320 dealii::Point<dim> q_point;
322 for(
unsigned int i = 0; i < dim; ++i)
323 q_point[i] = q_points[i][v];
325 function.set_time(time);
327 auto const unrolled_index = dealii::SymmetricTensor<2, dim>::component_to_unrolled_index(
328 dealii::TableIndices<2>(d1, d2));
330 value[d1][d2][v] = function.value(q_point, unrolled_index);
338 static inline DEAL_II_ALWAYS_INLINE
339 dealii::SymmetricTensor<2, dim, dealii::VectorizedArray<Number>>
341 unsigned int const face,
342 unsigned int const q,
343 unsigned int const quad_index)
345 dealii::SymmetricTensor<2, dim, dealii::VectorizedArray<Number>> value;
347 std::array<dealii::SymmetricTensor<2, dim, Number>, dealii::VectorizedArray<Number>::size()>
350 for(
unsigned int v = 0; v < dealii::VectorizedArray<Number>::size(); ++v)
351 tensor_array[v] = function.get_data(quad_index, face, q, v);
353 for(
unsigned int d1 = 0; d1 < dim; ++d1)
355 for(
unsigned int d2 = d1; d2 < dim; ++d2)
357 for(
unsigned int v = 0; v < dealii::VectorizedArray<Number>::size(); ++v)
358 value[d1][d2][v] = tensor_array[v][d1][d2];