25#ifdef DEAL_II_WITH_ADOLC
26# include <adolc/adouble.h>
27# include <adolc/adtl.h>
38 template <
int dim,
int spacedim>
40 const unsigned int component)
41 : fe_values(&fe_values)
42 , component(component)
43 , shape_function_data(this->fe_values->fe->n_dofs_per_cell())
51 const std::vector<unsigned int> shape_function_to_row_table =
58 if (is_primitive ==
true)
75 template <
int dim,
int spacedim>
78 , component(
numbers::invalid_unsigned_int)
83 template <
int dim,
int spacedim>
85 const unsigned int first_vector_component)
86 : fe_values(&fe_values)
87 , first_vector_component(first_vector_component)
88 , shape_function_data(this->fe_values->fe->n_dofs_per_cell())
96 const std::vector<unsigned int> shape_function_to_row_table =
99 for (
unsigned int d = 0; d < spacedim; ++d)
107 if (is_primitive ==
true)
117 shape_function_to_row_table[i * fe.
n_components() + component];
126 unsigned int n_nonzero_components = 0;
127 for (
unsigned int d = 0; d < spacedim; ++d)
130 ++n_nonzero_components;
132 if (n_nonzero_components == 0)
134 else if (n_nonzero_components > 1)
138 for (
unsigned int d = 0; d < spacedim; ++d)
140 .is_nonzero_shape_function_component[d] ==
true)
153 template <
int dim,
int spacedim>
156 , first_vector_component(
numbers::invalid_unsigned_int)
161 template <
int dim,
int spacedim>
164 const unsigned int first_tensor_component)
165 : fe_values(&fe_values)
166 , first_tensor_component(first_tensor_component)
167 , shape_function_data(this->fe_values->fe->n_dofs_per_cell())
170 Assert(first_tensor_component + (dim * dim + dim) / 2 - 1 <
173 first_tensor_component +
180 const std::vector<unsigned int> shape_function_to_row_table =
183 for (
unsigned int d = 0;
184 d < ::SymmetricTensor<2, dim>::n_independent_components;
187 const unsigned int component = first_tensor_component + d;
193 if (is_primitive ==
true)
194 shape_function_data[i].is_nonzero_shape_function_component[d] =
197 shape_function_data[i].is_nonzero_shape_function_component[d] =
200 if (shape_function_data[i].is_nonzero_shape_function_component[d] ==
202 shape_function_data[i].row_index[d] =
203 shape_function_to_row_table[i * fe.
n_components() + component];
205 shape_function_data[i].row_index[d] =
212 unsigned int n_nonzero_components = 0;
213 for (
unsigned int d = 0;
214 d < ::SymmetricTensor<2, dim>::n_independent_components;
216 if (shape_function_data[i].is_nonzero_shape_function_component[d] ==
218 ++n_nonzero_components;
220 if (n_nonzero_components == 0)
221 shape_function_data[i].single_nonzero_component = -2;
222 else if (n_nonzero_components > 1)
223 shape_function_data[i].single_nonzero_component = -1;
226 for (
unsigned int d = 0;
227 d < ::SymmetricTensor<2, dim>::n_independent_components;
229 if (shape_function_data[i]
230 .is_nonzero_shape_function_component[d] ==
true)
232 shape_function_data[i].single_nonzero_component =
233 shape_function_data[i].row_index[d];
234 shape_function_data[i].single_nonzero_component_index = d;
243 template <
int dim,
int spacedim>
246 , first_tensor_component(
numbers::invalid_unsigned_int)
251 template <
int dim,
int spacedim>
253 const unsigned int first_tensor_component)
254 : fe_values(&fe_values)
255 , first_tensor_component(first_tensor_component)
256 , shape_function_data(this->fe_values->fe->n_dofs_per_cell())
263 const std::vector<unsigned int> shape_function_to_row_table =
266 for (
unsigned int d = 0; d < dim * dim; ++d)
268 const unsigned int component = first_tensor_component + d;
274 if (is_primitive ==
true)
275 shape_function_data[i].is_nonzero_shape_function_component[d] =
278 shape_function_data[i].is_nonzero_shape_function_component[d] =
281 if (shape_function_data[i].is_nonzero_shape_function_component[d] ==
283 shape_function_data[i].row_index[d] =
284 shape_function_to_row_table[i * fe.
n_components() + component];
286 shape_function_data[i].row_index[d] =
293 unsigned int n_nonzero_components = 0;
294 for (
unsigned int d = 0; d < dim * dim; ++d)
295 if (shape_function_data[i].is_nonzero_shape_function_component[d] ==
297 ++n_nonzero_components;
299 if (n_nonzero_components == 0)
300 shape_function_data[i].single_nonzero_component = -2;
301 else if (n_nonzero_components > 1)
302 shape_function_data[i].single_nonzero_component = -1;
305 for (
unsigned int d = 0; d < dim * dim; ++d)
306 if (shape_function_data[i]
307 .is_nonzero_shape_function_component[d] ==
true)
309 shape_function_data[i].single_nonzero_component =
310 shape_function_data[i].row_index[d];
311 shape_function_data[i].single_nonzero_component_index = d;
320 template <
int dim,
int spacedim>
323 , first_tensor_component(
numbers::invalid_unsigned_int)
328 template <
int dim,
int spacedim>
329 template <
typename Number>
338 Assert(fe_values->present_cell.is_initialized(),
343 boost::container::small_vector<Number, 200> dof_values(
344 fe_values->dofs_per_cell);
345 fe_values->present_cell.get_interpolated_dof_values(
347 internal::do_function_values<dim, spacedim>(
349 fe_values->finite_element_output.shape_values,
356 template <
int dim,
int spacedim>
357 template <
class InputVector>
360 const InputVector &dof_values,
367 Assert(fe_values->present_cell.is_initialized(),
372 internal::do_function_values<dim, spacedim>(
374 fe_values->finite_element_output.shape_values,
381 template <
int dim,
int spacedim>
382 template <
typename Number>
390 "update_gradients")));
391 Assert(fe_values->present_cell.is_initialized(),
394 fe_values->present_cell.n_dofs_for_dof_handler());
398 boost::container::small_vector<Number, 200> dof_values(
399 fe_values->dofs_per_cell);
400 fe_values->present_cell.get_interpolated_dof_values(
402 internal::do_function_derivatives<1, dim, spacedim>(
404 fe_values->finite_element_output.shape_gradients,
411 template <
int dim,
int spacedim>
412 template <
typename InputVector>
415 const InputVector &dof_values,
421 "update_gradients")));
422 Assert(fe_values->present_cell.is_initialized(),
427 internal::do_function_derivatives<1, dim, spacedim>(
429 fe_values->finite_element_output.shape_gradients,
436 template <
int dim,
int spacedim>
437 template <
typename Number>
445 "update_hessians")));
446 Assert(fe_values->present_cell.is_initialized(),
449 fe_values->present_cell.n_dofs_for_dof_handler());
453 boost::container::small_vector<Number, 200> dof_values(
454 fe_values->dofs_per_cell);
455 fe_values->present_cell.get_interpolated_dof_values(
457 internal::do_function_derivatives<2, dim, spacedim>(
460 fe_values->finite_element_output.shape_hessians,
467 template <
int dim,
int spacedim>
468 template <
class InputVector>
471 const InputVector &dof_values,
477 "update_hessians")));
478 Assert(fe_values->present_cell.is_initialized(),
483 internal::do_function_derivatives<2, dim, spacedim>(
485 fe_values->finite_element_output.shape_hessians,
492 template <
int dim,
int spacedim>
493 template <
typename Number>
501 "update_hessians")));
502 Assert(fe_values->present_cell.is_initialized(),
505 fe_values->present_cell.n_dofs_for_dof_handler());
509 boost::container::small_vector<Number, 200> dof_values(
510 fe_values->dofs_per_cell);
511 fe_values->present_cell.get_interpolated_dof_values(
513 internal::do_function_laplacians<dim, spacedim>(
515 fe_values->finite_element_output.shape_hessians,
522 template <
int dim,
int spacedim>
523 template <
class InputVector>
526 const InputVector &dof_values,
532 "update_hessians")));
533 Assert(fe_values->present_cell.is_initialized(),
538 internal::do_function_laplacians<dim, spacedim>(
540 fe_values->finite_element_output.shape_hessians,
547 template <
int dim,
int spacedim>
548 template <
typename Number>
557 "update_3rd_derivatives")));
558 Assert(fe_values->present_cell.is_initialized(),
561 fe_values->present_cell.n_dofs_for_dof_handler());
562 AssertDimension(third_derivatives.size(), fe_values->n_quadrature_points);
565 boost::container::small_vector<Number, 200> dof_values(
566 fe_values->dofs_per_cell);
567 fe_values->present_cell.get_interpolated_dof_values(
569 internal::do_function_derivatives<3, dim, spacedim>(
571 fe_values->finite_element_output.shape_3rd_derivatives,
578 template <
int dim,
int spacedim>
579 template <
class InputVector>
582 const InputVector &dof_values,
585 &third_derivatives)
const
589 "update_3rd_derivatives")));
590 Assert(fe_values->present_cell.is_initialized(),
593 AssertDimension(third_derivatives.size(), fe_values->n_quadrature_points);
595 internal::do_function_derivatives<3, dim, spacedim>(
597 fe_values->finite_element_output.shape_3rd_derivatives,
604 template <
int dim,
int spacedim>
605 template <
typename Number>
614 Assert(fe_values->present_cell.is_initialized(),
619 boost::container::small_vector<Number, 200> dof_values(
620 fe_values->dofs_per_cell);
621 fe_values->present_cell.get_interpolated_dof_values(
623 internal::do_function_values<dim, spacedim>(
625 fe_values->finite_element_output.shape_values,
632 template <
int dim,
int spacedim>
633 template <
class InputVector>
636 const InputVector &dof_values,
643 Assert(fe_values->present_cell.is_initialized(),
648 internal::do_function_values<dim, spacedim>(
650 fe_values->finite_element_output.shape_values,
657 template <
int dim,
int spacedim>
658 template <
typename Number>
666 "update_gradients")));
667 Assert(fe_values->present_cell.is_initialized(),
670 fe_values->present_cell.n_dofs_for_dof_handler());
674 boost::container::small_vector<Number, 200> dof_values(
675 fe_values->dofs_per_cell);
676 fe_values->present_cell.get_interpolated_dof_values(
678 internal::do_function_derivatives<1, dim, spacedim>(
680 fe_values->finite_element_output.shape_gradients,
687 template <
int dim,
int spacedim>
688 template <
typename InputVector>
691 const InputVector &dof_values,
697 "update_gradients")));
698 Assert(fe_values->present_cell.is_initialized(),
703 internal::do_function_derivatives<1, dim, spacedim>(
705 fe_values->finite_element_output.shape_gradients,
712 template <
int dim,
int spacedim>
713 template <
typename Number>
722 "update_gradients")));
723 Assert(fe_values->present_cell.is_initialized(),
726 fe_values->present_cell.n_dofs_for_dof_handler());
727 AssertDimension(symmetric_gradients.size(), fe_values->n_quadrature_points);
730 boost::container::small_vector<Number, 200> dof_values(
731 fe_values->dofs_per_cell);
732 fe_values->present_cell.get_interpolated_dof_values(
734 internal::do_function_symmetric_gradients<dim, spacedim>(
736 fe_values->finite_element_output.shape_gradients,
738 symmetric_gradients);
743 template <
int dim,
int spacedim>
744 template <
class InputVector>
747 const InputVector &dof_values,
750 &symmetric_gradients)
const
754 "update_gradients")));
755 Assert(fe_values->present_cell.is_initialized(),
758 AssertDimension(symmetric_gradients.size(), fe_values->n_quadrature_points);
760 internal::do_function_symmetric_gradients<dim, spacedim>(
762 fe_values->finite_element_output.shape_gradients,
764 symmetric_gradients);
769 template <
int dim,
int spacedim>
770 template <
typename Number>
778 "update_gradients")));
779 Assert(fe_values->present_cell.is_initialized(),
782 fe_values->present_cell.n_dofs_for_dof_handler());
786 boost::container::small_vector<Number, 200> dof_values(
787 fe_values->dofs_per_cell);
788 fe_values->present_cell.get_interpolated_dof_values(
790 internal::do_function_divergences<dim, spacedim>(
792 fe_values->finite_element_output.shape_gradients,
799 template <
int dim,
int spacedim>
800 template <
class InputVector>
803 const InputVector &dof_values,
809 "update_gradients")));
810 Assert(fe_values->present_cell.is_initialized(),
815 internal::do_function_divergences<dim, spacedim>(
817 fe_values->finite_element_output.shape_gradients,
824 template <
int dim,
int spacedim>
825 template <
typename Number>
833 "update_gradients")));
834 Assert(fe_values->present_cell.is_initialized(),
835 ExcMessage(
"FEValues object is not reinited to any cell"));
837 fe_values->present_cell.n_dofs_for_dof_handler());
840 if constexpr ((dim == 2) || (dim == 3))
843 boost::container::small_vector<Number, 200> dof_values(
844 fe_values->dofs_per_cell);
845 fe_values->present_cell.get_interpolated_dof_values(
847 internal::do_function_curls<dim, spacedim>(
849 fe_values->finite_element_output.shape_gradients,
855 ExcMessage(
"The curl is only defined for vector fields "
856 "that are either two- or three-dimensional. "
857 "You cannot ask for the curl for dim=" +
858 std::to_string(dim) +
"."));
863 template <
int dim,
int spacedim>
864 template <
class InputVector>
867 const InputVector &dof_values,
873 "update_gradients")));
874 Assert(fe_values->present_cell.is_initialized(),
875 ExcMessage(
"FEValues object is not reinited to any cell"));
879 internal::do_function_curls<dim, spacedim>(
881 fe_values->finite_element_output.shape_gradients,
888 template <
int dim,
int spacedim>
889 template <
typename Number>
897 "update_hessians")));
898 Assert(fe_values->present_cell.is_initialized(),
901 fe_values->present_cell.n_dofs_for_dof_handler());
905 boost::container::small_vector<Number, 200> dof_values(
906 fe_values->dofs_per_cell);
907 fe_values->present_cell.get_interpolated_dof_values(
909 internal::do_function_derivatives<2, dim, spacedim>(
911 fe_values->finite_element_output.shape_hessians,
918 template <
int dim,
int spacedim>
919 template <
class InputVector>
922 const InputVector &dof_values,
928 "update_hessians")));
929 Assert(fe_values->present_cell.is_initialized(),
934 internal::do_function_derivatives<2, dim, spacedim>(
936 fe_values->finite_element_output.shape_hessians,
943 template <
int dim,
int spacedim>
944 template <
typename Number>
952 "update_hessians")));
953 Assert(laplacians.size() == fe_values->n_quadrature_points,
955 fe_values->n_quadrature_points));
956 Assert(fe_values->present_cell.is_initialized(),
959 fe_function.
size() == fe_values->present_cell.n_dofs_for_dof_handler(),
961 fe_values->present_cell.n_dofs_for_dof_handler()));
965 boost::container::small_vector<Number, 200> dof_values(
966 fe_values->dofs_per_cell);
967 fe_values->present_cell.get_interpolated_dof_values(
969 internal::do_function_laplacians<dim, spacedim>(
971 fe_values->finite_element_output.shape_hessians,
978 template <
int dim,
int spacedim>
979 template <
class InputVector>
982 const InputVector &dof_values,
988 "update_hessians")));
989 Assert(laplacians.size() == fe_values->n_quadrature_points,
991 fe_values->n_quadrature_points));
992 Assert(fe_values->present_cell.is_initialized(),
997 internal::do_function_laplacians<dim, spacedim>(
999 fe_values->finite_element_output.shape_hessians,
1000 shape_function_data,
1006 template <
int dim,
int spacedim>
1007 template <
typename Number>
1016 "update_3rd_derivatives")));
1017 Assert(fe_values->present_cell.is_initialized(),
1020 fe_values->present_cell.n_dofs_for_dof_handler());
1021 AssertDimension(third_derivatives.size(), fe_values->n_quadrature_points);
1024 boost::container::small_vector<Number, 200> dof_values(
1025 fe_values->dofs_per_cell);
1026 fe_values->present_cell.get_interpolated_dof_values(
1028 internal::do_function_derivatives<3, dim, spacedim>(
1030 fe_values->finite_element_output.shape_3rd_derivatives,
1031 shape_function_data,
1037 template <
int dim,
int spacedim>
1038 template <
class InputVector>
1041 const InputVector &dof_values,
1044 &third_derivatives)
const
1048 "update_3rd_derivatives")));
1049 Assert(fe_values->present_cell.is_initialized(),
1052 AssertDimension(third_derivatives.size(), fe_values->n_quadrature_points);
1054 internal::do_function_derivatives<3, dim, spacedim>(
1056 fe_values->finite_element_output.shape_3rd_derivatives,
1057 shape_function_data,
1063 template <
int dim,
int spacedim>
1064 template <
typename Number>
1073 Assert(fe_values->present_cell.is_initialized(),
1078 boost::container::small_vector<Number, 200> dof_values(
1079 fe_values->dofs_per_cell);
1080 fe_values->present_cell.get_interpolated_dof_values(
1082 internal::do_function_values<dim, spacedim>(
1084 fe_values->finite_element_output.shape_values,
1085 shape_function_data,
1091 template <
int dim,
int spacedim>
1092 template <
class InputVector>
1095 const InputVector &dof_values,
1102 Assert(fe_values->present_cell.is_initialized(),
1107 internal::do_function_values<dim, spacedim>(
1109 fe_values->finite_element_output.shape_values,
1110 shape_function_data,
1116 template <
int dim,
int spacedim>
1117 template <
typename Number>
1125 "update_gradients")));
1126 Assert(fe_values->present_cell.is_initialized(),
1129 fe_values->present_cell.n_dofs_for_dof_handler());
1133 boost::container::small_vector<Number, 200> dof_values(
1134 fe_values->dofs_per_cell);
1135 fe_values->present_cell.get_interpolated_dof_values(
1137 internal::do_function_divergences<dim, spacedim>(
1139 fe_values->finite_element_output.shape_gradients,
1140 shape_function_data,
1146 template <
int dim,
int spacedim>
1147 template <
class InputVector>
1151 const InputVector &dof_values,
1157 "update_gradients")));
1158 Assert(fe_values->present_cell.is_initialized(),
1163 internal::do_function_divergences<dim, spacedim>(
1165 fe_values->finite_element_output.shape_gradients,
1166 shape_function_data,
1172 template <
int dim,
int spacedim>
1173 template <
typename Number>
1182 Assert(fe_values->present_cell.is_initialized(),
1187 boost::container::small_vector<Number, 200> dof_values(
1188 fe_values->dofs_per_cell);
1189 fe_values->present_cell.get_interpolated_dof_values(
1191 internal::do_function_values<dim, spacedim>(
1193 fe_values->finite_element_output.shape_values,
1194 shape_function_data,
1200 template <
int dim,
int spacedim>
1201 template <
class InputVector>
1204 const InputVector &dof_values,
1211 Assert(fe_values->present_cell.is_initialized(),
1216 internal::do_function_values<dim, spacedim>(
1218 fe_values->finite_element_output.shape_values,
1219 shape_function_data,
1225 template <
int dim,
int spacedim>
1226 template <
typename Number>
1234 "update_gradients")));
1235 Assert(fe_values->present_cell.is_initialized(),
1238 fe_values->present_cell.n_dofs_for_dof_handler());
1242 boost::container::small_vector<Number, 200> dof_values(
1243 fe_values->dofs_per_cell);
1244 fe_values->present_cell.get_interpolated_dof_values(
1246 internal::do_function_divergences<dim, spacedim>(
1248 fe_values->finite_element_output.shape_gradients,
1249 shape_function_data,
1255 template <
int dim,
int spacedim>
1256 template <
class InputVector>
1259 const InputVector &dof_values,
1265 "update_gradients")));
1266 Assert(fe_values->present_cell.is_initialized(),
1271 internal::do_function_divergences<dim, spacedim>(
1273 fe_values->finite_element_output.shape_gradients,
1274 shape_function_data,
1280 template <
int dim,
int spacedim>
1281 template <
typename Number>
1289 "update_gradients")));
1290 Assert(fe_values->present_cell.is_initialized(),
1293 fe_values->present_cell.n_dofs_for_dof_handler());
1297 boost::container::small_vector<Number, 200> dof_values(
1298 fe_values->dofs_per_cell);
1299 fe_values->present_cell.get_interpolated_dof_values(
1301 internal::do_function_gradients<dim, spacedim>(
1303 fe_values->finite_element_output.shape_gradients,
1304 shape_function_data,
1310 template <
int dim,
int spacedim>
1311 template <
class InputVector>
1314 const InputVector &dof_values,
1320 "update_gradients")));
1321 Assert(fe_values->present_cell.is_initialized(),
1326 internal::do_function_gradients<dim, spacedim>(
1328 fe_values->finite_element_output.shape_gradients,
1329 shape_function_data,
1339 template <
int dim,
int spacedim>
1345 scalars.resize(n_scalars);
1350 const unsigned int n_vectors =
1355 vectors.resize(n_vectors);
1358 const unsigned int n_symmetric_second_order_tensors =
1364 symmetric_second_order_tensors.resize(n_symmetric_second_order_tensors);
1367 const unsigned int n_second_order_tensors =
1372 second_order_tensors.resize(n_second_order_tensors);
1379#include "fe/fe_values_views.inst"
auto make_const_array_view(const Container &container) -> decltype(make_array_view(container))
ArrayView< std::remove_reference_t< typename std::iterator_traits< Iterator >::reference >, MemorySpaceType > make_array_view(const Iterator begin, const Iterator end)
const ObserverPointer< const FiniteElement< dim, spacedim >, FEValuesBase< dim, spacedim > > fe
const FiniteElement< dim, spacedim > & get_fe() const
void get_function_third_derivatives_from_local_dof_values(const InputVector &dof_values, std::vector< solution_third_derivative_type< typename InputVector::value_type > > &third_derivatives) const
void get_function_laplacians(const ReadVector< Number > &fe_function, std::vector< solution_laplacian_type< Number > > &laplacians) const
typename ProductType< Number, hessian_type >::type solution_hessian_type
void get_function_hessians_from_local_dof_values(const InputVector &dof_values, std::vector< solution_hessian_type< typename InputVector::value_type > > &hessians) const
void get_function_values_from_local_dof_values(const InputVector &dof_values, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
std::vector< ShapeFunctionData > shape_function_data
void get_function_gradients(const ReadVector< Number > &fe_function, std::vector< solution_gradient_type< Number > > &gradients) const
typename ProductType< Number, value_type >::type solution_laplacian_type
typename ProductType< Number, third_derivative_type >::type solution_third_derivative_type
typename ProductType< Number, value_type >::type solution_value_type
typename ProductType< Number, gradient_type >::type solution_gradient_type
void get_function_values(const ReadVector< Number > &fe_function, std::vector< solution_value_type< Number > > &values) const
void get_function_laplacians_from_local_dof_values(const InputVector &dof_values, std::vector< solution_laplacian_type< typename InputVector::value_type > > &laplacians) const
void get_function_gradients_from_local_dof_values(const InputVector &dof_values, std::vector< solution_gradient_type< typename InputVector::value_type > > &gradients) const
void get_function_third_derivatives(const ReadVector< Number > &fe_function, std::vector< solution_third_derivative_type< Number > > &third_derivatives) const
void get_function_hessians(const ReadVector< Number > &fe_function, std::vector< solution_hessian_type< Number > > &hessians) const
typename ProductType< Number, value_type >::type solution_value_type
typename ProductType< Number, divergence_type >::type solution_divergence_type
typename ProductType< Number, value_type >::type solution_value_type
typename ProductType< Number, divergence_type >::type solution_divergence_type
typename ProductType< Number, gradient_type >::type solution_gradient_type
typename ProductType< Number, third_derivative_type >::type solution_third_derivative_type
void get_function_symmetric_gradients_from_local_dof_values(const InputVector &dof_values, std::vector< solution_symmetric_gradient_type< typename InputVector::value_type > > &symmetric_gradients) const
void get_function_gradients_from_local_dof_values(const InputVector &dof_values, std::vector< solution_gradient_type< typename InputVector::value_type > > &gradients) const
typename ProductType< Number, divergence_type >::type solution_divergence_type
void get_function_laplacians(const ReadVector< Number > &fe_function, std::vector< solution_laplacian_type< Number > > &laplacians) const
unsigned int first_vector_component
void get_function_gradients(const ReadVector< Number > &fe_function, std::vector< solution_gradient_type< Number > > &gradients) const
typename ProductType< Number, hessian_type >::type solution_hessian_type
void get_function_symmetric_gradients(const ReadVector< Number > &fe_function, std::vector< solution_symmetric_gradient_type< Number > > &symmetric_gradients) const
typename ProductType< Number, symmetric_gradient_type >::type solution_symmetric_gradient_type
void get_function_laplacians_from_local_dof_values(const InputVector &dof_values, std::vector< solution_laplacian_type< typename InputVector::value_type > > &laplacians) const
void get_function_hessians(const ReadVector< Number > &fe_function, std::vector< solution_hessian_type< Number > > &hessians) const
typename ProductType< Number, gradient_type >::type solution_gradient_type
typename ProductType< Number, value_type >::type solution_value_type
void get_function_third_derivatives(const ReadVector< Number > &fe_function, std::vector< solution_third_derivative_type< Number > > &third_derivatives) const
void get_function_values(const ReadVector< Number > &fe_function, std::vector< solution_value_type< Number > > &values) const
void get_function_curls_from_local_dof_values(const InputVector &dof_values, std::vector< solution_curl_type< typename InputVector::value_type > > &curls) const
typename ProductType< Number, curl_type >::type solution_curl_type
std::vector< ShapeFunctionData > shape_function_data
void get_function_curls(const ReadVector< Number > &fe_function, std::vector< solution_curl_type< Number > > &curls) const
void get_function_hessians_from_local_dof_values(const InputVector &dof_values, std::vector< solution_hessian_type< typename InputVector::value_type > > &hessians) const
typename ProductType< Number, value_type >::type solution_laplacian_type
void get_function_values_from_local_dof_values(const InputVector &dof_values, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
void get_function_divergences_from_local_dof_values(const InputVector &dof_values, std::vector< solution_divergence_type< typename InputVector::value_type > > &divergences) const
void get_function_third_derivatives_from_local_dof_values(const InputVector &dof_values, std::vector< solution_third_derivative_type< typename InputVector::value_type > > &third_derivatives) const
void get_function_divergences(const ReadVector< Number > &fe_function, std::vector< solution_divergence_type< Number > > &divergences) const
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
std::pair< unsigned int, unsigned int > system_to_component_index(const unsigned int index) const
virtual size_type size() const =0
constexpr SymmetricTensor()=default
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
#define AssertDimension(dim1, dim2)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcIndexRange(std::size_t arg1, std::size_t arg2, std::size_t arg3)
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
@ update_hessians
Second derivatives of shape functions.
@ update_values
Shape function values.
@ update_3rd_derivatives
Third derivatives of shape functions.
@ update_gradients
Shape function gradients.
std::vector< unsigned int > make_shape_function_to_row_table(const FiniteElement< dim, spacedim > &fe)
constexpr unsigned int invalid_unsigned_int
Cache(const FEValuesBase< dim, spacedim > &fe_values)