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_prism20.h>
14#include <libmesh/cell_prism21.h>
15#include <libmesh/cell_prism6.h>
16#include <libmesh/cell_pyramid13.h>
17#include <libmesh/cell_pyramid14.h>
18#include <libmesh/cell_pyramid5.h>
19#include <libmesh/cell_tet10.h>
20#include <libmesh/cell_tet14.h>
21#include <libmesh/cell_tet4.h>
22#include <libmesh/edge_edge2.h>
23#include <libmesh/edge_edge3.h>
24#include <libmesh/edge_edge4.h>
25#include <libmesh/edge_inf_edge2.h>
26#include <libmesh/face_inf_quad4.h>
27#include <libmesh/face_inf_quad6.h>
28#include <libmesh/face_quad4.h>
29#include <libmesh/face_quad8.h>
30#include <libmesh/face_quad9.h>
31#include <libmesh/face_tri3.h>
32#include <libmesh/face_tri6.h>
33#include <libmesh/face_tri7.h>
40 CPPUNIT_TEST( testIsNodeOnEdge ); \
41 CPPUNIT_TEST( testNodesOnEdge ); \
42 CPPUNIT_TEST( testBuildEdgePtr ); \
47template <
typename ElemClass,
ElemType edge_type,
48 unsigned short indexbegin,
unsigned short indexend>
53 std::vector<std::unique_ptr<Node>>
nodes;
61#ifdef LIBMESH_ENABLE_AMR
68 for (
auto i :
elem.node_index_range())
70 nodes.push_back(std::make_unique<Node>(dummy, i));
81 for (
auto e :
make_range(indexbegin, indexend))
83 std::unique_ptr<Elem> edge =
elem.build_edge_ptr(e);
84 for (
auto n :
elem.node_index_range())
86 const Node * node =
elem.node_ptr(n);
87 bool found_node =
false;
88 for (
auto en : edge->node_index_range())
89 if (node == edge->node_ptr(en))
95 if (
elem.is_node_on_edge(n, e))
97 CPPUNIT_ASSERT(found_node);
101 CPPUNIT_ASSERT(!found_node);
111 for (
auto e :
make_range(indexbegin, indexend))
113 std::unique_ptr<Elem> edge =
elem.build_edge_ptr(e);
114 std::vector<unsigned int> edge_nodes =
elem.nodes_on_edge(e);
116 CPPUNIT_ASSERT_EQUAL(edge_nodes.size(), std::size_t(edge->n_nodes()));
118 for (
auto en : edge->node_index_range())
120 const Node * node = edge->node_ptr(en);
121 bool found_node =
false;
122 for (
auto ei : edge_nodes)
123 if (node ==
elem.node_ptr(ei))
128 CPPUNIT_ASSERT(found_node);
137 for (
auto e :
make_range(indexbegin, indexend))
139 std::unique_ptr<Elem> edge =
elem.build_edge_ptr(e);
141 CPPUNIT_ASSERT(edge->type() == edge_type);
142 CPPUNIT_ASSERT(edge->subdomain_id() ==
elem.subdomain_id());
144#ifdef LIBMESH_ENABLE_AMR
146 CPPUNIT_ASSERT(edge->p_level() ==
elem.p_level());
153#define INSTANTIATE_EDGETEST(elemclass, edgetype, indexbegin, indexend) \
154 class EdgeTest_##elemclass##_##edgetype##_##indexbegin##_##indexend : \
155 public EdgeTest<elemclass, edgetype, indexbegin, indexend> { \
157 EdgeTest_##elemclass##_##edgetype##_##indexbegin##_##indexend() : \
158 EdgeTest<elemclass,edgetype,indexbegin,indexend>() { \
159 if (unitlog->summarized_logs_enabled()) \
160 this->libmesh_suite_name = "EdgeTest"; \
162 this->libmesh_suite_name = "EdgeTest_" #elemclass"_" #edgetype "_" #indexbegin "_" #indexend; \
164 CPPUNIT_TEST_SUITE( EdgeTest_##elemclass##_##edgetype##_##indexbegin##_##indexend ); \
166 CPPUNIT_TEST_SUITE_END(); \
169 CPPUNIT_TEST_SUITE_REGISTRATION( EdgeTest_##elemclass##_##edgetype##_##indexbegin##_##indexend );
192#ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
std::string libmesh_suite_name
std::vector< std::unique_ptr< Node > > nodes
The Hex20 is an element in 3D composed of 20 nodes.
The Hex27 is an element in 3D composed of 27 nodes.
The Hex8 is an element in 3D composed of 8 nodes.
The InfHex16 is an infinite element in 3D composed of 16 nodes.
The InfHex18 is an infinite element in 3D composed of 18 nodes.
The InfHex8 is an infinite element in 3D composed of 8 nodes.
The InfPrism12 is an infinite element in 3D composed of 12 nodes.
The InfPrism6 is an infinite element in 3D composed of 6 nodes.
The INFQUAD4 is an infinite element in 2D composed of 4 nodes.
The INFQUAD6 is an infinite element in 2D composed of 6 nodes.
A Node is like a Point, but with more information.
A Point defines a location in LIBMESH_DIM dimensional Real space.
The Prism15 is an element in 3D composed of 15 nodes.
The Prism18 is an element in 3D composed of 18 nodes.
The Prism20 is an element in 3D composed of 20 nodes.
The Prism21 is an element in 3D composed of 21 nodes.
The Prism6 is an element in 3D composed of 6 nodes.
The Pyramid13 is an element in 3D composed of 13 nodes, designed to interface with a QUAD8 element on...
The Pyramid14 is an element in 3D composed of 14 nodes, designed to interface with a QUAD9 element on...
The Pyramid5 is an element in 3D composed of 5 nodes.
The QUAD4 is an element in 2D composed of 4 nodes.
The QUAD8 is an element in 2D composed of 8 nodes.
The QUAD9 is an element in 2D composed of 9 nodes.
The Tet10 is an element in 3D composed of 10 nodes.
The Tet14 is an element in 3D composed of 14 nodes.
The Tet4 is an element in 3D composed of 4 nodes.
The Tri3 is an element in 2D composed of 3 nodes.
The Tri6 is an element in 2D composed of 6 nodes.
The Tri7 is an element in 2D composed of 7 nodes.
INSTANTIATE_EDGETEST(Hex20, EDGE3, 0, 12)
The libMesh namespace provides an interface to certain functionality in the library.
ElemType
Defines an enum for geometric element types.
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...