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; }
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; }