16#ifndef dealii_fe_values_h
17#define dealii_fe_values_h
52#ifdef DEAL_II_WITH_PETSC
60template <
int dim,
int spacedim = dim>
70 template <
int dim,
class NumberType =
double>
79 template <
class NumberType>
91 template <
class NumberType>
103 template <
class NumberType>
146 template <
int dim,
int spacedim = dim>
184 template <
typename Number>
193 template <
typename Number>
203 template <
typename Number>
213 template <
typename Number>
223 template <
typename Number>
233 template <
typename Number>
361 value(const
unsigned int shape_function, const
unsigned int q_point) const;
375 const
unsigned int q_point) const;
389 const
unsigned int q_point) const;
403 const
unsigned int q_point) const;
422 template <class InputVector>
425 const InputVector &fe_function,
463 template <class InputVector>
466 const InputVector &dof_values,
487 template <class InputVector>
490 const InputVector &fe_function,
500 template <class InputVector>
503 const InputVector &dof_values,
524 template <class InputVector>
527 const InputVector &fe_function,
537 template <class InputVector>
540 const InputVector &dof_values,
563 template <class InputVector>
566 const InputVector &fe_function,
576 template <class InputVector>
579 const InputVector &dof_values,
602 template <class InputVector>
605 const InputVector &fe_function,
608 &third_derivatives) const;
616 template <class InputVector>
619 const InputVector &dof_values,
622 &third_derivatives) const;
674 template <
int dim,
int spacedim = dim>
720 using curl_type = typename ::internal::CurlType<spacedim>::type;
742 template <
typename Number>
751 template <
typename Number>
761 template <
typename Number>
771 template <
typename Number>
781 template <
typename Number>
791 template <
typename Number>
800 template <
typename Number>
810 template <
typename Number>
820 template <
typename Number>
941 const unsigned int first_vector_component);
991 value(
const unsigned int shape_function,
const unsigned int q_point)
const;
1008 const unsigned int q_point)
const;
1027 const unsigned int q_point)
const;
1041 const unsigned int q_point)
const;
1064 curl(
const unsigned int shape_function,
const unsigned int q_point)
const;
1078 const unsigned int q_point)
const;
1092 const unsigned int q_point)
const;
1111 template <
class InputVector>
1114 const InputVector &fe_function,
1152 template <
class InputVector>
1155 const InputVector &dof_values,
1176 template <
class InputVector>
1179 const InputVector &fe_function,
1189 template <
class InputVector>
1192 const InputVector &dof_values,
1219 template <
class InputVector>
1221 get_function_symmetric_gradients(
1222 const InputVector &fe_function,
1225 &symmetric_gradients)
const;
1233 template <
class InputVector>
1235 get_function_symmetric_gradients_from_local_dof_values(
1236 const InputVector &dof_values,
1239 &symmetric_gradients)
const;
1259 template <
class InputVector>
1261 get_function_divergences(
1262 const InputVector &fe_function,
1264 &divergences)
const;
1272 template <
class InputVector>
1274 get_function_divergences_from_local_dof_values(
1275 const InputVector &dof_values,
1277 &divergences)
const;
1297 template <
class InputVector>
1300 const InputVector &fe_function,
1310 template <
class InputVector>
1312 get_function_curls_from_local_dof_values(
1313 const InputVector &dof_values,
1334 template <
class InputVector>
1337 const InputVector &fe_function,
1347 template <
class InputVector>
1350 const InputVector &dof_values,
1372 template <
class InputVector>
1375 const InputVector &fe_function,
1385 template <
class InputVector>
1388 const InputVector &dof_values,
1410 template <
class InputVector>
1413 const InputVector &fe_function,
1416 &third_derivatives)
const;
1424 template <
class InputVector>
1427 const InputVector &dof_values,
1430 &third_derivatives)
const;
1451 template <
int rank,
int dim,
int spacedim = dim>
1476 template <
int dim,
int spacedim>
1505 template <
typename Number>
1514 template <
typename Number>
1525 template <
typename Number>
1549 struct ShapeFunctionData
1559 bool is_nonzero_shape_function_component
1560 [value_type::n_independent_components];
1571 unsigned int row_index[value_type::n_independent_components];
1604 const unsigned int first_tensor_component);
1649 value(const
unsigned int shape_function, const
unsigned int q_point) const;
1665 divergence(const
unsigned int shape_function,
1666 const
unsigned int q_point) const;
1685 template <class InputVector>
1687 get_function_values(
1688 const InputVector &fe_function,
1726 template <class InputVector>
1728 get_function_values_from_local_dof_values(
1729 const InputVector &dof_values,
1754 template <class InputVector>
1756 get_function_divergences(
1757 const InputVector &fe_function,
1759 &divergences) const;
1767 template <class InputVector>
1769 get_function_divergences_from_local_dof_values(
1770 const InputVector &dof_values,
1772 &divergences) const;
1784 const
unsigned int first_tensor_component;
1789 std::vector<ShapeFunctionData> shape_function_data;
1793 template <
int rank,
int dim,
int spacedim = dim>
1814 template <
int dim,
int spacedim>
1841 template <
typename Number>
1850 template <
typename Number>
1860 template <
typename Number>
1871 template <
typename Number>
1903 struct ShapeFunctionData
1913 bool is_nonzero_shape_function_component
1914 [value_type::n_independent_components];
1925 unsigned int row_index[value_type::n_independent_components];
1975 const unsigned int first_tensor_component);
2008 value(
const unsigned int shape_function,
const unsigned int q_point)
const;
2025 const unsigned int q_point)
const;
2042 const unsigned int q_point)
const;
2061 template <
class InputVector>
2063 get_function_values(
2064 const InputVector &fe_function,
2102 template <
class InputVector>
2104 get_function_values_from_local_dof_values(
2105 const InputVector &dof_values,
2130 template <
class InputVector>
2132 get_function_divergences(
2133 const InputVector &fe_function,
2135 &divergences)
const;
2143 template <
class InputVector>
2145 get_function_divergences_from_local_dof_values(
2146 const InputVector &dof_values,
2148 &divergences)
const;
2166 template <
class InputVector>
2168 get_function_gradients(
2169 const InputVector &fe_function,
2179 template <
class InputVector>
2181 get_function_gradients_from_local_dof_values(
2182 const InputVector &dof_values,
2215 template <
int dim,
int spacedim,
typename Extractor>
2226 template <
int dim,
int spacedim>
2229 using type = typename ::FEValuesViews::Scalar<dim, spacedim>;
2239 template <
int dim,
int spacedim>
2242 using type = typename ::FEValuesViews::Vector<dim, spacedim>;
2252 template <
int dim,
int spacedim,
int rank>
2255 using type = typename ::FEValuesViews::Tensor<rank, dim, spacedim>;
2265 template <
int dim,
int spacedim,
int rank>
2269 typename ::FEValuesViews::SymmetricTensor<rank, dim, spacedim>;
2279 template <
int dim,
int spacedim>
2286 std::vector<::FEValuesViews::Scalar<dim, spacedim>>
scalars;
2287 std::vector<::FEValuesViews::Vector<dim, spacedim>>
vectors;
2288 std::vector<::FEValuesViews::SymmetricTensor<2, dim, spacedim>>
2290 std::vector<::FEValuesViews::Tensor<2, dim, spacedim>>
2307 template <
int dim,
int spacedim,
typename Extractor>
2308 using View = typename ::internal::FEValuesViews::
2309 ViewType<dim, spacedim, Extractor>::type;
2412template <
int dim,
int spacedim>
2419 static constexpr unsigned int dimension = dim;
2424 static constexpr unsigned int space_dimension = spacedim;
2462 const unsigned int dofs_per_cell,
2536 const unsigned int q_point,
2537 const unsigned int component)
const;
2565 shape_grad(
const unsigned int i,
const unsigned int q_point)
const;
2585 const unsigned int q_point,
2586 const unsigned int component)
const;
2628 const unsigned int q_point,
2629 const unsigned int component)
const;
2671 const unsigned int q_point,
2672 const unsigned int component)
const;
2728 template <
class InputVector>
2730 get_function_values(
2731 const InputVector & fe_function,
2732 std::vector<typename InputVector::value_type> &values)
const;
2747 template <
class InputVector>
2749 get_function_values(
2750 const InputVector & fe_function,
2809 template <
class InputVector>
2811 get_function_values(
2812 const InputVector & fe_function,
2814 std::vector<typename InputVector::value_type> & values)
const;
2824 template <
class InputVector>
2826 get_function_values(
2827 const InputVector & fe_function,
2853 template <
class InputVector>
2855 get_function_values(
2856 const InputVector & fe_function,
2858 ArrayView<std::vector<typename InputVector::value_type>> values,
2859 const bool quadrature_points_fastest)
const;
2907 template <
class InputVector>
2909 get_function_gradients(
2910 const InputVector &fe_function,
2930 template <
class InputVector>
2932 get_function_gradients(
2933 const InputVector &fe_function,
2946 template <
class InputVector>
2948 get_function_gradients(
2949 const InputVector & fe_function,
2962 template <
class InputVector>
2964 get_function_gradients(
2965 const InputVector & fe_function,
2970 const bool quadrature_points_fastest =
false)
const;
3015 template <
class InputVector>
3017 get_function_hessians(
3018 const InputVector &fe_function,
3039 template <
class InputVector>
3041 get_function_hessians(
3042 const InputVector &fe_function,
3046 const bool quadrature_points_fastest =
false)
const;
3056 template <
class InputVector>
3058 get_function_hessians(
3059 const InputVector & fe_function,
3072 template <
class InputVector>
3074 get_function_hessians(
3075 const InputVector & fe_function,
3080 const bool quadrature_points_fastest =
false)
const;
3122 template <
class InputVector>
3124 get_function_laplacians(
3125 const InputVector & fe_function,
3126 std::vector<typename InputVector::value_type> &laplacians)
const;
3147 template <
class InputVector>
3149 get_function_laplacians(
3150 const InputVector & fe_function,
3161 template <
class InputVector>
3163 get_function_laplacians(
3164 const InputVector & fe_function,
3166 std::vector<typename InputVector::value_type> & laplacians)
const;
3176 template <
class InputVector>
3178 get_function_laplacians(
3179 const InputVector & fe_function,
3191 template <
class InputVector>
3193 get_function_laplacians(
3194 const InputVector & fe_function,
3196 std::vector<std::vector<typename InputVector::value_type>> &laplacians,
3197 const bool quadrature_points_fastest =
false)
const;
3241 template <
class InputVector>
3243 get_function_third_derivatives(
3244 const InputVector &fe_function,
3246 &third_derivatives)
const;
3266 template <
class InputVector>
3268 get_function_third_derivatives(
3269 const InputVector &fe_function,
3272 & third_derivatives,
3273 const bool quadrature_points_fastest =
false)
const;
3283 template <
class InputVector>
3285 get_function_third_derivatives(
3286 const InputVector & fe_function,
3289 &third_derivatives)
const;
3299 template <
class InputVector>
3301 get_function_third_derivatives(
3302 const InputVector & fe_function,
3307 const bool quadrature_points_fastest =
false)
const;
3449 const std::vector<Point<spacedim>> &
3469 JxW(
const unsigned int q_point)
const;
3474 const std::vector<double> &
3492 const std::vector<DerivativeForm<1, dim, spacedim>> &
3511 const std::vector<DerivativeForm<2, dim, spacedim>> &
3531 const std::vector<Tensor<3, spacedim>> &
3550 const std::vector<DerivativeForm<3, dim, spacedim>> &
3571 const std::vector<Tensor<4, spacedim>> &
3591 const std::vector<DerivativeForm<4, dim, spacedim>> &
3612 const std::vector<Tensor<5, spacedim>> &
3630 const std::vector<DerivativeForm<1, spacedim, dim>> &
3662 const std::vector<Tensor<1, spacedim>> &
3663 get_normal_vectors()
const;
3751 get_cell_similarity()
const;
3758 memory_consumption()
const;
3769 ExcAccessToUninitializedField,
3771 <<
"You are requesting information from an FEValues/FEFaceValues/FESubfaceValues "
3772 <<
"object for which this kind of information has not been computed. What "
3773 <<
"information these objects compute is determined by the update_* flags you "
3774 <<
"pass to the constructor. Here, the operation you are attempting requires "
3776 <<
"> flag to be set, but it was apparently not specified "
3777 <<
"upon construction.");
3785 "FEValues object is not reinit'ed to any cell");
3795 "The FiniteElement you provided to FEValues and the FiniteElement that belongs "
3796 "to the DoFHandler that provided the cell iterator do not match.");
3804 <<
"The shape function with index " << arg1
3805 <<
" is not primitive, i.e. it is vector-valued and "
3806 <<
"has more than one non-zero vector component. This "
3807 <<
"function cannot be called for these shape functions. "
3808 <<
"Maybe you want to use the same function with the "
3809 <<
"_component suffix?");
3819 "The given FiniteElement is not a primitive element but the requested operation "
3820 "only works for those. See FiniteElement::is_primitive() for more information.");
3834 "You have previously called the FEValues::reinit() function with a "
3835 "cell iterator of type Triangulation<dim,spacedim>::cell_iterator. However, "
3836 "when you do this, you cannot call some functions in the FEValues "
3837 "class, such as the get_function_values/gradients/hessians/third_derivatives "
3838 "functions. If you need these functions, then you need to call "
3839 "FEValues::reinit() with an iterator type that allows to extract "
3840 "degrees of freedom, such as DoFHandler<dim,spacedim>::cell_iterator.");
3864 is_initialized()
const;
3879 n_dofs_for_dof_handler()
const;
3885 template <
typename VectorType>
3887 get_interpolated_dof_values(
3888 const VectorType & in,
3896 get_interpolated_dof_values(
const IndexSet & in,
3937 invalidate_present_cell();
3949 maybe_invalidate_previous_present_cell(
3963 std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
3986 std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>
4012 compute_update_flags(
const UpdateFlags update_flags)
const;
4027 check_cell_similarity(
4042 template <
int,
int,
int>
4044 template <
int,
int,
int>
4059template <
int dim,
int spacedim = dim>
4067 static constexpr unsigned int integral_dimension = dim;
4114 template <
bool level_dof_access>
4198template <
int dim,
int spacedim = dim>
4206 static constexpr unsigned int integral_dimension = dim - 1;
4253 const std::vector<Tensor<1, spacedim>> &
4318template <
int dim,
int spacedim = dim>
4326 static constexpr unsigned int dimension = dim;
4328 static constexpr unsigned int space_dimension = spacedim;
4334 static constexpr unsigned int integral_dimension = dim - 1;
4379 template <
bool level_dof_access>
4383 const unsigned int face_no);
4391 template <
bool level_dof_access>
4412 const unsigned int face_no);
4484template <
int dim,
int spacedim = dim>
4491 static constexpr unsigned int dimension = dim;
4496 static constexpr unsigned int space_dimension = spacedim;
4502 static constexpr unsigned int integral_dimension = dim - 1;
4549 template <
bool level_dof_access>
4553 const unsigned int face_no,
4554 const unsigned int subface_no);
4560 template <
bool level_dof_access>
4582 const unsigned int face_no,
4583 const unsigned int subface_no);
4654 do_reinit(
const unsigned int face_no,
const unsigned int subface_no);
4665 template <
int dim,
int spacedim>
4666 inline typename Scalar<dim, spacedim>::value_type
4667 Scalar<dim, spacedim>::value(
const unsigned int shape_function,
4668 const unsigned int q_point)
const
4674 "update_values"))));
4679 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
4680 return fe_values->finite_element_output.shape_values(
4681 shape_function_data[shape_function].row_index, q_point);
4688 template <
int dim,
int spacedim>
4689 inline typename Scalar<dim, spacedim>::gradient_type
4690 Scalar<dim, spacedim>::gradient(
const unsigned int shape_function,
4691 const unsigned int q_point)
const
4696 "update_gradients")));
4701 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
4702 return fe_values->finite_element_output
4703 .shape_gradients[shape_function_data[shape_function].row_index]
4706 return gradient_type();
4711 template <
int dim,
int spacedim>
4712 inline typename Scalar<dim, spacedim>::hessian_type
4713 Scalar<dim, spacedim>::hessian(
const unsigned int shape_function,
4714 const unsigned int q_point)
const
4719 "update_hessians")));
4724 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
4725 return fe_values->finite_element_output
4726 .shape_hessians[shape_function_data[shape_function].row_index][q_point];
4728 return hessian_type();
4733 template <
int dim,
int spacedim>
4734 inline typename Scalar<dim, spacedim>::third_derivative_type
4735 Scalar<dim, spacedim>::third_derivative(
const unsigned int shape_function,
4736 const unsigned int q_point)
const
4741 "update_3rd_derivatives")));
4746 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
4747 return fe_values->finite_element_output
4748 .shape_3rd_derivatives[shape_function_data[shape_function].row_index]
4751 return third_derivative_type();
4756 template <
int dim,
int spacedim>
4759 const unsigned int q_point)
const
4768 shape_function_data[shape_function].single_nonzero_component;
4770 return value_type();
4773 value_type return_value;
4774 return_value[shape_function_data[shape_function]
4775 .single_nonzero_component_index] =
4776 fe_values->finite_element_output.shape_values(snc, q_point);
4777 return return_value;
4781 value_type return_value;
4782 for (
unsigned int d = 0;
d < dim; ++
d)
4783 if (shape_function_data[shape_function]
4784 .is_nonzero_shape_function_component[d])
4785 return_value[
d] = fe_values->finite_element_output.shape_values(
4786 shape_function_data[shape_function].row_index[d], q_point);
4788 return return_value;
4794 template <
int dim,
int spacedim>
4797 const unsigned int q_point)
const
4802 "update_gradients")));
4806 shape_function_data[shape_function].single_nonzero_component;
4808 return gradient_type();
4811 gradient_type return_value;
4812 return_value[shape_function_data[shape_function]
4813 .single_nonzero_component_index] =
4814 fe_values->finite_element_output.shape_gradients[snc][q_point];
4815 return return_value;
4819 gradient_type return_value;
4820 for (
unsigned int d = 0;
d < dim; ++
d)
4821 if (shape_function_data[shape_function]
4822 .is_nonzero_shape_function_component[d])
4824 fe_values->finite_element_output.shape_gradients
4825 [shape_function_data[shape_function].row_index[
d]][q_point];
4827 return return_value;
4833 template <
int dim,
int spacedim>
4836 const unsigned int q_point)
const
4842 "update_gradients")));
4846 shape_function_data[shape_function].single_nonzero_component;
4848 return divergence_type();
4850 return fe_values->finite_element_output
4851 .shape_gradients[snc][q_point][shape_function_data[shape_function]
4852 .single_nonzero_component_index];
4855 divergence_type return_value = 0;
4856 for (
unsigned int d = 0;
d < dim; ++
d)
4857 if (shape_function_data[shape_function]
4858 .is_nonzero_shape_function_component[d])
4860 fe_values->finite_element_output.shape_gradients
4861 [shape_function_data[shape_function].row_index[
d]][q_point][
d];
4863 return return_value;
4869 template <
int dim,
int spacedim>
4872 const unsigned int q_point)
const
4879 "update_gradients")));
4882 shape_function_data[shape_function].single_nonzero_component;
4894 "Computing the curl in 1d is not a useful operation"));
4902 curl_type return_value;
4905 if (shape_function_data[shape_function]
4906 .single_nonzero_component_index == 0)
4908 -1.0 * fe_values->finite_element_output
4909 .shape_gradients[snc][q_point][1];
4911 return_value[0] = fe_values->finite_element_output
4912 .shape_gradients[snc][q_point][0];
4914 return return_value;
4919 curl_type return_value;
4921 return_value[0] = 0.0;
4923 if (shape_function_data[shape_function]
4924 .is_nonzero_shape_function_component[0])
4926 fe_values->finite_element_output
4927 .shape_gradients[shape_function_data[shape_function]
4928 .row_index[0]][q_point][1];
4930 if (shape_function_data[shape_function]
4931 .is_nonzero_shape_function_component[1])
4933 fe_values->finite_element_output
4934 .shape_gradients[shape_function_data[shape_function]
4935 .row_index[1]][q_point][0];
4937 return return_value;
4945 curl_type return_value;
4947 switch (shape_function_data[shape_function]
4948 .single_nonzero_component_index)
4952 return_value[0] = 0;
4953 return_value[1] = fe_values->finite_element_output
4954 .shape_gradients[snc][q_point][2];
4956 -1.0 * fe_values->finite_element_output
4957 .shape_gradients[snc][q_point][1];
4958 return return_value;
4964 -1.0 * fe_values->finite_element_output
4965 .shape_gradients[snc][q_point][2];
4966 return_value[1] = 0;
4967 return_value[2] = fe_values->finite_element_output
4968 .shape_gradients[snc][q_point][0];
4969 return return_value;
4974 return_value[0] = fe_values->finite_element_output
4975 .shape_gradients[snc][q_point][1];
4977 -1.0 * fe_values->finite_element_output
4978 .shape_gradients[snc][q_point][0];
4979 return_value[2] = 0;
4980 return return_value;
4987 curl_type return_value;
4989 for (
unsigned int i = 0; i < dim; ++i)
4990 return_value[i] = 0.0;
4992 if (shape_function_data[shape_function]
4993 .is_nonzero_shape_function_component[0])
4996 fe_values->finite_element_output
4997 .shape_gradients[shape_function_data[shape_function]
4998 .row_index[0]][q_point][2];
5000 fe_values->finite_element_output
5001 .shape_gradients[shape_function_data[shape_function]
5002 .row_index[0]][q_point][1];
5005 if (shape_function_data[shape_function]
5006 .is_nonzero_shape_function_component[1])
5009 fe_values->finite_element_output
5010 .shape_gradients[shape_function_data[shape_function]
5011 .row_index[1]][q_point][2];
5013 fe_values->finite_element_output
5014 .shape_gradients[shape_function_data[shape_function]
5015 .row_index[1]][q_point][0];
5018 if (shape_function_data[shape_function]
5019 .is_nonzero_shape_function_component[2])
5022 fe_values->finite_element_output
5023 .shape_gradients[shape_function_data[shape_function]
5024 .row_index[2]][q_point][1];
5026 fe_values->finite_element_output
5027 .shape_gradients[shape_function_data[shape_function]
5028 .row_index[2]][q_point][0];
5031 return return_value;
5042 template <
int dim,
int spacedim>
5045 const unsigned int q_point)
const
5051 "update_hessians")));
5055 shape_function_data[shape_function].single_nonzero_component;
5057 return hessian_type();
5060 hessian_type return_value;
5061 return_value[shape_function_data[shape_function]
5062 .single_nonzero_component_index] =
5063 fe_values->finite_element_output.shape_hessians[snc][q_point];
5064 return return_value;
5068 hessian_type return_value;
5069 for (
unsigned int d = 0;
d < dim; ++
d)
5070 if (shape_function_data[shape_function]
5071 .is_nonzero_shape_function_component[d])
5073 fe_values->finite_element_output.shape_hessians
5074 [shape_function_data[shape_function].row_index[
d]][q_point];
5076 return return_value;
5082 template <
int dim,
int spacedim>
5085 const unsigned int q_point)
const
5091 "update_3rd_derivatives")));
5095 shape_function_data[shape_function].single_nonzero_component;
5097 return third_derivative_type();
5100 third_derivative_type return_value;
5101 return_value[shape_function_data[shape_function]
5102 .single_nonzero_component_index] =
5103 fe_values->finite_element_output.shape_3rd_derivatives[snc][q_point];
5104 return return_value;
5108 third_derivative_type return_value;
5109 for (
unsigned int d = 0;
d < dim; ++
d)
5110 if (shape_function_data[shape_function]
5111 .is_nonzero_shape_function_component[d])
5113 fe_values->finite_element_output.shape_3rd_derivatives
5114 [shape_function_data[shape_function].row_index[
d]][q_point];
5116 return return_value;
5128 inline ::SymmetricTensor<2, 1>
5129 symmetrize_single_row(
const unsigned int n, const ::Tensor<1, 1> &t)
5139 inline ::SymmetricTensor<2, 2>
5140 symmetrize_single_row(
const unsigned int n, const ::Tensor<1, 2> &t)
5146 return {{t[0], 0, t[1] / 2}};
5150 return {{0, t[1], t[0] / 2}};
5162 inline ::SymmetricTensor<2, 3>
5163 symmetrize_single_row(
const unsigned int n, const ::Tensor<1, 3> &t)
5169 return {{t[0], 0, 0, t[1] / 2, t[2] / 2, 0}};
5173 return {{0, t[1], 0, t[0] / 2, 0, t[2] / 2}};
5177 return {{0, 0, t[2], 0, t[0] / 2, t[1] / 2}};
5190 template <
int dim,
int spacedim>
5193 const unsigned int q_point)
const
5198 "update_gradients")));
5202 shape_function_data[shape_function].single_nonzero_component;
5204 return symmetric_gradient_type();
5206 return internal::symmetrize_single_row(
5207 shape_function_data[shape_function].single_nonzero_component_index,
5208 fe_values->finite_element_output.shape_gradients[snc][q_point]);
5211 gradient_type return_value;
5212 for (
unsigned int d = 0;
d < dim; ++
d)
5213 if (shape_function_data[shape_function]
5214 .is_nonzero_shape_function_component[d])
5216 fe_values->finite_element_output.shape_gradients
5217 [shape_function_data[shape_function].row_index[
d]][q_point];
5225 template <
int dim,
int spacedim>
5228 const unsigned int q_point)
const
5238 shape_function_data[shape_function].single_nonzero_component;
5243 return value_type();
5247 value_type return_value;
5248 const unsigned int comp =
5249 shape_function_data[shape_function].single_nonzero_component_index;
5250 return_value[value_type::unrolled_to_component_indices(comp)] =
5251 fe_values->finite_element_output.shape_values(snc, q_point);
5252 return return_value;
5256 value_type return_value;
5257 for (
unsigned int d = 0;
d < value_type::n_independent_components; ++
d)
5258 if (shape_function_data[shape_function]
5259 .is_nonzero_shape_function_component[d])
5260 return_value[value_type::unrolled_to_component_indices(d)] =
5261 fe_values->finite_element_output.shape_values(
5262 shape_function_data[shape_function].row_index[d], q_point);
5263 return return_value;
5269 template <
int dim,
int spacedim>
5272 const unsigned int shape_function,
5273 const unsigned int q_point)
const
5278 "update_gradients")));
5281 shape_function_data[shape_function].single_nonzero_component;
5286 return divergence_type();
5309 const unsigned int comp =
5310 shape_function_data[shape_function].single_nonzero_component_index;
5311 const unsigned int ii =
5312 value_type::unrolled_to_component_indices(comp)[0];
5313 const unsigned int jj =
5314 value_type::unrolled_to_component_indices(comp)[1];
5327 const ::Tensor<1, spacedim> &phi_grad =
5328 fe_values->finite_element_output.shape_gradients[snc][q_point];
5330 divergence_type return_value;
5331 return_value[ii] = phi_grad[jj];
5334 return_value[jj] = phi_grad[ii];
5336 return return_value;
5341 divergence_type return_value;
5342 return return_value;
5348 template <
int dim,
int spacedim>
5351 const unsigned int q_point)
const
5361 shape_function_data[shape_function].single_nonzero_component;
5366 return value_type();
5370 value_type return_value;
5371 const unsigned int comp =
5372 shape_function_data[shape_function].single_nonzero_component_index;
5375 return_value[indices] =
5376 fe_values->finite_element_output.shape_values(snc, q_point);
5377 return return_value;
5381 value_type return_value;
5382 for (
unsigned int d = 0;
d < dim * dim; ++
d)
5383 if (shape_function_data[shape_function]
5384 .is_nonzero_shape_function_component[d])
5388 return_value[indices] =
5389 fe_values->finite_element_output.shape_values(
5390 shape_function_data[shape_function].row_index[d], q_point);
5392 return return_value;
5398 template <
int dim,
int spacedim>
5401 const unsigned int q_point)
const
5406 "update_gradients")));
5409 shape_function_data[shape_function].single_nonzero_component;
5414 return divergence_type();
5428 const unsigned int comp =
5429 shape_function_data[shape_function].single_nonzero_component_index;
5432 const unsigned int ii = indices[0];
5433 const unsigned int jj = indices[1];
5435 const ::Tensor<1, spacedim> &phi_grad =
5436 fe_values->finite_element_output.shape_gradients[snc][q_point];
5438 divergence_type return_value;
5440 return_value[ii] = phi_grad[jj];
5442 return return_value;
5447 divergence_type return_value;
5448 return return_value;
5454 template <
int dim,
int spacedim>
5457 const unsigned int q_point)
const
5462 "update_gradients")));
5465 shape_function_data[shape_function].single_nonzero_component;
5470 return gradient_type();
5484 const unsigned int comp =
5485 shape_function_data[shape_function].single_nonzero_component_index;
5488 const unsigned int ii = indices[0];
5489 const unsigned int jj = indices[1];
5491 const ::Tensor<1, spacedim> &phi_grad =
5492 fe_values->finite_element_output.shape_gradients[snc][q_point];
5494 gradient_type return_value;
5495 return_value[ii][jj] = phi_grad;
5497 return return_value;
5502 gradient_type return_value;
5503 return return_value;
5515template <
int dim,
int spacedim>
5522 , dof_handler(&cell->get_dof_handler())
5523 , level_dof_access(lda)
5528template <
int dim,
int spacedim>
5535 return fe_values_views_cache.scalars[
scalar.component];
5540template <
int dim,
int spacedim>
5546 fe_values_views_cache.vectors.size());
5553template <
int dim,
int spacedim>
5560 fe_values_views_cache.symmetric_second_order_tensors.size(),
5563 fe_values_views_cache.symmetric_second_order_tensors.size()));
5565 return fe_values_views_cache
5571template <
int dim,
int spacedim>
5577 fe_values_views_cache.second_order_tensors.size());
5579 return fe_values_views_cache
5585template <
int dim,
int spacedim>
5586inline const double &
5588 const unsigned int q_point)
const
5592 ExcAccessToUninitializedField(
"update_values"));
5593 Assert(fe->is_primitive(i), ExcShapeFunctionNotPrimitive(i));
5594 Assert(present_cell.is_initialized(), ExcNotReinited());
5597 if (fe->is_primitive())
5598 return this->finite_element_output.shape_values(i, q_point);
5609 const unsigned int row =
5610 this->finite_element_output
5611 .shape_function_to_row_table[i * fe->n_components() +
5612 fe->system_to_component_index(i).first];
5613 return this->finite_element_output.shape_values(row, q_point);
5619template <
int dim,
int spacedim>
5622 const unsigned int i,
5623 const unsigned int q_point,
5624 const unsigned int component)
const
5628 ExcAccessToUninitializedField(
"update_values"));
5630 Assert(present_cell.is_initialized(), ExcNotReinited());
5635 if (fe->get_nonzero_components(i)[component] ==
false)
5641 const unsigned int row =
5642 this->finite_element_output
5643 .shape_function_to_row_table[i * fe->n_components() + component];
5644 return this->finite_element_output.shape_values(row, q_point);
5649template <
int dim,
int spacedim>
5652 const unsigned int q_point)
const
5656 ExcAccessToUninitializedField(
"update_gradients"));
5657 Assert(fe->is_primitive(i), ExcShapeFunctionNotPrimitive(i));
5658 Assert(present_cell.is_initialized(), ExcNotReinited());
5661 if (fe->is_primitive())
5662 return this->finite_element_output.shape_gradients[i][q_point];
5673 const unsigned int row =
5674 this->finite_element_output
5675 .shape_function_to_row_table[i * fe->n_components() +
5676 fe->system_to_component_index(i).first];
5677 return this->finite_element_output.shape_gradients[row][q_point];
5683template <
int dim,
int spacedim>
5686 const unsigned int i,
5687 const unsigned int q_point,
5688 const unsigned int component)
const
5692 ExcAccessToUninitializedField(
"update_gradients"));
5694 Assert(present_cell.is_initialized(), ExcNotReinited());
5698 if (fe->get_nonzero_components(i)[component] ==
false)
5704 const unsigned int row =
5705 this->finite_element_output
5706 .shape_function_to_row_table[i * fe->n_components() + component];
5707 return this->finite_element_output.shape_gradients[row][q_point];
5712template <
int dim,
int spacedim>
5715 const unsigned int q_point)
const
5719 ExcAccessToUninitializedField(
"update_hessians"));
5720 Assert(fe->is_primitive(i), ExcShapeFunctionNotPrimitive(i));
5721 Assert(present_cell.is_initialized(), ExcNotReinited());
5724 if (fe->is_primitive())
5725 return this->finite_element_output.shape_hessians[i][q_point];
5736 const unsigned int row =
5737 this->finite_element_output
5738 .shape_function_to_row_table[i * fe->n_components() +
5739 fe->system_to_component_index(i).first];
5740 return this->finite_element_output.shape_hessians[row][q_point];
5746template <
int dim,
int spacedim>
5749 const unsigned int i,
5750 const unsigned int q_point,
5751 const unsigned int component)
const
5755 ExcAccessToUninitializedField(
"update_hessians"));
5757 Assert(present_cell.is_initialized(), ExcNotReinited());
5761 if (fe->get_nonzero_components(i)[component] ==
false)
5767 const unsigned int row =
5768 this->finite_element_output
5769 .shape_function_to_row_table[i * fe->n_components() + component];
5770 return this->finite_element_output.shape_hessians[row][q_point];
5775template <
int dim,
int spacedim>
5778 const unsigned int i,
5779 const unsigned int q_point)
const
5783 ExcAccessToUninitializedField(
"update_3rd_derivatives"));
5784 Assert(fe->is_primitive(i), ExcShapeFunctionNotPrimitive(i));
5785 Assert(present_cell.is_initialized(), ExcNotReinited());
5788 if (fe->is_primitive())
5789 return this->finite_element_output.shape_3rd_derivatives[i][q_point];
5800 const unsigned int row =
5801 this->finite_element_output
5802 .shape_function_to_row_table[i * fe->n_components() +
5803 fe->system_to_component_index(i).first];
5804 return this->finite_element_output.shape_3rd_derivatives[row][q_point];
5810template <
int dim,
int spacedim>
5813 const unsigned int i,
5814 const unsigned int q_point,
5815 const unsigned int component)
const
5819 ExcAccessToUninitializedField(
"update_3rd_derivatives"));
5821 Assert(present_cell.is_initialized(), ExcNotReinited());
5825 if (fe->get_nonzero_components(i)[component] ==
false)
5831 const unsigned int row =
5832 this->finite_element_output
5833 .shape_function_to_row_table[i * fe->n_components() + component];
5834 return this->finite_element_output.shape_3rd_derivatives[row][q_point];
5839template <
int dim,
int spacedim>
5848template <
int dim,
int spacedim>
5857template <
int dim,
int spacedim>
5861 return this->update_flags;
5866template <
int dim,
int spacedim>
5867inline const std::vector<Point<spacedim>> &
5871 ExcAccessToUninitializedField(
"update_quadrature_points"));
5872 Assert(present_cell.is_initialized(), ExcNotReinited());
5873 return this->mapping_output.quadrature_points;
5878template <
int dim,
int spacedim>
5879inline const std::vector<double> &
5883 ExcAccessToUninitializedField(
"update_JxW_values"));
5884 Assert(present_cell.is_initialized(), ExcNotReinited());
5885 return this->mapping_output.JxW_values;
5890template <
int dim,
int spacedim>
5891inline const std::vector<DerivativeForm<1, dim, spacedim>> &
5895 ExcAccessToUninitializedField(
"update_jacobians"));
5896 Assert(present_cell.is_initialized(), ExcNotReinited());
5897 return this->mapping_output.jacobians;
5902template <
int dim,
int spacedim>
5903inline const std::vector<DerivativeForm<2, dim, spacedim>> &
5907 ExcAccessToUninitializedField(
"update_jacobians_grads"));
5908 Assert(present_cell.is_initialized(), ExcNotReinited());
5909 return this->mapping_output.jacobian_grads;
5914template <
int dim,
int spacedim>
5917 const unsigned int q_point)
const
5920 ExcAccessToUninitializedField(
"update_jacobian_pushed_forward_grads"));
5921 Assert(present_cell.is_initialized(), ExcNotReinited());
5922 return this->mapping_output.jacobian_pushed_forward_grads[q_point];
5927template <
int dim,
int spacedim>
5928inline const std::vector<Tensor<3, spacedim>> &
5932 ExcAccessToUninitializedField(
"update_jacobian_pushed_forward_grads"));
5933 Assert(present_cell.is_initialized(), ExcNotReinited());
5934 return this->mapping_output.jacobian_pushed_forward_grads;
5939template <
int dim,
int spacedim>
5942 const unsigned int q_point)
const
5945 ExcAccessToUninitializedField(
"update_jacobian_2nd_derivatives"));
5946 Assert(present_cell.is_initialized(), ExcNotReinited());
5947 return this->mapping_output.jacobian_2nd_derivatives[q_point];
5952template <
int dim,
int spacedim>
5953inline const std::vector<DerivativeForm<3, dim, spacedim>> &
5957 ExcAccessToUninitializedField(
"update_jacobian_2nd_derivatives"));
5958 Assert(present_cell.is_initialized(), ExcNotReinited());
5959 return this->mapping_output.jacobian_2nd_derivatives;
5964template <
int dim,
int spacedim>
5967 const unsigned int q_point)
const
5970 ExcAccessToUninitializedField(
5971 "update_jacobian_pushed_forward_2nd_derivatives"));
5972 Assert(present_cell.is_initialized(), ExcNotReinited());
5973 return this->mapping_output.jacobian_pushed_forward_2nd_derivatives[q_point];
5978template <
int dim,
int spacedim>
5979inline const std::vector<Tensor<4, spacedim>> &
5983 ExcAccessToUninitializedField(
5984 "update_jacobian_pushed_forward_2nd_derivatives"));
5985 Assert(present_cell.is_initialized(), ExcNotReinited());
5986 return this->mapping_output.jacobian_pushed_forward_2nd_derivatives;
5991template <
int dim,
int spacedim>
5994 const unsigned int q_point)
const
5997 ExcAccessToUninitializedField(
"update_jacobian_3rd_derivatives"));
5998 Assert(present_cell.is_initialized(), ExcNotReinited());
5999 return this->mapping_output.jacobian_3rd_derivatives[q_point];
6004template <
int dim,
int spacedim>
6005inline const std::vector<DerivativeForm<4, dim, spacedim>> &
6009 ExcAccessToUninitializedField(
"update_jacobian_3rd_derivatives"));
6010 Assert(present_cell.is_initialized(), ExcNotReinited());
6011 return this->mapping_output.jacobian_3rd_derivatives;
6016template <
int dim,
int spacedim>
6019 const unsigned int q_point)
const
6022 ExcAccessToUninitializedField(
6023 "update_jacobian_pushed_forward_3rd_derivatives"));
6024 Assert(present_cell.is_initialized(), ExcNotReinited());
6025 return this->mapping_output.jacobian_pushed_forward_3rd_derivatives[q_point];
6030template <
int dim,
int spacedim>
6031inline const std::vector<Tensor<5, spacedim>> &
6035 ExcAccessToUninitializedField(
6036 "update_jacobian_pushed_forward_3rd_derivatives"));
6037 Assert(present_cell.is_initialized(), ExcNotReinited());
6038 return this->mapping_output.jacobian_pushed_forward_3rd_derivatives;
6043template <
int dim,
int spacedim>
6044inline const std::vector<DerivativeForm<1, spacedim, dim>> &
6048 ExcAccessToUninitializedField(
"update_inverse_jacobians"));
6049 Assert(present_cell.is_initialized(), ExcNotReinited());
6050 return this->mapping_output.inverse_jacobians;
6055template <
int dim,
int spacedim>
6059 return {0U, dofs_per_cell};
6064template <
int dim,
int spacedim>
6067 const unsigned int start_dof_index)
const
6069 Assert(start_dof_index <= dofs_per_cell,
6071 return {start_dof_index, dofs_per_cell};
6076template <
int dim,
int spacedim>
6079 const unsigned int end_dof_index)
const
6081 Assert(end_dof_index < dofs_per_cell,
6083 return {0U, end_dof_index + 1};
6088template <
int dim,
int spacedim>
6092 return {0U, n_quadrature_points};
6097template <
int dim,
int spacedim>
6102 ExcAccessToUninitializedField(
"update_quadrature_points"));
6104 Assert(present_cell.is_initialized(), ExcNotReinited());
6106 return this->mapping_output.quadrature_points[q_point];
6111template <
int dim,
int spacedim>
6116 ExcAccessToUninitializedField(
"update_JxW_values"));
6118 Assert(present_cell.is_initialized(), ExcNotReinited());
6120 return this->mapping_output.JxW_values[q_point];
6125template <
int dim,
int spacedim>
6130 ExcAccessToUninitializedField(
"update_jacobians"));
6132 Assert(present_cell.is_initialized(), ExcNotReinited());
6134 return this->mapping_output.jacobians[q_point];
6139template <
int dim,
int spacedim>
6144 ExcAccessToUninitializedField(
"update_jacobians_grads"));
6146 Assert(present_cell.is_initialized(), ExcNotReinited());
6148 return this->mapping_output.jacobian_grads[q_point];
6153template <
int dim,
int spacedim>
6158 ExcAccessToUninitializedField(
"update_inverse_jacobians"));
6160 Assert(present_cell.is_initialized(), ExcNotReinited());
6162 return this->mapping_output.inverse_jacobians[q_point];
6167template <
int dim,
int spacedim>
6173 "update_normal_vectors")));
6175 Assert(present_cell.is_initialized(), ExcNotReinited());
6177 return this->mapping_output.normal_vectors[q_point];
6185template <
int dim,
int spacedim>
6194template <
int dim,
int spacedim>
6205template <
int dim,
int spacedim>
6209 return present_face_no;
6213template <
int dim,
int spacedim>
6217 return present_face_index;
6223template <
int dim,
int spacedim>
6227 return quadrature[quadrature.size() == 1 ? 0 : present_face_no];
6232template <
int dim,
int spacedim>
6241template <
int dim,
int spacedim>
6250template <
int dim,
int spacedim>
6257 "update_boundary_forms")));
6259 return this->mapping_output.boundary_forms[q_point];
const Tensor< 1, spacedim > & boundary_form(const unsigned int q_point) const
const Quadrature< dim - 1 > & get_quadrature() const
unsigned int get_face_index() const
unsigned int present_face_no
FEFaceValuesBase(const unsigned int dofs_per_cell, const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const hp::QCollection< dim - 1 > &quadrature)
unsigned int present_face_index
FEFaceValuesBase(const unsigned int dofs_per_cell, const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const Quadrature< dim - 1 > &quadrature)
std::size_t memory_consumption() const
const std::vector< Tensor< 1, spacedim > > & get_boundary_forms() const
unsigned int get_face_number() const
const hp::QCollection< dim - 1 > quadrature
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, level_dof_access > > &cell, const typename Triangulation< dim, spacedim >::face_iterator &face)
const FEFaceValues< dim, spacedim > & get_present_fe_values() const
FEFaceValues(const FiniteElement< dim, spacedim > &fe, const Quadrature< dim - 1 > &quadrature, const UpdateFlags update_flags)
void initialize(const UpdateFlags update_flags)
void reinit(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no)
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, level_dof_access > > &cell, const unsigned int face_no)
void do_reinit(const unsigned int face_no)
FEFaceValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const Quadrature< dim - 1 > &quadrature, const UpdateFlags update_flags)
FEFaceValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const hp::QCollection< dim - 1 > &quadrature, const UpdateFlags update_flags)
FEFaceValues(const FiniteElement< dim, spacedim > &fe, const hp::QCollection< dim - 1 > &quadrature, const UpdateFlags update_flags)
void reinit(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const typename Triangulation< dim, spacedim >::face_iterator &face)
FESubfaceValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const Quadrature< dim - 1 > &face_quadrature, const UpdateFlags update_flags)
void reinit(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int subface_no)
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, level_dof_access > > &cell, const unsigned int face_no, const unsigned int subface_no)
void initialize(const UpdateFlags update_flags)
const FESubfaceValues< dim, spacedim > & get_present_fe_values() const
FESubfaceValues(const FiniteElement< dim, spacedim > &fe, const Quadrature< dim - 1 > &face_quadrature, const UpdateFlags update_flags)
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, level_dof_access > > &cell, const typename Triangulation< dim, spacedim >::face_iterator &face, const typename Triangulation< dim, spacedim >::face_iterator &subface)
void do_reinit(const unsigned int face_no, const unsigned int subface_no)
FESubfaceValues(const FiniteElement< dim, spacedim > &fe, const hp::QCollection< dim - 1 > &face_quadrature, const UpdateFlags update_flags)
FESubfaceValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const hp::QCollection< dim - 1 > &face_quadrature, const UpdateFlags update_flags)
void reinit(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const typename Triangulation< dim, spacedim >::face_iterator &face, const typename Triangulation< dim, spacedim >::face_iterator &subface)
const DoFHandler< dim, spacedim > * dof_handler
CellIteratorContainer(const TriaIterator< DoFCellAccessor< dim, spacedim, lda > > &cell)
Triangulation< dim, spacedim >::cell_iterator cell
CellSimilarity::Similarity cell_similarity
const Tensor< 5, spacedim > & jacobian_pushed_forward_3rd_derivative(const unsigned int q_point) const
std_cxx20::ranges::iota_view< unsigned int, unsigned int > dof_indices_ending_at(const unsigned int end_dof_index) const
const FEValuesViews::Vector< dim, spacedim > & operator[](const FEValuesExtractors::Vector &vector) const
const std::vector< double > & get_JxW_values() const
CellIteratorContainer present_cell
const DerivativeForm< 1, dim, spacedim > & jacobian(const unsigned int q_point) const
::internal::FEValuesViews::Cache< dim, spacedim > fe_values_views_cache
FEValuesBase(const FEValuesBase &)=delete
const FEValuesViews::Scalar< dim, spacedim > & operator[](const FEValuesExtractors::Scalar &scalar) const
boost::signals2::connection tria_listener_mesh_transform
const std::vector< Point< spacedim > > & get_quadrature_points() const
const std::vector< DerivativeForm< 1, dim, spacedim > > & get_jacobians() const
const DerivativeForm< 2, dim, spacedim > & jacobian_grad(const unsigned int q_point) const
internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > mapping_output
const SmartPointer< const Mapping< dim, spacedim >, FEValuesBase< dim, spacedim > > mapping
const std::vector< DerivativeForm< 3, dim, spacedim > > & get_jacobian_2nd_derivatives() const
UpdateFlags get_update_flags() const
const FEValuesViews::Tensor< 2, dim, spacedim > & operator[](const FEValuesExtractors::Tensor< 2 > &tensor) const
const unsigned int dofs_per_cell
Tensor< 3, spacedim > shape_3rd_derivative_component(const unsigned int i, const unsigned int q_point, const unsigned int component) const
const Tensor< 1, spacedim > & normal_vector(const unsigned int q_point) const
Tensor< 2, spacedim > shape_hessian_component(const unsigned int i, const unsigned int q_point, const unsigned int component) const
const SmartPointer< const FiniteElement< dim, spacedim >, FEValuesBase< dim, spacedim > > fe
const Point< spacedim > & quadrature_point(const unsigned int q_point) const
std_cxx20::ranges::iota_view< unsigned int, unsigned int > dof_indices_starting_at(const unsigned int start_dof_index) const
double shape_value_component(const unsigned int i, const unsigned int q_point, const unsigned int component) const
const Mapping< dim, spacedim > & get_mapping() const
const unsigned int n_quadrature_points
const Tensor< 3, spacedim > & jacobian_pushed_forward_grad(const unsigned int q_point) const
std_cxx20::ranges::iota_view< unsigned int, unsigned int > dof_indices() const
std_cxx20::ranges::iota_view< unsigned int, unsigned int > quadrature_point_indices() const
const Tensor< 2, spacedim > & shape_hessian(const unsigned int i, const unsigned int q_point) const
const std::vector< Tensor< 5, spacedim > > & get_jacobian_pushed_forward_3rd_derivatives() const
const Tensor< 4, spacedim > & jacobian_pushed_forward_2nd_derivative(const unsigned int q_point) const
const Tensor< 3, spacedim > & shape_3rd_derivative(const unsigned int i, const unsigned int q_point) const
std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > mapping_data
const std::vector< DerivativeForm< 2, dim, spacedim > > & get_jacobian_grads() const
boost::signals2::connection tria_listener_refinement
const std::vector< Tensor< 3, spacedim > > & get_jacobian_pushed_forward_grads() const
const DerivativeForm< 4, dim, spacedim > & jacobian_3rd_derivative(const unsigned int q_point) const
const DerivativeForm< 1, spacedim, dim > & inverse_jacobian(const unsigned int q_point) const
const std::vector< Tensor< 4, spacedim > > & get_jacobian_pushed_forward_2nd_derivatives() const
const DerivativeForm< 3, dim, spacedim > & jacobian_2nd_derivative(const unsigned int q_point) const
Tensor< 1, spacedim > shape_grad_component(const unsigned int i, const unsigned int q_point, const unsigned int component) const
::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > finite_element_output
const FEValuesViews::SymmetricTensor< 2, dim, spacedim > & operator[](const FEValuesExtractors::SymmetricTensor< 2 > &tensor) const
const Tensor< 1, spacedim > & shape_grad(const unsigned int i, const unsigned int q_point) const
const std::vector< DerivativeForm< 4, dim, spacedim > > & get_jacobian_3rd_derivatives() const
std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > fe_data
const FiniteElement< dim, spacedim > & get_fe() const
double JxW(const unsigned int q_point) const
const double & shape_value(const unsigned int i, const unsigned int q_point) const
FEValuesBase & operator=(const FEValuesBase &)=delete
const std::vector< DerivativeForm< 1, spacedim, dim > > & get_inverse_jacobians() const
const unsigned int max_n_quadrature_points
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
Scalar & operator=(const Scalar< dim, spacedim > &)=delete
typename ProductType< Number, hessian_type >::type solution_hessian_type
value_type value(const unsigned int shape_function, const unsigned int q_point) const
const unsigned int component
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
gradient_type gradient(const unsigned int shape_function, const unsigned int q_point) const
std::vector< ShapeFunctionData > shape_function_data
void get_function_laplacians(const InputVector &fe_function, std::vector< solution_laplacian_type< typename InputVector::value_type > > &laplacians) const
typename ProductType< Number, value_type >::type solution_laplacian_type
void get_function_third_derivatives(const InputVector &fe_function, std::vector< solution_third_derivative_type< typename InputVector::value_type > > &third_derivatives) const
Scalar & operator=(Scalar< dim, spacedim > &&) noexcept=default
third_derivative_type third_derivative(const unsigned int shape_function, const unsigned int q_point) const
void get_function_hessians(const InputVector &fe_function, std::vector< solution_hessian_type< typename InputVector::value_type > > &hessians) const
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_laplacians_from_local_dof_values(const InputVector &dof_values, std::vector< solution_laplacian_type< typename InputVector::value_type > > &laplacians) const
const SmartPointer< const FEValuesBase< dim, spacedim > > fe_values
void get_function_gradients(const InputVector &fe_function, std::vector< solution_gradient_type< typename InputVector::value_type > > &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
Scalar(Scalar< dim, spacedim > &&)=default
Scalar(const Scalar< dim, spacedim > &)=delete
hessian_type hessian(const unsigned int shape_function, const unsigned int q_point) const
void get_function_values(const InputVector &fe_function, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
SymmetricTensor(const SymmetricTensor< 2, dim, spacedim > &)=delete
SymmetricTensor(SymmetricTensor< 2, dim, spacedim > &&)=default
SymmetricTensor & operator=(SymmetricTensor< 2, dim, spacedim > &&) noexcept=default
typename ProductType< Number, value_type >::type solution_value_type
SymmetricTensor & operator=(const SymmetricTensor< 2, dim, spacedim > &)=delete
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
const unsigned int first_tensor_component
typename ProductType< Number, gradient_type >::type solution_gradient_type
divergence_type divergence(const unsigned int shape_function, const unsigned int q_point) const
Tensor(const Tensor< 2, dim, spacedim > &)=delete
const SmartPointer< const FEValuesBase< dim, spacedim > > fe_values
Tensor & operator=(const Tensor< 2, dim, spacedim > &)=delete
Tensor & operator=(Tensor< 2, dim, spacedim > &&)=default
value_type value(const unsigned int shape_function, const unsigned int q_point) const
gradient_type gradient(const unsigned int shape_function, const unsigned int q_point) const
Tensor(Tensor< 2, dim, spacedim > &&)=default
std::vector< ShapeFunctionData > shape_function_data
typename ProductType< Number, third_derivative_type >::type solution_third_derivative_type
typename ProductType< Number, divergence_type >::type solution_divergence_type
Vector(const Vector< dim, spacedim > &)=delete
hessian_type hessian(const unsigned int shape_function, const unsigned int q_point) const
typename ProductType< Number, hessian_type >::type solution_hessian_type
const SmartPointer< const FEValuesBase< dim, spacedim > > fe_values
Vector & operator=(Vector< dim, spacedim > &&)=default
typename ProductType< Number, symmetric_gradient_type >::type solution_symmetric_gradient_type
gradient_type gradient(const unsigned int shape_function, const unsigned int q_point) const
divergence_type divergence(const unsigned int shape_function, const unsigned int q_point) const
Vector & operator=(const Vector< dim, spacedim > &)=delete
third_derivative_type third_derivative(const unsigned int shape_function, const unsigned int q_point) const
typename ProductType< Number, gradient_type >::type solution_gradient_type
typename ProductType< Number, value_type >::type solution_value_type
symmetric_gradient_type symmetric_gradient(const unsigned int shape_function, const unsigned int q_point) const
Vector(Vector< dim, spacedim > &&)=default
typename ::internal::CurlType< spacedim >::type curl_type
const unsigned int first_vector_component
typename ProductType< Number, curl_type >::type solution_curl_type
std::vector< ShapeFunctionData > shape_function_data
value_type value(const unsigned int shape_function, const unsigned int q_point) const
curl_type curl(const unsigned int shape_function, const unsigned int q_point) const
typename ProductType< Number, value_type >::type solution_laplacian_type
FEValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const Quadrature< dim > &quadrature, const UpdateFlags update_flags)
const Quadrature< dim > & get_quadrature() const
const Quadrature< dim > quadrature
FEValues(const FiniteElement< dim, spacedim > &fe, const hp::QCollection< dim > &quadrature, const UpdateFlags update_flags)
const FEValues< dim, spacedim > & get_present_fe_values() const
FEValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const hp::QCollection< dim > &quadrature, const UpdateFlags update_flags)
FEValues(const FiniteElement< dim, spacedim > &fe, const Quadrature< dim > &quadrature, const UpdateFlags update_flags)
void initialize(const UpdateFlags update_flags)
void reinit(const typename Triangulation< dim, spacedim >::cell_iterator &cell)
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, level_dof_access > > &cell)
std::size_t memory_consumption() const
Abstract base class for mapping classes.
typename Tensor< rank_ - 1, dim, Number >::tensor_type value_type
static constexpr TableIndices< rank_ > unrolled_to_component_indices(const unsigned int i)
#define DEAL_II_DEPRECATED
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DeclException0(Exception0)
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
#define AssertIndexRange(index, range)
#define DeclExceptionMsg(Exception, defaulttext)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcIndexRange(std::size_t arg1, std::size_t arg2, std::size_t arg3)
#define DeclException1(Exception1, type1, outsequence)
static ::ExceptionBase & ExcMessage(std::string arg1)
TriaIterator< CellAccessor< dim, spacedim > > cell_iterator
@ update_jacobian_pushed_forward_2nd_derivatives
@ update_jacobian_pushed_forward_grads
@ update_hessians
Second derivatives of shape functions.
@ update_jacobian_3rd_derivatives
@ update_values
Shape function values.
@ update_jacobian_grads
Gradient of volume element.
@ update_normal_vectors
Normal vectors.
@ update_3rd_derivatives
Third derivatives of shape functions.
@ update_JxW_values
Transformed quadrature weights.
@ update_jacobians
Volume element.
@ update_inverse_jacobians
Volume element.
@ update_gradients
Shape function gradients.
@ update_quadrature_points
Transformed quadrature points.
@ update_jacobian_pushed_forward_3rd_derivatives
@ update_boundary_forms
Outer normal vector, not normalized.
@ update_jacobian_2nd_derivatives
typename ::internal::FEValuesViews::ViewType< dim, spacedim, Extractor >::type View
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
boost::integer_range< IncrementableType > iota_view
typename ProductType< Number, typename Scalar< dim, spacedim >::value_type >::type laplacian_type
typename ProductType< Number, typename Scalar< dim, spacedim >::value_type >::type value_type
typename ProductType< Number, typename Scalar< dim, spacedim >::gradient_type >::type gradient_type
typename ProductType< Number, typename Scalar< dim, spacedim >::hessian_type >::type hessian_type
typename ProductType< Number, typename Scalar< dim, spacedim >::third_derivative_type >::type third_derivative_type
bool is_nonzero_shape_function_component
typename ProductType< Number, typename SymmetricTensor< 2, dim, spacedim >::divergence_type >::type divergence_type
typename ProductType< Number, typename SymmetricTensor< 2, dim, spacedim >::value_type >::type value_type
int single_nonzero_component
unsigned int single_nonzero_component_index
typename ProductType< Number, typename Tensor< 2, dim, spacedim >::gradient_type >::type gradient_type
typename ProductType< Number, typename Tensor< 2, dim, spacedim >::value_type >::type value_type
typename ProductType< Number, typename Tensor< 2, dim, spacedim >::divergence_type >::type divergence_type
unsigned int single_nonzero_component_index
int single_nonzero_component
typename ProductType< Number, typename Vector< dim, spacedim >::third_derivative_type >::type third_derivative_type
typename ProductType< Number, typename Vector< dim, spacedim >::value_type >::type laplacian_type
typename ProductType< Number, typename Vector< dim, spacedim >::hessian_type >::type hessian_type
typename ProductType< Number, typename Vector< dim, spacedim >::symmetric_gradient_type >::type symmetric_gradient_type
typename ProductType< Number, typename Vector< dim, spacedim >::gradient_type >::type gradient_type
typename ProductType< Number, typename Vector< dim, spacedim >::curl_type >::type curl_type
typename ProductType< Number, typename Vector< dim, spacedim >::divergence_type >::type divergence_type
typename ProductType< Number, typename Vector< dim, spacedim >::value_type >::type value_type
int single_nonzero_component
unsigned int single_nonzero_component_index
typename internal::ProductTypeImpl< typename std::decay< T >::type, typename std::decay< U >::type >::type type
std::vector<::FEValuesViews::Scalar< dim, spacedim > > scalars
std::vector<::FEValuesViews::Vector< dim, spacedim > > vectors
std::vector<::FEValuesViews::SymmetricTensor< 2, dim, spacedim > > symmetric_second_order_tensors
std::vector<::FEValuesViews::Tensor< 2, dim, spacedim > > second_order_tensors
DEAL_II_HOST constexpr SymmetricTensor< 2, dim, Number > symmetrize(const Tensor< 2, dim, Number > &t)