27#ifdef DEAL_II_WITH_ADOLC
28# include <adolc/adouble.h>
29# include <adolc/adtl.h>
40 template <
int dim,
int spacedim>
41 inline std::vector<unsigned int>
44 std::vector<unsigned int> shape_function_to_row_table(
54 unsigned int nth_nonzero_component = 0;
59 row + nth_nonzero_component;
60 ++nth_nonzero_component;
65 return shape_function_to_row_table;
74 template <
int dim,
int spacedim>
87 const std::vector<unsigned int> shape_function_to_row_table =
94 if (is_primitive ==
true)
111 template <
int dim,
int spacedim>
119 template <
int dim,
int spacedim>
132 const std::vector<unsigned int> shape_function_to_row_table =
135 for (
unsigned int d = 0; d < spacedim; ++d)
143 if (is_primitive ==
true)
153 shape_function_to_row_table[i * fe.
n_components() + component];
162 unsigned int n_nonzero_components = 0;
163 for (
unsigned int d = 0; d < spacedim; ++d)
166 ++n_nonzero_components;
168 if (n_nonzero_components == 0)
170 else if (n_nonzero_components > 1)
174 for (
unsigned int d = 0; d < spacedim; ++d)
176 .is_nonzero_shape_function_component[d] ==
true)
189 template <
int dim,
int spacedim>
197 template <
int dim,
int spacedim>
216 const std::vector<unsigned int> shape_function_to_row_table =
219 for (
unsigned int d = 0;
220 d < ::SymmetricTensor<2, dim>::n_independent_components;
229 if (is_primitive ==
true)
239 shape_function_to_row_table[i * fe.
n_components() + component];
248 unsigned int n_nonzero_components = 0;
249 for (
unsigned int d = 0;
250 d < ::SymmetricTensor<2, dim>::n_independent_components;
254 ++n_nonzero_components;
256 if (n_nonzero_components == 0)
258 else if (n_nonzero_components > 1)
262 for (
unsigned int d = 0;
263 d < ::SymmetricTensor<2, dim>::n_independent_components;
266 .is_nonzero_shape_function_component[d] ==
true)
279 template <
int dim,
int spacedim>
287 template <
int dim,
int spacedim>
299 const std::vector<unsigned int> shape_function_to_row_table =
302 for (
unsigned int d = 0; d < dim * dim; ++d)
310 if (is_primitive ==
true)
320 shape_function_to_row_table[i * fe.
n_components() + component];
329 unsigned int n_nonzero_components = 0;
330 for (
unsigned int d = 0; d < dim * dim; ++d)
333 ++n_nonzero_components;
335 if (n_nonzero_components == 0)
337 else if (n_nonzero_components > 1)
341 for (
unsigned int d = 0; d < dim * dim; ++d)
343 .is_nonzero_shape_function_component[d] ==
true)
356 template <
int dim,
int spacedim>
364 template <
int dim,
int spacedim>
365 template <
typename Number>
381 fe_values->present_cell.get_interpolated_dof_values(fe_function,
385 fe_values->finite_element_output.shape_values,
392 template <
int dim,
int spacedim>
393 template <
class InputVector>
396 const InputVector &dof_values,
410 fe_values->finite_element_output.shape_values,
417 template <
int dim,
int spacedim>
418 template <
typename Number>
426 "update_gradients")));
430 fe_values->present_cell.n_dofs_for_dof_handler());
435 fe_values->present_cell.get_interpolated_dof_values(fe_function,
439 fe_values->finite_element_output.shape_gradients,
446 template <
int dim,
int spacedim>
447 template <
typename InputVector>
450 const InputVector &dof_values,
456 "update_gradients")));
464 fe_values->finite_element_output.shape_gradients,
471 template <
int dim,
int spacedim>
472 template <
typename Number>
480 "update_hessians")));
484 fe_values->present_cell.n_dofs_for_dof_handler());
489 fe_values->present_cell.get_interpolated_dof_values(fe_function,
493 fe_values->finite_element_output.shape_hessians,
500 template <
int dim,
int spacedim>
501 template <
class InputVector>
504 const InputVector &dof_values,
510 "update_hessians")));
518 fe_values->finite_element_output.shape_hessians,
525 template <
int dim,
int spacedim>
526 template <
typename Number>
534 "update_hessians")));
538 fe_values->present_cell.n_dofs_for_dof_handler());
543 fe_values->present_cell.get_interpolated_dof_values(fe_function,
547 fe_values->finite_element_output.shape_hessians,
554 template <
int dim,
int spacedim>
555 template <
class InputVector>
558 const InputVector &dof_values,
564 "update_hessians")));
572 fe_values->finite_element_output.shape_hessians,
579 template <
int dim,
int spacedim>
580 template <
typename Number>
589 "update_3rd_derivatives")));
593 fe_values->present_cell.n_dofs_for_dof_handler());
598 fe_values->present_cell.get_interpolated_dof_values(fe_function,
602 fe_values->finite_element_output.shape_3rd_derivatives,
609 template <
int dim,
int spacedim>
610 template <
class InputVector>
613 const InputVector &dof_values,
616 &third_derivatives)
const
620 "update_3rd_derivatives")));
628 fe_values->finite_element_output.shape_3rd_derivatives,
635 template <
int dim,
int spacedim>
636 template <
typename Number>
651 fe_values->present_cell.get_interpolated_dof_values(fe_function,
655 fe_values->finite_element_output.shape_values,
662 template <
int dim,
int spacedim>
663 template <
class InputVector>
666 const InputVector &dof_values,
680 fe_values->finite_element_output.shape_values,
687 template <
int dim,
int spacedim>
688 template <
typename Number>
696 "update_gradients")));
700 fe_values->present_cell.n_dofs_for_dof_handler());
705 fe_values->present_cell.get_interpolated_dof_values(fe_function,
709 fe_values->finite_element_output.shape_gradients,
716 template <
int dim,
int spacedim>
717 template <
typename InputVector>
720 const InputVector &dof_values,
726 "update_gradients")));
734 fe_values->finite_element_output.shape_gradients,
741 template <
int dim,
int spacedim>
742 template <
typename Number>
751 "update_gradients")));
755 fe_values->present_cell.n_dofs_for_dof_handler());
760 fe_values->present_cell.get_interpolated_dof_values(fe_function,
764 fe_values->finite_element_output.shape_gradients,
766 symmetric_gradients);
771 template <
int dim,
int spacedim>
772 template <
class InputVector>
775 const InputVector &dof_values,
778 &symmetric_gradients)
const
782 "update_gradients")));
790 fe_values->finite_element_output.shape_gradients,
792 symmetric_gradients);
797 template <
int dim,
int spacedim>
798 template <
typename Number>
806 "update_gradients")));
810 fe_values->present_cell.n_dofs_for_dof_handler());
816 fe_values->present_cell.get_interpolated_dof_values(fe_function,
820 fe_values->finite_element_output.shape_gradients,
827 template <
int dim,
int spacedim>
828 template <
class InputVector>
831 const InputVector &dof_values,
837 "update_gradients")));
845 fe_values->finite_element_output.shape_gradients,
852 template <
int dim,
int spacedim>
853 template <
typename Number>
861 "update_gradients")));
863 ExcMessage(
"FEValues object is not reinited to any cell"));
865 fe_values->present_cell.n_dofs_for_dof_handler());
870 fe_values->present_cell.get_interpolated_dof_values(fe_function,
874 fe_values->finite_element_output.shape_gradients,
881 template <
int dim,
int spacedim>
882 template <
class InputVector>
885 const InputVector &dof_values,
891 "update_gradients")));
893 ExcMessage(
"FEValues object is not reinited to any cell"));
899 fe_values->finite_element_output.shape_gradients,
906 template <
int dim,
int spacedim>
907 template <
typename Number>
915 "update_hessians")));
919 fe_values->present_cell.n_dofs_for_dof_handler());
924 fe_values->present_cell.get_interpolated_dof_values(fe_function,
928 fe_values->finite_element_output.shape_hessians,
935 template <
int dim,
int spacedim>
936 template <
class InputVector>
939 const InputVector &dof_values,
945 "update_hessians")));
953 fe_values->finite_element_output.shape_hessians,
960 template <
int dim,
int spacedim>
961 template <
typename Number>
969 "update_hessians")));
976 fe_function.
size() ==
fe_values->present_cell.n_dofs_for_dof_handler(),
978 fe_values->present_cell.n_dofs_for_dof_handler()));
983 fe_values->present_cell.get_interpolated_dof_values(fe_function,
987 fe_values->finite_element_output.shape_hessians,
994 template <
int dim,
int spacedim>
995 template <
class InputVector>
998 const InputVector &dof_values,
1004 "update_hessians")));
1015 fe_values->finite_element_output.shape_hessians,
1022 template <
int dim,
int spacedim>
1023 template <
typename Number>
1032 "update_3rd_derivatives")));
1036 fe_values->present_cell.n_dofs_for_dof_handler());
1041 fe_values->present_cell.get_interpolated_dof_values(fe_function,
1045 fe_values->finite_element_output.shape_3rd_derivatives,
1052 template <
int dim,
int spacedim>
1053 template <
class InputVector>
1056 const InputVector &dof_values,
1059 &third_derivatives)
const
1063 "update_3rd_derivatives")));
1071 fe_values->finite_element_output.shape_3rd_derivatives,
1078 template <
int dim,
int spacedim>
1079 template <
typename Number>
1094 fe_values->present_cell.get_interpolated_dof_values(fe_function,
1098 fe_values->finite_element_output.shape_values,
1105 template <
int dim,
int spacedim>
1106 template <
class InputVector>
1109 const InputVector &dof_values,
1123 fe_values->finite_element_output.shape_values,
1130 template <
int dim,
int spacedim>
1131 template <
typename Number>
1139 "update_gradients")));
1143 fe_values->present_cell.n_dofs_for_dof_handler());
1149 fe_values->present_cell.get_interpolated_dof_values(fe_function,
1153 fe_values->finite_element_output.shape_gradients,
1160 template <
int dim,
int spacedim>
1161 template <
class InputVector>
1165 const InputVector &dof_values,
1171 "update_gradients")));
1179 fe_values->finite_element_output.shape_gradients,
1186 template <
int dim,
int spacedim>
1187 template <
typename Number>
1202 fe_values->present_cell.get_interpolated_dof_values(fe_function,
1206 fe_values->finite_element_output.shape_values,
1213 template <
int dim,
int spacedim>
1214 template <
class InputVector>
1217 const InputVector &dof_values,
1231 fe_values->finite_element_output.shape_values,
1238 template <
int dim,
int spacedim>
1239 template <
typename Number>
1247 "update_gradients")));
1251 fe_values->present_cell.n_dofs_for_dof_handler());
1257 fe_values->present_cell.get_interpolated_dof_values(fe_function,
1261 fe_values->finite_element_output.shape_gradients,
1268 template <
int dim,
int spacedim>
1269 template <
class InputVector>
1272 const InputVector &dof_values,
1278 "update_gradients")));
1286 fe_values->finite_element_output.shape_gradients,
1293 template <
int dim,
int spacedim>
1294 template <
typename Number>
1302 "update_gradients")));
1306 fe_values->present_cell.n_dofs_for_dof_handler());
1312 fe_values->present_cell.get_interpolated_dof_values(fe_function,
1316 fe_values->finite_element_output.shape_gradients,
1323 template <
int dim,
int spacedim>
1324 template <
class InputVector>
1327 const InputVector &dof_values,
1333 "update_gradients")));
1341 fe_values->finite_element_output.shape_gradients,
1352 template <
int dim,
int spacedim>
1363 const unsigned int n_vectors =
1371 const unsigned int n_symmetric_second_order_tensors =
1380 const unsigned int n_second_order_tensors =
1392#include "fe/fe_values_views.inst"
auto make_const_array_view(const Container &container) -> decltype(make_array_view(container))
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, value_type >::type solution_laplacian_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, gradient_type >::type solution_gradient_type
ObserverPointer< const FEValuesBase< dim, spacedim > > fe_values
typename ProductType< Number, value_type >::type solution_value_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
typename ProductType< Number, hessian_type >::type solution_hessian_type
void get_function_third_derivatives(const ReadVector< Number > &fe_function, std::vector< solution_third_derivative_type< Number > > &third_derivatives) const
typename ProductType< Number, third_derivative_type >::type solution_third_derivative_type
void get_function_hessians(const ReadVector< Number > &fe_function, std::vector< solution_hessian_type< Number > > &hessians) const
ObserverPointer< const FEValuesBase< dim, spacedim > > fe_values
unsigned int first_tensor_component
std::vector< ShapeFunctionData > shape_function_data
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
unsigned int first_tensor_component
typename ProductType< Number, divergence_type >::type solution_divergence_type
typename ProductType< Number, gradient_type >::type solution_gradient_type
ObserverPointer< const FEValuesBase< dim, spacedim > > fe_values
std::vector< ShapeFunctionData > shape_function_data
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
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, value_type >::type solution_laplacian_type
void get_function_symmetric_gradients(const ReadVector< Number > &fe_function, std::vector< solution_symmetric_gradient_type< Number > > &symmetric_gradients) const
typename ProductType< Number, third_derivative_type >::type solution_third_derivative_type
typename ProductType< Number, hessian_type >::type solution_hessian_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, divergence_type >::type solution_divergence_type
ObserverPointer< const FEValuesBase< dim, spacedim > > fe_values
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, gradient_type >::type solution_gradient_type
typename ProductType< Number, curl_type >::type solution_curl_type
typename ProductType< Number, symmetric_gradient_type >::type solution_symmetric_gradient_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
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
unsigned int n_nonzero_components(const unsigned int i) const
virtual size_type size() const =0
DEAL_II_HOST constexpr SymmetricTensor()=default
static constexpr unsigned int n_independent_components
static constexpr unsigned int n_independent_components
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcAccessToUninitializedField(std::string arg1)
#define Assert(cond, exc)
static ::ExceptionBase & ExcNotReinited()
#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)
@ 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.
void do_function_divergences(const ArrayView< const Number > &dof_values, const Table< 2, ::Tensor< 1, spacedim > > &shape_gradients, const std::vector< typename Vector< dim, spacedim >::ShapeFunctionData > &shape_function_data, std::vector< typename Vector< dim, spacedim >::template solution_divergence_type< Number > > &divergences)
void do_function_symmetric_gradients(const ArrayView< const Number > &dof_values, const Table< 2, ::Tensor< 1, spacedim > > &shape_gradients, const std::vector< typename Vector< dim, spacedim >::ShapeFunctionData > &shape_function_data, std::vector< typename ProductType< Number, ::SymmetricTensor< 2, spacedim > >::type > &symmetric_gradients)
void do_function_derivatives(const ArrayView< const Number > &dof_values, const Table< 2, ::Tensor< order, spacedim > > &shape_derivatives, const std::vector< typename Scalar< dim, spacedim >::ShapeFunctionData > &shape_function_data, std::vector< typename ProductType< Number, ::Tensor< order, spacedim > >::type > &derivatives)
void do_function_curls(const ArrayView< const Number > &dof_values, const Table< 2, ::Tensor< 1, spacedim > > &shape_gradients, const std::vector< typename Vector< dim, spacedim >::ShapeFunctionData > &shape_function_data, std::vector< typename ProductType< Number, typename ::internal::CurlType< spacedim >::type >::type > &curls)
void do_function_gradients(const ArrayView< const Number > &dof_values, const Table< 2, ::Tensor< 1, spacedim > > &shape_gradients, const std::vector< typename Tensor< 2, dim, spacedim >::ShapeFunctionData > &shape_function_data, std::vector< typename Tensor< 2, dim, spacedim >::template solution_gradient_type< Number > > &gradients)
void do_function_values(const ArrayView< const Number > &dof_values, const Table< 2, double > &shape_values, const std::vector< typename Scalar< dim, spacedim >::ShapeFunctionData > &shape_function_data, std::vector< typename ProductType< Number, double >::type > &values)
void do_function_laplacians(const ArrayView< const Number > &dof_values, const Table< 2, ::Tensor< 2, spacedim > > &shape_hessians, const std::vector< typename Scalar< dim, spacedim >::ShapeFunctionData > &shape_function_data, std::vector< typename Scalar< dim, spacedim >::template solution_laplacian_type< Number > > &laplacians)
std::vector< unsigned int > make_shape_function_to_row_table(const FiniteElement< dim, spacedim > &fe)
constexpr unsigned int invalid_unsigned_int
std::vector< Lazy<::FEValuesViews::Vector< dim, spacedim > > > vectors
Cache(const FEValuesBase< dim, spacedim > &fe_values)
std::vector< Lazy<::FEValuesViews::SymmetricTensor< 2, dim, spacedim > > > symmetric_second_order_tensors
std::vector< Lazy<::FEValuesViews::Tensor< 2, dim, spacedim > > > second_order_tensors
std::vector< Lazy<::FEValuesViews::Scalar< dim, spacedim > > > scalars