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);
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...
unsigned ordinal() const
Ordinal to identify the ghosting subset.
std::vector< Part *> PartVector
Collections of parts are frequently maintained as a vector of Part pointers.