libMesh
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | Private Attributes | List of all members
SideTest< ElemClass, side_type, indexbegin, indexend > Class Template Reference
Inheritance diagram for SideTest< ElemClass, side_type, indexbegin, indexend >:
[legend]

Public Member Functions

void setUp ()
 
void tearDown ()
 
void testIsNodeOnSide ()
 
void testNodesOnSide ()
 
void testSidePtr ()
 
void testSidePtrFill ()
 
void testBuildSidePtr ()
 
void testBuildSidePtrFill ()
 

Protected Attributes

std::string libmesh_suite_name
 

Private Attributes

ElemClass elem
 
std::vector< std::unique_ptr< Node > > nodes
 

Detailed Description

template<typename ElemClass, ElemType side_type, unsigned short indexbegin, unsigned short indexend>
class SideTest< ElemClass, side_type, indexbegin, indexend >

Definition at line 52 of file side_test.C.

Member Function Documentation

◆ setUp()

template<typename ElemClass , ElemType side_type, unsigned short indexbegin, unsigned short indexend>
void SideTest< ElemClass, side_type, indexbegin, indexend >::setUp ( )
inline

Definition at line 62 of file side_test.C.

62 {
63 elem.set_id() = 0;
64#ifdef LIBMESH_ENABLE_AMR
65 // Do tests with an Elem having a non-default p_level to ensure
66 // that sides which are built have a matching p_level. p-refinement
67 // is only available if LIBMESH_ENABLE_AMR is defined.
68 elem.set_p_level(1);
69#endif
70 Point dummy;
71 for (auto i : elem.node_index_range())
72 {
73 nodes.push_back(std::make_unique<Node>(dummy, /*id=*/i));
74 elem.set_node(i, nodes[i].get());
75 }
76 }
std::vector< std::unique_ptr< Node > > nodes
Definition side_test.C:56
ElemClass elem
Definition side_test.C:55
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition point.h:40
const Elem & get(const ElemType type_in)

References SideTest< ElemClass, side_type, indexbegin, indexend >::elem, and SideTest< ElemClass, side_type, indexbegin, indexend >::nodes.

◆ tearDown()

template<typename ElemClass , ElemType side_type, unsigned short indexbegin, unsigned short indexend>
void SideTest< ElemClass, side_type, indexbegin, indexend >::tearDown ( )
inline

Definition at line 78 of file side_test.C.

78{}

◆ testBuildSidePtr()

template<typename ElemClass , ElemType side_type, unsigned short indexbegin, unsigned short indexend>
void SideTest< ElemClass, side_type, indexbegin, indexend >::testBuildSidePtr ( )
inline

Definition at line 164 of file side_test.C.

165 {
166 LOG_UNIT_TEST;
167
168 for (auto s : make_range(indexbegin, indexend))
169 {
170 std::unique_ptr<Elem> side = elem.build_side_ptr(s);
171
172 CPPUNIT_ASSERT(side->type() == side_type);
173 CPPUNIT_ASSERT(side->subdomain_id() == elem.subdomain_id());
174
175#ifdef LIBMESH_ENABLE_AMR
176 // p-refinement is only available if LIBMESH_ENABLE_AMR is defined.
177 CPPUNIT_ASSERT(side->p_level() == elem.p_level());
178#endif
179 }
180 }
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition int_range.h:176

References SideTest< ElemClass, side_type, indexbegin, indexend >::elem, and libMesh::make_range().

◆ testBuildSidePtrFill()

template<typename ElemClass , ElemType side_type, unsigned short indexbegin, unsigned short indexend>
void SideTest< ElemClass, side_type, indexbegin, indexend >::testBuildSidePtrFill ( )
inline

Definition at line 182 of file side_test.C.

183 {
184 LOG_UNIT_TEST;
185
186 std::unique_ptr<Elem> side;
187
188 for (auto s : make_range(indexbegin, indexend))
189 {
190 elem.build_side_ptr(side, s);
191 std::unique_ptr<Elem> side_new = elem.build_side_ptr(s);
192
193 CPPUNIT_ASSERT(side->type() == side_type);
194 CPPUNIT_ASSERT(*side == *side_new);
195 }
196 }

References SideTest< ElemClass, side_type, indexbegin, indexend >::elem, and libMesh::make_range().

◆ testIsNodeOnSide()

template<typename ElemClass , ElemType side_type, unsigned short indexbegin, unsigned short indexend>
void SideTest< ElemClass, side_type, indexbegin, indexend >::testIsNodeOnSide ( )
inline

Definition at line 80 of file side_test.C.

81 {
82 LOG_UNIT_TEST;
83
84 for (auto s : make_range(indexbegin, indexend))
85 {
86 std::unique_ptr<Elem> side = elem.build_side_ptr(s);
87 for (auto n : elem.node_index_range())
88 {
89 const Node * node = elem.node_ptr(n);
90 bool found_node = false;
91 for (auto sn : side->node_index_range())
92 if (node == side->node_ptr(sn))
93 {
94 found_node = true;
95 break;
96 }
97
98 if (elem.is_node_on_side(n, s))
99 {
100 CPPUNIT_ASSERT(found_node);
101 }
102 else
103 {
104 CPPUNIT_ASSERT(!found_node);
105 }
106 }
107 }
108 }
A Node is like a Point, but with more information.
Definition node.h:55

References SideTest< ElemClass, side_type, indexbegin, indexend >::elem, and libMesh::make_range().

◆ testNodesOnSide()

template<typename ElemClass , ElemType side_type, unsigned short indexbegin, unsigned short indexend>
void SideTest< ElemClass, side_type, indexbegin, indexend >::testNodesOnSide ( )
inline

Definition at line 110 of file side_test.C.

111 {
112 LOG_UNIT_TEST;
113
114 for (auto s : make_range(indexbegin, indexend))
115 {
116 std::unique_ptr<Elem> side = elem.build_side_ptr(s);
117 std::vector<unsigned int> side_nodes = elem.nodes_on_side(s);
118
119 CPPUNIT_ASSERT_EQUAL(side_nodes.size(), std::size_t(side->n_nodes()));
120
121 for (auto sn : side->node_index_range())
122 {
123 const Node * node = side->node_ptr(sn);
124 bool found_node = false;
125 for (auto si : side_nodes)
126 if (node == elem.node_ptr(si))
127 {
128 found_node = true;
129 break;
130 }
131 CPPUNIT_ASSERT(found_node);
132 }
133 }
134 }

References SideTest< ElemClass, side_type, indexbegin, indexend >::elem, and libMesh::make_range().

◆ testSidePtr()

template<typename ElemClass , ElemType side_type, unsigned short indexbegin, unsigned short indexend>
void SideTest< ElemClass, side_type, indexbegin, indexend >::testSidePtr ( )
inline

Definition at line 136 of file side_test.C.

137 {
138 LOG_UNIT_TEST;
139
140 for (auto s : make_range(indexbegin, indexend))
141 {
142 std::unique_ptr<Elem> side = elem.side_ptr(s);
143
144 CPPUNIT_ASSERT(side->type() ==
146 }
147 }
static ElemType first_order_equivalent_type(const ElemType et)
Definition elem.C:3099

References SideTest< ElemClass, side_type, indexbegin, indexend >::elem, libMesh::Elem::first_order_equivalent_type(), and libMesh::make_range().

◆ testSidePtrFill()

template<typename ElemClass , ElemType side_type, unsigned short indexbegin, unsigned short indexend>
void SideTest< ElemClass, side_type, indexbegin, indexend >::testSidePtrFill ( )
inline

Definition at line 149 of file side_test.C.

150 {
151 LOG_UNIT_TEST;
152
153 std::unique_ptr<Elem> side;
154
155 for (auto s : make_range(indexbegin, indexend))
156 {
157 elem.side_ptr(side, s);
158
159 CPPUNIT_ASSERT(side->type() ==
161 }
162 }

References SideTest< ElemClass, side_type, indexbegin, indexend >::elem, libMesh::Elem::first_order_equivalent_type(), and libMesh::make_range().

Member Data Documentation

◆ elem

template<typename ElemClass , ElemType side_type, unsigned short indexbegin, unsigned short indexend>
ElemClass SideTest< ElemClass, side_type, indexbegin, indexend >::elem
private

◆ libmesh_suite_name

template<typename ElemClass , ElemType side_type, unsigned short indexbegin, unsigned short indexend>
std::string SideTest< ElemClass, side_type, indexbegin, indexend >::libmesh_suite_name
protected

Definition at line 59 of file side_test.C.

◆ nodes

template<typename ElemClass , ElemType side_type, unsigned short indexbegin, unsigned short indexend>
std::vector<std::unique_ptr<Node> > SideTest< ElemClass, side_type, indexbegin, indexend >::nodes
private

The documentation for this class was generated from the following file: