本文整理汇总了C++中stk::mesh::BulkData::entity_rank方法的典型用法代码示例。如果您正苦于以下问题:C++ BulkData::entity_rank方法的具体用法?C++ BulkData::entity_rank怎么用?C++ BulkData::entity_rank使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类stk::mesh::BulkData
的用法示例。
在下文中一共展示了BulkData::entity_rank方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: runtime_error
std::vector< mesh::Entity > GeomDecomp::entity_coordinates(stk::mesh::BulkData& bulk_data, const mesh::Entity & entity,
const VectorField & nodal_coor,
std::vector<std::vector<double> > & coordinates)
{
coordinates.clear();
std::vector< mesh::Entity > mesh_nodes;
const mesh::EntityRank enttype = bulk_data.entity_rank(entity);
if ( enttype == NODE_RANK )
{
throw std::runtime_error("GeomDecomp::entity_coordinates Error: Can not be called for nodal entities.");
} else {
// Loop over node relations in mesh entities
const percept::MyPairIterRelation nr (bulk_data, entity , NODE_RANK);
for (unsigned inr=0; inr < nr.size(); ++inr)
{
const percept::MyPairIterRelation::MyRelation &rel = nr[inr];
//if (rel.entity_rank() == NODE_RANK) { // %fixme: need to check for USES relation
if (bulk_data.entity_rank(rel.entity()) == NODE_RANK) { // %fixme: need to check for USES relation
const mesh::Entity nent = rel.entity();
//const unsigned ndim(nodal_coor.max_size(NODE_RANK)/sizeof(double)); // TODO - is there a better way to get this info?
const unsigned ndim(nodal_coor.max_size(NODE_RANK)); // TODO - is there a better way to get this info?
double * coor = mesh::field_data(nodal_coor, nent);
if (!coor) {
throw std::runtime_error("GeomDecomp::entity_coordinates Error: The coordinate field does not exist.");
}
std::vector<double> temp(ndim);
for ( unsigned i = 0; i < ndim; ++i ) { temp[i] = coor[i]; }
coordinates.push_back(temp);
mesh_nodes.push_back(nent);
}
}
}
return mesh_nodes;
}
示例2: nr
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;
}
示例3: coords
Intrepid::FieldContainer<double> STKMeshHelpers::extractEntityNodeCoordinates(
const Teuchos::Array<stk::mesh::Entity>& stk_entities,
const stk::mesh::BulkData& bulk_data,
const int space_dim )
{
// Cast the field.
const stk::mesh::FieldBase* coord_field_base=
bulk_data.mesh_meta_data().coordinate_field();
const stk::mesh::Field<double,FieldType>* coord_field =
dynamic_cast<const stk::mesh::Field<double,FieldType>* >(
coord_field_base);
// Allocate the coordinate array.
int num_cells = stk_entities.size();
int num_nodes = 0;
stk::mesh::EntityRank stk_rank = stk::topology::INVALID_RANK;
if ( num_cells > 0 )
{
stk_rank = bulk_data.entity_rank(stk_entities[0]);
if ( stk::topology::NODE_RANK == stk_rank )
{
num_nodes = 1;
}
else
{
const stk::mesh::Entity* begin =
bulk_data.begin_nodes( stk_entities[0] );
const stk::mesh::Entity* end =
bulk_data.end_nodes( stk_entities[0] );
num_nodes = std::distance( begin, end );
}
}
Intrepid::FieldContainer<double> coords( num_cells, num_nodes, space_dim );
// Extract the coordinates.
double* node_coords = 0;
for ( int c = 0; c < num_cells; ++c )
{
if ( stk::topology::NODE_RANK == stk_rank )
{
node_coords = stk::mesh::field_data( *coord_field, stk_entities[c] );
for ( int d = 0; d < space_dim; ++d )
{
coords(c,0,d) = node_coords[d];
}
}
else
{
const stk::mesh::Entity* begin = bulk_data.begin_nodes( stk_entities[c] );
DTK_REMEMBER(
const stk::mesh::Entity* end = bulk_data.end_nodes( stk_entities[c] )
);
DTK_CHECK( std::distance(begin,end) == num_nodes );
for ( int n = 0; n < num_nodes; ++n )
{
node_coords = stk::mesh::field_data( *coord_field, begin[n] );
for ( int d = 0; d < space_dim; ++d )
{
coords(c,n,d) = node_coords[d];
}
}
}
}
return coords;
}