コード例 #1
0
ファイル: FEMHelpers.cpp プロジェクト: sdressler/objekt
Entity & declare_element_side(
  BulkData & mesh ,
  const stk::mesh::EntityId global_side_id ,
  Entity & elem ,
  const unsigned local_side_id ,
  Part * part )
{
  verify_declare_element_side(mesh, elem, local_side_id);

  const CellTopologyData * const elem_top = get_cell_topology_new( elem ).getCellTopologyData();
  
  ThrowErrorMsgIf( elem_top == NULL,
      "Element[" << elem.identifier() << "] has no defined topology");

  const CellTopologyData * const side_top = elem_top->side[ local_side_id ].topology;

  ThrowErrorMsgIf( side_top == NULL,
      "Element[" << elem.identifier() << "], local_side_id = " <<
      local_side_id << ", side has no defined topology" );

  PartVector empty_parts ;

  Entity & side = mesh.declare_entity( side_top->dimension , global_side_id, empty_parts );
  return declare_element_side( elem, side, local_side_id, part);
}
コード例 #2
0
ファイル: FEMHelpers.cpp プロジェクト: rainiscold/trilinos
Entity declare_element_side(
        BulkData & mesh,
        Entity elem,
        Entity side,
        const unsigned local_side_id,
        const stk::mesh::PartVector& parts)
{
    verify_declare_element_side(mesh, elem, local_side_id);

    stk::topology elem_top = mesh.bucket(elem).topology();
    stk::topology side_top = elem_top.side_topology(local_side_id);
    return declare_element_to_entity(mesh, elem, side, local_side_id, parts, side_top);
}
コード例 #3
0
ファイル: FEMHelpers.cpp プロジェクト: sdressler/objekt
Entity & declare_element_side(
  Entity & elem ,
  Entity & side,
  const unsigned local_side_id ,
  Part * part )
{
  BulkData & mesh = BulkData::get(side);

  verify_declare_element_side(mesh, elem, local_side_id);

  const CellTopologyData * const elem_top = get_cell_topology_new( elem ).getCellTopologyData();

  ThrowErrorMsgIf( elem_top == NULL,
      "Element[" << elem.identifier() << "] has no defined topology" );

  const CellTopologyData * const side_top = elem_top->side[ local_side_id ].topology;

  ThrowErrorMsgIf( side_top == NULL,
      "Element[" << elem.identifier() << "], local_side_id = " <<
      local_side_id << ", side has no defined topology" );

  const unsigned * const side_node_map = elem_top->side[ local_side_id ].node ;

  PartVector add_parts ;

  if ( part ) { add_parts.push_back( part ); }

  mesh.change_entity_parts(side, add_parts);

  mesh.declare_relation( elem , side , local_side_id );

  PairIterRelation rel = elem.relations( FEMMetaData::NODE_RANK );

  for ( unsigned i = 0 ; i < side_top->node_count ; ++i ) {
    Entity & node = * rel[ side_node_map[i] ].entity();
    mesh.declare_relation( side , node , i );
  }

  return side ;
}
コード例 #4
0
ファイル: FEMHelpers.cpp プロジェクト: rainiscold/trilinos
Entity declare_element_side(
        BulkData & mesh,
        const stk::mesh::EntityId global_side_id,
        Entity elem,
        const unsigned local_side_id,
        const stk::mesh::PartVector& parts)
{
    verify_declare_element_side(mesh, elem, local_side_id);

    stk::topology elem_top = mesh.bucket(elem).topology();
    stk::topology side_top = elem_top.side_topology(local_side_id);

    PartVector empty_parts;
    Entity side = mesh.get_entity(side_top.rank(), global_side_id);
    if(!mesh.is_valid(side))
    {
        side = mesh.declare_entity(side_top.rank(), global_side_id, empty_parts);
// It seem like declare_element_side should be called even if the side is valid to make sure it is attached to the element.
        declare_element_side(mesh, elem, side, local_side_id, parts);
    }
    return side;
}