12 #include "libmesh/replicated_mesh.h" 23 return std::get<0>(s) < i;
27 return i < std::get<0>(s);
39 const std::vector<libMesh::BoundaryInfo::BCTuple> & bdry_side_list,
41 std::vector<dof_id_type> & converted_elems_ids);
51 const std::vector<libMesh::BoundaryInfo::BCTuple> & bdry_side_list,
53 std::vector<dof_id_type> & converted_elems_ids);
63 const std::vector<libMesh::BoundaryInfo::BCTuple> & bdry_side_list,
65 std::vector<dof_id_type> & converted_elems_ids);
77 const unsigned int sec_min_pos,
78 std::vector<unsigned int> & face_rotation,
79 std::vector<unsigned int> & node_rotation);
100 std::vector<std::vector<unsigned int>> & rotated_tet_face_indices,
101 std::vector<std::vector<const Node *>> & tet_nodes_list);
129 std::vector<std::vector<unsigned int>>
131 std::vector<std::vector<unsigned int>> & tet_face_indices);
140 std::vector<unsigned int> & face_rotation,
141 std::vector<unsigned int> & node_rotation);
155 std::vector<std::vector<unsigned int>> & rotated_tet_face_indices,
156 std::vector<std::vector<const Node *>> & tet_nodes_list);
167 std::vector<std::vector<unsigned int>>
169 std::vector<std::vector<unsigned int>> & tet_face_indices);
180 std::vector<unsigned int> & face_rotation,
181 std::vector<unsigned int> & node_rotation);
195 std::vector<std::vector<unsigned int>> & rotated_tet_face_indices,
196 std::vector<std::vector<const Node *>> & tet_nodes_list);
211 const std::vector<std::pair<dof_id_type, bool>> & elems_to_process,
212 std::vector<dof_id_type> & converted_elems_ids_to_track,
214 const bool delete_block_to_remove);
232 const unsigned short n_elem_sides,
233 std::vector<std::vector<boundary_id_type>> & elem_side_list);
std::tuple< dof_id_type, unsigned short int, boundary_id_type > BCTuple
void pyramidElemSplitter(ReplicatedMesh &mesh, const std::vector< libMesh::BoundaryInfo::BCTuple > &bdry_side_list, const dof_id_type elem_id, std::vector< dof_id_type > &converted_elems_ids)
Split a PYRAMID5 element into two TET4 elements.
std::vector< bool > quadFaceDiagonalDirectionsHex(const std::vector< const Node *> &hex_nodes)
For a HEX8 element, determine the direction of the diagonal line of each face that involves the node ...
void nodeRotationHEX8(const unsigned int min_id_index, const unsigned int sec_min_pos, std::vector< unsigned int > &face_rotation, std::vector< unsigned int > &node_rotation)
Rotate a HEX8 element's nodes to ensure that the node with the minimum id is the first node; and the ...
bool quadFaceDiagonalDirection(const std::vector< const Node *> &quad_nodes)
For a QUAD4 element, determine the direction of the diagonal line that involves the node with the min...
void hexNodesToTetNodesDeterminer(std::vector< const Node *> &hex_nodes, std::vector< std::vector< unsigned int >> &rotated_tet_face_indices, std::vector< std::vector< const Node *>> &tet_nodes_list)
For a vector of rotated nodes that can form a HEX8 element, create a vector of four-node sets that ca...
void elementBoundaryInfoCollector(const std::vector< libMesh::BoundaryInfo::BCTuple > &bdry_side_list, const dof_id_type elem_id, const unsigned short n_elem_sides, std::vector< std::vector< boundary_id_type >> &elem_side_list)
Collect the boundary information of the given element in a mesh.
std::vector< unsigned int > neighborNodeIndicesHEX8(unsigned int min_id_index)
Calculate the indices (within the element nodes) of the three neighboring nodes of a node in a HEX8 e...
std::vector< std::vector< unsigned int > > tetNodesForPrism(const bool diagonal_direction, std::vector< std::vector< unsigned int >> &tet_face_indices)
Creates sets of four nodes indices that can form TET4 elements to replace the original PRISM6 element...
void nodeRotationPRISM6(unsigned int min_id_index, std::vector< unsigned int > &face_rotation, std::vector< unsigned int > &node_rotation)
Rotate a PRISM6 element nodes to ensure that the node with the minimum id is the first node...
void nodeRotationPYRAMID5(unsigned int min_id_index, std::vector< unsigned int > &face_rotation, std::vector< unsigned int > &node_rotation)
Rotate a PYRAMID5 element nodes to ensure that the node with the minimum id is the first node for the...
void convert3DMeshToAllTet4(ReplicatedMesh &mesh, const std::vector< std::pair< dof_id_type, bool >> &elems_to_process, std::vector< dof_id_type > &converted_elems_ids_to_track, const subdomain_id_type block_id_to_remove, const bool delete_block_to_remove)
Convert all the elements in a 3D mesh, consisting of only linear elements, into TET4 elements...
bool operator()(const libMesh::BoundaryInfo::BCTuple &s, dof_id_type i) const
void prismElemSplitter(ReplicatedMesh &mesh, const std::vector< libMesh::BoundaryInfo::BCTuple > &bdry_side_list, const dof_id_type elem_id, std::vector< dof_id_type > &converted_elems_ids)
Split a PRISM6 element into three TET4 elements.
bool operator()(dof_id_type i, const libMesh::BoundaryInfo::BCTuple &s) const
void pyramidNodesToTetNodesDeterminer(std::vector< const Node *> &pyramid_nodes, std::vector< std::vector< unsigned int >> &rotated_tet_face_indices, std::vector< std::vector< const Node *>> &tet_nodes_list)
For a rotated nodes that can form a PYRAMID5 element, create a series of four-node set that can form ...
void hexElemSplitter(ReplicatedMesh &mesh, const std::vector< libMesh::BoundaryInfo::BCTuple > &bdry_side_list, const dof_id_type elem_id, std::vector< dof_id_type > &converted_elems_ids)
Split a HEX8 element into six TET4 elements.
std::vector< std::vector< unsigned int > > tetNodesForHex(const std::vector< bool > diagonal_directions, std::vector< std::vector< unsigned int >> &tet_face_indices)
Creates sets of four nodes indices that can form TET4 elements to replace the original HEX8 element...
void prismNodesToTetNodesDeterminer(std::vector< const Node *> &prism_nodes, std::vector< std::vector< unsigned int >> &rotated_tet_face_indices, std::vector< std::vector< const Node *>> &tet_nodes_list)
For a rotated nodes that can form a PRISM6 element, create a series of four-node set that can form TE...