Go to the documentation of this file.
35 virtual const std::vector<Point>
39 std::vector<Xfem::CutEdge> & cut_edges,
40 std::vector<Xfem::CutNode> & cut_nodes,
41 Real time)
const override;
43 std::vector<Xfem::CutFace> & cut_faces,
44 Real time)
const override;
46 std::vector<Xfem::CutEdge> & cut_edges,
47 Real time)
const override;
49 std::vector<Xfem::CutFace> & cut_faces,
50 Real time)
const override;
98 std::vector<std::vector<dof_id_type>>
_front;
105 const std::vector<Point> & _vertices,
113 const std::vector<Point> & vertices,
119 bool isInsideEdge(
const Point & p1,
const Point & p2,
const Point & p)
const;
129 bool isInsideCutPlane(
const std::vector<Point> & _vertices,
const Point & p)
const;
152 Real
findDistance(dof_id_type node1, dof_id_type node2);
void findBoundaryNodes()
Find boundary nodes of the cutter mesh This is a simple algorithm simply based on the added angle = 3...
void findActiveBoundaryDirection()
Find growth direction at each active node.
Real getRelativePosition(const Point &p1, const Point &p2, const Point &p) const
Get the relative position of p from p1.
void refineFront()
Refine the mesh at the front.
MeshCut3DUserObject: (1) reads in a mesh describing the crack surface, (2) uses the mesh to do initia...
bool isInsideEdge(const Point &p1, const Point &p2, const Point &p) const
Check if point p is inside the edge p1-p2.
InputParameters validParams< MeshCut3DUserObject >()
void refineBoundary()
If boundary nodes are too sparse, add nodes in between.
void findBoundaryEdges()
Find boundary edges of the cutter mesh.
Real _size_control
Used for cutter mesh refinement and front advancement.
void findActiveBoundaryNodes()
Find all active boundary nodes in the cutter mesh Find boundary nodes that will grow; nodes outside o...
MeshCut3DUserObject(const InputParameters ¶meters)
std::vector< std::vector< dof_id_type > > _front
New boundary after growth.
std::vector< std::vector< dof_id_type > > _active_boundary
Active boundary nodes where growth is allowed.
virtual void initialSetup() override
MooseMesh & _mesh
The structural mesh.
std::set< Xfem::CutEdge > _boundary_edges
Edges at the boundary.
std::vector< dof_id_type > _boundary
Boundary nodes of the cutter mesh.
void sortBoundaryNodes()
Sort boundary nodes to be in the right order along the boundary.
Real findDistance(dof_id_type node1, dof_id_type node2)
Find distance between two nodes.
bool findIntersection(const Point &p1, const Point &p2, const std::vector< Point > &vertices, Point &pint) const
Find directional intersection along the positive extension of the vector from p1 to p2.
bool isInsideCutPlane(const std::vector< Point > &_vertices, const Point &p) const
Check if point p is inside a plane.
const Real _const_intersection
Used to define intersection points.
virtual void initialize() override
const unsigned int _cut_elem_dim
std::map< dof_id_type, std::vector< dof_id_type > > _boundary_map
A map of boundary nodes and their neighbors.
const Function & _func_x
Parsed functions of front growth.
std::vector< std::vector< Point > > _active_direction
Growth direction for active boundaries.
unsigned int _n_step_growth
Number of steps to grow the mesh.
void sortFrontNodes()
Sort the front nodes.
std::unique_ptr< MeshBase > _cut_mesh
The cutter mesh.
void joinBoundary()
Join active boundaries and inactive boundaries to be the new boundary.
virtual bool cutFragmentByGeometry(std::vector< std::vector< Point >> &frag_edges, std::vector< Xfem::CutEdge > &cut_edges, Real time) const override
Check to see whether a fragment of a 2D element should be cut based on geometric conditions.
void findFrontIntersection()
Find front-structure intersections.
const unsigned int _cut_elem_nnode
The cutter mesh has triangluar elements only.
bool _stop
variables to help control the work flow
virtual bool intersectWithEdge(const Point &p1, const Point &p2, const std::vector< Point > &_vertices, Point &pint) const
Check if a line intersects with an element.
void triangulation()
Create tri3 elements between the new front and the old front.
const unsigned int _elem_dim
The structural mesh must be 3D only.
virtual const std::vector< Point > getCrackFrontPoints(unsigned int num_crack_front_points) const override
get a set of points along a crack front from a XFEM GeometricCutUserObject
virtual bool cutElementByGeometry(const Elem *elem, std::vector< Xfem::CutEdge > &cut_edges, std::vector< Xfem::CutNode > &cut_nodes, Real time) const override
Check to see whether a specified 2D element should be cut based on geometric conditions.
void growFront()
Grow the cutter mesh.
std::vector< unsigned int > _inactive_boundary_pos
Inactive boundary.