Go to the documentation of this file. 1 #include <libmesh/elem.h>
3 #include <libmesh/cell_hex20.h>
4 #include <libmesh/cell_hex27.h>
5 #include <libmesh/cell_hex8.h>
6 #include <libmesh/cell_inf_hex16.h>
7 #include <libmesh/cell_inf_hex18.h>
8 #include <libmesh/cell_inf_hex8.h>
9 #include <libmesh/cell_inf_prism12.h>
10 #include <libmesh/cell_inf_prism6.h>
11 #include <libmesh/cell_prism15.h>
12 #include <libmesh/cell_prism18.h>
13 #include <libmesh/cell_prism6.h>
14 #include <libmesh/cell_pyramid13.h>
15 #include <libmesh/cell_pyramid14.h>
16 #include <libmesh/cell_pyramid5.h>
17 #include <libmesh/cell_tet10.h>
18 #include <libmesh/cell_tet4.h>
19 #include <libmesh/edge_edge2.h>
20 #include <libmesh/edge_edge3.h>
21 #include <libmesh/edge_edge4.h>
22 #include <libmesh/edge_inf_edge2.h>
23 #include <libmesh/face_inf_quad4.h>
24 #include <libmesh/face_inf_quad6.h>
25 #include <libmesh/face_quad4.h>
26 #include <libmesh/face_quad8.h>
27 #include <libmesh/face_quad9.h>
28 #include <libmesh/face_tri3.h>
29 #include <libmesh/face_tri6.h>
36 CPPUNIT_TEST( testIsNodeOnSide ); \
37 CPPUNIT_TEST( testNodesOnSide ); \
38 CPPUNIT_TEST( testSidePtr ); \
39 CPPUNIT_TEST( testSidePtrFill ); \
40 CPPUNIT_TEST( testBuildSidePtr ); \
41 CPPUNIT_TEST( testBuildSidePtrFill ); \
46 template <
typename ElemClass,
ElemType side_type,
47 unsigned short indexbegin,
unsigned short indexend>
52 std::vector<std::unique_ptr<Node>>
nodes;
58 for (
auto i : elem.node_index_range())
60 nodes.push_back(libmesh_make_unique<Node>(dummy, i));
61 elem.set_node(i) = nodes[i].get();
71 std::unique_ptr<Elem> side = elem.build_side_ptr(s);
72 for (
auto n : elem.node_index_range())
74 const Node * node = elem.node_ptr(n);
75 bool found_node =
false;
76 for (
auto sn : side->node_index_range())
77 if (node == side->node_ptr(sn))
83 if (elem.is_node_on_side(n, s))
85 CPPUNIT_ASSERT(found_node);
89 CPPUNIT_ASSERT(!found_node);
99 std::unique_ptr<Elem> side = elem.build_side_ptr(s);
100 std::vector<unsigned int> side_nodes = elem.nodes_on_side(s);
102 CPPUNIT_ASSERT_EQUAL(side_nodes.size(), std::size_t(side->n_nodes()));
104 for (
auto sn : side->node_index_range())
106 const Node * node = side->node_ptr(sn);
107 bool found_node =
false;
108 for (
auto si : side_nodes)
109 if (node == elem.node_ptr(si))
114 CPPUNIT_ASSERT(found_node);
123 std::unique_ptr<Elem> side = elem.side_ptr(s);
125 CPPUNIT_ASSERT(side->type() ==
132 std::unique_ptr<Elem> side;
136 elem.side_ptr(side, s);
138 CPPUNIT_ASSERT(side->type() ==
147 std::unique_ptr<Elem> side = elem.build_side_ptr(s);
149 CPPUNIT_ASSERT(side->type() == side_type);
155 std::unique_ptr<Elem> side;
159 elem.build_side_ptr(side, s);
160 std::unique_ptr<Elem> side_new = elem.build_side_ptr(s);
162 CPPUNIT_ASSERT(side->type() == side_type);
163 CPPUNIT_ASSERT(*side == *side_new);
170 #define INSTANTIATE_SIDETEST(elemclass, sidetype, indexbegin, indexend) \
171 class SideTest_##elemclass##_##sidetype##_##indexbegin##_##indexend : \
172 public SideTest<elemclass, sidetype, indexbegin, indexend> { \
174 CPPUNIT_TEST_SUITE( SideTest_##elemclass##_##sidetype##_##indexbegin##_##indexend ); \
176 CPPUNIT_TEST_SUITE_END(); \
179 CPPUNIT_TEST_SUITE_REGISTRATION( SideTest_##elemclass##_##sidetype##_##indexbegin##_##indexend );
210 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
226 #endif // LIBMESH_ENABLE_INFINITE_ELEMENTS
The QUAD9 is an element in 2D composed of 9 nodes.
void testBuildSidePtrFill()
The Tri6 is an element in 2D composed of 6 nodes.
The Prism18 is an element in 3D composed of 18 nodes.
The Pyramid13 is an element in 3D composed of 13 nodes, designed to interface with a QUAD8 element on...
The libMesh namespace provides an interface to certain functionality in the library.
The InfPrism6 is an infinite element in 3D composed of 6 nodes.
The InfHex18 is an infinite element in 3D composed of 18 nodes.
The Hex20 is an element in 3D composed of 20 nodes.
The Prism6 is an element in 3D composed of 6 nodes.
The INFQUAD4 is an infinite element in 2D composed of 4 nodes.
The Pyramid14 is an element in 3D composed of 14 nodes, designed to interface with a QUAD9 element on...
INSTANTIATE_SIDETEST(Hex20, QUAD8, 0, 6)
The IntRange templated class is intended to make it easy to loop over integers which are indices of a...
std::vector< std::unique_ptr< Node > > nodes
static ElemType first_order_equivalent_type(const ElemType et)
A Point defines a location in LIBMESH_DIM dimensional Real space.
The InfEdge2 is an infinite element in 1D composed of 2 nodes.
A Node is like a Point, but with more information.
The Pyramid5 is an element in 3D composed of 5 nodes.
The Tet4 is an element in 3D composed of 4 nodes.
The Edge3 is an element in 1D composed of 3 nodes.
The QUAD4 is an element in 2D composed of 4 nodes.
The InfPrism12 is an infinite element in 3D composed of 12 nodes.
The Hex8 is an element in 3D composed of 8 nodes.
The Tet10 is an element in 3D composed of 10 nodes.
The QUAD8 is an element in 2D composed of 8 nodes.
The Edge2 is an element in 1D composed of 2 nodes.
The Tri3 is an element in 2D composed of 3 nodes.
The Edge4 is an element in 1D composed of 4 nodes.
The Hex27 is an element in 3D composed of 27 nodes.
The InfHex8 is an infinite element in 3D composed of 8 nodes.
The INFQUAD6 is an infinite element in 2D composed of 6 nodes.
The Prism15 is an element in 3D composed of 15 nodes.
ElemType
Defines an enum for geometric element types.
The InfHex16 is an infinite element in 3D composed of 16 nodes.