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

Public Member Functions

 CPPUNIT_TEST_SUITE (SlitMeshTest)
 The goal of this test is to ensure that a 2D mesh with nodes overlapping on opposite sides of an internal, "slit" edge is usable. More...
 
 CPPUNIT_TEST (testMesh)
 
 CPPUNIT_TEST_SUITE_END ()
 
void setUp ()
 
void tearDown ()
 
void testMesh ()
 

Protected Member Functions

void build_mesh ()
 

Protected Attributes

Mesh_mesh
 

Detailed Description

Definition at line 61 of file slit_mesh_test.C.

Member Function Documentation

◆ build_mesh()

void SlitMeshTest::build_mesh ( )
inlineprotected

Definition at line 79 of file slit_mesh_test.C.

80  {
81  _mesh = new Mesh(*TestCommWorld);
82 
83  // (0,1) (1,1) (2,1)
84  // x---------------x---------------x
85  // | | |
86  // | | |
87  // | | |
88  // | | |
89  // | | |
90  // x---------------x---------------x
91  // (0,0) (1,0) (2,0)
92  // | | |
93  // | | |
94  // | | |
95  // | | |
96  // x---------------x---------------x
97  // (0,-1) (1,-1) (2,-1)
98 
100 
101  _mesh->add_point( Point(0.0, 0.0), 0 );
102  _mesh->add_point( Point(1.0, 0.0), 1 );
103  _mesh->add_point( Point(1.0, 1.0), 2 );
104  _mesh->add_point( Point(0.0, 1.0), 3 );
105  _mesh->add_point( Point(0.0,-1.0), 4 );
106  _mesh->add_point( Point(1.0,-1.0), 5 );
107  _mesh->add_point( Point(1.0, 0.0), 6 );
108  _mesh->add_point( Point(2.0, 0.0), 7 );
109  _mesh->add_point( Point(2.0, 1.0), 8 );
110  _mesh->add_point( Point(2.0,-1.0), 9 );
111 
112  {
113  Elem* elem_top_left = new Quad4;
114  elem_top_left->set_node(0) = _mesh->node_ptr(0);
115  elem_top_left->set_node(1) = _mesh->node_ptr(1);
116  elem_top_left->set_node(2) = _mesh->node_ptr(2);
117  elem_top_left->set_node(3) = _mesh->node_ptr(3);
118  elem_top_left->set_id() = 0;
119  _mesh->add_elem(elem_top_left);
120 
121  Elem* elem_bottom_left = new Quad4;
122  elem_bottom_left->set_node(0) = _mesh->node_ptr(4);
123  elem_bottom_left->set_node(1) = _mesh->node_ptr(5);
124  elem_bottom_left->set_node(2) = _mesh->node_ptr(6);
125  elem_bottom_left->set_node(3) = _mesh->node_ptr(0);
126  elem_bottom_left->set_id() = 1;
127  _mesh->add_elem(elem_bottom_left);
128 
129  Elem* elem_top_right = new Quad4;
130  elem_top_right->set_node(0) = _mesh->node_ptr(1);
131  elem_top_right->set_node(1) = _mesh->node_ptr(7);
132  elem_top_right->set_node(2) = _mesh->node_ptr(8);
133  elem_top_right->set_node(3) = _mesh->node_ptr(2);
134  elem_top_right->set_id() = 2;
135  _mesh->add_elem(elem_top_right);
136 
137  Elem* elem_bottom_right = new Quad4;
138  elem_bottom_right->set_node(0) = _mesh->node_ptr(5);
139  elem_bottom_right->set_node(1) = _mesh->node_ptr(9);
140  elem_bottom_right->set_node(2) = _mesh->node_ptr(7);
141  elem_bottom_right->set_node(3) = _mesh->node_ptr(6);
142  elem_bottom_right->set_id() = 3;
143  _mesh->add_elem(elem_bottom_right);
144  }
145 
146  // libMesh shouldn't renumber, or our based-on-initial-id
147  // assertions later may fail.
148  _mesh->allow_renumbering(false);
149 
151  }

References libMesh::DistributedMesh::add_elem(), libMesh::DistributedMesh::add_point(), libMesh::MeshBase::allow_renumbering(), libMesh::DistributedMesh::node_ptr(), libMesh::MeshBase::prepare_for_use(), libMesh::DofObject::set_id(), libMesh::MeshBase::set_mesh_dimension(), libMesh::Elem::set_node(), and TestCommWorld.

◆ CPPUNIT_TEST()

SlitMeshTest::CPPUNIT_TEST ( testMesh  )

◆ CPPUNIT_TEST_SUITE()

SlitMeshTest::CPPUNIT_TEST_SUITE ( SlitMeshTest  )

The goal of this test is to ensure that a 2D mesh with nodes overlapping on opposite sides of an internal, "slit" edge is usable.

◆ CPPUNIT_TEST_SUITE_END()

SlitMeshTest::CPPUNIT_TEST_SUITE_END ( )

◆ setUp()

void SlitMeshTest::setUp ( )
inline

Definition at line 154 of file slit_mesh_test.C.

155  {
156 #if LIBMESH_DIM > 1
157  this->build_mesh();
158 #endif
159  }

◆ tearDown()

void SlitMeshTest::tearDown ( )
inline

Definition at line 161 of file slit_mesh_test.C.

162  {
163  delete _mesh;
164  }

◆ testMesh()

void SlitMeshTest::testMesh ( )
inline

Definition at line 166 of file slit_mesh_test.C.

167  {
168  // There'd better be 4 elements
169  CPPUNIT_ASSERT_EQUAL( (dof_id_type)4, _mesh->n_elem() );
170 
171  // There'd better still be a full 10 nodes
172  CPPUNIT_ASSERT_EQUAL( (dof_id_type)10, _mesh->n_nodes() );
173 
174  /* The middle nodes should still be distinct between the top and
175  * bottom elements */
176  if (_mesh->query_elem_ptr(0) && _mesh->query_elem_ptr(1))
177  CPPUNIT_ASSERT( _mesh->elem_ref(0).node_id(1) != _mesh->elem_ref(1).node_id(2) );
178  if (_mesh->query_elem_ptr(2) && _mesh->query_elem_ptr(3))
179  CPPUNIT_ASSERT( _mesh->elem_ref(2).node_id(0) != _mesh->elem_ref(3).node_id(3) );
180 
181  /* The middle nodes should still be shared between left and right
182  * elements on top and bottom */
183  if (_mesh->query_elem_ptr(0) && _mesh->query_elem_ptr(2))
184  CPPUNIT_ASSERT_EQUAL( _mesh->elem_ref(0).node_id(1),
185  _mesh->elem_ref(2).node_id(0) );
186  if (_mesh->query_elem_ptr(1) && _mesh->query_elem_ptr(3))
187  CPPUNIT_ASSERT_EQUAL( _mesh->elem_ref(1).node_id(2),
188  _mesh->elem_ref(3).node_id(3) );
189  }

References libMesh::MeshBase::elem_ref(), libMesh::DistributedMesh::n_elem(), libMesh::DistributedMesh::n_nodes(), libMesh::Elem::node_id(), and libMesh::DistributedMesh::query_elem_ptr().

Member Data Documentation

◆ _mesh

Mesh* SlitMeshTest::_mesh
protected

Definition at line 77 of file slit_mesh_test.C.


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
libMesh::DofObject::set_id
dof_id_type & set_id()
Definition: dof_object.h:776
libMesh::DistributedMesh::add_point
virtual Node * add_point(const Point &p, const dof_id_type id=DofObject::invalid_id, const processor_id_type proc_id=DofObject::invalid_processor_id) override
functions for adding /deleting nodes elements.
Definition: distributed_mesh.C:625
libMesh::MeshBase::elem_ref
virtual const Elem & elem_ref(const dof_id_type i) const
Definition: mesh_base.h:521
libMesh::DistributedMesh::n_nodes
virtual dof_id_type n_nodes() const override
Definition: distributed_mesh.h:229
libMesh::DistributedMesh::n_elem
virtual dof_id_type n_elem() const override
Definition: distributed_mesh.h:232
TestCommWorld
libMesh::Parallel::Communicator * TestCommWorld
Definition: driver.C:111
libMesh::Point
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:38
libMesh::DistributedMesh::add_elem
virtual Elem * add_elem(Elem *e) override
Add elem e to the end of the element array.
Definition: distributed_mesh.C:436
SlitMeshTest::build_mesh
void build_mesh()
Definition: slit_mesh_test.C:79
libMesh::Quad4
The QUAD4 is an element in 2D composed of 4 nodes.
Definition: face_quad4.h:51
SlitMeshTest::_mesh
Mesh * _mesh
Definition: slit_mesh_test.C:77
libMesh::Elem::set_node
virtual Node *& set_node(const unsigned int i)
Definition: elem.h:2059
libMesh::DistributedMesh::query_elem_ptr
virtual const Elem * query_elem_ptr(const dof_id_type i) const override
Definition: distributed_mesh.C:404
libMesh::Elem
This is the base class from which all geometric element types are derived.
Definition: elem.h:100
libMesh::MeshBase::allow_renumbering
void allow_renumbering(bool allow)
If false is passed in then this mesh will no longer be renumbered when being prepared for use.
Definition: mesh_base.h:1025
libMesh::Elem::node_id
dof_id_type node_id(const unsigned int i) const
Definition: elem.h:1977
libMesh::MeshBase::prepare_for_use
void prepare_for_use(const bool skip_renumber_nodes_and_elements=false, const bool skip_find_neighbors=false)
Prepare a newly ecreated (or read) mesh for use.
Definition: mesh_base.C:318
libMesh::MeshBase::set_mesh_dimension
void set_mesh_dimension(unsigned char d)
Resets the logical dimension of the mesh.
Definition: mesh_base.h:218
libMesh::DistributedMesh::node_ptr
virtual const Node * node_ptr(const dof_id_type i) const override
Definition: distributed_mesh.C:328