void PartRepository::declare_subset( Part & superset, Part & subset ) { static const char method[] = "stk::mesh::impl::PartRepository::declare_subset" ; if ( ! contain( subset.supersets() , superset ) ) { assert_not_same( superset , subset , method ); assert_not_superset( superset , subset , method ); assert_same_universe( superset , subset , method ); assert_rank_ordering( superset , subset , method ); // Insert this symmetric relationship first // so that it does not get revisited. declare_subset_impl( superset, subset ); // Transitive: const PartVector & subset_subsets = subset.subsets(); for ( PartVector::const_iterator i = subset_subsets.begin() ; i != subset_subsets.end() ; ++i ) { declare_subset( superset, **i ); } const PartVector & superset_supersets = superset.supersets(); for ( PartVector::const_iterator i = superset_supersets.begin() ; i != superset_supersets.end() ; ++i ) { declare_subset( **i, subset ); } } }
void PartRepository::declare_part_relation( Part & root_part, PartRelation relation, Part & target_part ) { static const char method[] = "stk::mesh::PartRepository::declare_part_relation" ; assert_not_same( root_part , method , target_part ); assert_same_universe( root_part, method, target_part ); assert_same( root_part, method, *relation.m_root ); assert_same( target_part, method, *relation.m_target ); root_part.m_partImpl.add_relation( relation ); target_part.m_partImpl.add_relation( relation ); }
void PartRepository::declare_subset( Part & superset, Part & subset ) { static const char method[] = "stk_classic::mesh::impl::PartRepository::declare_subset" ; Trace_(method); if ( ! contain( subset.supersets() , superset ) ) { assert_not_same( superset , subset , method ); assert_not_superset( superset , subset , method ); assert_same_universe( superset , subset , method ); assert_rank_ordering( superset , subset , method ); // Insert this symmetric relationship first // so that it does not get revisited. declare_subset_impl( superset, subset ); // Transitive: const PartVector & subset_subsets = subset.subsets(); for ( PartVector::const_iterator i = subset_subsets.begin() ; i != subset_subsets.end() ; ++i ) { declare_subset( superset, **i ); } const PartVector & superset_supersets = superset.supersets(); for ( PartVector::const_iterator i = superset_supersets.begin() ; i != superset_supersets.end() ; ++i ) { declare_subset( **i, subset ); } // Induced intersection-part membership: const PartVector & superset_subsets = superset.subsets(); for ( PartVector::const_iterator i = superset_subsets.begin() ; i != superset_subsets.end() ; ++i ) { Part & pint = **i ; if ( ! pint.intersection_of().empty() && ( & pint != & subset ) ) { // If 'subset' is a subset of every member of 'pint.intersection_of()' // then it is by definition a subset of 'pint. if ( contain( subset.supersets() , pint.intersection_of() ) ) { declare_subset( pint, subset ); } } } } }