1 #include <libmesh/libmesh.h> 2 #include <libmesh/elem.h> 21 CPPUNIT_TEST( testContainsPointNodeElem );
22 CPPUNIT_TEST( testContainsPointTri3 );
23 CPPUNIT_TEST( testContainsPointTet4 );
26 CPPUNIT_TEST_SUITE_END();
36 Node node (1., 1., 1., 0);
38 elem->set_node(0, &node);
41 CPPUNIT_ASSERT(elem->contains_point(
Point(1.+epsilon/2, 1.-epsilon/2, 1+epsilon/2), epsilon));
42 CPPUNIT_ASSERT(!elem->contains_point(
Point(1.+epsilon/2, 1.-epsilon/2, 1+epsilon/2), epsilon/2));
50 Point a(3,1,2), b(1,2,3), c(2,3,1);
51 containsPointTri3Helper(a, b, c, a);
54 containsPointTri3Helper(a/5000, b/5000, c/5000, c/5000);
57 containsPointTri3Helper(
Point(0.000808805, 0.0047284, 0.),
58 Point(0.0011453, 0.00472831, 0.),
59 Point(0.000982249, 0.00508037, 0.),
60 Point(0.001, 0.005, 0.));
73 Node one (1., 0., 0., 1);
74 Node two (0., 1., 0., 2);
75 Node three (0., 0., 1., 3);
78 elem->set_node(0, &
zero);
79 elem->set_node(1, &one);
80 elem->set_node(2, &two);
81 elem->set_node(3, &three);
84 CPPUNIT_ASSERT (elem->contains_point(elem->vertex_average()));
87 CPPUNIT_ASSERT (elem->contains_point(
zero));
88 CPPUNIT_ASSERT (elem->contains_point(one));
89 CPPUNIT_ASSERT (elem->contains_point(two));
90 CPPUNIT_ASSERT (elem->contains_point(three));
93 CPPUNIT_ASSERT (!elem->contains_point(
Point(.34, .34, .34)));
94 CPPUNIT_ASSERT (!elem->contains_point(
Point(.33, .33, -.1)));
95 CPPUNIT_ASSERT (!elem->contains_point(
Point(0., -.1, .5)));
103 Real epsilon = 1.e-4;
106 Node one (epsilon, 0., 0., 1);
107 Node two (0., epsilon, 0., 2);
108 Node three (0., 0., 1., 3);
111 elem->set_node(0, &
zero);
112 elem->set_node(1, &one);
113 elem->set_node(2, &two);
114 elem->set_node(3, &three);
117 CPPUNIT_ASSERT (elem->contains_point(elem->vertex_average()));
120 CPPUNIT_ASSERT (elem->contains_point(
zero));
121 CPPUNIT_ASSERT (elem->contains_point(one));
122 CPPUNIT_ASSERT (elem->contains_point(two));
123 CPPUNIT_ASSERT (elem->contains_point(three));
126 CPPUNIT_ASSERT (elem->contains_point(
Point(epsilon/2, 0, 0.5)));
129 CPPUNIT_ASSERT (!elem->contains_point(
Point(epsilon, epsilon, epsilon/2)));
130 CPPUNIT_ASSERT (!elem->contains_point(
Point(epsilon/10, epsilon/10, 1.0)));
131 CPPUNIT_ASSERT (!elem->contains_point(
Point(epsilon/2, -epsilon/10, 0.5)));
148 elem->set_node(0, &a);
149 elem->set_node(1, &b);
150 elem->set_node(2, &c);
159 CPPUNIT_ASSERT (elem->contains_point(elem->vertex_average()));
162 CPPUNIT_ASSERT (elem->contains_point(a));
163 CPPUNIT_ASSERT (elem->contains_point(b));
164 CPPUNIT_ASSERT (elem->contains_point(c));
167 CPPUNIT_ASSERT (!elem->contains_point(elem->vertex_average() + std::sqrt(
TOLERANCE) * oop_unit));
170 CPPUNIT_ASSERT (!elem->contains_point(a + va *
TOLERANCE * 10));
171 CPPUNIT_ASSERT (!elem->contains_point(b + vb *
TOLERANCE * 10));
172 CPPUNIT_ASSERT (!elem->contains_point(c - (va + vb) *
TOLERANCE * 10));
175 CPPUNIT_ASSERT (elem->contains_point(p));
void containsPointTri3Helper(Point a_in, Point b_in, Point c_in, Point p)
CPPUNIT_TEST_SUITE_REGISTRATION(ContainsPointTest)
A Node is like a Point, but with more information.
static constexpr Real TOLERANCE
The libMesh namespace provides an interface to certain functionality in the library.
TypeVector< T > unit() const
void testContainsPointTet4()
static std::unique_ptr< Elem > build(const ElemType type, Elem *p=nullptr)
TypeVector< typename CompareTypes< T, T2 >::supertype > cross(const TypeVector< T2 > &v) const
void testContainsPointTri3()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
A Point defines a location in LIBMESH_DIM dimensional Real space.
void testContainsPointNodeElem()