@@ -872,6 +872,26 @@ void C0Polyhedron::retriangulate()
872872 surface .delete_elem (oldtri2 );
873873 surface .delete_elem (oldtri3 );
874874
875+ // We've used up our center node, so it's not something we can
876+ // eliminate again.
877+ nodes_by_geometry .erase (geometry_it );
878+
879+ // Recompute the valence and angles of the nodes we used
880+ // The idea is that if one node is being isolated on one side,
881+ // we need to treat it asap
882+ if (nodes_by_geometry .size () > 4 )
883+ {
884+ Node * & node_j2 = surrounding_nodes [j2 ];
885+ nodes_by_geometry .erase (node_index [node_j2 ]);
886+ node_index [node_j2 ] = nodes_by_geometry .emplace (geometry_at (* node_j2 ), node_j2 );
887+ Node * & node_j1 = surrounding_nodes [j1 ];
888+ nodes_by_geometry .erase (node_index [node_j1 ]);
889+ node_index [node_j1 ] = nodes_by_geometry .emplace (geometry_at (* node_j1 ), node_j1 );
890+ Node * & node_j3 = surrounding_nodes [j3 ];
891+ nodes_by_geometry .erase (node_index [node_j3 ]);
892+ node_index [node_j3 ] = nodes_by_geometry .emplace (geometry_at (* node_j3 ), node_j3 );
893+ }
894+
875895 // We should have used up all our surrounding nodes now, and we
876896 // shouldn't have messed up our surface in the process, and our
877897 // center node should no longer be part of the surface.
@@ -891,10 +911,6 @@ void C0Polyhedron::retriangulate()
891911 libmesh_assert_not_equal_to
892912 (elem - > node_ptr (p ), node );
893913#endif
894-
895- // We've used up our center node, so it's not something we can
896- // eliminate again.
897- nodes_by_geometry .erase (geometry_it );
898914 }
899915
900916 // At this point our surface should just have two triangles left.
0 commit comments