libMesh
Public Member Functions | Protected Member Functions | List of all members
ExtraIntegersTest Class Reference
Inheritance diagram for ExtraIntegersTest:
[legend]

Public Member Functions

 CPPUNIT_TEST_SUITE (ExtraIntegersTest)
 The goal of this test is to verify the ability to add extra integer storage to a Mesh object, then set and query those extra integers in the objects within the mesh. More...
 
 CPPUNIT_TEST (testExtraIntegersEdge2)
 
 CPPUNIT_TEST (testExtraIntegersTri6)
 
 CPPUNIT_TEST (testExtraIntegersCheckpointEdge3)
 
 CPPUNIT_TEST (testExtraIntegersCheckpointHex8)
 
 CPPUNIT_TEST_SUITE_END ()
 
void setUp ()
 
void tearDown ()
 
void testExtraIntegersEdge2 ()
 
void testExtraIntegersTri6 ()
 
void testExtraIntegersCheckpointEdge3 ()
 
void testExtraIntegersCheckpointHex8 ()
 

Protected Member Functions

std::array< unsigned int, 6 > build_mesh (Mesh &mesh, ElemType elem_type, unsigned int n_elem_per_side)
 
void test_and_set_initial_data (Mesh &mesh, std::array< unsigned int, 6 > ini)
 
void test_final_integers (Mesh &mesh, unsigned int i1)
 
void test_helper (ElemType elem_type, unsigned int n_elem_per_side)
 
void checkpoint_helper (ElemType elem_type, unsigned int n_elem_per_side, bool binary)
 

Detailed Description

Definition at line 14 of file extra_integers.C.

Member Function Documentation

◆ build_mesh()

std::array<unsigned int, 6> ExtraIntegersTest::build_mesh ( Mesh mesh,
ElemType  elem_type,
unsigned int  n_elem_per_side 
)
inlineprotected

Definition at line 37 of file extra_integers.C.

38  {
39  // Request some extra integers before building
40  unsigned int i1 = mesh.add_elem_integer("i1");
41  unsigned int r1 = mesh.add_elem_datum<Real>("r1");
42  unsigned int ni1 = mesh.add_node_integer("ni1");
43  unsigned int ni2 = mesh.add_node_integer("ni2");
44  unsigned int nr1 = mesh.add_node_datum<Real>("nr1");
45  unsigned int nr2 = mesh.add_node_datum<Real>("nr2");
46 
47  const std::unique_ptr<Elem> test_elem = Elem::build(elem_type);
48  const unsigned int ymax = test_elem->dim() > 1;
49  const unsigned int zmax = test_elem->dim() > 2;
50  const unsigned int ny = ymax * n_elem_per_side;
51  const unsigned int nz = zmax * n_elem_per_side;
52 
54  n_elem_per_side,
55  ny,
56  nz,
57  0., 1.,
58  0., ymax,
59  0., zmax,
60  elem_type);
61  return {i1, r1, ni1, ni2, nr1, nr2};
62  }

References libMesh::MeshBase::add_elem_datum(), libMesh::MeshBase::add_elem_integer(), libMesh::MeshBase::add_node_datum(), libMesh::MeshBase::add_node_integer(), libMesh::Elem::build(), libMesh::MeshTools::Generation::build_cube(), mesh, and libMesh::Real.

◆ checkpoint_helper()

void ExtraIntegersTest::checkpoint_helper ( ElemType  elem_type,
unsigned int  n_elem_per_side,
bool  binary 
)
inlineprotected

Definition at line 157 of file extra_integers.C.

158  {
160 
161  std::array<unsigned int, 6> ini = build_mesh(mesh, elem_type, n_elem_per_side);
162  const unsigned int i1 = ini[0], ni1 = ini[2], ni2 = ini[3];
163 
165 
166  const std::string filename =
167  std::string("extra_integers.cp") + (binary ? "r" : "a");
168 
169  mesh.write(filename);
170 
171  TestCommWorld->barrier();
172 
173  Mesh mesh2(*TestCommWorld);
174 
175  mesh2.read(filename);
176 
177  // Make sure the integers got transferred to the second mesh
178  CPPUNIT_ASSERT_EQUAL(i1, mesh2.add_elem_integer("i1"));
179  CPPUNIT_ASSERT_EQUAL(ni1, mesh2.add_node_integer("ni1"));
180  CPPUNIT_ASSERT_EQUAL(ni2, mesh2.add_node_integer("ni2"));
181 
182  // Make sure we didn't screw up any extra integers thereby.
183  test_final_integers(mesh2, i1);
184  }

References libMesh::MeshBase::add_elem_integer(), libMesh::MeshBase::add_node_integer(), mesh, libMesh::UnstructuredMesh::read(), TestCommWorld, and libMesh::MeshBase::write().

◆ CPPUNIT_TEST() [1/4]

ExtraIntegersTest::CPPUNIT_TEST ( testExtraIntegersCheckpointEdge3  )

◆ CPPUNIT_TEST() [2/4]

ExtraIntegersTest::CPPUNIT_TEST ( testExtraIntegersCheckpointHex8  )

◆ CPPUNIT_TEST() [3/4]

ExtraIntegersTest::CPPUNIT_TEST ( testExtraIntegersEdge2  )

◆ CPPUNIT_TEST() [4/4]

ExtraIntegersTest::CPPUNIT_TEST ( testExtraIntegersTri6  )

◆ CPPUNIT_TEST_SUITE()

ExtraIntegersTest::CPPUNIT_TEST_SUITE ( ExtraIntegersTest  )

The goal of this test is to verify the ability to add extra integer storage to a Mesh object, then set and query those extra integers in the objects within the mesh.

◆ CPPUNIT_TEST_SUITE_END()

ExtraIntegersTest::CPPUNIT_TEST_SUITE_END ( )

◆ setUp()

void ExtraIntegersTest::setUp ( )
inline

Definition at line 187 of file extra_integers.C.

187 {}

◆ tearDown()

void ExtraIntegersTest::tearDown ( )
inline

Definition at line 189 of file extra_integers.C.

189 {}

◆ test_and_set_initial_data()

void ExtraIntegersTest::test_and_set_initial_data ( Mesh mesh,
std::array< unsigned int, 6 >  ini 
)
inlineprotected

Definition at line 66 of file extra_integers.C.

67  {
68  const unsigned int i1 = ini[0],
69  r1 = ini[1],
70  ni1 = ini[2],
71  ni2 = ini[3],
72  nr1 = ini[4];
73  for (const auto & elem : mesh.element_ptr_range())
74  {
75  const unsigned int expected_extra_ints =
76  2 + (sizeof(Real)-1)/sizeof(dof_id_type);
77  CPPUNIT_ASSERT_EQUAL(elem->n_extra_integers(), expected_extra_ints);
78  CPPUNIT_ASSERT_EQUAL(elem->get_extra_integer(i1), DofObject::invalid_id);
79  elem->set_extra_integer(i1, dof_id_type(elem->point(0)(0)*100));
80  CPPUNIT_ASSERT_EQUAL(elem->get_extra_integer(i1), dof_id_type(elem->point(0)(0)*100));
81  elem->set_extra_datum<Real>(r1, elem->point(0)(0)*1000);
82  CPPUNIT_ASSERT_EQUAL(elem->get_extra_datum<Real>(r1), elem->point(0)(0)*1000);
83  }
84 
85  for (const auto & node : mesh.node_ptr_range())
86  {
87  const unsigned int expected_extra_ints =
88  4 + (sizeof(Real)-1)/sizeof(dof_id_type)*2;
89  CPPUNIT_ASSERT_EQUAL(node->n_extra_integers(), expected_extra_ints);
90  CPPUNIT_ASSERT_EQUAL(node->get_extra_integer(ni1), DofObject::invalid_id);
91  CPPUNIT_ASSERT_EQUAL(node->get_extra_integer(ni2), DofObject::invalid_id);
92  node->set_extra_datum<Real>(nr1, (*node)(0)*1000);
93  CPPUNIT_ASSERT_EQUAL(node->get_extra_datum<Real>(nr1), (*node)(0)*1000);
94  }
95 
96  }

References libMesh::MeshBase::element_ptr_range(), libMesh::DofObject::invalid_id, mesh, libMesh::MeshBase::node_ptr_range(), and libMesh::Real.

◆ test_final_integers()

void ExtraIntegersTest::test_final_integers ( Mesh mesh,
unsigned int  i1 
)
inlineprotected

Definition at line 99 of file extra_integers.C.

100  {
101  // Make sure old (level 0) elements have the same integers and any new
102  // elements have inherited their ancestors' settings
103  for (const auto & elem : mesh.element_ptr_range())
104  {
105  const Elem * top_parent = elem;
106 #ifdef LIBMESH_ENABLE_AMR
107  top_parent = elem->top_parent();
108 
109  if (!elem->level())
110 #endif
111  for (auto & node : elem->node_ref_range())
112  {
113  const unsigned int expected_extra_ints =
114  4 + (sizeof(Real)-1)/sizeof(dof_id_type)*2;
115  CPPUNIT_ASSERT_EQUAL(node.n_extra_integers(), expected_extra_ints);
116  }
117 
118  const unsigned int expected_extra_ints =
119  2 + (sizeof(Real)-1)/sizeof(dof_id_type);
120  CPPUNIT_ASSERT_EQUAL(elem->n_extra_integers(), expected_extra_ints);
121  CPPUNIT_ASSERT_EQUAL(elem->get_extra_integer(i1), dof_id_type(top_parent->point(0)(0)*100));
122  }
123  }

References libMesh::MeshBase::element_ptr_range(), mesh, libMesh::Elem::point(), libMesh::Real, and libMesh::Elem::top_parent().

◆ test_helper()

void ExtraIntegersTest::test_helper ( ElemType  elem_type,
unsigned int  n_elem_per_side 
)
inlineprotected

Definition at line 126 of file extra_integers.C.

127  {
129 
130  std::array<unsigned int, 6> ini = build_mesh(mesh, elem_type, n_elem_per_side);
131  const unsigned int i1 = ini[0],
132  ni1 = ini[2],
133  ni2 = ini[3];
134 
136 
137  // Force (in parallel) a different partitioning - we'll simply put
138  // everything on rank 0, which hopefully is not what our default
139  // partitioner did!
140  mesh.partition(1);
141 
142  CPPUNIT_ASSERT_EQUAL(i1, mesh.add_elem_integer("i1"));
143  CPPUNIT_ASSERT_EQUAL(ni1, mesh.add_node_integer("ni1"));
144  CPPUNIT_ASSERT_EQUAL(ni2, mesh.add_node_integer("ni2"));
145 
146  // Make sure we didn't screw up any extra integers thereby.
148 
149 #ifdef LIBMESH_ENABLE_AMR
150  MeshRefinement mr(mesh);
151  mr.uniformly_refine(1);
152 
154 #endif
155  }

References libMesh::MeshBase::add_elem_integer(), libMesh::MeshBase::add_node_integer(), mesh, libMesh::MeshBase::partition(), TestCommWorld, and libMesh::MeshRefinement::uniformly_refine().

◆ testExtraIntegersCheckpointEdge3()

void ExtraIntegersTest::testExtraIntegersCheckpointEdge3 ( )
inline

Definition at line 195 of file extra_integers.C.

195 { checkpoint_helper(EDGE3, 5, false); }

References libMesh::EDGE3.

◆ testExtraIntegersCheckpointHex8()

void ExtraIntegersTest::testExtraIntegersCheckpointHex8 ( )
inline

Definition at line 197 of file extra_integers.C.

197 { checkpoint_helper(HEX8, 2, true); }

References libMesh::HEX8.

◆ testExtraIntegersEdge2()

void ExtraIntegersTest::testExtraIntegersEdge2 ( )
inline

Definition at line 191 of file extra_integers.C.

191 { test_helper(EDGE2, 5); }

References libMesh::EDGE2.

◆ testExtraIntegersTri6()

void ExtraIntegersTest::testExtraIntegersTri6 ( )
inline

Definition at line 193 of file extra_integers.C.

193 { test_helper(TRI6, 4); }

References libMesh::TRI6.


The documentation for this class was generated from the following file:
libMesh::dof_id_type
uint8_t dof_id_type
Definition: id_types.h:67
libMesh::Mesh
The Mesh class is a thin wrapper, around the ReplicatedMesh class by default.
Definition: mesh.h:50
ExtraIntegersTest::test_final_integers
void test_final_integers(Mesh &mesh, unsigned int i1)
Definition: extra_integers.C:99
libMesh::HEX8
Definition: enum_elem_type.h:47
libMesh::MeshBase::write
virtual void write(const std::string &name)=0
ExtraIntegersTest::checkpoint_helper
void checkpoint_helper(ElemType elem_type, unsigned int n_elem_per_side, bool binary)
Definition: extra_integers.C:157
libMesh::MeshTools::Generation::build_cube
void build_cube(UnstructuredMesh &mesh, const unsigned int nx=0, const unsigned int ny=0, const unsigned int nz=0, const Real xmin=0., const Real xmax=1., const Real ymin=0., const Real ymax=1., const Real zmin=0., const Real zmax=1., const ElemType type=INVALID_ELEM, const bool gauss_lobatto_grid=false)
Builds a (elements) cube.
Definition: mesh_generation.C:298
ExtraIntegersTest::build_mesh
std::array< unsigned int, 6 > build_mesh(Mesh &mesh, ElemType elem_type, unsigned int n_elem_per_side)
Definition: extra_integers.C:37
mesh
MeshBase & mesh
Definition: mesh_communication.C:1257
libMesh::MeshBase::add_elem_datum
unsigned int add_elem_datum(const std::string &name, bool allocate_data=true)
Register a datum (of type T) to be added to each element in the mesh.
Definition: mesh_base.h:1973
libMesh::Elem::point
const Point & point(const unsigned int i) const
Definition: elem.h:1955
libMesh::MeshBase::element_ptr_range
virtual SimpleRange< element_iterator > element_ptr_range()=0
libMesh::MeshRefinement
Implements (adaptive) mesh refinement algorithms for a MeshBase.
Definition: mesh_refinement.h:61
libMesh::MeshBase::node_ptr_range
virtual SimpleRange< node_iterator > node_ptr_range()=0
TestCommWorld
libMesh::Parallel::Communicator * TestCommWorld
Definition: driver.C:111
libMesh::MeshBase::add_elem_integer
unsigned int add_elem_integer(const std::string &name, bool allocate_data=true)
Register an integer datum (of type dof_id_type) to be added to each element in the mesh.
Definition: mesh_base.C:176
libMesh::MeshBase::add_node_integer
unsigned int add_node_integer(const std::string &name, bool allocate_data=true)
Register an integer datum (of type dof_id_type) to be added to each node in the mesh.
Definition: mesh_base.C:247
ExtraIntegersTest::test_and_set_initial_data
void test_and_set_initial_data(Mesh &mesh, std::array< unsigned int, 6 > ini)
Definition: extra_integers.C:66
libMesh::TRI6
Definition: enum_elem_type.h:40
ExtraIntegersTest::test_helper
void test_helper(ElemType elem_type, unsigned int n_elem_per_side)
Definition: extra_integers.C:126
libMesh::EDGE3
Definition: enum_elem_type.h:36
libMesh::MeshBase::add_node_datum
unsigned int add_node_datum(const std::string &name, bool allocate_data=true)
Register a datum (of type T) to be added to each node in the mesh.
Definition: mesh_base.h:2011
libMesh::Elem
This is the base class from which all geometric element types are derived.
Definition: elem.h:100
libMesh::Real
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Definition: libmesh_common.h:121
libMesh::EDGE2
Definition: enum_elem_type.h:35
libMesh::MeshBase::partition
virtual void partition(const unsigned int n_parts)
Call the default partitioner (currently metis_partition()).
Definition: mesh_base.C:599
libMesh::Elem::top_parent
const Elem * top_parent() const
Definition: elem.h:2460