12 #include <stk_util/unit_test_support/stk_utest_macros.hpp>
14 #include <stk_util/parallel/Parallel.hpp>
16 #include <stk_mesh/base/MetaData.hpp>
18 #include <Shards_BasicTopologies.hpp>
19 #include <stk_mesh/base/Part.hpp>
20 #include <stk_mesh/baseImpl/PartRepository.hpp>
21 #include <stk_mesh/baseImpl/EntityRepository.hpp>
22 #include <stk_mesh/baseImpl/FieldBaseImpl.hpp>
24 #include <stk_mesh/base/FieldRelation.hpp>
25 #include <stk_mesh/base/PartRelation.hpp>
27 #include <stk_mesh/fem/Stencils.hpp>
28 #include <stk_mesh/fem/FEMMetaData.hpp>
29 #include <stk_mesh/fem/FEMHelpers.hpp>
35 using stk_classic::mesh::EntityRank;
42 int stencil_test_function(
unsigned from_type ,
51 STKUNIT_UNIT_TEST( UnitTestMetaData, testMetaData )
54 const int spatial_dimension = 3;
55 const std::vector<std::string> & rank_names = stk_classic::mesh::fem::entity_rank_names(spatial_dimension);
56 MetaData metadata_committed(rank_names);
57 MetaData metadata_not_committed(rank_names);
60 Part &pa = metadata.declare_part( std::string(
"a") , 0 );
61 Part &pb = metadata.declare_part( std::string(
"b") , 0 );
62 Part &pc = metadata.declare_part( std::string(
"c") , 0 );
63 Part &pd = metadata.declare_part( std::string(
"d") , 0 );
64 Part &pe = metadata.declare_part( std::string(
"e") , 0 );
65 Part &pf = metadata.declare_part( std::string(
"f") , 0 );
66 Part &pg = metadata.declare_part( std::string(
"g") , 0 );
67 Part &ph = metadata.declare_part( std::string(
"h") , 0 );
69 metadata_committed.commit();
72 std::string test_string =
"this_part_does_not_exist";
73 STKUNIT_ASSERT_THROW( metadata_committed.get_part(test_string,
"test_throw"),std::runtime_error);
76 STKUNIT_ASSERT( metadata.get_part(std::string(
"a"),
"do_not_throw"));
79 metadata.declare_part_relation( pe,stencil_test_function, pg);
81 part_vector.push_back(& pa);
82 part_vector.push_back(& pb);
83 part_vector.push_back(& pc);
84 part_vector.push_back(& pd);
87 metadata.declare_part(part_vector);
90 STKUNIT_ASSERT_THROW( metadata.declare_part_subset( pe, pe), std::runtime_error);
93 STKUNIT_ASSERT_THROW( metadata.declare_part_relation( pg,stencil_test_function, ph), std::logic_error);
96 STKUNIT_ASSERT_THROW( metadata.declare_part_relation( pe,NULL, pe), std::runtime_error);
99 metadata.declare_part_subset( pd, pf);
100 STKUNIT_ASSERT_THROW( metadata.declare_part_relation( pd,stencil_test_function, pf), std::runtime_error);
105 STKUNIT_UNIT_TEST( UnitTestMetaData, rankHigherThanDefined )
108 const int spatial_dimension = 3;
109 const std::vector<std::string> & rank_names = stk_classic::mesh::fem::entity_rank_names(spatial_dimension);
113 const std::string& i_name2 = metadata.entity_rank_name( i );
115 STKUNIT_ASSERT( i_name2 == rank_names[i] );
117 EntityRank one_rank_higher_than_defined = rank_names.size();
119 STKUNIT_ASSERT_THROW(
120 metadata.entity_rank_name( one_rank_higher_than_defined ),
125 STKUNIT_UNIT_TEST( UnitTestMetaData, testEntityRepository )
127 static const size_t spatial_dimension = 3;
136 std::vector<stk_classic::mesh::Part *> add_part;
137 add_part.push_back ( &part );
144 bulk.modification_begin();
147 for ( id_base = 0 ; id_base < 97 ; ++id_base )
149 int new_id = size * id_base + rank;
150 bulk.declare_entity( 0 , new_id+1 , add_part );
153 int new_id = size * (++id_base) + rank;
159 bool use_memory_pool =
false;
160 stk_classic::mesh::impl::EntityRepository e(use_memory_pool);
162 e.comm_clear( elem );
164 e.comm_clear_ghosting( elem );
168 bulk.modification_end();
170 STKUNIT_ASSERT_FALSE(e.erase_ghosting(elem, ghost));
172 const stk_classic::mesh::EntityCommInfo comm_info( ghost.
ordinal() , 0 );
174 STKUNIT_ASSERT_FALSE(e.erase_comm_info(elem, comm_info));
176 STKUNIT_ASSERT(e.insert_comm_info(elem, comm_info));
195 catch(
const std::exception & x ) {
197 std::cout <<
"UnitTestMetaData CORRECTLY caught error for : "
202 throw std::runtime_error(
"UnitTestMetaData FAILED to catch error for get_entity - invalid key");
207 STKUNIT_UNIT_TEST( UnitTestMetaData, noEntityTypes )
210 std::vector<std::string> empty_names;
211 STKUNIT_ASSERT_THROW(
216 STKUNIT_UNIT_TEST( UnitTestMetaData, declare_part_with_rank )
219 const int spatial_dimension = 3;
220 MetaData metadata(stk_classic::mesh::fem::entity_rank_names(spatial_dimension));
221 metadata.declare_part(
"foo");
222 STKUNIT_ASSERT_NO_THROW(metadata.declare_part(
"foo",1));
223 STKUNIT_ASSERT_NO_THROW(metadata.declare_part(
"foo",1));
226 STKUNIT_ASSERT_THROW(metadata.declare_part(
"foo",2),std::runtime_error);
229 metadata.declare_part(
"foo");
232 STKUNIT_UNIT_TEST( UnitTestMetaData, declare_attribute_no_delete )
235 const CellTopologyData * singleton = NULL;
236 const int spatial_dimension = 3;
237 MetaData metadata(stk_classic::mesh::fem::entity_rank_names(spatial_dimension));
238 Part &pa = metadata.declare_part( std::string(
"a") , 0 );
239 metadata.declare_attribute_no_delete( pa, singleton);
unsigned ordinal() const
Ordinal to identify the ghosting subset.
Data for ghosting mesh entities.
Integer type for the entity keys, which is an encoding of the entity type and entity identifier...
An application-defined subset of a problem domain.
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...
A defined entity-relationship between parts. An internal class that should never need to be directly...
std::vector< Part * > PartVector
Collections of parts are frequently maintained as a vector of Part pointers.