37 #if defined DEAL_II_PREFER_CGAL_OVER_PARMOONOLITH
47 template <
int dim0,
int dim1,
int spacedim>
48 dealii::Quadrature<spacedim>
52 const unsigned int degree,
55 const double tol = 1e-9)
57 if constexpr (dim0 == 1 && dim1 == 1)
66 return dealii::Quadrature<spacedim>();
70 const auto &vec_arrays =
71 ::CGALWrappers::compute_intersection_of_cells(
72 cell0, cell1, mapping0, mapping1, tol);
79 #elif defined DEAL_II_WITH_PARMOONOLITH
85 template <
int dim0,
int dim1,
int spacedim>
86 dealii::Quadrature<spacedim>
90 const unsigned int degree,
94 if constexpr ((dim0 == 1 && dim1 == 3) || (dim0 == 3 && dim1 == 1) ||
95 (dim0 == 1 && dim1 == 1))
103 return dealii::Quadrature<spacedim>();
108 cell0, cell1, degree, mapping0, mapping1);
117 template <
int dim0,
int dim1,
int spacedim>
128 "This function needs CGAL or PARMOONOLITH to be installed, "
129 "but cmake could not find any of them."));
135 template <
int dim0,
int dim1,
int spacedim>
137 std::tuple<typename Triangulation<dim0, spacedim>::cell_iterator,
142 const unsigned int degree,
148 std::tuple<typename Triangulation<dim0, spacedim>::cell_iterator,
154 const auto &space_tree =
159 const auto &immersed_tree =
164 const auto &mapping1 = immersed_cache.
get_mapping();
168 for (
const auto &[immersed_box, immersed_cell] : immersed_tree)
170 for (
const auto &[space_box, space_cell] :
172 bgi::adaptors::queried(bgi::intersects(immersed_box)))
174 const auto &test_intersection =
175 compute_cell_intersection<dim0, dim1, spacedim>(
176 space_cell, immersed_cell, degree, mapping0, mapping1);
179 const auto &weights = test_intersection.get_weights();
181 std::accumulate(weights.begin(), weights.end(), 0.0);
184 cells_with_quads.push_back(std::make_tuple(
185 space_cell, immersed_cell, test_intersection));
190 return cells_with_quads;
236 template std::vector<
237 std::tuple<typename dealii::Triangulation<1, 1>::cell_iterator,
238 typename dealii::Triangulation<1, 1>::cell_iterator,
243 const unsigned int degree,
248 template std::vector<
249 std::tuple<typename dealii::Triangulation<3, 3>::cell_iterator,
250 typename dealii::Triangulation<1, 3>::cell_iterator,
255 const unsigned int degree,
259 template std::vector<
260 std::tuple<typename dealii::Triangulation<2, 2>::cell_iterator,
261 typename dealii::Triangulation<1, 2>::cell_iterator,
266 const unsigned int degree,
271 template std::vector<std::tuple<typename Triangulation<2, 2>::cell_iterator,
277 const unsigned int degree,
282 template std::vector<std::tuple<typename Triangulation<3, 3>::cell_iterator,
288 const unsigned int degree,
293 template std::vector<std::tuple<typename Triangulation<3, 3>::cell_iterator,
299 const unsigned int degree,
Quadrature< spacedim > mapped_quadrature(const std::vector< std::array< Point< spacedim >, dim+1 > > &simplices) const
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
Quadrature< spacedim > compute_intersection(const typename Triangulation< dim0, spacedim >::cell_iterator &cell0, const typename Triangulation< dim1, spacedim >::cell_iterator &cell1, const unsigned int degree, const Mapping< dim0, spacedim > &mapping0=(ReferenceCells::get_hypercube< dim0 >() .template get_default_linear_mapping< dim0, spacedim >()), const Mapping< dim1, spacedim > &mapping1=(ReferenceCells::get_hypercube< dim1 >() .template get_default_linear_mapping< dim1, spacedim >()))
Intersect cell0 and cell1 and construct a Quadrature<spacedim> of degree degreeover the intersection,...
template Quadrature< 1 > compute_cell_intersection(const Triangulation< 1, 1 >::cell_iterator &, const Triangulation< 1, 1 >::cell_iterator &, const unsigned int, const Mapping< 1, 1 > &, const Mapping< 1, 1 > &, const double)