13#ifndef dealii_fe_values_views_h
14#define dealii_fe_values_views_h
37template <
int dim,
int spacedim = dim>
67 template <
int dim,
typename NumberType =
double>
71 std::conditional_t<dim == 2, NumberType, std::monostate>>;
110 template <
int dim,
int spacedim = dim>
148 template <
typename Number>
157 template <
typename Number>
167 template <
typename Number>
177 template <
typename Number>
187 template <
typename Number>
275 value(const
unsigned int shape_function, const
unsigned int q_point) const;
289 const
unsigned int q_point) const;
303 const
unsigned int q_point) const;
317 const
unsigned int q_point) const;
336 template <typename Number>
375 template <class InputVector>
378 const InputVector &dof_values,
399 template <typename Number>
411 template <class InputVector>
414 const InputVector &dof_values,
435 template <typename Number>
447 template <class InputVector>
450 const InputVector &dof_values,
473 template <typename Number>
485 template <class InputVector>
488 const InputVector &dof_values,
511 template <typename Number>
524 template <class InputVector>
527 const InputVector &dof_values,
530 &third_derivatives) const;
582 template <
int dim,
int spacedim = dim>
628 using curl_type = typename ::internal::CurlType<spacedim>;
650 template <
typename Number>
659 template <
typename Number>
669 template <
typename Number>
679 template <
typename Number>
689 template <
typename Number>
699 template <
typename Number>
708 template <
typename Number>
718 template <
typename Number>
775 const unsigned int first_vector_component);
825 value(
const unsigned int shape_function,
const unsigned int q_point)
const;
842 const unsigned int q_point)
const;
861 const unsigned int q_point)
const;
875 const unsigned int q_point)
const;
898 curl(
const unsigned int shape_function,
const unsigned int q_point)
const;
912 const unsigned int q_point)
const;
926 const unsigned int q_point)
const;
945 template <
typename Number>
984 template <
class InputVector>
987 const InputVector &dof_values,
1008 template <
typename Number>
1020 template <
class InputVector>
1023 const InputVector &dof_values,
1050 template <
typename Number>
1052 get_function_symmetric_gradients(
1055 &symmetric_gradients)
const;
1063 template <
class InputVector>
1065 get_function_symmetric_gradients_from_local_dof_values(
1066 const InputVector &dof_values,
1069 &symmetric_gradients)
const;
1089 template <
typename Number>
1091 get_function_divergences(
1101 template <
class InputVector>
1103 get_function_divergences_from_local_dof_values(
1104 const InputVector &dof_values,
1106 &divergences)
const;
1126 template <
typename Number>
1137 template <
class InputVector>
1139 get_function_curls_from_local_dof_values(
1140 const InputVector &dof_values,
1161 template <
typename Number>
1173 template <
class InputVector>
1176 const InputVector &dof_values,
1198 template <
typename Number>
1210 template <
class InputVector>
1213 const InputVector &dof_values,
1235 template <
typename Number>
1248 template <
class InputVector>
1251 const InputVector &dof_values,
1254 &third_derivatives)
const;
1275 template <
int rank,
int dim,
int spacedim = dim>
1300 template <
int dim,
int spacedim>
1329 template <
typename Number>
1338 template <
typename Number>
1347 struct ShapeFunctionData
1357 bool is_nonzero_shape_function_component
1358 [value_type::n_independent_components];
1369 unsigned int row_index[value_type::n_independent_components];
1402 const unsigned int first_tensor_component);
1447 value(const
unsigned int shape_function, const
unsigned int q_point) const;
1463 divergence(const
unsigned int shape_function,
1464 const
unsigned int q_point) const;
1483 template <typename Number>
1485 get_function_values(const
ReadVector<Number> &fe_function,
1522 template <class InputVector>
1524 get_function_values_from_local_dof_values(
1525 const InputVector &dof_values,
1550 template <typename Number>
1552 get_function_divergences(
1562 template <class InputVector>
1564 get_function_divergences_from_local_dof_values(
1565 const InputVector &dof_values,
1567 &divergences) const;
1579 unsigned int first_tensor_component;
1584 std::vector<ShapeFunctionData> shape_function_data;
1588 template <
int rank,
int dim,
int spacedim = dim>
1609 template <
int dim,
int spacedim>
1636 template <
typename Number>
1645 template <
typename Number>
1655 template <
typename Number>
1664 struct ShapeFunctionData
1674 bool is_nonzero_shape_function_component
1675 [value_type::n_independent_components];
1686 unsigned int row_index[value_type::n_independent_components];
1736 const unsigned int first_tensor_component);
1769 value(
const unsigned int shape_function,
const unsigned int q_point)
const;
1786 const unsigned int q_point)
const;
1803 const unsigned int q_point)
const;
1822 template <
typename Number>
1861 template <
class InputVector>
1863 get_function_values_from_local_dof_values(
1864 const InputVector &dof_values,
1889 template <
typename Number>
1891 get_function_divergences(
1901 template <
class InputVector>
1903 get_function_divergences_from_local_dof_values(
1904 const InputVector &dof_values,
1906 &divergences)
const;
1924 template <
typename Number>
1926 get_function_gradients(
1936 template <
class InputVector>
1938 get_function_gradients_from_local_dof_values(
1939 const InputVector &dof_values,
1972 template <
int dim,
int spacedim,
typename Extractor>
1983 template <
int dim,
int spacedim>
1986 using type = typename ::FEValuesViews::Scalar<dim, spacedim>;
1996 template <
int dim,
int spacedim>
1999 using type = typename ::FEValuesViews::Vector<dim, spacedim>;
2009 template <
int dim,
int spacedim,
int rank>
2012 using type = typename ::FEValuesViews::Tensor<rank, dim, spacedim>;
2022 template <
int dim,
int spacedim,
int rank>
2026 typename ::FEValuesViews::SymmetricTensor<rank, dim, spacedim>;
2036 template <
int dim,
int spacedim>
2043 std::vector<Lazy<::FEValuesViews::Scalar<dim, spacedim>>>
scalars;
2044 std::vector<Lazy<::FEValuesViews::Vector<dim, spacedim>>>
vectors;
2048 std::vector<Lazy<::FEValuesViews::Tensor<2, dim, spacedim>>>
2065 template <
int dim,
int spacedim,
typename Extractor>
2066 using View = typename ::internal::FEValuesViews::
2067 ViewType<dim, spacedim, Extractor>::type;
2076 template <
int dim,
int spacedim>
2077 inline typename Scalar<dim, spacedim>::value_type
2078 Scalar<dim, spacedim>::value(
const unsigned int shape_function,
2079 const unsigned int q_point)
const
2085 "update_values"))));
2090 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
2091 return fe_values->finite_element_output.shape_values(
2092 shape_function_data[shape_function].row_index, q_point);
2099 template <
int dim,
int spacedim>
2100 inline typename Scalar<dim, spacedim>::gradient_type
2101 Scalar<dim, spacedim>::gradient(
const unsigned int shape_function,
2102 const unsigned int q_point)
const
2107 "update_gradients")));
2112 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
2113 return fe_values->finite_element_output
2114 .shape_gradients[shape_function_data[shape_function].row_index]
2117 return gradient_type();
2122 template <
int dim,
int spacedim>
2123 inline typename Scalar<dim, spacedim>::hessian_type
2124 Scalar<dim, spacedim>::hessian(
const unsigned int shape_function,
2125 const unsigned int q_point)
const
2130 "update_hessians")));
2135 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
2136 return fe_values->finite_element_output
2137 .shape_hessians[shape_function_data[shape_function].row_index][q_point];
2139 return hessian_type();
2144 template <
int dim,
int spacedim>
2145 inline typename Scalar<dim, spacedim>::third_derivative_type
2146 Scalar<dim, spacedim>::third_derivative(
const unsigned int shape_function,
2147 const unsigned int q_point)
const
2152 "update_3rd_derivatives")));
2157 if (shape_function_data[shape_function].is_nonzero_shape_function_component)
2158 return fe_values->finite_element_output
2159 .shape_3rd_derivatives[shape_function_data[shape_function].row_index]
2162 return third_derivative_type();
2167 template <
int dim,
int spacedim>
2170 const unsigned int q_point)
const
2179 shape_function_data[shape_function].single_nonzero_component;
2185 return_value[shape_function_data[shape_function]
2186 .single_nonzero_component_index] =
2187 fe_values->finite_element_output.shape_values(snc, q_point);
2188 return return_value;
2193 for (
unsigned int d = 0;
d < spacedim; ++
d)
2194 if (shape_function_data[shape_function]
2195 .is_nonzero_shape_function_component[d])
2196 return_value[
d] = fe_values->finite_element_output.shape_values(
2197 shape_function_data[shape_function].row_index[d], q_point);
2199 return return_value;
2205 template <
int dim,
int spacedim>
2208 const unsigned int q_point)
const
2213 "update_gradients")));
2217 shape_function_data[shape_function].single_nonzero_component;
2219 return gradient_type();
2222 gradient_type return_value;
2223 return_value[shape_function_data[shape_function]
2224 .single_nonzero_component_index] =
2225 fe_values->finite_element_output.shape_gradients[snc][q_point];
2226 return return_value;
2230 gradient_type return_value;
2231 for (
unsigned int d = 0;
d < spacedim; ++
d)
2232 if (shape_function_data[shape_function]
2233 .is_nonzero_shape_function_component[d])
2235 fe_values->finite_element_output.shape_gradients
2236 [shape_function_data[shape_function].row_index[
d]][q_point];
2238 return return_value;
2244 template <
int dim,
int spacedim>
2247 const unsigned int q_point)
const
2253 "update_gradients")));
2257 shape_function_data[shape_function].single_nonzero_component;
2259 return divergence_type();
2261 return fe_values->finite_element_output
2262 .shape_gradients[snc][q_point][shape_function_data[shape_function]
2263 .single_nonzero_component_index];
2266 divergence_type return_value = 0;
2267 for (
unsigned int d = 0;
d < spacedim; ++
d)
2268 if (shape_function_data[shape_function]
2269 .is_nonzero_shape_function_component[d])
2271 fe_values->finite_element_output.shape_gradients
2272 [shape_function_data[shape_function].row_index[
d]][q_point][
d];
2274 return return_value;
2280 template <
int dim,
int spacedim>
2283 const unsigned int q_point)
const
2290 "update_gradients")));
2293 shape_function_data[shape_function].single_nonzero_component;
2300 if constexpr (spacedim == 1)
2305 "Computing the curl in 1d is not a useful operation"));
2308 else if constexpr (spacedim == 2)
2312 curl_type return_value;
2315 if (shape_function_data[shape_function]
2316 .single_nonzero_component_index == 0)
2317 return_value = -1.0 * fe_values->finite_element_output
2318 .shape_gradients[snc][q_point][1];
2320 return_value = fe_values->finite_element_output
2321 .shape_gradients[snc][q_point][0];
2323 return return_value;
2327 curl_type return_value;
2331 if (shape_function_data[shape_function]
2332 .is_nonzero_shape_function_component[0])
2334 fe_values->finite_element_output
2335 .shape_gradients[shape_function_data[shape_function]
2336 .row_index[0]][q_point][1];
2338 if (shape_function_data[shape_function]
2339 .is_nonzero_shape_function_component[1])
2341 fe_values->finite_element_output
2342 .shape_gradients[shape_function_data[shape_function]
2343 .row_index[1]][q_point][0];
2345 return return_value;
2348 else if constexpr (spacedim == 3)
2352 curl_type return_value;
2354 switch (shape_function_data[shape_function]
2355 .single_nonzero_component_index)
2359 return_value[0] = 0;
2360 return_value[1] = fe_values->finite_element_output
2361 .shape_gradients[snc][q_point][2];
2363 -1.0 * fe_values->finite_element_output
2364 .shape_gradients[snc][q_point][1];
2365 return return_value;
2371 -1.0 * fe_values->finite_element_output
2372 .shape_gradients[snc][q_point][2];
2373 return_value[1] = 0;
2374 return_value[2] = fe_values->finite_element_output
2375 .shape_gradients[snc][q_point][0];
2376 return return_value;
2381 return_value[0] = fe_values->finite_element_output
2382 .shape_gradients[snc][q_point][1];
2384 -1.0 * fe_values->finite_element_output
2385 .shape_gradients[snc][q_point][0];
2386 return_value[2] = 0;
2387 return return_value;
2393 curl_type return_value;
2395 for (
unsigned int i = 0; i < dim; ++i)
2396 return_value[i] = 0.0;
2398 if (shape_function_data[shape_function]
2399 .is_nonzero_shape_function_component[0])
2402 fe_values->finite_element_output
2403 .shape_gradients[shape_function_data[shape_function]
2404 .row_index[0]][q_point][2];
2406 fe_values->finite_element_output
2407 .shape_gradients[shape_function_data[shape_function]
2408 .row_index[0]][q_point][1];
2411 if (shape_function_data[shape_function]
2412 .is_nonzero_shape_function_component[1])
2415 fe_values->finite_element_output
2416 .shape_gradients[shape_function_data[shape_function]
2417 .row_index[1]][q_point][2];
2419 fe_values->finite_element_output
2420 .shape_gradients[shape_function_data[shape_function]
2421 .row_index[1]][q_point][0];
2424 if (shape_function_data[shape_function]
2425 .is_nonzero_shape_function_component[2])
2428 fe_values->finite_element_output
2429 .shape_gradients[shape_function_data[shape_function]
2430 .row_index[2]][q_point][1];
2432 fe_values->finite_element_output
2433 .shape_gradients[shape_function_data[shape_function]
2434 .row_index[2]][q_point][0];
2437 return return_value;
2448 template <
int dim,
int spacedim>
2451 const unsigned int q_point)
const
2457 "update_hessians")));
2461 shape_function_data[shape_function].single_nonzero_component;
2463 return hessian_type();
2466 hessian_type return_value;
2467 return_value[shape_function_data[shape_function]
2468 .single_nonzero_component_index] =
2469 fe_values->finite_element_output.shape_hessians[snc][q_point];
2470 return return_value;
2474 hessian_type return_value;
2475 for (
unsigned int d = 0;
d < spacedim; ++
d)
2476 if (shape_function_data[shape_function]
2477 .is_nonzero_shape_function_component[d])
2479 fe_values->finite_element_output.shape_hessians
2480 [shape_function_data[shape_function].row_index[
d]][q_point];
2482 return return_value;
2488 template <
int dim,
int spacedim>
2491 const unsigned int q_point)
const
2497 "update_3rd_derivatives")));
2501 shape_function_data[shape_function].single_nonzero_component;
2503 return third_derivative_type();
2506 third_derivative_type return_value;
2507 return_value[shape_function_data[shape_function]
2508 .single_nonzero_component_index] =
2509 fe_values->finite_element_output.shape_3rd_derivatives[snc][q_point];
2510 return return_value;
2514 third_derivative_type return_value;
2515 for (
unsigned int d = 0;
d < spacedim; ++
d)
2516 if (shape_function_data[shape_function]
2517 .is_nonzero_shape_function_component[d])
2519 fe_values->finite_element_output.shape_3rd_derivatives
2520 [shape_function_data[shape_function].row_index[
d]][q_point];
2522 return return_value;
2534 inline ::SymmetricTensor<2, 1>
2535 symmetrize_single_row(
const unsigned int n, const ::Tensor<1, 1> &t)
2545 inline ::SymmetricTensor<2, 2>
2546 symmetrize_single_row(
const unsigned int n, const ::Tensor<1, 2> &t)
2552 return {{t[0], 0, t[1] / 2}};
2556 return {{0, t[1], t[0] / 2}};
2568 inline ::SymmetricTensor<2, 3>
2569 symmetrize_single_row(
const unsigned int n, const ::Tensor<1, 3> &t)
2575 return {{t[0], 0, 0, t[1] / 2, t[2] / 2, 0}};
2579 return {{0, t[1], 0, t[0] / 2, 0, t[2] / 2}};
2583 return {{0, 0, t[2], 0, t[0] / 2, t[1] / 2}};
2596 template <
int dim,
int spacedim>
2599 const unsigned int q_point)
const
2604 "update_gradients")));
2608 shape_function_data[shape_function].single_nonzero_component;
2610 return symmetric_gradient_type();
2612 return internal::symmetrize_single_row(
2613 shape_function_data[shape_function].single_nonzero_component_index,
2614 fe_values->finite_element_output.shape_gradients[snc][q_point]);
2617 gradient_type return_value;
2618 for (
unsigned int d = 0;
d < spacedim; ++
d)
2619 if (shape_function_data[shape_function]
2620 .is_nonzero_shape_function_component[d])
2622 fe_values->finite_element_output.shape_gradients
2623 [shape_function_data[shape_function].row_index[
d]][q_point];
2631 template <
int dim,
int spacedim>
2634 const unsigned int q_point)
const
2644 shape_function_data[shape_function].single_nonzero_component;
2654 const unsigned int comp =
2655 shape_function_data[shape_function].single_nonzero_component_index;
2656 return_value[value_type::unrolled_to_component_indices(comp)] =
2657 fe_values->finite_element_output.shape_values(snc, q_point);
2658 return return_value;
2663 for (
unsigned int d = 0;
d < value_type::n_independent_components; ++
d)
2664 if (shape_function_data[shape_function]
2665 .is_nonzero_shape_function_component[d])
2666 return_value[value_type::unrolled_to_component_indices(d)] =
2667 fe_values->finite_element_output.shape_values(
2668 shape_function_data[shape_function].row_index[d], q_point);
2669 return return_value;
2675 template <
int dim,
int spacedim>
2678 const unsigned int shape_function,
2679 const unsigned int q_point)
const
2684 "update_gradients")));
2687 shape_function_data[shape_function].single_nonzero_component;
2692 return divergence_type();
2715 const unsigned int comp =
2716 shape_function_data[shape_function].single_nonzero_component_index;
2717 const unsigned int ii =
2718 value_type::unrolled_to_component_indices(comp)[0];
2719 const unsigned int jj =
2720 value_type::unrolled_to_component_indices(comp)[1];
2733 const ::Tensor<1, spacedim> &phi_grad =
2734 fe_values->finite_element_output.shape_gradients[snc][q_point];
2736 divergence_type return_value;
2737 return_value[ii] = phi_grad[jj];
2740 return_value[jj] = phi_grad[ii];
2742 return return_value;
2747 divergence_type return_value;
2748 return return_value;
2754 template <
int dim,
int spacedim>
2757 const unsigned int q_point)
const
2767 shape_function_data[shape_function].single_nonzero_component;
2777 const unsigned int comp =
2778 shape_function_data[shape_function].single_nonzero_component_index;
2781 return_value[indices] =
2782 fe_values->finite_element_output.shape_values(snc, q_point);
2783 return return_value;
2788 for (
unsigned int d = 0;
d < dim * dim; ++
d)
2789 if (shape_function_data[shape_function]
2790 .is_nonzero_shape_function_component[d])
2794 return_value[indices] =
2795 fe_values->finite_element_output.shape_values(
2796 shape_function_data[shape_function].row_index[d], q_point);
2798 return return_value;
2804 template <
int dim,
int spacedim>
2807 const unsigned int q_point)
const
2812 "update_gradients")));
2815 shape_function_data[shape_function].single_nonzero_component;
2820 return divergence_type();
2834 const unsigned int comp =
2835 shape_function_data[shape_function].single_nonzero_component_index;
2838 const unsigned int ii = indices[0];
2839 const unsigned int jj = indices[1];
2841 const ::Tensor<1, spacedim> &phi_grad =
2842 fe_values->finite_element_output.shape_gradients[snc][q_point];
2844 divergence_type return_value;
2846 return_value[ii] = phi_grad[jj];
2848 return return_value;
2853 divergence_type return_value;
2854 return return_value;
2860 template <
int dim,
int spacedim>
2863 const unsigned int q_point)
const
2868 "update_gradients")));
2871 shape_function_data[shape_function].single_nonzero_component;
2876 return gradient_type();
2890 const unsigned int comp =
2891 shape_function_data[shape_function].single_nonzero_component_index;
2894 const unsigned int ii = indices[0];
2895 const unsigned int jj = indices[1];
2897 const ::Tensor<1, spacedim> &phi_grad =
2898 fe_values->finite_element_output.shape_gradients[snc][q_point];
2900 gradient_type return_value;
2901 return_value[ii][jj] = phi_grad;
2903 return return_value;
2908 gradient_type return_value;
2909 return return_value;
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
void get_function_laplacians(const ReadVector< Number > &fe_function, std::vector< solution_laplacian_type< Number > > &laplacians) const
typename ProductType< Number, hessian_type >::type solution_hessian_type
value_type value(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< 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_gradients(const ReadVector< Number > &fe_function, std::vector< solution_gradient_type< Number > > &gradients) const
typename ProductType< Number, value_type >::type solution_laplacian_type
Scalar & operator=(Scalar< dim, spacedim > &&) noexcept=default
third_derivative_type third_derivative(const unsigned int shape_function, const unsigned int q_point) const
ObserverPointer< const FEValuesBase< dim, spacedim > > fe_values
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_values(const ReadVector< Number > &fe_function, std::vector< solution_value_type< Number > > &values) const
void get_function_laplacians_from_local_dof_values(const InputVector &dof_values, std::vector< solution_laplacian_type< typename InputVector::value_type > > &laplacians) const
void get_function_gradients_from_local_dof_values(const InputVector &dof_values, std::vector< solution_gradient_type< typename InputVector::value_type > > &gradients) const
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_third_derivatives(const ReadVector< Number > &fe_function, std::vector< solution_third_derivative_type< Number > > &third_derivatives) const
void get_function_hessians(const ReadVector< Number > &fe_function, std::vector< solution_hessian_type< Number > > &hessians) 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
typename ProductType< Number, gradient_type >::type solution_gradient_type
divergence_type divergence(const unsigned int shape_function, const unsigned int q_point) const
unsigned int first_tensor_component
Tensor(const Tensor< 2, dim, spacedim > &)=delete
ObserverPointer< 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
unsigned int first_vector_component
hessian_type hessian(const unsigned int shape_function, const unsigned int q_point) const
typename ProductType< Number, hessian_type >::type solution_hessian_type
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
ObserverPointer< const FEValuesBase< dim, spacedim > > fe_values
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
typename ::internal::CurlType< spacedim > curl_type
Vector(Vector< dim, spacedim > &&)=default
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
std::conditional_t< rank_==1, Number, Tensor< rank_ - 1, dim, Number > > value_type
static constexpr TableIndices< rank_ > unrolled_to_component_indices(const unsigned int i)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_ASSERT_UNREACHABLE()
#define DEAL_II_NOT_IMPLEMENTED()
#define Assert(cond, exc)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcMessage(std::string arg1)
@ update_hessians
Second derivatives of shape functions.
@ update_values
Shape function values.
@ update_3rd_derivatives
Third derivatives of shape functions.
@ update_gradients
Shape function gradients.
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)
std::conditional_t< dim==3, Tensor< 1, 3, NumberType >, std::conditional_t< dim==2, NumberType, std::monostate > > CurlType
bool is_nonzero_shape_function_component
int single_nonzero_component
unsigned int single_nonzero_component_index
unsigned int single_nonzero_component_index
int single_nonzero_component
int single_nonzero_component
unsigned int single_nonzero_component_index
typename internal::ProductTypeImpl< std::decay_t< T >, std::decay_t< U > >::type type
std::vector< Lazy<::FEValuesViews::Vector< dim, spacedim > > > vectors
std::vector< Lazy<::FEValuesViews::SymmetricTensor< 2, dim, spacedim > > > symmetric_second_order_tensors
std::vector< Lazy<::FEValuesViews::Tensor< 2, dim, spacedim > > > second_order_tensors
std::vector< Lazy<::FEValuesViews::Scalar< dim, spacedim > > > scalars
constexpr SymmetricTensor< 2, dim, Number > symmetrize(const Tensor< 2, dim, Number > &t)