本文整理汇总了C++中stk::mesh::BulkData::end_nodes方法的典型用法代码示例。如果您正苦于以下问题:C++ BulkData::end_nodes方法的具体用法?C++ BulkData::end_nodes怎么用?C++ BulkData::end_nodes使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类stk::mesh::BulkData
的用法示例。
在下文中一共展示了BulkData::end_nodes方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: fill_element_and_side_ids
void fill_element_and_side_ids(Ioss::GroupingEntity & io,
stk::mesh::Part * const part,
const stk::mesh::BulkData & bulk_data,
stk::topology stk_element_topology,
const stk::mesh::Selector *subset_selector,
stk::mesh::EntityVector &sides,
std::vector<INT>& elem_side_ids)
{
if (bulk_data.has_sideset_data())
{
const stk::mesh::SideSet& sset = bulk_data.get_sideset_data(part->id());
size_t num_sides = sset.size();
elem_side_ids.reserve(num_sides*2);
stk::mesh::Selector selector = *part & ( bulk_data.mesh_meta_data().locally_owned_part() | bulk_data.mesh_meta_data().globally_shared_part() );
if(subset_selector)
selector &= *subset_selector;
for(size_t i=0;i<sset.size();++i)
{
stk::mesh::Entity element = sset[i].element;
stk::mesh::EntityId elemId = bulk_data.identifier(element);
int zero_based_side_ord = sset[i].side;
stk::mesh::Entity side = stk::mesh::get_side_entity_for_elem_id_side_pair_of_rank(bulk_data, elemId, zero_based_side_ord, bulk_data.mesh_meta_data().side_rank());
if(bulk_data.is_valid(side))
{
if(selector(bulk_data.bucket(side)))
{
if(bulk_data.bucket(element).topology() == stk_element_topology)
{
elem_side_ids.push_back(elemId);
elem_side_ids.push_back(zero_based_side_ord+1);
sides.push_back(side);
}
}
}
}
}
else
{
const stk::mesh::MetaData & meta_data = stk::mesh::MetaData::get(*part);
stk::mesh::EntityRank type = part_primary_entity_rank(*part);
size_t num_sides = get_entities(*part, type, bulk_data, sides, false, subset_selector);
elem_side_ids.reserve(num_sides * 2);
stk::mesh::EntityRank elem_rank = stk::topology::ELEMENT_RANK;
for(size_t i = 0; i < num_sides; ++i)
{
std::vector<stk::mesh::Entity> side;
side.push_back(sides[i]);
std::vector<stk::mesh::Entity> side_elements;
std::vector<stk::mesh::Entity> side_nodes(bulk_data.begin_nodes(sides[i]), bulk_data.end_nodes(sides[i]));
get_entities_through_relations(bulk_data, side_nodes, elem_rank, side_elements);
const size_t num_side_elem = side_elements.size();
std::sort(side_elements.begin(), side_elements.end(), stk::mesh::EntityLess(bulk_data));
stk::mesh::Entity suitable_elem = stk::mesh::Entity();
stk::mesh::ConnectivityOrdinal suitable_ordinal = stk::mesh::INVALID_CONNECTIVITY_ORDINAL;
for(size_t j = 0; j < num_side_elem; ++j)
{
const stk::mesh::Entity elem = side_elements[j];
const stk::mesh::Bucket &elemBucket = bulk_data.bucket(elem);
const bool isSelectingEverything = subset_selector == NULL;
const bool isElementBeingOutput = (isSelectingEverything || (*subset_selector)(elemBucket))
&& elemBucket.member(meta_data.locally_owned_part());
if(isElementBeingOutput)
{
const stk::mesh::Entity * elem_sides = bulk_data.begin(elem, type);
stk::mesh::ConnectivityOrdinal const * side_ordinal = bulk_data.begin_ordinals(elem, type);
const size_t num_elem_sides = bulk_data.num_connectivity(elem, type);
for(size_t k = 0; k < num_elem_sides; ++k)
{
if(elem_sides[k] == side[0])
{
suitable_elem = elem;
suitable_ordinal = side_ordinal[k];
break;
}
}
}
}
if(!bulk_data.is_valid(suitable_elem))
{
std::ostringstream oss;
oss << "ERROR, no suitable element found";
throw std::runtime_error(oss.str());
}
elem_side_ids.push_back(bulk_data.identifier(suitable_elem));
elem_side_ids.push_back(suitable_ordinal + 1); // Ioss is 1-based, mesh is 0-based.
}
}
}
示例2: 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;
}