16 #ifndef dealii_fe_values_h 17 #define dealii_fe_values_h 45 #include <type_traits> 51 #ifdef DEAL_II_WITH_PETSC 59 template <
int dim,
int spacedim = dim>
69 template <
int dim,
class NumberType =
double>
78 template <
class NumberType>
90 template <
class NumberType>
102 template <
class NumberType>
145 template <
int dim,
int spacedim = dim>
181 template <
typename Number>
263 const unsigned int component);
286 value(
const unsigned int shape_function,
const unsigned int q_point)
const;
299 gradient(
const unsigned int shape_function,
300 const unsigned int q_point)
const;
313 hessian(
const unsigned int shape_function,
314 const unsigned int q_point)
const;
327 third_derivative(
const unsigned int shape_function,
328 const unsigned int q_point)
const;
347 template <
class InputVector>
350 const InputVector &fe_function,
352 typename InputVector::value_type>::type>
389 template <
class InputVector>
391 get_function_values_from_local_dof_values(
392 const InputVector &dof_values,
414 template <
class InputVector>
416 get_function_gradients(
417 const InputVector &fe_function,
419 typename InputVector::value_type>::type>
428 template <
class InputVector>
430 get_function_gradients_from_local_dof_values(
431 const InputVector &dof_values,
453 template <
class InputVector>
455 get_function_hessians(
456 const InputVector &fe_function,
458 typename InputVector::value_type>::type>
467 template <
class InputVector>
469 get_function_hessians_from_local_dof_values(
470 const InputVector &dof_values,
494 template <
class InputVector>
496 get_function_laplacians(
497 const InputVector &fe_function,
499 typename InputVector::value_type>::type>
508 template <
class InputVector>
510 get_function_laplacians_from_local_dof_values(
511 const InputVector &dof_values,
535 template <
class InputVector>
537 get_function_third_derivatives(
538 const InputVector &fe_function,
540 typename InputVector::value_type>::type>
541 &third_derivatives)
const;
549 template <
class InputVector>
551 get_function_third_derivatives_from_local_dof_values(
552 const InputVector & dof_values,
606 template <
int dim,
int spacedim = dim>
652 using curl_type = typename ::internal::CurlType<spacedim>::type;
672 template <
typename Number>
754 bool is_nonzero_shape_function_component[spacedim];
765 unsigned int row_index[spacedim];
793 const unsigned int first_vector_component);
819 value(
const unsigned int shape_function,
const unsigned int q_point)
const;
835 gradient(
const unsigned int shape_function,
836 const unsigned int q_point)
const;
854 symmetric_gradient(
const unsigned int shape_function,
855 const unsigned int q_point)
const;
868 divergence(
const unsigned int shape_function,
869 const unsigned int q_point)
const;
892 curl(
const unsigned int shape_function,
const unsigned int q_point)
const;
905 hessian(
const unsigned int shape_function,
906 const unsigned int q_point)
const;
919 third_derivative(
const unsigned int shape_function,
920 const unsigned int q_point)
const;
939 template <
class InputVector>
942 const InputVector &fe_function,
944 typename InputVector::value_type>::type>
981 template <
class InputVector>
983 get_function_values_from_local_dof_values(
984 const InputVector &dof_values,
1006 template <
class InputVector>
1008 get_function_gradients(
1009 const InputVector &fe_function,
1011 typename InputVector::value_type>::type>
1020 template <
class InputVector>
1022 get_function_gradients_from_local_dof_values(
1023 const InputVector &dof_values,
1051 template <
class InputVector>
1053 get_function_symmetric_gradients(
1054 const InputVector &fe_function,
1056 typename InputVector::value_type>::type>
1057 &symmetric_gradients)
const;
1065 template <
class InputVector>
1067 get_function_symmetric_gradients_from_local_dof_values(
1068 const InputVector & dof_values,
1090 template <
class InputVector>
1092 get_function_divergences(
1093 const InputVector &fe_function,
1095 typename InputVector::value_type>::type>
1096 &divergences)
const;
1104 template <
class InputVector>
1106 get_function_divergences_from_local_dof_values(
1107 const InputVector &dof_values,
1110 &divergences)
const;
1130 template <
class InputVector>
1133 const InputVector &fe_function,
1144 template <
class InputVector>
1146 get_function_curls_from_local_dof_values(
1147 const InputVector &dof_values,
1169 template <
class InputVector>
1171 get_function_hessians(
1172 const InputVector &fe_function,
1174 typename InputVector::value_type>::type>
1183 template <
class InputVector>
1185 get_function_hessians_from_local_dof_values(
1186 const InputVector &dof_values,
1209 template <
class InputVector>
1211 get_function_laplacians(
1212 const InputVector &fe_function,
1214 typename InputVector::value_type>::type>
1223 template <
class InputVector>
1225 get_function_laplacians_from_local_dof_values(
1226 const InputVector &dof_values,
1249 template <
class InputVector>
1251 get_function_third_derivatives(
1252 const InputVector &fe_function,
1254 typename InputVector::value_type>::type>
1255 &third_derivatives)
const;
1263 template <
class InputVector>
1265 get_function_third_derivatives_from_local_dof_values(
1266 const InputVector & dof_values,
1289 template <
int rank,
int dim,
int spacedim = dim>
1314 template <
int dim,
int spacedim>
1341 template <
typename Number>
1365 struct ShapeFunctionData
1375 bool is_nonzero_shape_function_component
1376 [value_type::n_independent_components];
1387 unsigned int row_index[value_type::n_independent_components];
1420 const unsigned int first_tensor_component);
1447 value(
const unsigned int shape_function,
const unsigned int q_point)
const;
1463 divergence(
const unsigned int shape_function,
1464 const unsigned int q_point)
const;
1483 template <
class InputVector>
1485 get_function_values(
1486 const InputVector &fe_function,
1488 typename InputVector::value_type>::type>
1525 template <
class InputVector>
1527 get_function_values_from_local_dof_values(
1528 const InputVector &dof_values,
1554 template <
class InputVector>
1556 get_function_divergences(
1557 const InputVector &fe_function,
1559 typename InputVector::value_type>::type>
1560 &divergences)
const;
1568 template <
class InputVector>
1570 get_function_divergences_from_local_dof_values(
1571 const InputVector &dof_values,
1574 &divergences)
const;
1595 template <
int rank,
int dim,
int spacedim = dim>
1616 template <
int dim,
int spacedim>
1641 template <
typename Number>
1673 struct ShapeFunctionData
1683 bool is_nonzero_shape_function_component
1684 [value_type::n_independent_components];
1695 unsigned int row_index[value_type::n_independent_components];
1728 const unsigned int first_tensor_component);
1755 value(
const unsigned int shape_function,
const unsigned int q_point)
const;
1771 divergence(
const unsigned int shape_function,
1772 const unsigned int q_point)
const;
1788 gradient(
const unsigned int shape_function,
1789 const unsigned int q_point)
const;
1808 template <
class InputVector>
1810 get_function_values(
1811 const InputVector &fe_function,
1813 typename InputVector::value_type>::type>
1850 template <
class InputVector>
1852 get_function_values_from_local_dof_values(
1853 const InputVector &dof_values,
1879 template <
class InputVector>
1881 get_function_divergences(
1882 const InputVector &fe_function,
1884 typename InputVector::value_type>::type>
1885 &divergences)
const;
1893 template <
class InputVector>
1895 get_function_divergences_from_local_dof_values(
1896 const InputVector &dof_values,
1899 &divergences)
const;
1917 template <
class InputVector>
1919 get_function_gradients(
1920 const InputVector &fe_function,
1922 typename InputVector::value_type>::type>
1931 template <
class InputVector>
1933 get_function_gradients_from_local_dof_values(
1934 const InputVector &dof_values,
1968 template <
int dim,
int spacedim,
typename Extractor>
1979 template <
int dim,
int spacedim>
1982 using type = typename ::FEValuesViews::Scalar<dim, spacedim>;
1992 template <
int dim,
int spacedim>
1995 using type = typename ::FEValuesViews::Vector<dim, spacedim>;
2005 template <
int dim,
int spacedim,
int rank>
2008 using type = typename ::FEValuesViews::Tensor<rank, dim, spacedim>;
2018 template <
int dim,
int spacedim,
int rank>
2022 typename ::FEValuesViews::SymmetricTensor<rank, dim, spacedim>;
2032 template <
int dim,
int spacedim>
2039 std::vector<::FEValuesViews::Scalar<dim, spacedim>>
scalars;
2040 std::vector<::FEValuesViews::Vector<dim, spacedim>>
vectors;
2041 std::vector<::FEValuesViews::SymmetricTensor<2, dim, spacedim>>
2043 std::vector<::FEValuesViews::Tensor<2, dim, spacedim>>
2060 template <
int dim,
int spacedim,
typename Extractor>
2061 using View = typename ::internal::FEValuesViews::
2062 ViewType<dim, spacedim, Extractor>::type;
2165 template <
int dim,
int spacedim>
2172 static const unsigned int dimension = dim;
2177 static const unsigned int space_dimension = spacedim;
2215 const unsigned int dofs_per_cell,
2265 shape_value(
const unsigned int function_no,
2266 const unsigned int point_no)
const;
2289 shape_value_component(
const unsigned int function_no,
2290 const unsigned int point_no,
2291 const unsigned int component)
const;
2319 shape_grad(
const unsigned int function_no,
2320 const unsigned int quadrature_point)
const;
2339 shape_grad_component(
const unsigned int function_no,
2340 const unsigned int point_no,
2341 const unsigned int component)
const;
2363 shape_hessian(
const unsigned int function_no,
2364 const unsigned int point_no)
const;
2383 shape_hessian_component(
const unsigned int function_no,
2384 const unsigned int point_no,
2385 const unsigned int component)
const;
2407 shape_3rd_derivative(
const unsigned int function_no,
2408 const unsigned int point_no)
const;
2427 shape_3rd_derivative_component(
const unsigned int function_no,
2428 const unsigned int point_no,
2429 const unsigned int component)
const;
2471 template <
class InputVector>
2473 get_function_values(
2474 const InputVector & fe_function,
2475 std::vector<typename InputVector::value_type> &
values)
const;
2490 template <
class InputVector>
2492 get_function_values(
2493 const InputVector & fe_function,
2494 std::vector<Vector<typename InputVector::value_type>> &
values)
const;
2552 template <
class InputVector>
2554 get_function_values(
2555 const InputVector & fe_function,
2557 std::vector<typename InputVector::value_type> &
values)
const;
2567 template <
class InputVector>
2569 get_function_values(
2570 const InputVector & fe_function,
2572 std::vector<Vector<typename InputVector::value_type>> &
values)
const;
2596 template <
class InputVector>
2598 get_function_values(
2599 const InputVector & fe_function,
2602 const bool quadrature_points_fastest)
const;
2644 template <
class InputVector>
2646 get_function_gradients(
2647 const InputVector &fe_function,
2667 template <
class InputVector>
2669 get_function_gradients(
2670 const InputVector &fe_function,
2683 template <
class InputVector>
2685 get_function_gradients(
2686 const InputVector & fe_function,
2699 template <
class InputVector>
2701 get_function_gradients(
2702 const InputVector & fe_function,
2707 const bool quadrature_points_fastest =
false)
const;
2752 template <
class InputVector>
2754 get_function_hessians(
2755 const InputVector &fe_function,
2776 template <
class InputVector>
2778 get_function_hessians(
2779 const InputVector &fe_function,
2783 const bool quadrature_points_fastest =
false)
const;
2793 template <
class InputVector>
2795 get_function_hessians(
2796 const InputVector & fe_function,
2809 template <
class InputVector>
2811 get_function_hessians(
2812 const InputVector & fe_function,
2817 const bool quadrature_points_fastest =
false)
const;
2859 template <
class InputVector>
2861 get_function_laplacians(
2862 const InputVector & fe_function,
2863 std::vector<typename InputVector::value_type> &laplacians)
const;
2884 template <
class InputVector>
2886 get_function_laplacians(
2887 const InputVector & fe_function,
2888 std::vector<Vector<typename InputVector::value_type>> &laplacians)
const;
2898 template <
class InputVector>
2900 get_function_laplacians(
2901 const InputVector & fe_function,
2903 std::vector<typename InputVector::value_type> & laplacians)
const;
2913 template <
class InputVector>
2915 get_function_laplacians(
2916 const InputVector & fe_function,
2918 std::vector<Vector<typename InputVector::value_type>> &laplacians)
const;
2928 template <
class InputVector>
2930 get_function_laplacians(
2931 const InputVector & fe_function,
2933 std::vector<std::vector<typename InputVector::value_type>> &laplacians,
2934 const bool quadrature_points_fastest =
false)
const;
2978 template <
class InputVector>
2980 get_function_third_derivatives(
2981 const InputVector &fe_function,
2983 &third_derivatives)
const;
3003 template <
class InputVector>
3005 get_function_third_derivatives(
3006 const InputVector &fe_function,
3009 & third_derivatives,
3010 const bool quadrature_points_fastest =
false)
const;
3020 template <
class InputVector>
3022 get_function_third_derivatives(
3023 const InputVector & fe_function,
3026 &third_derivatives)
const;
3036 template <
class InputVector>
3038 get_function_third_derivatives(
3039 const InputVector & fe_function,
3044 const bool quadrature_points_fastest =
false)
const;
3074 dof_indices()
const;
3109 dof_indices_starting_at(
const unsigned int start_dof_index)
const;
3142 dof_indices_ending_at(
const unsigned int end_dof_index)
const;
3170 quadrature_point_indices()
const;
3178 quadrature_point(
const unsigned int q)
const;
3185 const std::vector<Point<spacedim>> &
3204 JxW(
const unsigned int quadrature_point)
const;
3209 const std::vector<double> &
3210 get_JxW_values()
const;
3219 jacobian(
const unsigned int quadrature_point)
const;
3227 const std::vector<DerivativeForm<1, dim, spacedim>> &
3228 get_jacobians()
const;
3238 jacobian_grad(
const unsigned int quadrature_point)
const;
3246 const std::vector<DerivativeForm<2, dim, spacedim>> &
3247 get_jacobian_grads()
const;
3258 jacobian_pushed_forward_grad(
const unsigned int quadrature_point)
const;
3266 const std::vector<Tensor<3, spacedim>> &
3267 get_jacobian_pushed_forward_grads()
const;
3277 jacobian_2nd_derivative(
const unsigned int quadrature_point)
const;
3285 const std::vector<DerivativeForm<3, dim, spacedim>> &
3286 get_jacobian_2nd_derivatives()
const;
3298 jacobian_pushed_forward_2nd_derivative(
3299 const unsigned int quadrature_point)
const;
3307 const std::vector<Tensor<4, spacedim>> &
3308 get_jacobian_pushed_forward_2nd_derivatives()
const;
3319 jacobian_3rd_derivative(
const unsigned int quadrature_point)
const;
3327 const std::vector<DerivativeForm<4, dim, spacedim>> &
3328 get_jacobian_3rd_derivatives()
const;
3340 jacobian_pushed_forward_3rd_derivative(
3341 const unsigned int quadrature_point)
const;
3349 const std::vector<Tensor<5, spacedim>> &
3350 get_jacobian_pushed_forward_3rd_derivatives()
const;
3359 inverse_jacobian(
const unsigned int quadrature_point)
const;
3367 const std::vector<DerivativeForm<1, spacedim, dim>> &
3368 get_inverse_jacobians()
const;
3390 normal_vector(
const unsigned int i)
const;
3399 const std::vector<Tensor<1, spacedim>> &
3400 get_normal_vectors()
const;
3462 get_mapping()
const;
3474 get_update_flags()
const;
3488 get_cell_similarity()
const;
3508 <<
"You are requesting information from an FEValues/FEFaceValues/FESubfaceValues " 3509 <<
"object for which this kind of information has not been computed. What " 3510 <<
"information these objects compute is determined by the update_* flags you " 3511 <<
"pass to the constructor. Here, the operation you are attempting requires " 3513 <<
"> flag to be set, but it was apparently not specified " 3514 <<
"upon construction.");
3524 "The FiniteElement you provided to FEValues and the FiniteElement that belongs " 3525 "to the DoFHandler that provided the cell iterator do not match.");
3533 <<
"The shape function with index " << arg1
3534 <<
" is not primitive, i.e. it is vector-valued and " 3535 <<
"has more than one non-zero vector component. This " 3536 <<
"function cannot be called for these shape functions. " 3537 <<
"Maybe you want to use the same function with the " 3538 <<
"_component suffix?");
3548 "The given FiniteElement is not a primitive element but the requested operation " 3549 "only works for those. See FiniteElement::is_primitive() for more information.");
3588 template <
typename CI>
3623 invalidate_present_cell();
3635 maybe_invalidate_previous_present_cell(
3649 std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
3673 std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>
3699 compute_update_flags(
const UpdateFlags update_flags)
const;
3714 check_cell_similarity(
3729 template <
int,
int,
int>
3731 template <
int,
int,
int>
3746 template <
int dim,
int spacedim = dim>
3754 static const unsigned int integral_dimension = dim;
3801 template <
bool level_dof_access>
3827 get_quadrature()
const;
3851 get_present_fe_values()
const;
3885 template <
int dim,
int spacedim = dim>
3893 static const unsigned int integral_dimension = dim - 1;
3932 boundary_form(
const unsigned int i)
const;
3940 const std::vector<Tensor<1, spacedim>> &
3941 get_boundary_forms()
const;
3948 get_face_index()
const;
3955 get_quadrature()
const;
3998 template <
int dim,
int spacedim = dim>
4006 static const unsigned int dimension = dim;
4008 static const unsigned int space_dimension = spacedim;
4014 static const unsigned int integral_dimension = dim - 1;
4059 template <
bool level_dof_access>
4063 const unsigned int face_no);
4071 template <
bool level_dof_access>
4092 const unsigned int face_no);
4128 get_present_fe_values()
const;
4144 do_reinit(
const unsigned int face_no);
4164 template <
int dim,
int spacedim = dim>
4171 static const unsigned int dimension = dim;
4176 static const unsigned int space_dimension = spacedim;
4182 static const unsigned int integral_dimension = dim - 1;
4229 template <
bool level_dof_access>
4233 const unsigned int face_no,
4234 const unsigned int subface_no);
4240 template <
bool level_dof_access>
4262 const unsigned int face_no,
4263 const unsigned int subface_no);
4304 get_present_fe_values()
const;
4334 do_reinit(
const unsigned int face_no,
const unsigned int subface_no);
4345 template <
int dim,
int spacedim>
4346 inline typename Scalar<dim, spacedim>::value_type
4348 const unsigned int q_point)
const 4354 "update_values"))));
4359 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
4360 return fe_values->finite_element_output.shape_values(
4361 shape_function_data[shape_function].row_index, q_point);
4368 template <
int dim,
int spacedim>
4369 inline typename Scalar<dim, spacedim>::gradient_type
4371 const unsigned int q_point)
const 4376 "update_gradients")));
4381 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
4382 return fe_values->finite_element_output
4383 .shape_gradients[shape_function_data[shape_function].row_index]
4386 return gradient_type();
4391 template <
int dim,
int spacedim>
4392 inline typename Scalar<dim, spacedim>::hessian_type
4394 const unsigned int q_point)
const 4399 "update_hessians")));
4404 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
4405 return fe_values->finite_element_output
4406 .shape_hessians[shape_function_data[shape_function].row_index][q_point];
4408 return hessian_type();
4413 template <
int dim,
int spacedim>
4414 inline typename Scalar<dim, spacedim>::third_derivative_type
4415 Scalar<dim, spacedim>::third_derivative(
const unsigned int shape_function,
4416 const unsigned int q_point)
const 4421 "update_3rd_derivatives")));
4426 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
4427 return fe_values->finite_element_output
4428 .shape_3rd_derivatives[shape_function_data[shape_function].row_index]
4431 return third_derivative_type();
4436 template <
int dim,
int spacedim>
4439 const unsigned int q_point)
const 4448 shape_function_data[shape_function].single_nonzero_component;
4450 return value_type();
4453 value_type return_value;
4454 return_value[shape_function_data[shape_function]
4455 .single_nonzero_component_index] =
4456 fe_values->finite_element_output.shape_values(snc, q_point);
4457 return return_value;
4461 value_type return_value;
4462 for (
unsigned int d = 0;
d < dim; ++
d)
4463 if (shape_function_data[shape_function]
4464 .is_nonzero_shape_function_component[
d])
4465 return_value[
d] = fe_values->finite_element_output.shape_values(
4466 shape_function_data[shape_function].row_index[d], q_point);
4468 return return_value;
4474 template <
int dim,
int spacedim>
4475 inline typename Vector<dim, spacedim>::gradient_type
4477 const unsigned int q_point)
const 4482 "update_gradients")));
4486 shape_function_data[shape_function].single_nonzero_component;
4488 return gradient_type();
4491 gradient_type return_value;
4492 return_value[shape_function_data[shape_function]
4493 .single_nonzero_component_index] =
4494 fe_values->finite_element_output.shape_gradients[snc][q_point];
4495 return return_value;
4499 gradient_type return_value;
4500 for (
unsigned int d = 0;
d < dim; ++
d)
4501 if (shape_function_data[shape_function]
4502 .is_nonzero_shape_function_component[
d])
4504 fe_values->finite_element_output.shape_gradients
4505 [shape_function_data[shape_function].row_index[
d]][q_point];
4507 return return_value;
4513 template <
int dim,
int spacedim>
4514 inline typename Vector<dim, spacedim>::divergence_type
4515 Vector<dim, spacedim>::divergence(
const unsigned int shape_function,
4516 const unsigned int q_point)
const 4522 "update_gradients")));
4526 shape_function_data[shape_function].single_nonzero_component;
4528 return divergence_type();
4530 return fe_values->finite_element_output
4531 .shape_gradients[snc][q_point][shape_function_data[shape_function]
4532 .single_nonzero_component_index];
4535 divergence_type return_value = 0;
4536 for (
unsigned int d = 0;
d < dim; ++
d)
4537 if (shape_function_data[shape_function]
4538 .is_nonzero_shape_function_component[
d])
4540 fe_values->finite_element_output.shape_gradients
4541 [shape_function_data[shape_function].row_index[
d]][q_point][
d];
4543 return return_value;
4549 template <
int dim,
int spacedim>
4550 inline typename Vector<dim, spacedim>::curl_type
4551 Vector<dim, spacedim>::curl(
const unsigned int shape_function,
4552 const unsigned int q_point)
const 4559 "update_gradients")));
4562 shape_function_data[shape_function].single_nonzero_component;
4574 "Computing the curl in 1d is not a useful operation"));
4582 curl_type return_value;
4585 if (shape_function_data[shape_function]
4586 .single_nonzero_component_index == 0)
4588 -1.0 * fe_values->finite_element_output
4589 .shape_gradients[snc][q_point][1];
4591 return_value[0] = fe_values->finite_element_output
4592 .shape_gradients[snc][q_point][0];
4594 return return_value;
4599 curl_type return_value;
4601 return_value[0] = 0.0;
4603 if (shape_function_data[shape_function]
4604 .is_nonzero_shape_function_component[0])
4606 fe_values->finite_element_output
4607 .shape_gradients[shape_function_data[shape_function]
4608 .row_index[0]][q_point][1];
4610 if (shape_function_data[shape_function]
4611 .is_nonzero_shape_function_component[1])
4613 fe_values->finite_element_output
4614 .shape_gradients[shape_function_data[shape_function]
4615 .row_index[1]][q_point][0];
4617 return return_value;
4625 curl_type return_value;
4627 switch (shape_function_data[shape_function]
4628 .single_nonzero_component_index)
4632 return_value[0] = 0;
4633 return_value[1] = fe_values->finite_element_output
4634 .shape_gradients[snc][q_point][2];
4636 -1.0 * fe_values->finite_element_output
4637 .shape_gradients[snc][q_point][1];
4638 return return_value;
4644 -1.0 * fe_values->finite_element_output
4645 .shape_gradients[snc][q_point][2];
4646 return_value[1] = 0;
4647 return_value[2] = fe_values->finite_element_output
4648 .shape_gradients[snc][q_point][0];
4649 return return_value;
4654 return_value[0] = fe_values->finite_element_output
4655 .shape_gradients[snc][q_point][1];
4657 -1.0 * fe_values->finite_element_output
4658 .shape_gradients[snc][q_point][0];
4659 return_value[2] = 0;
4660 return return_value;
4667 curl_type return_value;
4669 for (
unsigned int i = 0; i < dim; ++i)
4670 return_value[i] = 0.0;
4672 if (shape_function_data[shape_function]
4673 .is_nonzero_shape_function_component[0])
4676 fe_values->finite_element_output
4677 .shape_gradients[shape_function_data[shape_function]
4678 .row_index[0]][q_point][2];
4680 fe_values->finite_element_output
4681 .shape_gradients[shape_function_data[shape_function]
4682 .row_index[0]][q_point][1];
4685 if (shape_function_data[shape_function]
4686 .is_nonzero_shape_function_component[1])
4689 fe_values->finite_element_output
4690 .shape_gradients[shape_function_data[shape_function]
4691 .row_index[1]][q_point][2];
4693 fe_values->finite_element_output
4694 .shape_gradients[shape_function_data[shape_function]
4695 .row_index[1]][q_point][0];
4698 if (shape_function_data[shape_function]
4699 .is_nonzero_shape_function_component[2])
4702 fe_values->finite_element_output
4703 .shape_gradients[shape_function_data[shape_function]
4704 .row_index[2]][q_point][1];
4706 fe_values->finite_element_output
4707 .shape_gradients[shape_function_data[shape_function]
4708 .row_index[2]][q_point][0];
4711 return return_value;
4722 template <
int dim,
int spacedim>
4723 inline typename Vector<dim, spacedim>::hessian_type
4725 const unsigned int q_point)
const 4731 "update_hessians")));
4735 shape_function_data[shape_function].single_nonzero_component;
4737 return hessian_type();
4740 hessian_type return_value;
4741 return_value[shape_function_data[shape_function]
4742 .single_nonzero_component_index] =
4743 fe_values->finite_element_output.shape_hessians[snc][q_point];
4744 return return_value;
4748 hessian_type return_value;
4749 for (
unsigned int d = 0;
d < dim; ++
d)
4750 if (shape_function_data[shape_function]
4751 .is_nonzero_shape_function_component[
d])
4753 fe_values->finite_element_output.shape_hessians
4754 [shape_function_data[shape_function].row_index[
d]][q_point];
4756 return return_value;
4762 template <
int dim,
int spacedim>
4763 inline typename Vector<dim, spacedim>::third_derivative_type
4764 Vector<dim, spacedim>::third_derivative(
const unsigned int shape_function,
4765 const unsigned int q_point)
const 4771 "update_3rd_derivatives")));
4775 shape_function_data[shape_function].single_nonzero_component;
4777 return third_derivative_type();
4780 third_derivative_type return_value;
4781 return_value[shape_function_data[shape_function]
4782 .single_nonzero_component_index] =
4783 fe_values->finite_element_output.shape_3rd_derivatives[snc][q_point];
4784 return return_value;
4788 third_derivative_type return_value;
4789 for (
unsigned int d = 0;
d < dim; ++
d)
4790 if (shape_function_data[shape_function]
4791 .is_nonzero_shape_function_component[
d])
4793 fe_values->finite_element_output.shape_3rd_derivatives
4794 [shape_function_data[shape_function].row_index[
d]][q_point];
4796 return return_value;
4808 inline ::SymmetricTensor<2, 1>
4809 symmetrize_single_row(
const unsigned int n, const ::Tensor<1, 1> &t)
4819 inline ::SymmetricTensor<2, 2>
4820 symmetrize_single_row(
const unsigned int n, const ::Tensor<1, 2> &t)
4826 return {{t[0], 0, t[1] / 2}};
4830 return {{0, t[1], t[0] / 2}};
4842 inline ::SymmetricTensor<2, 3>
4843 symmetrize_single_row(
const unsigned int n, const ::Tensor<1, 3> &t)
4849 return {{t[0], 0, 0, t[1] / 2, t[2] / 2, 0}};
4853 return {{0, t[1], 0, t[0] / 2, 0, t[2] / 2}};
4857 return {{0, 0, t[2], 0, t[0] / 2, t[1] / 2}};
4870 template <
int dim,
int spacedim>
4871 inline typename Vector<dim, spacedim>::symmetric_gradient_type
4872 Vector<dim, spacedim>::symmetric_gradient(
const unsigned int shape_function,
4873 const unsigned int q_point)
const 4878 "update_gradients")));
4882 shape_function_data[shape_function].single_nonzero_component;
4884 return symmetric_gradient_type();
4886 return internal::symmetrize_single_row(
4887 shape_function_data[shape_function].single_nonzero_component_index,
4888 fe_values->finite_element_output.shape_gradients[snc][q_point]);
4891 gradient_type return_value;
4892 for (
unsigned int d = 0;
d < dim; ++
d)
4893 if (shape_function_data[shape_function]
4894 .is_nonzero_shape_function_component[
d])
4896 fe_values->finite_element_output.shape_gradients
4897 [shape_function_data[shape_function].row_index[
d]][q_point];
4905 template <
int dim,
int spacedim>
4908 const unsigned int q_point)
const 4918 shape_function_data[shape_function].single_nonzero_component;
4923 return value_type();
4927 value_type return_value;
4928 const unsigned int comp =
4929 shape_function_data[shape_function].single_nonzero_component_index;
4930 return_value[value_type::unrolled_to_component_indices(comp)] =
4931 fe_values->finite_element_output.shape_values(snc, q_point);
4932 return return_value;
4936 value_type return_value;
4937 for (
unsigned int d = 0;
d < value_type::n_independent_components; ++
d)
4938 if (shape_function_data[shape_function]
4939 .is_nonzero_shape_function_component[
d])
4940 return_value[value_type::unrolled_to_component_indices(d)] =
4941 fe_values->finite_element_output.shape_values(
4942 shape_function_data[shape_function].row_index[d], q_point);
4943 return return_value;
4949 template <
int dim,
int spacedim>
4952 const unsigned int shape_function,
4953 const unsigned int q_point)
const 4958 "update_gradients")));
4961 shape_function_data[shape_function].single_nonzero_component;
4966 return divergence_type();
4989 const unsigned int comp =
4990 shape_function_data[shape_function].single_nonzero_component_index;
4991 const unsigned int ii =
4992 value_type::unrolled_to_component_indices(comp)[0];
4993 const unsigned int jj =
4994 value_type::unrolled_to_component_indices(comp)[1];
5007 const ::Tensor<1, spacedim> &phi_grad =
5008 fe_values->finite_element_output.shape_gradients[snc][q_point];
5010 divergence_type return_value;
5011 return_value[ii] = phi_grad[jj];
5014 return_value[jj] = phi_grad[ii];
5016 return return_value;
5021 divergence_type return_value;
5022 return return_value;
5028 template <
int dim,
int spacedim>
5031 const unsigned int q_point)
const 5041 shape_function_data[shape_function].single_nonzero_component;
5046 return value_type();
5050 value_type return_value;
5051 const unsigned int comp =
5052 shape_function_data[shape_function].single_nonzero_component_index;
5055 return_value[indices] =
5056 fe_values->finite_element_output.shape_values(snc, q_point);
5057 return return_value;
5061 value_type return_value;
5062 for (
unsigned int d = 0;
d < dim * dim; ++
d)
5063 if (shape_function_data[shape_function]
5064 .is_nonzero_shape_function_component[
d])
5068 return_value[indices] =
5069 fe_values->finite_element_output.shape_values(
5070 shape_function_data[shape_function].row_index[d], q_point);
5072 return return_value;
5078 template <
int dim,
int spacedim>
5081 const unsigned int q_point)
const 5086 "update_gradients")));
5089 shape_function_data[shape_function].single_nonzero_component;
5094 return divergence_type();
5108 const unsigned int comp =
5109 shape_function_data[shape_function].single_nonzero_component_index;
5112 const unsigned int ii = indices[0];
5113 const unsigned int jj = indices[1];
5115 const ::Tensor<1, spacedim> &phi_grad =
5116 fe_values->finite_element_output.shape_gradients[snc][q_point];
5118 divergence_type return_value;
5120 return_value[ii] = phi_grad[jj];
5122 return return_value;
5127 divergence_type return_value;
5128 return return_value;
5134 template <
int dim,
int spacedim>
5137 const unsigned int q_point)
const 5142 "update_gradients")));
5145 shape_function_data[shape_function].single_nonzero_component;
5150 return gradient_type();
5164 const unsigned int comp =
5165 shape_function_data[shape_function].single_nonzero_component_index;
5168 const unsigned int ii = indices[0];
5169 const unsigned int jj = indices[1];
5171 const ::Tensor<1, spacedim> &phi_grad =
5172 fe_values->finite_element_output.shape_gradients[snc][q_point];
5174 gradient_type return_value;
5175 return_value[ii][jj] = phi_grad;
5177 return return_value;
5182 gradient_type return_value;
5183 return return_value;
5195 template <
int dim,
int spacedim>
5201 return fe_values_views_cache.scalars[scalar.
component];
5206 template <
int dim,
int spacedim>
5211 fe_values_views_cache.vectors.size());
5218 template <
int dim,
int spacedim>
5225 fe_values_views_cache.symmetric_second_order_tensors.size(),
5228 fe_values_views_cache.symmetric_second_order_tensors.size()));
5230 return fe_values_views_cache
5236 template <
int dim,
int spacedim>
5242 fe_values_views_cache.second_order_tensors.size());
5244 return fe_values_views_cache
5250 template <
int dim,
int spacedim>
5251 inline const double &
5253 const unsigned int j)
const 5258 Assert(fe->is_primitive(i), ExcShapeFunctionNotPrimitive(i));
5259 Assert(present_cell.get() !=
nullptr,
5260 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5263 if (fe->is_primitive())
5264 return this->finite_element_output.shape_values(i, j);
5275 const unsigned int row =
5276 this->finite_element_output
5277 .shape_function_to_row_table[i * fe->n_components() +
5278 fe->system_to_component_index(i).first];
5279 return this->finite_element_output.shape_values(row, j);
5285 template <
int dim,
int spacedim>
5288 const unsigned int i,
5289 const unsigned int j,
5290 const unsigned int component)
const 5293 Assert(this->update_flags & update_values,
5296 Assert(present_cell.get() !=
nullptr,
5297 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5302 if (fe->get_nonzero_components(i)[component] ==
false)
5308 const unsigned int row =
5309 this->finite_element_output
5310 .shape_function_to_row_table[i * fe->n_components() + component];
5311 return this->finite_element_output.shape_values(row, j);
5316 template <
int dim,
int spacedim>
5319 const unsigned int j)
const 5324 Assert(fe->is_primitive(i), ExcShapeFunctionNotPrimitive(i));
5325 Assert(present_cell.get() !=
nullptr,
5326 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5329 if (fe->is_primitive())
5330 return this->finite_element_output.shape_gradients[i][j];
5341 const unsigned int row =
5342 this->finite_element_output
5343 .shape_function_to_row_table[i * fe->n_components() +
5344 fe->system_to_component_index(i).first];
5345 return this->finite_element_output.shape_gradients[row][j];
5351 template <
int dim,
int spacedim>
5354 const unsigned int i,
5355 const unsigned int j,
5356 const unsigned int component)
const 5359 Assert(this->update_flags & update_gradients,
5362 Assert(present_cell.get() !=
nullptr,
5363 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5367 if (fe->get_nonzero_components(i)[component] ==
false)
5373 const unsigned int row =
5374 this->finite_element_output
5375 .shape_function_to_row_table[i * fe->n_components() + component];
5376 return this->finite_element_output.shape_gradients[row][j];
5381 template <
int dim,
int spacedim>
5384 const unsigned int j)
const 5389 Assert(fe->is_primitive(i), ExcShapeFunctionNotPrimitive(i));
5390 Assert(present_cell.get() !=
nullptr,
5391 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5394 if (fe->is_primitive())
5395 return this->finite_element_output.shape_hessians[i][j];
5406 const unsigned int row =
5407 this->finite_element_output
5408 .shape_function_to_row_table[i * fe->n_components() +
5409 fe->system_to_component_index(i).first];
5410 return this->finite_element_output.shape_hessians[row][j];
5416 template <
int dim,
int spacedim>
5419 const unsigned int i,
5420 const unsigned int j,
5421 const unsigned int component)
const 5424 Assert(this->update_flags & update_hessians,
5427 Assert(present_cell.get() !=
nullptr,
5428 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5432 if (fe->get_nonzero_components(i)[component] ==
false)
5438 const unsigned int row =
5439 this->finite_element_output
5440 .shape_function_to_row_table[i * fe->n_components() + component];
5441 return this->finite_element_output.shape_hessians[row][j];
5446 template <
int dim,
int spacedim>
5449 const unsigned int j)
const 5454 Assert(fe->is_primitive(i), ExcShapeFunctionNotPrimitive(i));
5455 Assert(present_cell.get() !=
nullptr,
5456 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5459 if (fe->is_primitive())
5460 return this->finite_element_output.shape_3rd_derivatives[i][j];
5471 const unsigned int row =
5472 this->finite_element_output
5473 .shape_function_to_row_table[i * fe->n_components() +
5474 fe->system_to_component_index(i).first];
5475 return this->finite_element_output.shape_3rd_derivatives[row][j];
5481 template <
int dim,
int spacedim>
5484 const unsigned int i,
5485 const unsigned int j,
5486 const unsigned int component)
const 5489 Assert(this->update_flags & update_3rd_derivatives,
5492 Assert(present_cell.get() !=
nullptr,
5493 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5497 if (fe->get_nonzero_components(i)[component] ==
false)
5503 const unsigned int row =
5504 this->finite_element_output
5505 .shape_function_to_row_table[i * fe->n_components() + component];
5506 return this->finite_element_output.shape_3rd_derivatives[row][j];
5511 template <
int dim,
int spacedim>
5520 template <
int dim,
int spacedim>
5529 template <
int dim,
int spacedim>
5533 return this->update_flags;
5538 template <
int dim,
int spacedim>
5539 inline const std::vector<Point<spacedim>> &
5544 Assert(present_cell.get() !=
nullptr,
5545 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5546 return this->mapping_output.quadrature_points;
5551 template <
int dim,
int spacedim>
5552 inline const std::vector<double> &
5557 Assert(present_cell.get() !=
nullptr,
5558 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5559 return this->mapping_output.JxW_values;
5564 template <
int dim,
int spacedim>
5565 inline const std::vector<DerivativeForm<1, dim, spacedim>> &
5570 Assert(present_cell.get() !=
nullptr,
5571 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5572 return this->mapping_output.jacobians;
5577 template <
int dim,
int spacedim>
5578 inline const std::vector<DerivativeForm<2, dim, spacedim>> &
5583 Assert(present_cell.get() !=
nullptr,
5584 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5585 return this->mapping_output.jacobian_grads;
5590 template <
int dim,
int spacedim>
5593 const unsigned int i)
const 5597 Assert(present_cell.get() !=
nullptr,
5598 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5599 return this->mapping_output.jacobian_pushed_forward_grads[i];
5604 template <
int dim,
int spacedim>
5605 inline const std::vector<Tensor<3, spacedim>> &
5608 Assert(this->update_flags & update_jacobian_pushed_forward_grads,
5610 Assert(present_cell.get() !=
nullptr,
5611 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5612 return this->mapping_output.jacobian_pushed_forward_grads;
5617 template <
int dim,
int spacedim>
5623 Assert(present_cell.get() !=
nullptr,
5624 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5625 return this->mapping_output.jacobian_2nd_derivatives[i];
5630 template <
int dim,
int spacedim>
5631 inline const std::vector<DerivativeForm<3, dim, spacedim>> &
5634 Assert(this->update_flags & update_jacobian_2nd_derivatives,
5636 Assert(present_cell.get() !=
nullptr,
5637 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5638 return this->mapping_output.jacobian_2nd_derivatives;
5643 template <
int dim,
int spacedim>
5646 const unsigned int i)
const 5650 "update_jacobian_pushed_forward_2nd_derivatives"));
5651 Assert(present_cell.get() !=
nullptr,
5652 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5653 return this->mapping_output.jacobian_pushed_forward_2nd_derivatives[i];
5658 template <
int dim,
int spacedim>
5659 inline const std::vector<Tensor<4, spacedim>> &
5662 Assert(this->update_flags & update_jacobian_pushed_forward_2nd_derivatives,
5664 "update_jacobian_pushed_forward_2nd_derivatives"));
5665 Assert(present_cell.get() !=
nullptr,
5666 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5667 return this->mapping_output.jacobian_pushed_forward_2nd_derivatives;
5672 template <
int dim,
int spacedim>
5678 Assert(present_cell.get() !=
nullptr,
5679 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5680 return this->mapping_output.jacobian_3rd_derivatives[i];
5685 template <
int dim,
int spacedim>
5686 inline const std::vector<DerivativeForm<4, dim, spacedim>> &
5689 Assert(this->update_flags & update_jacobian_3rd_derivatives,
5691 Assert(present_cell.get() !=
nullptr,
5692 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5693 return this->mapping_output.jacobian_3rd_derivatives;
5698 template <
int dim,
int spacedim>
5701 const unsigned int i)
const 5705 "update_jacobian_pushed_forward_3rd_derivatives"));
5706 Assert(present_cell.get() !=
nullptr,
5707 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5708 return this->mapping_output.jacobian_pushed_forward_3rd_derivatives[i];
5713 template <
int dim,
int spacedim>
5714 inline const std::vector<Tensor<5, spacedim>> &
5717 Assert(this->update_flags & update_jacobian_pushed_forward_3rd_derivatives,
5719 "update_jacobian_pushed_forward_3rd_derivatives"));
5720 Assert(present_cell.get() !=
nullptr,
5721 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5722 return this->mapping_output.jacobian_pushed_forward_3rd_derivatives;
5727 template <
int dim,
int spacedim>
5728 inline const std::vector<DerivativeForm<1, spacedim, dim>> &
5733 Assert(present_cell.get() !=
nullptr,
5734 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5735 return this->mapping_output.inverse_jacobians;
5740 template <
int dim,
int spacedim>
5744 return {0
U, dofs_per_cell};
5749 template <
int dim,
int spacedim>
5752 const unsigned int start_dof_index)
const 5754 Assert(start_dof_index <= dofs_per_cell,
5756 return {start_dof_index, dofs_per_cell};
5761 template <
int dim,
int spacedim>
5764 const unsigned int end_dof_index)
const 5766 Assert(end_dof_index < dofs_per_cell,
5768 return {0
U, end_dof_index + 1};
5773 template <
int dim,
int spacedim>
5777 return {0
U, n_quadrature_points};
5782 template <
int dim,
int spacedim>
5786 Assert(this->update_flags & update_quadrature_points,
5789 Assert(present_cell.get() !=
nullptr,
5790 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5792 return this->mapping_output.quadrature_points[i];
5797 template <
int dim,
int spacedim>
5801 Assert(this->update_flags & update_JxW_values,
5804 Assert(present_cell.get() !=
nullptr,
5805 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5807 return this->mapping_output.JxW_values[i];
5812 template <
int dim,
int spacedim>
5816 Assert(this->update_flags & update_jacobians,
5819 Assert(present_cell.get() !=
nullptr,
5820 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5822 return this->mapping_output.jacobians[i];
5827 template <
int dim,
int spacedim>
5831 Assert(this->update_flags & update_jacobian_grads,
5834 Assert(present_cell.get() !=
nullptr,
5835 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5837 return this->mapping_output.jacobian_grads[i];
5842 template <
int dim,
int spacedim>
5846 Assert(this->update_flags & update_inverse_jacobians,
5849 Assert(present_cell.get() !=
nullptr,
5850 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5852 return this->mapping_output.inverse_jacobians[i];
5857 template <
int dim,
int spacedim>
5863 "update_normal_vectors")));
5865 Assert(present_cell.get() !=
nullptr,
5866 ExcMessage(
"FEValues object is not reinit'ed to any cell"));
5868 return this->mapping_output.normal_vectors[i];
5876 template <
int dim,
int spacedim>
5885 template <
int dim,
int spacedim>
5896 template <
int dim,
int spacedim>
5900 return present_face_index;
5906 template <
int dim,
int spacedim>
5910 return quadrature[quadrature.size() == 1 ? 0 : present_face_no];
5915 template <
int dim,
int spacedim>
5924 template <
int dim,
int spacedim>
5933 template <
int dim,
int spacedim>
5940 "update_boundary_forms")));
5942 return this->mapping_output.boundary_forms[i];
Transformed quadrature weights.
typename ProductType< Number, typename Vector< dim, spacedim >::curl_type >::type curl_type
typename FEValuesViews::View< dim, spacedim, Extractor >::template OutputType< NumberType > OutputType
const FEFaceValues< dim, spacedim > & get_present_fe_values() const
std_cxx20::ranges::iota_view< unsigned int, unsigned int > dof_indices_starting_at(const unsigned int start_dof_index) const
const FEValuesViews::Scalar< dim, spacedim > & operator[](const FEValuesExtractors::Scalar &scalar) const
const Tensor< 3, spacedim > & jacobian_pushed_forward_grad(const unsigned int quadrature_point) const
std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > fe_data
void reinit(MatrixBlock< MatrixType > &v, const BlockSparsityPattern &p)
CellSimilarity::Similarity cell_similarity
typename ProductType< Number, typename Tensor< 2, dim, spacedim >::gradient_type >::type gradient_type
typename ProductType< Number, typename SymmetricTensor< 2, dim, spacedim >::value_type >::type value_type
unsigned int present_face_no
unsigned int present_face_index
std::vector<::FEValuesViews::Vector< dim, spacedim > > vectors
typename ::internal::FEValuesViews::ViewType< dim, spacedim, Extractor >::type View
std::vector< ShapeFunctionData > shape_function_data
constexpr SymmetricTensor< 2, dim, Number > symmetrize(const Tensor< 2, dim, Number > &t)
static ::ExceptionBase & ExcAccessToUninitializedField()
const SmartPointer< const FEValuesBase< dim, spacedim > > fe_values
typename internal::ProductTypeImpl< typename std::decay< T >::type, typename std::decay< U >::type >::type type
const unsigned int dofs_per_cell
typename ::internal::CurlType< spacedim >::type curl_type
const unsigned int component
#define AssertIndexRange(index, range)
int single_nonzero_component
const Mapping< dim, spacedim > & get_mapping() const
Outer normal vector, not normalized.
typename ProductType< Number, typename Scalar< dim, spacedim >::hessian_type >::type hessian_type
const DerivativeForm< 2, dim, spacedim > & jacobian_grad(const unsigned int quadrature_point) const
const FiniteElement< dim, spacedim > & get_fe() const
std::unique_ptr< const CellIteratorBase > present_cell
const unsigned int first_tensor_component
UpdateFlags get_update_flags() const
Transformed quadrature points.
std::vector< double > get_quadrature_points(const unsigned int n)
typename ProductType< Number, typename Scalar< dim, spacedim >::value_type >::type value_type
const SmartPointer< const Mapping< dim, spacedim >, FEValuesBase< dim, spacedim > > mapping
const DerivativeForm< 1, dim, spacedim > & jacobian(const unsigned int quadrature_point) const
const DerivativeForm< 3, dim, spacedim > & jacobian_2nd_derivative(const unsigned int quadrature_point) const
static ::ExceptionBase & ExcIndexRange(int arg1, int arg2, int arg3)
::internal::FEValuesViews::Cache< dim, spacedim > fe_values_views_cache
std_cxx20::ranges::iota_view< unsigned int, unsigned int > quadrature_point_indices() const
double shape_value_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const
static ::ExceptionBase & ExcFENotPrimitive()
Tensor< 2, spacedim > shape_hessian_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const
std::vector<::FEValuesViews::SymmetricTensor< 2, dim, spacedim > > symmetric_second_order_tensors
typename ProductType< Number, typename Vector< dim, spacedim >::gradient_type >::type gradient_type
const Quadrature< dim - 1 > & get_quadrature() const
const std::vector< Point< spacedim > > & get_quadrature_points() const
const Point< spacedim > & quadrature_point(const unsigned int q) const
const std::vector< Tensor< 4, spacedim > > & get_jacobian_pushed_forward_2nd_derivatives() const
typename ProductType< Number, typename Scalar< dim, spacedim >::gradient_type >::type gradient_type
const hp::QCollection< dim - 1 > quadrature
typename ProductType< Number, typename Tensor< 2, dim, spacedim >::value_type >::type value_type
static ::ExceptionBase & ExcMessage(std::string arg1)
const unsigned int first_tensor_component
typename ProductType< Number, typename Vector< dim, spacedim >::third_derivative_type >::type third_derivative_type
static constexpr TableIndices< rank_ > unrolled_to_component_indices(const unsigned int i)
#define DeclException1(Exception1, type1, outsequence)
const double & shape_value(const unsigned int function_no, const unsigned int point_no) const
std_cxx20::ranges::iota_view< unsigned int, unsigned int > dof_indices_ending_at(const unsigned int end_dof_index) const
Tensor< 3, spacedim > shape_3rd_derivative_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const
Third derivatives of shape functions.
const FEValues< dim, spacedim > & get_present_fe_values() const
std::vector< ShapeFunctionData > shape_function_data
unsigned int get_face_index() const
#define Assert(cond, exc)
const Tensor< 2, spacedim > & shape_hessian(const unsigned int function_no, const unsigned int point_no) const
Abstract base class for mapping classes.
boost::integer_range< IncrementableType > iota_view
std::vector< ShapeFunctionData > shape_function_data
#define DeclExceptionMsg(Exception, defaulttext)
const Quadrature< dim > quadrature
const unsigned int first_vector_component
const std::vector< DerivativeForm< 1, dim, spacedim > > & get_jacobians() const
#define DeclException0(Exception0)
#define DEAL_II_NAMESPACE_CLOSE
unsigned int single_nonzero_component_index
std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > mapping_data
const DerivativeForm< 4, dim, spacedim > & jacobian_3rd_derivative(const unsigned int quadrature_point) const
typename Tensor< rank_ - 1, dim, Number >::tensor_type value_type
const std::vector< DerivativeForm< 4, dim, spacedim > > & get_jacobian_3rd_derivatives() const
Second derivatives of shape functions.
Gradient of volume element.
typename ProductType< Number, typename SymmetricTensor< 2, dim, spacedim >::divergence_type >::type divergence_type
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
std::vector<::FEValuesViews::Scalar< dim, spacedim > > scalars
const Tensor< 1, spacedim > & boundary_form(const unsigned int i) const
const Quadrature< dim > & get_quadrature() const
const unsigned int n_quadrature_points
std_cxx20::ranges::iota_view< unsigned int, unsigned int > dof_indices() const
Tensor< 1, spacedim > shape_grad_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const
boost::signals2::connection tria_listener_mesh_transform
typename ProductType< Number, typename Vector< dim, spacedim >::value_type >::type value_type
int single_nonzero_component
unsigned int single_nonzero_component_index
const std::vector< Tensor< 3, spacedim > > & get_jacobian_pushed_forward_grads() const
const std::vector< double > & get_JxW_values() const
unsigned int single_nonzero_component_index
double JxW(const unsigned int quadrature_point) const
typename ProductType< Number, typename Vector< dim, spacedim >::symmetric_gradient_type >::type symmetric_gradient_type
typename ProductType< Number, typename Vector< dim, spacedim >::divergence_type >::type divergence_type
#define DEAL_II_NAMESPACE_OPEN
typename ProductType< Number, typename Vector< dim, spacedim >::hessian_type >::type hessian_type
Shape function gradients.
const std::vector< DerivativeForm< 2, dim, spacedim > > & get_jacobian_grads() const
typename ProductType< Number, typename Tensor< 2, dim, spacedim >::divergence_type >::type divergence_type
const Tensor< 4, spacedim > & jacobian_pushed_forward_2nd_derivative(const unsigned int quadrature_point) const
const SmartPointer< const FEValuesBase< dim, spacedim > > fe_values
const SmartPointer< const FEValuesBase< dim, spacedim > > fe_values
const DerivativeForm< 1, spacedim, dim > & inverse_jacobian(const unsigned int quadrature_point) const
static ::ExceptionBase & ExcNotImplemented()
const std::vector< DerivativeForm< 3, dim, spacedim > > & get_jacobian_2nd_derivatives() const
bool is_nonzero_shape_function_component
const SmartPointer< const FEValuesBase< dim, spacedim > > fe_values
const Tensor< 1, spacedim > & shape_grad(const unsigned int function_no, const unsigned int quadrature_point) const
boost::signals2::connection tria_listener_refinement
::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > finite_element_output
typename ProductType< Number, typename Vector< dim, spacedim >::value_type >::type laplacian_type
::internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > mapping_output
const std::vector< Tensor< 5, spacedim > > & get_jacobian_pushed_forward_3rd_derivatives() const
const FESubfaceValues< dim, spacedim > & get_present_fe_values() const
const unsigned int max_n_quadrature_points
std::vector<::FEValuesViews::Tensor< 2, dim, spacedim > > second_order_tensors
const std::vector< DerivativeForm< 1, spacedim, dim > > & get_inverse_jacobians() const
int single_nonzero_component
typename ProductType< Number, typename Scalar< dim, spacedim >::value_type >::type laplacian_type
typename ProductType< Number, typename Scalar< dim, spacedim >::third_derivative_type >::type third_derivative_type
std::vector< ShapeFunctionData > shape_function_data
std::enable_if< std::is_fundamental< T >::value, std::size_t >::type memory_consumption(const T &t)
const Tensor< 3, spacedim > & shape_3rd_derivative(const unsigned int function_no, const unsigned int point_no) const
static ::ExceptionBase & ExcInternalError()
const SmartPointer< const FiniteElement< dim, spacedim >, FEValuesBase< dim, spacedim > > fe
const Tensor< 1, spacedim > & normal_vector(const unsigned int i) const
const Tensor< 5, spacedim > & jacobian_pushed_forward_3rd_derivative(const unsigned int quadrature_point) const