9 #include <stk_util/unit_test_support/stk_utest_macros.hpp> 11 #include <stk_mesh/base/Bucket.hpp> 12 #include <stk_mesh/base/Part.hpp> 13 #include <stk_mesh/base/Types.hpp> 14 #include <stk_mesh/base/GetBuckets.hpp> 15 #include <stk_mesh/base/GetEntities.hpp> 16 #include <stk_mesh/base/MetaData.hpp> 17 #include <stk_mesh/base/BulkData.hpp> 19 #include <stk_mesh/fem/FEMMetaData.hpp> 21 #include <stk_util/parallel/Parallel.hpp> 23 #include <stk_mesh/fixtures/SelectorFixture.hpp> 27 #include <boost/foreach.hpp> 37 const stk_classic::mesh::EntityRank NODE_RANK = stk_classic::mesh::fem::FEMMetaData::NODE_RANK;
41 void sort_and_compare_eq(std::vector<T*> results,
42 std::vector<T*> expected_results)
44 std::sort(expected_results.begin(), expected_results.end());
45 std::sort(results.begin(), results.end());
46 STKUNIT_ASSERT_EQ(results.size(), expected_results.size());
47 for (
unsigned i = 0; i < results.size(); ++i) {
48 STKUNIT_ASSERT(results[i] == expected_results[i]);
55 void check_selected_buckets(
const Selector& selector,
57 const std::vector<Bucket*>& node_buckets,
58 const std::vector<Entity*>& expected_selected_entities)
64 std::vector<Bucket*>
get_buckets, get_buckets_range, get_buckets_alt_range, expected_buckets;
65 std::set<Bucket*> selected_bucket_set;
68 BOOST_FOREACH( Entity* entity, expected_selected_entities ) {
69 selected_bucket_set.insert(&(entity->bucket()));
71 std::copy(selected_bucket_set.begin(), selected_bucket_set.end(), std::back_inserter(expected_buckets));
79 for (stk_classic::mesh::AllSelectedBucketsIterator buckets_itr = boost::begin(buckets_range), buckets_end = boost::end(buckets_range);
80 buckets_itr != buckets_end;
82 get_buckets_range.push_back(*buckets_itr);
92 for (stk_classic::mesh::AllSelectedBucketsIterator buckets_itr = boost::begin(buckets_range), buckets_end = boost::end(buckets_range);
93 buckets_itr != buckets_end;
95 get_buckets_alt_range.push_back(*buckets_itr);
101 sort_and_compare_eq(
get_buckets, expected_buckets);
102 sort_and_compare_eq(get_buckets_range, expected_buckets);
103 sort_and_compare_eq(get_buckets_alt_range, expected_buckets);
109 std::vector<Entity*> get_entities_range;
112 for (stk_classic::mesh::SelectedBucketRangeEntityIterator selected_entity_itr = boost::begin(selected_entity_range),
113 selected_entity_end = boost::end(selected_entity_range);
114 selected_entity_itr != selected_entity_end;
115 ++selected_entity_itr) {
116 get_entities_range.push_back(*selected_entity_itr);
123 sort_and_compare_eq(get_entities_range, expected_selected_entities);
127 STKUNIT_UNIT_TEST( UnitTestGetBuckets, ExampleFixture )
134 stk_classic::mesh::fixtures::SelectorFixture fix ;
135 fix.m_meta_data.commit();
137 fix.m_bulk_data.modification_begin();
139 STKUNIT_ASSERT(fix.m_bulk_data.modification_end());
144 const Bucket & bucket = fix.m_entity1->bucket();
145 STKUNIT_ASSERT_TRUE( bucket.member( fix.m_partA ) );
146 STKUNIT_ASSERT_FALSE( bucket.member( fix.m_partB ) );
147 STKUNIT_ASSERT_FALSE( bucket.member( fix.m_partC ) );
148 STKUNIT_ASSERT_FALSE( bucket.member( fix.m_partD ) );
152 const Bucket & bucket = fix.m_entity2->bucket();
153 STKUNIT_ASSERT_TRUE( bucket.member( fix.m_partA ) );
154 STKUNIT_ASSERT_TRUE( bucket.member( fix.m_partB ) );
155 STKUNIT_ASSERT_FALSE( bucket.member( fix.m_partC ) );
156 STKUNIT_ASSERT_FALSE( bucket.member( fix.m_partD ) );
160 const Bucket & bucket = fix.m_entity3->bucket();
161 STKUNIT_ASSERT_FALSE( bucket.member( fix.m_partA ) );
162 STKUNIT_ASSERT_TRUE( bucket.member( fix.m_partB ) );
163 STKUNIT_ASSERT_TRUE( bucket.member( fix.m_partC ) );
164 STKUNIT_ASSERT_FALSE( bucket.member( fix.m_partD ) );
168 const Bucket & bucket = fix.m_entity4->bucket();
169 STKUNIT_ASSERT_FALSE( bucket.member( fix.m_partA ) );
170 STKUNIT_ASSERT_FALSE( bucket.member( fix.m_partB ) );
171 STKUNIT_ASSERT_TRUE( bucket.member( fix.m_partC ) );
172 STKUNIT_ASSERT_FALSE( bucket.member( fix.m_partD ) );
176 const Bucket & bucket = fix.m_entity5->bucket();
177 STKUNIT_ASSERT_FALSE( bucket.member( fix.m_partA ) );
178 STKUNIT_ASSERT_FALSE( bucket.member( fix.m_partB ) );
179 STKUNIT_ASSERT_FALSE( bucket.member( fix.m_partC ) );
180 STKUNIT_ASSERT_FALSE( bucket.member( fix.m_partD ) );
185 const std::vector<Bucket*> & node_buckets = fix.m_bulk_data.buckets(NODE_RANK);
188 std::vector<Bucket*> get_buckets_range;
193 for (stk_classic::mesh::AllBucketsIterator buckets_itr = boost::begin(all_node_buckets), buckets_end = boost::end(all_node_buckets);
194 buckets_itr != buckets_end;
196 get_buckets_range.push_back(*buckets_itr);
202 sort_and_compare_eq(get_buckets_range, node_buckets);
209 std::vector<Entity*> expected_selected_entities;
210 expected_selected_entities.push_back(fix.m_entity1);
211 expected_selected_entities.push_back(fix.m_entity2);
213 check_selected_buckets(Selector(fix.m_partA), fix.m_bulk_data, node_buckets, expected_selected_entities);
217 std::vector<Entity*> expected_selected_entities;
218 expected_selected_entities.push_back(fix.m_entity2);
219 expected_selected_entities.push_back(fix.m_entity3);
221 check_selected_buckets(Selector(fix.m_partB), fix.m_bulk_data, node_buckets, expected_selected_entities);
225 std::vector<Entity*> expected_selected_entities;
226 expected_selected_entities.push_back(fix.m_entity3);
227 expected_selected_entities.push_back(fix.m_entity4);
229 check_selected_buckets(Selector(fix.m_partC), fix.m_bulk_data, node_buckets, expected_selected_entities);
235 std::vector<Entity*> all_nodes_expected, all_nodes, all_nodes_range;
237 all_nodes_expected.push_back(fix.m_entity1);
238 all_nodes_expected.push_back(fix.m_entity2);
239 all_nodes_expected.push_back(fix.m_entity3);
240 all_nodes_expected.push_back(fix.m_entity4);
241 all_nodes_expected.push_back(fix.m_entity5);
244 sort_and_compare_eq(all_nodes, all_nodes_expected);
247 for (stk_classic::mesh::BucketVectorEntityIterator entity_itr = boost::begin(entity_range), entity_end = boost::end(entity_range);
248 entity_itr != entity_end;
250 all_nodes_range.push_back(*entity_itr);
255 sort_and_compare_eq(all_nodes_range, all_nodes_expected);
This is a class for selecting buckets based on a set of meshparts and set logic.
An application-defined subset of a problem domain.
void get_selected_entities(const Selector &selector, const std::vector< Bucket * > &input_buckets, std::vector< Entity * > &entities)
Get entities in selected buckets (selected by the given selector instance), and sorted by ID...
void get_entities(const BulkData &mesh, EntityRank entity_rank, std::vector< Entity *> &entities)
Get all entities of the specified type, sorted by ID.
Manager for an integrated collection of entities, entity relations, and buckets of field data...
A fundamental unit within the discretization of a problem domain, including but not limited to nodes...
AllSelectedBucketsRange get_buckets(const Selector &selector, const BulkData &mesh)
A container for the field data of a homogeneous collection of entities.