34#include <boost/container/small_vector.hpp>
46 template <
int dim,
int spacedim>
47 std::vector<unsigned int>
50 std::vector<unsigned int> shape_function_to_row_table(
59 unsigned int nth_nonzero_component = 0;
64 row + nth_nonzero_component;
65 ++nth_nonzero_component;
70 return shape_function_to_row_table;
77 template <
typename Number,
typename T =
void>
92 template <
typename Number>
95 std::enable_if_t<Differentiation::AD::is_ad_number<Number>::value>>
98 value(
const Number & )
109template <
int dim,
int spacedim>
117template <
int dim,
int spacedim>
125template <
int dim,
int spacedim>
133template <
int dim,
int spacedim>
137 return cell.has_value();
142template <
int dim,
int spacedim>
148 auto convert = [](
const auto &cell) {
152 switch (cell.value().index())
155 return convert(std::get<0>(cell.value()));
157 return convert(std::get<1>(cell.value()));
159 return convert(std::get<2>(cell.value()));
168template <
int dim,
int spacedim>
174 switch (cell.value().index())
177 return std::get<1>(cell.value())->get_dof_handler().n_dofs();
179 return std::get<2>(cell.value())->get_dof_handler().n_dofs();
181 Assert(
false, ExcNeedsDoFHandler());
188template <
int dim,
int spacedim>
189template <
typename Number>
197 switch (cell.value().index())
200 std::get<1>(cell.value())->get_interpolated_dof_values(in, out);
204 std::get<2>(cell.value())->get_interpolated_dof_values(in, out);
208 Assert(
false, ExcNeedsDoFHandler());
218template <
int dim,
int spacedim>
220 const unsigned int n_q_points,
229 ,
fe(&
fe, typeid(*this).name())
235 ExcMessage(
"There is nothing useful you can do with an FEValues "
236 "object when using a quadrature formula with zero "
237 "quadrature points!"));
243template <
int dim,
int spacedim>
246 tria_listener_any_change.disconnect();
251template <
int dim,
int spacedim>
256 check_for_cell_similarity_allowed = allow;
270 template <
typename Number,
typename Number2>
273 const ::Table<2, double> &shape_values,
274 std::vector<Number> &values)
277 const unsigned int dofs_per_cell = shape_values.n_rows();
278 const unsigned int n_quadrature_points = values.size();
281 std::fill_n(values.begin(),
292 for (
unsigned int shape_func = 0; shape_func < dofs_per_cell; ++shape_func)
294 const Number2
value = dof_values[shape_func];
302 const double *shape_value_ptr = &shape_values(shape_func, 0);
303 for (
unsigned int point = 0; point < n_quadrature_points; ++point)
304 values[point] +=
value * (*shape_value_ptr++);
310 template <
int dim,
int spacedim,
typename VectorType>
314 const ::Table<2, double> &shape_values,
316 const std::vector<unsigned int> &shape_function_to_row_table,
318 const bool quadrature_points_fastest =
false,
319 const unsigned int component_multiple = 1)
321 using Number =
typename VectorType::value_type;
323 for (
unsigned int i = 0; i < values.size(); ++i)
324 std::fill_n(values[i].
begin(),
326 typename VectorType::value_type());
331 if (dofs_per_cell == 0)
334 const unsigned int n_quadrature_points =
335 quadrature_points_fastest ? values[0].size() : values.size();
339 const unsigned result_components = n_components * component_multiple;
340 (void)result_components;
341 if (quadrature_points_fastest)
344 for (
unsigned int i = 0; i < values.size(); ++i)
350 for (
unsigned int i = 0; i < values.size(); ++i)
357 for (
unsigned int mc = 0; mc < component_multiple; ++mc)
358 for (
unsigned int shape_func = 0; shape_func < dofs_per_cell;
361 const Number &
value = dof_values[shape_func + mc * dofs_per_cell];
365 if (::internal::CheckForZero<Number>::value(
value) ==
true)
370 const unsigned int comp =
373 const unsigned int row =
374 shape_function_to_row_table[shape_func * n_components + comp];
376 const double *shape_value_ptr = &shape_values(row, 0);
378 if (quadrature_points_fastest)
380 VectorType &values_comp = values[comp];
381 for (
unsigned int point = 0; point < n_quadrature_points;
383 values_comp[point] +=
value * (*shape_value_ptr++);
386 for (
unsigned int point = 0; point < n_quadrature_points;
388 values[point][comp] +=
value * (*shape_value_ptr++);
391 for (
unsigned int c = 0; c < n_components; ++c)
396 const unsigned int row =
397 shape_function_to_row_table[shape_func * n_components + c];
399 const double *shape_value_ptr = &shape_values(row, 0);
400 const unsigned int comp = c + mc * n_components;
402 if (quadrature_points_fastest)
404 VectorType &values_comp = values[comp];
405 for (
unsigned int point = 0; point < n_quadrature_points;
407 values_comp[point] +=
value * (*shape_value_ptr++);
410 for (
unsigned int point = 0; point < n_quadrature_points;
412 values[point][comp] +=
value * (*shape_value_ptr++);
421 template <
int order,
int spacedim,
typename Number>
428 const unsigned int dofs_per_cell = shape_derivatives.size()[0];
429 const unsigned int n_quadrature_points = derivatives.size();
432 std::fill_n(derivatives.begin(),
443 for (
unsigned int shape_func = 0; shape_func < dofs_per_cell; ++shape_func)
445 const Number &
value = dof_values[shape_func];
449 if (::internal::CheckForZero<Number>::value(
value) ==
true)
453 &shape_derivatives[shape_func][0];
454 for (
unsigned int point = 0; point < n_quadrature_points; ++point)
455 derivatives[point] +=
value * (*shape_derivative_ptr++);
461 template <
int order,
int dim,
int spacedim,
typename Number>
467 const std::vector<unsigned int> &shape_function_to_row_table,
469 const bool quadrature_points_fastest =
false,
470 const unsigned int component_multiple = 1)
473 for (
unsigned int i = 0; i < derivatives.size(); ++i)
474 std::fill_n(derivatives[i].
begin(),
475 derivatives[i].
size(),
481 if (dofs_per_cell == 0)
485 const unsigned int n_quadrature_points =
486 quadrature_points_fastest ? derivatives[0].size() : derivatives.size();
490 const unsigned result_components = n_components * component_multiple;
491 (void)result_components;
492 if (quadrature_points_fastest)
495 for (
unsigned int i = 0; i < derivatives.size(); ++i)
501 for (
unsigned int i = 0; i < derivatives.size(); ++i)
508 for (
unsigned int mc = 0; mc < component_multiple; ++mc)
509 for (
unsigned int shape_func = 0; shape_func < dofs_per_cell;
512 const Number &
value = dof_values[shape_func + mc * dofs_per_cell];
516 if (::internal::CheckForZero<Number>::value(
value) ==
true)
521 const unsigned int comp =
524 const unsigned int row =
525 shape_function_to_row_table[shape_func * n_components + comp];
528 &shape_derivatives[row][0];
530 if (quadrature_points_fastest)
531 for (
unsigned int point = 0; point < n_quadrature_points;
533 derivatives[comp][point] +=
value * (*shape_derivative_ptr++);
535 for (
unsigned int point = 0; point < n_quadrature_points;
537 derivatives[point][comp] +=
value * (*shape_derivative_ptr++);
540 for (
unsigned int c = 0; c < n_components; ++c)
545 const unsigned int row =
546 shape_function_to_row_table[shape_func * n_components + c];
549 &shape_derivatives[row][0];
550 const unsigned int comp = c + mc * n_components;
552 if (quadrature_points_fastest)
553 for (
unsigned int point = 0; point < n_quadrature_points;
555 derivatives[comp][point] +=
556 value * (*shape_derivative_ptr++);
558 for (
unsigned int point = 0; point < n_quadrature_points;
560 derivatives[point][comp] +=
561 value * (*shape_derivative_ptr++);
568 template <
int spacedim,
typename Number,
typename Number2>
573 std::vector<Number> &laplacians)
575 const unsigned int dofs_per_cell = shape_hessians.size()[0];
576 const unsigned int n_quadrature_points = laplacians.size();
579 std::fill_n(laplacians.begin(),
586 for (
unsigned int shape_func = 0; shape_func < dofs_per_cell; ++shape_func)
588 const Number2
value = dof_values[shape_func];
597 &shape_hessians[shape_func][0];
598 for (
unsigned int point = 0; point < n_quadrature_points; ++point)
599 laplacians[point] +=
value *
trace(*shape_hessian_ptr++);
605 template <
int dim,
int spacedim,
typename VectorType,
typename Number>
611 const std::vector<unsigned int> &shape_function_to_row_table,
612 std::vector<VectorType> &laplacians,
613 const bool quadrature_points_fastest =
false,
614 const unsigned int component_multiple = 1)
617 for (
unsigned int i = 0; i < laplacians.size(); ++i)
618 std::fill_n(laplacians[i].
begin(),
619 laplacians[i].
size(),
620 typename VectorType::value_type());
625 if (dofs_per_cell == 0)
629 const unsigned int n_quadrature_points = laplacians.size();
633 const unsigned result_components = n_components * component_multiple;
634 (void)result_components;
635 if (quadrature_points_fastest)
638 for (
unsigned int i = 0; i < laplacians.size(); ++i)
644 for (
unsigned int i = 0; i < laplacians.size(); ++i)
651 for (
unsigned int mc = 0; mc < component_multiple; ++mc)
652 for (
unsigned int shape_func = 0; shape_func < dofs_per_cell;
655 const Number &
value = dof_values[shape_func + mc * dofs_per_cell];
659 if (::internal::CheckForZero<Number>::value(
value) ==
true)
664 const unsigned int comp =
667 const unsigned int row =
668 shape_function_to_row_table[shape_func * n_components + comp];
671 &shape_hessians[row][0];
672 if (quadrature_points_fastest)
674 VectorType &laplacians_comp = laplacians[comp];
675 for (
unsigned int point = 0; point < n_quadrature_points;
677 laplacians_comp[point] +=
681 for (
unsigned int point = 0; point < n_quadrature_points;
683 laplacians[point][comp] +=
687 for (
unsigned int c = 0; c < n_components; ++c)
692 const unsigned int row =
693 shape_function_to_row_table[shape_func * n_components + c];
696 &shape_hessians[row][0];
697 const unsigned int comp = c + mc * n_components;
699 if (quadrature_points_fastest)
701 VectorType &laplacians_comp = laplacians[comp];
702 for (
unsigned int point = 0; point < n_quadrature_points;
704 laplacians_comp[point] +=
708 for (
unsigned int point = 0; point < n_quadrature_points;
710 laplacians[point][comp] +=
719template <
int dim,
int spacedim>
720template <
typename Number>
724 std::vector<Number> &values)
const
727 ExcAccessToUninitializedField(
"update_values"));
729 Assert(present_cell.is_initialized(), ExcNotReinited());
733 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
735 present_cell.get_interpolated_dof_values(fe_function, view);
737 this->finite_element_output.shape_values,
743template <
int dim,
int spacedim>
744template <
typename Number>
749 std::vector<Number> &values)
const
752 ExcAccessToUninitializedField(
"update_values"));
756 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
760 this->finite_element_output.shape_values,
766template <
int dim,
int spacedim>
767template <
typename Number>
773 Assert(present_cell.is_initialized(), ExcNotReinited());
776 ExcAccessToUninitializedField(
"update_values"));
780 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
782 present_cell.get_interpolated_dof_values(fe_function, view);
785 this->finite_element_output.shape_values,
787 this->finite_element_output.shape_function_to_row_table,
793template <
int dim,
int spacedim>
794template <
typename Number>
806 ExcAccessToUninitializedField(
"update_values"));
808 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
813 this->finite_element_output.shape_values,
815 this->finite_element_output.shape_function_to_row_table,
818 indices.
size() / dofs_per_cell);
823template <
int dim,
int spacedim>
824template <
typename Number>
830 const bool quadrature_points_fastest)
const
833 ExcAccessToUninitializedField(
"update_values"));
840 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
845 this->finite_element_output.shape_values,
847 this->finite_element_output.shape_function_to_row_table,
849 quadrature_points_fastest,
850 indices.
size() / dofs_per_cell);
855template <
int dim,
int spacedim>
856template <
typename Number>
863 ExcAccessToUninitializedField(
"update_gradients"));
865 Assert(present_cell.is_initialized(), ExcNotReinited());
869 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
871 present_cell.get_interpolated_dof_values(fe_function, view);
873 this->finite_element_output.shape_gradients,
879template <
int dim,
int spacedim>
880template <
typename Number>
888 ExcAccessToUninitializedField(
"update_gradients"));
892 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
896 this->finite_element_output.shape_gradients,
902template <
int dim,
int spacedim>
903template <
typename Number>
910 ExcAccessToUninitializedField(
"update_gradients"));
911 Assert(present_cell.is_initialized(), ExcNotReinited());
915 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
917 present_cell.get_interpolated_dof_values(fe_function, view);
920 this->finite_element_output.shape_gradients,
922 this->finite_element_output.shape_function_to_row_table,
928template <
int dim,
int spacedim>
929template <
typename Number>
935 const bool quadrature_points_fastest)
const
942 ExcAccessToUninitializedField(
"update_gradients"));
944 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
949 this->finite_element_output.shape_gradients,
951 this->finite_element_output.shape_function_to_row_table,
953 quadrature_points_fastest,
954 indices.
size() / dofs_per_cell);
959template <
int dim,
int spacedim>
960template <
typename Number>
968 ExcAccessToUninitializedField(
"update_hessians"));
969 Assert(present_cell.is_initialized(), ExcNotReinited());
973 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
975 present_cell.get_interpolated_dof_values(fe_function, view);
977 this->finite_element_output.shape_hessians,
983template <
int dim,
int spacedim>
984template <
typename Number>
992 ExcAccessToUninitializedField(
"update_hessians"));
996 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
1000 this->finite_element_output.shape_hessians,
1006template <
int dim,
int spacedim>
1007template <
typename Number>
1012 const bool quadrature_points_fastest)
const
1015 ExcAccessToUninitializedField(
"update_hessians"));
1016 Assert(present_cell.is_initialized(), ExcNotReinited());
1020 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
1022 present_cell.get_interpolated_dof_values(fe_function, view);
1025 this->finite_element_output.shape_hessians,
1027 this->finite_element_output.shape_function_to_row_table,
1029 quadrature_points_fastest);
1034template <
int dim,
int spacedim>
1035template <
typename Number>
1041 const bool quadrature_points_fastest)
const
1044 ExcAccessToUninitializedField(
"update_hessians"));
1048 boost::container::small_vector<Number, 200> dof_values(indices.
size());
1053 this->finite_element_output.shape_hessians,
1055 this->finite_element_output.shape_function_to_row_table,
1057 quadrature_points_fastest,
1058 indices.
size() / dofs_per_cell);
1063template <
int dim,
int spacedim>
1064template <
typename Number>
1068 std::vector<Number> &laplacians)
const
1071 ExcAccessToUninitializedField(
"update_hessians"));
1073 Assert(present_cell.is_initialized(), ExcNotReinited());
1077 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
1079 present_cell.get_interpolated_dof_values(fe_function, view);
1081 this->finite_element_output.shape_hessians,
1087template <
int dim,
int spacedim>
1088template <
typename Number>
1093 std::vector<Number> &laplacians)
const
1096 ExcAccessToUninitializedField(
"update_hessians"));
1100 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
1104 this->finite_element_output.shape_hessians,
1110template <
int dim,
int spacedim>
1111template <
typename Number>
1117 Assert(present_cell.is_initialized(), ExcNotReinited());
1119 ExcAccessToUninitializedField(
"update_hessians"));
1123 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
1125 present_cell.get_interpolated_dof_values(fe_function, view);
1128 this->finite_element_output.shape_hessians,
1130 this->finite_element_output.shape_function_to_row_table,
1136template <
int dim,
int spacedim>
1137template <
typename Number>
1149 ExcAccessToUninitializedField(
"update_hessians"));
1151 boost::container::small_vector<Number, 200> dof_values(indices.
size());
1156 this->finite_element_output.shape_hessians,
1158 this->finite_element_output.shape_function_to_row_table,
1161 indices.
size() / dofs_per_cell);
1166template <
int dim,
int spacedim>
1167template <
typename Number>
1172 std::vector<std::vector<Number>> &laplacians,
1173 const bool quadrature_points_fastest)
const
1178 ExcAccessToUninitializedField(
"update_hessians"));
1180 boost::container::small_vector<Number, 200> dof_values(indices.
size());
1185 this->finite_element_output.shape_hessians,
1187 this->finite_element_output.shape_function_to_row_table,
1189 quadrature_points_fastest,
1190 indices.
size() / dofs_per_cell);
1195template <
int dim,
int spacedim>
1196template <
typename Number>
1204 ExcAccessToUninitializedField(
"update_3rd_derivatives"));
1205 Assert(present_cell.is_initialized(), ExcNotReinited());
1209 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
1211 present_cell.get_interpolated_dof_values(fe_function, view);
1213 view, this->finite_element_output.shape_3rd_derivatives, third_derivatives);
1218template <
int dim,
int spacedim>
1219template <
typename Number>
1227 ExcAccessToUninitializedField(
"update_3rd_derivatives"));
1231 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
1235 view, this->finite_element_output.shape_3rd_derivatives, third_derivatives);
1240template <
int dim,
int spacedim>
1241template <
typename Number>
1246 const bool quadrature_points_fastest)
const
1249 ExcAccessToUninitializedField(
"update_3rd_derivatives"));
1250 Assert(present_cell.is_initialized(), ExcNotReinited());
1254 boost::container::small_vector<Number, 200> dof_values(dofs_per_cell);
1256 present_cell.get_interpolated_dof_values(fe_function, view);
1259 this->finite_element_output.shape_3rd_derivatives,
1261 this->finite_element_output.shape_function_to_row_table,
1263 quadrature_points_fastest);
1268template <
int dim,
int spacedim>
1269template <
typename Number>
1275 const bool quadrature_points_fastest)
const
1278 ExcAccessToUninitializedField(
"update_3rd_derivatives"));
1282 boost::container::small_vector<Number, 200> dof_values(indices.
size());
1287 this->finite_element_output.shape_3rd_derivatives,
1289 this->finite_element_output.shape_function_to_row_table,
1291 quadrature_points_fastest,
1292 indices.
size() / dofs_per_cell);
1297template <
int dim,
int spacedim>
1301 return present_cell;
1306template <
int dim,
int spacedim>
1307const std::vector<Tensor<1, spacedim>> &
1312 "update_normal_vectors")));
1314 return this->mapping_output.normal_vectors;
1319template <
int dim,
int spacedim>
1323 return (
sizeof(this->update_flags) +
1326 sizeof(cell_similarity) +
1340template <
int dim,
int spacedim>
1352 flags |= mapping->requires_update_flags(flags);
1359template <
int dim,
int spacedim>
1367 tria_listener_any_change.disconnect();
1372template <
int dim,
int spacedim>
1377 if (present_cell.is_initialized())
1379 const auto stored_cell =
1388 Assert(!cell->get_triangulation()
1389 .global_active_cell_index_partitioner()
1392 Assert(!stored_cell->get_triangulation()
1393 .global_active_cell_index_partitioner()
1396 if (&cell->get_triangulation() != &stored_cell->get_triangulation())
1403 invalidate_present_cell();
1404 tria_listener_any_change =
1405 cell->get_triangulation().signals.any_change.connect(
1406 [
this]() { this->invalidate_present_cell(); });
1411 tria_listener_any_change =
1412 cell->get_triangulation().signals.any_change.connect(
1413 [
this]() { this->invalidate_present_cell(); });
1419template <
int dim,
int spacedim>
1424 if (check_for_cell_similarity_allowed ==
false)
1431 if (this->present_cell.is_initialized() ==
false)
1440 (cell->is_translation_of(
1443 this->present_cell)) ?
1450 &
>(this->present_cell)
1451 ->direction_flag() != cell->direction_flag())
1460template <
int dim,
int spacedim>
1464 return cell_similarity;
1469template <
int dim,
int spacedim>
1474template <
int dim,
int spacedim>
1480#include "fe/fe_values_base.inst"
ArrayView< std::remove_reference_t< typename std::iterator_traits< Iterator >::reference >, MemorySpaceType > make_array_view(const Iterator begin, const Iterator end)
typename LevelSelector::cell_iterator level_cell_iterator
types::global_dof_index n_dofs_for_dof_handler() const
void get_interpolated_dof_values(const ReadVector< Number > &in, ArrayView< Number > out) const
CellIteratorWrapper()=default
bool is_initialized() const
CellSimilarity::Similarity cell_similarity
::internal::FEValuesViews::Cache< dim, spacedim > fe_values_views_cache
Triangulation< dim, spacedim >::cell_iterator get_cell() const
void get_function_values(const ReadVector< Number > &fe_function, std::vector< Number > &values) const
FEValuesBase(const unsigned int n_q_points, const unsigned int dofs_per_cell, const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe)
virtual ~FEValuesBase() override
const unsigned int dofs_per_cell
void check_cell_similarity(const typename Triangulation< dim, spacedim >::cell_iterator &cell)
void get_function_hessians(const ReadVector< Number > &fe_function, std::vector< Tensor< 2, spacedim, Number > > &hessians) const
void always_allow_check_for_cell_similarity(const bool allow)
void get_function_laplacians(const ReadVector< Number > &fe_function, std::vector< Number > &laplacians) const
const unsigned int n_quadrature_points
CellSimilarity::Similarity get_cell_similarity() const
const std::vector< Tensor< 1, spacedim > > & get_normal_vectors() const
std::size_t memory_consumption() const
void get_function_third_derivatives(const ReadVector< Number > &fe_function, std::vector< Tensor< 3, spacedim, Number > > &third_derivatives) const
UpdateFlags compute_update_flags(const UpdateFlags update_flags) const
void get_function_gradients(const ReadVector< Number > &fe_function, std::vector< Tensor< 1, spacedim, Number > > &gradients) const
void invalidate_present_cell()
const ObserverPointer< const Mapping< dim, spacedim >, FEValuesBase< dim, spacedim > > mapping
bool check_for_cell_similarity_allowed
const ObserverPointer< const FiniteElement< dim, spacedim >, FEValuesBase< dim, spacedim > > fe
void maybe_invalidate_previous_present_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell)
const unsigned int max_n_quadrature_points
unsigned int n_dofs_per_cell() const
unsigned int n_components() const
const ComponentMask & get_nonzero_components(const unsigned int i) const
bool is_primitive() const
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const =0
std::pair< unsigned int, unsigned int > system_to_component_index(const unsigned int index) const
unsigned int n_nonzero_components(const unsigned int i) const
Abstract base class for mapping classes.
virtual void extract_subvector_to(const ArrayView< const types::global_dof_index > &indices, const ArrayView< Number > &elements) const =0
virtual size_type size() const =0
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_ASSERT_UNREACHABLE()
static ::ExceptionBase & ExcNotMultiple(int arg1, int arg2)
#define Assert(cond, exc)
static ::ExceptionBase & ExcNotReinited()
#define AssertDimension(dim1, dim2)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcMessage(std::string arg1)
typename ActiveSelector::cell_iterator cell_iterator
TriaIterator< CellAccessor< dim, spacedim > > cell_iterator
@ update_hessians
Second derivatives of shape functions.
@ update_values
Shape function values.
@ update_normal_vectors
Normal vectors.
@ update_3rd_derivatives
Third derivatives of shape functions.
@ update_gradients
Shape function gradients.
std::enable_if_t< std::is_fundamental_v< T >, std::size_t > memory_consumption(const T &t)
* * * RotationFunction< dim, Number >::RotationFunction Number(dim)
void do_function_laplacians(const ArrayView< Number2 > &dof_values, const ::Table< 2, Tensor< 2, spacedim > > &shape_hessians, std::vector< Number > &laplacians)
void do_function_derivatives(const ArrayView< Number > &dof_values, const ::Table< 2, Tensor< order, spacedim > > &shape_derivatives, std::vector< Tensor< order, spacedim, Number > > &derivatives)
std::vector< unsigned int > make_shape_function_to_row_table(const FiniteElement< dim, spacedim > &fe)
void do_function_values(const ArrayView< Number2 > &dof_values, const ::Table< 2, double > &shape_values, std::vector< Number > &values)
constexpr types::global_dof_index invalid_dof_index
constexpr unsigned int invalid_unsigned_int
static constexpr const T & value(const T &t)
constexpr Number trace(const SymmetricTensor< 2, dim2, Number > &)