9 #include <stk_util/unit_test_support/stk_utest_macros.hpp> 10 #include <stk_mesh/fixtures/HexFixture.hpp> 12 #include <stk_mesh/fem/SkinMesh.hpp> 17 using stk_classic::mesh::EntityRank;
18 using stk_classic::mesh::EntityId;
20 STKUNIT_UNIT_TEST( UnitTestHexFixture, elem_ids_1d_x )
23 const unsigned NX = 3;
24 const unsigned NY = 1;
25 const unsigned NZ = 1;
27 hf.m_fem_meta.commit();
29 STKUNIT_EXPECT_EQUAL( hf.elem_id(0,0,0), 1u );
30 STKUNIT_EXPECT_EQUAL( hf.elem_id(1,0,0), 2u );
31 STKUNIT_EXPECT_EQUAL( hf.elem_id(2,0,0), 3u );
34 STKUNIT_UNIT_TEST( UnitTestHexFixture, elem_ids_3d_x )
37 const unsigned NX = 3;
38 const unsigned NY = 3;
39 const unsigned NZ = 3;
41 hf.m_fem_meta.commit();
43 STKUNIT_EXPECT_EQUAL( hf.elem_id(0,0,0), 1u );
44 STKUNIT_EXPECT_EQUAL( hf.elem_id(1,0,0), 2u );
45 STKUNIT_EXPECT_EQUAL( hf.elem_id(2,0,0), 3u );
48 STKUNIT_UNIT_TEST( UnitTestHexFixture, elem_ids_1d_y )
51 const unsigned NX = 1;
52 const unsigned NY = 3;
53 const unsigned NZ = 1;
55 hf.m_fem_meta.commit();
57 STKUNIT_EXPECT_EQUAL( hf.elem_id(0,0,0), 1u );
58 STKUNIT_EXPECT_EQUAL( hf.elem_id(0,1,0), 2u );
59 STKUNIT_EXPECT_EQUAL( hf.elem_id(0,2,0), 3u );
62 STKUNIT_UNIT_TEST( UnitTestHexFixture, elem_ids_3d_y )
65 const unsigned NX = 3;
66 const unsigned NY = 3;
67 const unsigned NZ = 3;
69 hf.m_fem_meta.commit();
71 STKUNIT_EXPECT_EQUAL( hf.elem_id(0,0,0), 1u );
72 STKUNIT_EXPECT_EQUAL( hf.elem_id(0,1,0), 4u );
73 STKUNIT_EXPECT_EQUAL( hf.elem_id(0,2,0), 7u );
76 STKUNIT_UNIT_TEST( UnitTestHexFixture, elem_ids_1d_z )
79 const unsigned NX = 1;
80 const unsigned NY = 1;
81 const unsigned NZ = 3;
83 hf.m_fem_meta.commit();
85 STKUNIT_EXPECT_EQUAL( hf.elem_id(0,0,0), 1u );
86 STKUNIT_EXPECT_EQUAL( hf.elem_id(0,0,1), 2u );
87 STKUNIT_EXPECT_EQUAL( hf.elem_id(0,0,2), 3u );
90 STKUNIT_UNIT_TEST( UnitTestHexFixture, elem_ids_3d_z )
93 const unsigned NX = 3;
94 const unsigned NY = 3;
95 const unsigned NZ = 3;
97 hf.m_fem_meta.commit();
99 STKUNIT_EXPECT_EQUAL( hf.elem_id(0,0,0), 1u );
100 STKUNIT_EXPECT_EQUAL( hf.elem_id(0,0,1), 10u );
101 STKUNIT_EXPECT_EQUAL( hf.elem_id(0,0,2), 19u );
104 STKUNIT_UNIT_TEST( UnitTestHexFixture, elem_ids_3d_diag )
107 const unsigned NX = 3;
108 const unsigned NY = 3;
109 const unsigned NZ = 3;
111 hf.m_fem_meta.commit();
113 STKUNIT_EXPECT_EQUAL( hf.elem_id(0,0,0), 1u );
114 STKUNIT_EXPECT_EQUAL( hf.elem_id(1,1,1), 14u );
115 STKUNIT_EXPECT_EQUAL( hf.elem_id(2,2,2), 27u );
118 STKUNIT_UNIT_TEST( UnitTestHexFixture, trivial_parallel_2 )
130 const unsigned NX = 2;
131 const unsigned NY = 1;
132 const unsigned NZ = 1;
137 std::map<unsigned,std::vector<EntityId> > parallel_distribution;
139 std::vector< EntityId> element_ids;
140 element_ids.push_back(1);
141 parallel_distribution[0] = element_ids;
143 parallel_distribution[1] = element_ids;
148 hf.m_fem_meta.commit();
150 hf.generate_mesh(parallel_distribution[p_rank]);
153 std::vector<EntityId> empty_vector;
154 hf.generate_mesh( empty_vector ) ;
161 const EntityRank element_rank = hf.m_fem_meta.element_rank();
162 Entity * entity_1 = mesh.
get_entity(element_rank, 1);
163 Entity * entity_2 = mesh.
get_entity(element_rank ,2);
165 STKUNIT_ASSERT_TRUE( entity_1 != NULL );
166 STKUNIT_ASSERT_TRUE( entity_2 != NULL );
167 STKUNIT_EXPECT_EQUAL( 0u, entity_1->owner_rank() );
168 STKUNIT_EXPECT_EQUAL( 1u, entity_2->owner_rank() );
171 STKUNIT_EXPECT_TRUE( entity_1 == NULL );
172 STKUNIT_EXPECT_TRUE( entity_2 == NULL );
176 STKUNIT_UNIT_TEST( UnitTestHexFixture, disjoint_parallel_psizex1x1 )
183 const unsigned NX = p_size;
184 const unsigned NY = 1;
185 const unsigned NZ = 1;
189 std::map<unsigned,std::vector<EntityId> > parallel_distribution;
190 for (
unsigned p=0 ; p < p_size ; ++p) {
191 std::vector< EntityId> element_ids;
192 element_ids.push_back(p+1);
193 parallel_distribution[p] = element_ids;
198 hf.m_fem_meta.commit();
199 hf.generate_mesh(parallel_distribution[p_rank]);
201 const EntityRank element_rank = hf.m_fem_meta.element_rank();
204 Entity * my_entity = mesh.
get_entity(element_rank, p_rank + 1);
205 STKUNIT_ASSERT_TRUE( my_entity != NULL );
206 STKUNIT_EXPECT_EQUAL( p_rank, my_entity->owner_rank() );
210 Entity * prior_entity = mesh.
get_entity(element_rank, p_rank);
211 STKUNIT_ASSERT_TRUE( prior_entity != NULL );
212 STKUNIT_EXPECT_EQUAL( p_rank - 1, prior_entity->owner_rank() );
216 if (p_rank < p_size - 1) {
217 Entity * next_entity = mesh.
get_entity(element_rank, p_rank + 2);
218 STKUNIT_ASSERT_TRUE( next_entity != NULL );
219 STKUNIT_EXPECT_EQUAL( p_rank + 1, next_entity->owner_rank() );
223 STKUNIT_UNIT_TEST( UnitTestHexFixture, disjoint_parallel_4x2x1 )
241 const unsigned NX = 4;
242 const unsigned NY = 2;
243 const unsigned NZ = 1;
248 std::map<unsigned,std::vector<EntityId> > parallel_distribution;
250 std::vector< EntityId> element_ids;
251 element_ids.push_back(1);
252 element_ids.push_back(6);
253 parallel_distribution[0] = element_ids;
255 element_ids.push_back(2);
256 element_ids.push_back(3);
257 element_ids.push_back(4);
258 element_ids.push_back(5);
259 element_ids.push_back(7);
260 element_ids.push_back(8);
261 parallel_distribution[1] = element_ids;
266 hf.m_fem_meta.commit();
268 hf.generate_mesh(parallel_distribution[p_rank]);
271 std::vector<EntityId> empty_vector;
272 hf.generate_mesh( empty_vector ) ;
278 const EntityRank element_rank = hf.m_fem_meta.element_rank();
279 Entity * entity_1 = mesh.
get_entity(element_rank, 1);
280 Entity * entity_2 = mesh.
get_entity(element_rank, 2);
281 Entity * entity_3 = mesh.
get_entity(element_rank, 3);
282 Entity * entity_4 = mesh.
get_entity(element_rank, 4);
283 Entity * entity_5 = mesh.
get_entity(element_rank, 5);
284 Entity * entity_6 = mesh.
get_entity(element_rank, 6);
285 Entity * entity_7 = mesh.
get_entity(element_rank, 7);
286 Entity * entity_8 = mesh.
get_entity(element_rank, 8);
288 STKUNIT_ASSERT_TRUE( entity_1 != NULL );
289 STKUNIT_ASSERT_TRUE( entity_2 != NULL );
290 STKUNIT_ASSERT_TRUE( entity_3 != NULL );
291 STKUNIT_ASSERT_TRUE( entity_4 == NULL );
292 STKUNIT_ASSERT_TRUE( entity_5 != NULL );
293 STKUNIT_ASSERT_TRUE( entity_6 != NULL );
294 STKUNIT_ASSERT_TRUE( entity_7 != NULL );
295 STKUNIT_ASSERT_TRUE( entity_8 == NULL );
296 STKUNIT_EXPECT_EQUAL( 0u, entity_1->owner_rank() );
297 STKUNIT_EXPECT_EQUAL( 1u, entity_2->owner_rank() );
298 STKUNIT_EXPECT_EQUAL( 1u, entity_3->owner_rank() );
299 STKUNIT_EXPECT_EQUAL( 1u, entity_5->owner_rank() );
300 STKUNIT_EXPECT_EQUAL( 0u, entity_6->owner_rank() );
301 STKUNIT_EXPECT_EQUAL( 1u, entity_7->owner_rank() );
303 else if (p_rank == 1) {
304 STKUNIT_ASSERT_TRUE( entity_1 != NULL );
305 STKUNIT_ASSERT_TRUE( entity_2 != NULL );
306 STKUNIT_ASSERT_TRUE( entity_3 != NULL );
307 STKUNIT_ASSERT_TRUE( entity_4 != NULL );
308 STKUNIT_ASSERT_TRUE( entity_5 != NULL );
309 STKUNIT_ASSERT_TRUE( entity_6 != NULL );
310 STKUNIT_ASSERT_TRUE( entity_7 != NULL );
311 STKUNIT_ASSERT_TRUE( entity_8 != NULL );
312 STKUNIT_EXPECT_EQUAL( 0u, entity_1->owner_rank() );
313 STKUNIT_EXPECT_EQUAL( 1u, entity_2->owner_rank() );
314 STKUNIT_EXPECT_EQUAL( 1u, entity_3->owner_rank() );
315 STKUNIT_EXPECT_EQUAL( 1u, entity_4->owner_rank() );
316 STKUNIT_EXPECT_EQUAL( 1u, entity_5->owner_rank() );
317 STKUNIT_EXPECT_EQUAL( 0u, entity_6->owner_rank() );
318 STKUNIT_EXPECT_EQUAL( 1u, entity_7->owner_rank() );
319 STKUNIT_EXPECT_EQUAL( 1u, entity_8->owner_rank() );
322 STKUNIT_EXPECT_TRUE( entity_1 == NULL );
323 STKUNIT_EXPECT_TRUE( entity_2 == NULL );
324 STKUNIT_EXPECT_TRUE( entity_3 == NULL );
325 STKUNIT_EXPECT_TRUE( entity_4 == NULL );
326 STKUNIT_EXPECT_TRUE( entity_5 == NULL );
327 STKUNIT_EXPECT_TRUE( entity_6 == NULL );
328 STKUNIT_EXPECT_TRUE( entity_7 == NULL );
329 STKUNIT_EXPECT_TRUE( entity_8 == NULL );
333 STKUNIT_UNIT_TEST( UnitTestHexFixture, disjoint_parallel_5x1x1 )
346 const unsigned NX = 5;
347 const unsigned NY = 1;
348 const unsigned NZ = 1;
353 std::map<unsigned,std::vector<EntityId> > parallel_distribution;
355 std::vector< EntityId> element_ids;
356 element_ids.push_back(1);
357 element_ids.push_back(5);
358 parallel_distribution[0] = element_ids;
360 element_ids.push_back(2);
361 element_ids.push_back(3);
362 element_ids.push_back(4);
363 parallel_distribution[1] = element_ids;
368 hf.m_fem_meta.commit();
370 hf.generate_mesh(parallel_distribution[p_rank]);
373 std::vector<EntityId> empty_vector;
374 hf.generate_mesh( empty_vector ) ;
380 const EntityRank element_rank = hf.m_fem_meta.element_rank();
381 Entity * entity_1 = mesh.
get_entity(element_rank, 1);
382 Entity * entity_2 = mesh.
get_entity(element_rank, 2);
383 Entity * entity_3 = mesh.
get_entity(element_rank, 3);
384 Entity * entity_4 = mesh.
get_entity(element_rank, 4);
385 Entity * entity_5 = mesh.
get_entity(element_rank, 5);
387 STKUNIT_ASSERT_TRUE( entity_1 != NULL );
388 STKUNIT_ASSERT_TRUE( entity_2 != NULL );
389 STKUNIT_ASSERT_TRUE( entity_3 == NULL );
390 STKUNIT_ASSERT_TRUE( entity_4 != NULL );
391 STKUNIT_ASSERT_TRUE( entity_5 != NULL );
392 STKUNIT_EXPECT_EQUAL( 0u, entity_1->owner_rank() );
393 STKUNIT_EXPECT_EQUAL( 1u, entity_2->owner_rank() );
394 STKUNIT_EXPECT_EQUAL( 1u, entity_4->owner_rank() );
395 STKUNIT_EXPECT_EQUAL( 0u, entity_5->owner_rank() );
397 else if (p_rank == 1) {
398 STKUNIT_ASSERT_TRUE( entity_1 != NULL );
399 STKUNIT_ASSERT_TRUE( entity_2 != NULL );
400 STKUNIT_ASSERT_TRUE( entity_3 != NULL );
401 STKUNIT_ASSERT_TRUE( entity_4 != NULL );
402 STKUNIT_ASSERT_TRUE( entity_5 != NULL );
403 STKUNIT_EXPECT_EQUAL( 0u, entity_1->owner_rank() );
404 STKUNIT_EXPECT_EQUAL( 1u, entity_2->owner_rank() );
405 STKUNIT_EXPECT_EQUAL( 1u, entity_3->owner_rank() );
406 STKUNIT_EXPECT_EQUAL( 1u, entity_4->owner_rank() );
407 STKUNIT_EXPECT_EQUAL( 0u, entity_5->owner_rank() );
410 STKUNIT_EXPECT_TRUE( entity_1 == NULL );
411 STKUNIT_EXPECT_TRUE( entity_2 == NULL );
412 STKUNIT_EXPECT_TRUE( entity_3 == NULL );
413 STKUNIT_EXPECT_TRUE( entity_4 == NULL );
414 STKUNIT_EXPECT_TRUE( entity_5 == NULL );
Entity * get_entity(EntityRank entity_rank, EntityId entity_id) const
Get entity with a given key.
unsigned parallel_machine_rank(ParallelMachine parallel_machine)
Member function parallel_machine_rank ...
unsigned parallel_machine_size(ParallelMachine parallel_machine)
Member function parallel_machine_size ...
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...