19 #include "libmesh/libmesh_config.h" 
   20 #if defined(LIBMESH_HAVE_TRIANGLE) && defined(LIBMESH_HAVE_TETGEN) 
   22 #include "libmesh/fe.h" 
   23 #include "libmesh/quadrature_gauss.h" 
   24 #include "libmesh/quadrature_trap.h" 
   25 #include "libmesh/quadrature_simpson.h" 
   26 #include "libmesh/quadrature_composite.h" 
   27 #include "libmesh/elem.h" 
   28 #include "libmesh/enum_quadrature_type.h" 
   36 template <
class QSubCell>
 
   44 template <
class QSubCell>
 
   66 template <
class QSubCell>
 
   68                                  const std::vector<Real> & vertex_distance_func,
 
   71   libmesh_assert_equal_to (vertex_distance_func.size(), elem.
n_vertices());
 
   72   libmesh_assert_equal_to (_dim, elem.
dim());
 
   79   if (!_elem_cutter.is_cut (elem, vertex_distance_func))
 
   81       _q_subcell.init (elem.
type(), p_level);
 
   82       _points  = _q_subcell.get_points();
 
   83       _weights = _q_subcell.get_weights();
 
   98   _elem_cutter(*reference_elem, vertex_distance_func);
 
  107     const std::vector<Elem const *> & inside_elem (_elem_cutter.inside_elements());
 
  108     std::cout << inside_elem.size() << 
" elements inside\n";
 
  110     this->add_subelem_values(inside_elem);
 
  115     const std::vector<Elem const *> & outside_elem (_elem_cutter.outside_elements());
 
  116     std::cout << outside_elem.size() << 
" elements outside\n";
 
  118     this->add_subelem_values(outside_elem);
 
  126 template <
class QSubCell>
 
  130   const std::vector<Real>  & subelem_weights = _lagrange_fe->get_JxW();
 
  131   const std::vector<Point> & subelem_points  = _lagrange_fe->get_xyz();
 
  133   for (
const auto & elem : subelem)
 
  140           _lagrange_fe->reinit(elem);
 
  141           _weights.insert(_weights.end(),
 
  142                           subelem_weights.begin(), subelem_weights.end());
 
  144           _points.insert(_points.end(),
 
  145                          subelem_points.begin(), subelem_points.end());
 
  151           for (
auto n : elem->node_index_range())
 
  154           libmesh_error_msg(
"Tetgen may have created a 0-volume cell during Cutcell integration.");
 
  169 #endif // LIBMESH_HAVE_TRIANGLE && LIBMESH_HAVE_TETGEN