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.