26 template <
int dim0,
int dim1,
int spacedim,
typename VectorType>
30 const std::vector<std::tuple<
31 typename dealii::Triangulation<dim0, spacedim>::cell_iterator,
32 typename dealii::Triangulation<dim1, spacedim>::cell_iterator,
33 dealii::Quadrature<spacedim>>> &cells_and_quads,
44 ExcMessage(
"This function can only work if dim1<=dim0"));
47 const auto &space_fe = space_dh.
get_fe();
55 std::vector<types::global_dof_index> local_space_dof_indices(
56 n_dofs_per_space_cell);
63 for (
const auto &infos : cells_and_quads)
65 const auto &[first_cell, second_cell, quad_formula] = infos;
67 if (first_cell->is_active())
69 h = first_cell->diameter();
70 local_rhs =
typename VectorType::value_type();
73 const unsigned int n_quad_pts = quad_formula.size();
74 const auto &real_qpts = quad_formula.get_points();
77 std::vector<double> rhs_function_values(n_quad_pts);
78 rhs_function.
value_list(real_qpts, rhs_function_values);
81 std::vector<double> coefficient_values(n_quad_pts);
82 coefficient.
value_list(real_qpts, coefficient_values);
88 const auto &JxW = quad_formula.get_weights();
89 for (
unsigned int q = 0; q < n_quad_pts; ++q)
91 const auto &q_ref_point = ref_pts_space[q];
92 for (
unsigned int i = 0; i < n_dofs_per_space_cell; ++i)
94 local_rhs(i) += coefficient_values[q] * (penalty / h) *
95 space_fe.shape_value(i, q_ref_point) *
96 rhs_function_values[q] * JxW[q];
100 *first_cell, &space_dh);
102 space_cell_dh->get_dof_indices(local_space_dof_indices);
104 local_rhs, local_space_dof_indices, rhs);
115 std::tuple<
typename dealii::Triangulation<2, 2>::cell_iterator,
116 typename dealii::Triangulation<2, 2>::cell_iterator,
117 dealii::Quadrature<2>>> &,
131 std::tuple<
typename dealii::Triangulation<2, 2>::cell_iterator,
132 typename dealii::Triangulation<1, 2>::cell_iterator,
133 dealii::Quadrature<2>>> &,
147 std::tuple<
typename dealii::Triangulation<3, 3>::cell_iterator,
148 typename dealii::Triangulation<3, 3>::cell_iterator,
149 dealii::Quadrature<3>>> &,
161 std::tuple<
typename dealii::Triangulation<3, 3>::cell_iterator,
162 typename dealii::Triangulation<2, 3>::cell_iterator,
163 dealii::Quadrature<3>>> &,
void distribute_local_to_global(const InVector &local_vector, const std::vector< size_type > &local_dof_indices, OutVector &global_vector) const
const FiniteElement< dim, spacedim > & get_fe(const types::fe_index index=0) const
types::global_dof_index n_dofs() const
unsigned int n_dofs_per_cell() const
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< RangeNumberType > &values, const unsigned int component=0) const
virtual void transform_points_real_to_unit_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const ArrayView< const Point< spacedim > > &real_points, const ArrayView< Point< dim > > &unit_points) const
#define Assert(cond, exc)
#define AssertDimension(dim1, dim2)
static ::ExceptionBase & ExcMessage(std::string arg1)
typename ActiveSelector::cell_iterator cell_iterator
void create_nitsche_rhs_with_exact_intersections(const DoFHandler< dim0, spacedim > &, const std::vector< std::tuple< typename Triangulation< dim0, spacedim >::cell_iterator, typename Triangulation< dim1, spacedim >::cell_iterator, Quadrature< spacedim >>> &, VectorType &vector, const AffineConstraints< typename VectorType::value_type > &, const Mapping< dim0, spacedim > &, const Function< spacedim, typename VectorType::value_type > &, const Function< spacedim, typename VectorType::value_type > &, const double penalty=1.)
Create the r.h.s.
template void create_nitsche_rhs_with_exact_intersections< 3, 2, 3 >(const DoFHandler< 3, 3 > &, const std::vector< std::tuple< typename Triangulation< 3, 3 >::cell_iterator, typename Triangulation< 2, 3 >::cell_iterator, Quadrature< 3 >>> &, Vector< double > &vector, const AffineConstraints< double > &, const Mapping< 3, 3 > &, const Function< 3, double > &, const Function< 3, double > &, const double)
template void create_nitsche_rhs_with_exact_intersections< 2, 1, 2 >(const DoFHandler< 2, 2 > &, const std::vector< std::tuple< typename Triangulation< 2, 2 >::cell_iterator, typename Triangulation< 1, 2 >::cell_iterator, Quadrature< 2 >>> &, Vector< double > &vector, const AffineConstraints< double > &, const Mapping< 2, 2 > &, const Function< 2, double > &, const Function< 2, double > &, const double)
template void create_nitsche_rhs_with_exact_intersections< 3, 3, 3 >(const DoFHandler< 3, 3 > &, const std::vector< std::tuple< typename Triangulation< 3, 3 >::cell_iterator, typename Triangulation< 3, 3 >::cell_iterator, Quadrature< 3 >>> &, Vector< double > &vector, const AffineConstraints< double > &, const Mapping< 3, 3 > &, const Function< 3, double > &, const Function< 3, double > &, const double)
template void create_nitsche_rhs_with_exact_intersections< 2, 2, 2 >(const DoFHandler< 2, 2 > &, const std::vector< std::tuple< typename Triangulation< 2, 2 >::cell_iterator, typename Triangulation< 2, 2 >::cell_iterator, Quadrature< 2 >>> &, Vector< double > &vector, const AffineConstraints< double > &, const Mapping< 2, 2 > &, const Function< 2, double > &, const Function< 2, double > &, const double)
::VectorizedArray< Number, width > min(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)