Wildmeshing Toolkit
Loading...
Searching...
No Matches
Classes | Public Member Functions | Public Attributes | List of all members
harmonic_tet::HarmonicTet Class Reference
Inheritance diagram for harmonic_tet::HarmonicTet:
wmtk::TetMesh

Classes

struct  SwapInfoCache
 
struct  TetAttribute
 
struct  VertexAttributes
 

Public Member Functions

 HarmonicTet (const std::vector< Eigen::Vector3d > &_vertex_attribute, const std::vector< std::array< size_t, 4 > > &tets, int num_threads=1)
 
void compute_vertex_partition_morton ()
 
void output_mesh (std::string file) const
 
size_t get_partition_id (const Tuple &loc) const
 
void smooth_all_vertices (bool interior_only=false)
 
bool smooth_after (const Tuple &t) override
 User specified modifications and desideratas for after smoothing a vertex.
 
void swap_all_edges (bool parallel=false)
 
bool swap_edge_before (const Tuple &t) override
 User specified preparations and desideratas for an 3-2 edge swap before changing the conenctivity.
 
bool swap_edge_after (const Tuple &t) override
 User specified modifications and desideratas for after a 3-2 edge swap.
 
int swap_all ()
 
void swap_all_faces (bool parallel=false)
 
bool swap_face_before (const Tuple &t) override
 User specified preparations and desideratas for an 2-3 face swap befroe changing the geometry.
 
bool swap_face_after (const Tuple &t) override
 User specified modifications and desideratas for after a 2-3 face swap.
 
bool is_inverted (const Tuple &loc)
 
double get_quality (const Tuple &loc) const
 
double get_quality (const std::array< size_t, 4 > &vids) const
 
bool invariants (const std::vector< Tuple > &) override
 
- Public Member Functions inherited from wmtk::TetMesh
size_t vert_capacity () const
 get the current largest global vid
 
size_t tet_capacity () const
 get the current largest global tid
 
size_t vertex_size () const
 get the number of unremoved verticies
 
size_t tet_size () const
 get the number of unremoved tets
 
void init (size_t n_vertices, const std::vector< std::array< size_t, 4 > > &tets)
 
void init_with_isolated_vertices (size_t n_vertices, const std::vector< std::array< size_t, 4 > > &tets)
 
void init (const MatrixXi &T)
 Generate the connectivity of the mesh from an IGL-style T matrix.
 
bool split_edge (const Tuple &t, std::vector< Tuple > &new_tets)
 
virtual bool collapse_edge (const Tuple &t, std::vector< Tuple > &new_tets)
 
bool link_condition (const Tuple &t)
 
bool collapse_edge_conn (const Tuple &loc0, std::vector< Tuple > &new_edges, size_t &v1_id, Tuple &new_loc, std::map< size_t, wmtk::TetMesh::VertexConnectivity > &rollback_vert_conn, std::vector< size_t > &n1_t_ids_copy, std::vector< size_t > &new_tet_id, std::vector< TetrahedronConnectivity > &old_tets)
 
bool collapse_edge_check_topology (const std::vector< size_t > &new_tet_id)
 Check topology after collapse connectivity change. This is a sanity check and should not be necessary.
 
void collapse_edge_rollback (size_t &v1_id, std::map< size_t, wmtk::TetMesh::VertexConnectivity > &rollback_vert_conn, std::vector< size_t > &n1_t_ids, std::vector< size_t > &new_tet_id, std::vector< TetrahedronConnectivity > &old_tets)
 
bool swap_edge_56 (const Tuple &t, std::vector< Tuple > &new_tets)
 
bool swap_edge_44 (const Tuple &t, std::vector< Tuple > &new_tets)
 
bool swap_edge (const Tuple &t, std::vector< Tuple > &new_tets)
 3-2 edge swap
 
bool swap_face (const Tuple &t, std::vector< Tuple > &new_tets)
 2-3 face swap
 
bool smooth_vertex (const Tuple &t)
 
bool split_tet (const Tuple &t, std::vector< Tuple > &new_tets)
 Split a tet in 4 tets.
 
bool split_face (const Tuple &t, std::vector< Tuple > &new_tets)
 Split a face in 3 faces.
 
void triangle_insertion (const std::vector< Tuple > &intersected_tets, const std::vector< Tuple > &intersected_edges, std::vector< size_t > &new_edge_vids, std::vector< size_t > &new_center_vids, std::vector< std::array< size_t, 4 > > &center_split_tets)
 Insert a triangle into a tetmesh, with known intersection information.
 
bool insert_point (const Tuple &t, std::vector< Tuple > &new_tets)
 Insert a point into a tetmesh inside a tet. In general position, this split a tet into 4. In face position, split two tets. In edge position, In point position, do nothing.
 
virtual bool insert_point_before (const Tuple &t)
 
virtual bool insert_point_after (std::vector< Tuple > &new_tets)
 
void consolidate_mesh ()
 cleans up the deleted vertices or tetrahedra, fixes the corresponding indices, and reset the version number. WARNING: it invalidates all tuples!
 
std::vector< Tupleget_edges () const
 
std::vector< Tupleget_faces () const
 
std::vector< Tupleget_vertices () const
 
std::vector< Tupleget_tets () const
 
virtual void for_each_face (const std::function< void(const TetMesh::Tuple &)> &)
 looping through all the unique edges and perform the given function
 
Tuple tuple_from_edge (size_t tid, int local_eid) const
 get a Tuple from global tetra index and local edge index (from 0-5).
 
Tuple tuple_from_edge (const std::array< size_t, 2 > &vids) const
 get a Tuple from global vids of the 2 end of an edge
 
Tuple tuple_from_face (size_t tid, int local_fid) const
 get a Tuple from global tetra index and local face index (from 0-3).
 
std::tuple< Tuple, size_t > tuple_from_face (const std::array< size_t, 3 > &vids) const
 get a Tuple and the global face index from global vertex index of the face.
 
std::tuple< Tuple, size_t > tuple_from_face (const simplex::Face &f) const
 
Tuple tuple_from_vertex (size_t vid) const
 get a Tuple from global vertex index
 
Tuple tuple_from_tet (size_t tid) const
 get a Tuple from global tetra index
 
Tuple tuple_from_vids (size_t vid0, size_t vid1, size_t vid2, size_t vid3) const
 Get a Tuple from global vertex IDs.
 
simplex::Tet simplex_from_tet (const Tuple &t) const
 
simplex::Tet simplex_from_tet (const size_t tid) const
 
Tuple switch_vertex (const Tuple &t) const
 wrapper function from Tuple::switch_vertex
 
Tuple switch_edge (const Tuple &t) const
 wrapper function from Tuple::switch_edge
 
Tuple switch_face (const Tuple &t) const
 wrapper function from Tuple::switch_face
 
std::optional< Tupleswitch_tetrahedron (const Tuple &t) const
 wrapper function from Tuple::switch_tetrahedron
 
std::vector< Tupleget_one_ring_tets_for_vertex (const Tuple &t) const
 Get the one ring tets for a vertex.
 
std::vector< size_t > get_one_ring_tids_for_vertex (const Tuple &t) const
 Get the one ring tids for vertex.
 
std::vector< size_t > get_one_ring_tids_for_vertex (const size_t vid) const
 
std::vector< Tupleget_one_ring_vertices_for_vertex (const Tuple &t) const
 Get the one ring vertices for a vertex.
 
std::vector< size_t > get_one_ring_vids_for_vertex (size_t vid, std::vector< size_t > &cache)
 Get the one ring vids for vertex.
 
std::vector< size_t > get_one_ring_vids_for_vertex (size_t vid) const
 Get the one ring vids for vertex.
 
std::vector< size_t > get_one_ring_vids_for_vertex_adj (size_t vid) const
 Duplicate of the function TetMesh::get_one_ring_vids_for_vertex.
 
std::vector< size_t > get_one_ring_vids_for_vertex_adj (size_t vid, std::vector< size_t > &cache)
 Duplicate of the function TetMesh::get_one_ring_vids_for_vertex.
 
std::vector< Tupleget_incident_tets_for_edge (const Tuple &t) const
 Get the incident tets for edge.
 
std::vector< Tupleget_incident_tets_for_edge (const size_t vid0, const size_t vid1) const
 
std::vector< size_t > get_incident_tids_for_edge (const Tuple &t) const
 
std::vector< size_t > get_incident_tids_for_edge (const size_t vid0, const size_t vid1) const
 
std::vector< Tupleget_one_ring_tets_for_edge (const Tuple &t) const
 Get the one ring tets for edge.
 
std::vector< std::array< size_t, 3 > > vertex_adjacent_boundary_faces (const Tuple &t) const
 
std::array< Tuple, 4 > oriented_tet_vertices (const Tuple &t) const
 
std::array< size_t, 4 > oriented_tet_vids (const Tuple &t) const
 
std::array< size_t, 4 > oriented_tet_vids (const size_t tid) const
 
std::array< Tuple, 3 > get_face_vertices (const Tuple &t) const
 Get the 3 vertices of a face represented by Tuple.
 
std::array< size_t, 3 > get_face_vids (const Tuple &t) const
 
std::array< Tuple, 6 > tet_edges (const Tuple &t) const
 get the 6 edges of a tet represented by Tuples
 
void check_tuple_validity (const Tuple &t) const
 
bool check_mesh_connectivity_validity () const
 checks the validity of the connectivity of the mesh. Including the validity of each Tuple
 
void remove_tets_by_ids (const std::vector< size_t > &tids)
 remove the tetrahedrons in the mesh that have given tet ids
 
void start_protect_attributes ()
 
void release_protect_attributes ()
 
void rollback_protected_attributes ()
 
int release_vertex_mutex_in_stack ()
 
bool try_set_vertex_mutex_two_ring (const Tuple &v, int threadid)
 try lock the two-ring neighboring traingles' incident vertices
 
bool try_set_vertex_mutex_two_ring_vid (const Tuple &v, int threadid)
 try lock the two-ring neighboring traingles' incident vertices using vids
 
bool try_set_vertex_mutex_two_ring_vid (size_t v, int threadid)
 a duplicate of ConcurrentTetMesh::try_set_vertex_mutex_two_ring_vid that gets vids using the vid of the input Tuple
 
bool try_set_edge_mutex_two_ring (const Tuple &e, int threadid=0)
 try lock the two-ring neighboring triangles' incident vertices for the two ends of an edge
 
bool try_set_face_mutex_two_ring (const Tuple &f, int threadid=0)
 try lock the two-ring neighboring triangles' incident vertices for the 3 vertices of a face
 
bool try_set_face_mutex_two_ring (const Tuple &v1, const Tuple &v2, const Tuple &v3, int threadid=0)
 locking the two-ring neighboring triangles' incident vertices given the 3 vertex Tuples of the face
 
bool try_set_face_mutex_two_ring (size_t v1, size_t v2, size_t v3, int threadid=0)
 a duplicate of ConcurrentTetMesh::try_set_face_mutex_two_ring usign the vids of the 3 vertices of a face
 
bool try_set_vertex_mutex_one_ring (const Tuple &v, int threadid=0)
 try lock the one-ring neighboring traingles' incident vertices
 
void for_each_edge (const std::function< void(const TetMesh::Tuple &)> &)
 perform the given function for each edge
 
void for_each_vertex (const std::function< void(const TetMesh::Tuple &)> &)
 perform the given function for each vertex
 
void for_each_tetra (const std::function< void(const TetMesh::Tuple &)> &)
 perform the given function for each tet
 

Public Attributes

wmtk::AttributeCollection< VertexAttributesvertex_attrs
 
wmtk::AttributeCollection< TetAttributetet_attrs
 
tbb::enumerable_thread_specific< SwapInfoCacheedgeswap_cache
 
tbb::enumerable_thread_specific< SwapInfoCachefaceswap_cache
 
- Public Attributes inherited from wmtk::TetMesh
AbstractAttributeContainerp_vertex_attrs = nullptr
 
AbstractAttributeContainerp_edge_attrs = nullptr
 
AbstractAttributeContainerp_face_attrs = nullptr
 
AbstractAttributeContainerp_tet_attrs = nullptr
 
bool m_collapse_check_link_condition = true
 
bool m_collapse_check_topology = false
 
bool m_collapse_check_manifold = true
 
tbb::enumerable_thread_specific< std::vector< size_t > > mutex_release_stack
 
tbb::enumerable_thread_specific< std::vector< size_t > > get_one_ring_cache
 
int NUM_THREADS = 0
 

Additional Inherited Members

- Public Types inherited from wmtk::TetMesh
template<typename T >
using vector = tbb::concurrent_vector< T >
 
- Protected Member Functions inherited from wmtk::TetMesh
virtual bool triangle_insertion_before (const std::vector< Tuple > &faces)
 
virtual bool triangle_insertion_after (const std::vector< std::vector< Tuple > > &)
 
virtual bool split_edge_before (const Tuple &t)
 User specified preparations and desideratas for an edge split before changing the connectivity.
 
virtual bool split_edge_after (const Tuple &t)
 This function computes the attributes for the added simplices. User specified modifications and desideratas for after an edge split.
 
virtual bool collapse_edge_before (const Tuple &t)
 User specified preparations and desideratas for an edge collapse before changing the connectivity.
 
virtual bool collapse_edge_after (const Tuple &t)
 User specified modifications and desideratas for after an edge collapse.
 
virtual bool swap_edge_44_before (const Tuple &t)
 User specified preparations and desideratas for an 4-4 edge swap before changing the connectivity.
 
virtual double swap_edge_44_energy (const std::vector< std::array< size_t, 4 > > &tets, const int op_case)
 User specified energy to decide which of the 4 possible orientations should be chosen.
 
virtual bool swap_edge_44_after (const Tuple &t)
 User specified modifications and desideratas for after a 4-4 edge swap.
 
virtual bool swap_edge_56_before (const Tuple &t)
 User specified preparations and desideratas for a 5-6 edge swap before changing the connectivity.
 
virtual double swap_edge_56_energy (const std::vector< std::array< size_t, 4 > > &tets, const int op_case)
 User specified energy to decide which of the 5 possible orientations should be chosen.
 
virtual bool swap_edge_56_after (const Tuple &t)
 User specified modifications and desideratas for after a 5-6 edge swap.
 
virtual bool smooth_before (const Tuple &t)
 User specified preparations and desideratas for smoothing a vertex.
 
virtual bool split_face_before (const Tuple &t)
 User specified preparations and desideratas for a face split before changing the connectivity.
 
virtual bool split_face_after (const Tuple &t)
 Compute the attributes for the added simplices.
 
virtual bool split_tet_before (const Tuple &t)
 User specified preparations and desideratas for a tet split before changing the connectivity.
 
virtual bool split_tet_after (const Tuple &t)
 Compute the attributes for the added simplices.
 
void resize_vertex_mutex (size_t v)
 

Member Function Documentation

◆ invariants()

bool harmonic_tet::HarmonicTet::invariants ( const std::vector< Tuple > &  tets)
overridevirtual

Reimplemented from wmtk::TetMesh.

◆ smooth_after()

bool harmonic_tet::HarmonicTet::smooth_after ( const Tuple t)
overridevirtual

User specified modifications and desideratas for after smoothing a vertex.

Parameters
tTuple refering to a vertex
Returns
true if the preparation succeed

Reimplemented from wmtk::TetMesh.

◆ swap_edge_after()

bool harmonic_tet::HarmonicTet::swap_edge_after ( const Tuple t)
overridevirtual

User specified modifications and desideratas for after a 3-2 edge swap.

Parameters
tedge Tuple that's swaped
Returns
true if the modification succeed

Reimplemented from wmtk::TetMesh.

◆ swap_edge_before()

bool harmonic_tet::HarmonicTet::swap_edge_before ( const Tuple t)
overridevirtual

User specified preparations and desideratas for an 3-2 edge swap before changing the conenctivity.

Parameters
tedge Tuple to be swaped
Returns
true if the preparation succeed

Reimplemented from wmtk::TetMesh.

◆ swap_face_after()

bool harmonic_tet::HarmonicTet::swap_face_after ( const Tuple t)
overridevirtual

User specified modifications and desideratas for after a 2-3 face swap.

Parameters
tedge Tuple that's swaped
Returns
true if the modification succeed

Reimplemented from wmtk::TetMesh.

◆ swap_face_before()

bool harmonic_tet::HarmonicTet::swap_face_before ( const Tuple t)
overridevirtual

User specified preparations and desideratas for an 2-3 face swap befroe changing the geometry.

Parameters
tedge Tuple to be swaped
Returns
true if the preparation succeed

Reimplemented from wmtk::TetMesh.


The documentation for this class was generated from the following files: