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