本文整理汇总了C++中Files::GetNeighbour方法的典型用法代码示例。如果您正苦于以下问题:C++ Files::GetNeighbour方法的具体用法?C++ Files::GetNeighbour怎么用?C++ Files::GetNeighbour使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Files
的用法示例。
在下文中一共展示了Files::GetNeighbour方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: index
ribi::foam::Mesh::Mesh(
const Files& files,
const std::vector<boost::shared_ptr<ribi::Coordinat3D>>& points
)
: m_boundaries{},
m_cells{CreateEmptyCells(files)},
m_faces{CreateFacesWithPoints(files,points)},
m_points(points)
{
#ifndef NDEBUG
Test();
#endif
//Add Cell owner to Faces
{
assert(!m_cells.empty());
const FaceIndex n_faces = files.GetFaces()->GetMaxFaceIndex();
for (FaceIndex i = FaceIndex(0); i!=n_faces; ++i)
{
const CellIndex owner_cell_index { files.GetOwner()->GetItem(i).GetCellIndex() };
#ifndef NDEBUG
if (owner_cell_index.Get() >= static_cast<int>(m_cells.size()))
{
TRACE("ERROR");
TRACE(owner_cell_index);
TRACE(m_cells.size());
}
#endif
assert(owner_cell_index.Get() >= 0);
assert(owner_cell_index.Get() < static_cast<int>(m_cells.size()));
assert(m_cells[ owner_cell_index.Get() ]);
const boost::shared_ptr<Cell> owner { m_cells[ owner_cell_index.Get() ] };
assert(owner);
assert(!m_faces[i.Get()]->GetOwner() );
m_faces[i.Get()]->AssignOwner(owner);
assert( m_faces[i.Get()]->GetOwner() );
}
}
#ifndef NDEBUG
for (const boost::shared_ptr<Face> face: m_faces) { assert(face); assert(face->GetOwner()); }
#endif
//Add owned Faces to Cells
{
std::map<boost::shared_ptr<Cell>,std::vector<boost::shared_ptr<Face>>> m;
for (const boost::shared_ptr<Face> face: m_faces)
{
assert(face);
const boost::shared_ptr<Cell> owner { face->GetOwner() };
assert(owner);
//if (!owner) continue;
if (m.find(owner) == m.end()) { m.insert(std::make_pair(owner, std::vector<boost::shared_ptr<Face>>() ) ); }
assert(m.find(owner) != m.end());
(*m.find(owner)).second.push_back(face);
}
for (auto p: m)
{
p.first->AssignOwnedFaces(p.second);
}
}
//Add neighbours to Faces
{
const int n_faces = static_cast<int>(m_faces.size());
for (int i=0; i!=n_faces; ++i)
{
const FaceIndex index(i);
assert(files.GetNeighbour());
//Not all Faces have a neighbour
if (!files.GetNeighbour()->CanGetItem(index)) continue;
assert(files.GetNeighbour()->CanGetItem(index));
const CellIndex neighbour_index {
files.GetNeighbour()->GetItem(index).GetCellIndex()
};
assert(i >= 0);
assert(i < static_cast<int>(m_faces.size()));
assert(neighbour_index.Get() < static_cast<int>(m_cells.size()));
assert(!m_faces[i]->GetNeighbour());
m_faces[i]->AssignNeighbour( m_cells[ neighbour_index.Get() ] );
assert(m_faces[i]->GetNeighbour());
}
}
//Assign boundaries
m_boundaries = CreateBoundaries(files,m_faces);
//Check
#ifndef NDEBUG
for (boost::shared_ptr<Cell> cell: m_cells)
{
assert(cell);
//assert( (cell->GetNeighbour() || !cell->GetNeighbour())
// && "Not all cells have a neighbour, for example in a 1x1x1 mesh");
}
if (GetNumberOfBoundaries() != files.GetBoundary()->GetMaxBoundaryIndex().Get())
{
TRACE("ERROR");
TRACE(GetNumberOfBoundaries());
TRACE(files.GetBoundary()->GetMaxBoundaryIndex());
}
#endif
//.........这里部分代码省略.........