13 #include <stk_util/unit_test_support/stk_utest_macros.hpp> 15 #include <stk_util/parallel/Parallel.hpp> 17 #include <stk_mesh/base/BulkData.hpp> 18 #include <stk_mesh/base/Field.hpp> 19 #include <stk_mesh/base/FieldData.hpp> 20 #include <stk_mesh/base/Comm.hpp> 21 #include <stk_mesh/base/EntityComm.hpp> 23 #include <stk_mesh/fem/FEMMetaData.hpp> 24 #include <stk_mesh/fem/CoordinateSystems.hpp> 27 using stk_classic::mesh::EntityRank;
31 using stk_classic::mesh::EntityId;
36 const EntityRank NODE_RANK = FEMMetaData::NODE_RANK;
38 STKUNIT_UNIT_TEST(UnitTestFieldDataInitVal, test_scalar_field)
45 MPI_Barrier( MPI_COMM_WORLD );
48 const unsigned spatial_dim = 2;
51 const unsigned num_states = 1;
54 const double initial_value = 99.9;
60 BulkData mesh(FEMMetaData::get_meta_data(meta_data), pm);
61 unsigned p_rank = mesh.parallel_rank();
64 mesh.modification_begin();
69 EntityId node_id = p_rank+1;
71 Entity & node = mesh.declare_entity(NODE_RANK, node_id, empty_parts);
73 mesh.modification_end();
79 STKUNIT_ASSERT_EQUAL( *data_ptr, initial_value );
82 STKUNIT_UNIT_TEST(UnitTestFieldDataInitVal, test_vector_field)
91 MPI_Barrier( MPI_COMM_WORLD );
94 const unsigned spatial_dim = 2;
97 const unsigned num_states = 1;
100 const double initial_value[stk_classic::mesh::Cartesian2d::Size] = { 50.0, 99.0 };
106 BulkData mesh(FEMMetaData::get_meta_data(meta_data), pm);
107 unsigned p_rank = mesh.parallel_rank();
110 mesh.modification_begin();
115 EntityId node_id = p_rank+1;
117 Entity & node = mesh.declare_entity(NODE_RANK, node_id, empty_parts);
119 mesh.modification_end();
125 STKUNIT_ASSERT_EQUAL( data_ptr[0], initial_value[0] );
126 STKUNIT_ASSERT_EQUAL( data_ptr[1], initial_value[1] );
129 STKUNIT_UNIT_TEST(UnitTestFieldDataInitVal, test_vector_field_move_bucket)
140 MPI_Barrier( MPI_COMM_WORLD );
143 const unsigned spatial_dim = 2;
146 const unsigned num_states = 1;
149 const double initial_value[stk_classic::mesh::Cartesian2d::Size] = { 50.0, 99.0 };
151 Part& node_part = meta_data.declare_part<shards::Node>(
"node_part");
157 BulkData mesh(FEMMetaData::get_meta_data(meta_data), pm);
158 unsigned p_rank = mesh.parallel_rank();
161 mesh.modification_begin();
166 EntityId node_id = p_rank+1;
168 Entity & node = mesh.declare_entity(NODE_RANK, node_id, empty_parts);
174 node_part_vec.push_back(&node_part);
175 mesh.change_entity_parts(node, node_part_vec);
177 mesh.modification_end();
181 STKUNIT_ASSERT_NE(&old_bucket, &new_bucket);
187 STKUNIT_ASSERT_EQUAL( data_ptr[0], initial_value[0] );
188 STKUNIT_ASSERT_EQUAL( data_ptr[1], initial_value[1] );
191 STKUNIT_UNIT_TEST(UnitTestFieldDataInitVal, test_multi_state_vector_field)
200 MPI_Barrier( MPI_COMM_WORLD );
203 const unsigned spatial_dim = 2;
206 const unsigned num_states = 2;
209 const double initial_value[stk_classic::mesh::Cartesian2d::Size] = { 50.0, 99.0 };
215 BulkData mesh(FEMMetaData::get_meta_data(meta_data), pm);
216 unsigned p_rank = mesh.parallel_rank();
219 mesh.modification_begin();
224 EntityId node_id = p_rank+1;
226 Entity & node = mesh.declare_entity(NODE_RANK, node_id, empty_parts);
228 mesh.modification_end();
240 STKUNIT_ASSERT_EQUAL( data_ptr_new[0], initial_value[0] );
241 STKUNIT_ASSERT_EQUAL( data_ptr_new[1], initial_value[1] );
243 STKUNIT_ASSERT_EQUAL( data_ptr_old[0], initial_value[0] );
244 STKUNIT_ASSERT_EQUAL( data_ptr_old[1], initial_value[1] );
unsigned number_of_states() const
Number of states of this field.
FieldTraits< field_type >::data_type * field_data(const field_type &f, const Bucket::iterator i)
Pointer to the field data array.
Newest state of a field with two states.
Bucket & bucket() const
The bucket which holds this mesh entity's field data.
field_type & put_field(field_type &field, EntityRank entity_rank, const Part &part, const void *init_value=NULL)
Declare a field to exist for a given entity type and Part.
Field with defined data type and multi-dimensions (if any)
An application-defined subset of a problem domain.
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...
Previous state of a field with two states.
Field & field_of_state(FieldState input_state) const
Query this field for a given field state.
std::vector< Part *> PartVector
Collections of parts are frequently maintained as a vector of Part pointers.
A container for the field data of a homogeneous collection of entities.