23TEST(SBMSurfaceDistanceTest, Edge2NormalProjection)
25 std::unique_ptr<Edge2> edge(
new Edge2());
26 std::unique_ptr<Node> n0(
new Node(Point(0.0, 0.0, 0.0), 0));
27 std::unique_ptr<Node> n1(
new Node(Point(1.0, 0.0, 0.0), 1));
28 edge->set_node(0, n0.get());
29 edge->set_node(1, n1.get());
34 Point pt(0.5, 1.0, 0.0);
36 EXPECT_NEAR(dist(1), -1.0, 1e-12);
39TEST(SBMSurfaceDistanceTest, Edge2NodeFallback)
44 std::unique_ptr<Edge2> edge(
new Edge2());
45 std::unique_ptr<Node> n0(
new Node(Point(0.0, 0.0, 0.0), 0));
46 std::unique_ptr<Node> n1(
new Node(Point(1.0, 0.0, 0.0), 1));
47 edge->set_node(0, n0.get());
48 edge->set_node(1, n1.get());
54 Point pt(2.0, 1.0, 0.0);
56 EXPECT_NEAR(dist(0), -1.0, 1e-12);
57 EXPECT_NEAR(dist(1), -1.0, 1e-12);
58 EXPECT_NEAR(dist(2), 0.0, 1e-12);
61TEST(SBMSurfaceDistanceTest, Edge2TiltedDirection)
63 std::unique_ptr<Edge2> edge(
new Edge2());
64 std::unique_ptr<Node> n0(
new Node(Point(0.0, 0.0, 0.0), 0));
65 std::unique_ptr<Node> n1(
new Node(Point(1.0, 1.0, 0.0), 1));
66 edge->set_node(0, n0.get());
67 edge->set_node(1, n1.get());
70 const Point n = surface_edge.
normal();
72 Point pt(0.5, 0.0, 0.0);
75 const double dot = dist(0) * n(0) + dist(1) * n(1);
80 EXPECT_NEAR(dist.norm(), 0.25 * std::sqrt(2.0), 1e-12);
83TEST(SBMSurfaceDistanceTest, Tri3NormalProjection)
85 std::unique_ptr<Tri3> tri(
new Tri3());
86 std::unique_ptr<Node> n0(
new Node(Point(0.0, 0.0, 0.0), 0));
87 std::unique_ptr<Node> n1(
new Node(Point(1.0, 0.0, 0.0), 1));
88 std::unique_ptr<Node> n2(
new Node(Point(0.0, 1.0, 0.0), 2));
89 tri->set_node(0, n0.get());
90 tri->set_node(1, n1.get());
91 tri->set_node(2, n2.get());
96 Point pt(0.3, 0.3, 1.0);
98 EXPECT_NEAR(dist(2), -1.0, 1e-12);
101TEST(SBMSurfaceDistanceTest, Tri3Tilted)
103 std::unique_ptr<Tri3> tri(
new Tri3());
104 std::unique_ptr<Node> n0(
new Node(Point(0.0, 0.0, 0.0), 0));
105 std::unique_ptr<Node> n1(
new Node(Point(1.0, 0.0, 1.0), 1));
106 std::unique_ptr<Node> n2(
new Node(Point(0.0, 1.0, 1.0), 2));
107 tri->set_node(0, n0.get());
108 tri->set_node(1, n1.get());
109 tri->set_node(2, n2.get());
114 Point pt(2.0, 0.0, 2.0);
116 EXPECT_NEAR(dist(0), -1.0, 1e-12);
117 EXPECT_NEAR(dist(1), 0.0, 1e-12);
118 EXPECT_NEAR(dist(2), -1.0, 1e-12);
121 Point pt2(0.0, 0.0, 0.0);
123 EXPECT_NEAR(dist2(0), 0.0, 1e-12);
124 EXPECT_NEAR(dist2(1), 0.0, 1e-12);
125 EXPECT_NEAR(dist2(2), 0.0, 1e-12);
libMesh::Point distanceFrom(const SurfaceElement &surface_elem, const libMesh::Point &pt)
Returns the vector from pt to the nearest point on the surface element: the normal projection if it f...