484
484
std::size_t Mesh::hash() const
486
486
// Compute hash based on the Cantor pairing function
487
size_t k1 = _topology.hash();
488
size_t k2 = _geometry.hash();
489
return (k1 + k2)*(k1 + k2 + 1) / 2 + k2;
487
const std::size_t k1 = _topology.hash();
488
const std::size_t k2 = _geometry.hash();
489
return (k1 + k2)*(k1 + k2 + 1)/2 + k2;
491
491
//-----------------------------------------------------------------------------
492
492
std::string Mesh::str(bool verbose) const
519
519
//-----------------------------------------------------------------------------
520
uint Mesh::num_owned_vertices() const
522
Timer t("Calculate num owned vertices");
524
const std::map<uint, std::set<uint> >& shared_vertices
525
= topology().shared_entities(0);
527
const uint process_number = MPI::process_number();
529
uint num_local_vertices = num_vertices();
531
for(std::map<uint, std::set<uint> >::const_iterator
532
shared_v_it = shared_vertices.begin();
533
shared_v_it != shared_vertices.end();
536
const std::set<uint>& procs = shared_v_it->second;
537
// Determine whether this vertex is also on a lower numbered process
538
if(*(procs.begin()) < process_number)
539
num_local_vertices--;
542
return num_local_vertices;
545
//-----------------------------------------------------------------------------
546
std::vector<uint> Mesh::owned_vertices() const
548
Timer t("Calculate owned vertices");
550
const std::map<uint, std::set<uint> >& shared_vertices
551
= topology().shared_entities(0);
553
const uint process_number = MPI::process_number();
555
std::vector<uint>result;
556
result.reserve(num_vertices());
558
for(VertexIterator v(*this); !v.end(); ++v)
560
uint global_index = v->global_index();
561
if(shared_vertices.count(global_index) != 0)
563
const std::set<uint>& procs =
564
shared_vertices.find(global_index)->second;
566
// Determine whether the first element of
567
// this set refers to a higher numbered process.
568
// If so, the vertex is owned here.
569
if(*(procs.begin()) > process_number)
570
result.push_back(v->index());
572
else // not a shared vertex
573
result.push_back(v->index());