Skip to content

Commit 6922c7f

Browse files
committed
add edge3 triangulation test
1 parent 6e12149 commit 6922c7f

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

tests/mesh/mesh_triangulation.C

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public:
4040
CPPUNIT_TEST( testPoly2TriInterp2 );
4141
CPPUNIT_TEST( testPoly2TriHoles );
4242
CPPUNIT_TEST( testPoly2TriMeshedHoles );
43+
CPPUNIT_TEST( testEdge3ToTri6 );
4344
# ifdef LIBMESH_ENABLE_AMR
4445
CPPUNIT_TEST( testPoly2TriRoundHole );
4546
# endif
@@ -810,6 +811,71 @@ public:
810811
this->testTriangulatorBase(mesh, triangulator);
811812
}
812813

814+
void testEdge3ToTri6()
815+
{
816+
LOG_UNIT_TEST;
817+
818+
Mesh mesh(*TestCommWorld);
819+
TriangleInterface triangulator(mesh);
820+
821+
const Real hsq2 = std::sqrt(2) / 2.0;
822+
auto node0 = mesh.add_point(Point(1,0), 0);
823+
auto node1 = mesh.add_point(Point(hsq2,hsq2), 1);
824+
auto node2 = mesh.add_point(Point(0,1), 2);
825+
auto node3 = mesh.add_point(Point(-hsq2,hsq2), 3);
826+
auto node4 = mesh.add_point(Point(-1,0), 4);
827+
auto node5 = mesh.add_point(Point(-hsq2,-hsq2), 5);
828+
auto node6 = mesh.add_point(Point(0,-1), 6);
829+
auto node7 = mesh.add_point(Point(hsq2,-hsq2), 7);
830+
831+
auto edge021 = mesh.add_elem(Elem::build(EDGE3));
832+
edge021->set_node(0) = node0;
833+
edge021->set_node(1) = node2;
834+
edge021->set_node(2) = node1;
835+
auto edge243 = mesh.add_elem(Elem::build(EDGE3));
836+
edge243->set_node(0) = node2;
837+
edge243->set_node(1) = node4;
838+
edge243->set_node(2) = node3;
839+
auto edge465 = mesh.add_elem(Elem::build(EDGE3));
840+
edge465->set_node(0) = node4;
841+
edge465->set_node(1) = node6;
842+
edge465->set_node(2) = node5;
843+
auto edge607 = mesh.add_elem(Elem::build(EDGE3));
844+
edge607->set_node(0) = node6;
845+
edge607->set_node(1) = node0;
846+
edge607->set_node(2) = node7;
847+
848+
mesh.prepare_for_use();
849+
850+
commonSettings(triangulator);
851+
852+
triangulator.elem_type() = TRI6;
853+
triangulator.triangulate();
854+
855+
// Check element number
856+
CPPUNIT_ASSERT_EQUAL(mesh.n_elem(), (dof_id_type)2);
857+
for (const auto & elem : mesh.element_ptr_range())
858+
{
859+
// Check element type
860+
CPPUNIT_ASSERT_EQUAL(elem->type(), TRI6);
861+
862+
for (const auto & i_side : make_range(elem->n_sides()))
863+
{
864+
// We only want to check the sides on the external boundary
865+
if (elem->neighbor_ptr(i_side) == nullptr)
866+
{
867+
const Point & side_pt_0 = *(elem->node_ptr(i_side));
868+
const Point & side_pt_1 = *(elem->node_ptr((i_side + 1) % 3));
869+
const Point & side_pt_2 = *(elem->node_ptr(i_side + 3));
870+
const bool x_sign = (side_pt_0(0) == 1 || side_pt_1(0) == 1);
871+
const bool y_sign = (side_pt_0(1) == 1 || side_pt_1(1) == 1);
872+
const Point ref_side_pt_2 = Point (x_sign ? hsq2 : -hsq2, y_sign ? hsq2 : -hsq2);
873+
CPPUNIT_ASSERT_EQUAL(ref_side_pt_2, side_pt_2);
874+
}
875+
}
876+
}
877+
}
878+
813879

814880
void testTriangleSegments()
815881
{

0 commit comments

Comments
 (0)