@@ -79,6 +79,37 @@ public:
7979 }
8080 }
8181
82+ void testEdge3 ()
83+ {
84+ LOG_UNIT_TEST ;
85+
86+ {
87+ // Reference
88+ const Elem & edge3 = ReferenceElem ::get (EDGE3 );
89+ const Point n1 = edge3 .side_vertex_average_normal (0 );
90+ LIBMESH_ASSERT_FP_EQUAL (-1 , n1 (0 ), TOLERANCE * TOLERANCE );
91+ LIBMESH_ASSERT_FP_EQUAL (0 , n1 (1 ), TOLERANCE * TOLERANCE );
92+ LIBMESH_ASSERT_FP_EQUAL (0 , n1 (2 ), TOLERANCE * TOLERANCE );
93+ const Point n2 = edge3 .side_vertex_average_normal (1 );
94+ LIBMESH_ASSERT_FP_EQUAL (1 , n2 (0 ), TOLERANCE * TOLERANCE );
95+ LIBMESH_ASSERT_FP_EQUAL (0 , n2 (1 ), TOLERANCE * TOLERANCE );
96+ LIBMESH_ASSERT_FP_EQUAL (0 , n2 (2 ), TOLERANCE * TOLERANCE );
97+ }
98+ {
99+ // Oriented
100+ std ::vector < Point > pts = {Point (1 , 0 , 0 ), Point (1 , 3 , 0 ), Point (2 , 1 , 0 )};
101+ auto [edge3 , nodes ] = this -> construct_elem (pts , EDGE3 );
102+ const Point n1 = edge3 -> side_vertex_average_normal (0 );
103+ LIBMESH_ASSERT_FP_EQUAL (- sqrt (2 ) / 2 , n1 (0 ), TOLERANCE * TOLERANCE );
104+ LIBMESH_ASSERT_FP_EQUAL (- sqrt (2 ) / 2 , n1 (1 ), TOLERANCE * TOLERANCE );
105+ LIBMESH_ASSERT_FP_EQUAL (0 , n1 (2 ), TOLERANCE * TOLERANCE );
106+ const Point n2 = edge3 -> side_vertex_average_normal (1 );
107+ LIBMESH_ASSERT_FP_EQUAL (sqrt (3 ) / 2 , n2 (0 ), TOLERANCE * TOLERANCE );
108+ LIBMESH_ASSERT_FP_EQUAL (1. / 2 , n2 (1 ), TOLERANCE * TOLERANCE );
109+ LIBMESH_ASSERT_FP_EQUAL (0 , n2 (2 ), TOLERANCE * TOLERANCE );
110+ }
111+ }
112+
82113 void testTri3 ()
83114 {
84115 LOG_UNIT_TEST ;
0 commit comments