16 #ifndef dealii_fe_values_h 17 #define dealii_fe_values_h 20 #include <deal.II/base/config.h> 21 #include <deal.II/base/exceptions.h> 22 #include <deal.II/base/subscriptor.h> 23 #include <deal.II/base/point.h> 24 #include <deal.II/base/derivative_form.h> 26 #include <deal.II/base/vector_slice.h> 27 #include <deal.II/base/quadrature.h> 28 #include <deal.II/base/table.h> 29 #include <deal.II/grid/tria.h> 30 #include <deal.II/grid/tria_iterator.h> 31 #include <deal.II/dofs/dof_handler.h> 32 #include <deal.II/dofs/dof_accessor.h> 33 #include <deal.II/hp/dof_handler.h> 34 #include <deal.II/fe/fe.h> 35 #include <deal.II/fe/fe_update_flags.h> 36 #include <deal.II/fe/fe_values_extractors.h> 37 #include <deal.II/fe/mapping.h> 41 #include <type_traits> 47 #ifdef DEAL_II_WITH_PETSC 51 DEAL_II_NAMESPACE_OPEN
61 template <
int dim,
class NumberType=
double>
70 template <
class NumberType>
82 template <
class NumberType>
94 template <
class NumberType>
138 template <
int dim,
int spacedim=dim>
174 template <
typename Number>
268 value (
const unsigned int shape_function,
269 const unsigned int q_point)
const;
282 gradient (
const unsigned int shape_function,
283 const unsigned int q_point)
const;
296 hessian (
const unsigned int shape_function,
297 const unsigned int q_point)
const;
311 const unsigned int q_point)
const;
330 template <
class InputVector>
332 std::vector<
typename ProductType<value_type,typename InputVector::value_type>::type> &values)
const;
354 template <
class InputVector>
375 template <
class InputVector>
377 std::vector<
typename ProductType<gradient_type,typename InputVector::value_type>::type> &gradients)
const;
382 template <
class InputVector>
403 template <
class InputVector>
405 std::vector<
typename ProductType<hessian_type,typename InputVector::value_type>::type> &hessians)
const;
410 template <
class InputVector>
433 template <
class InputVector>
435 std::vector<
typename ProductType<value_type,typename InputVector::value_type>::type> &laplacians)
const;
440 template <
class InputVector>
463 template <
class InputVector>
466 typename InputVector::value_type>::type> &third_derivatives)
const;
471 template <
class InputVector>
525 template <
int dim,
int spacedim=dim>
571 typedef typename ::internal::CurlType<spacedim>::type
curl_type;
591 template <
typename Number>
679 unsigned int single_nonzero_component_index;
721 value (
const unsigned int shape_function,
722 const unsigned int q_point)
const;
738 gradient (
const unsigned int shape_function,
739 const unsigned int q_point)
const;
758 const unsigned int q_point)
const;
771 divergence (
const unsigned int shape_function,
772 const unsigned int q_point)
const;
795 curl (
const unsigned int shape_function,
796 const unsigned int q_point)
const;
809 hessian (
const unsigned int shape_function,
810 const unsigned int q_point)
const;
824 const unsigned int q_point)
const;
843 template <
class InputVector>
845 std::vector<
typename ProductType<value_type,typename InputVector::value_type>::type> &values)
const;
867 template <
class InputVector>
888 template <
class InputVector>
890 std::vector<
typename ProductType<gradient_type,typename InputVector::value_type>::type> &gradients)
const;
895 template <
class InputVector>
922 template <
class InputVector>
925 std::vector<
typename ProductType<symmetric_gradient_type,typename InputVector::value_type>::type> &symmetric_gradients)
const;
930 template <
class InputVector>
953 template <
class InputVector>
955 std::vector<
typename ProductType<divergence_type,typename InputVector::value_type>::type> &divergences)
const;
960 template <
class InputVector>
982 template <
class InputVector>
984 std::vector<
typename ProductType<curl_type,typename InputVector::value_type>::type> &curls)
const;
989 template <
class InputVector>
1010 template <
class InputVector>
1012 std::vector<
typename ProductType<hessian_type,typename InputVector::value_type>::type> &hessians)
const;
1017 template <
class InputVector>
1039 template <
class InputVector>
1041 std::vector<
typename ProductType<value_type,typename InputVector::value_type>::type> &laplacians)
const;
1046 template <
class InputVector>
1068 template <
class InputVector>
1071 typename InputVector::value_type>::type> &third_derivatives)
const;
1076 template <
class InputVector>
1099 template <
int rank,
int dim,
int spacedim = dim>
1126 template <
int dim,
int spacedim>
1153 template <
typename Number>
1173 struct ShapeFunctionData
1183 bool is_nonzero_shape_function_component[value_type::n_independent_components];
1194 unsigned int row_index[value_type::n_independent_components];
1227 const unsigned int first_tensor_component);
1253 value (
const unsigned int shape_function,
1254 const unsigned int q_point)
const;
1270 divergence (
const unsigned int shape_function,
1271 const unsigned int q_point)
const;
1290 template <
class InputVector>
1291 void get_function_values (
const InputVector &fe_function,
1292 std::vector<
typename ProductType<value_type,typename InputVector::value_type>::type> &values)
const;
1314 template <
class InputVector>
1315 void get_function_values_from_local_dof_values (
const InputVector &dof_values,
1339 template <
class InputVector>
1340 void get_function_divergences (
const InputVector &fe_function,
1341 std::vector<
typename ProductType<divergence_type,typename InputVector::value_type>::type> &divergences)
const;
1346 template <
class InputVector>
1347 void get_function_divergences_from_local_dof_values (
const InputVector &dof_values,
1369 template <
int rank,
int dim,
int spacedim = dim>
1392 template <
int dim,
int spacedim>
1417 template <
typename Number>
1443 struct ShapeFunctionData
1453 bool is_nonzero_shape_function_component[value_type::n_independent_components];
1464 unsigned int row_index[value_type::n_independent_components];
1497 const unsigned int first_tensor_component);
1523 value (
const unsigned int shape_function,
1524 const unsigned int q_point)
const;
1540 divergence (
const unsigned int shape_function,
1541 const unsigned int q_point)
const;
1557 gradient (
const unsigned int shape_function,
1558 const unsigned int q_point)
const;
1577 template <
class InputVector>
1578 void get_function_values (
const InputVector &fe_function,
1579 std::vector<
typename ProductType<value_type,typename InputVector::value_type>::type> &values)
const;
1601 template <
class InputVector>
1602 void get_function_values_from_local_dof_values (
const InputVector &dof_values,
1626 template <
class InputVector>
1627 void get_function_divergences (
const InputVector &fe_function,
1628 std::vector<
typename ProductType<divergence_type,typename InputVector::value_type>::type> &divergences)
const;
1633 template <
class InputVector>
1634 void get_function_divergences_from_local_dof_values (
const InputVector &dof_values,
1653 template <
class InputVector>
1654 void get_function_gradients (
const InputVector &fe_function,
1655 std::vector<
typename ProductType<gradient_type,typename InputVector::value_type>::type> &gradients)
const;
1660 template <
class InputVector>
1661 void get_function_gradients_from_local_dof_values (
const InputVector &dof_values,
1696 template <
int dim,
int spacedim>
1703 std::vector<::FEValuesViews::Scalar<dim,spacedim> >
scalars;
1704 std::vector<::FEValuesViews::Vector<dim,spacedim> > vectors;
1705 std::vector<::FEValuesViews::SymmetricTensor<2,dim,spacedim> >
1706 symmetric_second_order_tensors;
1707 std::vector<::FEValuesViews::Tensor<2,dim,spacedim> >
1708 second_order_tensors;
1822 template <
int dim,
int spacedim>
1893 const double &
shape_value (
const unsigned int function_no,
1894 const unsigned int point_no)
const;
1917 const unsigned int point_no,
1918 const unsigned int component)
const;
1967 const unsigned int point_no,
1968 const unsigned int component)
const;
1991 const unsigned int point_no)
const;
2011 const unsigned int point_no,
2012 const unsigned int component)
const;
2035 const unsigned int point_no)
const;
2055 const unsigned int point_no,
2056 const unsigned int component)
const;
2100 template <
class InputVector>
2102 std::vector<typename InputVector::value_type> &values)
const;
2117 template <
class InputVector>
2119 std::vector<Vector<typename InputVector::value_type> > &values)
const;
2139 template <
class InputVector>
2141 const VectorSlice<
const std::vector<types::global_dof_index> > &indices,
2142 std::vector<typename InputVector::value_type> &values)
const;
2165 template <
class InputVector>
2167 const VectorSlice<
const std::vector<types::global_dof_index> > &indices,
2168 std::vector<Vector<typename InputVector::value_type> > &values)
const;
2201 template <
class InputVector>
2203 const VectorSlice<
const std::vector<types::global_dof_index> > &indices,
2204 VectorSlice<std::vector<std::vector<typename InputVector::value_type> > > values,
2205 const bool quadrature_points_fastest)
const;
2249 template <
class InputVector>
2269 template <
class InputVector>
2279 template <
class InputVector>
2281 const VectorSlice<
const std::vector<types::global_dof_index> > &indices,
2290 template <
class InputVector>
2292 const VectorSlice<
const std::vector<types::global_dof_index> > &indices,
2294 bool quadrature_points_fastest =
false)
const;
2339 template <
class InputVector>
2361 template <
class InputVector>
2365 bool quadrature_points_fastest =
false)
const;
2371 template <
class InputVector>
2373 const InputVector &fe_function,
2374 const VectorSlice<
const std::vector<types::global_dof_index> > &indices,
2383 template <
class InputVector>
2385 const InputVector &fe_function,
2386 const VectorSlice<
const std::vector<types::global_dof_index> > &indices,
2388 bool quadrature_points_fastest =
false)
const;
2432 template <
class InputVector>
2435 std::vector<typename InputVector::value_type> &laplacians)
const;
2456 template <
class InputVector>
2459 std::vector<Vector<typename InputVector::value_type> > &laplacians)
const;
2467 template <
class InputVector>
2469 const InputVector &fe_function,
2470 const VectorSlice<
const std::vector<types::global_dof_index> > &indices,
2471 std::vector<typename InputVector::value_type> &laplacians)
const;
2479 template <
class InputVector>
2481 const InputVector &fe_function,
2482 const VectorSlice<
const std::vector<types::global_dof_index> > &indices,
2483 std::vector<Vector<typename InputVector::value_type> > &laplacians)
const;
2491 template <
class InputVector>
2493 const InputVector &fe_function,
2494 const VectorSlice<
const std::vector<types::global_dof_index> > &indices,
2495 std::vector<std::vector<typename InputVector::value_type> > &laplacians,
2496 bool quadrature_points_fastest =
false)
const;
2542 template <
class InputVector>
2565 template <
class InputVector>
2569 bool quadrature_points_fastest =
false)
const;
2575 template <
class InputVector>
2577 const InputVector &fe_function,
2578 const VectorSlice<
const std::vector<types::global_dof_index> > &indices,
2587 template <
class InputVector>
2589 const InputVector &fe_function,
2590 const VectorSlice<
const std::vector<types::global_dof_index> > &indices,
2592 bool quadrature_points_fastest =
false)
const;
2649 const std::vector<DerivativeForm<1,dim,spacedim> > &
get_jacobians ()
const;
2911 <<
"You are requesting information from an FEValues/FEFaceValues/FESubfaceValues " 2912 <<
"object for which this kind of information has not been computed. What " 2913 <<
"information these objects compute is determined by the update_* flags you " 2914 <<
"pass to the constructor. Here, the operation you are attempting requires " 2915 <<
"the <" << arg1 <<
"> flag to be set, but it was apparently not specified " 2916 <<
"upon construction.");
2924 "The FiniteElement you provided to FEValues and the FiniteElement that belongs " 2925 "to the DoFHandler that provided the cell iterator do not match.");
2933 <<
"The shape function with index " << arg1
2934 <<
" is not primitive, i.e. it is vector-valued and " 2935 <<
"has more than one non-zero vector component. This " 2936 <<
"function cannot be called for these shape functions. " 2937 <<
"Maybe you want to use the same function with the " 2938 <<
"_component suffix?");
2946 "The given FiniteElement is not a primitive element but the requested operation " 2947 "only works for those. See FiniteElement::is_primitive() for more information.");
2978 class CellIteratorBase;
3041 std::unique_ptr<typename Mapping<dim,spacedim>::InternalDataBase>
mapping_data;
3061 std::unique_ptr<typename FiniteElement<dim,spacedim>::InternalDataBase>
fe_data;
3124 template <
int,
int,
int>
friend class FEValuesViews::SymmetricTensor;
3125 template <
int,
int,
int>
friend class FEValuesViews::Tensor;
3140 template <
int dim,
int spacedim=dim>
3174 template <
template <
int,
int>
class DoFHandlerType,
bool level_dof_access>
3251 template <
int dim,
int spacedim=dim>
3344 template <
int dim,
int spacedim=dim>
3354 static const unsigned int space_dimension = spacedim;
3384 template <
template <
int,
int>
class DoFHandlerType,
bool level_dof_access>
3386 const unsigned int face_no);
3402 const unsigned int face_no);
3432 void do_reinit (
const unsigned int face_no);
3453 template <
int dim,
int spacedim=dim>
3497 template <
template <
int,
int>
class DoFHandlerType,
bool level_dof_access>
3499 const unsigned int face_no,
3500 const unsigned int subface_no);
3516 const unsigned int face_no,
3517 const unsigned int subface_no);
3562 void do_reinit (
const unsigned int face_no,
3563 const unsigned int subface_no);
3574 template <
int dim,
int spacedim>
3578 const unsigned int q_point)
const 3580 Assert (shape_function < fe_values->fe->dofs_per_cell,
3581 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
3588 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
3589 return fe_values->finite_element_output.shape_values(shape_function_data[shape_function]
3598 template <
int dim,
int spacedim>
3602 const unsigned int q_point)
const 3604 Assert (shape_function < fe_values->fe->dofs_per_cell,
3605 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
3612 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
3613 return fe_values->finite_element_output.shape_gradients[shape_function_data[shape_function]
3614 .row_index][q_point];
3616 return gradient_type();
3621 template <
int dim,
int spacedim>
3625 const unsigned int q_point)
const 3627 Assert (shape_function < fe_values->fe->dofs_per_cell,
3628 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
3635 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
3636 return fe_values->finite_element_output.shape_hessians[shape_function_data[shape_function].row_index][q_point];
3638 return hessian_type();
3643 template <
int dim,
int spacedim>
3647 const unsigned int q_point)
const 3649 Assert (shape_function < fe_values->fe->dofs_per_cell,
3650 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
3657 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
3658 return fe_values->finite_element_output.shape_3rd_derivatives[shape_function_data[shape_function].row_index][q_point];
3660 return third_derivative_type();
3665 template <
int dim,
int spacedim>
3669 const unsigned int q_point)
const 3671 Assert (shape_function < fe_values->fe->dofs_per_cell,
3672 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
3677 const int snc = shape_function_data[shape_function].single_nonzero_component;
3679 return value_type();
3682 value_type return_value;
3683 return_value[shape_function_data[shape_function].single_nonzero_component_index]
3684 = fe_values->finite_element_output.shape_values(snc,q_point);
3685 return return_value;
3689 value_type return_value;
3690 for (
unsigned int d=0;
d<dim; ++
d)
3691 if (shape_function_data[shape_function].is_nonzero_shape_function_component[d])
3693 = fe_values->finite_element_output.shape_values(shape_function_data[shape_function].row_index[d],q_point);
3695 return return_value;
3701 template <
int dim,
int spacedim>
3705 const unsigned int q_point)
const 3707 Assert (shape_function < fe_values->fe->dofs_per_cell,
3708 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
3713 const int snc = shape_function_data[shape_function].single_nonzero_component;
3715 return gradient_type();
3718 gradient_type return_value;
3719 return_value[shape_function_data[shape_function].single_nonzero_component_index]
3720 = fe_values->finite_element_output.shape_gradients[snc][q_point];
3721 return return_value;
3725 gradient_type return_value;
3726 for (
unsigned int d=0;
d<dim; ++
d)
3727 if (shape_function_data[shape_function].is_nonzero_shape_function_component[d])
3729 = fe_values->finite_element_output.shape_gradients[shape_function_data[shape_function].row_index[
d]][q_point];
3731 return return_value;
3737 template <
int dim,
int spacedim>
3741 const unsigned int q_point)
const 3744 Assert (shape_function < fe_values->fe->dofs_per_cell,
3745 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
3750 const int snc = shape_function_data[shape_function].single_nonzero_component;
3752 return divergence_type();
3755 fe_values->finite_element_output.shape_gradients[snc][q_point][shape_function_data[shape_function].single_nonzero_component_index];
3758 divergence_type return_value = 0;
3759 for (
unsigned int d=0;
d<dim; ++
d)
3760 if (shape_function_data[shape_function].is_nonzero_shape_function_component[d])
3762 += fe_values->finite_element_output.shape_gradients[shape_function_data[shape_function].row_index[
d]][q_point][
d];
3764 return return_value;
3770 template <
int dim,
int spacedim>
3777 Assert (shape_function < fe_values->fe->dofs_per_cell,
3778 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
3782 const int snc = shape_function_data[shape_function].single_nonzero_component;
3785 return curl_type ();
3792 Assert (
false,
ExcMessage(
"Computing the curl in 1d is not a useful operation"));
3793 return curl_type ();
3800 curl_type return_value;
3803 if (shape_function_data[shape_function].single_nonzero_component_index == 0)
3804 return_value[0] = -1.0 * fe_values->finite_element_output.shape_gradients[snc][q_point][1];
3806 return_value[0] = fe_values->finite_element_output.shape_gradients[snc][q_point][0];
3808 return return_value;
3813 curl_type return_value;
3815 return_value[0] = 0.0;
3817 if (shape_function_data[shape_function].is_nonzero_shape_function_component[0])
3819 -= fe_values->finite_element_output.shape_gradients[shape_function_data[shape_function].row_index[0]][q_point][1];
3821 if (shape_function_data[shape_function].is_nonzero_shape_function_component[1])
3823 += fe_values->finite_element_output.shape_gradients[shape_function_data[shape_function].row_index[1]][q_point][0];
3825 return return_value;
3833 curl_type return_value;
3835 switch (shape_function_data[shape_function].single_nonzero_component_index)
3839 return_value[0] = 0;
3840 return_value[1] = fe_values->finite_element_output.shape_gradients[snc][q_point][2];
3841 return_value[2] = -1.0 * fe_values->finite_element_output.shape_gradients[snc][q_point][1];
3842 return return_value;
3847 return_value[0] = -1.0 * fe_values->finite_element_output.shape_gradients[snc][q_point][2];
3848 return_value[1] = 0;
3849 return_value[2] = fe_values->finite_element_output.shape_gradients[snc][q_point][0];
3850 return return_value;
3855 return_value[0] = fe_values->finite_element_output.shape_gradients[snc][q_point][1];
3856 return_value[1] = -1.0 * fe_values->finite_element_output.shape_gradients[snc][q_point][0];
3857 return_value[2] = 0;
3858 return return_value;
3865 curl_type return_value;
3867 for (
unsigned int i = 0; i < dim; ++i)
3868 return_value[i] = 0.0;
3870 if (shape_function_data[shape_function].is_nonzero_shape_function_component[0])
3873 += fe_values->finite_element_output.shape_gradients[shape_function_data[shape_function].row_index[0]][q_point][2];
3875 -= fe_values->finite_element_output.shape_gradients[shape_function_data[shape_function].row_index[0]][q_point][1];
3878 if (shape_function_data[shape_function].is_nonzero_shape_function_component[1])
3881 -= fe_values->finite_element_output.shape_gradients[shape_function_data[shape_function].row_index[1]][q_point][2];
3883 += fe_values->finite_element_output.shape_gradients[shape_function_data[shape_function].row_index[1]][q_point][0];
3886 if (shape_function_data[shape_function].is_nonzero_shape_function_component[2])
3889 += fe_values->finite_element_output.shape_gradients[shape_function_data[shape_function].row_index[2]][q_point][1];
3891 -= fe_values->finite_element_output.shape_gradients[shape_function_data[shape_function].row_index[2]][q_point][0];
3894 return return_value;
3905 template <
int dim,
int spacedim>
3909 const unsigned int q_point)
const 3912 Assert (shape_function < fe_values->fe->dofs_per_cell,
3913 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
3918 const int snc = shape_function_data[shape_function].single_nonzero_component;
3920 return hessian_type();
3923 hessian_type return_value;
3924 return_value[shape_function_data[shape_function].single_nonzero_component_index]
3925 = fe_values->finite_element_output.shape_hessians[snc][q_point];
3926 return return_value;
3930 hessian_type return_value;
3931 for (
unsigned int d=0;
d<dim; ++
d)
3932 if (shape_function_data[shape_function].is_nonzero_shape_function_component[d])
3934 = fe_values->finite_element_output.shape_hessians[shape_function_data[shape_function].row_index[
d]][q_point];
3936 return return_value;
3942 template <
int dim,
int spacedim>
3946 const unsigned int q_point)
const 3949 Assert (shape_function < fe_values->fe->dofs_per_cell,
3950 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
3955 const int snc = shape_function_data[shape_function].single_nonzero_component;
3957 return third_derivative_type();
3960 third_derivative_type return_value;
3961 return_value[shape_function_data[shape_function].single_nonzero_component_index]
3962 = fe_values->finite_element_output.shape_3rd_derivatives[snc][q_point];
3963 return return_value;
3967 third_derivative_type return_value;
3968 for (
unsigned int d=0;
d<dim; ++
d)
3969 if (shape_function_data[shape_function].is_nonzero_shape_function_component[d])
3971 = fe_values->finite_element_output.shape_3rd_derivatives[shape_function_data[shape_function].row_index[
d]][q_point];
3973 return return_value;
3986 ::SymmetricTensor<2,1>
3987 symmetrize_single_row (
const unsigned int n,
3988 const ::Tensor<1,1> &t)
3993 const double array[1] = { t[0] };
3994 return ::SymmetricTensor<2,1>(array);
4000 ::SymmetricTensor<2,2>
4001 symmetrize_single_row (
const unsigned int n,
4002 const ::Tensor<1,2> &t)
4008 const double array[3] = { t[0], 0, t[1]/2 };
4009 return ::SymmetricTensor<2,2>(array);
4013 const double array[3] = { 0, t[1], t[0]/2 };
4014 return ::SymmetricTensor<2,2>(array);
4019 return ::SymmetricTensor<2,2>();
4027 ::SymmetricTensor<2,3>
4028 symmetrize_single_row (
const unsigned int n,
4029 const ::Tensor<1,3> &t)
4035 const double array[6] = { t[0], 0, 0, t[1]/2, t[2]/2, 0 };
4036 return ::SymmetricTensor<2,3>(array);
4040 const double array[6] = { 0, t[1], 0, t[0]/2, 0, t[2]/2 };
4041 return ::SymmetricTensor<2,3>(array);
4045 const double array[6] = { 0, 0, t[2], 0, t[0]/2, t[1]/2 };
4046 return ::SymmetricTensor<2,3>(array);
4051 return ::SymmetricTensor<2,3>();
4059 template <
int dim,
int spacedim>
4063 const unsigned int q_point)
const 4065 Assert (shape_function < fe_values->fe->dofs_per_cell,
4066 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
4071 const int snc = shape_function_data[shape_function].single_nonzero_component;
4073 return symmetric_gradient_type();
4075 return symmetrize_single_row (shape_function_data[shape_function].single_nonzero_component_index,
4076 fe_values->finite_element_output.shape_gradients[snc][q_point]);
4079 gradient_type return_value;
4080 for (
unsigned int d=0;
d<dim; ++
d)
4081 if (shape_function_data[shape_function].is_nonzero_shape_function_component[d])
4083 = fe_values->finite_element_output.shape_gradients[shape_function_data[shape_function].row_index[
d]][q_point];
4091 template <
int dim,
int spacedim>
4095 const unsigned int q_point)
const 4097 Assert (shape_function < fe_values->fe->dofs_per_cell,
4098 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
4105 = shape_function_data[shape_function].single_nonzero_component;
4110 return value_type();
4115 value_type return_value;
4116 const unsigned int comp =
4117 shape_function_data[shape_function].single_nonzero_component_index;
4118 return_value[value_type::unrolled_to_component_indices(comp)]
4119 = fe_values->finite_element_output.shape_values(snc,q_point);
4120 return return_value;
4124 value_type return_value;
4125 for (
unsigned int d = 0;
d < value_type::n_independent_components; ++
d)
4126 if (shape_function_data[shape_function].is_nonzero_shape_function_component[d])
4127 return_value[value_type::unrolled_to_component_indices(d)]
4128 = fe_values->finite_element_output.shape_values(shape_function_data[shape_function].row_index[d],q_point);
4129 return return_value;
4135 template <
int dim,
int spacedim>
4139 const unsigned int q_point)
const 4141 Assert (shape_function < fe_values->fe->dofs_per_cell,
4142 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
4146 const int snc = shape_function_data[shape_function].single_nonzero_component;
4151 return divergence_type();
4174 const unsigned int comp =
4175 shape_function_data[shape_function].single_nonzero_component_index;
4176 const unsigned int ii = value_type::unrolled_to_component_indices(comp)[0];
4177 const unsigned int jj = value_type::unrolled_to_component_indices(comp)[1];
4190 const ::Tensor<1, spacedim> &phi_grad = fe_values->finite_element_output.shape_gradients[snc][q_point];
4192 divergence_type return_value;
4193 return_value[ii] = phi_grad[jj];
4196 return_value[jj] = phi_grad[ii];
4198 return return_value;
4204 divergence_type return_value;
4205 return return_value;
4211 template <
int dim,
int spacedim>
4215 const unsigned int q_point)
const 4217 Assert (shape_function < fe_values->fe->dofs_per_cell,
4218 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
4225 = shape_function_data[shape_function].single_nonzero_component;
4230 return value_type();
4234 value_type return_value;
4235 const unsigned int comp =
4236 shape_function_data[shape_function].single_nonzero_component_index;
4238 return_value[indices] = fe_values->finite_element_output.shape_values(snc,q_point);
4239 return return_value;
4243 value_type return_value;
4244 for (
unsigned int d = 0;
d < dim*dim; ++
d)
4245 if (shape_function_data[shape_function].is_nonzero_shape_function_component[d])
4248 return_value[indices]
4249 = fe_values->finite_element_output.shape_values(shape_function_data[shape_function].row_index[d],q_point);
4251 return return_value;
4257 template <
int dim,
int spacedim>
4261 const unsigned int q_point)
const 4263 Assert (shape_function < fe_values->fe->dofs_per_cell,
4264 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
4268 const int snc = shape_function_data[shape_function].single_nonzero_component;
4273 return divergence_type();
4287 const unsigned int comp =
4288 shape_function_data[shape_function].single_nonzero_component_index;
4290 const unsigned int ii = indices[0];
4291 const unsigned int jj = indices[1];
4293 const ::Tensor<1, spacedim> &phi_grad = fe_values->finite_element_output.shape_gradients[snc][q_point];
4295 divergence_type return_value;
4297 return_value[ii] = phi_grad[jj];
4299 return return_value;
4304 divergence_type return_value;
4305 return return_value;
4311 template <
int dim,
int spacedim>
4315 const unsigned int q_point)
const 4317 Assert (shape_function < fe_values->fe->dofs_per_cell,
4318 ExcIndexRange (shape_function, 0, fe_values->fe->dofs_per_cell));
4322 const int snc = shape_function_data[shape_function].single_nonzero_component;
4327 return gradient_type();
4341 const unsigned int comp =
4342 shape_function_data[shape_function].single_nonzero_component_index;
4344 const unsigned int ii = indices[0];
4345 const unsigned int jj = indices[1];
4347 const ::Tensor<1, spacedim> &phi_grad = fe_values->finite_element_output.shape_gradients[snc][q_point];
4349 gradient_type return_value;
4350 return_value[ii][jj] = phi_grad;
4352 return return_value;
4357 gradient_type return_value;
4358 return return_value;
4370 template <
int dim,
int spacedim>
4378 0, fe_values_views_cache.scalars.size()));
4380 return fe_values_views_cache.scalars[scalar.
component];
4385 template <
int dim,
int spacedim>
4392 fe_values_views_cache.vectors.size(),
4394 0, fe_values_views_cache.vectors.size()));
4401 template <
int dim,
int spacedim>
4408 fe_values_views_cache.symmetric_second_order_tensors.size(),
4410 0, fe_values_views_cache.symmetric_second_order_tensors.size()));
4417 template <
int dim,
int spacedim>
4424 fe_values_views_cache.second_order_tensors.size(),
4426 0, fe_values_views_cache.second_order_tensors.size()));
4433 template <
int dim,
int spacedim>
4437 const unsigned int j)
const 4439 Assert (i < fe->dofs_per_cell,
4443 Assert (fe->is_primitive (i),
4444 ExcShapeFunctionNotPrimitive(i));
4445 Assert (present_cell.get() !=
nullptr,
4446 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4449 if (fe->is_primitive())
4450 return this->finite_element_output.shape_values(i,j);
4462 row = this->finite_element_output.shape_function_to_row_table[i * fe->n_components() + fe->system_to_component_index(i).first];
4463 return this->finite_element_output.shape_values(row, j);
4469 template <
int dim,
int spacedim>
4473 const unsigned int j,
4474 const unsigned int component)
const 4476 Assert (i < fe->dofs_per_cell,
4482 Assert (present_cell.get() !=
nullptr,
4483 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4488 if (fe->get_nonzero_components(i)[component] ==
false)
4495 row = this->finite_element_output.shape_function_to_row_table[i * fe->n_components() + component];
4496 return this->finite_element_output.shape_values(row, j);
4501 template <
int dim,
int spacedim>
4505 const unsigned int j)
const 4507 Assert (i < fe->dofs_per_cell,
4511 Assert (fe->is_primitive (i),
4512 ExcShapeFunctionNotPrimitive(i));
4513 Assert (present_cell.get() !=
nullptr,
4514 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4517 if (fe->is_primitive())
4518 return this->finite_element_output.shape_gradients[i][j];
4530 row = this->finite_element_output.shape_function_to_row_table[i * fe->n_components() + fe->system_to_component_index(i).first];
4531 return this->finite_element_output.shape_gradients[row][j];
4537 template <
int dim,
int spacedim>
4541 const unsigned int j,
4542 const unsigned int component)
const 4544 Assert (i < fe->dofs_per_cell,
4550 Assert (present_cell.get() !=
nullptr,
4551 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4555 if (fe->get_nonzero_components(i)[component] ==
false)
4562 row = this->finite_element_output.shape_function_to_row_table[i * fe->n_components() + component];
4563 return this->finite_element_output.shape_gradients[row][j];
4568 template <
int dim,
int spacedim>
4572 const unsigned int j)
const 4574 Assert (i < fe->dofs_per_cell,
4578 Assert (fe->is_primitive (i),
4579 ExcShapeFunctionNotPrimitive(i));
4580 Assert (present_cell.get() !=
nullptr,
4581 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4584 if (fe->is_primitive())
4585 return this->finite_element_output.shape_hessians[i][j];
4597 row = this->finite_element_output.shape_function_to_row_table[i * fe->n_components() + fe->system_to_component_index(i).first];
4598 return this->finite_element_output.shape_hessians[row][j];
4604 template <
int dim,
int spacedim>
4608 const unsigned int j,
4609 const unsigned int component)
const 4611 Assert (i < fe->dofs_per_cell,
4617 Assert (present_cell.get() !=
nullptr,
4618 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4622 if (fe->get_nonzero_components(i)[component] ==
false)
4629 row = this->finite_element_output.shape_function_to_row_table[i * fe->n_components() + component];
4630 return this->finite_element_output.shape_hessians[row][j];
4635 template <
int dim,
int spacedim>
4639 const unsigned int j)
const 4641 Assert (i < fe->dofs_per_cell,
4645 Assert (fe->is_primitive (i),
4646 ExcShapeFunctionNotPrimitive(i));
4647 Assert (present_cell.get() !=
nullptr,
4648 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4651 if (fe->is_primitive())
4652 return this->finite_element_output.shape_3rd_derivatives[i][j];
4664 row = this->finite_element_output.shape_function_to_row_table[i * fe->n_components() + fe->system_to_component_index(i).first];
4665 return this->finite_element_output.shape_3rd_derivatives[row][j];
4671 template <
int dim,
int spacedim>
4675 const unsigned int j,
4676 const unsigned int component)
const 4678 Assert (i < fe->dofs_per_cell,
4684 Assert (present_cell.get() !=
nullptr,
4685 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4689 if (fe->get_nonzero_components(i)[component] ==
false)
4696 row = this->finite_element_output.shape_function_to_row_table[i * fe->n_components() + component];
4697 return this->finite_element_output.shape_3rd_derivatives[row][j];
4702 template <
int dim,
int spacedim>
4712 template <
int dim,
int spacedim>
4722 template <
int dim,
int spacedim>
4727 return this->update_flags;
4732 template <
int dim,
int spacedim>
4734 const std::vector<Point<spacedim> > &
4739 Assert (present_cell.get() !=
nullptr,
4740 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4741 return this->mapping_output.quadrature_points;
4746 template <
int dim,
int spacedim>
4748 const std::vector<double> &
4753 Assert (present_cell.get() !=
nullptr,
4754 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4755 return this->mapping_output.JxW_values;
4760 template <
int dim,
int spacedim>
4762 const std::vector<DerivativeForm<1,dim,spacedim> > &
4767 Assert (present_cell.get() !=
nullptr,
4768 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4769 return this->mapping_output.jacobians;
4774 template <
int dim,
int spacedim>
4776 const std::vector<DerivativeForm<2,dim,spacedim> > &
4781 Assert (present_cell.get() !=
nullptr,
4782 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4783 return this->mapping_output.jacobian_grads;
4788 template <
int dim,
int spacedim>
4795 Assert (present_cell.get() !=
nullptr,
4796 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4797 return this->mapping_output.jacobian_pushed_forward_grads[i];
4802 template <
int dim,
int spacedim>
4804 const std::vector<Tensor<3,spacedim> > &
4809 Assert (present_cell.get() !=
nullptr,
4810 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4811 return this->mapping_output.jacobian_pushed_forward_grads;
4816 template <
int dim,
int spacedim>
4823 Assert (present_cell.get() !=
nullptr,
4824 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4825 return this->mapping_output.jacobian_2nd_derivatives[i];
4830 template <
int dim,
int spacedim>
4832 const std::vector<DerivativeForm<3,dim,spacedim> > &
4837 Assert (present_cell.get() !=
nullptr,
4838 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4839 return this->mapping_output.jacobian_2nd_derivatives;
4844 template <
int dim,
int spacedim>
4851 Assert (present_cell.get() !=
nullptr,
4852 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4853 return this->mapping_output.jacobian_pushed_forward_2nd_derivatives[i];
4858 template <
int dim,
int spacedim>
4860 const std::vector<Tensor<4,spacedim> > &
4865 Assert (present_cell.get() !=
nullptr,
4866 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4867 return this->mapping_output.jacobian_pushed_forward_2nd_derivatives;
4872 template <
int dim,
int spacedim>
4879 Assert (present_cell.get() !=
nullptr,
4880 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4881 return this->mapping_output.jacobian_3rd_derivatives[i];
4886 template <
int dim,
int spacedim>
4888 const std::vector<DerivativeForm<4,dim,spacedim> > &
4893 Assert (present_cell.get() !=
nullptr,
4894 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4895 return this->mapping_output.jacobian_3rd_derivatives;
4900 template <
int dim,
int spacedim>
4907 Assert (present_cell.get() !=
nullptr,
4908 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4909 return this->mapping_output.jacobian_pushed_forward_3rd_derivatives[i];
4914 template <
int dim,
int spacedim>
4916 const std::vector<Tensor<5,spacedim> > &
4921 Assert (present_cell.get() !=
nullptr,
4922 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4923 return this->mapping_output.jacobian_pushed_forward_3rd_derivatives;
4928 template <
int dim,
int spacedim>
4930 const std::vector<DerivativeForm<1,spacedim,dim> > &
4935 Assert (present_cell.get() !=
nullptr,
4936 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4937 return this->mapping_output.inverse_jacobians;
4942 template <
int dim,
int spacedim>
4949 Assert (i<this->mapping_output.quadrature_points.size(),
4950 ExcIndexRange(i, 0, this->mapping_output.quadrature_points.size()));
4951 Assert (present_cell.get() !=
nullptr,
4952 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4954 return this->mapping_output.quadrature_points[i];
4959 template <
int dim,
int spacedim>
4966 Assert (i<this->mapping_output.JxW_values.size(),
4967 ExcIndexRange(i, 0, this->mapping_output.JxW_values.size()));
4968 Assert (present_cell.get() !=
nullptr,
4969 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4971 return this->mapping_output.JxW_values[i];
4976 template <
int dim,
int spacedim>
4983 Assert (i<this->mapping_output.jacobians.size(),
4984 ExcIndexRange(i, 0, this->mapping_output.jacobians.size()));
4985 Assert (present_cell.get() !=
nullptr,
4986 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
4988 return this->mapping_output.jacobians[i];
4993 template <
int dim,
int spacedim>
5000 Assert (i<this->mapping_output.jacobian_grads.size(),
5001 ExcIndexRange(i, 0, this->mapping_output.jacobian_grads.size()));
5002 Assert (present_cell.get() !=
nullptr,
5003 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
5005 return this->mapping_output.jacobian_grads[i];
5010 template <
int dim,
int spacedim>
5017 Assert (i<this->mapping_output.inverse_jacobians.size(),
5018 ExcIndexRange(i, 0, this->mapping_output.inverse_jacobians.size()));
5019 Assert (present_cell.get() !=
nullptr,
5020 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
5022 return this->mapping_output.inverse_jacobians[i];
5027 template <
int dim,
int spacedim>
5034 Assert (i<this->mapping_output.normal_vectors.size(),
5035 ExcIndexRange(i, 0, this->mapping_output.normal_vectors.size()));
5036 Assert (present_cell.get() !=
nullptr,
5037 ExcMessage (
"FEValues object is not reinit'ed to any cell"));
5039 return this->mapping_output.normal_vectors[i];
5047 template <
int dim,
int spacedim>
5057 template <
int dim,
int spacedim>
5069 template <
int dim,
int spacedim>
5074 return present_face_index;
5080 template <
int dim,
int spacedim>
5090 template <
int dim,
int spacedim>
5100 template <
int dim,
int spacedim>
5110 template <
int dim,
int spacedim>
5115 Assert (i<this->mapping_output.boundary_forms.size(),
5116 ExcIndexRange(i, 0, this->mapping_output.boundary_forms.size()));
5120 return this->mapping_output.boundary_forms[i];
5125 DEAL_II_NAMESPACE_CLOSE
void get_function_third_derivatives(const InputVector &fe_function, std::vector< typename ProductType< third_derivative_type, typename InputVector::value_type >::type > &third_derivatives) const
Transformed quadrature weights.
void get_function_gradients(const InputVector &fe_function, std::vector< Tensor< 1, spacedim, typename InputVector::value_type > > &gradients) const
value_type value(const unsigned int shape_function, const unsigned int q_point) const
ProductType< Number, typename Scalar< dim, spacedim >::third_derivative_type >::type third_derivative_type
const DerivativeForm< 1, dim, spacedim > & jacobian(const unsigned int quadrature_point) const
const Tensor< 3, spacedim > & jacobian_pushed_forward_grad(const unsigned int quadrature_point) const
ProductType< Number, typename Vector< dim, spacedim >::third_derivative_type >::type third_derivative_type
CellSimilarity::Similarity cell_similarity
::Tensor< 1, spacedim > divergence_type
static const unsigned int dimension
Cache(const FEValuesBase< dim, spacedim > &fe_values)
const Tensor< 5, spacedim > & jacobian_pushed_forward_3rd_derivative(const unsigned int quadrature_point) const
unsigned int present_face_index
const FEValues< dim, spacedim > & get_present_fe_values() const
std::vector< ShapeFunctionData > shape_function_data
static ::ExceptionBase & ExcAccessToUninitializedField()
value_type value(const unsigned int shape_function, const unsigned int q_point) const
ProductType< Number, typename Tensor< 2, dim, spacedim >::gradient_type >::type gradient_type
static ::ExceptionBase & ExcFaceHasNoSubfaces()
std::vector<::FEValuesViews::Scalar< dim, spacedim > > scalars
const unsigned int dofs_per_cell
const unsigned int component
void get_function_symmetric_gradients_from_local_dof_values(const InputVector &dof_values, std::vector< typename OutputType< typename InputVector::value_type >::symmetric_gradient_type > &symmetric_gradients) const
void get_function_values(const InputVector &fe_function, std::vector< typename ProductType< value_type, typename InputVector::value_type >::type > &values) const
gradient_type gradient(const unsigned int shape_function, const unsigned int q_point) const
const Tensor< 3, spacedim > & shape_3rd_derivative(const unsigned int function_no, const unsigned int point_no) const
FEValuesBase(const unsigned int n_q_points, const unsigned int dofs_per_cell, const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe)
::Tensor< 3, spacedim > hessian_type
const Quadrature< dim-1 > quadrature
void get_function_third_derivatives(const InputVector &fe_function, std::vector< typename ProductType< third_derivative_type, typename InputVector::value_type >::type > &third_derivatives) const
static const unsigned int dimension
int single_nonzero_component
void get_function_values(const InputVector &fe_function, std::vector< typename InputVector::value_type > &values) const
::internal::CurlType< spacedim >::type curl_type
static ::ExceptionBase & ExcReinitCalledWithBoundaryFace()
Outer normal vector, not normalized.
const std::vector< DerivativeForm< 4, dim, spacedim > > & get_jacobian_3rd_derivatives() const
const FiniteElement< dim, spacedim > & get_fe() const
std::unique_ptr< const CellIteratorBase > present_cell
static ::ExceptionBase & ExcFEDontMatch()
Scalar & operator=(const Scalar< dim, spacedim > &)
void get_function_divergences(const InputVector &fe_function, std::vector< typename ProductType< divergence_type, typename InputVector::value_type >::type > &divergences) const
const unsigned int first_tensor_component
void get_function_laplacians(const InputVector &fe_function, std::vector< typename ProductType< value_type, typename InputVector::value_type >::type > &laplacians) const
UpdateFlags get_update_flags() const
third_derivative_type third_derivative(const unsigned int shape_function, const unsigned int q_point) const
Transformed quadrature points.
void do_reinit(const unsigned int face_no)
ProductType< Number, typename SymmetricTensor< 2, dim, spacedim >::divergence_type >::type divergence_type
std::size_t memory_consumption() const
::Tensor< 1, spacedim > gradient_type
::SymmetricTensor< 2, spacedim > value_type
unsigned int row_index[spacedim]
const DerivativeForm< 3, dim, spacedim > & jacobian_2nd_derivative(const unsigned int quadrature_point) const
void check_cell_similarity(const typename Triangulation< dim, spacedim >::cell_iterator &cell)
static const unsigned int space_dimension
::internal::FEValuesViews::Cache< dim, spacedim > fe_values_views_cache
const FEValuesViews::Scalar< dim, spacedim > & operator[](const FEValuesExtractors::Scalar &scalar) const
std::unique_ptr< typename FiniteElement< dim, spacedim >::InternalDataBase > fe_data
static ::ExceptionBase & ExcIndexRange(int arg1, int arg2, int arg3)
const DerivativeForm< 2, dim, spacedim > & jacobian_grad(const unsigned int quadrature_point) const
const std::vector< DerivativeForm< 1, dim, spacedim > > & get_jacobians() const
ProductType< Number, typename Vector< dim, spacedim >::hessian_type >::type hessian_type
void get_function_hessians(const InputVector &fe_function, std::vector< Tensor< 2, spacedim, typename InputVector::value_type > > &hessians) const
const Mapping< dim, spacedim > & get_mapping() const
static ::ExceptionBase & ExcShapeFunctionNotPrimitive(int arg1)
const DerivativeForm< 4, dim, spacedim > & jacobian_3rd_derivative(const unsigned int quadrature_point) const
void do_reinit(const unsigned int face_no, const unsigned int subface_no)
static const unsigned int integral_dimension
void reinit(const TriaIterator< DoFCellAccessor< DoFHandlerType< dim, spacedim >, level_dof_access > > &cell, const unsigned int face_no, const unsigned int subface_no)
double shape_value_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const
ProductType< Number, typename Vector< dim, spacedim >::gradient_type >::type gradient_type
void get_function_divergences_from_local_dof_values(const InputVector &dof_values, std::vector< typename OutputType< typename InputVector::value_type >::divergence_type > &divergences) const
const std::vector< Tensor< 5, spacedim > > & get_jacobian_pushed_forward_3rd_derivatives() const
void get_function_curls_from_local_dof_values(const InputVector &dof_values, std::vector< typename OutputType< typename InputVector::value_type >::curl_type > &curls) const
static const unsigned int integral_dimension
void get_function_laplacians(const InputVector &fe_function, std::vector< typename ProductType< value_type, typename InputVector::value_type >::type > &laplacians) const
void get_function_hessians_from_local_dof_values(const InputVector &dof_values, std::vector< typename OutputType< typename InputVector::value_type >::hessian_type > &hessians) const
ProductType< Number, typename Vector< dim, spacedim >::value_type >::type value_type
const std::vector< Point< spacedim > > & get_quadrature_points() const
ProductType< Number, typename Scalar< dim, spacedim >::gradient_type >::type gradient_type
const Point< spacedim > & quadrature_point(const unsigned int q) const
void get_function_gradients(const InputVector &fe_function, std::vector< typename ProductType< gradient_type, typename InputVector::value_type >::type > &gradients) const
const std::vector< DerivativeForm< 2, dim, spacedim > > & get_jacobian_grads() const
void get_function_hessians(const InputVector &fe_function, std::vector< typename ProductType< hessian_type, typename InputVector::value_type >::type > &hessians) const
void get_function_laplacians(const InputVector &fe_function, std::vector< typename InputVector::value_type > &laplacians) const
const SmartPointer< const FiniteElement< dim, spacedim >, FEValuesBase< dim, spacedim > > fe
static ::ExceptionBase & ExcMessage(std::string arg1)
const unsigned int first_tensor_component
void get_function_gradients_from_local_dof_values(const InputVector &dof_values, std::vector< typename OutputType< typename InputVector::value_type >::gradient_type > &gradients) const
::Tensor< 1, spacedim > value_type
ProductType< Number, typename Scalar< dim, spacedim >::hessian_type >::type hessian_type
#define DeclException1(Exception1, type1, outsequence)
const double & shape_value(const unsigned int function_no, const unsigned int point_no) const
CellSimilarity::Similarity get_cell_similarity() const
std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > mapping_data
Third derivatives of shape functions.
void get_function_third_derivatives(const InputVector &fe_function, std::vector< Tensor< 3, spacedim, typename InputVector::value_type > > &third_derivatives) const
UpdateFlags compute_update_flags(const UpdateFlags update_flags) const
std::vector< ShapeFunctionData > shape_function_data
void get_function_laplacians_from_local_dof_values(const InputVector &dof_values, std::vector< typename OutputType< typename InputVector::value_type >::laplacian_type > &laplacians) const
unsigned int get_face_index() const
#define Assert(cond, exc)
::Tensor< 2, spacedim > value_type
const std::vector< Tensor< 3, spacedim > > & get_jacobian_pushed_forward_grads() const
const DerivativeForm< 1, spacedim, dim > & inverse_jacobian(const unsigned int quadrature_point) const
void reinit(const TriaIterator< DoFCellAccessor< DoFHandlerType< dim, spacedim >, level_dof_access > > &cell, const unsigned int face_no)
Abstract base class for mapping classes.
const Quadrature< dim-1 > & get_quadrature() const
std::vector< ShapeFunctionData > shape_function_data
#define DeclExceptionMsg(Exception, defaulttext)
const Quadrature< dim > quadrature
const unsigned int first_vector_component
#define DeclException0(Exception0)
const std::vector< DerivativeForm< 1, spacedim, dim > > & get_inverse_jacobians() const
void invalidate_present_cell()
ProductType< Number, typename Scalar< dim, spacedim >::value_type >::type value_type
const SmartPointer< const Mapping< dim, spacedim >, FEValuesBase< dim, spacedim > > mapping
unsigned int single_nonzero_component_index
static const unsigned int integral_dimension
Vector & operator=(const Vector< dim, spacedim > &)
SymmetricTensor< 2, dim, Number > symmetrize(const Tensor< 2, dim, Number > &t)
::Tensor< 1, spacedim > divergence_type
const FEFaceValues< dim, spacedim > & get_present_fe_values() const
symmetric_gradient_type symmetric_gradient(const unsigned int shape_function, const unsigned int q_point) const
void get_function_hessians_from_local_dof_values(const InputVector &dof_values, std::vector< typename OutputType< typename InputVector::value_type >::hessian_type > &hessians) const
bool is_nonzero_shape_function_component[spacedim]
void get_function_symmetric_gradients(const InputVector &fe_function, std::vector< typename ProductType< symmetric_gradient_type, typename InputVector::value_type >::type > &symmetric_gradients) const
static const unsigned int integral_dimension
ProductType< Number, typename Vector< dim, spacedim >::divergence_type >::type divergence_type
Second derivatives of shape functions.
static ::ExceptionBase & ExcFENotPrimitive()
static ::ExceptionBase & ExcAccessToUninitializedField(char *arg1)
Gradient of volume element.
const std::vector< Tensor< 1, spacedim > > & get_all_normal_vectors() const
FEValuesBase & operator=(const FEValuesBase &)
const Tensor< 2, spacedim > & shape_hessian(const unsigned int function_no, const unsigned int point_no) const
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
const Tensor< 1, spacedim > & boundary_form(const unsigned int i) const
static TableIndices< rank_ > unrolled_to_component_indices(const unsigned int i)
divergence_type divergence(const unsigned int shape_function, const unsigned int q_point) const
std::size_t memory_consumption() const
ProductType< Number, typename Vector< dim, spacedim >::symmetric_gradient_type >::type symmetric_gradient_type
void get_function_hessians(const InputVector &fe_function, std::vector< typename ProductType< hessian_type, typename InputVector::value_type >::type > &hessians) const
const Quadrature< dim > & get_quadrature() const
const unsigned int n_quadrature_points
ProductType< Number, typename Vector< dim, spacedim >::value_type >::type laplacian_type
const std::vector< DerivativeForm< 3, dim, spacedim > > & get_jacobian_2nd_derivatives() const
const SmartPointer< const FEValuesBase< dim, spacedim > > fe_values
void get_function_curls(const InputVector &fe_function, std::vector< typename ProductType< curl_type, typename InputVector::value_type >::type > &curls) const
static const unsigned int dimension
const std::vector< Tensor< 4, spacedim > > & get_jacobian_pushed_forward_2nd_derivatives() const
::Tensor< 2, spacedim > hessian_type
boost::signals2::connection tria_listener_mesh_transform
static const unsigned int space_dimension
int single_nonzero_component
void get_function_laplacians_from_local_dof_values(const InputVector &dof_values, std::vector< typename OutputType< typename InputVector::value_type >::laplacian_type > &laplacians) const
const SmartPointer< const FEValuesBase< dim, spacedim > > fe_values
const std::vector< double > & get_JxW_values() const
unsigned int single_nonzero_component_index
::SymmetricTensor< 2, spacedim > symmetric_gradient_type
double JxW(const unsigned int quadrature_point) const
FEFaceValuesBase(const unsigned int n_q_points, 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)
ProductType< Number, typename SymmetricTensor< 2, dim, spacedim >::value_type >::type value_type
void initialize(const UpdateFlags update_flags)
Shape function gradients.
void get_function_third_derivatives_from_local_dof_values(const InputVector &dof_values, std::vector< typename OutputType< typename InputVector::value_type >::third_derivative_type > &third_derivatives) const
void maybe_invalidate_previous_present_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell)
::Tensor< 2, spacedim > gradient_type
Tensor< 3, spacedim > shape_3rd_derivative_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const
const FESubfaceValues< dim, spacedim > & get_present_fe_values() const
hessian_type hessian(const unsigned int shape_function, const unsigned int q_point) const
const SmartPointer< const FEValuesBase< dim, spacedim > > fe_values
void initialize(const UpdateFlags update_flags)
const SmartPointer< const FEValuesBase< dim, spacedim > > fe_values
void get_function_gradients_from_local_dof_values(const InputVector &dof_values, std::vector< typename OutputType< typename InputVector::value_type >::gradient_type > &gradients) const
curl_type curl(const unsigned int shape_function, const unsigned int q_point) const
static ::ExceptionBase & ExcNotImplemented()
ProductType< Number, typename Vector< dim, spacedim >::curl_type >::type curl_type
bool is_nonzero_shape_function_component
const Triangulation< dim, spacedim >::cell_iterator get_cell() const
void get_function_values(const InputVector &fe_function, std::vector< typename ProductType< value_type, typename InputVector::value_type >::type > &values) const
boost::signals2::connection tria_listener_refinement
const Tensor< 4, spacedim > & jacobian_pushed_forward_2nd_derivative(const unsigned int quadrature_point) const
::internal::FEValuesImplementation::FiniteElementRelatedData< dim, spacedim > finite_element_output
::Tensor< 3, spacedim > gradient_type
gradient_type gradient(const unsigned int shape_function, const unsigned int q_point) const
const std::vector< Tensor< 1, spacedim > > & get_boundary_forms() const
unsigned int n_components(const DoFHandler< dim, spacedim > &dh)
void initialize(const UpdateFlags update_flags)
third_derivative_type third_derivative(const unsigned int shape_function, const unsigned int q_point) const
::internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > mapping_output
FEValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const Quadrature< dim > &quadrature, const UpdateFlags update_flags)
void get_function_gradients(const InputVector &fe_function, std::vector< typename ProductType< gradient_type, typename InputVector::value_type >::type > &gradients) const
hessian_type hessian(const unsigned int shape_function, const unsigned int q_point) const
void get_function_third_derivatives_from_local_dof_values(const InputVector &dof_values, std::vector< typename OutputType< typename InputVector::value_type >::third_derivative_type > &third_derivatives) const
const std::vector< Tensor< 1, spacedim > > & get_normal_vectors() const
Tensor< 2, spacedim > shape_hessian_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const
void reinit(const TriaIterator< DoFCellAccessor< DoFHandlerType< dim, spacedim >, level_dof_access > > &cell)
ProductType< Number, typename Tensor< 2, dim, spacedim >::divergence_type >::type divergence_type
void get_function_values_from_local_dof_values(const InputVector &dof_values, std::vector< typename OutputType< typename InputVector::value_type >::value_type > &values) const
FESubfaceValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const Quadrature< dim-1 > &face_quadrature, const UpdateFlags update_flags)
int single_nonzero_component
::Tensor< 3, spacedim > third_derivative_type
ProductType< Number, typename Scalar< dim, spacedim >::value_type >::type laplacian_type
FEFaceValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const Quadrature< dim-1 > &quadrature, const UpdateFlags update_flags)
std::size_t memory_consumption() const
void get_function_values_from_local_dof_values(const InputVector &dof_values, std::vector< typename OutputType< typename InputVector::value_type >::value_type > &values) const
const Tensor< 1, spacedim > & shape_grad(const unsigned int function_no, const unsigned int quadrature_point) const
std::vector< ShapeFunctionData > shape_function_data
static ::ExceptionBase & ExcInternalError()
ProductType< Number, typename Tensor< 2, dim, spacedim >::value_type >::type value_type
::Tensor< 4, spacedim > third_derivative_type
const Tensor< 1, spacedim > & normal_vector(const unsigned int i) const
Tensor< 1, spacedim > shape_grad_component(const unsigned int function_no, const unsigned int point_no, const unsigned int component) const