本文整理汇总了C++中MeshBase::elements_end方法的典型用法代码示例。如果您正苦于以下问题:C++ MeshBase::elements_end方法的具体用法?C++ MeshBase::elements_end怎么用?C++ MeshBase::elements_end使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MeshBase
的用法示例。
在下文中一共展示了MeshBase::elements_end方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void MeshTools::Subdivision::tag_boundary_ghosts(MeshBase & mesh)
{
MeshBase::element_iterator el = mesh.elements_begin();
const MeshBase::element_iterator end_el = mesh.elements_end();
for (; el != end_el; ++el)
{
Elem * elem = *el;
libmesh_assert_equal_to(elem->type(), TRI3SUBDIVISION);
Tri3Subdivision * sd_elem = static_cast<Tri3Subdivision *>(elem);
for (unsigned int i = 0; i < elem->n_sides(); ++i)
{
if (elem->neighbor(i) == libmesh_nullptr)
{
sd_elem->set_ghost(true);
// set all other neighbors to ghosts as well
if (elem->neighbor(next[i]))
{
Tri3Subdivision * nb = static_cast<Tri3Subdivision *>(elem->neighbor(next[i]));
nb->set_ghost(true);
}
if (elem->neighbor(prev[i]))
{
Tri3Subdivision * nb = static_cast<Tri3Subdivision *>(elem->neighbor(prev[i]));
nb->set_ghost(true);
}
}
}
}
}
示例2: findElementsIntersectedByPlane
void findElementsIntersectedByPlane(const Plane & plane, const MeshBase & mesh, std::vector<const Elem *> & intersected_elems)
{
// Loop over all elements to find elements intersected by the plane
MeshBase::const_element_iterator el = mesh.elements_begin();
const MeshBase::const_element_iterator end_el = mesh.elements_end();
for (; el != end_el; ++el)
{
const Elem * elem = *el;
bool intersected = false;
// Check whether the first node of this element is below or above the plane
const Node node0 = *elem->get_node(0);
bool node0_above_plane = plane.above_surface(node0);
// Loop over the rest of the nodes and check if any node is on the other side of the plane
for (unsigned int i = 1; i < elem->n_nodes(); ++i)
{
const Node node = *elem->get_node(i);
bool node_above_plane = plane.above_surface(node);
if (node0_above_plane != node_above_plane)
intersected = true;
}
if (intersected)
intersected_elems.push_back(elem);
}
}
示例3: fill
void TopologyMap::fill(const MeshBase& mesh)
{
// Populate the nodes map
MeshBase::const_element_iterator
it = mesh.elements_begin(),
end = mesh.elements_end();
for (; it != end; ++it)
{
const Elem* elem = *it;
// We only need to add nodes which might be added during mesh
// refinement; this means they need to be child nodes.
if (!elem->has_children())
continue;
for (unsigned int c = 0; c != elem->n_children(); ++c)
{
if (elem->child(c)->is_remote())
continue;
for (unsigned int n = 0; n != elem->n_nodes_in_child(c); ++n)
{
const std::vector<std::pair<dof_id_type, dof_id_type> >
bracketing_nodes = elem->bracketing_nodes(c,n);
this->add_node(*elem->child(c)->get_node(n),
bracketing_nodes);
}
}
}
}
示例4: write_interior_elems
void UCDIO::write_interior_elems(std::ostream& out_stream, const MeshBase& mesh)
{
std::string type[] =
{ "edge", "edge", "edge",
"tri", "tri",
"quad", "quad", "quad",
"tet", "tet",
"hex", "hex", "hex",
"prism", "prism", "prism",
"pyramid" };
MeshBase::const_element_iterator it = mesh.elements_begin();
const MeshBase::const_element_iterator end = mesh.elements_end();
unsigned int e=1; // 1-based element number for UCD
// Write element information
for (; it != end; ++it)
{
libmesh_assert (out_stream.good());
// PB: I believe these are the only supported ElemTypes.
const ElemType etype = (*it)->type();
if( (etype != TRI3) && (etype != QUAD4) &&
(etype != TET4) && (etype != HEX8) &&
(etype != PRISM6) && (etype != PYRAMID5) )
libmesh_error_msg("Error: Unsupported ElemType for UCDIO.");
out_stream << e++ << " 0 " << type[etype] << "\t";
// (*it)->write_ucd_connectivity(out_stream);
(*it)->write_connectivity(out_stream, UCD);
}
return;
}
示例5: _do_partition
void CentroidPartitioner::_do_partition (MeshBase & mesh,
const unsigned int n)
{
this->partition_range(mesh,
mesh.elements_begin(),
mesh.elements_end(),
n);
}
示例6: single_partition
void Partitioner::single_partition (MeshBase & mesh)
{
LOG_SCOPE("single_partition()","Partitioner");
// Loop over all the elements and assign them to processor 0.
MeshBase::element_iterator elem_it = mesh.elements_begin();
const MeshBase::element_iterator elem_end = mesh.elements_end();
for ( ; elem_it != elem_end; ++elem_it)
(*elem_it)->processor_id() = 0;
// For a single partition, all the nodes are on processor 0
MeshBase::node_iterator node_it = mesh.nodes_begin();
const MeshBase::node_iterator node_end = mesh.nodes_end();
for ( ; node_it != node_end; ++node_it)
(*node_it)->processor_id() = 0;
}
示例7: compute_centroids
void CentroidPartitioner::compute_centroids (MeshBase& mesh)
{
_elem_centroids.clear();
_elem_centroids.reserve(mesh.n_elem());
// elem_iterator it(mesh.elements_begin());
// const elem_iterator it_end(mesh.elements_end());
MeshBase::element_iterator it = mesh.elements_begin();
const MeshBase::element_iterator it_end = mesh.elements_end();
for (; it != it_end; ++it)
{
Elem* elem = *it;
_elem_centroids.push_back(std::make_pair(elem->centroid(), elem));
}
}
示例8: single_partition
void Partitioner::single_partition (MeshBase & mesh)
{
this->single_partition_range(mesh.elements_begin(),
mesh.elements_end());
}