Example #1
0
stk::mesh::Bucket *Partition::get_bucket_for_adds()
{
  if (no_buckets())
  {
    std::vector<unsigned> partition_key = get_legacy_partition_id();
    partition_key[ partition_key[0] ] = 0;
    Bucket *bucket = m_repository->allocate_bucket(m_rank, partition_key,
                                                   m_repository->default_bucket_capacity);
    bucket->m_partition = this;
    bucket->set_first_bucket_in_partition(bucket);
    m_buckets.push_back(bucket);

    return bucket;
  }

  Bucket *bucket = *(end() - 1);  // Last bucket of the partition.

  if (bucket->size() == bucket->capacity())
  {
    std::vector<unsigned> partition_key = get_legacy_partition_id();
    partition_key[ partition_key[0] ] = m_buckets.size();
    bucket = m_repository->allocate_bucket(m_rank, partition_key,
                                           m_repository->default_bucket_capacity);
    bucket->m_partition = this;
    bucket->set_first_bucket_in_partition(m_buckets[0]);
    m_buckets[0]->set_last_bucket_in_partition(bucket);
    m_buckets.push_back(bucket);
  }

  return bucket;
}