PolyFEM
|
#include <WildRemesher.hpp>
Classes | |
struct | BoundaryAttributes |
struct | EdgeAttributes |
struct | ElementAttributes |
struct | VertexAttributes |
Public Types | |
using | VectorNd = Eigen::Matrix< double, DIM, 1 > |
using | Tuple = typename WMTKMesh::Tuple |
Public Types inherited from polyfem::mesh::Remesher | |
template<typename T > | |
using | EdgeMap = std::unordered_map< std::array< size_t, 2 >, T, polyfem::utils::HashUnorderedArray< size_t, 2 >, polyfem::utils::EqualUnorderedArray< size_t, 2 > > |
Map from a (sorted) edge to an integer (ID) | |
template<typename T > | |
using | FaceMap = std::unordered_map< std::array< size_t, 3 >, T, polyfem::utils::HashUnorderedArray< size_t, 3 >, polyfem::utils::EqualUnorderedArray< size_t, 3 > > |
Map from a (sorted) edge to an integer (ID) | |
template<typename T > | |
using | TetMap = std::unordered_map< std::array< size_t, 4 >, T, polyfem::utils::HashUnorderedArray< size_t, 4 >, polyfem::utils::EqualUnorderedArray< size_t, 4 > > |
template<typename T > | |
using | BoundaryMap = std::variant< EdgeMap< T >, FaceMap< T > > |
Public Member Functions | |
WildRemesher (const State &state, const Eigen::MatrixXd &obstacle_displacements, const Eigen::MatrixXd &obstacle_vals, const double current_time, const double starting_energy) | |
Construct a new WildRemesher object. | |
virtual | ~WildRemesher ()=default |
virtual void | init (const Eigen::MatrixXd &rest_positions, const Eigen::MatrixXd &positions, const Eigen::MatrixXi &elements, const Eigen::MatrixXd &projection_quantities, const BoundaryMap< int > &boundary_to_id, const std::vector< int > &body_ids, const EdgeMap< double > &elastic_energy, const EdgeMap< double > &contact_energy) override |
Initialize the mesh. | |
bool | execute () override |
Execute the remeshing. | |
virtual void | split_edges ()=0 |
virtual void | collapse_edges ()=0 |
virtual void | smooth_vertices () |
virtual void | swap_edges () |
int | dim () const override |
Dimension of the mesh. | |
Eigen::MatrixXd | rest_positions () const override |
Exports rest positions of the stored mesh. | |
Eigen::MatrixXd | displacements () const override |
Exports positions of the stored mesh. | |
Eigen::MatrixXd | positions () const override |
Exports displacements of the stored mesh. | |
Eigen::MatrixXi | edges () const override |
Exports edges of the stored mesh. | |
Eigen::MatrixXi | elements () const override |
Exports elements of the stored mesh. | |
Eigen::MatrixXi | boundary_edges () const override |
Exports boundary edges of the stored mesh. | |
Eigen::MatrixXi | boundary_faces () const override |
Exports boundary faces of the stored mesh. | |
Eigen::MatrixXd | projection_quantities () const override |
Exports projected quantities of the stored mesh. | |
BoundaryMap< int > | boundary_ids () const override |
Exports boundary ids of the stored mesh. | |
std::vector< int > | body_ids () const override |
Exports body ids of the stored mesh. | |
std::vector< int > | boundary_nodes (const Eigen::VectorXi &vertex_to_basis) const override |
Get the boundary nodes of the stored mesh. | |
int | n_quantities () const override |
Number of projection quantities (not including the position) | |
std::vector< Tuple > | get_facets () const |
Get a vector of all facets (edges or triangles) | |
std::vector< Tuple > | get_elements () const |
Get a vector of all elements (triangles or tetrahedra) | |
void | set_rest_positions (const Eigen::MatrixXd &positions) override |
Set rest positions of the stored mesh. | |
void | set_positions (const Eigen::MatrixXd &positions) override |
Set deformed positions of the stored mesh. | |
void | set_projection_quantities (const Eigen::MatrixXd &projection_quantities) override |
Set projected quantities of the stored mesh. | |
void | set_fixed (const std::vector< bool > &fixed) override |
Set if a vertex is fixed. | |
void | set_boundary_ids (const BoundaryMap< int > &boundary_to_id) override |
Set the boundary IDs of all edges. | |
void | set_body_ids (const std::vector< int > &body_ids) override |
Set the body IDs of all elements. | |
double | rest_edge_length (const Tuple &e) const |
Compute the length of an edge. | |
double | deformed_edge_length (const Tuple &e) const |
VectorNd | rest_edge_center (const Tuple &e) const |
Compute the center of the edge. | |
VectorNd | deformed_edge_center (const Tuple &e) const |
Eigen::VectorXd | edge_adjacent_element_volumes (const Tuple &e) const |
double | element_volume (const Tuple &e) const |
Compute the volume (area) of an tetrahedron (triangle) element. | |
bool | is_boundary_vertex (const Tuple &v) const |
Is the given vertex tuple on the boundary of the mesh? | |
bool | is_body_boundary_vertex (const Tuple &v) const |
Is the given vertex tuple on the boundary of a body? | |
bool | is_boundary_edge (const Tuple &e) const |
Is the given edge tuple on the boundary of the mesh? | |
bool | is_body_boundary_edge (const Tuple &e) const |
Is the given edge tuple on the boundary of a body? | |
bool | is_boundary_facet (const Tuple &t) const |
Is the given tuple on the boundary of the mesh? | |
bool | is_boundary_op () const |
Is the currently cached operation a boundary operation? | |
std::vector< Tuple > | boundary_facets (std::vector< int > *boundary_ids=nullptr) const |
Get the boundary facets of the mesh. | |
std::array< Tuple, DIM > | facet_vertices (const Tuple &t) const |
Get the vertex tuples of a facet. | |
std::array< size_t, DIM > | facet_vids (const Tuple &t) const |
Get the vertex ids of a facet. | |
std::array< Tuple, VERTICES_PER_ELEMENT > | element_vertices (const Tuple &t) const |
Get the vertex tuples of an element. | |
std::array< size_t, VERTICES_PER_ELEMENT > | element_vids (const Tuple &t) const |
Get the vertex ids of an element. | |
void | element_aabb (const Tuple &t, polyfem::VectorNd &el_min, polyfem::VectorNd &el_max) const |
Get a AABB for an element. | |
std::array< size_t, VERTICES_PER_ELEMENT > | orient_preserve_element_reorder (const std::array< size_t, VERTICES_PER_ELEMENT > &conn, const size_t v0) const |
Reorder the element vertices so that the first vertex is v0. | |
std::vector< Tuple > | get_one_ring_elements_for_vertex (const Tuple &t) const |
Get the one ring of elements around a vertex. | |
std::vector< Tuple > | get_one_ring_boundary_edges_for_vertex (const Tuple &v) const |
std::array< Tuple, 2 > | get_boundary_faces_for_edge (const Tuple &e) const |
std::vector< Tuple > | get_one_ring_boundary_faces_for_vertex (const Tuple &v) const |
std::vector< Tuple > | get_edges_for_elements (const std::vector< Tuple > &elements) const |
size_t | facet_id (const Tuple &t) const |
Get the id of a facet (edge for triangle, triangle for tetrahedra) | |
size_t | element_id (const Tuple &t) const |
Get the id of an element (triangle or tetrahedra) | |
Tuple | tuple_from_element (size_t elem_id) const |
Get a tuple of an element. | |
Tuple | tuple_from_facet (size_t elem_id, int local_facet_id) const |
Get a tuple of an element with a local facet. | |
std::vector< Tuple > | get_incident_elements_for_edge (const Tuple &t) const |
Get the incident elements for an edge. | |
void | extend_local_patch (std::vector< Tuple > &patch) const |
Extend the local patch by including neighboring elements. | |
Tuple | opposite_vertex_on_face (const Tuple &e) const |
Get the opposite vertex on a face. | |
CollapseEdgeTo | collapse_boundary_edge_to (const Tuple &e) const |
Determine where to collapse an edge to. | |
void | write_edge_ranks_mesh (const EdgeMap< typename EdgeAttributes::EnergyRank > &elastic_ranks, const EdgeMap< typename EdgeAttributes::EnergyRank > &contact_ranks) const |
EdgeAttributes & | edge_attr (const size_t e_id) |
Get a reference to an edge's attributes. | |
const EdgeAttributes & | edge_attr (const size_t e_id) const |
Get a const reference to an edge's attributes. | |
Public Member Functions inherited from polyfem::mesh::Remesher | |
Remesher (const State &state, const Eigen::MatrixXd &obstacle_displacements, const Eigen::MatrixXd &obstacle_quantities, const double current_time, const double starting_energy) | |
Construct a new Remesher object. | |
virtual | ~Remesher ()=default |
virtual bool | is_volume () const |
Is the mesh a volumetric mesh. | |
const Obstacle & | obstacle () const |
Get a reference to the collision obstacles. | |
const Eigen::MatrixXd & | obstacle_displacements () const |
Get a reference to the collision obstacles' displacements. | |
const Eigen::MatrixXd & | obstacle_quantities () const |
Get a reference to the collision obstacles' extra quantities. | |
void | write_mesh (const std::string &path) const |
Writes a VTU mesh file. | |
void | init_assembler (const std::vector< int > &body_ids) const |
Create an assembler object. | |
Public Attributes | |
wmtk::AttributeCollection< VertexAttributes > | vertex_attrs |
wmtk::AttributeCollection< BoundaryAttributes > | boundary_attrs |
wmtk::AttributeCollection< ElementAttributes > | element_attrs |
Public Attributes inherited from polyfem::mesh::Remesher | |
const State & | state |
Reference to the simulation state. | |
int | max_op_attempts = 1 |
Static Public Attributes | |
static constexpr int | DIM |
static constexpr int | VERTICES_PER_ELEMENT |
static constexpr int | EDGES_PER_ELEMENT |
static constexpr int | FACETS_PER_ELEMENT |
static constexpr wmtk::ExecutionPolicy | EXECUTION_POLICY = wmtk::ExecutionPolicy::kSeq |
Current execuation policy (sequencial or parallel) | |
Static Public Attributes inherited from polyfem::mesh::Remesher | |
static std::unordered_map< std::string, utils::Timing > | timings |
Timings for the remeshing operations. | |
static double | total_time = 0 |
static size_t | num_solves = 0 |
static size_t | total_ndofs = 0 |
Protected Types | |
using | Operations = std::vector< std::pair< std::string, Tuple > > |
Protected Member Functions | |
void | init_attributes_and_connectivity (const size_t num_vertices, const Eigen::MatrixXi &elements) override |
Create an internal mesh representation and associate attributes. | |
virtual bool | split_edge_before (const Tuple &t) override |
virtual bool | split_edge_after (const Tuple &t) override |
virtual bool | collapse_edge_before (const Tuple &t) override |
virtual bool | collapse_edge_after (const Tuple &t) override |
virtual bool | swap_edge_before (const Tuple &t) override |
virtual bool | swap_edge_after (const Tuple &t) override |
virtual bool | smooth_before (const Tuple &t) override |
virtual bool | smooth_after (const Tuple &t) override |
bool | invariants (const std::vector< Tuple > &new_tris) override |
Check if invariants are satisfied. | |
bool | is_rest_inverted (const Tuple &loc) const |
Check if a triangle's rest shape is inverted. | |
bool | is_inverted (const Tuple &loc) const |
Check if a triangle's rest and deformed shapes are inverted. | |
virtual Operations | renew_neighbor_tuples (const std::string &op, const std::vector< Tuple > &tris) const |
void | cache_split_edge (const Tuple &e) |
Cache the split edge operation. | |
void | cache_collapse_edge (const Tuple &e, const CollapseEdgeTo collapse_to) |
Cache the edge collapse operation. | |
void | cache_swap_edge (const Tuple &e) |
Cache the edge swap operation. | |
void | map_edge_split_edge_attributes (const Tuple &t) |
void | map_edge_split_boundary_attributes (const Tuple &t) |
void | map_edge_split_element_attributes (const Tuple &t) |
void | map_edge_collapse_vertex_attributes (const Tuple &t) |
void | map_edge_collapse_boundary_attributes (const Tuple &t) |
void | map_edge_collapse_edge_attributes (const Tuple &t) |
void | map_edge_swap_edge_attributes (const Tuple &t) |
void | map_edge_swap_element_attributes (const Tuple &t) |
Protected Member Functions inherited from polyfem::mesh::Remesher | |
void | project_quantities () |
Update the mesh positions and other projection quantities. | |
void | cache_before () |
Cache quantities before applying an operation. | |
Protected Attributes | |
wmtk::ExecutePass< WildRemesher, EXECUTION_POLICY > | executor |
int | m_n_quantities |
double | total_volume |
std::conditional< std::is_same< WMTKMesh, wmtk::TriMesh >::value, std::shared_ptr< TriOperationCache >, std::shared_ptr< TetOperationCache > >::type | op_cache |
Protected Attributes inherited from polyfem::mesh::Remesher | |
GlobalProjectionCache | global_projection_cache |
const json | args |
Copy of remesh args. | |
const Eigen::MatrixXd | m_obstacle_displacements |
Collision obstacles' displacements. | |
Eigen::MatrixXd | m_obstacle_quantities |
Collision obstacles' extra quantities. | |
const double | current_time |
Current time. | |
const double | starting_energy |
Starting energy. | |
Private Types | |
using | This = WildRemesher< WMTKMesh > |
Private Attributes | |
wmtk::AttributeCollection< EdgeAttributes > | edge_attrs |
Additional Inherited Members | |
Static Public Member Functions inherited from polyfem::mesh::Remesher | |
static Eigen::MatrixXd | combine_time_integrator_quantities (const std::shared_ptr< time_integrator::ImplicitTimeIntegrator > &time_integrator) |
Combine the quantities of a time integrator into a single matrix (one column per quantity) | |
static void | split_time_integrator_quantities (const Eigen::MatrixXd &quantities, const int dim, Eigen::MatrixXd &x_prevs, Eigen::MatrixXd &v_prevs, Eigen::MatrixXd &a_prevs) |
Split the quantities of a time integrator into separate vectors. | |
static int | build_bases (const Mesh &mesh, const std::string &assembler_formulation, std::vector< polyfem::basis::ElementBases > &bases, std::vector< LocalBoundary > &local_boundary, Eigen::VectorXi &vertex_to_basis) |
Build bases for a given mesh (V, F) | |
static void | log_timings () |
Definition at line 26 of file WildRemesher.hpp.
|
protected |
Definition at line 292 of file WildRemesher.hpp.
|
private |
Definition at line 28 of file WildRemesher.hpp.
using polyfem::mesh::WildRemesher< WMTKMesh >::Tuple = typename WMTKMesh::Tuple |
Definition at line 64 of file WildRemesher.hpp.
using polyfem::mesh::WildRemesher< WMTKMesh >::VectorNd = Eigen::Matrix<double, DIM, 1> |
Definition at line 62 of file WildRemesher.hpp.
polyfem::mesh::WildRemesher< WMTKMesh >::WildRemesher | ( | const State & | state, |
const Eigen::MatrixXd & | obstacle_displacements, | ||
const Eigen::MatrixXd & | obstacle_vals, | ||
const double | current_time, | ||
const double | starting_energy | ||
) |
Construct a new WildRemesher object.
state | Simulation current state |
Definition at line 34 of file WildRemesher.cpp.
|
virtualdefault |
|
overridevirtual |
Exports body ids of the stored mesh.
Implements polyfem::mesh::Remesher.
Definition at line 196 of file WildRemesher.cpp.
|
overridevirtual |
Exports boundary edges of the stored mesh.
Implements polyfem::mesh::Remesher.
|
overridevirtual |
Exports boundary faces of the stored mesh.
Implements polyfem::mesh::Remesher.
std::vector< typename WMTKMesh::Tuple > polyfem::mesh::WildRemesher< WMTKMesh >::boundary_facets | ( | std::vector< int > * | boundary_ids = nullptr | ) | const |
Get the boundary facets of the mesh.
Definition at line 245 of file WildRemesher.cpp.
References POLYFEM_REMESHER_SCOPED_TIMER.
|
overridevirtual |
Exports boundary ids of the stored mesh.
Implements polyfem::mesh::Remesher.
|
overridevirtual |
Get the boundary nodes of the stored mesh.
Implements polyfem::mesh::Remesher.
Definition at line 208 of file WildRemesher.cpp.
|
protected |
Cache the edge collapse operation.
e | edge tuple |
collapse_to | collapse to which vertex |
Definition at line 11 of file Collapse.cpp.
|
protected |
|
protected |
Cache the edge swap operation.
e | edge tuple |
Definition at line 8 of file Swap.cpp.
References polyfem::mesh::TetOperationCache::swap_32(), and polyfem::mesh::TriOperationCache::swap_edge().
CollapseEdgeTo polyfem::mesh::WildRemesher< WMTKMesh >::collapse_boundary_edge_to | ( | const Tuple & | e | ) | const |
Determine where to collapse an edge to.
e | edge tuple |
|
overrideprotectedvirtual |
Reimplemented in polyfem::mesh::PhysicsRemesher< WMTKMesh >, polyfem::mesh::PhysicsRemesher< wmtk::TetMesh >, polyfem::mesh::PhysicsRemesher< wmtk::TriMesh >, and polyfem::mesh::SizingFieldRemesher< WMTKMesh >.
Definition at line 113 of file Collapse.cpp.
|
overrideprotectedvirtual |
Reimplemented in polyfem::mesh::PhysicsRemesher< WMTKMesh >, polyfem::mesh::PhysicsRemesher< wmtk::TetMesh >, and polyfem::mesh::PhysicsRemesher< wmtk::TriMesh >.
Definition at line 18 of file Collapse.cpp.
References polyfem::mesh::ILLEGAL, and polyfem::mesh::max_edge_length().
|
pure virtual |
WildRemesher< WMTKMesh >::VectorNd polyfem::mesh::WildRemesher< WMTKMesh >::deformed_edge_center | ( | const Tuple & | e | ) | const |
Definition at line 417 of file WildRemesher.cpp.
double polyfem::mesh::WildRemesher< WMTKMesh >::deformed_edge_length | ( | const Tuple & | e | ) | const |
Definition at line 399 of file WildRemesher.cpp.
|
inlineoverridevirtual |
Dimension of the mesh.
Implements polyfem::mesh::Remesher.
Definition at line 152 of file WildRemesher.hpp.
References polyfem::mesh::WildRemesher< WMTKMesh >::DIM.
Referenced by polyfem::mesh::PhysicsRemesher< wmtk::TetMesh >::smooth_after(), and polyfem::mesh::WildRemesher< wmtk::TetMesh >::smooth_vertices().
|
overridevirtual |
Exports positions of the stored mesh.
Implements polyfem::mesh::Remesher.
Eigen::VectorXd polyfem::mesh::WildRemesher< WMTKMesh >::edge_adjacent_element_volumes | ( | const Tuple & | e | ) | const |
Definition at line 437 of file WildRemesher.cpp.
EdgeAttributes & polyfem::mesh::WildRemesher< WMTKMesh >::edge_attr | ( | const size_t | e_id | ) |
Get a reference to an edge's attributes.
e_id | edge id |
Referenced by polyfem::mesh::PhysicsTriRemesher::swap_edge_before().
const EdgeAttributes & polyfem::mesh::WildRemesher< WMTKMesh >::edge_attr | ( | const size_t | e_id | ) | const |
Get a const reference to an edge's attributes.
e_id | edge id |
|
overridevirtual |
Exports edges of the stored mesh.
Implements polyfem::mesh::Remesher.
Definition at line 150 of file WildRemesher.cpp.
void polyfem::mesh::WildRemesher< WMTKMesh >::element_aabb | ( | const Tuple & | t, |
polyfem::VectorNd & | el_min, | ||
polyfem::VectorNd & | el_max | ||
) | const |
Get a AABB for an element.
Definition at line 490 of file WildRemesher.cpp.
size_t polyfem::mesh::WildRemesher< WMTKMesh >::element_id | ( | const Tuple & | t | ) | const |
Get the id of an element (triangle or tetrahedra)
std::array< Tuple, VERTICES_PER_ELEMENT > polyfem::mesh::WildRemesher< WMTKMesh >::element_vertices | ( | const Tuple & | t | ) | const |
Get the vertex tuples of an element.
std::array< size_t, VERTICES_PER_ELEMENT > polyfem::mesh::WildRemesher< WMTKMesh >::element_vids | ( | const Tuple & | t | ) | const |
Get the vertex ids of an element.
Referenced by polyfem::mesh::get_quality().
double polyfem::mesh::WildRemesher< WMTKMesh >::element_volume | ( | const Tuple & | e | ) | const |
Compute the volume (area) of an tetrahedron (triangle) element.
Referenced by polyfem::mesh::compute_area_ratio_energy().
|
overridevirtual |
Exports elements of the stored mesh.
Implements polyfem::mesh::Remesher.
Definition at line 164 of file WildRemesher.cpp.
References polyfem::F.
|
overridevirtual |
Execute the remeshing.
split | Perform splitting operations |
collapse | Perform collapsing operations |
smooth | Perform smoothing operations |
swap | Perform edge swapping operations |
max_ops | Maximum number of operations to perform (default: unlimited) |
Implements polyfem::mesh::Remesher.
Definition at line 13 of file Execute.cpp.
References polyfem::logger(), polyfem::mesh::WildRemesher< WMTKMesh >::renew_neighbor_tuples(), and polyfem::utils::Timer::start().
void polyfem::mesh::WildRemesher< WMTKMesh >::extend_local_patch | ( | std::vector< Tuple > & | patch | ) | const |
Extend the local patch by including neighboring elements.
patch | local patch of elements |
Definition at line 461 of file WildRemesher.cpp.
size_t polyfem::mesh::WildRemesher< WMTKMesh >::facet_id | ( | const Tuple & | t | ) | const |
Get the id of a facet (edge for triangle, triangle for tetrahedra)
std::array< Tuple, DIM > polyfem::mesh::WildRemesher< WMTKMesh >::facet_vertices | ( | const Tuple & | t | ) | const |
Get the vertex tuples of a facet.
std::array< size_t, DIM > polyfem::mesh::WildRemesher< WMTKMesh >::facet_vids | ( | const Tuple & | t | ) | const |
Get the vertex ids of a facet.
std::array< Tuple, 2 > polyfem::mesh::WildRemesher< WMTKMesh >::get_boundary_faces_for_edge | ( | const Tuple & | e | ) | const |
std::vector< typename WMTKMesh::Tuple > polyfem::mesh::WildRemesher< WMTKMesh >::get_edges_for_elements | ( | const std::vector< Tuple > & | elements | ) | const |
Definition at line 425 of file WildRemesher.cpp.
Referenced by polyfem::mesh::PhysicsRemesher< WMTKMesh >::collapse_edges().
std::vector< Tuple > polyfem::mesh::WildRemesher< WMTKMesh >::get_elements | ( | ) | const |
Get a vector of all elements (triangles or tetrahedra)
std::vector< Tuple > polyfem::mesh::WildRemesher< WMTKMesh >::get_facets | ( | ) | const |
Get a vector of all facets (edges or triangles)
std::vector< Tuple > polyfem::mesh::WildRemesher< WMTKMesh >::get_incident_elements_for_edge | ( | const Tuple & | t | ) | const |
Get the incident elements for an edge.
std::vector< Tuple > polyfem::mesh::WildRemesher< WMTKMesh >::get_one_ring_boundary_edges_for_vertex | ( | const Tuple & | v | ) | const |
std::vector< Tuple > polyfem::mesh::WildRemesher< WMTKMesh >::get_one_ring_boundary_faces_for_vertex | ( | const Tuple & | v | ) | const |
std::vector< Tuple > polyfem::mesh::WildRemesher< WMTKMesh >::get_one_ring_elements_for_vertex | ( | const Tuple & | t | ) | const |
Get the one ring of elements around a vertex.
Referenced by polyfem::mesh::PhysicsRemesher< WMTKMesh >::collapse_edges(), and polyfem::mesh::WildRemesher< WMTKMesh >::smooth_vertices().
|
overridevirtual |
Initialize the mesh.
rest_positions | Rest positions of the mesh (|V| × 2) |
positions | Current positions of the mesh (|V| × 2) |
elements | Elements of the mesh (|T| × 3) |
projection_quantities | Quantities to be projected to the new mesh (2 rows per vertex and 1 column per quantity) |
edge_to_boundary_id | Map from edge to boundary id (of size |E|) |
body_ids | Body ids of the mesh (of size |T|) |
Reimplemented from polyfem::mesh::Remesher.
Definition at line 92 of file WildRemesher.cpp.
References polyfem::mesh::Remesher::init().
|
overrideprotectedvirtual |
Create an internal mesh representation and associate attributes.
Implements polyfem::mesh::Remesher.
|
overrideprotected |
Check if invariants are satisfied.
Definition at line 370 of file WildRemesher.cpp.
References polyfem::log_and_throw_error(), and POLYFEM_REMESHER_SCOPED_TIMER.
bool polyfem::mesh::WildRemesher< WMTKMesh >::is_body_boundary_edge | ( | const Tuple & | e | ) | const |
Is the given edge tuple on the boundary of a body?
bool polyfem::mesh::WildRemesher< WMTKMesh >::is_body_boundary_vertex | ( | const Tuple & | v | ) | const |
Is the given vertex tuple on the boundary of a body?
bool polyfem::mesh::WildRemesher< WMTKMesh >::is_boundary_edge | ( | const Tuple & | e | ) | const |
Is the given edge tuple on the boundary of the mesh?
Referenced by polyfem::mesh::TetOperationCache::collapse_edge(), polyfem::mesh::TriOperationCache::collapse_edge(), polyfem::mesh::TetOperationCache::split_edge(), polyfem::mesh::TriOperationCache::split_edge(), and polyfem::mesh::TriOperationCache::swap_edge().
bool polyfem::mesh::WildRemesher< WMTKMesh >::is_boundary_facet | ( | const Tuple & | t | ) | const |
Is the given tuple on the boundary of the mesh?
bool polyfem::mesh::WildRemesher< WMTKMesh >::is_boundary_op | ( | ) | const |
Is the currently cached operation a boundary operation?
bool polyfem::mesh::WildRemesher< WMTKMesh >::is_boundary_vertex | ( | const Tuple & | v | ) | const |
Is the given vertex tuple on the boundary of the mesh?
Referenced by polyfem::mesh::compute_valence_energy().
|
protected |
Check if a triangle's rest and deformed shapes are inverted.
|
protected |
Check if a triangle's rest shape is inverted.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
inlineoverridevirtual |
Number of projection quantities (not including the position)
Implements polyfem::mesh::Remesher.
Definition at line 178 of file WildRemesher.hpp.
References polyfem::mesh::WildRemesher< WMTKMesh >::m_n_quantities.
|
inline |
Get the opposite vertex on a face.
e | edge tuple |
Definition at line 281 of file WildRemesher.hpp.
std::array< size_t, VERTICES_PER_ELEMENT > polyfem::mesh::WildRemesher< WMTKMesh >::orient_preserve_element_reorder | ( | const std::array< size_t, VERTICES_PER_ELEMENT > & | conn, |
const size_t | v0 | ||
) | const |
Reorder the element vertices so that the first vertex is v0.
conn | The element vertices in oriented order |
v0 | The vertex to be the first vertex |
|
overridevirtual |
Exports displacements of the stored mesh.
Implements polyfem::mesh::Remesher.
|
overridevirtual |
Exports projected quantities of the stored mesh.
Implements polyfem::mesh::Remesher.
Definition at line 181 of file WildRemesher.cpp.
|
inlineprotectedvirtual |
Reimplemented in polyfem::mesh::PhysicsRemesher< WMTKMesh >, polyfem::mesh::PhysicsRemesher< wmtk::TetMesh >, and polyfem::mesh::PhysicsRemesher< wmtk::TriMesh >.
Definition at line 293 of file WildRemesher.hpp.
Referenced by polyfem::mesh::WildRemesher< WMTKMesh >::execute().
WildRemesher< WMTKMesh >::VectorNd polyfem::mesh::WildRemesher< WMTKMesh >::rest_edge_center | ( | const Tuple & | e | ) | const |
Compute the center of the edge.
Definition at line 408 of file WildRemesher.cpp.
double polyfem::mesh::WildRemesher< WMTKMesh >::rest_edge_length | ( | const Tuple & | e | ) | const |
Compute the length of an edge.
Definition at line 391 of file WildRemesher.cpp.
Referenced by polyfem::mesh::PhysicsRemesher< WMTKMesh >::collapse_edges(), and polyfem::mesh::SizingFieldRemesher< WMTKMesh >::collapse_edges().
|
overridevirtual |
Exports rest positions of the stored mesh.
Implements polyfem::mesh::Remesher.
|
overridevirtual |
Set the body IDs of all elements.
Implements polyfem::mesh::Remesher.
Definition at line 330 of file WildRemesher.cpp.
|
overridevirtual |
Set the boundary IDs of all edges.
Implements polyfem::mesh::Remesher.
Definition at line 341 of file WildRemesher.cpp.
|
overridevirtual |
Set if a vertex is fixed.
Implements polyfem::mesh::Remesher.
Definition at line 321 of file WildRemesher.cpp.
|
overridevirtual |
Set deformed positions of the stored mesh.
Implements polyfem::mesh::Remesher.
|
overridevirtual |
Set projected quantities of the stored mesh.
Implements polyfem::mesh::Remesher.
Definition at line 306 of file WildRemesher.cpp.
|
overridevirtual |
Set rest positions of the stored mesh.
Implements polyfem::mesh::Remesher.
|
overrideprotectedvirtual |
Reimplemented in polyfem::mesh::PhysicsRemesher< WMTKMesh >, polyfem::mesh::PhysicsRemesher< wmtk::TetMesh >, and polyfem::mesh::PhysicsRemesher< wmtk::TriMesh >.
Definition at line 193 of file Smooth.cpp.
References polyfem::mesh::get_quality(), and polyfem::mesh::project_local_quantities().
|
overrideprotectedvirtual |
Reimplemented in polyfem::mesh::PhysicsRemesher< WMTKMesh >, polyfem::mesh::PhysicsRemesher< wmtk::TetMesh >, and polyfem::mesh::PhysicsRemesher< wmtk::TriMesh >.
Definition at line 163 of file Smooth.cpp.
|
virtual |
Definition at line 297 of file Smooth.cpp.
References polyfem::mesh::WildRemesher< WMTKMesh >::get_one_ring_elements_for_vertex(), and polyfem::mesh::get_quality().
|
overrideprotectedvirtual |
Reimplemented in polyfem::mesh::PhysicsRemesher< WMTKMesh >, polyfem::mesh::PhysicsRemesher< wmtk::TetMesh >, and polyfem::mesh::PhysicsRemesher< wmtk::TriMesh >.
Definition at line 74 of file Split.cpp.
References polyfem::mesh::WildRemesher< WMTKMesh >::VertexAttributes::fixed, polyfem::mesh::WildRemesher< WMTKMesh >::VertexAttributes::partition_id, polyfem::mesh::WildRemesher< WMTKMesh >::VertexAttributes::position, polyfem::mesh::WildRemesher< WMTKMesh >::VertexAttributes::projection_quantities, and polyfem::mesh::WildRemesher< WMTKMesh >::VertexAttributes::rest_position.
|
overrideprotectedvirtual |
|
pure virtual |
|
overrideprotectedvirtual |
Reimplemented in polyfem::mesh::PhysicsTriRemesher.
|
overrideprotectedvirtual |
Reimplemented in polyfem::mesh::PhysicsTriRemesher.
Definition at line 17 of file Swap.cpp.
References polyfem::utils::triangle_area_2D().
Referenced by polyfem::mesh::PhysicsTriRemesher::swap_edge_before().
|
inlinevirtual |
Reimplemented in polyfem::mesh::PhysicsTriRemesher.
Definition at line 121 of file WildRemesher.hpp.
References polyfem::log_and_throw_error().
Tuple polyfem::mesh::WildRemesher< WMTKMesh >::tuple_from_element | ( | size_t | elem_id | ) | const |
Get a tuple of an element.
Tuple polyfem::mesh::WildRemesher< WMTKMesh >::tuple_from_facet | ( | size_t | elem_id, |
int | local_facet_id | ||
) | const |
Get a tuple of an element with a local facet.
void polyfem::mesh::WildRemesher< WMTKMesh >::write_edge_ranks_mesh | ( | const EdgeMap< typename EdgeAttributes::EnergyRank > & | elastic_ranks, |
const EdgeMap< typename EdgeAttributes::EnergyRank > & | contact_ranks | ||
) | const |
Definition at line 503 of file WildRemesher.cpp.
wmtk::AttributeCollection<BoundaryAttributes> polyfem::mesh::WildRemesher< WMTKMesh >::boundary_attrs |
Definition at line 409 of file WildRemesher.hpp.
|
staticconstexpr |
Definition at line 34 of file WildRemesher.hpp.
Referenced by polyfem::mesh::WildRemesher< WMTKMesh >::dim().
|
private |
Definition at line 424 of file WildRemesher.hpp.
|
staticconstexpr |
Definition at line 48 of file WildRemesher.hpp.
wmtk::AttributeCollection<ElementAttributes> polyfem::mesh::WildRemesher< WMTKMesh >::element_attrs |
Definition at line 410 of file WildRemesher.hpp.
Referenced by polyfem::mesh::TetOperationCache::collapse_edge(), polyfem::mesh::TriOperationCache::collapse_edge(), polyfem::mesh::TetOperationCache::split_edge(), polyfem::mesh::TriOperationCache::split_edge(), and polyfem::mesh::TriOperationCache::swap_edge().
|
staticconstexpr |
Current execuation policy (sequencial or parallel)
Definition at line 67 of file WildRemesher.hpp.
|
protected |
Definition at line 413 of file WildRemesher.hpp.
|
staticconstexpr |
Definition at line 55 of file WildRemesher.hpp.
|
protected |
Definition at line 414 of file WildRemesher.hpp.
Referenced by polyfem::mesh::WildRemesher< WMTKMesh >::n_quantities().
|
protected |
Definition at line 421 of file WildRemesher.hpp.
Referenced by polyfem::mesh::PhysicsRemesher< WMTKMesh >::local_energy_before(), and polyfem::mesh::PhysicsTriRemesher::swap_edge_before().
|
protected |
Definition at line 415 of file WildRemesher.hpp.
wmtk::AttributeCollection<VertexAttributes> polyfem::mesh::WildRemesher< WMTKMesh >::vertex_attrs |
Definition at line 408 of file WildRemesher.hpp.
Referenced by polyfem::mesh::TetOperationCache::collapse_edge(), polyfem::mesh::TriOperationCache::collapse_edge(), polyfem::mesh::get_quality(), polyfem::mesh::TetOperationCache::split_edge(), polyfem::mesh::TriOperationCache::split_edge(), and polyfem::mesh::TriOperationCache::swap_edge().
|
staticconstexpr |
Definition at line 41 of file WildRemesher.hpp.