20#ifndef LIBMESH_ELEM_CUTTER_H
21#define LIBMESH_ELEM_CUTTER_H
23#include "libmesh/libmesh_config.h"
25#if defined(LIBMESH_HAVE_TRIANGLE) && defined(LIBMESH_HAVE_TETGEN)
28#include "libmesh/libmesh_common.h"
29#include "libmesh/point.h"
44class TriangleInterface;
45class TetGenMeshInterface;
82 const std::vector<Real> & vertex_distance_func)
const;
90 const std::vector<Real> & vertex_distance_func)
const;
98 const std::vector<Real> & vertex_distance_func)
const;
110 const std::vector<Real> & vertex_distance_func);
135 const std::vector<Real> & vertex_distance_func);
141 const std::vector<Real> & vertex_distance_func);
147 const std::vector<Real> & vertex_distance_func);
153 const std::vector<Real> & vertex_distance_func);
This class implements cutting a single element into a collection of subelements.
void find_intersection_points(const Elem &elem, const std::vector< Real > &vertex_distance_func)
Finds the points where the cutting surface intersects the element edges.
bool is_outside(const Elem &elem, const std::vector< Real > &vertex_distance_func) const
bool is_inside(const Elem &elem, const std::vector< Real > &vertex_distance_func) const
std::unique_ptr< TriangleInterface > _triangle_inside
void cut_1D(const Elem &elem, const std::vector< Real > &vertex_distance_func)
cutting algorithm in 1D.
std::unique_ptr< TetGenMeshInterface > _tetgen_inside
std::vector< Point > _intersection_pts
const std::vector< Elem const * > & inside_elements() const
std::unique_ptr< ReplicatedMesh > _outside_mesh_2D
bool is_cut(const Elem &elem, const std::vector< Real > &vertex_distance_func) const
std::unique_ptr< TetGenMeshInterface > _tetgen_outside
std::vector< Elem const * > _outside_elem
std::unique_ptr< TriangleInterface > _triangle_outside
const std::vector< Elem const * > & outside_elements() const
void cut_2D(const Elem &elem, const std::vector< Real > &vertex_distance_func)
cutting algorithm in 2D.
Parallel::Communicator _comm_self
std::unique_ptr< ReplicatedMesh > _inside_mesh_2D
std::unique_ptr< ReplicatedMesh > _outside_mesh_3D
std::vector< Elem const * > _inside_elem
void operator()(const Elem &elem_in, const std::vector< Real > &vertex_distance_func)
This function implements cutting an element by a signed distance function.
std::unique_ptr< ReplicatedMesh > _inside_mesh_3D
void cut_3D(const Elem &elem, const std::vector< Real > &vertex_distance_func)
cutting algorithm in 3D.
This is the base class from which all geometric element types are derived.
The libMesh namespace provides an interface to certain functionality in the library.