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().