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>
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);
178 const unsigned int q_point)
const;
199 const unsigned int q_point)
const;
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;
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>
429 template <
class InputVector>
457 template <
class InputVector>
471 template <
class InputVector>
491 template <
class InputVector>
505 template <
class InputVector>
525 template <
class InputVector>
539 template <
class InputVector>
560 template <
class InputVector>
575 template <
class InputVector>
603 template <
class InputVector>
617 template <
class InputVector>
637 template <
class InputVector>
651 template <
class InputVector>
671 template <
class InputVector>
685 template <
class InputVector>
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);
811 const unsigned int q_point)
const;
831 const unsigned int q_point)
const;
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;
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>
1045 template <
class InputVector>
1073 template <
class InputVector>
1087 template <
class InputVector>
1107 template <
class InputVector>
1121 template <
class InputVector>
1141 template <
class InputVector>
1155 template <
class InputVector>
1176 template <
class InputVector>
1191 template <
class InputVector>
1219 template <
class InputVector>
1233 template <
class InputVector>
1253 template <
class InputVector>
1267 template <
class InputVector>
1287 template <
class InputVector>
1301 template <
class InputVector>
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>
1604 template <
class CellIteratorType>
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>
1872 const unsigned int component = 0)
const;
1904 const unsigned int component = 0)
const;
1915 const unsigned int component = 0)
const;
1933 const unsigned int component = 0)
const;
1944 const unsigned int component = 0)
const;
1963 const unsigned int component = 0)
const;
1974 const unsigned int component = 0)
const;
1992 const unsigned int component = 0)
const;
2003 const unsigned int component = 0)
const;
2030 const unsigned int component = 0)
const;
2041 const unsigned int component = 0)
const;
2059 const unsigned int component = 0)
const;
2070 const unsigned int component = 0)
const;
2089 const unsigned int component = 0)
const;
2100 const unsigned int component = 0)
const;
2121 template <
class InputVector>
2125 std::vector<typename InputVector::value_type> &values)
const;
2135 template <
class InputVector>
2149 template <
class InputVector>
2164 template <
class InputVector>
2186 template <
class InputVector>
2190 std::vector<typename InputVector::value_type> &values)
const;
2199 template <
class InputVector>
2213 template <
class InputVector>
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())
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())
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>
2465 , fe_face_values_neighbor(
nullptr)
2466 , internal_hp_fe_face_values(
2471 , internal_hp_fe_subface_values(
2477 , internal_hp_fe_face_values_neighbor(
2482 , internal_hp_fe_subface_values_neighbor(
2494template <
int dim,
int spacedim>
2507template <
int dim,
int spacedim>
2508template <
class CellIteratorType,
class CellNeighborIteratorType>
2511 const CellIteratorType & cell,
2517 const unsigned int q_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();
2534 fe_face_values = internal_fe_subface_values.get();
2540 fe_face_values_neighbor = internal_fe_face_values_neighbor.get();
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)
2564 if (internal_hp_fe_face_values->get_quadrature_collection().size() == 1)
2568 if (internal_hp_fe_face_values->get_mapping_collection().size() == 1)
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()])
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."));
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."));
2620 internal_hp_fe_face_values->
reinit(
2623 internal_hp_fe_face_values->get_present_fe_values());
2627 internal_hp_fe_subface_values->
reinit(
2631 internal_hp_fe_subface_values->get_present_fe_values());
2641 internal_hp_fe_face_values_neighbor->get_present_fe_values());
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());
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)
2691 result.first->second.second = i;
2697 unsigned int idx = 0;
2700 interface_dof_indices[idx] =
x.first;
2701 dofmap[idx] = {{
x.second.first,
x.second.second}};
2709template <
int dim,
int spacedim>
2710template <
class CellIteratorType>
2714 const unsigned int q_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(
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>
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>
2998template <
int dim,
int spacedim>
3004 const unsigned int component)
const
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>
3027 const unsigned int component)
const
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>
3050 const unsigned int component)
const
3057template <
int dim,
int spacedim>
3062 const unsigned int component)
const
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>
3092 const unsigned int component)
const
3099template <
int dim,
int spacedim>
3104 const unsigned int component)
const
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>
3134 const unsigned int component)
const
3141template <
int dim,
int spacedim>
3146 const unsigned int component)
const
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>
3176 const unsigned int component)
const
3183template <
int dim,
int spacedim>
3188 const unsigned int component)
const
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>
3218 const unsigned int component)
const
3225template <
int dim,
int spacedim>
3230 const unsigned int component)
const
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>
3260 const unsigned int component)
const
3267template <
int dim,
int spacedim>
3272 const unsigned int component)
const
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>
3302 const unsigned int component)
const
3309template <
int dim,
int spacedim>
3310template <
class InputVector>
3314 std::vector<typename InputVector::value_type> &values)
const
3324template <
int dim,
int spacedim>
3325template <
class InputVector>
3341template <
int dim,
int spacedim>
3342template <
class InputVector>
3357template <
int dim,
int spacedim>
3358template <
class InputVector>
3368 this->
operator[](scalar).get_jump_in_function_third_derivatives(
3374template <
int dim,
int spacedim>
3375template <
class InputVector>
3379 std::vector<typename InputVector::value_type> &values)
const
3389template <
int dim,
int spacedim>
3390template <
class InputVector>
3406template <
int dim,
int spacedim>
3407template <
class InputVector>
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(
3487 const auto &interface_dof_indices =
3488 this->fe_interface->get_interface_dof_indices();
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
3502 const unsigned int q_point)
const
3507 return (*(this->fe_interface->fe_face_values))[extractor].value(
3511 return (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
3519 template <
int dim,
int spacedim>
3520 typename Scalar<dim, spacedim>::value_type
3522 const unsigned int q_point)
const
3530 (*(this->fe_interface->fe_face_values))[extractor].value(
dof_pair[0],
3535 (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
3543 template <
int dim,
int spacedim>
3544 typename Scalar<dim, spacedim>::value_type
3546 const unsigned int q_point)
const
3553 template <
int dim,
int spacedim>
3554 typename Scalar<dim, spacedim>::value_type
3555 Scalar<dim, spacedim>::average_of_values(
3557 const unsigned int q_point)
const
3561 if (this->fe_interface->at_boundary())
3562 return (*(this->fe_interface->fe_face_values))[extractor].value(
3570 (*(this->fe_interface->fe_face_values))[extractor].value(
dof_pair[0],
3575 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
3583 template <
int dim,
int spacedim>
3584 typename Scalar<dim, spacedim>::value_type
3586 const unsigned int q_point)
const
3593 template <
int dim,
int spacedim>
3594 typename Scalar<dim, spacedim>::gradient_type
3595 Scalar<dim, spacedim>::average_of_gradients(
3597 const unsigned int q_point)
const
3601 if (this->fe_interface->at_boundary())
3602 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
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]
3621 template <
int dim,
int spacedim>
3622 typename Scalar<dim, spacedim>::gradient_type
3623 Scalar<dim, spacedim>::average_gradient(
3625 const unsigned int q_point)
const
3632 template <
int dim,
int spacedim>
3633 typename Scalar<dim, spacedim>::gradient_type
3634 Scalar<dim, spacedim>::jump_in_gradients(
3636 const unsigned int q_point)
const
3640 if (this->fe_interface->at_boundary())
3641 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
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(
3661 template <
int dim,
int spacedim>
3662 typename Scalar<dim, spacedim>::gradient_type
3664 const unsigned int q_point)
const
3671 template <
int dim,
int spacedim>
3672 typename Scalar<dim, spacedim>::hessian_type
3673 Scalar<dim, spacedim>::average_of_hessians(
3675 const unsigned int q_point)
const
3679 if (this->fe_interface->at_boundary())
3680 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
3688 (*(this->fe_interface->fe_face_values))[extractor].hessian(
dof_pair[0],
3692 value += 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor]
3700 template <
int dim,
int spacedim>
3701 typename Scalar<dim, spacedim>::hessian_type
3703 const unsigned int q_point)
const
3710 template <
int dim,
int spacedim>
3711 typename Scalar<dim, spacedim>::third_derivative_type
3712 Scalar<dim, spacedim>::jump_in_third_derivatives(
3714 const unsigned int q_point)
const
3718 if (this->fe_interface->at_boundary())
3719 return (*(this->fe_interface->fe_face_values))[extractor]
3722 third_derivative_type
value;
3726 (*(this->fe_interface->fe_face_values))[extractor].third_derivative(
3730 value -= (*(this->fe_interface->fe_face_values_neighbor))[extractor]
3738 template <
int dim,
int spacedim>
3739 typename Scalar<dim, spacedim>::third_derivative_type
3740 Scalar<dim, spacedim>::jump_3rd_derivative(
3742 const unsigned int q_point)
const
3749 template <
int dim,
int spacedim>
3750 typename Scalar<dim, spacedim>::hessian_type
3751 Scalar<dim, spacedim>::jump_in_hessians(
3753 const unsigned int q_point)
const
3757 if (this->fe_interface->at_boundary())
3758 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
3765 (*(this->fe_interface->fe_face_values))[extractor].hessian(
dof_pair[0],
3770 (*(this->fe_interface->fe_face_values_neighbor))[extractor].hessian(
3778 template <
int dim,
int spacedim>
3779 typename Scalar<dim, spacedim>::hessian_type
3781 const unsigned int q_point)
const
3788 template <
int dim,
int spacedim>
3789 template <
class InputVector>
3791 Scalar<dim, spacedim>::get_function_values_from_local_dof_values(
3799 for (
const auto dof_index :
this->fe_interface->dof_indices())
3805 values[q_index] += local_dof_values[dof_index] *
3812 template <
int dim,
int spacedim>
3813 template <
class InputVector>
3815 Scalar<dim, spacedim>::get_function_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);
3832 template <
int dim,
int spacedim>
3833 template <
class InputVector>
3835 Scalar<dim, spacedim>::get_jump_in_function_values_from_local_dof_values(
3842 for (
const auto dof_index :
this->fe_interface->dof_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(
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(
3882 for (
const auto dof_index :
this->fe_interface->dof_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(
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(
3923 for (
const auto dof_index :
this->fe_interface->dof_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(
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(
3965 for (
const auto dof_index :
this->fe_interface->dof_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(
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(
4006 for (
const auto dof_index :
this->fe_interface->dof_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(
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(
4047 for (
const unsigned int dof_index :
this->fe_interface->dof_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(
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(
4089 this->fe_interface->n_quadrature_points);
4091 for (
const unsigned int dof_index :
this->fe_interface->dof_indices())
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(
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(
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>
4138 const unsigned int q_point)
const
4143 return (*(this->fe_interface->fe_face_values))[extractor].value(
4147 return (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
4155 template <
int dim,
int spacedim>
4158 const unsigned int q_point)
const
4166 (*(this->fe_interface->fe_face_values))[extractor].value(
dof_pair[0],
4171 (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
4179 template <
int dim,
int spacedim>
4182 const unsigned int q_point)
const
4189 template <
int dim,
int spacedim>
4193 const unsigned int q_point)
const
4197 if (this->fe_interface->at_boundary())
4198 return (*(this->fe_interface->fe_face_values))[extractor].value(
4206 (*(this->fe_interface->fe_face_values))[extractor].value(
dof_pair[0],
4211 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor].value(
4219 template <
int dim,
int spacedim>
4222 const unsigned int q_point)
const
4229 template <
int dim,
int spacedim>
4233 const unsigned int q_point)
const
4237 if (this->fe_interface->at_boundary())
4238 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
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]
4258 template <
int dim,
int spacedim>
4262 const unsigned int q_point)
const
4269 template <
int dim,
int spacedim>
4273 const unsigned int q_point)
const
4277 if (this->fe_interface->at_boundary())
4278 return (*(this->fe_interface->fe_face_values))[extractor].gradient(
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(
4298 template <
int dim,
int spacedim>
4301 const unsigned int q_point)
const
4308 template <
int dim,
int spacedim>
4312 const unsigned int q_point)
const
4316 if (this->fe_interface->at_boundary())
4317 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
4325 (*(this->fe_interface->fe_face_values))[extractor].hessian(
dof_pair[0],
4329 value += 0.5 * (*(this->fe_interface->fe_face_values_neighbor))[extractor]
4337 template <
int dim,
int spacedim>
4340 const unsigned int q_point)
const
4347 template <
int dim,
int spacedim>
4351 const unsigned int q_point)
const
4355 if (this->fe_interface->at_boundary())
4356 return (*(this->fe_interface->fe_face_values))[extractor].hessian(
4363 (*(this->fe_interface->fe_face_values))[extractor].hessian(
dof_pair[0],
4368 (*(this->fe_interface->fe_face_values_neighbor))[extractor].hessian(
4376 template <
int dim,
int spacedim>
4379 const unsigned int q_point)
const
4386 template <
int dim,
int spacedim>
4390 const unsigned int q_point)
const
4394 if (this->fe_interface->at_boundary())
4395 return (*(this->fe_interface->fe_face_values))[extractor]
4398 third_derivative_type
value;
4402 (*(this->fe_interface->fe_face_values))[extractor].third_derivative(
4406 value -= (*(this->fe_interface->fe_face_values_neighbor))[extractor]
4414 template <
int dim,
int spacedim>
4418 const unsigned int q_point)
const
4425 template <
int dim,
int spacedim>
4426 template <
class InputVector>
4436 for (
const auto dof_index :
this->fe_interface->dof_indices())
4442 values[q_index] += local_dof_values[dof_index] *
4449 template <
int dim,
int spacedim>
4450 template <
class InputVector>
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);
4469 template <
int dim,
int spacedim>
4470 template <
class InputVector>
4479 for (
const auto dof_index :
this->fe_interface->dof_indices())
4486 local_dof_values[dof_index] * jump_in_values(dof_index, q_index);
4492 template <
int dim,
int spacedim>
4493 template <
class InputVector>
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>
4519 for (
const auto dof_index :
this->fe_interface->dof_indices())
4526 local_dof_values[dof_index] * jump_in_gradients(dof_index, q_index);
4532 template <
int dim,
int spacedim>
4533 template <
class InputVector>
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>
4560 for (
const auto dof_index :
this->fe_interface->dof_indices())
4567 local_dof_values[dof_index] * average_of_values(dof_index, q_index);
4573 template <
int dim,
int spacedim>
4574 template <
class InputVector>
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>
4602 for (
const auto dof_index :
this->fe_interface->dof_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>
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>
4643 for (
const auto dof_index :
this->fe_interface->dof_indices())
4650 local_dof_values[dof_index] * jump_in_hessians(dof_index, q_index);
4656 template <
int dim,
int spacedim>
4657 template <
class InputVector>
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>
4684 for (
const unsigned int dof_index :
this->fe_interface->dof_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>
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>
4726 this->fe_interface->n_quadrature_points);
4728 for (
const unsigned int dof_index :
this->fe_interface->dof_indices())
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>
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(
value_type & operator[](const std::size_t i) const
void reinit(value_type *starting_element, const std::size_t n_elements)
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
#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