@@ -96,18 +96,24 @@ public:
9696 LIBMESH_ASSERT_FP_EQUAL (0 , n2 (1 ), TOLERANCE * TOLERANCE );
9797 LIBMESH_ASSERT_FP_EQUAL (0 , n2 (2 ), TOLERANCE * TOLERANCE );
9898 }
99+
99100 {
100- // Oriented
101- std ::vector < Point > pts = {Point (1 , 0 , 0 ), Point (1 , 3 , 0 ), Point (2 , 1 , 0 )};
101+ // Oriented, checked with the FE construction
102+ std ::vector < Point > pts = {Point (1 , 0 , 0 ), Point (1 , 3 , 0 ), Point (2.2344 , 1.210293 , 0 )};
102103 auto [edge3 , nodes ] = this -> construct_elem (pts , EDGE3 );
103- const Point n1 = edge3 -> side_vertex_average_normal (0 );
104- LIBMESH_ASSERT_FP_EQUAL (- sqrt (2 ) / 2 , n1 (0 ), TOLERANCE * TOLERANCE );
105- LIBMESH_ASSERT_FP_EQUAL (- sqrt (2 ) / 2 , n1 (1 ), TOLERANCE * TOLERANCE );
106- LIBMESH_ASSERT_FP_EQUAL (0 , n1 (2 ), TOLERANCE * TOLERANCE );
107- const Point n2 = edge3 -> side_vertex_average_normal (1 );
108- LIBMESH_ASSERT_FP_EQUAL (- sqrt (5 ) / 5 , n2 (0 ), TOLERANCE * TOLERANCE );
109- LIBMESH_ASSERT_FP_EQUAL (2 * sqrt (5 ) / 5 , n2 (1 ), TOLERANCE * TOLERANCE );
110- LIBMESH_ASSERT_FP_EQUAL (0 , n2 (2 ), TOLERANCE * TOLERANCE );
104+ std ::unique_ptr < libMesh ::FEBase > fe (libMesh ::FEBase ::build (1 , libMesh ::FEType (1 )));
105+ libMesh ::QGauss qface (0 , libMesh ::CONSTANT );
106+ const std ::vector < Point > & normals = fe -> get_normals ();
107+ for (const auto s : make_range (edge3 -> n_sides ()))
108+ {
109+ const std ::unique_ptr < const Elem > face = edge3 -> build_side_ptr (s );
110+ fe -> attach_quadrature_rule (& qface );
111+ fe -> reinit (edge3 .get (), s , TOLERANCE );
112+ const Point n1 = edge3 -> side_vertex_average_normal (s );
113+ LIBMESH_ASSERT_FP_EQUAL (normals [0 ](0 ), n1 (0 ), TOLERANCE * TOLERANCE );
114+ LIBMESH_ASSERT_FP_EQUAL (normals [0 ](1 ), n1 (1 ), TOLERANCE * TOLERANCE );
115+ LIBMESH_ASSERT_FP_EQUAL (normals [0 ](2 ), n1 (2 ), TOLERANCE * TOLERANCE );
116+ }
111117 }
112118 }
113119
0 commit comments