16#ifndef dealii_fe_interface_values_h
17#define dealii_fe_interface_values_h
33template <
int dim,
int spacedim>
46 template <
int dim,
int spacedim = dim>
65 template <
class InputVector,
class OutputVector>
68 OutputVector & local_dof_values)
const;
76 template <
int dim,
int spacedim = dim>
112 template <
typename Number>
121 template <
typename Number>
131 template <
typename Number>
141 template <
typename Number>
149 const unsigned int component);
177 const unsigned int interface_dof_index,
178 const unsigned int q_point)
const;
199 const unsigned int q_point)
const;
208 jump(
const unsigned int interface_dof_index,
209 const unsigned int q_point)
const;
223 const unsigned int q_point)
const;
233 const unsigned int q_point)
const;
247 const unsigned int q_point)
const;
257 const unsigned int q_point)
const;
271 const unsigned int q_point)
const;
281 const unsigned int q_point)
const;
302 const unsigned int q_point)
const;
312 const unsigned int q_point)
const;
321 average(
const unsigned int interface_dof_index,
322 const unsigned int q_point)
const;
336 const unsigned int q_point)
const;
346 const unsigned int q_point)
const;
361 const unsigned int q_point)
const;
371 const unsigned int q_point)
const;
399 template <
class InputVector>
402 const bool here_or_there,
403 const InputVector &fe_function,
429 template <
class InputVector>
432 const bool here_or_there,
433 const InputVector &local_dof_values,
457 template <
class InputVector>
460 const InputVector &fe_function,
471 template <
class InputVector>
474 const InputVector &local_dof_values,
491 template <
class InputVector>
494 const InputVector &fe_function,
505 template <
class InputVector>
508 const InputVector &local_dof_values,
525 template <
class InputVector>
528 const InputVector &fe_function,
539 template <
class InputVector>
542 const InputVector &local_dof_values,
560 template <
class InputVector>
563 const InputVector &fe_function,
566 &third_derivatives)
const;
575 template <
class InputVector>
578 const InputVector &local_dof_values,
581 &third_derivatives)
const;
603 template <
class InputVector>
606 const InputVector &fe_function,
617 template <
class InputVector>
620 const InputVector &local_dof_values,
637 template <
class InputVector>
640 const InputVector &fe_function,
651 template <
class InputVector>
654 const InputVector &local_dof_values,
671 template <
class InputVector>
674 const InputVector &fe_function,
685 template <
class InputVector>
688 const InputVector &local_dof_values,
706 template <
int dim,
int spacedim = dim>
745 template <
typename Number>
754 template <
typename Number>
764 template <
typename Number>
774 template <
typename Number>
782 const unsigned int first_vector_component);
810 const unsigned int interface_dof_index,
811 const unsigned int q_point)
const;
831 const unsigned int q_point)
const;
840 jump(
const unsigned int interface_dof_index,
841 const unsigned int q_point)
const;
854 const unsigned int q_point)
const;
863 const unsigned int q_point)
const;
877 const unsigned int q_point)
const;
886 const unsigned int q_point)
const;
900 const unsigned int q_point)
const;
910 const unsigned int q_point)
const;
930 const unsigned int q_point)
const;
939 average(
const unsigned int interface_dof_index,
940 const unsigned int q_point)
const;
953 const unsigned int q_point)
const;
963 const unsigned int q_point)
const;
978 const unsigned int q_point)
const;
987 const unsigned int q_point)
const;
1015 template <
class InputVector>
1018 const bool here_or_there,
1019 const InputVector &fe_function,
1045 template <
class InputVector>
1048 const bool here_or_there,
1049 const InputVector &local_dof_values,
1073 template <
class InputVector>
1076 const InputVector &fe_function,
1087 template <
class InputVector>
1090 const InputVector &local_dof_values,
1107 template <
class InputVector>
1110 const InputVector &fe_function,
1121 template <
class InputVector>
1124 const InputVector &local_dof_values,
1141 template <
class InputVector>
1144 const InputVector &fe_function,
1155 template <
class InputVector>
1158 const InputVector &local_dof_values,
1176 template <
class InputVector>
1179 const InputVector &fe_function,
1182 &third_derivatives)
const;
1191 template <
class InputVector>
1194 const InputVector &local_dof_values,
1197 &third_derivatives)
const;
1219 template <
class InputVector>
1222 const InputVector &fe_function,
1233 template <
class InputVector>
1236 const InputVector &local_dof_values,
1253 template <
class InputVector>
1256 const InputVector &fe_function,
1267 template <
class InputVector>
1270 const InputVector &local_dof_values,
1287 template <
class InputVector>
1290 const InputVector &fe_function,
1301 template <
class InputVector>
1304 const InputVector &local_dof_values,
1327 template <
int dim,
int spacedim,
typename Extractor>
1338 template <
int dim,
int spacedim>
1341 using type = typename ::FEInterfaceViews::Scalar<dim, spacedim>;
1351 template <
int dim,
int spacedim>
1354 using type = typename ::FEInterfaceViews::Vector<dim, spacedim>;
1365 template <
int dim,
int spacedim,
typename Extractor>
1366 using View = typename ::internal::FEInterfaceViews::
1367 ViewType<dim, spacedim, Extractor>::type;
1396template <
int dim,
int spacedim = dim>
1566 template <
class CellIteratorType,
class CellNeighborIteratorType>
1569 const unsigned int face_no,
1570 const unsigned int sub_face_no,
1571 const CellNeighborIteratorType &cell_neighbor,
1572 const unsigned int face_no_neighbor,
1573 const unsigned int sub_face_no_neighbor,
1604 template <
class CellIteratorType>
1607 const unsigned int face_no,
1716 JxW(
const unsigned int quadrature_point)
const;
1723 const std::vector<double> &
1735 const std::vector<Tensor<1, spacedim>> &
1753 const std::vector<Point<spacedim>> &
1809 std::vector<types::global_dof_index>
1824 std::array<unsigned int, 2>
1836 normal(
const unsigned int q_point_index)
const;
1870 const unsigned int interface_dof_index,
1871 const unsigned int q_point,
1872 const unsigned int component = 0)
const;
1903 const unsigned int q_point,
1904 const unsigned int component = 0)
const;
1913 jump(
const unsigned int interface_dof_index,
1914 const unsigned int q_point,
1915 const unsigned int component = 0)
const;
1932 const unsigned int q_point,
1933 const unsigned int component = 0)
const;
1943 const unsigned int q_point,
1944 const unsigned int component = 0)
const;
1962 const unsigned int q_point,
1963 const unsigned int component = 0)
const;
1973 const unsigned int q_point,
1974 const unsigned int component = 0)
const;
1991 const unsigned int q_point,
1992 const unsigned int component = 0)
const;
2002 const unsigned int q_point,
2003 const unsigned int component = 0)
const;
2029 const unsigned int q_point,
2030 const unsigned int component = 0)
const;
2040 const unsigned int q_point,
2041 const unsigned int component = 0)
const;
2058 const unsigned int q_point,
2059 const unsigned int component = 0)
const;
2069 const unsigned int q_point,
2070 const unsigned int component = 0)
const;
2088 const unsigned int q_point,
2089 const unsigned int component = 0)
const;
2099 const unsigned int q_point,
2100 const unsigned int component = 0)
const;
2121 template <
class InputVector>
2124 const InputVector & fe_function,
2125 std::vector<typename InputVector::value_type> &values)
const;
2135 template <
class InputVector>
2138 const InputVector &fe_function,
2149 template <
class InputVector>
2152 const InputVector &fe_function,
2164 template <
class InputVector>
2167 const InputVector &fe_function,
2169 &third_derivatives)
const;
2186 template <
class InputVector>
2189 const InputVector & fe_function,
2190 std::vector<typename InputVector::value_type> &values)
const;
2199 template <
class InputVector>
2202 const InputVector &fe_function,
2213 template <
class InputVector>
2216 const InputVector &fe_function,
2264 std::vector<std::array<unsigned int, 2>>
dofmap;
2302 std::unique_ptr<FESubfaceValues<dim, spacedim>>
2322 std::unique_ptr<hp::FESubfaceValues<dim, spacedim>>
2329 std::unique_ptr<hp::FEFaceValues<dim, spacedim>>
2336 std::unique_ptr<hp::FESubfaceValues<dim, spacedim>>
2346 "The current function doesn't make sense when used with a "
2347 "FEInterfaceValues object with hp-capabilities.");
2356 "The current function doesn't make sense when used with a "
2357 "FEInterfaceValues object without hp-capabilities.");
2377template <
int dim,
int spacedim>
2383 : n_quadrature_points(quadrature.size())
2384 , fe_face_values(nullptr)
2385 , fe_face_values_neighbor(nullptr)
2386 , internal_fe_face_values(
2391 , internal_fe_subface_values(
2396 , internal_fe_face_values_neighbor(
2401 , internal_fe_subface_values_neighbor(
2410template <
int dim,
int spacedim>
2424template <
int dim,
int spacedim>
2430 : n_quadrature_points(quadrature.max_n_quadrature_points())
2431 , fe_face_values(nullptr)
2432 , fe_face_values_neighbor(nullptr)
2433 , internal_fe_face_values(
2438 , internal_fe_subface_values(
2443 , internal_fe_face_values_neighbor(
2448 , internal_fe_subface_values_neighbor(
2457template <
int dim,
int spacedim>
2463 : n_quadrature_points(quadrature_collection.max_n_quadrature_points())
2464 , fe_face_values(nullptr)
2465 , fe_face_values_neighbor(nullptr)
2466 , internal_hp_fe_face_values(
2469 quadrature_collection,
2471 , internal_hp_fe_subface_values(
2475 quadrature_collection,
2477 , internal_hp_fe_face_values_neighbor(
2480 quadrature_collection,
2482 , internal_hp_fe_subface_values_neighbor(
2486 quadrature_collection,
2494template <
int dim,
int spacedim>
2501 quadrature_collection,
2507template <
int dim,
int spacedim>
2508template <
class CellIteratorType,
class CellNeighborIteratorType>
2511 const CellIteratorType & cell,
2512 const unsigned int face_no,
2513 const unsigned int sub_face_no,
2514 const CellNeighborIteratorType &cell_neighbor,
2515 const unsigned int face_no_neighbor,
2516 const unsigned int sub_face_no_neighbor,
2517 const unsigned int q_index,
2518 const unsigned int mapping_index,
2519 const unsigned int fe_index)
2521 Assert(internal_fe_face_values || internal_hp_fe_face_values,
2524 if (internal_fe_face_values)
2528 internal_fe_face_values->reinit(cell, face_no);
2529 fe_face_values = internal_fe_face_values.get();
2533 internal_fe_subface_values->reinit(cell, face_no, sub_face_no);
2534 fe_face_values = internal_fe_subface_values.get();
2538 internal_fe_face_values_neighbor->reinit(cell_neighbor,
2540 fe_face_values_neighbor = internal_fe_face_values_neighbor.get();
2544 internal_fe_subface_values_neighbor->reinit(cell_neighbor,
2546 sub_face_no_neighbor);
2547 fe_face_values_neighbor = internal_fe_subface_values_neighbor.get();
2551 fe_face_values_neighbor->n_quadrature_points);
2553 const_cast<unsigned int &
>(this->n_quadrature_points) =
2554 fe_face_values->n_quadrature_points;
2556 else if (internal_hp_fe_face_values)
2558 unsigned int used_q_index = q_index;
2559 unsigned int used_mapping_index = mapping_index;
2564 if (internal_hp_fe_face_values->get_quadrature_collection().size() == 1)
2568 if (internal_hp_fe_face_values->get_mapping_collection().size() == 1)
2569 used_mapping_index = 0;
2576 if (internal_hp_fe_face_values
2577 ->get_quadrature_collection()[cell->active_fe_index()] ==
2578 internal_hp_fe_face_values
2579 ->get_quadrature_collection()[cell_neighbor->active_fe_index()])
2580 used_q_index = cell->active_fe_index();
2584 const unsigned int dominated_fe_index =
2587 internal_hp_fe_face_values->get_fe_collection().find_dominated_fe(
2588 {cell->active_fe_index(), cell_neighbor->active_fe_index()}) :
2589 numbers::invalid_unsigned_int);
2595 "You called this function with 'q_index' left at its "
2596 "default value, but this can only work if one of "
2597 "the two finite elements adjacent to this face "
2598 "dominates the other. See the documentation "
2599 "of this function for more information of how "
2600 "to deal with this situation."));
2601 used_q_index = dominated_fe_index;
2608 "You called this function with 'mapping_index' left "
2609 "at its default value, but this can only work if one "
2610 "of the two finite elements adjacent to this face "
2611 "dominates the other. See the documentation "
2612 "of this function for more information of how "
2613 "to deal with this situation."));
2614 used_mapping_index = dominated_fe_index;
2620 internal_hp_fe_face_values->reinit(
2621 cell, face_no, used_q_index, used_mapping_index, fe_index);
2623 internal_hp_fe_face_values->get_present_fe_values());
2627 internal_hp_fe_subface_values->
reinit(
2628 cell, face_no, sub_face_no, used_q_index, used_mapping_index);
2631 internal_hp_fe_subface_values->get_present_fe_values());
2635 internal_hp_fe_face_values_neighbor->
reinit(cell_neighbor,
2638 used_mapping_index);
2641 internal_hp_fe_face_values_neighbor->get_present_fe_values());
2645 internal_hp_fe_subface_values_neighbor->
reinit(cell_neighbor,
2647 sub_face_no_neighbor,
2649 used_mapping_index);
2651 fe_face_values_neighbor =
2653 internal_hp_fe_subface_values_neighbor->get_present_fe_values());
2657 fe_face_values_neighbor->n_quadrature_points);
2659 const_cast<unsigned int &
>(this->n_quadrature_points) =
2660 fe_face_values->n_quadrature_points;
2666 std::vector<types::global_dof_index> v(
2667 fe_face_values->get_fe().n_dofs_per_cell());
2668 cell->get_active_or_mg_dof_indices(v);
2669 std::vector<types::global_dof_index> v2(
2670 fe_face_values_neighbor->get_fe().n_dofs_per_cell());
2671 cell_neighbor->get_active_or_mg_dof_indices(v2);
2675 std::map<types::global_dof_index, std::pair<unsigned int, unsigned int>>
2677 std::pair<unsigned int, unsigned int> invalid_entry(
2680 for (
unsigned int i = 0; i < v.size(); ++i)
2683 auto result = tempmap.insert(std::make_pair(v[i], invalid_entry));
2684 result.first->second.first = i;
2687 for (
unsigned int i = 0; i < v2.size(); ++i)
2690 auto result = tempmap.insert(std::make_pair(v2[i], invalid_entry));
2691 result.first->second.second = i;
2695 dofmap.resize(tempmap.size());
2696 interface_dof_indices.resize(tempmap.size());
2697 unsigned int idx = 0;
2698 for (
auto &x : tempmap)
2700 interface_dof_indices[idx] = x.first;
2701 dofmap[idx] = {{x.second.first, x.second.second}};
2709template <
int dim,
int spacedim>
2710template <
class CellIteratorType>
2713 const unsigned int face_no,
2714 const unsigned int q_index,
2715 const unsigned int mapping_index,
2716 const unsigned int fe_index)
2718 Assert(internal_fe_face_values || internal_hp_fe_face_values,
2721 if (internal_fe_face_values)
2723 internal_fe_face_values->reinit(cell, face_no);
2724 fe_face_values = internal_fe_face_values.get();
2725 fe_face_values_neighbor =
nullptr;
2727 interface_dof_indices.resize(fe_face_values->get_fe().n_dofs_per_cell());
2728 cell->get_active_or_mg_dof_indices(interface_dof_indices);
2730 else if (internal_hp_fe_face_values)
2732 internal_hp_fe_face_values->reinit(
2733 cell, face_no, q_index, mapping_index, fe_index);
2735 internal_hp_fe_face_values->get_present_fe_values());
2736 fe_face_values_neighbor =
nullptr;
2738 interface_dof_indices.resize(fe_face_values->get_fe().n_dofs_per_cell());
2739 cell->get_active_or_mg_dof_indices(interface_dof_indices);
2742 dofmap.resize(interface_dof_indices.size());
2743 for (
unsigned int i = 0; i < interface_dof_indices.size(); ++i)
2751template <
int dim,
int spacedim>
2755 Assert(fe_face_values !=
nullptr,
2756 ExcMessage(
"This call requires a call to reinit() first."));
2757 return fe_face_values->JxW(q);
2762template <
int dim,
int spacedim>
2763const std::vector<double> &
2766 Assert(fe_face_values !=
nullptr,
2767 ExcMessage(
"This call requires a call to reinit() first."));
2768 return fe_face_values->get_JxW_values();
2773template <
int dim,
int spacedim>
2774const std::vector<Tensor<1, spacedim>> &
2777 Assert(fe_face_values !=
nullptr,
2778 ExcMessage(
"This call requires a call to reinit() first."));
2779 return fe_face_values->get_normal_vectors();
2784template <
int dim,
int spacedim>
2788 Assert(!has_hp_capabilities(), ExcOnlyAvailableWithoutHP());
2789 return internal_fe_face_values->get_mapping();
2794template <
int dim,
int spacedim>
2798 Assert(!has_hp_capabilities(), ExcOnlyAvailableWithoutHP());
2799 return internal_fe_face_values->get_fe();
2804template <
int dim,
int spacedim>
2808 Assert(!has_hp_capabilities(), ExcOnlyAvailableWithoutHP());
2809 return internal_fe_face_values->get_quadrature();
2814template <
int dim,
int spacedim>
2818 Assert(has_hp_capabilities(), ExcOnlyAvailableWithHP());
2819 return internal_hp_fe_face_values->get_mapping_collection();
2824template <
int dim,
int spacedim>
2828 Assert(has_hp_capabilities(), ExcOnlyAvailableWithHP());
2829 return internal_hp_fe_face_values->get_fe_collection();
2834template <
int dim,
int spacedim>
2838 Assert(has_hp_capabilities(), ExcOnlyAvailableWithHP());
2839 return internal_hp_fe_face_values->get_quadrature_collection();
2844template <
int dim,
int spacedim>
2848 if (internal_hp_fe_face_values || internal_hp_fe_subface_values ||
2849 internal_hp_fe_face_values_neighbor ||
2850 internal_hp_fe_subface_values_neighbor)
2860 Assert(internal_fe_face_values || internal_fe_subface_values ||
2861 internal_fe_face_values_neighbor ||
2862 internal_fe_subface_values_neighbor,
2874template <
int dim,
int spacedim>
2878 return {0U, n_quadrature_points};
2883template <
int dim,
int spacedim>
2884const std::vector<Point<spacedim>> &
2887 Assert(fe_face_values !=
nullptr,
2888 ExcMessage(
"This call requires a call to reinit() first."));
2889 return fe_face_values->get_quadrature_points();
2894template <
int dim,
int spacedim>
2898 return internal_fe_face_values->get_update_flags();
2903template <
int dim,
int spacedim>
2907 return get_fe_face_values(
cell_index).get_cell();
2912template <
int dim,
int spacedim>
2917 return get_fe_face_values(
cell_index).get_face_number();
2922template <
int dim,
int spacedim>
2927 interface_dof_indices.size() > 0,
2929 "n_current_interface_dofs() is only available after a call to reinit()."));
2930 return interface_dof_indices.size();
2935template <
int dim,
int spacedim>
2939 return {0U, n_current_interface_dofs()};
2944template <
int dim,
int spacedim>
2948 return fe_face_values_neighbor ==
nullptr;
2953template <
int dim,
int spacedim>
2954std::vector<types::global_dof_index>
2957 return interface_dof_indices;
2962template <
int dim,
int spacedim>
2963std::array<unsigned int, 2>
2965 const unsigned int interface_dof_index)
const
2968 return dofmap[interface_dof_index];
2973template <
int dim,
int spacedim>
2982 "You are on a boundary, so you can only ask for the first FEFaceValues object."));
2984 return (
cell_index == 0) ? *fe_face_values : *fe_face_values_neighbor;
2989template <
int dim,
int spacedim>
2993 return fe_face_values->normal_vector(q_point_index);
2998template <
int dim,
int spacedim>
3001 const bool here_or_there,
3002 const unsigned int interface_dof_index,
3003 const unsigned int q_point,
3004 const unsigned int component)
const
3006 const auto dof_pair = dofmap[interface_dof_index];
3009 return get_fe_face_values(0).shape_value_component(dof_pair[0],
3013 return get_fe_face_values(1).shape_value_component(dof_pair[1],
3022template <
int dim,
int spacedim>
3025 const unsigned int interface_dof_index,
3026 const unsigned int q_point,
3027 const unsigned int component)
const
3029 const auto dof_pair = dofmap[interface_dof_index];
3034 value += get_fe_face_values(0).shape_value_component(dof_pair[0],
3038 value -= get_fe_face_values(1).shape_value_component(dof_pair[1],
3046template <
int dim,
int spacedim>
3049 const unsigned int q_point,
3050 const unsigned int component)
const
3052 return jump_in_shape_values(interface_dof_index, q_point, component);
3057template <
int dim,
int spacedim>
3060 const unsigned int interface_dof_index,
3061 const unsigned int q_point,
3062 const unsigned int component)
const
3064 const auto dof_pair = dofmap[interface_dof_index];
3067 return get_fe_face_values(0).shape_value_component(dof_pair[0],
3074 value += 0.5 * get_fe_face_values(0).shape_value_component(dof_pair[0],
3078 value += 0.5 * get_fe_face_values(1).shape_value_component(dof_pair[1],
3087template <
int dim,
int spacedim>
3090 const unsigned int interface_dof_index,
3091 const unsigned int q_point,
3092 const unsigned int component)
const
3094 return average_of_shape_values(interface_dof_index, q_point, component);
3099template <
int dim,
int spacedim>
3102 const unsigned int interface_dof_index,
3103 const unsigned int q_point,
3104 const unsigned int component)
const
3106 const auto dof_pair = dofmap[interface_dof_index];
3109 return get_fe_face_values(0).shape_grad_component(dof_pair[0],
3116 value += 0.5 * get_fe_face_values(0).shape_grad_component(dof_pair[0],
3120 value += 0.5 * get_fe_face_values(1).shape_grad_component(dof_pair[1],
3129template <
int dim,
int spacedim>
3132 const unsigned int interface_dof_index,
3133 const unsigned int q_point,
3134 const unsigned int component)
const
3136 return average_of_shape_gradients(interface_dof_index, q_point, component);
3141template <
int dim,
int spacedim>
3144 const unsigned int interface_dof_index,
3145 const unsigned int q_point,
3146 const unsigned int component)
const
3148 const auto dof_pair = dofmap[interface_dof_index];
3151 return get_fe_face_values(0).shape_hessian_component(dof_pair[0],
3158 value += 0.5 * get_fe_face_values(0).shape_hessian_component(dof_pair[0],
3162 value += 0.5 * get_fe_face_values(1).shape_hessian_component(dof_pair[1],
3171template <
int dim,
int spacedim>
3174 const unsigned int interface_dof_index,
3175 const unsigned int q_point,
3176 const unsigned int component)
const
3178 return average_of_shape_hessians(interface_dof_index, q_point, component);
3183template <
int dim,
int spacedim>
3186 const unsigned int interface_dof_index,
3187 const unsigned int q_point,
3188 const unsigned int component)
const
3190 const auto dof_pair = dofmap[interface_dof_index];
3193 return get_fe_face_values(0).shape_grad_component(dof_pair[0],
3200 value += get_fe_face_values(0).shape_grad_component(dof_pair[0],
3204 value -= get_fe_face_values(1).shape_grad_component(dof_pair[1],
3213template <
int dim,
int spacedim>
3216 const unsigned int interface_dof_index,
3217 const unsigned int q_point,
3218 const unsigned int component)
const
3220 return jump_in_shape_gradients(interface_dof_index, q_point, component);
3225template <
int dim,
int spacedim>
3228 const unsigned int interface_dof_index,
3229 const unsigned int q_point,
3230 const unsigned int component)
const
3232 const auto dof_pair = dofmap[interface_dof_index];
3235 return get_fe_face_values(0).shape_hessian_component(dof_pair[0],
3242 value += get_fe_face_values(0).shape_hessian_component(dof_pair[0],
3246 value -= get_fe_face_values(1).shape_hessian_component(dof_pair[1],
3255template <
int dim,
int spacedim>
3258 const unsigned int interface_dof_index,
3259 const unsigned int q_point,
3260 const unsigned int component)
const
3262 return jump_in_shape_hessians(interface_dof_index, q_point, component);
3267template <
int dim,
int spacedim>
3270 const unsigned int interface_dof_index,
3271 const unsigned int q_point,
3272 const unsigned int component)
const
3274 const auto dof_pair = dofmap[interface_dof_index];
3277 return get_fe_face_values(0).shape_3rd_derivative_component(dof_pair[0],
3284 value += get_fe_face_values(0).shape_3rd_derivative_component(dof_pair[0],
3288 value -= get_fe_face_values(1).shape_3rd_derivative_component(dof_pair[1],
3297template <
int dim,
int spacedim>
3300 const unsigned int interface_dof_index,
3301 const unsigned int q_point,
3302 const unsigned int component)
const
3304 return jump_in_shape_3rd_derivatives(interface_dof_index, q_point, component);
3309template <
int dim,
int spacedim>
3310template <
class InputVector>
3313 const InputVector & fe_function,
3314 std::vector<typename InputVector::value_type> &values)
const
3319 this->operator[](scalar).get_jump_in_function_values(fe_function, values);
3324template <
int dim,
int spacedim>
3325template <
class InputVector>
3328 const InputVector &fe_function,
3335 this->operator[](scalar).get_jump_in_function_gradients(fe_function,
3341template <
int dim,
int spacedim>
3342template <
class InputVector>
3345 const InputVector &fe_function,
3352 this->operator[](scalar).get_jump_in_function_hessians(fe_function, hessians);
3357template <
int dim,
int spacedim>
3358template <
class InputVector>
3361 const InputVector &fe_function,
3363 &third_derivatives)
const
3368 this->operator[](scalar).get_jump_in_function_third_derivatives(
3369 fe_function, third_derivatives);
3374template <
int dim,
int spacedim>
3375template <
class InputVector>
3378 const InputVector & fe_function,
3379 std::vector<typename InputVector::value_type> &values)
const
3384 this->operator[](scalar).get_average_of_function_values(fe_function, values);
3389template <
int dim,
int spacedim>
3390template <
class InputVector>
3393 const InputVector &fe_function,
3400 this->operator[](scalar).get_average_of_function_gradients(fe_function,
3406template <
int dim,
int spacedim>
3407template <
class InputVector>
3410 const InputVector &fe_function,
3417 this->operator[](scalar).get_average_of_function_hessians(fe_function,
3424template <
int dim,
int spacedim>
3429 const unsigned int n_components =
3430 (this->has_hp_capabilities() ? this->get_fe_collection().n_components() :
3431 this->get_fe().n_components());
3439template <
int dim,
int spacedim>
3444 const unsigned int n_components =
3445 (this->has_hp_capabilities() ? this->get_fe_collection().n_components() :
3446 this->get_fe().n_components());
3447 const unsigned int n_vectors =
3462 template <
int dim,
int spacedim>
3465 : fe_interface(&fe_interface)
3470 template <
int dim,
int spacedim>
3471 Scalar<dim, spacedim>::Scalar(
3473 const unsigned int component)
3474 : Base<dim, spacedim>(fe_interface)
3475 , extractor(component)
3480 template <
int dim,
int spacedim>
3481 template <
class InputVector,
class OutputVector>
3483 Base<dim, spacedim>::get_local_dof_values(
3484 const InputVector &dof_values,
3485 OutputVector & local_dof_values)
const
3487 const auto &interface_dof_indices =
3488 this->fe_interface->get_interface_dof_indices();
3490 AssertDimension(interface_dof_indices.size(), local_dof_values.size());
3492 for (
const unsigned int i : this->fe_interface->dof_indices())
3493 local_dof_values[i] = dof_values(interface_dof_indices[i]);
3498 template <
int dim,
int spacedim>
3499 typename Scalar<dim, spacedim>::value_type
3500 Scalar<dim, spacedim>::value(
const bool here_or_there,
3501 const unsigned int interface_dof_index,
3502 const unsigned int q_point)
const
3504 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
3507 return (*(this->fe_interface->fe_face_values))[extractor].value(
3508 dof_pair[0], q_point);
3511 return (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
3512 dof_pair[1], q_point);
3519 template <
int dim,
int spacedim>
3520 typename Scalar<dim, spacedim>::value_type
3521 Scalar<dim, spacedim>::jump_in_values(
const unsigned int interface_dof_index,
3522 const unsigned int q_point)
const
3524 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
3526 value_type
value = 0.0;
3530 (*(this->fe_interface->fe_face_values))[extractor].value(dof_pair[0],
3535 (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
3536 dof_pair[1], q_point);
3543 template <
int dim,
int spacedim>
3544 typename Scalar<dim, spacedim>::value_type
3545 Scalar<dim, spacedim>::jump(
const unsigned int interface_dof_index,
3546 const unsigned int q_point)
const
3548 return jump_in_values(interface_dof_index, q_point);
3553 template <
int dim,
int spacedim>
3554 typename Scalar<dim, spacedim>::value_type
3555 Scalar<dim, spacedim>::average_of_values(
3556 const unsigned int interface_dof_index,
3557 const unsigned int q_point)
const
3559 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
3561 if (this->fe_interface->at_boundary())
3562 return (*(this->fe_interface->fe_face_values))[extractor].value(
3563 dof_pair[0], q_point);
3565 value_type
value = 0.0;
3570 (*(this->fe_interface->fe_face_values))[extractor].value(dof_pair[0],
3575 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
3576 dof_pair[1], q_point);
3583 template <
int dim,
int spacedim>
3584 typename Scalar<dim, spacedim>::value_type
3585 Scalar<dim, spacedim>::average(
const unsigned int interface_dof_index,
3586 const unsigned int q_point)
const
3588 return average_of_values(interface_dof_index, q_point);
3593 template <
int dim,
int spacedim>
3594 typename Scalar<dim, spacedim>::gradient_type
3595 Scalar<dim, spacedim>::average_of_gradients(
3596 const unsigned int interface_dof_index,
3597 const unsigned int q_point)
const
3599 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
3601 if (this->fe_interface->at_boundary())
3602 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
3603 dof_pair[0], q_point);
3605 gradient_type
value;
3610 (*(this->fe_interface->fe_face_values))[extractor].gradient(dof_pair[0],
3614 value += 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor]
3615 .gradient(dof_pair[1], q_point);
3621 template <
int dim,
int spacedim>
3622 typename Scalar<dim, spacedim>::gradient_type
3623 Scalar<dim, spacedim>::average_gradient(
3624 const unsigned int interface_dof_index,
3625 const unsigned int q_point)
const
3627 return average_of_gradients(interface_dof_index, q_point);
3632 template <
int dim,
int spacedim>
3633 typename Scalar<dim, spacedim>::gradient_type
3634 Scalar<dim, spacedim>::jump_in_gradients(
3635 const unsigned int interface_dof_index,
3636 const unsigned int q_point)
const
3638 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
3640 if (this->fe_interface->at_boundary())
3641 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
3642 dof_pair[0], q_point);
3644 gradient_type
value;
3648 (*(this->fe_interface->fe_face_values))[extractor].gradient(dof_pair[0],
3653 (*(this->fe_interface->fe_face_values_neighbor))[extractor].gradient(
3654 dof_pair[1], q_point);
3661 template <
int dim,
int spacedim>
3662 typename Scalar<dim, spacedim>::gradient_type
3663 Scalar<dim, spacedim>::jump_gradient(
const unsigned int interface_dof_index,
3664 const unsigned int q_point)
const
3666 return jump_in_gradients(interface_dof_index, q_point);
3671 template <
int dim,
int spacedim>
3672 typename Scalar<dim, spacedim>::hessian_type
3673 Scalar<dim, spacedim>::average_of_hessians(
3674 const unsigned int interface_dof_index,
3675 const unsigned int q_point)
const
3677 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
3679 if (this->fe_interface->at_boundary())
3680 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
3681 dof_pair[0], q_point);
3688 (*(this->fe_interface->fe_face_values))[extractor].hessian(dof_pair[0],
3692 value += 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor]
3693 .hessian(dof_pair[1], q_point);
3700 template <
int dim,
int spacedim>
3701 typename Scalar<dim, spacedim>::hessian_type
3702 Scalar<dim, spacedim>::average_hessian(
const unsigned int interface_dof_index,
3703 const unsigned int q_point)
const
3705 return average_of_hessians(interface_dof_index, q_point);
3710 template <
int dim,
int spacedim>
3711 typename Scalar<dim, spacedim>::third_derivative_type
3712 Scalar<dim, spacedim>::jump_in_third_derivatives(
3713 const unsigned int interface_dof_index,
3714 const unsigned int q_point)
const
3716 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
3718 if (this->fe_interface->at_boundary())
3719 return (*(this->fe_interface->fe_face_values))[extractor]
3720 .third_derivative(dof_pair[0], q_point);
3722 third_derivative_type
value;
3726 (*(this->fe_interface->fe_face_values))[extractor].third_derivative(
3727 dof_pair[0], q_point);
3730 value -= (*(this->fe_interface->fe_face_values_neighbor))[extractor]
3731 .third_derivative(dof_pair[1], q_point);
3738 template <
int dim,
int spacedim>
3739 typename Scalar<dim, spacedim>::third_derivative_type
3740 Scalar<dim, spacedim>::jump_3rd_derivative(
3741 const unsigned int interface_dof_index,
3742 const unsigned int q_point)
const
3744 return jump_in_third_derivatives(interface_dof_index, q_point);
3749 template <
int dim,
int spacedim>
3750 typename Scalar<dim, spacedim>::hessian_type
3751 Scalar<dim, spacedim>::jump_in_hessians(
3752 const unsigned int interface_dof_index,
3753 const unsigned int q_point)
const
3755 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
3757 if (this->fe_interface->at_boundary())
3758 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
3759 dof_pair[0], q_point);
3765 (*(this->fe_interface->fe_face_values))[extractor].hessian(dof_pair[0],
3770 (*(this->fe_interface->fe_face_values_neighbor))[extractor].hessian(
3771 dof_pair[1], q_point);
3778 template <
int dim,
int spacedim>
3779 typename Scalar<dim, spacedim>::hessian_type
3780 Scalar<dim, spacedim>::jump_hessian(
const unsigned int interface_dof_index,
3781 const unsigned int q_point)
const
3783 return jump_in_hessians(interface_dof_index, q_point);
3788 template <
int dim,
int spacedim>
3789 template <
class InputVector>
3791 Scalar<dim, spacedim>::get_function_values_from_local_dof_values(
3792 const bool here_or_there,
3793 const InputVector &local_dof_values,
3794 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3799 for (
const auto dof_index : this->fe_interface->dof_indices())
3800 for (const auto q_index : this->fe_interface->quadrature_point_indices())
3805 values[q_index] += local_dof_values[dof_index] *
3806 value(here_or_there, dof_index, q_index);
3812 template <
int dim,
int spacedim>
3813 template <
class InputVector>
3815 Scalar<dim, spacedim>::get_function_values(
3816 const bool here_or_there,
3817 const InputVector &fe_function,
3818 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3821 std::vector<typename InputVector::value_type> local_dof_values(
3822 this->fe_interface->n_current_interface_dofs());
3823 this->get_local_dof_values(fe_function, local_dof_values);
3825 get_function_values_from_local_dof_values(here_or_there,
3832 template <
int dim,
int spacedim>
3833 template <
class InputVector>
3835 Scalar<dim, spacedim>::get_jump_in_function_values_from_local_dof_values(
3836 const InputVector &local_dof_values,
3837 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3842 for (
const auto dof_index : this->fe_interface->dof_indices())
3843 for (const auto q_index : this->fe_interface->quadrature_point_indices())
3849 local_dof_values[dof_index] * jump_in_values(dof_index, q_index);
3855 template <
int dim,
int spacedim>
3856 template <
class InputVector>
3858 Scalar<dim, spacedim>::get_jump_in_function_values(
3859 const InputVector &fe_function,
3860 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3863 std::vector<typename InputVector::value_type> local_dof_values(
3864 this->fe_interface->n_current_interface_dofs());
3865 this->get_local_dof_values(fe_function, local_dof_values);
3867 get_jump_in_function_values_from_local_dof_values(local_dof_values, values);
3872 template <
int dim,
int spacedim>
3873 template <
class InputVector>
3875 Scalar<dim, spacedim>::get_jump_in_function_gradients_from_local_dof_values(
3876 const InputVector &local_dof_values,
3877 std::vector<solution_gradient_type<typename InputVector::value_type>>
3882 for (
const auto dof_index : this->fe_interface->dof_indices())
3883 for (const auto q_index : this->fe_interface->quadrature_point_indices())
3889 local_dof_values[dof_index] * jump_in_gradients(dof_index, q_index);
3895 template <
int dim,
int spacedim>
3896 template <
class InputVector>
3898 Scalar<dim, spacedim>::get_jump_in_function_gradients(
3899 const InputVector &fe_function,
3900 std::vector<solution_gradient_type<typename InputVector::value_type>>
3903 std::vector<typename InputVector::value_type> local_dof_values(
3904 this->fe_interface->n_current_interface_dofs());
3905 this->get_local_dof_values(fe_function, local_dof_values);
3907 get_jump_in_function_gradients_from_local_dof_values(local_dof_values,
3913 template <
int dim,
int spacedim>
3914 template <
class InputVector>
3916 Scalar<dim, spacedim>::get_average_of_function_values_from_local_dof_values(
3917 const InputVector &local_dof_values,
3918 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3923 for (
const auto dof_index : this->fe_interface->dof_indices())
3924 for (const auto q_index : this->fe_interface->quadrature_point_indices())
3930 local_dof_values[dof_index] * average_of_values(dof_index, q_index);
3936 template <
int dim,
int spacedim>
3937 template <
class InputVector>
3939 Scalar<dim, spacedim>::get_average_of_function_values(
3940 const InputVector &fe_function,
3941 std::vector<solution_value_type<typename InputVector::value_type>> &values)
3944 std::vector<typename InputVector::value_type> local_dof_values(
3945 this->fe_interface->n_current_interface_dofs());
3946 this->get_local_dof_values(fe_function, local_dof_values);
3948 get_average_of_function_values_from_local_dof_values(local_dof_values,
3954 template <
int dim,
int spacedim>
3955 template <
class InputVector>
3957 Scalar<dim, spacedim>::
3958 get_average_of_function_gradients_from_local_dof_values(
3959 const InputVector &local_dof_values,
3960 std::vector<solution_gradient_type<typename InputVector::value_type>>
3965 for (
const auto dof_index : this->fe_interface->dof_indices())
3966 for (const auto q_index : this->fe_interface->quadrature_point_indices())
3971 gradients[q_index] += local_dof_values[dof_index] *
3972 average_of_gradients(dof_index, q_index);
3978 template <
int dim,
int spacedim>
3979 template <
class InputVector>
3981 Scalar<dim, spacedim>::get_average_of_function_gradients(
3982 const InputVector &fe_function,
3983 std::vector<solution_gradient_type<typename InputVector::value_type>>
3986 std::vector<typename InputVector::value_type> local_dof_values(
3987 this->fe_interface->n_current_interface_dofs());
3988 this->get_local_dof_values(fe_function, local_dof_values);
3990 get_average_of_function_gradients_from_local_dof_values(local_dof_values,
3996 template <
int dim,
int spacedim>
3997 template <
class InputVector>
3999 Scalar<dim, spacedim>::get_jump_in_function_hessians_from_local_dof_values(
4000 const InputVector &local_dof_values,
4001 std::vector<solution_hessian_type<typename InputVector::value_type>>
4006 for (
const auto dof_index : this->fe_interface->dof_indices())
4007 for (const auto q_index : this->fe_interface->quadrature_point_indices())
4013 local_dof_values[dof_index] * jump_in_hessians(dof_index, q_index);
4019 template <
int dim,
int spacedim>
4020 template <
class InputVector>
4022 Scalar<dim, spacedim>::get_jump_in_function_hessians(
4023 const InputVector &fe_function,
4024 std::vector<solution_hessian_type<typename InputVector::value_type>>
4027 std::vector<typename InputVector::value_type> local_dof_values(
4028 this->fe_interface->n_current_interface_dofs());
4029 this->get_local_dof_values(fe_function, local_dof_values);
4031 get_jump_in_function_hessians_from_local_dof_values(local_dof_values,
4037 template <
int dim,
int spacedim>
4038 template <
class InputVector>
4040 Scalar<dim, spacedim>::get_average_of_function_hessians_from_local_dof_values(
4041 const InputVector &local_dof_values,
4042 std::vector<solution_hessian_type<typename InputVector::value_type>>
4047 for (
const unsigned int dof_index : this->fe_interface->dof_indices())
4048 for (const auto q_index : this->fe_interface->quadrature_point_indices())
4053 hessians[q_index] += local_dof_values[dof_index] *
4054 average_of_hessians(dof_index, q_index);
4060 template <
int dim,
int spacedim>
4061 template <
class InputVector>
4063 Scalar<dim, spacedim>::get_average_of_function_hessians(
4064 const InputVector &fe_function,
4065 std::vector<solution_hessian_type<typename InputVector::value_type>>
4068 std::vector<typename InputVector::value_type> local_dof_values(
4069 this->fe_interface->n_current_interface_dofs());
4070 this->get_local_dof_values(fe_function, local_dof_values);
4072 get_average_of_function_hessians_from_local_dof_values(local_dof_values,
4078 template <
int dim,
int spacedim>
4079 template <
class InputVector>
4081 Scalar<dim, spacedim>::
4082 get_jump_in_function_third_derivatives_from_local_dof_values(
4083 const InputVector &local_dof_values,
4085 solution_third_derivative_type<typename InputVector::value_type>>
4086 &third_derivatives)
const
4089 this->fe_interface->n_quadrature_points);
4091 for (
const unsigned int dof_index : this->fe_interface->dof_indices())
4092 for (const auto q_index : this->fe_interface->quadrature_point_indices())
4095 third_derivatives[q_index] = 0.;
4097 third_derivatives[q_index] +=
4098 local_dof_values[dof_index] *
4099 jump_in_third_derivatives(dof_index, q_index);
4105 template <
int dim,
int spacedim>
4106 template <
class InputVector>
4108 Scalar<dim, spacedim>::get_jump_in_function_third_derivatives(
4109 const InputVector &fe_function,
4111 solution_third_derivative_type<typename InputVector::value_type>>
4112 &third_derivatives)
const
4114 std::vector<typename InputVector::value_type> local_dof_values(
4115 this->fe_interface->n_current_interface_dofs());
4116 this->get_local_dof_values(fe_function, local_dof_values);
4118 get_jump_in_function_third_derivatives_from_local_dof_values(
4119 local_dof_values, third_derivatives);
4124 template <
int dim,
int spacedim>
4127 const unsigned int first_vector_component)
4128 : Base<dim, spacedim>(fe_interface)
4129 , extractor(first_vector_component)
4134 template <
int dim,
int spacedim>
4137 const unsigned int interface_dof_index,
4138 const unsigned int q_point)
const
4140 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
4143 return (*(this->fe_interface->fe_face_values))[extractor].value(
4144 dof_pair[0], q_point);
4147 return (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
4148 dof_pair[1], q_point);
4150 return value_type();
4155 template <
int dim,
int spacedim>
4158 const unsigned int q_point)
const
4160 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
4166 (*(this->fe_interface->fe_face_values))[extractor].value(dof_pair[0],
4171 (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
4172 dof_pair[1], q_point);
4179 template <
int dim,
int spacedim>
4182 const unsigned int q_point)
const
4184 return jump_in_values(interface_dof_index, q_point);
4189 template <
int dim,
int spacedim>
4192 const unsigned int interface_dof_index,
4193 const unsigned int q_point)
const
4195 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
4197 if (this->fe_interface->at_boundary())
4198 return (*(this->fe_interface->fe_face_values))[extractor].value(
4199 dof_pair[0], q_point);
4206 (*(this->fe_interface->fe_face_values))[extractor].value(dof_pair[0],
4211 0.5 * (*(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 q_point)
const
4224 return average_of_values(interface_dof_index, q_point);
4229 template <
int dim,
int spacedim>
4232 const unsigned int interface_dof_index,
4233 const unsigned int q_point)
const
4235 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
4237 if (this->fe_interface->at_boundary())
4238 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
4239 dof_pair[0], q_point);
4241 gradient_type
value;
4246 (*(this->fe_interface->fe_face_values))[extractor].gradient(dof_pair[0],
4250 value += 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor]
4251 .gradient(dof_pair[1], q_point);
4258 template <
int dim,
int spacedim>
4261 const unsigned int interface_dof_index,
4262 const unsigned int q_point)
const
4264 return average_of_gradients(interface_dof_index, q_point);
4269 template <
int dim,
int spacedim>
4272 const unsigned int interface_dof_index,
4273 const unsigned int q_point)
const
4275 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
4277 if (this->fe_interface->at_boundary())
4278 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
4279 dof_pair[0], q_point);
4281 gradient_type
value;
4285 (*(this->fe_interface->fe_face_values))[extractor].gradient(dof_pair[0],
4290 (*(this->fe_interface->fe_face_values_neighbor))[extractor].gradient(
4291 dof_pair[1], q_point);
4298 template <
int dim,
int spacedim>
4301 const unsigned int q_point)
const
4303 return jump_in_gradients(interface_dof_index, q_point);
4308 template <
int dim,
int spacedim>
4311 const unsigned int interface_dof_index,
4312 const unsigned int q_point)
const
4314 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
4316 if (this->fe_interface->at_boundary())
4317 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
4318 dof_pair[0], q_point);
4325 (*(this->fe_interface->fe_face_values))[extractor].hessian(dof_pair[0],
4329 value += 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor]
4330 .hessian(dof_pair[1], q_point);
4337 template <
int dim,
int spacedim>
4340 const unsigned int q_point)
const
4342 return average_of_hessians(interface_dof_index, q_point);
4347 template <
int dim,
int spacedim>
4350 const unsigned int interface_dof_index,
4351 const unsigned int q_point)
const
4353 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
4355 if (this->fe_interface->at_boundary())
4356 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
4357 dof_pair[0], q_point);
4363 (*(this->fe_interface->fe_face_values))[extractor].hessian(dof_pair[0],
4368 (*(this->fe_interface->fe_face_values_neighbor))[extractor].hessian(
4369 dof_pair[1], q_point);
4376 template <
int dim,
int spacedim>
4379 const unsigned int q_point)
const
4381 return jump_in_hessians(interface_dof_index, q_point);
4386 template <
int dim,
int spacedim>
4389 const unsigned int interface_dof_index,
4390 const unsigned int q_point)
const
4392 const auto dof_pair = this->fe_interface->dofmap[interface_dof_index];
4394 if (this->fe_interface->at_boundary())
4395 return (*(this->fe_interface->fe_face_values))[extractor]
4396 .third_derivative(dof_pair[0], q_point);
4398 third_derivative_type
value;
4402 (*(this->fe_interface->fe_face_values))[extractor].third_derivative(
4403 dof_pair[0], q_point);
4406 value -= (*(this->fe_interface->fe_face_values_neighbor))[extractor]
4407 .third_derivative(dof_pair[1], q_point);
4414 template <
int dim,
int spacedim>
4417 const unsigned int interface_dof_index,
4418 const unsigned int q_point)
const
4420 return jump_in_third_derivatives(interface_dof_index, q_point);
4425 template <
int dim,
int spacedim>
4426 template <
class InputVector>
4429 const bool here_or_there,
4430 const InputVector &local_dof_values,
4431 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4436 for (
const auto dof_index : this->fe_interface->dof_indices())
4437 for (const auto q_index : this->fe_interface->quadrature_point_indices())
4442 values[q_index] += local_dof_values[dof_index] *
4443 value(here_or_there, dof_index, q_index);
4449 template <
int dim,
int spacedim>
4450 template <
class InputVector>
4453 const bool here_or_there,
4454 const InputVector &fe_function,
4455 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4458 std::vector<typename InputVector::value_type> local_dof_values(
4459 this->fe_interface->n_current_interface_dofs());
4460 this->get_local_dof_values(fe_function, local_dof_values);
4462 get_function_values_from_local_dof_values(here_or_there,
4469 template <
int dim,
int spacedim>
4470 template <
class InputVector>
4473 const InputVector &local_dof_values,
4474 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4479 for (
const auto dof_index : this->fe_interface->dof_indices())
4480 for (const auto q_index : this->fe_interface->quadrature_point_indices())
4486 local_dof_values[dof_index] * jump_in_values(dof_index, q_index);
4492 template <
int dim,
int spacedim>
4493 template <
class InputVector>
4496 const InputVector &fe_function,
4497 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4500 std::vector<typename InputVector::value_type> local_dof_values(
4501 this->fe_interface->n_current_interface_dofs());
4502 this->get_local_dof_values(fe_function, local_dof_values);
4504 get_jump_in_function_values_from_local_dof_values(local_dof_values, values);
4509 template <
int dim,
int spacedim>
4510 template <
class InputVector>
4513 const InputVector &local_dof_values,
4514 std::vector<solution_gradient_type<typename InputVector::value_type>>
4519 for (
const auto dof_index : this->fe_interface->dof_indices())
4520 for (const auto q_index : this->fe_interface->quadrature_point_indices())
4526 local_dof_values[dof_index] * jump_in_gradients(dof_index, q_index);
4532 template <
int dim,
int spacedim>
4533 template <
class InputVector>
4536 const InputVector &fe_function,
4537 std::vector<solution_gradient_type<typename InputVector::value_type>>
4540 std::vector<typename InputVector::value_type> local_dof_values(
4541 this->fe_interface->n_current_interface_dofs());
4542 this->get_local_dof_values(fe_function, local_dof_values);
4544 get_jump_in_function_gradients_from_local_dof_values(local_dof_values,
4550 template <
int dim,
int spacedim>
4551 template <
class InputVector>
4554 const InputVector &local_dof_values,
4555 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4560 for (
const auto dof_index : this->fe_interface->dof_indices())
4561 for (const auto q_index : this->fe_interface->quadrature_point_indices())
4567 local_dof_values[dof_index] * average_of_values(dof_index, q_index);
4573 template <
int dim,
int spacedim>
4574 template <
class InputVector>
4577 const InputVector &fe_function,
4578 std::vector<solution_value_type<typename InputVector::value_type>> &values)
4581 std::vector<typename InputVector::value_type> local_dof_values(
4582 this->fe_interface->n_current_interface_dofs());
4583 this->get_local_dof_values(fe_function, local_dof_values);
4585 get_average_of_function_values_from_local_dof_values(local_dof_values,
4591 template <
int dim,
int spacedim>
4592 template <
class InputVector>
4596 const InputVector &local_dof_values,
4597 std::vector<solution_gradient_type<typename InputVector::value_type>>
4602 for (
const auto dof_index : this->fe_interface->dof_indices())
4603 for (const auto q_index : this->fe_interface->quadrature_point_indices())
4608 gradients[q_index] += local_dof_values[dof_index] *
4609 average_of_gradients(dof_index, q_index);
4615 template <
int dim,
int spacedim>
4616 template <
class InputVector>
4619 const InputVector &fe_function,
4620 std::vector<solution_gradient_type<typename InputVector::value_type>>
4623 std::vector<typename InputVector::value_type> local_dof_values(
4624 this->fe_interface->n_current_interface_dofs());
4625 this->get_local_dof_values(fe_function, local_dof_values);
4627 get_average_of_function_gradients_from_local_dof_values(local_dof_values,
4633 template <
int dim,
int spacedim>
4634 template <
class InputVector>
4637 const InputVector &local_dof_values,
4638 std::vector<solution_hessian_type<typename InputVector::value_type>>
4643 for (
const auto dof_index : this->fe_interface->dof_indices())
4644 for (const auto q_index : this->fe_interface->quadrature_point_indices())
4650 local_dof_values[dof_index] * jump_in_hessians(dof_index, q_index);
4656 template <
int dim,
int spacedim>
4657 template <
class InputVector>
4660 const InputVector &fe_function,
4661 std::vector<solution_hessian_type<typename InputVector::value_type>>
4664 std::vector<typename InputVector::value_type> local_dof_values(
4665 this->fe_interface->n_current_interface_dofs());
4666 this->get_local_dof_values(fe_function, local_dof_values);
4668 get_jump_in_function_hessians_from_local_dof_values(local_dof_values,
4674 template <
int dim,
int spacedim>
4675 template <
class InputVector>
4678 const InputVector &local_dof_values,
4679 std::vector<solution_hessian_type<typename InputVector::value_type>>
4684 for (
const unsigned int dof_index : this->fe_interface->dof_indices())
4685 for (const auto q_index : this->fe_interface->quadrature_point_indices())
4690 hessians[q_index] += local_dof_values[dof_index] *
4691 average_of_hessians(dof_index, q_index);
4697 template <
int dim,
int spacedim>
4698 template <
class InputVector>
4701 const InputVector &fe_function,
4702 std::vector<solution_hessian_type<typename InputVector::value_type>>
4705 std::vector<typename InputVector::value_type> local_dof_values(
4706 this->fe_interface->n_current_interface_dofs());
4707 this->get_local_dof_values(fe_function, local_dof_values);
4709 get_average_of_function_hessians_from_local_dof_values(local_dof_values,
4715 template <
int dim,
int spacedim>
4716 template <
class InputVector>
4720 const InputVector &local_dof_values,
4722 solution_third_derivative_type<typename InputVector::value_type>>
4723 &third_derivatives)
const
4726 this->fe_interface->n_quadrature_points);
4728 for (
const unsigned int dof_index : this->fe_interface->dof_indices())
4729 for (const auto q_index : this->fe_interface->quadrature_point_indices())
4732 third_derivatives[q_index] = 0.;
4734 third_derivatives[q_index] +=
4735 local_dof_values[dof_index] *
4736 jump_in_third_derivatives(dof_index, q_index);
4742 template <
int dim,
int spacedim>
4743 template <
class InputVector>
4746 const InputVector &fe_function,
4748 solution_third_derivative_type<typename InputVector::value_type>>
4749 &third_derivatives)
const
4751 std::vector<typename InputVector::value_type> local_dof_values(
4752 this->fe_interface->n_current_interface_dofs());
4753 this->get_local_dof_values(fe_function, local_dof_values);
4755 get_jump_in_function_third_derivatives_from_local_dof_values(
4756 local_dof_values, third_derivatives);
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
Tensor< 2, spacedim > average_hessian(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
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
const Triangulation< dim, spacedim >::cell_iterator get_cell(const unsigned int cell_index) 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
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
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
double average(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) 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)
double jump(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
const hp::QCollection< dim - 1 > & get_quadrature_collection() const
Tensor< 3, spacedim > jump_3rd_derivative(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) 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
std::vector< types::global_dof_index > interface_dof_indices
Tensor< 1, spacedim > jump_gradient(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
std::unique_ptr< FESubfaceValues< dim, spacedim > > internal_fe_subface_values_neighbor
std::vector< std::array< unsigned int, 2 > > dofmap
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< 2, spacedim > jump_hessian(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) 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< 1, spacedim > average_gradient(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
const FEInterfaceViews::Scalar< dim, spacedim > operator[](const FEValuesExtractors::Scalar &scalar) 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)
std::array< unsigned int, 2 > interface_dof_to_dof_indices(const unsigned int interface_dof_index) 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)
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 Quadrature< dim - 1 > & get_quadrature() const
const FEInterfaceViews::Vector< dim, spacedim > operator[](const FEValuesExtractors::Vector &vector) 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 average_gradient(const unsigned int interface_dof_index, const unsigned int q_point) const
gradient_type jump_in_gradients(const unsigned int interface_dof_index, const unsigned int q_point) const
hessian_type jump_hessian(const unsigned int interface_dof_index, const unsigned int q_point) const
gradient_type jump_gradient(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
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
value_type jump(const unsigned int interface_dof_index, const unsigned int q_point) 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
value_type average(const unsigned int interface_dof_index, const unsigned int q_point) 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
value_type average_value(const unsigned int interface_dof_index, const unsigned int q_point) const
void get_average_of_function_values(const InputVector &fe_function, std::vector< solution_value_type< typename InputVector::value_type > > &values) const
hessian_type average_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_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
third_derivative_type jump_3rd_derivative(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
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
value_type average(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
third_derivative_type jump_3rd_derivative(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
value_type jump_in_values(const unsigned int interface_dof_index, const unsigned int q_point) const
value_type jump(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
gradient_type average_gradient(const unsigned int interface_dof_index, const unsigned int q_point) const
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_DEPRECATED
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#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)
typename ::internal::FEInterfaceViews::ViewType< dim, spacedim, Extractor >::type View
void reference_cell(Triangulation< dim, spacedim > &tria, const ReferenceCell &reference_cell)
const types::fe_index invalid_fe_index
static const unsigned int invalid_unsigned_int
boost::integer_range< IncrementableType > iota_view
typename internal::ProductTypeImpl< typename std::decay< T >::type, typename std::decay< U >::type >::type type