stk::mesh::EntityVector get_entity_vector_difference(const stk::mesh::EntityVector & A, const stk::mesh::EntityVector &B) { stk::mesh::EntityVector difference(A.size() + B.size()); stk::mesh::EntityVector::iterator it; it = std::set_difference(A.begin(), A.end(), B.begin(), B.end(), difference.begin()); difference.resize(it - difference.begin()); return difference; }
void find_ghosted_nodes_that_need_to_be_shared(const stk::mesh::BulkData & bulk, stk::mesh::EntityVector& ghosted_nodes_that_are_now_shared) { stk::mesh::EntityRank endRank = static_cast<stk::mesh::EntityRank>(bulk.mesh_meta_data().entity_rank_count()); if (endRank >= stk::topology::END_RANK) { endRank = stk::topology::END_RANK; } for (stk::mesh::EntityRank rank=stk::topology::EDGE_RANK; rank<endRank; ++rank) { const stk::mesh::BucketVector& entity_buckets = bulk.buckets(rank); for(size_t i=0; i<entity_buckets.size(); ++i) { const stk::mesh::Bucket& bucket = *entity_buckets[i]; if ( bucket.owned() ) { for(size_t n=0; n<bucket.size(); ++n) { const stk::mesh::Entity * nodes = bulk.begin_nodes(bucket[n]); unsigned num_nodes = bulk.num_nodes(bucket[n]); for (unsigned j=0;j<num_nodes;++j) { if (bulk.in_receive_ghost(bulk.entity_key(nodes[j]))) { ghosted_nodes_that_are_now_shared.push_back(nodes[j]); } } } } } } std::sort(ghosted_nodes_that_are_now_shared.begin(), ghosted_nodes_that_are_now_shared.end()); stk::mesh::EntityVector::iterator iter = std::unique(ghosted_nodes_that_are_now_shared.begin(), ghosted_nodes_that_are_now_shared.end()); ghosted_nodes_that_are_now_shared.erase(iter, ghosted_nodes_that_are_now_shared.end()); }