13#ifndef dealii_fe_interface_values_h
14#define dealii_fe_interface_values_h
30template <
int dim,
int spacedim>
43 template <
int dim,
int spacedim = dim>
62 template <
class InputVector,
class OutputVector>
65 OutputVector &local_dof_values)
const;
73 template <
int dim,
int spacedim = dim>
109 template <
typename Number>
118 template <
typename Number>
128 template <
typename Number>
138 template <
typename Number>
146 const unsigned int component);
174 const unsigned int interface_dof_index,
175 const unsigned int q_point)
const;
193 const unsigned int interface_dof_index,
194 const unsigned int q_point)
const;
215 const unsigned int q_point)
const;
229 const unsigned int q_point)
const;
243 const unsigned int q_point)
const;
257 const unsigned int q_point)
const;
278 const unsigned int q_point)
const;
292 const unsigned int q_point)
const;
307 const unsigned int q_point)
const;
335 template <
class InputVector>
338 const bool here_or_there,
339 const InputVector &fe_function,
365 template <
class InputVector>
368 const bool here_or_there,
369 const InputVector &local_dof_values,
393 template <
class InputVector>
396 const InputVector &fe_function,
407 template <
class InputVector>
410 const InputVector &local_dof_values,
427 template <
class InputVector>
430 const InputVector &fe_function,
441 template <
class InputVector>
444 const InputVector &local_dof_values,
461 template <
class InputVector>
464 const InputVector &fe_function,
475 template <
class InputVector>
478 const InputVector &local_dof_values,
496 template <
class InputVector>
499 const InputVector &fe_function,
502 &third_derivatives)
const;
511 template <
class InputVector>
514 const InputVector &local_dof_values,
517 &third_derivatives)
const;
539 template <
class InputVector>
542 const InputVector &fe_function,
553 template <
class InputVector>
556 const InputVector &local_dof_values,
573 template <
class InputVector>
576 const InputVector &fe_function,
587 template <
class InputVector>
590 const InputVector &local_dof_values,
607 template <
class InputVector>
610 const InputVector &fe_function,
621 template <
class InputVector>
624 const InputVector &local_dof_values,
642 template <
int dim,
int spacedim = dim>
681 template <
typename Number>
690 template <
typename Number>
700 template <
typename Number>
710 template <
typename Number>
718 const unsigned int first_vector_component);
746 const unsigned int interface_dof_index,
747 const unsigned int q_point)
const;
765 const unsigned int interface_dof_index,
766 const unsigned int q_point)
const;
787 const unsigned int q_point)
const;
800 const unsigned int q_point)
const;
809 const unsigned int q_point)
const;
823 const unsigned int q_point)
const;
832 const unsigned int q_point)
const;
846 const unsigned int q_point)
const;
866 const unsigned int q_point)
const;
879 const unsigned int q_point)
const;
894 const unsigned int q_point)
const;
903 const unsigned int q_point)
const;
931 template <
class InputVector>
934 const bool here_or_there,
935 const InputVector &fe_function,
961 template <
class InputVector>
964 const bool here_or_there,
965 const InputVector &local_dof_values,
989 template <
class InputVector>
992 const InputVector &fe_function,
1003 template <
class InputVector>
1006 const InputVector &local_dof_values,
1023 template <
class InputVector>
1026 const InputVector &fe_function,
1037 template <
class InputVector>
1040 const InputVector &local_dof_values,
1057 template <
class InputVector>
1060 const InputVector &fe_function,
1071 template <
class InputVector>
1074 const InputVector &local_dof_values,
1092 template <
class InputVector>
1095 const InputVector &fe_function,
1098 &third_derivatives)
const;
1107 template <
class InputVector>
1110 const InputVector &local_dof_values,
1113 &third_derivatives)
const;
1135 template <
class InputVector>
1138 const InputVector &fe_function,
1149 template <
class InputVector>
1152 const InputVector &local_dof_values,
1169 template <
class InputVector>
1172 const InputVector &fe_function,
1183 template <
class InputVector>
1186 const InputVector &local_dof_values,
1203 template <
class InputVector>
1206 const InputVector &fe_function,
1217 template <
class InputVector>
1220 const InputVector &local_dof_values,
1243 template <
int dim,
int spacedim,
typename Extractor>
1254 template <
int dim,
int spacedim>
1257 using type = typename ::FEInterfaceViews::Scalar<dim, spacedim>;
1267 template <
int dim,
int spacedim>
1270 using type = typename ::FEInterfaceViews::Vector<dim, spacedim>;
1281 template <
int dim,
int spacedim,
typename Extractor>
1282 using View = typename ::internal::FEInterfaceViews::
1283 ViewType<dim, spacedim, Extractor>::type;
1312template <
int dim,
int spacedim = dim>
1367 const UpdateFlags update_flags);
1377 const UpdateFlags update_flags);
1387 const UpdateFlags update_flags);
1397 const UpdateFlags update_flags);
1404 const UpdateFlags update_flags);
1522 template <
typename CellIteratorType,
typename CellNeighborIteratorType>
1525 const unsigned int face_no,
1526 const unsigned int sub_face_no,
1527 const CellNeighborIteratorType &cell_neighbor,
1528 const unsigned int face_no_neighbor,
1529 const unsigned int sub_face_no_neighbor,
1549 template <
typename CellIteratorType,
typename CellNeighborIteratorType>
1552 const CellNeighborIteratorType &cell_neighbor,
1581 template <
typename CellIteratorType>
1584 const unsigned int face_no,
1700 const std::vector<double> &
1715 normal(const
unsigned int q_point_index) const;
1737 const
std::vector<
Tensor<1, spacedim>> &
1747 std_cxx20::ranges::iota_view<
unsigned int,
unsigned int>
1756 const
Point<spacedim> &
1764 const
std::vector<
Point<spacedim>> &
1807 std_cxx20::ranges::iota_view<
unsigned int,
unsigned int>
1820 std::vector<
types::global_dof_index>
1835 std::array<
unsigned int, 2>
1870 const
unsigned int interface_dof_index,
1871 const
unsigned int q_point,
1872 const
unsigned int component = 0) const;
1885 const
unsigned int interface_dof_index,
1886 const
unsigned int q_point,
1887 const
unsigned int component = 0) const;
1918 const
unsigned int q_point,
1919 const
unsigned int component = 0) const;
1936 const
unsigned int q_point,
1937 const
unsigned int component = 0) const;
1955 const
unsigned int q_point,
1956 const
unsigned int component = 0) const;
1973 const
unsigned int q_point,
1974 const
unsigned int component = 0) const;
2000 const
unsigned int q_point,
2001 const
unsigned int component = 0) const;
2018 const
unsigned int q_point,
2019 const
unsigned int component = 0) const;
2037 const
unsigned int q_point,
2038 const
unsigned int component = 0) const;
2059 template <class InputVector>
2062 const InputVector &fe_function,
2063 std::vector<typename InputVector::value_type> &values) const;
2073 template <class InputVector>
2076 const InputVector &fe_function,
2077 std::vector<
Tensor<1, spacedim, typename InputVector::value_type>>
2087 template <class InputVector>
2090 const InputVector &fe_function,
2091 std::vector<
Tensor<2, spacedim, typename InputVector::value_type>>
2102 template <class InputVector>
2105 const InputVector &fe_function,
2106 std::vector<
Tensor<3, spacedim, typename InputVector::value_type>>
2107 &third_derivatives) const;
2124 template <class InputVector>
2127 const InputVector &fe_function,
2128 std::vector<typename InputVector::value_type> &values) const;
2137 template <class InputVector>
2140 const InputVector &fe_function,
2141 std::vector<
Tensor<1, spacedim, typename InputVector::value_type>>
2151 template <class InputVector>
2154 const InputVector &fe_function,
2155 std::vector<
Tensor<2, spacedim, typename InputVector::value_type>>
2199 std::vector<
std::pair<
types::global_dof_index,
std::array<
unsigned int, 2>>>
2282 "The current function doesn't make sense when used with a "
2283 "FEInterfaceValues object with hp-capabilities.");
2292 "The current function doesn't make sense when used with a "
2293 "FEInterfaceValues object without hp-capabilities.");
2313template <
int dim,
int spacedim>
2318 const UpdateFlags update_flags)
2346template <
int dim,
int spacedim>
2360template <
int dim,
int spacedim>
2366 : n_quadrature_points(quadrature.max_n_quadrature_points())
2368 , fe_face_values_neighbor(nullptr)
2369 , internal_fe_face_values(
2374 , internal_fe_subface_values(
2379 , internal_fe_face_values_neighbor(
2384 , internal_fe_subface_values_neighbor(
2393template <
int dim,
int spacedim>
2399 : n_quadrature_points(quadrature_collection.max_n_quadrature_points())
2401 , fe_face_values_neighbor(nullptr)
2402 , internal_hp_fe_face_values(
2405 quadrature_collection,
2407 , internal_hp_fe_subface_values(
2411 quadrature_collection,
2413 , internal_hp_fe_face_values_neighbor(
2416 quadrature_collection,
2418 , internal_hp_fe_subface_values_neighbor(
2422 quadrature_collection,
2430template <
int dim,
int spacedim>
2437 quadrature_collection,
2443template <
int dim,
int spacedim>
2444template <
typename CellIteratorType,
typename CellNeighborIteratorType>
2447 const CellIteratorType &cell,
2448 const unsigned int face_no,
2449 const unsigned int sub_face_no,
2450 const CellNeighborIteratorType &cell_neighbor,
2451 const unsigned int face_no_neighbor,
2452 const unsigned int sub_face_no_neighbor,
2453 const unsigned int q_index,
2454 const unsigned int mapping_index,
2455 const unsigned int fe_index_in,
2456 const unsigned int fe_index_neighbor_in)
2458 InterfaceData data(face_no,
2461 sub_face_no_neighbor);
2462 data.q_index = q_index;
2463 data.mapping_index = mapping_index;
2464 data.fe_index = fe_index_in;
2465 data.fe_index_neighbor = fe_index_neighbor_in;
2467 reinit(cell, cell_neighbor, data);
2472template <
int dim,
int spacedim>
2473template <
typename CellIteratorType,
typename CellNeighborIteratorType>
2476 const CellIteratorType &cell,
2477 const CellNeighborIteratorType &cell_neighbor,
2478 const InterfaceData &interface_data)
2480 Assert(internal_fe_face_values || internal_hp_fe_face_values,
2483 constexpr bool is_dof_cell_accessor =
2484 std::is_same_v<DoFCellAccessor<dim, spacedim, true>,
2485 typename CellIteratorType::AccessorType> ||
2486 std::is_same_v<DoFCellAccessor<dim, spacedim, false>,
2487 typename CellIteratorType::AccessorType>;
2489 constexpr bool is_dof_cell_accessor_neighbor =
2490 std::is_same_v<DoFCellAccessor<dim, spacedim, true>,
2491 typename CellNeighborIteratorType::AccessorType> ||
2492 std::is_same_v<DoFCellAccessor<dim, spacedim, false>,
2493 typename CellNeighborIteratorType::AccessorType>;
2495 const unsigned int face_no = interface_data.face_no;
2496 const unsigned int sub_face_no = interface_data.sub_face_no;
2497 const unsigned int face_no_neighbor = interface_data.face_no_neighbor;
2498 const unsigned int sub_face_no_neighbor = interface_data.sub_face_no_neighbor;
2500 unsigned int active_fe_index = 0;
2501 unsigned int active_fe_index_neighbor = 0;
2503 if (internal_fe_face_values)
2507 internal_fe_face_values->reinit(cell, face_no);
2512 internal_fe_subface_values->reinit(cell, face_no, sub_face_no);
2517 internal_fe_face_values_neighbor->reinit(cell_neighbor,
2519 fe_face_values_neighbor = internal_fe_face_values_neighbor.get();
2523 internal_fe_subface_values_neighbor->reinit(cell_neighbor,
2525 sub_face_no_neighbor);
2526 fe_face_values_neighbor = internal_fe_subface_values_neighbor.get();
2530 fe_face_values_neighbor->n_quadrature_points);
2532 const_cast<unsigned int &
>(this->n_quadrature_points) =
2535 else if (internal_hp_fe_face_values)
2537 active_fe_index = interface_data.fe_index;
2538 active_fe_index_neighbor =
2540 interface_data.fe_index :
2541 interface_data.fe_index_neighbor;
2545 if constexpr (is_dof_cell_accessor)
2546 active_fe_index = cell->active_fe_index();
2548 active_fe_index = 0;
2553 if constexpr (is_dof_cell_accessor_neighbor)
2554 active_fe_index_neighbor = cell_neighbor->active_fe_index();
2556 active_fe_index_neighbor = 0;
2559 unsigned int used_q_index = interface_data.q_index;
2560 unsigned int used_mapping_index = interface_data.mapping_index;
2565 if (internal_hp_fe_face_values->get_quadrature_collection().size() == 1)
2569 if (internal_hp_fe_face_values->get_mapping_collection().size() == 1)
2570 used_mapping_index = 0;
2577 if (internal_hp_fe_face_values
2578 ->get_quadrature_collection()[active_fe_index] ==
2579 internal_hp_fe_face_values
2580 ->get_quadrature_collection()[active_fe_index_neighbor])
2581 used_q_index = active_fe_index;
2588 const unsigned int dominated_fe_index =
2591 internal_hp_fe_face_values->get_fe_collection()
2593 {active_fe_index, active_fe_index_neighbor}) :
2600 "You called this function with 'q_index' left at its "
2601 "default value, but this can only work if one of "
2602 "the two finite elements adjacent to this face "
2603 "dominates the other. See the documentation "
2604 "of this function for more information of how "
2605 "to deal with this situation."));
2606 used_q_index = dominated_fe_index;
2613 "You called this function with 'mapping_index' left "
2614 "at its default value, but this can only work if one "
2615 "of the two finite elements adjacent to this face "
2616 "dominates the other. See the documentation "
2617 "of this function for more information of how "
2618 "to deal with this situation."));
2619 used_mapping_index = dominated_fe_index;
2625 const unsigned int used_q_index_neighbor =
2628 interface_data.q_index_neighbor;
2630 const unsigned int used_mapping_index_neighbor =
2631 (interface_data.mapping_index_neighbor ==
2633 used_mapping_index :
2634 interface_data.mapping_index_neighbor;
2639 internal_hp_fe_face_values->reinit(
2640 cell, face_no, used_q_index, used_mapping_index, active_fe_index);
2642 internal_hp_fe_face_values->get_present_fe_values());
2646 internal_hp_fe_subface_values->reinit(cell,
2654 internal_hp_fe_subface_values->get_present_fe_values());
2658 internal_hp_fe_face_values_neighbor->reinit(
2661 used_q_index_neighbor,
2662 used_mapping_index_neighbor,
2663 active_fe_index_neighbor);
2666 internal_hp_fe_face_values_neighbor->get_present_fe_values());
2670 internal_hp_fe_subface_values_neighbor->reinit(
2673 sub_face_no_neighbor,
2674 used_q_index_neighbor,
2675 used_mapping_index_neighbor,
2676 active_fe_index_neighbor);
2678 fe_face_values_neighbor =
2680 internal_hp_fe_subface_values_neighbor->get_present_fe_values());
2684 fe_face_values_neighbor->n_quadrature_points);
2686 const_cast<unsigned int &
>(this->n_quadrature_points) =
2691 if constexpr (is_dof_cell_accessor_neighbor && is_dof_cell_accessor)
2694 std::vector<types::global_dof_index> v_1(
2696 cell->get_active_or_mg_dof_indices(v_1);
2697 std::vector<types::global_dof_index> v_2(
2698 fe_face_values_neighbor->get_fe().n_dofs_per_cell());
2699 cell_neighbor->get_active_or_mg_dof_indices(v_2);
2701 interface_dof_data.resize(v_1.size() + v_2.size());
2705 for (
unsigned int i = 0; i < v_1.size(); ++i)
2722 const auto compare_interface_dofs = [](
const auto &interface_dof_1,
2723 const auto &interface_dof_2) {
2724 return (interface_dof_1.first < interface_dof_2.first);
2726 const auto interface_dof_data_end_after_v_1 =
2727 interface_dof_data.begin() + v_1.size();
2728 if (std::is_sorted(interface_dof_data.begin(),
2729 interface_dof_data_end_after_v_1,
2730 compare_interface_dofs) ==
false)
2731 std::sort(interface_dof_data.begin(),
2732 interface_dof_data_end_after_v_1,
2733 compare_interface_dofs);
2736 unsigned int idx = v_1.size();
2737 for (
unsigned int i = 0; i < v_2.size(); ++i)
2747 std::lower_bound(interface_dof_data.begin(),
2748 interface_dof_data_end_after_v_1,
2750 [](
const auto &interface_dof_1,
2751 const auto &index) {
2752 return (interface_dof_1.first < index);
2754 if ((it != interface_dof_data_end_after_v_1) && (it->first == v_2[i]))
2760 interface_dof_data[idx] = {v_2[i],
2765 interface_dof_data.resize(idx);
2773 const unsigned int n_dofs_per_cell_1 =
fe_face_values->dofs_per_cell;
2774 const unsigned int n_dofs_per_cell_2 =
2775 fe_face_values_neighbor->dofs_per_cell;
2777 interface_dof_data.resize(n_dofs_per_cell_1 + n_dofs_per_cell_2);
2779 for (
unsigned int i = 0; i < n_dofs_per_cell_1; ++i)
2785 for (
unsigned int i = 0; i < n_dofs_per_cell_2; ++i)
2787 interface_dof_data[i + n_dofs_per_cell_1] = {
2795template <
int dim,
int spacedim>
2796template <
typename CellIteratorType>
2799 const unsigned int face_no,
2800 const unsigned int q_index,
2801 const unsigned int mapping_index,
2802 const unsigned int fe_index)
2804 Assert(internal_fe_face_values || internal_hp_fe_face_values,
2807 if (internal_fe_face_values)
2811 Assert((mapping_index == 0 ||
2817 internal_fe_face_values->reinit(cell, face_no);
2819 fe_face_values_neighbor =
nullptr;
2821 else if (internal_hp_fe_face_values)
2823 internal_hp_fe_face_values->reinit(
2824 cell, face_no, q_index, mapping_index, fe_index);
2826 internal_hp_fe_face_values->get_present_fe_values());
2827 fe_face_values_neighbor =
nullptr;
2830 std::vector<types::global_dof_index> interface_dof_indices(
2833 if constexpr (std::is_same_v<
typename CellIteratorType::AccessorType,
2835 std::is_same_v<
typename CellIteratorType::AccessorType,
2838 cell->get_active_or_mg_dof_indices(interface_dof_indices);
2842 for (
auto &i : interface_dof_indices)
2846 interface_dof_data.resize(interface_dof_indices.size());
2847 for (
unsigned int i = 0; i < interface_dof_indices.size(); ++i)
2848 interface_dof_data[i] = {interface_dof_indices[i],
2854template <
int dim,
int spacedim>
2859 ExcMessage(
"This call requires a call to reinit() first."));
2865template <
int dim,
int spacedim>
2866const std::vector<double> &
2870 ExcMessage(
"This call requires a call to reinit() first."));
2876template <
int dim,
int spacedim>
2877const std::vector<Tensor<1, spacedim>> &
2881 ExcMessage(
"This call requires a call to reinit() first."));
2887template <
int dim,
int spacedim>
2891 Assert(!has_hp_capabilities(), ExcOnlyAvailableWithoutHP());
2892 return internal_fe_face_values->get_mapping();
2897template <
int dim,
int spacedim>
2901 Assert(!has_hp_capabilities(), ExcOnlyAvailableWithoutHP());
2902 return internal_fe_face_values->get_fe();
2907template <
int dim,
int spacedim>
2911 Assert(!has_hp_capabilities(), ExcOnlyAvailableWithoutHP());
2912 return internal_fe_face_values->get_quadrature();
2917template <
int dim,
int spacedim>
2921 Assert(has_hp_capabilities(), ExcOnlyAvailableWithHP());
2922 return internal_hp_fe_face_values->get_mapping_collection();
2927template <
int dim,
int spacedim>
2931 Assert(has_hp_capabilities(), ExcOnlyAvailableWithHP());
2932 return internal_hp_fe_face_values->get_fe_collection();
2937template <
int dim,
int spacedim>
2941 Assert(has_hp_capabilities(), ExcOnlyAvailableWithHP());
2942 return internal_hp_fe_face_values->get_quadrature_collection();
2947template <
int dim,
int spacedim>
2951 if (internal_hp_fe_face_values || internal_hp_fe_subface_values ||
2952 internal_hp_fe_face_values_neighbor ||
2953 internal_hp_fe_subface_values_neighbor)
2963 Assert(internal_fe_face_values || internal_fe_subface_values ||
2964 internal_fe_face_values_neighbor ||
2965 internal_fe_subface_values_neighbor,
2977template <
int dim,
int spacedim>
2978inline std_cxx20::ranges::iota_view<unsigned int, unsigned int>
2981 return std_cxx20::ranges::iota_view<unsigned int, unsigned int>(
2982 0U, n_quadrature_points);
2987template <
int dim,
int spacedim>
2990 const unsigned int q_point)
const
2993 ExcMessage(
"This call requires a call to reinit() first."));
2999template <
int dim,
int spacedim>
3000const std::vector<Point<spacedim>> &
3004 ExcMessage(
"This call requires a call to reinit() first."));
3010template <
int dim,
int spacedim>
3014 if (has_hp_capabilities())
3015 return internal_hp_fe_face_values->get_update_flags();
3017 return internal_fe_face_values->get_update_flags();
3022template <
int dim,
int spacedim>
3026 return get_fe_face_values(cell_index).get_cell();
3031template <
int dim,
int spacedim>
3034 const unsigned int cell_index)
const
3036 return get_fe_face_values(cell_index).get_face_number();
3041template <
int dim,
int spacedim>
3046 interface_dof_data.size() > 0,
3048 "n_current_interface_dofs() is only available after a call to reinit()."));
3049 return interface_dof_data.size();
3054template <
int dim,
int spacedim>
3055inline std_cxx20::ranges::iota_view<unsigned int, unsigned int>
3058 return std_cxx20::ranges::iota_view<unsigned int, unsigned int>(
3059 0U, n_current_interface_dofs());
3064template <
int dim,
int spacedim>
3068 return fe_face_values_neighbor ==
nullptr;
3073template <
int dim,
int spacedim>
3074std::vector<types::global_dof_index>
3077 std::vector<types::global_dof_index> interface_dof_indices(
3078 interface_dof_data.size());
3080 for (
const unsigned int i : dof_indices())
3081 interface_dof_indices[i] = interface_dof_data[i].first;
3083 return interface_dof_indices;
3088template <
int dim,
int spacedim>
3089std::array<unsigned int, 2>
3091 const unsigned int interface_dof_index)
const
3094 return interface_dof_data[interface_dof_index].second;
3099template <
int dim,
int spacedim>
3102 const unsigned int cell_index)
const
3106 cell_index == 0 || !at_boundary(),
3108 "You are on a boundary, so you can only ask for the first FEFaceValues object."));
3110 return (cell_index == 0) ? *
fe_face_values : *fe_face_values_neighbor;
3115template <
int dim,
int spacedim>
3119 return normal_vector(q_point_index);
3124template <
int dim,
int spacedim>
3127 const unsigned int q_point_index)
const
3134template <
int dim,
int spacedim>
3137 const bool here_or_there,
3138 const unsigned int interface_dof_index,
3139 const unsigned int q_point,
3140 const unsigned int component)
const
3142 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3145 return get_fe_face_values(0).shape_value_component(dof_pair[0],
3149 return get_fe_face_values(1).shape_value_component(dof_pair[1],
3157template <
int dim,
int spacedim>
3160 const bool here_or_there,
3161 const unsigned int interface_dof_index,
3162 const unsigned int q_point,
3163 const unsigned int component)
const
3165 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3170 value = get_fe_face_values(0).shape_grad_component(dof_pair[0],
3174 value = get_fe_face_values(1).shape_grad_component(dof_pair[1],
3181template <
int dim,
int spacedim>
3184 const unsigned int interface_dof_index,
3185 const unsigned int q_point,
3186 const unsigned int component)
const
3188 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3193 value += get_fe_face_values(0).shape_value_component(dof_pair[0],
3197 value -= get_fe_face_values(1).shape_value_component(dof_pair[1],
3205template <
int dim,
int spacedim>
3208 const unsigned int interface_dof_index,
3209 const unsigned int q_point,
3210 const unsigned int component)
const
3212 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3215 return get_fe_face_values(0).shape_value_component(dof_pair[0],
3222 value += 0.5 * get_fe_face_values(0).shape_value_component(dof_pair[0],
3226 value += 0.5 * get_fe_face_values(1).shape_value_component(dof_pair[1],
3235template <
int dim,
int spacedim>
3238 const unsigned int interface_dof_index,
3239 const unsigned int q_point,
3240 const unsigned int component)
const
3242 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3245 return get_fe_face_values(0).shape_grad_component(dof_pair[0],
3252 value += 0.5 * get_fe_face_values(0).shape_grad_component(dof_pair[0],
3256 value += 0.5 * get_fe_face_values(1).shape_grad_component(dof_pair[1],
3265template <
int dim,
int spacedim>
3268 const unsigned int interface_dof_index,
3269 const unsigned int q_point,
3270 const unsigned int component)
const
3272 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3275 return get_fe_face_values(0).shape_hessian_component(dof_pair[0],
3282 value += 0.5 * get_fe_face_values(0).shape_hessian_component(dof_pair[0],
3286 value += 0.5 * get_fe_face_values(1).shape_hessian_component(dof_pair[1],
3295template <
int dim,
int spacedim>
3298 const unsigned int interface_dof_index,
3299 const unsigned int q_point,
3300 const unsigned int component)
const
3302 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3305 return get_fe_face_values(0).shape_grad_component(dof_pair[0],
3312 value += get_fe_face_values(0).shape_grad_component(dof_pair[0],
3316 value -= get_fe_face_values(1).shape_grad_component(dof_pair[1],
3325template <
int dim,
int spacedim>
3328 const unsigned int interface_dof_index,
3329 const unsigned int q_point,
3330 const unsigned int component)
const
3332 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3335 return get_fe_face_values(0).shape_hessian_component(dof_pair[0],
3342 value += get_fe_face_values(0).shape_hessian_component(dof_pair[0],
3346 value -= get_fe_face_values(1).shape_hessian_component(dof_pair[1],
3355template <
int dim,
int spacedim>
3358 const unsigned int interface_dof_index,
3359 const unsigned int q_point,
3360 const unsigned int component)
const
3362 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3365 return get_fe_face_values(0).shape_3rd_derivative_component(dof_pair[0],
3372 value += get_fe_face_values(0).shape_3rd_derivative_component(dof_pair[0],
3376 value -= get_fe_face_values(1).shape_3rd_derivative_component(dof_pair[1],
3385template <
int dim,
int spacedim>
3386template <
class InputVector>
3389 const InputVector &fe_function,
3390 std::vector<typename InputVector::value_type> &values)
const
3395 this->operator[](scalar).get_jump_in_function_values(fe_function, values);
3400template <
int dim,
int spacedim>
3401template <
class InputVector>
3404 const InputVector &fe_function,
3411 this->operator[](scalar).get_jump_in_function_gradients(fe_function,
3417template <
int dim,
int spacedim>
3418template <
class InputVector>
3421 const InputVector &fe_function,
3428 this->operator[](scalar).get_jump_in_function_hessians(fe_function, hessians);
3433template <
int dim,
int spacedim>
3434template <
class InputVector>
3437 const InputVector &fe_function,
3439 &third_derivatives)
const
3444 this->operator[](scalar).get_jump_in_function_third_derivatives(
3445 fe_function, third_derivatives);
3450template <
int dim,
int spacedim>
3451template <
class InputVector>
3454 const InputVector &fe_function,
3455 std::vector<typename InputVector::value_type> &values)
const
3460 this->operator[](scalar).get_average_of_function_values(fe_function, values);
3465template <
int dim,
int spacedim>
3466template <
class InputVector>
3469 const InputVector &fe_function,
3476 this->operator[](scalar).get_average_of_function_gradients(fe_function,
3482template <
int dim,
int spacedim>
3483template <
class InputVector>
3486 const InputVector &fe_function,
3493 this->operator[](scalar).get_average_of_function_hessians(fe_function,
3500template <
int dim,
int spacedim>
3505 const unsigned int n_components =
3506 (this->has_hp_capabilities() ? this->get_fe_collection().n_components() :
3507 this->get_fe().n_components());
3515template <
int dim,
int spacedim>
3520 const unsigned int n_components =
3521 (this->has_hp_capabilities() ? this->get_fe_collection().n_components() :
3522 this->get_fe().n_components());
3523 const unsigned int n_vectors =
3538 template <
int dim,
int spacedim>
3540 const FEInterfaceValues<dim, spacedim> &fe_interface)
3541 : fe_interface(&fe_interface)
3546 template <
int dim,
int spacedim>
3547 Scalar<dim, spacedim>::Scalar(
3549 const unsigned int component)
3550 : Base<dim, spacedim>(fe_interface)
3556 template <
int dim,
int spacedim>
3557 template <
class InputVector,
class OutputVector>
3559 Base<dim, spacedim>::get_local_dof_values(
3560 const InputVector &dof_values,
3561 OutputVector &local_dof_values)
const
3563 const auto &interface_dof_indices =
3564 this->fe_interface->get_interface_dof_indices();
3566 AssertDimension(interface_dof_indices.size(), local_dof_values.size());
3568 for (
const unsigned int i : this->fe_interface->dof_indices())
3569 local_dof_values[i] = dof_values(interface_dof_indices[i]);
3574 template <
int dim,
int spacedim>
3575 typename Scalar<dim, spacedim>::value_type
3576 Scalar<dim, spacedim>::value(
const bool here_or_there,
3577 const unsigned int interface_dof_index,
3578 const unsigned int q_point)
const
3580 const auto dof_pair =
3581 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3584 return (*(this->fe_interface->fe_face_values))[extractor].value(
3585 dof_pair[0], q_point);
3588 return (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
3589 dof_pair[1], q_point);
3596 template <
int dim,
int spacedim>
3597 typename Scalar<dim, spacedim>::gradient_type
3598 Scalar<dim, spacedim>::gradient(
const bool here_or_there,
3599 const unsigned int interface_dof_index,
3600 const unsigned int q_point)
const
3602 const auto dof_pair =
3603 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3605 gradient_type
value;
3608 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
3609 dof_pair[0], q_point);
3612 return (*(this->fe_interface->fe_face_values_neighbor))[extractor]
3613 .gradient(dof_pair[1], q_point);
3620 template <
int dim,
int spacedim>
3621 typename Scalar<dim, spacedim>::value_type
3622 Scalar<dim, spacedim>::jump_in_values(
const unsigned int interface_dof_index,
3623 const unsigned int q_point)
const
3625 const auto dof_pair =
3626 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3632 (*(this->fe_interface->fe_face_values))[extractor].
value(dof_pair[0],
3637 (*(this->fe_interface->fe_face_values_neighbor))[extractor].
value(
3638 dof_pair[1], q_point);
3645 template <
int dim,
int spacedim>
3646 typename Scalar<dim, spacedim>::value_type
3647 Scalar<dim, spacedim>::average_of_values(
3648 const unsigned int interface_dof_index,
3649 const unsigned int q_point)
const
3651 const auto dof_pair =
3652 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3654 if (this->fe_interface->at_boundary())
3655 return (*(this->fe_interface->fe_face_values))[extractor].value(
3656 dof_pair[0], q_point);
3663 (*(this->fe_interface->fe_face_values))[extractor].
value(dof_pair[0],
3668 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor].
value(
3669 dof_pair[1], q_point);
3676 template <
int dim,
int spacedim>
3677 typename Scalar<dim, spacedim>::gradient_type
3678 Scalar<dim, spacedim>::average_of_gradients(
3679 const unsigned int interface_dof_index,
3680 const unsigned int q_point)
const
3682 const auto dof_pair =
3683 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3685 if (this->fe_interface->at_boundary())
3686 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
3687 dof_pair[0], q_point);
3689 gradient_type
value;
3694 (*(this->fe_interface->fe_face_values))[extractor].
gradient(dof_pair[0],
3698 value += 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor]
3706 template <
int dim,
int spacedim>
3707 typename Scalar<dim, spacedim>::gradient_type
3708 Scalar<dim, spacedim>::jump_in_gradients(
3709 const unsigned int interface_dof_index,
3710 const unsigned int q_point)
const
3712 const auto dof_pair =
3713 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3715 if (this->fe_interface->at_boundary())
3716 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
3717 dof_pair[0], q_point);
3719 gradient_type
value;
3723 (*(this->fe_interface->fe_face_values))[extractor].
gradient(dof_pair[0],
3728 (*(this->fe_interface->fe_face_values_neighbor))[extractor].
gradient(
3729 dof_pair[1], q_point);
3736 template <
int dim,
int spacedim>
3737 typename Scalar<dim, spacedim>::hessian_type
3738 Scalar<dim, spacedim>::average_of_hessians(
3739 const unsigned int interface_dof_index,
3740 const unsigned int q_point)
const
3742 const auto dof_pair =
3743 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3745 if (this->fe_interface->at_boundary())
3746 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
3747 dof_pair[0], q_point);
3754 (*(this->fe_interface->fe_face_values))[extractor].
hessian(dof_pair[0],
3758 value += 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor]
3759 .
hessian(dof_pair[1], q_point);
3766 template <
int dim,
int spacedim>
3767 typename Scalar<dim, spacedim>::third_derivative_type
3768 Scalar<dim, spacedim>::jump_in_third_derivatives(
3769 const unsigned int interface_dof_index,
3770 const unsigned int q_point)
const
3772 const auto dof_pair =
3773 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3775 if (this->fe_interface->at_boundary())
3776 return (*(this->fe_interface->fe_face_values))[extractor]
3777 .third_derivative(dof_pair[0], q_point);
3779 third_derivative_type
value;
3783 (*(this->fe_interface->fe_face_values))[extractor].third_derivative(
3784 dof_pair[0], q_point);
3787 value -= (*(this->fe_interface->fe_face_values_neighbor))[extractor]
3788 .third_derivative(dof_pair[1], q_point);
3795 template <
int dim,
int spacedim>
3796 typename Scalar<dim, spacedim>::hessian_type
3797 Scalar<dim, spacedim>::jump_in_hessians(
3798 const unsigned int interface_dof_index,
3799 const unsigned int q_point)
const
3801 const auto dof_pair =
3802 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3804 if (this->fe_interface->at_boundary())
3805 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
3806 dof_pair[0], q_point);
3812 (*(this->fe_interface->fe_face_values))[extractor].
hessian(dof_pair[0],
3817 (*(this->fe_interface->fe_face_values_neighbor))[extractor].
hessian(
3818 dof_pair[1], q_point);
3825 template <
int dim,
int spacedim>
3826 template <
class InputVector>
3828 Scalar<dim, spacedim>::get_function_values_from_local_dof_values(
3829 const bool here_or_there,
3830 const InputVector &local_dof_values,
3831 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3834 AssertDimension(values.size(), this->fe_interface->n_quadrature_points);
3836 for (
const auto dof_index : this->fe_interface->dof_indices())
3837 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
3840 values[q_index] = 0.;
3842 values[q_index] += local_dof_values[dof_index] *
3843 value(here_or_there, dof_index, q_index);
3849 template <
int dim,
int spacedim>
3850 template <
class InputVector>
3852 Scalar<dim, spacedim>::get_function_values(
3853 const bool here_or_there,
3854 const InputVector &fe_function,
3855 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3858 std::vector<typename InputVector::value_type> local_dof_values(
3859 this->fe_interface->n_current_interface_dofs());
3860 this->get_local_dof_values(fe_function, local_dof_values);
3862 get_function_values_from_local_dof_values(here_or_there,
3869 template <
int dim,
int spacedim>
3870 template <
class InputVector>
3872 Scalar<dim, spacedim>::get_jump_in_function_values_from_local_dof_values(
3873 const InputVector &local_dof_values,
3874 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3877 AssertDimension(values.size(), this->fe_interface->n_quadrature_points);
3879 for (
const auto dof_index : this->fe_interface->dof_indices())
3880 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
3883 values[q_index] = 0.;
3886 local_dof_values[dof_index] * jump_in_values(dof_index, q_index);
3892 template <
int dim,
int spacedim>
3893 template <
class InputVector>
3895 Scalar<dim, spacedim>::get_jump_in_function_values(
3896 const InputVector &fe_function,
3897 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3900 std::vector<typename InputVector::value_type> local_dof_values(
3901 this->fe_interface->n_current_interface_dofs());
3902 this->get_local_dof_values(fe_function, local_dof_values);
3904 get_jump_in_function_values_from_local_dof_values(local_dof_values, values);
3909 template <
int dim,
int spacedim>
3910 template <
class InputVector>
3912 Scalar<dim, spacedim>::get_jump_in_function_gradients_from_local_dof_values(
3913 const InputVector &local_dof_values,
3914 std::vector<solution_gradient_type<typename InputVector::value_type>>
3919 for (
const auto dof_index : this->fe_interface->dof_indices())
3920 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
3926 local_dof_values[dof_index] * jump_in_gradients(dof_index, q_index);
3932 template <
int dim,
int spacedim>
3933 template <
class InputVector>
3935 Scalar<dim, spacedim>::get_jump_in_function_gradients(
3936 const InputVector &fe_function,
3937 std::vector<solution_gradient_type<typename InputVector::value_type>>
3940 std::vector<typename InputVector::value_type> local_dof_values(
3941 this->fe_interface->n_current_interface_dofs());
3942 this->get_local_dof_values(fe_function, local_dof_values);
3944 get_jump_in_function_gradients_from_local_dof_values(local_dof_values,
3950 template <
int dim,
int spacedim>
3951 template <
class InputVector>
3953 Scalar<dim, spacedim>::get_average_of_function_values_from_local_dof_values(
3954 const InputVector &local_dof_values,
3955 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3958 AssertDimension(values.size(), this->fe_interface->n_quadrature_points);
3960 for (
const auto dof_index : this->fe_interface->dof_indices())
3961 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
3964 values[q_index] = 0.;
3967 local_dof_values[dof_index] * average_of_values(dof_index, q_index);
3973 template <
int dim,
int spacedim>
3974 template <
class InputVector>
3976 Scalar<dim, spacedim>::get_average_of_function_values(
3977 const InputVector &fe_function,
3978 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3981 std::vector<typename InputVector::value_type> local_dof_values(
3982 this->fe_interface->n_current_interface_dofs());
3983 this->get_local_dof_values(fe_function, local_dof_values);
3985 get_average_of_function_values_from_local_dof_values(local_dof_values,
3991 template <
int dim,
int spacedim>
3992 template <
class InputVector>
3994 Scalar<dim, spacedim>::
3995 get_average_of_function_gradients_from_local_dof_values(
3996 const InputVector &local_dof_values,
3997 std::vector<solution_gradient_type<typename InputVector::value_type>>
4002 for (
const auto dof_index : this->fe_interface->dof_indices())
4003 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4008 gradients[q_index] += local_dof_values[dof_index] *
4009 average_of_gradients(dof_index, q_index);
4015 template <
int dim,
int spacedim>
4016 template <
class InputVector>
4018 Scalar<dim, spacedim>::get_average_of_function_gradients(
4019 const InputVector &fe_function,
4020 std::vector<solution_gradient_type<typename InputVector::value_type>>
4023 std::vector<typename InputVector::value_type> local_dof_values(
4024 this->fe_interface->n_current_interface_dofs());
4025 this->get_local_dof_values(fe_function, local_dof_values);
4027 get_average_of_function_gradients_from_local_dof_values(local_dof_values,
4033 template <
int dim,
int spacedim>
4034 template <
class InputVector>
4036 Scalar<dim, spacedim>::get_jump_in_function_hessians_from_local_dof_values(
4037 const InputVector &local_dof_values,
4038 std::vector<solution_hessian_type<typename InputVector::value_type>>
4043 for (
const auto dof_index : this->fe_interface->dof_indices())
4044 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4050 local_dof_values[dof_index] * jump_in_hessians(dof_index, q_index);
4056 template <
int dim,
int spacedim>
4057 template <
class InputVector>
4059 Scalar<dim, spacedim>::get_jump_in_function_hessians(
4060 const InputVector &fe_function,
4061 std::vector<solution_hessian_type<typename InputVector::value_type>>
4064 std::vector<typename InputVector::value_type> local_dof_values(
4065 this->fe_interface->n_current_interface_dofs());
4066 this->get_local_dof_values(fe_function, local_dof_values);
4068 get_jump_in_function_hessians_from_local_dof_values(local_dof_values,
4074 template <
int dim,
int spacedim>
4075 template <
class InputVector>
4077 Scalar<dim, spacedim>::get_average_of_function_hessians_from_local_dof_values(
4078 const InputVector &local_dof_values,
4079 std::vector<solution_hessian_type<typename InputVector::value_type>>
4084 for (
const unsigned int dof_index : this->fe_interface->dof_indices())
4085 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4090 hessians[q_index] += local_dof_values[dof_index] *
4091 average_of_hessians(dof_index, q_index);
4097 template <
int dim,
int spacedim>
4098 template <
class InputVector>
4100 Scalar<dim, spacedim>::get_average_of_function_hessians(
4101 const InputVector &fe_function,
4102 std::vector<solution_hessian_type<typename InputVector::value_type>>
4105 std::vector<typename InputVector::value_type> local_dof_values(
4106 this->fe_interface->n_current_interface_dofs());
4107 this->get_local_dof_values(fe_function, local_dof_values);
4109 get_average_of_function_hessians_from_local_dof_values(local_dof_values,
4115 template <
int dim,
int spacedim>
4116 template <
class InputVector>
4118 Scalar<dim, spacedim>::
4119 get_jump_in_function_third_derivatives_from_local_dof_values(
4120 const InputVector &local_dof_values,
4122 solution_third_derivative_type<typename InputVector::value_type>>
4123 &third_derivatives)
const
4126 this->fe_interface->n_quadrature_points);
4128 for (
const unsigned int dof_index : this->fe_interface->dof_indices())
4129 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4132 third_derivatives[q_index] = 0.;
4134 third_derivatives[q_index] +=
4135 local_dof_values[dof_index] *
4136 jump_in_third_derivatives(dof_index, q_index);
4142 template <
int dim,
int spacedim>
4143 template <
class InputVector>
4145 Scalar<dim, spacedim>::get_jump_in_function_third_derivatives(
4146 const InputVector &fe_function,
4148 solution_third_derivative_type<typename InputVector::value_type>>
4149 &third_derivatives)
const
4151 std::vector<typename InputVector::value_type> local_dof_values(
4152 this->fe_interface->n_current_interface_dofs());
4153 this->get_local_dof_values(fe_function, local_dof_values);
4155 get_jump_in_function_third_derivatives_from_local_dof_values(
4156 local_dof_values, third_derivatives);
4161 template <
int dim,
int spacedim>
4164 const unsigned int first_vector_component)
4165 : Base<dim, spacedim>(fe_interface)
4166 , extractor(first_vector_component)
4171 template <
int dim,
int spacedim>
4174 const unsigned int interface_dof_index,
4175 const unsigned int q_point)
const
4177 const auto dof_pair =
4178 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4181 return (*(this->fe_interface->fe_face_values))[extractor].value(
4182 dof_pair[0], q_point);
4185 return (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
4186 dof_pair[1], q_point);
4193 template <
int dim,
int spacedim>
4196 const unsigned int interface_dof_index,
4197 const unsigned int q_point)
const
4199 const auto dof_pair =
4200 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4202 gradient_type
value;
4205 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
4206 dof_pair[0], q_point);
4209 return (*(this->fe_interface->fe_face_values_neighbor))[extractor]
4210 .gradient(dof_pair[1], q_point);
4217 template <
int dim,
int spacedim>
4220 const unsigned int q_point)
const
4222 const auto dof_pair =
4223 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4229 (*(this->fe_interface->fe_face_values))[extractor].
value(dof_pair[0],
4234 (*(this->fe_interface->fe_face_values_neighbor))[extractor].
value(
4235 dof_pair[1], q_point);
4242 template <
int dim,
int spacedim>
4245 const unsigned int interface_dof_index,
4246 const unsigned int q_point)
const
4248 const auto dof_pair =
4249 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4251 if (this->fe_interface->at_boundary())
4252 return (*(this->fe_interface->fe_face_values))[extractor].value(
4253 dof_pair[0], q_point);
4260 (*(this->fe_interface->fe_face_values))[extractor].
value(dof_pair[0],
4265 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor].
value(
4266 dof_pair[1], q_point);
4273 template <
int dim,
int spacedim>
4276 const unsigned int interface_dof_index,
4277 const unsigned int q_point)
const
4279 const auto dof_pair =
4280 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4282 if (this->fe_interface->at_boundary())
4283 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
4284 dof_pair[0], q_point);
4286 gradient_type
value;
4291 (*(this->fe_interface->fe_face_values))[extractor].
gradient(dof_pair[0],
4295 value += 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor]
4303 template <
int dim,
int spacedim>
4306 const unsigned int interface_dof_index,
4307 const unsigned int q_point)
const
4309 const auto dof_pair =
4310 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4312 if (this->fe_interface->at_boundary())
4313 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
4314 dof_pair[0], q_point);
4316 gradient_type
value;
4320 (*(this->fe_interface->fe_face_values))[extractor].
gradient(dof_pair[0],
4325 (*(this->fe_interface->fe_face_values_neighbor))[extractor].
gradient(
4326 dof_pair[1], q_point);
4333 template <
int dim,
int spacedim>
4336 const unsigned int q_point)
const
4338 return jump_in_gradients(interface_dof_index, q_point);
4343 template <
int dim,
int spacedim>
4346 const unsigned int interface_dof_index,
4347 const unsigned int q_point)
const
4349 const auto dof_pair =
4350 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4352 if (this->fe_interface->at_boundary())
4353 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
4354 dof_pair[0], q_point);
4361 (*(this->fe_interface->fe_face_values))[extractor].
hessian(dof_pair[0],
4365 value += 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor]
4366 .
hessian(dof_pair[1], q_point);
4373 template <
int dim,
int spacedim>
4376 const unsigned int q_point)
const
4378 return average_of_hessians(interface_dof_index, q_point);
4383 template <
int dim,
int spacedim>
4386 const unsigned int interface_dof_index,
4387 const unsigned int q_point)
const
4389 const auto dof_pair =
4390 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4392 if (this->fe_interface->at_boundary())
4393 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
4394 dof_pair[0], q_point);
4400 (*(this->fe_interface->fe_face_values))[extractor].
hessian(dof_pair[0],
4405 (*(this->fe_interface->fe_face_values_neighbor))[extractor].
hessian(
4406 dof_pair[1], q_point);
4413 template <
int dim,
int spacedim>
4416 const unsigned int q_point)
const
4418 return jump_in_hessians(interface_dof_index, q_point);
4423 template <
int dim,
int spacedim>
4426 const unsigned int interface_dof_index,
4427 const unsigned int q_point)
const
4429 const auto dof_pair =
4430 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4432 if (this->fe_interface->at_boundary())
4433 return (*(this->fe_interface->fe_face_values))[extractor]
4434 .third_derivative(dof_pair[0], q_point);
4436 third_derivative_type
value;
4440 (*(this->fe_interface->fe_face_values))[extractor].third_derivative(
4441 dof_pair[0], q_point);
4444 value -= (*(this->fe_interface->fe_face_values_neighbor))[extractor]
4445 .third_derivative(dof_pair[1], q_point);
4452 template <
int dim,
int spacedim>
4453 template <
class InputVector>
4456 const bool here_or_there,
4457 const InputVector &local_dof_values,
4458 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4461 AssertDimension(values.size(), this->fe_interface->n_quadrature_points);
4463 for (
const auto dof_index : this->fe_interface->dof_indices())
4464 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4467 values[q_index] = 0.;
4469 values[q_index] += local_dof_values[dof_index] *
4470 value(here_or_there, dof_index, q_index);
4476 template <
int dim,
int spacedim>
4477 template <
class InputVector>
4480 const bool here_or_there,
4481 const InputVector &fe_function,
4482 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4485 std::vector<typename InputVector::value_type> local_dof_values(
4486 this->fe_interface->n_current_interface_dofs());
4487 this->get_local_dof_values(fe_function, local_dof_values);
4489 get_function_values_from_local_dof_values(here_or_there,
4496 template <
int dim,
int spacedim>
4497 template <
class InputVector>
4500 const InputVector &local_dof_values,
4501 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4504 AssertDimension(values.size(), this->fe_interface->n_quadrature_points);
4506 for (
const auto dof_index : this->fe_interface->dof_indices())
4507 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4510 values[q_index] = 0.;
4513 local_dof_values[dof_index] * jump_in_values(dof_index, q_index);
4519 template <
int dim,
int spacedim>
4520 template <
class InputVector>
4523 const InputVector &fe_function,
4524 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4527 std::vector<typename InputVector::value_type> local_dof_values(
4528 this->fe_interface->n_current_interface_dofs());
4529 this->get_local_dof_values(fe_function, local_dof_values);
4531 get_jump_in_function_values_from_local_dof_values(local_dof_values, values);
4536 template <
int dim,
int spacedim>
4537 template <
class InputVector>
4540 const InputVector &local_dof_values,
4541 std::vector<solution_gradient_type<typename InputVector::value_type>>
4546 for (
const auto dof_index : this->fe_interface->dof_indices())
4547 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4553 local_dof_values[dof_index] * jump_in_gradients(dof_index, q_index);
4559 template <
int dim,
int spacedim>
4560 template <
class InputVector>
4563 const InputVector &fe_function,
4564 std::vector<solution_gradient_type<typename InputVector::value_type>>
4567 std::vector<typename InputVector::value_type> local_dof_values(
4568 this->fe_interface->n_current_interface_dofs());
4569 this->get_local_dof_values(fe_function, local_dof_values);
4571 get_jump_in_function_gradients_from_local_dof_values(local_dof_values,
4577 template <
int dim,
int spacedim>
4578 template <
class InputVector>
4581 const InputVector &local_dof_values,
4582 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4585 AssertDimension(values.size(), this->fe_interface->n_quadrature_points);
4587 for (
const auto dof_index : this->fe_interface->dof_indices())
4588 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4591 values[q_index] = 0.;
4594 local_dof_values[dof_index] * average_of_values(dof_index, q_index);
4600 template <
int dim,
int spacedim>
4601 template <
class InputVector>
4604 const InputVector &fe_function,
4605 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4608 std::vector<typename InputVector::value_type> local_dof_values(
4609 this->fe_interface->n_current_interface_dofs());
4610 this->get_local_dof_values(fe_function, local_dof_values);
4612 get_average_of_function_values_from_local_dof_values(local_dof_values,
4618 template <
int dim,
int spacedim>
4619 template <
class InputVector>
4623 const InputVector &local_dof_values,
4624 std::vector<solution_gradient_type<typename InputVector::value_type>>
4629 for (
const auto dof_index : this->fe_interface->dof_indices())
4630 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4635 gradients[q_index] += local_dof_values[dof_index] *
4636 average_of_gradients(dof_index, q_index);
4642 template <
int dim,
int spacedim>
4643 template <
class InputVector>
4646 const InputVector &fe_function,
4647 std::vector<solution_gradient_type<typename InputVector::value_type>>
4650 std::vector<typename InputVector::value_type> local_dof_values(
4651 this->fe_interface->n_current_interface_dofs());
4652 this->get_local_dof_values(fe_function, local_dof_values);
4654 get_average_of_function_gradients_from_local_dof_values(local_dof_values,
4660 template <
int dim,
int spacedim>
4661 template <
class InputVector>
4664 const InputVector &local_dof_values,
4665 std::vector<solution_hessian_type<typename InputVector::value_type>>
4670 for (
const auto dof_index : this->fe_interface->dof_indices())
4671 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4677 local_dof_values[dof_index] * jump_in_hessians(dof_index, q_index);
4683 template <
int dim,
int spacedim>
4684 template <
class InputVector>
4687 const InputVector &fe_function,
4688 std::vector<solution_hessian_type<typename InputVector::value_type>>
4691 std::vector<typename InputVector::value_type> local_dof_values(
4692 this->fe_interface->n_current_interface_dofs());
4693 this->get_local_dof_values(fe_function, local_dof_values);
4695 get_jump_in_function_hessians_from_local_dof_values(local_dof_values,
4701 template <
int dim,
int spacedim>
4702 template <
class InputVector>
4705 const InputVector &local_dof_values,
4706 std::vector<solution_hessian_type<typename InputVector::value_type>>
4711 for (
const unsigned int dof_index : this->fe_interface->dof_indices())
4712 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4717 hessians[q_index] += local_dof_values[dof_index] *
4718 average_of_hessians(dof_index, q_index);
4724 template <
int dim,
int spacedim>
4725 template <
class InputVector>
4728 const InputVector &fe_function,
4729 std::vector<solution_hessian_type<typename InputVector::value_type>>
4732 std::vector<typename InputVector::value_type> local_dof_values(
4733 this->fe_interface->n_current_interface_dofs());
4734 this->get_local_dof_values(fe_function, local_dof_values);
4736 get_average_of_function_hessians_from_local_dof_values(local_dof_values,
4742 template <
int dim,
int spacedim>
4743 template <
class InputVector>
4747 const InputVector &local_dof_values,
4749 solution_third_derivative_type<typename InputVector::value_type>>
4750 &third_derivatives)
const
4753 this->fe_interface->n_quadrature_points);
4755 for (
const unsigned int dof_index : this->fe_interface->dof_indices())
4756 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4759 third_derivatives[q_index] = 0.;
4761 third_derivatives[q_index] +=
4762 local_dof_values[dof_index] *
4763 jump_in_third_derivatives(dof_index, q_index);
4769 template <
int dim,
int spacedim>
4770 template <
class InputVector>
4773 const InputVector &fe_function,
4775 solution_third_derivative_type<typename InputVector::value_type>>
4776 &third_derivatives)
const
4778 std::vector<typename InputVector::value_type> local_dof_values(
4779 this->fe_interface->n_current_interface_dofs());
4780 this->get_local_dof_values(fe_function, local_dof_values);
4782 get_jump_in_function_third_derivatives_from_local_dof_values(
4783 local_dof_values, third_derivatives);
friend class FEInterfaceViews::Scalar
std::unique_ptr< FEFaceValues< dim, spacedim > > internal_fe_face_values
UpdateFlags get_update_flags() const
const hp::MappingCollection< dim, spacedim > & get_mapping_collection() const
Tensor< 1, spacedim > average_of_shape_gradients(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
void get_average_of_function_gradients(const InputVector &fe_function, std::vector< Tensor< 1, spacedim, typename InputVector::value_type > > &gradients) const
void get_jump_in_function_third_derivatives(const InputVector &fe_function, std::vector< Tensor< 3, spacedim, typename InputVector::value_type > > &third_derivatives) const
std_cxx20::ranges::iota_view< unsigned int, unsigned int > dof_indices() const
FEFaceValuesBase< dim, spacedim > * fe_face_values_neighbor
friend class FEInterfaceViews::Vector
const std::vector< double > & get_JxW_values() const
void get_average_of_function_hessians(const InputVector &fe_function, std::vector< Tensor< 2, spacedim, typename InputVector::value_type > > &hessians) const
FEInterfaceValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const Quadrature< dim - 1 > &quadrature, const UpdateFlags update_flags)
void reinit(const CellIteratorType &cell, const unsigned int face_no, const unsigned int q_index=numbers::invalid_unsigned_int, const unsigned int mapping_index=numbers::invalid_unsigned_int, const unsigned int fe_index=numbers::invalid_unsigned_int)
const hp::FECollection< dim, spacedim > & get_fe_collection() const
Tensor< 3, spacedim > jump_in_shape_3rd_derivatives(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
std::vector< std::pair< types::global_dof_index, std::array< unsigned int, 2 > > > interface_dof_data
FEInterfaceValues(const hp::MappingCollection< dim, spacedim > &mapping_collection, const hp::FECollection< dim, spacedim > &fe_collection, const hp::QCollection< dim - 1 > &quadrature_collection, const UpdateFlags update_flags)
std::unique_ptr< hp::FESubfaceValues< dim, spacedim > > internal_hp_fe_subface_values
const unsigned int n_quadrature_points
bool has_hp_capabilities() const
void reinit(const CellIteratorType &cell, const unsigned int face_no, const unsigned int sub_face_no, const CellNeighborIteratorType &cell_neighbor, const unsigned int face_no_neighbor, const unsigned int sub_face_no_neighbor, const unsigned int q_index=numbers::invalid_unsigned_int, const unsigned int mapping_index=numbers::invalid_unsigned_int, const unsigned int fe_index=numbers::invalid_unsigned_int, const unsigned int fe_index_neighbor=numbers::invalid_unsigned_int)
FEInterfaceViews::Scalar< dim, spacedim > operator[](const FEValuesExtractors::Scalar &scalar) const
unsigned n_current_interface_dofs() const
const std::vector< Tensor< 1, spacedim > > & get_normal_vectors() const
const FiniteElement< dim, spacedim > & get_fe() const
double average_of_shape_values(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
const std::vector< Point< spacedim > > & get_quadrature_points() const
std::unique_ptr< FESubfaceValues< dim, spacedim > > internal_fe_subface_values
double shape_value(const bool here_or_there, const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
const FEFaceValuesBase< dim, spacedim > & get_fe_face_values(const unsigned int cell_index) const
Tensor< 2, spacedim > average_of_shape_hessians(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
std::unique_ptr< hp::FESubfaceValues< dim, spacedim > > internal_hp_fe_subface_values_neighbor
FEInterfaceValues(const hp::FECollection< dim, spacedim > &fe_collection, const hp::QCollection< dim - 1 > &quadrature_collection, const UpdateFlags update_flags)
const hp::QCollection< dim - 1 > & get_quadrature_collection() const
FEInterfaceValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const hp::QCollection< dim - 1 > &quadrature, const UpdateFlags update_flags)
FEFaceValuesBase< dim, spacedim > * fe_face_values
Tensor< 1, spacedim > normal_vector(const unsigned int q_point_index) const
std::unique_ptr< FESubfaceValues< dim, spacedim > > internal_fe_subface_values_neighbor
Tensor< 1, spacedim > shape_grad(const bool here_or_there, const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
Triangulation< dim, spacedim >::cell_iterator get_cell(const unsigned int cell_index) const
void get_jump_in_function_hessians(const InputVector &fe_function, std::vector< Tensor< 2, spacedim, typename InputVector::value_type > > &hessians) const
double JxW(const unsigned int quadrature_point) const
Tensor< 1, spacedim > normal(const unsigned int q_point_index) const
void get_average_of_function_values(const InputVector &fe_function, std::vector< typename InputVector::value_type > &values) const
Tensor< 1, spacedim > jump_in_shape_gradients(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
Tensor< 2, spacedim > jump_in_shape_hessians(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
std::unique_ptr< hp::FEFaceValues< dim, spacedim > > internal_hp_fe_face_values_neighbor
std_cxx20::ranges::iota_view< unsigned int, unsigned int > quadrature_point_indices() const
double jump_in_shape_values(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
unsigned int get_face_number(const unsigned int cell_index) const
std::vector< types::global_dof_index > get_interface_dof_indices() const
FEInterfaceValues(const FiniteElement< dim, spacedim > &fe, const Quadrature< dim - 1 > &quadrature, const UpdateFlags update_flags)
void reinit(const CellIteratorType &cell, const CellNeighborIteratorType &cell_neighbor, const InterfaceData &interface_data)
std::array< unsigned int, 2 > interface_dof_to_dof_indices(const unsigned int interface_dof_index) const
std::unique_ptr< hp::FEFaceValues< dim, spacedim > > internal_hp_fe_face_values
std::unique_ptr< FEFaceValues< dim, spacedim > > internal_fe_face_values_neighbor
void get_jump_in_function_values(const InputVector &fe_function, std::vector< typename InputVector::value_type > &values) const
void get_jump_in_function_gradients(const InputVector &fe_function, std::vector< Tensor< 1, spacedim, typename InputVector::value_type > > &gradients) const
const Mapping< dim, spacedim > & get_mapping() const
const Point< spacedim > & quadrature_point(const unsigned int q_point) const
const Quadrature< dim - 1 > & get_quadrature() const
void get_local_dof_values(const InputVector &dof_values, OutputVector &local_dof_values) const
Base(const FEInterfaceValues< dim, spacedim > &fe_interface)
const FEInterfaceValues< dim, spacedim > * fe_interface
void get_jump_in_function_third_derivatives(const InputVector &fe_function, std::vector< solution_third_derivative_type< typename InputVector::value_type > > &third_derivatives) const
void get_jump_in_function_gradients_from_local_dof_values(const InputVector &local_dof_values, std::vector< solution_gradient_type< typename InputVector::value_type > > &gradients) const
gradient_type jump_in_gradients(const unsigned int interface_dof_index, const unsigned int q_point) const
void get_jump_in_function_hessians(const InputVector &fe_function, std::vector< solution_hessian_type< typename InputVector::value_type > > &hessians) const
hessian_type jump_in_hessians(const unsigned int interface_dof_index, const unsigned int q_point) const
typename FEValuesViews::Scalar< dim, spacedim >::gradient_type gradient_type
gradient_type gradient(const bool here_or_there, const unsigned int interface_dof_index, const unsigned int q_point) const
typename FEValuesViews::Scalar< dim, spacedim >::hessian_type hessian_type
const FEValuesExtractors::Scalar extractor
void get_jump_in_function_third_derivatives_from_local_dof_values(const InputVector &local_dof_values, std::vector< solution_third_derivative_type< typename InputVector::value_type > > &third_derivatives) const
typename ProductType< Number, gradient_type >::type solution_gradient_type
hessian_type average_of_hessians(const unsigned int interface_dof_index, const unsigned int q_point) const
void get_jump_in_function_gradients(const InputVector &fe_function, std::vector< solution_gradient_type< typename InputVector::value_type > > &gradients) const
value_type value(const bool here_or_there, const unsigned int interface_dof_index, const unsigned int q_point) const
void get_average_of_function_hessians_from_local_dof_values(const InputVector &local_dof_values, std::vector< solution_hessian_type< typename InputVector::value_type > > &hessians) const
void get_average_of_function_values_from_local_dof_values(const InputVector &local_dof_values, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
typename ProductType< Number, third_derivative_type >::type solution_third_derivative_type
void get_average_of_function_values(const InputVector &fe_function, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
typename ProductType< Number, value_type >::type solution_value_type
void get_average_of_function_gradients(const InputVector &fe_function, std::vector< solution_gradient_type< typename InputVector::value_type > > &gradients) const
void get_jump_in_function_values_from_local_dof_values(const InputVector &local_dof_values, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
void get_jump_in_function_values(const InputVector &fe_function, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
Scalar(const FEInterfaceValues< dim, spacedim > &fe_interface, const unsigned int component)
typename FEValuesViews::Scalar< dim, spacedim >::third_derivative_type third_derivative_type
third_derivative_type jump_in_third_derivatives(const unsigned int interface_dof_index, const unsigned int q_point) const
gradient_type average_of_gradients(const unsigned int interface_dof_index, const unsigned int q_point) const
void get_average_of_function_hessians(const InputVector &fe_function, std::vector< solution_hessian_type< typename InputVector::value_type > > &hessians) const
void get_average_of_function_gradients_from_local_dof_values(const InputVector &local_dof_values, std::vector< solution_gradient_type< typename InputVector::value_type > > &gradients) const
value_type average_of_values(const unsigned int interface_dof_index, const unsigned int q_point) const
void get_jump_in_function_hessians_from_local_dof_values(const InputVector &local_dof_values, std::vector< solution_hessian_type< typename InputVector::value_type > > &hessians) const
value_type jump_in_values(const unsigned int interface_dof_index, const unsigned int q_point) const
void get_function_values_from_local_dof_values(const bool here_or_there, const InputVector &local_dof_values, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
void get_function_values(const bool here_or_there, const InputVector &fe_function, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
typename ProductType< Number, hessian_type >::type solution_hessian_type
typename ProductType< Number, gradient_type >::type solution_gradient_type
typename FEValuesViews::Vector< dim, spacedim >::hessian_type hessian_type
const FEValuesExtractors::Vector extractor
void get_average_of_function_gradients_from_local_dof_values(const InputVector &local_dof_values, std::vector< solution_gradient_type< typename InputVector::value_type > > &gradients) const
void get_average_of_function_hessians(const InputVector &fe_function, std::vector< solution_hessian_type< typename InputVector::value_type > > &hessians) const
gradient_type gradient(const bool here_or_there, const unsigned int interface_dof_index, const unsigned int q_point) const
void get_jump_in_function_values(const InputVector &fe_function, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
void get_average_of_function_values_from_local_dof_values(const InputVector &local_dof_values, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
void get_function_values_from_local_dof_values(const bool here_or_there, const InputVector &local_dof_values, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
void get_average_of_function_hessians_from_local_dof_values(const InputVector &local_dof_values, std::vector< solution_hessian_type< typename InputVector::value_type > > &hessians) const
hessian_type average_hessian(const unsigned int interface_dof_index, const unsigned int q_point) const
Vector(const FEInterfaceValues< dim, spacedim > &fe_interface, const unsigned int first_vector_component)
void get_average_of_function_gradients(const InputVector &fe_function, std::vector< solution_gradient_type< typename InputVector::value_type > > &gradients) const
void get_function_values(const bool here_or_there, const InputVector &fe_function, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
hessian_type jump_hessian(const unsigned int interface_dof_index, const unsigned int q_point) const
typename ProductType< Number, value_type >::type solution_value_type
typename ProductType< Number, hessian_type >::type solution_hessian_type
void get_average_of_function_values(const InputVector &fe_function, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
value_type value(const bool here_or_there, const unsigned int interface_dof_index, const unsigned int q_point) const
void get_jump_in_function_third_derivatives_from_local_dof_values(const InputVector &local_dof_values, std::vector< solution_third_derivative_type< typename InputVector::value_type > > &third_derivatives) const
void get_jump_in_function_gradients(const InputVector &fe_function, std::vector< solution_gradient_type< typename InputVector::value_type > > &gradients) const
third_derivative_type jump_in_third_derivatives(const unsigned int interface_dof_index, const unsigned int q_point) const
void get_jump_in_function_gradients_from_local_dof_values(const InputVector &local_dof_values, std::vector< solution_gradient_type< typename InputVector::value_type > > &gradients) const
void get_jump_in_function_hessians_from_local_dof_values(const InputVector &local_dof_values, std::vector< solution_hessian_type< typename InputVector::value_type > > &hessians) const
void get_jump_in_function_hessians(const InputVector &fe_function, std::vector< solution_hessian_type< typename InputVector::value_type > > &hessians) const
value_type jump_in_values(const unsigned int interface_dof_index, const unsigned int q_point) const
typename FEValuesViews::Vector< dim, spacedim >::value_type value_type
void get_jump_in_function_third_derivatives(const InputVector &fe_function, std::vector< solution_third_derivative_type< typename InputVector::value_type > > &third_derivatives) const
gradient_type jump_gradient(const unsigned int interface_dof_index, const unsigned int q_point) const
typename FEValuesViews::Vector< dim, spacedim >::third_derivative_type third_derivative_type
value_type average_of_values(const unsigned int interface_dof_index, const unsigned int q_point) const
hessian_type jump_in_hessians(const unsigned int interface_dof_index, const unsigned int q_point) const
void get_jump_in_function_values_from_local_dof_values(const InputVector &local_dof_values, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
gradient_type average_of_gradients(const unsigned int interface_dof_index, const unsigned int q_point) const
typename FEValuesViews::Vector< dim, spacedim >::gradient_type gradient_type
gradient_type jump_in_gradients(const unsigned int interface_dof_index, const unsigned int q_point) const
typename ProductType< Number, third_derivative_type >::type solution_third_derivative_type
hessian_type average_of_hessians(const unsigned int interface_dof_index, const unsigned int q_point) const
::Tensor< 1, spacedim > gradient_type
::Tensor< 2, spacedim > hessian_type
::Tensor< 3, spacedim > third_derivative_type
::Tensor< 4, spacedim > third_derivative_type
::Tensor< 2, spacedim > gradient_type
::Tensor< 3, spacedim > hessian_type
::Tensor< 1, spacedim > value_type
Abstract base class for mapping classes.
static constexpr unsigned int n_independent_components
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_DEPRECATED_WITH_COMMENT(comment)
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
static ::ExceptionBase & ExcOnlyAvailableWithHP()
#define AssertDimension(dim1, dim2)
#define AssertIndexRange(index, range)
#define DeclExceptionMsg(Exception, defaulttext)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcNotInitialized()
static ::ExceptionBase & ExcOnlyAvailableWithoutHP()
static ::ExceptionBase & ExcMessage(std::string arg1)
TriaIterator< CellAccessor< dim, spacedim > > cell_iterator
const bool IsBlockVector< VectorType >::value
const Mapping< dim, spacedim > & get_default_linear_mapping(const Triangulation< dim, spacedim > &triangulation)
MappingQ< dim, spacedim > StaticMappingQ1< dim, spacedim >::mapping
typename ::internal::FEInterfaceViews:: ViewType< dim, spacedim, Extractor >::type View
* * * ScaleZFunction< dim, Number, components >::ScaleZFunction * component(component)
void reinit(MatrixBlock< MatrixType > &v, const BlockSparsityPattern &p)
constexpr types::global_dof_index invalid_dof_index
constexpr unsigned int invalid_unsigned_int
constexpr types::fe_index invalid_fe_index
* * FEFaceValues< 2 > fe_face_values(fe, face_quadrature_formula, update_values|update_quadrature_points| * update_normal_vectors|update_JxW_values)
unsigned int mapping_index_neighbor
unsigned int fe_index_neighbor
unsigned int q_index_neighbor
unsigned int sub_face_no_neighbor
InterfaceData(const unsigned int face_no, const unsigned int sub_face_no, const unsigned int face_no_neighbor, const unsigned int sub_face_no_neighbor)
unsigned int face_no_neighbor
unsigned int mapping_index
typename internal::ProductTypeImpl< std::decay_t< T >, std::decay_t< U > >::type type