Пример #1
0
std::vector<std::vector<double> > GeomDecomp::compute_entity_centroid(stk::mesh::BulkData& bulk_data, const mesh::Entity & entity,
                                                                   const VectorField & nodal_coor_ref,
                                                                   std::vector<double>   & centroid)
{
  std::vector<std::vector<double> > coordinates;
  stk::mesh::EntityRank entity_rank = bulk_data.entity_rank(entity);
  if (entity_rank == stk::topology::ELEMENT_RANK + 1)
    {
      for (stk::mesh::EntityRank irank=stk::topology::NODE_RANK; irank <= stk::topology::ELEMENT_RANK; ++irank)
        {
          const percept::MyPairIterRelation nr(bulk_data, entity , irank);
          for (unsigned ii=0; ii < nr.size(); ++ii)
            {
              stk::mesh::Entity elem = nr[ii].entity();
              std::vector<std::vector<double> > coordinates_1;
              entity_coordinates(bulk_data, elem, nodal_coor_ref, coordinates_1);
              coordinates.insert(coordinates.end(), coordinates_1.begin(), coordinates_1.end());
            }
        }
    }
  else
    {
      entity_coordinates(bulk_data, entity, nodal_coor_ref, coordinates);
    }

  const int num_nodes = coordinates.size();
  const int ndim      = coordinates.front().size();

  centroid.resize(ndim);
  for (int i=0; i<ndim; ++i) { centroid[i] = 0; }
  for ( int j = 0; j < num_nodes; ++j ) {
    for ( int i = 0; i < ndim; ++i ) { centroid[i] += coordinates[j][i]; }
  }
  if (1 != num_nodes) {
    for (int i=0; i<ndim; ++i) { centroid[i] /= num_nodes; }
  }
  return coordinates;
}
Пример #2
0
std::vector<std::vector<double> > GeomDecomp::compute_entity_centroid(const mesh::Entity & entity,
                                                                   const VectorField & nodal_coor_ref,
                                                                   std::vector<double>   & centroid)
{
  std::vector<std::vector<double> > coordinates;
  entity_coordinates(entity, nodal_coor_ref, coordinates);

  const int ndim      = coordinates.front().size();
  const int num_nodes = coordinates.size();

  centroid.resize(ndim);
  for (int i=0; i<ndim; ++i) { centroid[i] = 0; }
  for ( int j = 0; j < num_nodes; ++j ) {
    for ( int i = 0; i < ndim; ++i ) { centroid[i] += coordinates[j][i]; }
  }
  if (1 != num_nodes) {
    for (int i=0; i<ndim; ++i) { centroid[i] /= num_nodes; }
  }
  return coordinates;
}