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>
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> &
1723 const std::vector<Tensor<1, spacedim>> &
1750 const std::vector<Point<spacedim>> &
1806 std::vector<types::global_dof_index>
1821 std::array<unsigned int, 2>
1856 const unsigned int interface_dof_index,
1857 const unsigned int q_point,
1858 const unsigned int component = 0)
const;
1871 const unsigned int interface_dof_index,
1872 const unsigned int q_point,
1873 const unsigned int component = 0)
const;
1904 const unsigned int q_point,
1905 const unsigned int component = 0)
const;
1922 const unsigned int q_point,
1923 const unsigned int component = 0)
const;
1941 const unsigned int q_point,
1942 const unsigned int component = 0)
const;
1959 const unsigned int q_point,
1960 const unsigned int component = 0)
const;
1986 const unsigned int q_point,
1987 const unsigned int component = 0)
const;
2004 const unsigned int q_point,
2005 const unsigned int component = 0)
const;
2023 const unsigned int q_point,
2024 const unsigned int component = 0)
const;
2045 template <
class InputVector>
2048 const InputVector &fe_function,
2049 std::vector<typename InputVector::value_type> &values)
const;
2059 template <
class InputVector>
2062 const InputVector &fe_function,
2073 template <
class InputVector>
2076 const InputVector &fe_function,
2088 template <
class InputVector>
2091 const InputVector &fe_function,
2093 &third_derivatives)
const;
2110 template <
class InputVector>
2113 const InputVector &fe_function,
2114 std::vector<typename InputVector::value_type> &values)
const;
2123 template <
class InputVector>
2126 const InputVector &fe_function,
2137 template <
class InputVector>
2140 const InputVector &fe_function,
2185 std::vector<std::pair<types::global_dof_index, std::array<unsigned int, 2>>>
2224 std::unique_ptr<FESubfaceValues<dim, spacedim>>
2244 std::unique_ptr<hp::FESubfaceValues<dim, spacedim>>
2251 std::unique_ptr<hp::FEFaceValues<dim, spacedim>>
2258 std::unique_ptr<hp::FESubfaceValues<dim, spacedim>>
2268 "The current function doesn't make sense when used with a "
2269 "FEInterfaceValues object with hp-capabilities.");
2278 "The current function doesn't make sense when used with a "
2279 "FEInterfaceValues object without hp-capabilities.");
2299template <
int dim,
int spacedim>
2305 : n_quadrature_points(quadrature.
size())
2306 , fe_face_values(nullptr)
2307 , fe_face_values_neighbor(nullptr)
2308 , internal_fe_face_values(
2313 , internal_fe_subface_values(
2318 , internal_fe_face_values_neighbor(
2323 , internal_fe_subface_values_neighbor(
2332template <
int dim,
int spacedim>
2346template <
int dim,
int spacedim>
2352 : n_quadrature_points(quadrature.max_n_quadrature_points())
2353 , fe_face_values(nullptr)
2354 , fe_face_values_neighbor(nullptr)
2355 , internal_fe_face_values(
2360 , internal_fe_subface_values(
2365 , internal_fe_face_values_neighbor(
2370 , internal_fe_subface_values_neighbor(
2379template <
int dim,
int spacedim>
2385 : n_quadrature_points(quadrature_collection.max_n_quadrature_points())
2386 , fe_face_values(nullptr)
2387 , fe_face_values_neighbor(nullptr)
2388 , internal_hp_fe_face_values(
2391 quadrature_collection,
2393 , internal_hp_fe_subface_values(
2397 quadrature_collection,
2399 , internal_hp_fe_face_values_neighbor(
2402 quadrature_collection,
2404 , internal_hp_fe_subface_values_neighbor(
2408 quadrature_collection,
2416template <
int dim,
int spacedim>
2423 quadrature_collection,
2429template <
int dim,
int spacedim>
2430template <
typename CellIteratorType,
typename CellNeighborIteratorType>
2433 const CellIteratorType &cell,
2434 const unsigned int face_no,
2435 const unsigned int sub_face_no,
2436 const CellNeighborIteratorType &cell_neighbor,
2437 const unsigned int face_no_neighbor,
2438 const unsigned int sub_face_no_neighbor,
2439 const unsigned int q_index,
2440 const unsigned int mapping_index,
2441 const unsigned int fe_index_in,
2442 const unsigned int fe_index_neighbor_in)
2444 InterfaceData
data(face_no,
2447 sub_face_no_neighbor);
2448 data.q_index = q_index;
2449 data.mapping_index = mapping_index;
2450 data.fe_index = fe_index_in;
2451 data.fe_index_neighbor = fe_index_neighbor_in;
2458template <
int dim,
int spacedim>
2459template <
typename CellIteratorType,
typename CellNeighborIteratorType>
2462 const CellIteratorType &cell,
2463 const CellNeighborIteratorType &cell_neighbor,
2464 const InterfaceData &interface_data)
2466 Assert(internal_fe_face_values || internal_hp_fe_face_values,
2469 constexpr bool is_dof_cell_accessor =
2470 std::is_same_v<DoFCellAccessor<dim, spacedim, true>,
2471 typename CellIteratorType::AccessorType> ||
2472 std::is_same_v<DoFCellAccessor<dim, spacedim, false>,
2473 typename CellIteratorType::AccessorType>;
2475 constexpr bool is_dof_cell_accessor_neighbor =
2476 std::is_same_v<DoFCellAccessor<dim, spacedim, true>,
2477 typename CellNeighborIteratorType::AccessorType> ||
2478 std::is_same_v<DoFCellAccessor<dim, spacedim, false>,
2479 typename CellNeighborIteratorType::AccessorType>;
2481 const unsigned int face_no = interface_data.face_no;
2482 const unsigned int sub_face_no = interface_data.sub_face_no;
2483 const unsigned int face_no_neighbor = interface_data.face_no_neighbor;
2484 const unsigned int sub_face_no_neighbor = interface_data.sub_face_no_neighbor;
2486 unsigned int active_fe_index = 0;
2487 unsigned int active_fe_index_neighbor = 0;
2489 if (internal_fe_face_values)
2493 internal_fe_face_values->reinit(cell, face_no);
2494 fe_face_values = internal_fe_face_values.get();
2498 internal_fe_subface_values->reinit(cell, face_no, sub_face_no);
2499 fe_face_values = internal_fe_subface_values.get();
2503 internal_fe_face_values_neighbor->reinit(cell_neighbor,
2505 fe_face_values_neighbor = internal_fe_face_values_neighbor.get();
2509 internal_fe_subface_values_neighbor->reinit(cell_neighbor,
2511 sub_face_no_neighbor);
2512 fe_face_values_neighbor = internal_fe_subface_values_neighbor.get();
2516 fe_face_values_neighbor->n_quadrature_points);
2518 const_cast<unsigned int &
>(this->n_quadrature_points) =
2519 fe_face_values->n_quadrature_points;
2521 else if (internal_hp_fe_face_values)
2523 active_fe_index = interface_data.fe_index;
2524 active_fe_index_neighbor =
2526 interface_data.fe_index :
2527 interface_data.fe_index_neighbor;
2531 if constexpr (is_dof_cell_accessor)
2532 active_fe_index = cell->active_fe_index();
2534 active_fe_index = 0;
2539 if constexpr (is_dof_cell_accessor_neighbor)
2540 active_fe_index_neighbor = cell_neighbor->active_fe_index();
2542 active_fe_index_neighbor = 0;
2545 unsigned int used_q_index = interface_data.q_index;
2546 unsigned int used_mapping_index = interface_data.mapping_index;
2551 if (internal_hp_fe_face_values->get_quadrature_collection().size() == 1)
2555 if (internal_hp_fe_face_values->get_mapping_collection().size() == 1)
2556 used_mapping_index = 0;
2563 if (internal_hp_fe_face_values
2564 ->get_quadrature_collection()[active_fe_index] ==
2565 internal_hp_fe_face_values
2566 ->get_quadrature_collection()[active_fe_index_neighbor])
2567 used_q_index = active_fe_index;
2574 const unsigned int dominated_fe_index =
2577 internal_hp_fe_face_values->get_fe_collection()
2579 {active_fe_index, active_fe_index_neighbor}) :
2586 "You called this function with 'q_index' left at its "
2587 "default value, but this can only work if one of "
2588 "the two finite elements adjacent to this face "
2589 "dominates the other. See the documentation "
2590 "of this function for more information of how "
2591 "to deal with this situation."));
2592 used_q_index = dominated_fe_index;
2599 "You called this function with 'mapping_index' left "
2600 "at its default value, but this can only work if one "
2601 "of the two finite elements adjacent to this face "
2602 "dominates the other. See the documentation "
2603 "of this function for more information of how "
2604 "to deal with this situation."));
2605 used_mapping_index = dominated_fe_index;
2611 const unsigned int used_q_index_neighbor =
2614 interface_data.q_index_neighbor;
2616 const unsigned int used_mapping_index_neighbor =
2617 (interface_data.mapping_index_neighbor ==
2619 used_mapping_index :
2620 interface_data.mapping_index_neighbor;
2625 internal_hp_fe_face_values->reinit(
2626 cell, face_no, used_q_index, used_mapping_index, active_fe_index);
2628 internal_hp_fe_face_values->get_present_fe_values());
2632 internal_hp_fe_subface_values->
reinit(cell,
2640 internal_hp_fe_subface_values->get_present_fe_values());
2644 internal_hp_fe_face_values_neighbor->
reinit(
2647 used_q_index_neighbor,
2648 used_mapping_index_neighbor,
2649 active_fe_index_neighbor);
2652 internal_hp_fe_face_values_neighbor->get_present_fe_values());
2656 internal_hp_fe_subface_values_neighbor->
reinit(
2659 sub_face_no_neighbor,
2660 used_q_index_neighbor,
2661 used_mapping_index_neighbor,
2662 active_fe_index_neighbor);
2664 fe_face_values_neighbor =
2666 internal_hp_fe_subface_values_neighbor->get_present_fe_values());
2670 fe_face_values_neighbor->n_quadrature_points);
2672 const_cast<unsigned int &
>(this->n_quadrature_points) =
2673 fe_face_values->n_quadrature_points;
2677 if constexpr (is_dof_cell_accessor_neighbor && is_dof_cell_accessor)
2680 std::vector<types::global_dof_index> v_1(
2681 fe_face_values->get_fe().n_dofs_per_cell());
2682 cell->get_active_or_mg_dof_indices(v_1);
2683 std::vector<types::global_dof_index> v_2(
2684 fe_face_values_neighbor->get_fe().n_dofs_per_cell());
2685 cell_neighbor->get_active_or_mg_dof_indices(v_2);
2687 interface_dof_data.resize(v_1.size() + v_2.size());
2691 for (
unsigned int i = 0; i < v_1.size(); ++i)
2708 const auto compare_interface_dofs = [](
const auto &interface_dof_1,
2709 const auto &interface_dof_2) {
2710 return (interface_dof_1.first < interface_dof_2.first);
2712 const auto interface_dof_data_end_after_v_1 =
2713 interface_dof_data.begin() + v_1.size();
2714 if (std::is_sorted(interface_dof_data.begin(),
2715 interface_dof_data_end_after_v_1,
2716 compare_interface_dofs) ==
false)
2717 std::sort(interface_dof_data.begin(),
2718 interface_dof_data_end_after_v_1,
2719 compare_interface_dofs);
2722 unsigned int idx = v_1.size();
2723 for (
unsigned int i = 0; i < v_2.size(); ++i)
2733 std::lower_bound(interface_dof_data.begin(),
2734 interface_dof_data_end_after_v_1,
2736 [](
const auto &interface_dof_1,
2737 const auto &index) {
2738 return (interface_dof_1.first < index);
2740 if ((it != interface_dof_data_end_after_v_1) && (it->first == v_2[i]))
2746 interface_dof_data[idx] = {v_2[i],
2751 interface_dof_data.resize(idx);
2759 const unsigned int n_dofs_per_cell_1 = fe_face_values->dofs_per_cell;
2760 const unsigned int n_dofs_per_cell_2 =
2761 fe_face_values_neighbor->dofs_per_cell;
2763 interface_dof_data.resize(n_dofs_per_cell_1 + n_dofs_per_cell_2);
2765 for (
unsigned int i = 0; i < n_dofs_per_cell_1; ++i)
2771 for (
unsigned int i = 0; i < n_dofs_per_cell_2; ++i)
2773 interface_dof_data[i + n_dofs_per_cell_1] = {
2781template <
int dim,
int spacedim>
2782template <
typename CellIteratorType>
2785 const unsigned int face_no,
2786 const unsigned int q_index,
2787 const unsigned int mapping_index,
2788 const unsigned int fe_index)
2790 Assert(internal_fe_face_values || internal_hp_fe_face_values,
2793 if (internal_fe_face_values)
2797 Assert((mapping_index == 0 ||
2803 internal_fe_face_values->reinit(cell, face_no);
2804 fe_face_values = internal_fe_face_values.get();
2805 fe_face_values_neighbor =
nullptr;
2807 else if (internal_hp_fe_face_values)
2809 internal_hp_fe_face_values->reinit(
2810 cell, face_no, q_index, mapping_index, fe_index);
2812 internal_hp_fe_face_values->get_present_fe_values());
2813 fe_face_values_neighbor =
nullptr;
2816 std::vector<types::global_dof_index> interface_dof_indices(
2817 fe_face_values->get_fe().n_dofs_per_cell());
2819 if constexpr (std::is_same_v<
typename CellIteratorType::AccessorType,
2821 std::is_same_v<
typename CellIteratorType::AccessorType,
2824 cell->get_active_or_mg_dof_indices(interface_dof_indices);
2828 for (
auto &i : interface_dof_indices)
2832 interface_dof_data.resize(interface_dof_indices.size());
2833 for (
unsigned int i = 0; i < interface_dof_indices.size(); ++i)
2834 interface_dof_data[i] = {interface_dof_indices[i],
2840template <
int dim,
int spacedim>
2844 Assert(fe_face_values !=
nullptr,
2845 ExcMessage(
"This call requires a call to reinit() first."));
2846 return fe_face_values->JxW(q);
2851template <
int dim,
int spacedim>
2852const std::vector<double> &
2855 Assert(fe_face_values !=
nullptr,
2856 ExcMessage(
"This call requires a call to reinit() first."));
2857 return fe_face_values->get_JxW_values();
2862template <
int dim,
int spacedim>
2863const std::vector<Tensor<1, spacedim>> &
2866 Assert(fe_face_values !=
nullptr,
2867 ExcMessage(
"This call requires a call to reinit() first."));
2868 return fe_face_values->get_normal_vectors();
2873template <
int dim,
int spacedim>
2877 Assert(!has_hp_capabilities(), ExcOnlyAvailableWithoutHP());
2878 return internal_fe_face_values->get_mapping();
2883template <
int dim,
int spacedim>
2887 Assert(!has_hp_capabilities(), ExcOnlyAvailableWithoutHP());
2888 return internal_fe_face_values->get_fe();
2893template <
int dim,
int spacedim>
2897 Assert(!has_hp_capabilities(), ExcOnlyAvailableWithoutHP());
2898 return internal_fe_face_values->get_quadrature();
2903template <
int dim,
int spacedim>
2907 Assert(has_hp_capabilities(), ExcOnlyAvailableWithHP());
2908 return internal_hp_fe_face_values->get_mapping_collection();
2913template <
int dim,
int spacedim>
2917 Assert(has_hp_capabilities(), ExcOnlyAvailableWithHP());
2918 return internal_hp_fe_face_values->get_fe_collection();
2923template <
int dim,
int spacedim>
2927 Assert(has_hp_capabilities(), ExcOnlyAvailableWithHP());
2928 return internal_hp_fe_face_values->get_quadrature_collection();
2933template <
int dim,
int spacedim>
2937 if (internal_hp_fe_face_values || internal_hp_fe_subface_values ||
2938 internal_hp_fe_face_values_neighbor ||
2939 internal_hp_fe_subface_values_neighbor)
2949 Assert(internal_fe_face_values || internal_fe_subface_values ||
2950 internal_fe_face_values_neighbor ||
2951 internal_fe_subface_values_neighbor,
2963template <
int dim,
int spacedim>
2968 0U, n_quadrature_points);
2973template <
int dim,
int spacedim>
2976 const unsigned int q_point)
const
2978 Assert(fe_face_values !=
nullptr,
2979 ExcMessage(
"This call requires a call to reinit() first."));
2980 return fe_face_values->quadrature_point(q_point);
2985template <
int dim,
int spacedim>
2986const std::vector<Point<spacedim>> &
2989 Assert(fe_face_values !=
nullptr,
2990 ExcMessage(
"This call requires a call to reinit() first."));
2991 return fe_face_values->get_quadrature_points();
2996template <
int dim,
int spacedim>
3000 if (has_hp_capabilities())
3001 return internal_hp_fe_face_values->get_update_flags();
3003 return internal_fe_face_values->get_update_flags();
3008template <
int dim,
int spacedim>
3012 return get_fe_face_values(
cell_index).get_cell();
3017template <
int dim,
int spacedim>
3022 return get_fe_face_values(
cell_index).get_face_number();
3027template <
int dim,
int spacedim>
3032 interface_dof_data.size() > 0,
3034 "n_current_interface_dofs() is only available after a call to reinit()."));
3035 return interface_dof_data.size();
3040template <
int dim,
int spacedim>
3045 0U, n_current_interface_dofs());
3050template <
int dim,
int spacedim>
3054 return fe_face_values_neighbor ==
nullptr;
3059template <
int dim,
int spacedim>
3060std::vector<types::global_dof_index>
3063 std::vector<types::global_dof_index> interface_dof_indices(
3064 interface_dof_data.size());
3066 for (
const unsigned int i : dof_indices())
3067 interface_dof_indices[i] = interface_dof_data[i].
first;
3069 return interface_dof_indices;
3074template <
int dim,
int spacedim>
3075std::array<unsigned int, 2>
3077 const unsigned int interface_dof_index)
const
3080 return interface_dof_data[interface_dof_index].second;
3085template <
int dim,
int spacedim>
3094 "You are on a boundary, so you can only ask for the first FEFaceValues object."));
3096 return (
cell_index == 0) ? *fe_face_values : *fe_face_values_neighbor;
3101template <
int dim,
int spacedim>
3104 const unsigned int q_point_index)
const
3106 return fe_face_values->normal_vector(q_point_index);
3111template <
int dim,
int spacedim>
3114 const bool here_or_there,
3115 const unsigned int interface_dof_index,
3116 const unsigned int q_point,
3117 const unsigned int component)
const
3119 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3122 return get_fe_face_values(0).shape_value_component(dof_pair[0],
3126 return get_fe_face_values(1).shape_value_component(dof_pair[1],
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);
3147 value = get_fe_face_values(0).shape_grad_component(dof_pair[0],
3151 value = get_fe_face_values(1).shape_grad_component(dof_pair[1],
3158template <
int dim,
int spacedim>
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_value_component(dof_pair[0],
3174 value -= get_fe_face_values(1).shape_value_component(dof_pair[1],
3182template <
int dim,
int spacedim>
3185 const unsigned int interface_dof_index,
3186 const unsigned int q_point,
3187 const unsigned int component)
const
3189 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3192 return get_fe_face_values(0).shape_value_component(dof_pair[0],
3199 value += 0.5 * get_fe_face_values(0).shape_value_component(dof_pair[0],
3203 value += 0.5 * get_fe_face_values(1).shape_value_component(dof_pair[1],
3212template <
int dim,
int spacedim>
3215 const unsigned int interface_dof_index,
3216 const unsigned int q_point,
3217 const unsigned int component)
const
3219 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3222 return get_fe_face_values(0).shape_grad_component(dof_pair[0],
3229 value += 0.5 * get_fe_face_values(0).shape_grad_component(dof_pair[0],
3233 value += 0.5 * get_fe_face_values(1).shape_grad_component(dof_pair[1],
3242template <
int dim,
int spacedim>
3245 const unsigned int interface_dof_index,
3246 const unsigned int q_point,
3247 const unsigned int component)
const
3249 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3252 return get_fe_face_values(0).shape_hessian_component(dof_pair[0],
3259 value += 0.5 * get_fe_face_values(0).shape_hessian_component(dof_pair[0],
3263 value += 0.5 * get_fe_face_values(1).shape_hessian_component(dof_pair[1],
3272template <
int dim,
int spacedim>
3275 const unsigned int interface_dof_index,
3276 const unsigned int q_point,
3277 const unsigned int component)
const
3279 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3282 return get_fe_face_values(0).shape_grad_component(dof_pair[0],
3289 value += get_fe_face_values(0).shape_grad_component(dof_pair[0],
3293 value -= get_fe_face_values(1).shape_grad_component(dof_pair[1],
3302template <
int dim,
int spacedim>
3305 const unsigned int interface_dof_index,
3306 const unsigned int q_point,
3307 const unsigned int component)
const
3309 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3312 return get_fe_face_values(0).shape_hessian_component(dof_pair[0],
3319 value += get_fe_face_values(0).shape_hessian_component(dof_pair[0],
3323 value -= get_fe_face_values(1).shape_hessian_component(dof_pair[1],
3332template <
int dim,
int spacedim>
3335 const unsigned int interface_dof_index,
3336 const unsigned int q_point,
3337 const unsigned int component)
const
3339 const auto dof_pair = interface_dof_to_dof_indices(interface_dof_index);
3342 return get_fe_face_values(0).shape_3rd_derivative_component(dof_pair[0],
3349 value += get_fe_face_values(0).shape_3rd_derivative_component(dof_pair[0],
3353 value -= get_fe_face_values(1).shape_3rd_derivative_component(dof_pair[1],
3362template <
int dim,
int spacedim>
3363template <
class InputVector>
3366 const InputVector &fe_function,
3367 std::vector<typename InputVector::value_type> &values)
const
3372 this->operator[](scalar).get_jump_in_function_values(fe_function, values);
3377template <
int dim,
int spacedim>
3378template <
class InputVector>
3381 const InputVector &fe_function,
3388 this->operator[](scalar).get_jump_in_function_gradients(fe_function,
3394template <
int dim,
int spacedim>
3395template <
class InputVector>
3398 const InputVector &fe_function,
3405 this->operator[](scalar).get_jump_in_function_hessians(fe_function, hessians);
3410template <
int dim,
int spacedim>
3411template <
class InputVector>
3414 const InputVector &fe_function,
3416 &third_derivatives)
const
3421 this->operator[](scalar).get_jump_in_function_third_derivatives(
3422 fe_function, third_derivatives);
3427template <
int dim,
int spacedim>
3428template <
class InputVector>
3431 const InputVector &fe_function,
3432 std::vector<typename InputVector::value_type> &values)
const
3437 this->operator[](scalar).get_average_of_function_values(fe_function, values);
3442template <
int dim,
int spacedim>
3443template <
class InputVector>
3446 const InputVector &fe_function,
3453 this->operator[](scalar).get_average_of_function_gradients(fe_function,
3459template <
int dim,
int spacedim>
3460template <
class InputVector>
3463 const InputVector &fe_function,
3470 this->operator[](scalar).get_average_of_function_hessians(fe_function,
3477template <
int dim,
int spacedim>
3482 const unsigned int n_components =
3483 (this->has_hp_capabilities() ? this->get_fe_collection().n_components() :
3484 this->get_fe().n_components());
3492template <
int dim,
int spacedim>
3497 const unsigned int n_components =
3498 (this->has_hp_capabilities() ? this->get_fe_collection().n_components() :
3499 this->get_fe().n_components());
3500 const unsigned int n_vectors =
3515 template <
int dim,
int spacedim>
3518 : fe_interface(&fe_interface)
3523 template <
int dim,
int spacedim>
3524 Scalar<dim, spacedim>::Scalar(
3526 const unsigned int component)
3527 : Base<dim, spacedim>(fe_interface)
3533 template <
int dim,
int spacedim>
3534 template <
class InputVector,
class OutputVector>
3536 Base<dim, spacedim>::get_local_dof_values(
3537 const InputVector &dof_values,
3538 OutputVector &local_dof_values)
const
3540 const auto &interface_dof_indices =
3541 this->fe_interface->get_interface_dof_indices();
3543 AssertDimension(interface_dof_indices.size(), local_dof_values.size());
3545 for (
const unsigned int i : this->fe_interface->dof_indices())
3546 local_dof_values[i] = dof_values(interface_dof_indices[i]);
3551 template <
int dim,
int spacedim>
3552 typename Scalar<dim, spacedim>::value_type
3553 Scalar<dim, spacedim>::value(
const bool here_or_there,
3554 const unsigned int interface_dof_index,
3555 const unsigned int q_point)
const
3557 const auto dof_pair =
3558 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3561 return (*(this->fe_interface->fe_face_values))[extractor].value(
3562 dof_pair[0], q_point);
3565 return (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
3566 dof_pair[1], q_point);
3573 template <
int dim,
int spacedim>
3574 typename Scalar<dim, spacedim>::gradient_type
3575 Scalar<dim, spacedim>::gradient(
const bool here_or_there,
3576 const unsigned int interface_dof_index,
3577 const unsigned int q_point)
const
3579 const auto dof_pair =
3580 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3582 gradient_type
value;
3585 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
3586 dof_pair[0], q_point);
3589 return (*(this->fe_interface->fe_face_values_neighbor))[extractor]
3590 .gradient(dof_pair[1], q_point);
3597 template <
int dim,
int spacedim>
3598 typename Scalar<dim, spacedim>::value_type
3599 Scalar<dim, spacedim>::jump_in_values(
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);
3609 (*(this->fe_interface->fe_face_values))[extractor].value(dof_pair[0],
3614 (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
3615 dof_pair[1], q_point);
3622 template <
int dim,
int spacedim>
3623 typename Scalar<dim, spacedim>::value_type
3624 Scalar<dim, spacedim>::average_of_values(
3625 const unsigned int interface_dof_index,
3626 const unsigned int q_point)
const
3628 const auto dof_pair =
3629 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3631 if (this->fe_interface->at_boundary())
3632 return (*(this->fe_interface->fe_face_values))[extractor].value(
3633 dof_pair[0], q_point);
3640 (*(this->fe_interface->fe_face_values))[extractor].value(dof_pair[0],
3645 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
3646 dof_pair[1], q_point);
3653 template <
int dim,
int spacedim>
3654 typename Scalar<dim, spacedim>::gradient_type
3655 Scalar<dim, spacedim>::average_of_gradients(
3656 const unsigned int interface_dof_index,
3657 const unsigned int q_point)
const
3659 const auto dof_pair =
3660 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3662 if (this->fe_interface->at_boundary())
3663 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
3664 dof_pair[0], q_point);
3666 gradient_type
value;
3671 (*(this->fe_interface->fe_face_values))[extractor].gradient(dof_pair[0],
3675 value += 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor]
3676 .gradient(dof_pair[1], q_point);
3683 template <
int dim,
int spacedim>
3684 typename Scalar<dim, spacedim>::gradient_type
3685 Scalar<dim, spacedim>::jump_in_gradients(
3686 const unsigned int interface_dof_index,
3687 const unsigned int q_point)
const
3689 const auto dof_pair =
3690 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3692 if (this->fe_interface->at_boundary())
3693 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
3694 dof_pair[0], q_point);
3696 gradient_type
value;
3700 (*(this->fe_interface->fe_face_values))[extractor].gradient(dof_pair[0],
3705 (*(this->fe_interface->fe_face_values_neighbor))[extractor].gradient(
3706 dof_pair[1], q_point);
3713 template <
int dim,
int spacedim>
3714 typename Scalar<dim, spacedim>::hessian_type
3715 Scalar<dim, spacedim>::average_of_hessians(
3716 const unsigned int interface_dof_index,
3717 const unsigned int q_point)
const
3719 const auto dof_pair =
3720 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3722 if (this->fe_interface->at_boundary())
3723 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
3724 dof_pair[0], q_point);
3731 (*(this->fe_interface->fe_face_values))[extractor].hessian(dof_pair[0],
3735 value += 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor]
3736 .hessian(dof_pair[1], q_point);
3743 template <
int dim,
int spacedim>
3744 typename Scalar<dim, spacedim>::third_derivative_type
3745 Scalar<dim, spacedim>::jump_in_third_derivatives(
3746 const unsigned int interface_dof_index,
3747 const unsigned int q_point)
const
3749 const auto dof_pair =
3750 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3752 if (this->fe_interface->at_boundary())
3753 return (*(this->fe_interface->fe_face_values))[extractor]
3754 .third_derivative(dof_pair[0], q_point);
3756 third_derivative_type
value;
3760 (*(this->fe_interface->fe_face_values))[extractor].third_derivative(
3761 dof_pair[0], q_point);
3764 value -= (*(this->fe_interface->fe_face_values_neighbor))[extractor]
3765 .third_derivative(dof_pair[1], q_point);
3772 template <
int dim,
int spacedim>
3773 typename Scalar<dim, spacedim>::hessian_type
3774 Scalar<dim, spacedim>::jump_in_hessians(
3775 const unsigned int interface_dof_index,
3776 const unsigned int q_point)
const
3778 const auto dof_pair =
3779 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
3781 if (this->fe_interface->at_boundary())
3782 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
3783 dof_pair[0], q_point);
3789 (*(this->fe_interface->fe_face_values))[extractor].hessian(dof_pair[0],
3794 (*(this->fe_interface->fe_face_values_neighbor))[extractor].hessian(
3795 dof_pair[1], q_point);
3802 template <
int dim,
int spacedim>
3803 template <
class InputVector>
3805 Scalar<dim, spacedim>::get_function_values_from_local_dof_values(
3806 const bool here_or_there,
3807 const InputVector &local_dof_values,
3808 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3813 for (
const auto dof_index : this->fe_interface->dof_indices())
3814 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
3819 values[q_index] += local_dof_values[dof_index] *
3820 value(here_or_there, dof_index, q_index);
3826 template <
int dim,
int spacedim>
3827 template <
class InputVector>
3829 Scalar<dim, spacedim>::get_function_values(
3830 const bool here_or_there,
3831 const InputVector &fe_function,
3832 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3835 std::vector<typename InputVector::value_type> local_dof_values(
3836 this->fe_interface->n_current_interface_dofs());
3837 this->get_local_dof_values(fe_function, local_dof_values);
3839 get_function_values_from_local_dof_values(here_or_there,
3846 template <
int dim,
int spacedim>
3847 template <
class InputVector>
3849 Scalar<dim, spacedim>::get_jump_in_function_values_from_local_dof_values(
3850 const InputVector &local_dof_values,
3851 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3856 for (
const auto dof_index : this->fe_interface->dof_indices())
3857 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
3863 local_dof_values[dof_index] * jump_in_values(dof_index, q_index);
3869 template <
int dim,
int spacedim>
3870 template <
class InputVector>
3872 Scalar<dim, spacedim>::get_jump_in_function_values(
3873 const InputVector &fe_function,
3874 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3877 std::vector<typename InputVector::value_type> local_dof_values(
3878 this->fe_interface->n_current_interface_dofs());
3879 this->get_local_dof_values(fe_function, local_dof_values);
3881 get_jump_in_function_values_from_local_dof_values(local_dof_values, values);
3886 template <
int dim,
int spacedim>
3887 template <
class InputVector>
3889 Scalar<dim, spacedim>::get_jump_in_function_gradients_from_local_dof_values(
3890 const InputVector &local_dof_values,
3891 std::vector<solution_gradient_type<typename InputVector::value_type>>
3896 for (
const auto dof_index : this->fe_interface->dof_indices())
3897 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
3903 local_dof_values[dof_index] * jump_in_gradients(dof_index, q_index);
3909 template <
int dim,
int spacedim>
3910 template <
class InputVector>
3912 Scalar<dim, spacedim>::get_jump_in_function_gradients(
3913 const InputVector &fe_function,
3914 std::vector<solution_gradient_type<typename InputVector::value_type>>
3917 std::vector<typename InputVector::value_type> local_dof_values(
3918 this->fe_interface->n_current_interface_dofs());
3919 this->get_local_dof_values(fe_function, local_dof_values);
3921 get_jump_in_function_gradients_from_local_dof_values(local_dof_values,
3927 template <
int dim,
int spacedim>
3928 template <
class InputVector>
3930 Scalar<dim, spacedim>::get_average_of_function_values_from_local_dof_values(
3931 const InputVector &local_dof_values,
3932 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3937 for (
const auto dof_index : this->fe_interface->dof_indices())
3938 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
3944 local_dof_values[dof_index] * average_of_values(dof_index, q_index);
3950 template <
int dim,
int spacedim>
3951 template <
class InputVector>
3953 Scalar<dim, spacedim>::get_average_of_function_values(
3954 const InputVector &fe_function,
3955 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3958 std::vector<typename InputVector::value_type> local_dof_values(
3959 this->fe_interface->n_current_interface_dofs());
3960 this->get_local_dof_values(fe_function, local_dof_values);
3962 get_average_of_function_values_from_local_dof_values(local_dof_values,
3968 template <
int dim,
int spacedim>
3969 template <
class InputVector>
3971 Scalar<dim, spacedim>::
3972 get_average_of_function_gradients_from_local_dof_values(
3973 const InputVector &local_dof_values,
3974 std::vector<solution_gradient_type<typename InputVector::value_type>>
3979 for (
const auto dof_index : this->fe_interface->dof_indices())
3980 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
3985 gradients[q_index] += local_dof_values[dof_index] *
3986 average_of_gradients(dof_index, q_index);
3992 template <
int dim,
int spacedim>
3993 template <
class InputVector>
3995 Scalar<dim, spacedim>::get_average_of_function_gradients(
3996 const InputVector &fe_function,
3997 std::vector<solution_gradient_type<typename InputVector::value_type>>
4000 std::vector<typename InputVector::value_type> local_dof_values(
4001 this->fe_interface->n_current_interface_dofs());
4002 this->get_local_dof_values(fe_function, local_dof_values);
4004 get_average_of_function_gradients_from_local_dof_values(local_dof_values,
4010 template <
int dim,
int spacedim>
4011 template <
class InputVector>
4013 Scalar<dim, spacedim>::get_jump_in_function_hessians_from_local_dof_values(
4014 const InputVector &local_dof_values,
4015 std::vector<solution_hessian_type<typename InputVector::value_type>>
4020 for (
const auto dof_index : this->fe_interface->dof_indices())
4021 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4027 local_dof_values[dof_index] * jump_in_hessians(dof_index, q_index);
4033 template <
int dim,
int spacedim>
4034 template <
class InputVector>
4036 Scalar<dim, spacedim>::get_jump_in_function_hessians(
4037 const InputVector &fe_function,
4038 std::vector<solution_hessian_type<typename InputVector::value_type>>
4041 std::vector<typename InputVector::value_type> local_dof_values(
4042 this->fe_interface->n_current_interface_dofs());
4043 this->get_local_dof_values(fe_function, local_dof_values);
4045 get_jump_in_function_hessians_from_local_dof_values(local_dof_values,
4051 template <
int dim,
int spacedim>
4052 template <
class InputVector>
4054 Scalar<dim, spacedim>::get_average_of_function_hessians_from_local_dof_values(
4055 const InputVector &local_dof_values,
4056 std::vector<solution_hessian_type<typename InputVector::value_type>>
4061 for (
const unsigned int dof_index : this->fe_interface->dof_indices())
4062 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4067 hessians[q_index] += local_dof_values[dof_index] *
4068 average_of_hessians(dof_index, q_index);
4074 template <
int dim,
int spacedim>
4075 template <
class InputVector>
4077 Scalar<dim, spacedim>::get_average_of_function_hessians(
4078 const InputVector &fe_function,
4079 std::vector<solution_hessian_type<typename InputVector::value_type>>
4082 std::vector<typename InputVector::value_type> local_dof_values(
4083 this->fe_interface->n_current_interface_dofs());
4084 this->get_local_dof_values(fe_function, local_dof_values);
4086 get_average_of_function_hessians_from_local_dof_values(local_dof_values,
4092 template <
int dim,
int spacedim>
4093 template <
class InputVector>
4095 Scalar<dim, spacedim>::
4096 get_jump_in_function_third_derivatives_from_local_dof_values(
4097 const InputVector &local_dof_values,
4099 solution_third_derivative_type<typename InputVector::value_type>>
4100 &third_derivatives)
const
4103 this->fe_interface->n_quadrature_points);
4105 for (
const unsigned int dof_index : this->fe_interface->dof_indices())
4106 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4109 third_derivatives[q_index] = 0.;
4111 third_derivatives[q_index] +=
4112 local_dof_values[dof_index] *
4113 jump_in_third_derivatives(dof_index, q_index);
4119 template <
int dim,
int spacedim>
4120 template <
class InputVector>
4122 Scalar<dim, spacedim>::get_jump_in_function_third_derivatives(
4123 const InputVector &fe_function,
4125 solution_third_derivative_type<typename InputVector::value_type>>
4126 &third_derivatives)
const
4128 std::vector<typename InputVector::value_type> local_dof_values(
4129 this->fe_interface->n_current_interface_dofs());
4130 this->get_local_dof_values(fe_function, local_dof_values);
4132 get_jump_in_function_third_derivatives_from_local_dof_values(
4133 local_dof_values, third_derivatives);
4138 template <
int dim,
int spacedim>
4141 const unsigned int first_vector_component)
4142 : Base<dim, spacedim>(fe_interface)
4143 , extractor(first_vector_component)
4148 template <
int dim,
int spacedim>
4151 const unsigned int interface_dof_index,
4152 const unsigned int q_point)
const
4154 const auto dof_pair =
4155 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4158 return (*(this->fe_interface->fe_face_values))[extractor].value(
4159 dof_pair[0], q_point);
4162 return (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
4163 dof_pair[1], q_point);
4170 template <
int dim,
int spacedim>
4173 const unsigned int interface_dof_index,
4174 const unsigned int q_point)
const
4176 const auto dof_pair =
4177 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4179 gradient_type
value;
4182 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
4183 dof_pair[0], q_point);
4186 return (*(this->fe_interface->fe_face_values_neighbor))[extractor]
4187 .gradient(dof_pair[1], q_point);
4194 template <
int dim,
int spacedim>
4197 const unsigned int q_point)
const
4199 const auto dof_pair =
4200 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4206 (*(this->fe_interface->fe_face_values))[extractor].value(dof_pair[0],
4211 (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
4212 dof_pair[1], q_point);
4219 template <
int dim,
int spacedim>
4222 const unsigned int interface_dof_index,
4223 const unsigned int q_point)
const
4225 const auto dof_pair =
4226 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4228 if (this->fe_interface->at_boundary())
4229 return (*(this->fe_interface->fe_face_values))[extractor].value(
4230 dof_pair[0], q_point);
4237 (*(this->fe_interface->fe_face_values))[extractor].value(dof_pair[0],
4242 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
4243 dof_pair[1], q_point);
4250 template <
int dim,
int spacedim>
4253 const unsigned int interface_dof_index,
4254 const unsigned int q_point)
const
4256 const auto dof_pair =
4257 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4259 if (this->fe_interface->at_boundary())
4260 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
4261 dof_pair[0], q_point);
4263 gradient_type
value;
4268 (*(this->fe_interface->fe_face_values))[extractor].gradient(dof_pair[0],
4272 value += 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor]
4273 .gradient(dof_pair[1], q_point);
4280 template <
int dim,
int spacedim>
4283 const unsigned int interface_dof_index,
4284 const unsigned int q_point)
const
4286 const auto dof_pair =
4287 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4289 if (this->fe_interface->at_boundary())
4290 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
4291 dof_pair[0], q_point);
4293 gradient_type
value;
4297 (*(this->fe_interface->fe_face_values))[extractor].gradient(dof_pair[0],
4302 (*(this->fe_interface->fe_face_values_neighbor))[extractor].gradient(
4303 dof_pair[1], q_point);
4310 template <
int dim,
int spacedim>
4313 const unsigned int q_point)
const
4315 return jump_in_gradients(interface_dof_index, q_point);
4320 template <
int dim,
int spacedim>
4323 const unsigned int interface_dof_index,
4324 const unsigned int q_point)
const
4326 const auto dof_pair =
4327 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4329 if (this->fe_interface->at_boundary())
4330 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
4331 dof_pair[0], q_point);
4338 (*(this->fe_interface->fe_face_values))[extractor].hessian(dof_pair[0],
4342 value += 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor]
4343 .hessian(dof_pair[1], q_point);
4350 template <
int dim,
int spacedim>
4353 const unsigned int q_point)
const
4355 return average_of_hessians(interface_dof_index, q_point);
4360 template <
int dim,
int spacedim>
4363 const unsigned int interface_dof_index,
4364 const unsigned int q_point)
const
4366 const auto dof_pair =
4367 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4369 if (this->fe_interface->at_boundary())
4370 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
4371 dof_pair[0], q_point);
4377 (*(this->fe_interface->fe_face_values))[extractor].hessian(dof_pair[0],
4382 (*(this->fe_interface->fe_face_values_neighbor))[extractor].hessian(
4383 dof_pair[1], q_point);
4390 template <
int dim,
int spacedim>
4393 const unsigned int q_point)
const
4395 return jump_in_hessians(interface_dof_index, q_point);
4400 template <
int dim,
int spacedim>
4403 const unsigned int interface_dof_index,
4404 const unsigned int q_point)
const
4406 const auto dof_pair =
4407 this->fe_interface->interface_dof_to_dof_indices(interface_dof_index);
4409 if (this->fe_interface->at_boundary())
4410 return (*(this->fe_interface->fe_face_values))[extractor]
4411 .third_derivative(dof_pair[0], q_point);
4413 third_derivative_type
value;
4417 (*(this->fe_interface->fe_face_values))[extractor].third_derivative(
4418 dof_pair[0], q_point);
4421 value -= (*(this->fe_interface->fe_face_values_neighbor))[extractor]
4422 .third_derivative(dof_pair[1], q_point);
4429 template <
int dim,
int spacedim>
4430 template <
class InputVector>
4433 const bool here_or_there,
4434 const InputVector &local_dof_values,
4435 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4440 for (
const auto dof_index : this->fe_interface->dof_indices())
4441 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4446 values[q_index] += local_dof_values[dof_index] *
4447 value(here_or_there, dof_index, q_index);
4453 template <
int dim,
int spacedim>
4454 template <
class InputVector>
4457 const bool here_or_there,
4458 const InputVector &fe_function,
4459 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4462 std::vector<typename InputVector::value_type> local_dof_values(
4463 this->fe_interface->n_current_interface_dofs());
4464 this->get_local_dof_values(fe_function, local_dof_values);
4466 get_function_values_from_local_dof_values(here_or_there,
4473 template <
int dim,
int spacedim>
4474 template <
class InputVector>
4477 const InputVector &local_dof_values,
4478 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4483 for (
const auto dof_index : this->fe_interface->dof_indices())
4484 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4490 local_dof_values[dof_index] * jump_in_values(dof_index, q_index);
4496 template <
int dim,
int spacedim>
4497 template <
class InputVector>
4500 const InputVector &fe_function,
4501 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4504 std::vector<typename InputVector::value_type> local_dof_values(
4505 this->fe_interface->n_current_interface_dofs());
4506 this->get_local_dof_values(fe_function, local_dof_values);
4508 get_jump_in_function_values_from_local_dof_values(local_dof_values, values);
4513 template <
int dim,
int spacedim>
4514 template <
class InputVector>
4517 const InputVector &local_dof_values,
4518 std::vector<solution_gradient_type<typename InputVector::value_type>>
4523 for (
const auto dof_index : this->fe_interface->dof_indices())
4524 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4530 local_dof_values[dof_index] * jump_in_gradients(dof_index, q_index);
4536 template <
int dim,
int spacedim>
4537 template <
class InputVector>
4540 const InputVector &fe_function,
4541 std::vector<solution_gradient_type<typename InputVector::value_type>>
4544 std::vector<typename InputVector::value_type> local_dof_values(
4545 this->fe_interface->n_current_interface_dofs());
4546 this->get_local_dof_values(fe_function, local_dof_values);
4548 get_jump_in_function_gradients_from_local_dof_values(local_dof_values,
4554 template <
int dim,
int spacedim>
4555 template <
class InputVector>
4558 const InputVector &local_dof_values,
4559 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4564 for (
const auto dof_index : this->fe_interface->dof_indices())
4565 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4571 local_dof_values[dof_index] * average_of_values(dof_index, q_index);
4577 template <
int dim,
int spacedim>
4578 template <
class InputVector>
4581 const InputVector &fe_function,
4582 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4585 std::vector<typename InputVector::value_type> local_dof_values(
4586 this->fe_interface->n_current_interface_dofs());
4587 this->get_local_dof_values(fe_function, local_dof_values);
4589 get_average_of_function_values_from_local_dof_values(local_dof_values,
4595 template <
int dim,
int spacedim>
4596 template <
class InputVector>
4600 const InputVector &local_dof_values,
4601 std::vector<solution_gradient_type<typename InputVector::value_type>>
4606 for (
const auto dof_index : this->fe_interface->dof_indices())
4607 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4612 gradients[q_index] += local_dof_values[dof_index] *
4613 average_of_gradients(dof_index, q_index);
4619 template <
int dim,
int spacedim>
4620 template <
class InputVector>
4623 const InputVector &fe_function,
4624 std::vector<solution_gradient_type<typename InputVector::value_type>>
4627 std::vector<typename InputVector::value_type> local_dof_values(
4628 this->fe_interface->n_current_interface_dofs());
4629 this->get_local_dof_values(fe_function, local_dof_values);
4631 get_average_of_function_gradients_from_local_dof_values(local_dof_values,
4637 template <
int dim,
int spacedim>
4638 template <
class InputVector>
4641 const InputVector &local_dof_values,
4642 std::vector<solution_hessian_type<typename InputVector::value_type>>
4647 for (
const auto dof_index : this->fe_interface->dof_indices())
4648 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4654 local_dof_values[dof_index] * jump_in_hessians(dof_index, q_index);
4660 template <
int dim,
int spacedim>
4661 template <
class InputVector>
4664 const InputVector &fe_function,
4665 std::vector<solution_hessian_type<typename InputVector::value_type>>
4668 std::vector<typename InputVector::value_type> local_dof_values(
4669 this->fe_interface->n_current_interface_dofs());
4670 this->get_local_dof_values(fe_function, local_dof_values);
4672 get_jump_in_function_hessians_from_local_dof_values(local_dof_values,
4678 template <
int dim,
int spacedim>
4679 template <
class InputVector>
4682 const InputVector &local_dof_values,
4683 std::vector<solution_hessian_type<typename InputVector::value_type>>
4688 for (
const unsigned int dof_index : this->fe_interface->dof_indices())
4689 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4694 hessians[q_index] += local_dof_values[dof_index] *
4695 average_of_hessians(dof_index, q_index);
4701 template <
int dim,
int spacedim>
4702 template <
class InputVector>
4705 const InputVector &fe_function,
4706 std::vector<solution_hessian_type<typename InputVector::value_type>>
4709 std::vector<typename InputVector::value_type> local_dof_values(
4710 this->fe_interface->n_current_interface_dofs());
4711 this->get_local_dof_values(fe_function, local_dof_values);
4713 get_average_of_function_hessians_from_local_dof_values(local_dof_values,
4719 template <
int dim,
int spacedim>
4720 template <
class InputVector>
4724 const InputVector &local_dof_values,
4726 solution_third_derivative_type<typename InputVector::value_type>>
4727 &third_derivatives)
const
4730 this->fe_interface->n_quadrature_points);
4732 for (
const unsigned int dof_index : this->fe_interface->dof_indices())
4733 for (
const auto q_index : this->fe_interface->quadrature_point_indices())
4736 third_derivatives[q_index] = 0.;
4738 third_derivatives[q_index] +=
4739 local_dof_values[dof_index] *
4740 jump_in_third_derivatives(dof_index, q_index);
4746 template <
int dim,
int spacedim>
4747 template <
class InputVector>
4750 const InputVector &fe_function,
4752 solution_third_derivative_type<typename InputVector::value_type>>
4753 &third_derivatives)
const
4755 std::vector<typename InputVector::value_type> local_dof_values(
4756 this->fe_interface->n_current_interface_dofs());
4757 this->get_local_dof_values(fe_function, local_dof_values);
4759 get_jump_in_function_third_derivatives_from_local_dof_values(
4760 local_dof_values, third_derivatives);
* * for(const auto &cell :triangulation.active_cell_iterators())
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, level_dof_access > > &cell, const unsigned int face_no)
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
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
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
FEInterfaceViews::Vector< dim, spacedim > operator[](const FEValuesExtractors::Vector &vector) 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
gradient_type gradient(const bool here_or_there, const unsigned int interface_dof_index, const unsigned int q_point) const
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 FEValuesViews::Scalar< dim, spacedim >::gradient_type 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
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
typename ProductType< Number, third_derivative_type >::type solution_third_derivative_type
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 >::hessian_type hessian_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
typename FEValuesViews::Scalar< dim, spacedim >::third_derivative_type third_derivative_type
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
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
typename ProductType< Number, gradient_type >::type solution_gradient_type
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
void get_average_of_function_values(const InputVector &fe_function, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
typename FEValuesViews::Vector< dim, spacedim >::value_type value_type
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 ProductType< Number, hessian_type >::type solution_hessian_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
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 ProductType< Number, third_derivative_type >::type solution_third_derivative_type
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 FEValuesViews::Vector< dim, spacedim >::third_derivative_type third_derivative_type
hessian_type average_of_hessians(const unsigned int interface_dof_index, const unsigned int q_point) const
typename FEValuesViews::Vector< dim, spacedim >::hessian_type hessian_type
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, level_dof_access > > &cell, const unsigned int face_no, const unsigned int subface_no)
Abstract base class for mapping classes.
#define DEAL_II_NAMESPACE_OPEN
#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)
const Mapping< dim, spacedim > & get_default_linear_mapping(const Triangulation< dim, spacedim > &triangulation)
std::vector< index_type > data
typename ::internal::FEInterfaceViews::ViewType< dim, spacedim, Extractor >::type View
void reference_cell(Triangulation< dim, spacedim > &tria, const ReferenceCell< dim > &reference_cell)
* * * ScaleZFunction< dim, Number, components >::ScaleZFunction * component(component)
* * * * std::vector< Number > ThermoPlasticMaterial< dim, ViscoplasticYieldLaw, Number >::get_state_parameters const
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
boost::integer_range< IncrementableType > iota_view
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