libMesh
|
Utility functions for subdivision surface operations on a Mesh
.
More...
Functions | |
void | 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. More... | |
void | all_subdivision (MeshBase &mesh) |
Turns a triangulated mesh into a subdivision mesh. More... | |
void | prepare_subdivision_mesh (MeshBase &mesh, bool ghosted=false) |
Prepares the mesh for use with subdivision elements. More... | |
void | add_boundary_ghosts (MeshBase &mesh) |
Adds a new layer of "ghost" elements along the domain boundaries. More... | |
void | tag_boundary_ghosts (MeshBase &mesh) |
Flags the outermost element layer along the domain boundaries as "ghost" elements. More... | |
Variables | |
static const unsigned int | next [3] = {1,2,0} |
A lookup table for the increment modulo 3 operation, for iterating through the three nodes per element in positive direction. More... | |
static const unsigned int | prev [3] = {2,0,1} |
A lookup table for the decrement modulo 3 operation, for iterating through the three nodes per element in negative direction. More... | |
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 229 of file mesh_subdivision_support.C.
References libMesh::MeshBase::add_elem(), libMesh::BoundaryInfo::add_node(), libMesh::MeshBase::add_point(), libMesh::Elem::build(), libMesh::MeshBase::elem_ptr(), libMesh::MeshBase::get_boundary_info(), libMesh::DofObject::id(), libMesh::libmesh_assert(), libMesh::Tri3Subdivision::local_node_number(), mesh, libMesh::MeshTools::n_elem(), libMesh::MeshBase::n_elem(), libMesh::Elem::neighbor_ptr(), next, libMesh::Elem::node_ptr(), libMesh::TensorTools::norm(), libMesh::Elem::point(), prev, libMesh::Real, libMesh::Elem::set_neighbor(), 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::Elem::build_with_id(), libMesh::MeshBase::get_boundary_info(), libMesh::index_range(), libMesh::MeshBase::insert_elem(), mesh, libMesh::BoundaryInfo::n_boundary_ids(), libMesh::MeshBase::prepare_for_use(), libMesh::BoundaryInfo::remove(), libMesh::TRI3, and libMesh::TRI3SUBDIVISION.
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::libmesh_assert(), 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 156 of file mesh_subdivision_support.C.
References add_boundary_ghosts(), all_subdivision(), libMesh::MeshTools::build_nodes_to_elem_map(), libMesh::MeshTools::find_nodal_neighbors(), libMesh::Tri3Subdivision::is_ghost(), libMesh::libmesh_assert(), mesh, libMesh::MeshBase::prepare_for_use(), libMesh::Tri3Subdivision::prepare_subdivision_properties(), and tag_boundary_ghosts().
Referenced by main().
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 200 of file mesh_subdivision_support.C.
References 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 102 of file mesh_subdivision_support.h.
Referenced by add_boundary_ghosts(), assemble_shell(), libMesh::RBConstructionBase< CondensedEigenSystem >::broadcast_parameters(), find_one_ring(), libMesh::Xdr::is_eof(), libMesh::TriangulatorInterface::MeshedHole::MeshedHole(), libMesh::ConstCouplingAccessor::operator bool(), libMesh::CouplingAccessor::operator=(), libMesh::Tri3Subdivision::prepare_subdivision_properties(), libMesh::DistributedMesh::renumber_dof_objects(), tag_boundary_ghosts(), and SystemsTest::testProjectMatrix1D().
|
static |
A lookup table for the decrement modulo 3 operation, for iterating through the three nodes per element in negative direction.
Definition at line 108 of file mesh_subdivision_support.h.
Referenced by add_boundary_ghosts(), assemble_shell(), libMesh::ConstCouplingRow::ConstCouplingRow(), libMesh::SolutionHistory::find_stored_entry(), libMesh::Tri3Subdivision::prepare_subdivision_properties(), libMesh::MemorySolutionHistory::retrieve(), libMesh::FileSolutionHistory::retrieve(), tag_boundary_ghosts(), and SystemsTest::testProjectMatrix1D().