16#ifndef dealii_fe_values_h
17#define dealii_fe_values_h
51#ifdef DEAL_II_WITH_PETSC
59template <
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>
183 template <
typename Number>
192 template <
typename Number>
202 template <
typename Number>
212 template <
typename Number>
222 template <
typename Number>
232 template <
typename Number>
360 value(const
unsigned int shape_function, const
unsigned int q_point) const;
374 const
unsigned int q_point) const;
388 const
unsigned int q_point) const;
402 const
unsigned int q_point) const;
421 template <class InputVector>
424 const InputVector &fe_function,
462 template <class InputVector>
465 const InputVector &dof_values,
486 template <class InputVector>
489 const InputVector &fe_function,
499 template <class InputVector>
502 const InputVector &dof_values,
523 template <class InputVector>
526 const InputVector &fe_function,
536 template <class InputVector>
539 const InputVector &dof_values,
562 template <class InputVector>
565 const InputVector &fe_function,
575 template <class InputVector>
578 const InputVector &dof_values,
601 template <class InputVector>
604 const InputVector &fe_function,
607 &third_derivatives) const;
615 template <class InputVector>
618 const InputVector &dof_values,
621 &third_derivatives) const;
673 template <
int dim,
int spacedim = dim>
719 using curl_type = typename ::internal::CurlType<spacedim>::type;
741 template <
typename Number>
750 template <
typename Number>
760 template <
typename Number>
770 template <
typename Number>
780 template <
typename Number>
790 template <
typename Number>
799 template <
typename Number>
809 template <
typename Number>
819 template <
typename Number>
940 const unsigned int first_vector_component);
990 value(
const unsigned int shape_function,
const unsigned int q_point)
const;
1007 const unsigned int q_point)
const;
1026 const unsigned int q_point)
const;
1040 const unsigned int q_point)
const;
1063 curl(
const unsigned int shape_function,
const unsigned int q_point)
const;
1077 const unsigned int q_point)
const;
1091 const unsigned int q_point)
const;
1110 template <
class InputVector>
1113 const InputVector &fe_function,
1151 template <
class InputVector>
1154 const InputVector &dof_values,
1175 template <
class InputVector>
1178 const InputVector &fe_function,
1188 template <
class InputVector>
1191 const InputVector &dof_values,
1218 template <
class InputVector>
1220 get_function_symmetric_gradients(
1221 const InputVector &fe_function,
1224 &symmetric_gradients)
const;
1232 template <
class InputVector>
1234 get_function_symmetric_gradients_from_local_dof_values(
1235 const InputVector &dof_values,
1238 &symmetric_gradients)
const;
1258 template <
class InputVector>
1260 get_function_divergences(
1261 const InputVector &fe_function,
1263 &divergences)
const;
1271 template <
class InputVector>
1273 get_function_divergences_from_local_dof_values(
1274 const InputVector &dof_values,
1276 &divergences)
const;
1296 template <
class InputVector>
1299 const InputVector &fe_function,
1309 template <
class InputVector>
1311 get_function_curls_from_local_dof_values(
1312 const InputVector &dof_values,
1333 template <
class InputVector>
1336 const InputVector &fe_function,
1346 template <
class InputVector>
1349 const InputVector &dof_values,
1371 template <
class InputVector>
1374 const InputVector &fe_function,
1384 template <
class InputVector>
1387 const InputVector &dof_values,
1409 template <
class InputVector>
1412 const InputVector &fe_function,
1415 &third_derivatives)
const;
1423 template <
class InputVector>
1426 const InputVector &dof_values,
1429 &third_derivatives)
const;
1450 template <
int rank,
int dim,
int spacedim = dim>
1475 template <
int dim,
int spacedim>
1504 template <
typename Number>
1513 template <
typename Number>
1524 template <
typename Number>
1548 struct ShapeFunctionData
1558 bool is_nonzero_shape_function_component
1559 [value_type::n_independent_components];
1570 unsigned int row_index[value_type::n_independent_components];
1603 const unsigned int first_tensor_component);
1648 value(const
unsigned int shape_function, const
unsigned int q_point) const;
1664 divergence(const
unsigned int shape_function,
1665 const
unsigned int q_point) const;
1684 template <class InputVector>
1686 get_function_values(
1687 const InputVector &fe_function,
1725 template <class InputVector>
1727 get_function_values_from_local_dof_values(
1728 const InputVector &dof_values,
1753 template <class InputVector>
1755 get_function_divergences(
1756 const InputVector &fe_function,
1758 &divergences) const;
1766 template <class InputVector>
1768 get_function_divergences_from_local_dof_values(
1769 const InputVector &dof_values,
1771 &divergences) const;
1783 const
unsigned int first_tensor_component;
1788 std::vector<ShapeFunctionData> shape_function_data;
1792 template <
int rank,
int dim,
int spacedim = dim>
1813 template <
int dim,
int spacedim>
1840 template <
typename Number>
1849 template <
typename Number>
1859 template <
typename Number>
1870 template <
typename Number>
1902 struct ShapeFunctionData
1912 bool is_nonzero_shape_function_component
1913 [value_type::n_independent_components];
1924 unsigned int row_index[value_type::n_independent_components];
1974 const unsigned int first_tensor_component);
2007 value(
const unsigned int shape_function,
const unsigned int q_point)
const;
2024 const unsigned int q_point)
const;
2041 const unsigned int q_point)
const;
2060 template <
class InputVector>
2062 get_function_values(
2063 const InputVector &fe_function,
2101 template <
class InputVector>
2103 get_function_values_from_local_dof_values(
2104 const InputVector &dof_values,
2129 template <
class InputVector>
2131 get_function_divergences(
2132 const InputVector &fe_function,
2134 &divergences)
const;
2142 template <
class InputVector>
2144 get_function_divergences_from_local_dof_values(
2145 const InputVector &dof_values,
2147 &divergences)
const;
2165 template <
class InputVector>
2167 get_function_gradients(
2168 const InputVector &fe_function,
2178 template <
class InputVector>
2180 get_function_gradients_from_local_dof_values(
2181 const InputVector &dof_values,
2214 template <
int dim,
int spacedim,
typename Extractor>
2225 template <
int dim,
int spacedim>
2228 using type = typename ::FEValuesViews::Scalar<dim, spacedim>;
2238 template <
int dim,
int spacedim>
2241 using type = typename ::FEValuesViews::Vector<dim, spacedim>;
2251 template <
int dim,
int spacedim,
int rank>
2254 using type = typename ::FEValuesViews::Tensor<rank, dim, spacedim>;
2264 template <
int dim,
int spacedim,
int rank>
2268 typename ::FEValuesViews::SymmetricTensor<rank, dim, spacedim>;
2278 template <
int dim,
int spacedim>
2285 std::vector<::FEValuesViews::Scalar<dim, spacedim>>
scalars;
2286 std::vector<::FEValuesViews::Vector<dim, spacedim>>
vectors;
2287 std::vector<::FEValuesViews::SymmetricTensor<2, dim, spacedim>>
2289 std::vector<::FEValuesViews::Tensor<2, dim, spacedim>>
2306 template <
int dim,
int spacedim,
typename Extractor>
2307 using View = typename ::internal::FEValuesViews::
2308 ViewType<dim, spacedim, Extractor>::type;
2411template <
int dim,
int spacedim>
2418 static constexpr unsigned int dimension = dim;
2423 static constexpr unsigned int space_dimension = spacedim;
2461 const unsigned int dofs_per_cell,
2512 const unsigned int point_no)
const;
2536 const unsigned int point_no,
2537 const unsigned int component)
const;
2566 const unsigned int quadrature_point)
const;
2586 const unsigned int point_no,
2587 const unsigned int component)
const;
2610 const unsigned int point_no)
const;
2630 const unsigned int point_no,
2631 const unsigned int component)
const;
2654 const unsigned int point_no)
const;
2674 const unsigned int point_no,
2675 const unsigned int component)
const;
2717 template <
class InputVector>
2719 get_function_values(
2720 const InputVector & fe_function,
2721 std::vector<typename InputVector::value_type> &values)
const;
2736 template <
class InputVector>
2738 get_function_values(
2739 const InputVector & fe_function,
2798 template <
class InputVector>
2800 get_function_values(
2801 const InputVector & fe_function,
2803 std::vector<typename InputVector::value_type> & values)
const;
2813 template <
class InputVector>
2815 get_function_values(
2816 const InputVector & fe_function,
2842 template <
class InputVector>
2844 get_function_values(
2845 const InputVector & fe_function,
2847 ArrayView<std::vector<typename InputVector::value_type>> values,
2848 const bool quadrature_points_fastest)
const;
2890 template <
class InputVector>
2892 get_function_gradients(
2893 const InputVector &fe_function,
2913 template <
class InputVector>
2915 get_function_gradients(
2916 const InputVector &fe_function,
2929 template <
class InputVector>
2931 get_function_gradients(
2932 const InputVector & fe_function,
2945 template <
class InputVector>
2947 get_function_gradients(
2948 const InputVector & fe_function,
2953 const bool quadrature_points_fastest =
false)
const;
2998 template <
class InputVector>
3000 get_function_hessians(
3001 const InputVector &fe_function,
3022 template <
class InputVector>
3024 get_function_hessians(
3025 const InputVector &fe_function,
3029 const bool quadrature_points_fastest =
false)
const;
3039 template <
class InputVector>
3041 get_function_hessians(
3042 const InputVector & fe_function,
3055 template <
class InputVector>
3057 get_function_hessians(
3058 const InputVector & fe_function,
3063 const bool quadrature_points_fastest =
false)
const;
3105 template <
class InputVector>
3107 get_function_laplacians(
3108 const InputVector & fe_function,
3109 std::vector<typename InputVector::value_type> &laplacians)
const;
3130 template <
class InputVector>
3132 get_function_laplacians(
3133 const InputVector & fe_function,
3144 template <
class InputVector>
3146 get_function_laplacians(
3147 const InputVector & fe_function,
3149 std::vector<typename InputVector::value_type> & laplacians)
const;
3159 template <
class InputVector>
3161 get_function_laplacians(
3162 const InputVector & fe_function,
3174 template <
class InputVector>
3176 get_function_laplacians(
3177 const InputVector & fe_function,
3179 std::vector<std::vector<typename InputVector::value_type>> &laplacians,
3180 const bool quadrature_points_fastest =
false)
const;
3224 template <
class InputVector>
3226 get_function_third_derivatives(
3227 const InputVector &fe_function,
3229 &third_derivatives)
const;
3249 template <
class InputVector>
3251 get_function_third_derivatives(
3252 const InputVector &fe_function,
3255 & third_derivatives,
3256 const bool quadrature_points_fastest =
false)
const;
3266 template <
class InputVector>
3268 get_function_third_derivatives(
3269 const InputVector & fe_function,
3272 &third_derivatives)
const;
3282 template <
class InputVector>
3284 get_function_third_derivatives(
3285 const InputVector & fe_function,
3290 const bool quadrature_points_fastest =
false)
const;
3431 const std::vector<Point<spacedim>> &
3450 JxW(
const unsigned int quadrature_point)
const;
3455 const std::vector<double> &
3473 const std::vector<DerivativeForm<1, dim, spacedim>> &
3492 const std::vector<DerivativeForm<2, dim, spacedim>> &
3512 const std::vector<Tensor<3, spacedim>> &
3531 const std::vector<DerivativeForm<3, dim, spacedim>> &
3545 const unsigned int quadrature_point)
const;
3553 const std::vector<Tensor<4, spacedim>> &
3573 const std::vector<DerivativeForm<4, dim, spacedim>> &
3587 const unsigned int quadrature_point)
const;
3595 const std::vector<Tensor<5, spacedim>> &
3613 const std::vector<DerivativeForm<1, spacedim, dim>> &
3645 const std::vector<Tensor<1, spacedim>> &
3646 get_normal_vectors()
const;
3734 get_cell_similarity()
const;
3741 memory_consumption()
const;
3752 ExcAccessToUninitializedField,
3754 <<
"You are requesting information from an FEValues/FEFaceValues/FESubfaceValues "
3755 <<
"object for which this kind of information has not been computed. What "
3756 <<
"information these objects compute is determined by the update_* flags you "
3757 <<
"pass to the constructor. Here, the operation you are attempting requires "
3759 <<
"> flag to be set, but it was apparently not specified "
3760 <<
"upon construction.");
3768 "FEValues object is not reinit'ed to any cell");
3778 "The FiniteElement you provided to FEValues and the FiniteElement that belongs "
3779 "to the DoFHandler that provided the cell iterator do not match.");
3787 <<
"The shape function with index " << arg1
3788 <<
" is not primitive, i.e. it is vector-valued and "
3789 <<
"has more than one non-zero vector component. This "
3790 <<
"function cannot be called for these shape functions. "
3791 <<
"Maybe you want to use the same function with the "
3792 <<
"_component suffix?");
3802 "The given FiniteElement is not a primitive element but the requested operation "
3803 "only works for those. See FiniteElement::is_primitive() for more information.");
3817 "You have previously called the FEValues::reinit() function with a "
3818 "cell iterator of type Triangulation<dim,spacedim>::cell_iterator. However, "
3819 "when you do this, you cannot call some functions in the FEValues "
3820 "class, such as the get_function_values/gradients/hessians/third_derivatives "
3821 "functions. If you need these functions, then you need to call "
3822 "FEValues::reinit() with an iterator type that allows to extract "
3823 "degrees of freedom, such as DoFHandler<dim,spacedim>::cell_iterator.");
3847 is_initialized()
const;
3862 n_dofs_for_dof_handler()
const;
3868 template <
typename VectorType>
3870 get_interpolated_dof_values(
3871 const VectorType & in,
3879 get_interpolated_dof_values(
const IndexSet & in,
3920 invalidate_present_cell();
3932 maybe_invalidate_previous_present_cell(
3946 std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
3970 std::unique_ptr<typename FiniteElement<dim, spacedim>::InternalDataBase>
3996 compute_update_flags(
const UpdateFlags update_flags)
const;
4011 check_cell_similarity(
4026 template <
int,
int,
int>
4028 template <
int,
int,
int>
4043template <
int dim,
int spacedim = dim>
4051 static constexpr unsigned int integral_dimension = dim;
4098 template <
bool level_dof_access>
4182template <
int dim,
int spacedim = dim>
4190 static constexpr unsigned int integral_dimension = dim - 1;
4237 const std::vector<Tensor<1, spacedim>> &
4302template <
int dim,
int spacedim = dim>
4310 static constexpr unsigned int dimension = dim;
4312 static constexpr unsigned int space_dimension = spacedim;
4318 static constexpr unsigned int integral_dimension = dim - 1;
4363 template <
bool level_dof_access>
4367 const unsigned int face_no);
4375 template <
bool level_dof_access>
4396 const unsigned int face_no);
4468template <
int dim,
int spacedim = dim>
4475 static constexpr unsigned int dimension = dim;
4480 static constexpr unsigned int space_dimension = spacedim;
4486 static constexpr unsigned int integral_dimension = dim - 1;
4533 template <
bool level_dof_access>
4537 const unsigned int face_no,
4538 const unsigned int subface_no);
4544 template <
bool level_dof_access>
4566 const unsigned int face_no,
4567 const unsigned int subface_no);
4638 do_reinit(
const unsigned int face_no,
const unsigned int subface_no);
4649 template <
int dim,
int spacedim>
4650 inline typename Scalar<dim, spacedim>::value_type
4651 Scalar<dim, spacedim>::value(
const unsigned int shape_function,
4652 const unsigned int q_point)
const
4658 "update_values"))));
4663 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
4664 return fe_values->finite_element_output.shape_values(
4665 shape_function_data[shape_function].row_index, q_point);
4672 template <
int dim,
int spacedim>
4673 inline typename Scalar<dim, spacedim>::gradient_type
4674 Scalar<dim, spacedim>::gradient(
const unsigned int shape_function,
4675 const unsigned int q_point)
const
4680 "update_gradients")));
4685 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
4686 return fe_values->finite_element_output
4687 .shape_gradients[shape_function_data[shape_function].row_index]
4690 return gradient_type();
4695 template <
int dim,
int spacedim>
4696 inline typename Scalar<dim, spacedim>::hessian_type
4697 Scalar<dim, spacedim>::hessian(
const unsigned int shape_function,
4698 const unsigned int q_point)
const
4703 "update_hessians")));
4708 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
4709 return fe_values->finite_element_output
4710 .shape_hessians[shape_function_data[shape_function].row_index][q_point];
4712 return hessian_type();
4717 template <
int dim,
int spacedim>
4718 inline typename Scalar<dim, spacedim>::third_derivative_type
4719 Scalar<dim, spacedim>::third_derivative(
const unsigned int shape_function,
4720 const unsigned int q_point)
const
4725 "update_3rd_derivatives")));
4730 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
4731 return fe_values->finite_element_output
4732 .shape_3rd_derivatives[shape_function_data[shape_function].row_index]
4735 return third_derivative_type();
4740 template <
int dim,
int spacedim>
4743 const unsigned int q_point)
const
4752 shape_function_data[shape_function].single_nonzero_component;
4754 return value_type();
4757 value_type return_value;
4758 return_value[shape_function_data[shape_function]
4759 .single_nonzero_component_index] =
4760 fe_values->finite_element_output.shape_values(snc, q_point);
4761 return return_value;
4765 value_type return_value;
4766 for (
unsigned int d = 0;
d < dim; ++
d)
4767 if (shape_function_data[shape_function]
4768 .is_nonzero_shape_function_component[d])
4769 return_value[
d] = fe_values->finite_element_output.shape_values(
4770 shape_function_data[shape_function].row_index[d], q_point);
4772 return return_value;
4778 template <
int dim,
int spacedim>
4781 const unsigned int q_point)
const
4786 "update_gradients")));
4790 shape_function_data[shape_function].single_nonzero_component;
4792 return gradient_type();
4795 gradient_type return_value;
4796 return_value[shape_function_data[shape_function]
4797 .single_nonzero_component_index] =
4798 fe_values->finite_element_output.shape_gradients[snc][q_point];
4799 return return_value;
4803 gradient_type return_value;
4804 for (
unsigned int d = 0;
d < dim; ++
d)
4805 if (shape_function_data[shape_function]
4806 .is_nonzero_shape_function_component[d])
4808 fe_values->finite_element_output.shape_gradients
4809 [shape_function_data[shape_function].row_index[
d]][q_point];
4811 return return_value;
4817 template <
int dim,
int spacedim>
4820 const unsigned int q_point)
const
4826 "update_gradients")));
4830 shape_function_data[shape_function].single_nonzero_component;
4832 return divergence_type();
4834 return fe_values->finite_element_output
4835 .shape_gradients[snc][q_point][shape_function_data[shape_function]
4836 .single_nonzero_component_index];
4839 divergence_type return_value = 0;
4840 for (
unsigned int d = 0;
d < dim; ++
d)
4841 if (shape_function_data[shape_function]
4842 .is_nonzero_shape_function_component[d])
4844 fe_values->finite_element_output.shape_gradients
4845 [shape_function_data[shape_function].row_index[
d]][q_point][
d];
4847 return return_value;
4853 template <
int dim,
int spacedim>
4856 const unsigned int q_point)
const
4863 "update_gradients")));
4866 shape_function_data[shape_function].single_nonzero_component;
4878 "Computing the curl in 1d is not a useful operation"));
4886 curl_type return_value;
4889 if (shape_function_data[shape_function]
4890 .single_nonzero_component_index == 0)
4892 -1.0 * fe_values->finite_element_output
4893 .shape_gradients[snc][q_point][1];
4895 return_value[0] = fe_values->finite_element_output
4896 .shape_gradients[snc][q_point][0];
4898 return return_value;
4903 curl_type return_value;
4905 return_value[0] = 0.0;
4907 if (shape_function_data[shape_function]
4908 .is_nonzero_shape_function_component[0])
4910 fe_values->finite_element_output
4911 .shape_gradients[shape_function_data[shape_function]
4912 .row_index[0]][q_point][1];
4914 if (shape_function_data[shape_function]
4915 .is_nonzero_shape_function_component[1])
4917 fe_values->finite_element_output
4918 .shape_gradients[shape_function_data[shape_function]
4919 .row_index[1]][q_point][0];
4921 return return_value;
4929 curl_type return_value;
4931 switch (shape_function_data[shape_function]
4932 .single_nonzero_component_index)
4936 return_value[0] = 0;
4937 return_value[1] = fe_values->finite_element_output
4938 .shape_gradients[snc][q_point][2];
4940 -1.0 * fe_values->finite_element_output
4941 .shape_gradients[snc][q_point][1];
4942 return return_value;
4948 -1.0 * fe_values->finite_element_output
4949 .shape_gradients[snc][q_point][2];
4950 return_value[1] = 0;
4951 return_value[2] = fe_values->finite_element_output
4952 .shape_gradients[snc][q_point][0];
4953 return return_value;
4958 return_value[0] = fe_values->finite_element_output
4959 .shape_gradients[snc][q_point][1];
4961 -1.0 * fe_values->finite_element_output
4962 .shape_gradients[snc][q_point][0];
4963 return_value[2] = 0;
4964 return return_value;
4971 curl_type return_value;
4973 for (
unsigned int i = 0; i < dim; ++i)
4974 return_value[i] = 0.0;
4976 if (shape_function_data[shape_function]
4977 .is_nonzero_shape_function_component[0])
4980 fe_values->finite_element_output
4981 .shape_gradients[shape_function_data[shape_function]
4982 .row_index[0]][q_point][2];
4984 fe_values->finite_element_output
4985 .shape_gradients[shape_function_data[shape_function]
4986 .row_index[0]][q_point][1];
4989 if (shape_function_data[shape_function]
4990 .is_nonzero_shape_function_component[1])
4993 fe_values->finite_element_output
4994 .shape_gradients[shape_function_data[shape_function]
4995 .row_index[1]][q_point][2];
4997 fe_values->finite_element_output
4998 .shape_gradients[shape_function_data[shape_function]
4999 .row_index[1]][q_point][0];
5002 if (shape_function_data[shape_function]
5003 .is_nonzero_shape_function_component[2])
5006 fe_values->finite_element_output
5007 .shape_gradients[shape_function_data[shape_function]
5008 .row_index[2]][q_point][1];
5010 fe_values->finite_element_output
5011 .shape_gradients[shape_function_data[shape_function]
5012 .row_index[2]][q_point][0];
5015 return return_value;
5026 template <
int dim,
int spacedim>
5029 const unsigned int q_point)
const
5035 "update_hessians")));
5039 shape_function_data[shape_function].single_nonzero_component;
5041 return hessian_type();
5044 hessian_type return_value;
5045 return_value[shape_function_data[shape_function]
5046 .single_nonzero_component_index] =
5047 fe_values->finite_element_output.shape_hessians[snc][q_point];
5048 return return_value;
5052 hessian_type return_value;
5053 for (
unsigned int d = 0;
d < dim; ++
d)
5054 if (shape_function_data[shape_function]
5055 .is_nonzero_shape_function_component[d])
5057 fe_values->finite_element_output.shape_hessians
5058 [shape_function_data[shape_function].row_index[
d]][q_point];
5060 return return_value;
5066 template <
int dim,
int spacedim>
5069 const unsigned int q_point)
const
5075 "update_3rd_derivatives")));
5079 shape_function_data[shape_function].single_nonzero_component;
5081 return third_derivative_type();
5084 third_derivative_type return_value;
5085 return_value[shape_function_data[shape_function]
5086 .single_nonzero_component_index] =
5087 fe_values->finite_element_output.shape_3rd_derivatives[snc][q_point];
5088 return return_value;
5092 third_derivative_type return_value;
5093 for (
unsigned int d = 0;
d < dim; ++
d)
5094 if (shape_function_data[shape_function]
5095 .is_nonzero_shape_function_component[d])
5097 fe_values->finite_element_output.shape_3rd_derivatives
5098 [shape_function_data[shape_function].row_index[
d]][q_point];
5100 return return_value;
5112 inline ::SymmetricTensor<2, 1>
5113 symmetrize_single_row(
const unsigned int n, const ::Tensor<1, 1> &t)
5123 inline ::SymmetricTensor<2, 2>
5124 symmetrize_single_row(
const unsigned int n, const ::Tensor<1, 2> &t)
5130 return {{t[0], 0, t[1] / 2}};
5134 return {{0, t[1], t[0] / 2}};
5146 inline ::SymmetricTensor<2, 3>
5147 symmetrize_single_row(
const unsigned int n, const ::Tensor<1, 3> &t)
5153 return {{t[0], 0, 0, t[1] / 2, t[2] / 2, 0}};
5157 return {{0, t[1], 0, t[0] / 2, 0, t[2] / 2}};
5161 return {{0, 0, t[2], 0, t[0] / 2, t[1] / 2}};
5174 template <
int dim,
int spacedim>
5177 const unsigned int q_point)
const
5182 "update_gradients")));
5186 shape_function_data[shape_function].single_nonzero_component;
5188 return symmetric_gradient_type();
5190 return internal::symmetrize_single_row(
5191 shape_function_data[shape_function].single_nonzero_component_index,
5192 fe_values->finite_element_output.shape_gradients[snc][q_point]);
5195 gradient_type return_value;
5196 for (
unsigned int d = 0;
d < dim; ++
d)
5197 if (shape_function_data[shape_function]
5198 .is_nonzero_shape_function_component[d])
5200 fe_values->finite_element_output.shape_gradients
5201 [shape_function_data[shape_function].row_index[
d]][q_point];
5209 template <
int dim,
int spacedim>
5212 const unsigned int q_point)
const
5222 shape_function_data[shape_function].single_nonzero_component;
5227 return value_type();
5231 value_type return_value;
5232 const unsigned int comp =
5233 shape_function_data[shape_function].single_nonzero_component_index;
5234 return_value[value_type::unrolled_to_component_indices(comp)] =
5235 fe_values->finite_element_output.shape_values(snc, q_point);
5236 return return_value;
5240 value_type return_value;
5241 for (
unsigned int d = 0;
d < value_type::n_independent_components; ++
d)
5242 if (shape_function_data[shape_function]
5243 .is_nonzero_shape_function_component[d])
5244 return_value[value_type::unrolled_to_component_indices(d)] =
5245 fe_values->finite_element_output.shape_values(
5246 shape_function_data[shape_function].row_index[d], q_point);
5247 return return_value;
5253 template <
int dim,
int spacedim>
5256 const unsigned int shape_function,
5257 const unsigned int q_point)
const
5262 "update_gradients")));
5265 shape_function_data[shape_function].single_nonzero_component;
5270 return divergence_type();
5293 const unsigned int comp =
5294 shape_function_data[shape_function].single_nonzero_component_index;
5295 const unsigned int ii =
5296 value_type::unrolled_to_component_indices(comp)[0];
5297 const unsigned int jj =
5298 value_type::unrolled_to_component_indices(comp)[1];
5311 const ::Tensor<1, spacedim> &phi_grad =
5312 fe_values->finite_element_output.shape_gradients[snc][q_point];
5314 divergence_type return_value;
5315 return_value[ii] = phi_grad[jj];
5318 return_value[jj] = phi_grad[ii];
5320 return return_value;
5325 divergence_type return_value;
5326 return return_value;
5332 template <
int dim,
int spacedim>
5335 const unsigned int q_point)
const
5345 shape_function_data[shape_function].single_nonzero_component;
5350 return value_type();
5354 value_type return_value;
5355 const unsigned int comp =
5356 shape_function_data[shape_function].single_nonzero_component_index;
5359 return_value[indices] =
5360 fe_values->finite_element_output.shape_values(snc, q_point);
5361 return return_value;
5365 value_type return_value;
5366 for (
unsigned int d = 0;
d < dim * dim; ++
d)
5367 if (shape_function_data[shape_function]
5368 .is_nonzero_shape_function_component[d])
5372 return_value[indices] =
5373 fe_values->finite_element_output.shape_values(
5374 shape_function_data[shape_function].row_index[d], q_point);
5376 return return_value;
5382 template <
int dim,
int spacedim>
5385 const unsigned int q_point)
const
5390 "update_gradients")));
5393 shape_function_data[shape_function].single_nonzero_component;
5398 return divergence_type();
5412 const unsigned int comp =
5413 shape_function_data[shape_function].single_nonzero_component_index;
5416 const unsigned int ii = indices[0];
5417 const unsigned int jj = indices[1];
5419 const ::Tensor<1, spacedim> &phi_grad =
5420 fe_values->finite_element_output.shape_gradients[snc][q_point];
5422 divergence_type return_value;
5424 return_value[ii] = phi_grad[jj];
5426 return return_value;
5431 divergence_type return_value;
5432 return return_value;
5438 template <
int dim,
int spacedim>
5441 const unsigned int q_point)
const
5446 "update_gradients")));
5449 shape_function_data[shape_function].single_nonzero_component;
5454 return gradient_type();
5468 const unsigned int comp =
5469 shape_function_data[shape_function].single_nonzero_component_index;
5472 const unsigned int ii = indices[0];
5473 const unsigned int jj = indices[1];
5475 const ::Tensor<1, spacedim> &phi_grad =
5476 fe_values->finite_element_output.shape_gradients[snc][q_point];
5478 gradient_type return_value;
5479 return_value[ii][jj] = phi_grad;
5481 return return_value;
5486 gradient_type return_value;
5487 return return_value;
5499template <
int dim,
int spacedim>
5506 , dof_handler(&cell->get_dof_handler())
5507 , level_dof_access(lda)
5512template <
int dim,
int spacedim>
5519 return fe_values_views_cache.scalars[
scalar.component];
5524template <
int dim,
int spacedim>
5530 fe_values_views_cache.vectors.size());
5537template <
int dim,
int spacedim>
5544 fe_values_views_cache.symmetric_second_order_tensors.size(),
5547 fe_values_views_cache.symmetric_second_order_tensors.size()));
5549 return fe_values_views_cache
5555template <
int dim,
int spacedim>
5561 fe_values_views_cache.second_order_tensors.size());
5563 return fe_values_views_cache
5569template <
int dim,
int spacedim>
5570inline const double &
5572 const unsigned int j)
const
5576 ExcAccessToUninitializedField(
"update_values"));
5577 Assert(fe->is_primitive(i), ExcShapeFunctionNotPrimitive(i));
5578 Assert(present_cell.is_initialized(), ExcNotReinited());
5581 if (fe->is_primitive())
5582 return this->finite_element_output.shape_values(i, j);
5593 const unsigned int row =
5594 this->finite_element_output
5595 .shape_function_to_row_table[i * fe->n_components() +
5596 fe->system_to_component_index(i).first];
5597 return this->finite_element_output.shape_values(row, j);
5603template <
int dim,
int spacedim>
5606 const unsigned int i,
5607 const unsigned int j,
5608 const unsigned int component)
const
5612 ExcAccessToUninitializedField(
"update_values"));
5614 Assert(present_cell.is_initialized(), ExcNotReinited());
5619 if (fe->get_nonzero_components(i)[component] ==
false)
5625 const unsigned int row =
5626 this->finite_element_output
5627 .shape_function_to_row_table[i * fe->n_components() + component];
5628 return this->finite_element_output.shape_values(row, j);
5633template <
int dim,
int spacedim>
5636 const unsigned int j)
const
5640 ExcAccessToUninitializedField(
"update_gradients"));
5641 Assert(fe->is_primitive(i), ExcShapeFunctionNotPrimitive(i));
5642 Assert(present_cell.is_initialized(), ExcNotReinited());
5645 if (fe->is_primitive())
5646 return this->finite_element_output.shape_gradients[i][j];
5657 const unsigned int row =
5658 this->finite_element_output
5659 .shape_function_to_row_table[i * fe->n_components() +
5660 fe->system_to_component_index(i).first];
5661 return this->finite_element_output.shape_gradients[row][j];
5667template <
int dim,
int spacedim>
5670 const unsigned int i,
5671 const unsigned int j,
5672 const unsigned int component)
const
5676 ExcAccessToUninitializedField(
"update_gradients"));
5678 Assert(present_cell.is_initialized(), ExcNotReinited());
5682 if (fe->get_nonzero_components(i)[component] ==
false)
5688 const unsigned int row =
5689 this->finite_element_output
5690 .shape_function_to_row_table[i * fe->n_components() + component];
5691 return this->finite_element_output.shape_gradients[row][j];
5696template <
int dim,
int spacedim>
5699 const unsigned int j)
const
5703 ExcAccessToUninitializedField(
"update_hessians"));
5704 Assert(fe->is_primitive(i), ExcShapeFunctionNotPrimitive(i));
5705 Assert(present_cell.is_initialized(), ExcNotReinited());
5708 if (fe->is_primitive())
5709 return this->finite_element_output.shape_hessians[i][j];
5720 const unsigned int row =
5721 this->finite_element_output
5722 .shape_function_to_row_table[i * fe->n_components() +
5723 fe->system_to_component_index(i).first];
5724 return this->finite_element_output.shape_hessians[row][j];
5730template <
int dim,
int spacedim>
5733 const unsigned int i,
5734 const unsigned int j,
5735 const unsigned int component)
const
5739 ExcAccessToUninitializedField(
"update_hessians"));
5741 Assert(present_cell.is_initialized(), ExcNotReinited());
5745 if (fe->get_nonzero_components(i)[component] ==
false)
5751 const unsigned int row =
5752 this->finite_element_output
5753 .shape_function_to_row_table[i * fe->n_components() + component];
5754 return this->finite_element_output.shape_hessians[row][j];
5759template <
int dim,
int spacedim>
5762 const unsigned int j)
const
5766 ExcAccessToUninitializedField(
"update_3rd_derivatives"));
5767 Assert(fe->is_primitive(i), ExcShapeFunctionNotPrimitive(i));
5768 Assert(present_cell.is_initialized(), ExcNotReinited());
5771 if (fe->is_primitive())
5772 return this->finite_element_output.shape_3rd_derivatives[i][j];
5783 const unsigned int row =
5784 this->finite_element_output
5785 .shape_function_to_row_table[i * fe->n_components() +
5786 fe->system_to_component_index(i).first];
5787 return this->finite_element_output.shape_3rd_derivatives[row][j];
5793template <
int dim,
int spacedim>
5796 const unsigned int i,
5797 const unsigned int j,
5798 const unsigned int component)
const
5802 ExcAccessToUninitializedField(
"update_3rd_derivatives"));
5804 Assert(present_cell.is_initialized(), ExcNotReinited());
5808 if (fe->get_nonzero_components(i)[component] ==
false)
5814 const unsigned int row =
5815 this->finite_element_output
5816 .shape_function_to_row_table[i * fe->n_components() + component];
5817 return this->finite_element_output.shape_3rd_derivatives[row][j];
5822template <
int dim,
int spacedim>
5831template <
int dim,
int spacedim>
5840template <
int dim,
int spacedim>
5844 return this->update_flags;
5849template <
int dim,
int spacedim>
5850inline const std::vector<Point<spacedim>> &
5854 ExcAccessToUninitializedField(
"update_quadrature_points"));
5855 Assert(present_cell.is_initialized(), ExcNotReinited());
5856 return this->mapping_output.quadrature_points;
5861template <
int dim,
int spacedim>
5862inline const std::vector<double> &
5866 ExcAccessToUninitializedField(
"update_JxW_values"));
5867 Assert(present_cell.is_initialized(), ExcNotReinited());
5868 return this->mapping_output.JxW_values;
5873template <
int dim,
int spacedim>
5874inline const std::vector<DerivativeForm<1, dim, spacedim>> &
5878 ExcAccessToUninitializedField(
"update_jacobians"));
5879 Assert(present_cell.is_initialized(), ExcNotReinited());
5880 return this->mapping_output.jacobians;
5885template <
int dim,
int spacedim>
5886inline const std::vector<DerivativeForm<2, dim, spacedim>> &
5890 ExcAccessToUninitializedField(
"update_jacobians_grads"));
5891 Assert(present_cell.is_initialized(), ExcNotReinited());
5892 return this->mapping_output.jacobian_grads;
5897template <
int dim,
int spacedim>
5900 const unsigned int i)
const
5903 ExcAccessToUninitializedField(
"update_jacobian_pushed_forward_grads"));
5904 Assert(present_cell.is_initialized(), ExcNotReinited());
5905 return this->mapping_output.jacobian_pushed_forward_grads[i];
5910template <
int dim,
int spacedim>
5911inline const std::vector<Tensor<3, spacedim>> &
5915 ExcAccessToUninitializedField(
"update_jacobian_pushed_forward_grads"));
5916 Assert(present_cell.is_initialized(), ExcNotReinited());
5917 return this->mapping_output.jacobian_pushed_forward_grads;
5922template <
int dim,
int spacedim>
5927 ExcAccessToUninitializedField(
"update_jacobian_2nd_derivatives"));
5928 Assert(present_cell.is_initialized(), ExcNotReinited());
5929 return this->mapping_output.jacobian_2nd_derivatives[i];
5934template <
int dim,
int spacedim>
5935inline const std::vector<DerivativeForm<3, dim, spacedim>> &
5939 ExcAccessToUninitializedField(
"update_jacobian_2nd_derivatives"));
5940 Assert(present_cell.is_initialized(), ExcNotReinited());
5941 return this->mapping_output.jacobian_2nd_derivatives;
5946template <
int dim,
int spacedim>
5949 const unsigned int i)
const
5952 ExcAccessToUninitializedField(
5953 "update_jacobian_pushed_forward_2nd_derivatives"));
5954 Assert(present_cell.is_initialized(), ExcNotReinited());
5955 return this->mapping_output.jacobian_pushed_forward_2nd_derivatives[i];
5960template <
int dim,
int spacedim>
5961inline const std::vector<Tensor<4, spacedim>> &
5965 ExcAccessToUninitializedField(
5966 "update_jacobian_pushed_forward_2nd_derivatives"));
5967 Assert(present_cell.is_initialized(), ExcNotReinited());
5968 return this->mapping_output.jacobian_pushed_forward_2nd_derivatives;
5973template <
int dim,
int spacedim>
5978 ExcAccessToUninitializedField(
"update_jacobian_3rd_derivatives"));
5979 Assert(present_cell.is_initialized(), ExcNotReinited());
5980 return this->mapping_output.jacobian_3rd_derivatives[i];
5985template <
int dim,
int spacedim>
5986inline const std::vector<DerivativeForm<4, dim, spacedim>> &
5990 ExcAccessToUninitializedField(
"update_jacobian_3rd_derivatives"));
5991 Assert(present_cell.is_initialized(), ExcNotReinited());
5992 return this->mapping_output.jacobian_3rd_derivatives;
5997template <
int dim,
int spacedim>
6000 const unsigned int i)
const
6003 ExcAccessToUninitializedField(
6004 "update_jacobian_pushed_forward_3rd_derivatives"));
6005 Assert(present_cell.is_initialized(), ExcNotReinited());
6006 return this->mapping_output.jacobian_pushed_forward_3rd_derivatives[i];
6011template <
int dim,
int spacedim>
6012inline const std::vector<Tensor<5, spacedim>> &
6016 ExcAccessToUninitializedField(
6017 "update_jacobian_pushed_forward_3rd_derivatives"));
6018 Assert(present_cell.is_initialized(), ExcNotReinited());
6019 return this->mapping_output.jacobian_pushed_forward_3rd_derivatives;
6024template <
int dim,
int spacedim>
6025inline const std::vector<DerivativeForm<1, spacedim, dim>> &
6029 ExcAccessToUninitializedField(
"update_inverse_jacobians"));
6030 Assert(present_cell.is_initialized(), ExcNotReinited());
6031 return this->mapping_output.inverse_jacobians;
6036template <
int dim,
int spacedim>
6040 return {0U, dofs_per_cell};
6045template <
int dim,
int spacedim>
6048 const unsigned int start_dof_index)
const
6050 Assert(start_dof_index <= dofs_per_cell,
6052 return {start_dof_index, dofs_per_cell};
6057template <
int dim,
int spacedim>
6060 const unsigned int end_dof_index)
const
6062 Assert(end_dof_index < dofs_per_cell,
6064 return {0U, end_dof_index + 1};
6069template <
int dim,
int spacedim>
6073 return {0U, n_quadrature_points};
6078template <
int dim,
int spacedim>
6083 ExcAccessToUninitializedField(
"update_quadrature_points"));
6085 Assert(present_cell.is_initialized(), ExcNotReinited());
6087 return this->mapping_output.quadrature_points[i];
6092template <
int dim,
int spacedim>
6097 ExcAccessToUninitializedField(
"update_JxW_values"));
6099 Assert(present_cell.is_initialized(), ExcNotReinited());
6101 return this->mapping_output.JxW_values[i];
6106template <
int dim,
int spacedim>
6111 ExcAccessToUninitializedField(
"update_jacobians"));
6113 Assert(present_cell.is_initialized(), ExcNotReinited());
6115 return this->mapping_output.jacobians[i];
6120template <
int dim,
int spacedim>
6125 ExcAccessToUninitializedField(
"update_jacobians_grads"));
6127 Assert(present_cell.is_initialized(), ExcNotReinited());
6129 return this->mapping_output.jacobian_grads[i];
6134template <
int dim,
int spacedim>
6139 ExcAccessToUninitializedField(
"update_inverse_jacobians"));
6141 Assert(present_cell.is_initialized(), ExcNotReinited());
6143 return this->mapping_output.inverse_jacobians[i];
6148template <
int dim,
int spacedim>
6154 "update_normal_vectors")));
6156 Assert(present_cell.is_initialized(), ExcNotReinited());
6158 return this->mapping_output.normal_vectors[i];
6166template <
int dim,
int spacedim>
6175template <
int dim,
int spacedim>
6186template <
int dim,
int spacedim>
6190 return present_face_no;
6194template <
int dim,
int spacedim>
6198 return present_face_index;
6204template <
int dim,
int spacedim>
6208 return quadrature[quadrature.size() == 1 ? 0 : present_face_no];
6213template <
int dim,
int spacedim>
6222template <
int dim,
int spacedim>
6231template <
int dim,
int spacedim>
6238 "update_boundary_forms")));
6240 return this->mapping_output.boundary_forms[i];
const Tensor< 1, spacedim > & boundary_form(const unsigned int i) 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
std_cxx20::ranges::iota_view< unsigned int, unsigned int > dof_indices_ending_at(const unsigned int end_dof_index) const
const DerivativeForm< 2, dim, spacedim > & jacobian_grad(const unsigned int quadrature_point) const
const FEValuesViews::Vector< dim, spacedim > & operator[](const FEValuesExtractors::Vector &vector) const
const std::vector< double > & get_JxW_values() const
CellIteratorContainer present_cell
::internal::FEValuesViews::Cache< dim, spacedim > fe_values_views_cache
FEValuesBase(const FEValuesBase &)=delete
const FEValuesViews::Scalar< dim, spacedim > & operator[](const FEValuesExtractors::Scalar &scalar) const
const Tensor< 4, spacedim > & jacobian_pushed_forward_2nd_derivative(const unsigned int quadrature_point) 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 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
const SmartPointer< const FiniteElement< dim, spacedim >, FEValuesBase< dim, spacedim > > fe
std_cxx20::ranges::iota_view< unsigned int, unsigned int > dof_indices_starting_at(const unsigned int start_dof_index) const
const Mapping< dim, spacedim > & get_mapping() const
const unsigned int n_quadrature_points
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
Tensor< 2, spacedim > shape_hessian_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const
const std::vector< Tensor< 5, spacedim > > & get_jacobian_pushed_forward_3rd_derivatives() const
const DerivativeForm< 1, dim, spacedim > & jacobian(const unsigned int quadrature_point) const
::internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > mapping_output
std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > mapping_data
const std::vector< DerivativeForm< 2, dim, spacedim > > & get_jacobian_grads() const
Tensor< 1, spacedim > shape_grad_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const
double shape_value_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const
const Tensor< 2, spacedim > & shape_hessian(const unsigned int function_no, const unsigned int point_no) const
boost::signals2::connection tria_listener_refinement
const std::vector< Tensor< 3, spacedim > > & get_jacobian_pushed_forward_grads() const
const Tensor< 5, spacedim > & jacobian_pushed_forward_3rd_derivative(const unsigned int quadrature_point) const
const Tensor< 1, spacedim > & normal_vector(const unsigned int i) const
const std::vector< Tensor< 4, spacedim > > & get_jacobian_pushed_forward_2nd_derivatives() const
double JxW(const unsigned int quadrature_point) const
const Point< spacedim > & quadrature_point(const unsigned int q) const
::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > finite_element_output
const Tensor< 3, spacedim > & jacobian_pushed_forward_grad(const unsigned int quadrature_point) const
const FEValuesViews::SymmetricTensor< 2, dim, spacedim > & operator[](const FEValuesExtractors::SymmetricTensor< 2 > &tensor) const
const std::vector< DerivativeForm< 4, dim, spacedim > > & get_jacobian_3rd_derivatives() const
const DerivativeForm< 4, dim, spacedim > & jacobian_3rd_derivative(const unsigned int quadrature_point) const
const Tensor< 3, spacedim > & shape_3rd_derivative(const unsigned int function_no, const unsigned int point_no) const
std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > fe_data
const FiniteElement< dim, spacedim > & get_fe() const
const Tensor< 1, spacedim > & shape_grad(const unsigned int function_no, const unsigned int quadrature_point) const
FEValuesBase & operator=(const FEValuesBase &)=delete
const DerivativeForm< 3, dim, spacedim > & jacobian_2nd_derivative(const unsigned int quadrature_point) const
const DerivativeForm< 1, spacedim, dim > & inverse_jacobian(const unsigned int quadrature_point) const
const std::vector< DerivativeForm< 1, spacedim, dim > > & get_inverse_jacobians() const
const unsigned int max_n_quadrature_points
const double & shape_value(const unsigned int function_no, const unsigned int point_no) const
Tensor< 3, spacedim > shape_3rd_derivative_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const
void get_function_third_derivatives_from_local_dof_values(const InputVector &dof_values, std::vector< solution_third_derivative_type< typename InputVector::value_type > > &third_derivatives) const
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
@ 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
#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
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
constexpr SymmetricTensor< 2, dim, Number > symmetrize(const Tensor< 2, dim, Number > &t)