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

Public Member Functions

 CPPUNIT_TEST_SUITE (SlitMeshRefinedMeshTest)
 The goal of this test is the same as the previous, but now we do a uniform refinement and make sure the result mesh is consistent. More...
 
 CPPUNIT_TEST (testMesh)
 
 CPPUNIT_TEST_SUITE_END ()
 
void setUp ()
 
void testMesh ()
 
 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...
 
void tearDown ()
 

Protected Member Functions

void build_mesh ()
 

Protected Attributes

Mesh_mesh
 

Detailed Description

Definition at line 193 of file slit_mesh_test.C.

Member Function Documentation

◆ build_mesh()

void SlitMeshTest::build_mesh ( )
inlineprotectedinherited

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()

SlitMeshRefinedMeshTest::CPPUNIT_TEST ( testMesh  )

◆ CPPUNIT_TEST_SUITE() [1/2]

SlitMeshRefinedMeshTest::CPPUNIT_TEST_SUITE ( SlitMeshRefinedMeshTest  )

The goal of this test is the same as the previous, but now we do a uniform refinement and make sure the result mesh is consistent.

i.e. the new node shared between the 1D elements is the same as the node shared on the underlying quads, and so on.

◆ CPPUNIT_TEST_SUITE() [2/2]

SlitMeshTest::CPPUNIT_TEST_SUITE ( SlitMeshTest  )
inherited

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()

SlitMeshRefinedMeshTest::CPPUNIT_TEST_SUITE_END ( )

◆ setUp()

void SlitMeshRefinedMeshTest::setUp ( )
inline

Definition at line 212 of file slit_mesh_test.C.

213  {
214 #if LIBMESH_DIM > 1
215  this->build_mesh();
216 
217 #ifdef LIBMESH_ENABLE_AMR
218  MeshRefinement(*_mesh).uniformly_refine(1);
219 #endif
220 #endif
221  }

References libMesh::MeshRefinement::uniformly_refine().

◆ tearDown()

void SlitMeshTest::tearDown ( )
inlineinherited

Definition at line 161 of file slit_mesh_test.C.

162  {
163  delete _mesh;
164  }

◆ testMesh()

void SlitMeshRefinedMeshTest::testMesh ( )
inline

Definition at line 223 of file slit_mesh_test.C.

224  {
225 #ifdef LIBMESH_ENABLE_AMR
226  // We should have 20 total and 16 active elements.
227  CPPUNIT_ASSERT_EQUAL( (dof_id_type)20, _mesh->n_elem() );
228  CPPUNIT_ASSERT_EQUAL( (dof_id_type)16, _mesh->n_active_elem() );
229 
230  // We should have 28 nodes, not 25 or 26
231  CPPUNIT_ASSERT_EQUAL( (dof_id_type)28, _mesh->n_nodes() );
232 #endif
233  }

Member Data Documentation

◆ _mesh

Mesh* SlitMeshTest::_mesh
protectedinherited

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::MeshRefinement
Implements (adaptive) mesh refinement algorithms for a MeshBase.
Definition: mesh_refinement.h:61
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::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::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::MeshRefinement::uniformly_refine
void uniformly_refine(unsigned int n=1)
Uniformly refines the mesh n times.
Definition: mesh_refinement.C:1678
libMesh::DistributedMesh::n_active_elem
virtual dof_id_type n_active_elem() const override
Definition: distributed_mesh.C:1385
libMesh::DistributedMesh::node_ptr
virtual const Node * node_ptr(const dof_id_type i) const override
Definition: distributed_mesh.C:328