Support functions for subdivision surface elements. More...
Functions | |
| void | find_one_ring (const Tri3Subdivision *elem, std::vector< const Node *> &nodes) |
| void | all_subdivision (MeshBase &mesh) |
| void | prepare_subdivision_mesh (MeshBase &mesh, bool ghosted=false) |
| void | add_boundary_ghosts (MeshBase &mesh) |
| void | tag_boundary_ghosts (MeshBase &mesh) |
Variables | |
| static const unsigned int | next [3] = {1,2,0} |
| static const unsigned int | prev [3] = {2,0,1} |
Support functions for subdivision surface elements.
Utility functions for subdivision surface operations on a Mesh.
| void libMesh::MeshTools::Subdivision::add_boundary_ghosts | ( | MeshBase & | mesh | ) |
Adds a new layer of "ghost" elements along the domain boundaries. This function normally needn't be called by the user, because it is invoked by prepare_subdivision_mesh.
Definition at line 233 of file mesh_subdivision_support.C.
References libMesh::MeshBase::add_elem(), libMesh::BoundaryInfo::add_node(), libMesh::MeshBase::add_point(), libMesh::MeshBase::elem_ptr(), libMesh::MeshBase::get_boundary_info(), libMesh::DofObject::id(), libMesh::Tri3Subdivision::local_node_number(), mesh, libMesh::MeshBase::n_elem(), libMesh::MeshTools::n_elem(), libMesh::Elem::neighbor_ptr(), next, libMesh::Elem::node_ptr(), libMesh::Elem::point(), prev, libMesh::Real, libMesh::Tri3Subdivision::set_ghost(), libMesh::Elem::set_neighbor(), libMesh::Elem::set_node(), libMesh::Elem::side_index_range(), libMesh::TRI3SUBDIVISION, and libMesh::Elem::type().
Referenced by prepare_subdivision_mesh().
| void libMesh::MeshTools::Subdivision::all_subdivision | ( | MeshBase & | mesh | ) |
Turns a triangulated mesh into a subdivision mesh. This function normally needn't be called by the user, because it is invoked by prepare_subdivision_mesh.
Definition at line 90 of file mesh_subdivision_support.C.
References libMesh::BoundaryInfo::add_side(), libMesh::BoundaryInfo::boundary_ids(), libMesh::MeshBase::element_ptr_range(), libMesh::MeshBase::get_boundary_info(), libMesh::MeshBase::insert_elem(), mesh, libMesh::BoundaryInfo::n_boundary_ids(), libMesh::MeshBase::n_elem(), libMesh::MeshBase::prepare_for_use(), libMesh::BoundaryInfo::remove(), libMesh::DofObject::set_id(), side, and libMesh::TRI3.
Referenced by prepare_subdivision_mesh().
| void libMesh::MeshTools::Subdivision::find_one_ring | ( | const Tri3Subdivision * | elem, |
| std::vector< const Node *> & | nodes | ||
| ) |
Determines the 1-ring of element elem, and writes it to the nodes vector. This is necessary because subdivision elements have a larger local support than conventionally interpolated elements. The 1-ring may, for instance, look like this:
* N+4 - N+1 - N+2 * / \ / \ / \ * / \ / \ / \ * N+5 -- N --- 1 -- N+3 * \ / \ e / \ / * \ / \ / \ / * N-1--- 0 --- 2 * \ /|\ / * \ / | \ / * 5--4--3 *
Definition at line 31 of file mesh_subdivision_support.C.
References libMesh::Tri3Subdivision::get_ordered_node(), libMesh::Tri3Subdivision::get_ordered_valence(), libMesh::Tri3Subdivision::is_subdivision_updated(), libMesh::Tri3Subdivision::local_node_number(), libMesh::Elem::neighbor_ptr(), next, and libMesh::Elem::node_ptr().
Referenced by libMesh::FEMap::compute_map(), libMesh::DofMap::dof_indices(), and libMesh::DofMap::old_dof_indices().
| void libMesh::MeshTools::Subdivision::prepare_subdivision_mesh | ( | MeshBase & | mesh, |
| bool | ghosted = false |
||
| ) |
Prepares the mesh for use with subdivision elements. The ghosted flag determines how boundaries are treated. If false, a new layer of "ghost" elements is appended along the domain boundaries. If true, the outermost element layer is taken as ghosts, i.e. no new elements are added.
Definition at line 160 of file mesh_subdivision_support.C.
References add_boundary_ghosts(), all_subdivision(), libMesh::MeshTools::build_nodes_to_elem_map(), libMesh::MeshBase::element_ptr_range(), libMesh::MeshTools::find_nodal_neighbors(), libMesh::Tri3Subdivision::is_ghost(), mesh, libMesh::MeshBase::node_ptr_range(), libMesh::MeshBase::prepare_for_use(), libMesh::Tri3Subdivision::prepare_subdivision_properties(), and tag_boundary_ghosts().
| void libMesh::MeshTools::Subdivision::tag_boundary_ghosts | ( | MeshBase & | mesh | ) |
Flags the outermost element layer along the domain boundaries as "ghost" elements. This function normally needn't be called by the user, because it is invoked by prepare_subdivision_mesh.
Definition at line 204 of file mesh_subdivision_support.C.
References libMesh::MeshBase::element_ptr_range(), mesh, next, prev, libMesh::Tri3Subdivision::set_ghost(), and libMesh::TRI3SUBDIVISION.
Referenced by prepare_subdivision_mesh().
|
static |
A lookup table for the increment modulo 3 operation, for iterating through the three nodes per element in positive direction.
Definition at line 103 of file mesh_subdivision_support.h.
Referenced by add_boundary_ghosts(), find_one_ring(), libMesh::Xdr::is_eof(), libMesh::ConstCouplingAccessor::operator bool(), libMesh::CouplingAccessor::operator=(), libMesh::Tri3Subdivision::prepare_subdivision_properties(), libMesh::DistributedMesh::renumber_dof_objects(), tag_boundary_ghosts(), and libMesh::Parallel::waitany().
|
static |
A lookup table for the decrement modulo 3 operation, for iterating through the three nodes per element in negative direction.
Definition at line 109 of file mesh_subdivision_support.h.
Referenced by add_boundary_ghosts(), libMesh::ConstCouplingRow::ConstCouplingRow(), libMesh::Utility::is_sorted(), libMesh::Tri3Subdivision::prepare_subdivision_properties(), and tag_boundary_ghosts().