12 #include <stk_mesh/fem/FEMMetaData.hpp> 13 #include <stk_util/unit_test_support/stk_utest_macros.hpp> 19 static const stk_classic::mesh::EntityRank NODE_RANK = FEMMetaData::NODE_RANK;
20 static const stk_classic::mesh::EntityRank EDGE_RANK = FEMMetaData::EDGE_RANK;
21 static const stk_classic::mesh::EntityRank FACE_RANK = FEMMetaData::FACE_RANK;
22 static const stk_classic::mesh::EntityRank VOLUME_RANK = FEMMetaData::VOLUME_RANK;
23 static const stk_classic::mesh::EntityRank INVALID_RANK = FEMMetaData::INVALID_RANK;
29 STKUNIT_UNIT_TEST ( UnitTestFEMMetaData, create )
32 STKUNIT_EXPECT_TRUE (
true );
35 STKUNIT_EXPECT_EQUAL( fem_meta.
node_rank(), NODE_RANK );
36 STKUNIT_EXPECT_EQUAL( fem_meta.
edge_rank(), EDGE_RANK );
37 STKUNIT_EXPECT_EQUAL( fem_meta.
face_rank(), FACE_RANK );
38 STKUNIT_EXPECT_EQUAL( fem_meta.
side_rank(), INVALID_RANK );
39 STKUNIT_EXPECT_EQUAL( fem_meta.
element_rank(), INVALID_RANK );
42 stk_classic::mesh::fem::CellTopology invalid_cell_topology( NULL );
44 STKUNIT_ASSERT_THROW( fem_meta.
register_cell_topology( invalid_cell_topology, INVALID_RANK ), std::logic_error );
46 STKUNIT_ASSERT_THROW( fem_meta.
get_cell_topology( universal_part), std::logic_error );
47 STKUNIT_ASSERT_THROW( stk_classic::mesh::fem::set_cell_topology( universal_part, invalid_cell_topology), std::logic_error );
48 STKUNIT_EXPECT_EQUAL( fem_meta.
get_entity_rank( invalid_cell_topology), INVALID_RANK );
52 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, initialize )
55 const size_t spatial_dimension = 3;
61 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, invalid_initialize )
64 const size_t spatial_dimension = 0;
65 STKUNIT_ASSERT_THROW( fem_meta.
FEM_initialize(spatial_dimension), std::logic_error );
68 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, initialize_only_once )
71 const size_t spatial_dimension = 3;
73 STKUNIT_ASSERT_THROW( fem_meta.
FEM_initialize(2), std::logic_error );
76 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, entity_ranks_1 )
79 const size_t spatial_dimension = 1;
81 STKUNIT_EXPECT_EQUAL( fem_meta.
node_rank(), NODE_RANK );
82 STKUNIT_EXPECT_EQUAL( fem_meta.
edge_rank(), EDGE_RANK );
83 STKUNIT_EXPECT_EQUAL( fem_meta.
face_rank(), FACE_RANK );
84 STKUNIT_EXPECT_EQUAL( fem_meta.
side_rank(), NODE_RANK );
85 STKUNIT_EXPECT_EQUAL( fem_meta.
element_rank(), EDGE_RANK );
90 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, entity_ranks_2 )
93 const size_t spatial_dimension = 2;
95 STKUNIT_EXPECT_EQUAL( fem_meta.
node_rank(), NODE_RANK );
96 STKUNIT_EXPECT_EQUAL( fem_meta.
edge_rank(), EDGE_RANK );
97 STKUNIT_EXPECT_EQUAL( fem_meta.
face_rank(), FACE_RANK );
98 STKUNIT_EXPECT_EQUAL( fem_meta.
side_rank(), EDGE_RANK );
99 STKUNIT_EXPECT_EQUAL( fem_meta.
element_rank(), FACE_RANK );
104 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, entity_ranks_3 )
107 const size_t spatial_dimension = 3;
109 STKUNIT_EXPECT_EQUAL( fem_meta.
node_rank(), NODE_RANK );
110 STKUNIT_EXPECT_EQUAL( fem_meta.
edge_rank(), EDGE_RANK );
111 STKUNIT_EXPECT_EQUAL( fem_meta.
face_rank(), FACE_RANK );
112 STKUNIT_EXPECT_EQUAL( fem_meta.
side_rank(), FACE_RANK );
113 STKUNIT_EXPECT_EQUAL( fem_meta.
element_rank(), VOLUME_RANK );
117 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, entity_ranks_4 )
120 const size_t spatial_dimension = 4;
121 std::vector<std::string> entity_rank_names(spatial_dimension+1);
123 entity_rank_names[0] =
"node";
124 entity_rank_names[1] =
"super node";
125 entity_rank_names[2] =
"super duper node";
126 entity_rank_names[3] =
"particle";
127 entity_rank_names[4] =
"thing";
130 STKUNIT_EXPECT_EQUAL( fem_meta.
node_rank(), NODE_RANK );
131 STKUNIT_EXPECT_EQUAL( fem_meta.
edge_rank(), EDGE_RANK );
132 STKUNIT_EXPECT_EQUAL( fem_meta.
face_rank(), FACE_RANK );
133 STKUNIT_EXPECT_EQUAL( fem_meta.
side_rank(), VOLUME_RANK );
138 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, get_cell_topology_trivial )
141 const size_t spatial_dimension = 3;
143 stk_classic::mesh::fem::CellTopology hex_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
146 STKUNIT_EXPECT_TRUE( stk_classic::mesh::is_auto_declared_part(hex_part) );
148 stk_classic::mesh::fem::CellTopology topology = fem_meta.
get_cell_topology(hex_part);
149 STKUNIT_EXPECT_EQUAL( (topology == hex_top),
true );
153 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, get_cell_topology_simple )
156 const size_t spatial_dimension = 3;
158 stk_classic::mesh::fem::CellTopology hex_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
161 STKUNIT_EXPECT_TRUE( stk_classic::mesh::is_auto_declared_part(hex_part) );
162 STKUNIT_EXPECT_TRUE( !stk_classic::mesh::is_auto_declared_part(A) );
165 STKUNIT_ASSERT_EQUAL( (topology == hex_top),
true );
169 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, get_cell_topology_invalid )
172 const size_t spatial_dimension = 2;
174 stk_classic::mesh::fem::CellTopology hex_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
179 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, cell_topology_subsetting )
182 const size_t spatial_dimension = 3;
183 const stk_classic::mesh::EntityRank element_rank = spatial_dimension;
186 stk_classic::mesh::fem::CellTopology hex_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
187 stk_classic::mesh::fem::set_cell_topology( element_part, hex_top );
192 STKUNIT_EXPECT_EQUAL(
193 std::count(element_part_supersets.begin(),element_part_supersets.end(),&hex_part), 1
256 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, cell_topology_test_1 )
259 const size_t spatial_dimension = 3;
261 stk_classic::mesh::fem::CellTopology HR_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
268 STKUNIT_EXPECT_EQUAL(
269 std::count(HR_supersets.begin(),HR_supersets.end(),&A), 1
275 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, cell_topology_test_2a )
278 const size_t spatial_dimension = 3;
280 stk_classic::mesh::fem::CellTopology HR_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
281 stk_classic::mesh::fem::CellTopology QR_top(shards::getCellTopologyData<shards::Quadrilateral<4> >());
291 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, cell_topology_test_2b )
294 const size_t spatial_dimension = 3;
300 stk_classic::mesh::fem::CellTopology HR_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
303 stk_classic::mesh::fem::CellTopology QR_top(shards::getCellTopologyData<shards::Quadrilateral<4> >());
314 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, cell_topology_test_3a )
317 const size_t spatial_dimension = 3;
322 stk_classic::mesh::fem::CellTopology HR_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
328 STKUNIT_EXPECT_EQUAL(
329 std::count(A_supersets.begin(),A_supersets.end(),&HR), 1
336 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, cell_topology_test_3b )
339 const size_t spatial_dimension = 3;
345 stk_classic::mesh::fem::CellTopology HR_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
348 stk_classic::mesh::fem::CellTopology QR_top(shards::getCellTopologyData<shards::Quadrilateral<4> >());
356 STKUNIT_EXPECT_EQUAL(
357 std::count(D_supersets.begin(),D_supersets.end(),&A), 1
364 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, cell_topology_test_3c )
367 const size_t spatial_dimension = 3;
374 stk_classic::mesh::fem::CellTopology HR_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
377 stk_classic::mesh::fem::CellTopology QR_top(shards::getCellTopologyData<shards::Quadrilateral<4> >());
386 STKUNIT_EXPECT_EQUAL(
387 std::count(B_supersets.begin(),B_supersets.end(),&A), 1
394 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, cell_topology_test_4a )
397 const size_t spatial_dimension = 3;
403 stk_classic::mesh::fem::CellTopology HR_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
411 STKUNIT_EXPECT_EQUAL(
412 std::count(B_supersets.begin(),B_supersets.end(),&A), 1
419 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, cell_topology_test_4b )
422 const size_t spatial_dimension = 3;
429 stk_classic::mesh::fem::CellTopology HR_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
438 STKUNIT_EXPECT_EQUAL(
439 std::count(B_supersets.begin(),B_supersets.end(),&A), 1
446 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, cell_topology_test_5a )
449 const size_t spatial_dimension = 3;
455 stk_classic::mesh::fem::CellTopology HR_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
458 stk_classic::mesh::fem::CellTopology WR_top(shards::getCellTopologyData<shards::Wedge<6> >());
469 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, cell_topology_test_5b )
472 const size_t spatial_dimension = 3;
479 stk_classic::mesh::fem::CellTopology HR_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
482 stk_classic::mesh::fem::CellTopology WR_top(shards::getCellTopologyData<shards::Wedge<6> >());
487 STKUNIT_ASSERT_TRUE( top.isValid() );
496 STKUNIT_UNIT_TEST( UnitTestFEMMetaData, cell_topology_test_5c )
499 const size_t spatial_dimension = 3;
507 stk_classic::mesh::fem::CellTopology HR_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
510 stk_classic::mesh::fem::CellTopology WR_top(shards::getCellTopologyData<shards::Wedge<6> >());
525 STKUNIT_UNIT_TEST(
FEMMetaData, register_cell_topology_duplicate )
528 const size_t spatial_dimension = 2;
530 const stk_classic::mesh::EntityRank hex_rank = 2;
533 STKUNIT_ASSERT_NO_THROW( fem_meta.
register_cell_topology( shards::getCellTopologyData<shards::Hexahedron<8> >(), hex_rank ) );
537 STKUNIT_UNIT_TEST(
FEMMetaData, register_cell_topology_duplicate_with_different_ranks )
540 const size_t spatial_dimension = 2;
542 const stk_classic::mesh::EntityRank hex_rank = 2;
543 const stk_classic::mesh::EntityRank bad_rank = 1;
546 STKUNIT_ASSERT_THROW( fem_meta.
register_cell_topology( shards::getCellTopologyData<shards::Hexahedron<8> >(), bad_rank ), std::runtime_error );
550 STKUNIT_UNIT_TEST(
FEMMetaData, register_cell_topology_duplicate_with_invalid_rank )
553 const size_t spatial_dimension = 2;
555 const stk_classic::mesh::EntityRank invalid_rank = 3;
557 STKUNIT_ASSERT_THROW( fem_meta.
register_cell_topology( shards::getCellTopologyData<shards::Hexahedron<8> >(), invalid_rank ), std::logic_error );
561 STKUNIT_UNIT_TEST(
FEMMetaData, get_cell_topology_root_part_invalid )
564 const size_t spatial_dimension = 2;
567 stk_classic::mesh::fem::CellTopology hex_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
573 STKUNIT_UNIT_TEST(
FEMMetaData, get_entity_rank_invalid )
576 const size_t spatial_dimension = 2;
579 stk_classic::mesh::fem::CellTopology hex_top(shards::getCellTopologyData<shards::Hexahedron<8> >());
580 stk_classic::mesh::EntityRank rank = fem_meta.
get_entity_rank(hex_top);
582 const stk_classic::mesh::EntityRank invalid_rank = INVALID_RANK;
583 STKUNIT_ASSERT_EQUAL( rank, invalid_rank );
unsigned primary_entity_rank() const
The primary entity type for this part.
An application-defined subset of a problem domain.
const PartVector & supersets() const
Parts that are supersets of this part.
std::vector< Part *> PartVector
Collections of parts are frequently maintained as a vector of Part pointers.