当前位置: 首页>>代码示例>>C++>>正文


C++ BulkData::entity_rank方法代码示例

本文整理汇总了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;
}
开发者ID:gahansen,项目名称:Albany,代码行数:37,代码来源:GeomDecomp.cpp

示例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;
}
开发者ID:gahansen,项目名称:Albany,代码行数:38,代码来源:GeomDecomp.cpp

示例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;
}
开发者ID:bartlettroscoe,项目名称:DataTransferKit,代码行数:66,代码来源:DTK_STKMeshHelpers_impl.hpp


注:本文中的stk::mesh::BulkData::entity_rank方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。