282   std::vector<Elem *> new_elements;
   284   unsigned int max_subelems = 1;  
   285   if (
mesh.mesh_dimension() == 2) 
   287   if (
mesh.mesh_dimension() == 3) 
   290   new_elements.reserve (max_subelems*n_orig_elem);
   297   const bool mesh_has_boundary_data = (
mesh.get_boundary_info().n_boundary_conds() > 0);
   300   std::vector<Elem *> new_bndry_elements;
   301   std::vector<unsigned short int> new_bndry_sides;
   302   std::vector<boundary_id_type> new_bndry_ids;
   307   bool added_new_ghost_point = 
false;
   320 #ifdef LIBMESH_ENABLE_UNIQUE_ID   324     for (
auto & elem : 
mesh.element_ptr_range())
   326         const ElemType etype = elem->type();
   329         libmesh_assert (!elem->parent());
   335         for (
unsigned int i = 0; i != max_subelems; ++i)
   336           subelem[i] = 
nullptr;
   342               subelem[0] = 
new Tri3;
   343               subelem[1] = 
new Tri3;
   346               if ((elem->point(0) - elem->point(2)).norm() <
   347                   (elem->point(1) - elem->point(3)).norm())
   349                   subelem[0]->set_node(0) = elem->node_ptr(0);
   350                   subelem[0]->set_node(1) = elem->node_ptr(1);
   351                   subelem[0]->set_node(2) = elem->node_ptr(2);
   353                   subelem[1]->set_node(0) = elem->node_ptr(0);
   354                   subelem[1]->set_node(1) = elem->node_ptr(2);
   355                   subelem[1]->set_node(2) = elem->node_ptr(3);
   360                   subelem[0]->set_node(0) = elem->node_ptr(0);
   361                   subelem[0]->set_node(1) = elem->node_ptr(1);
   362                   subelem[0]->set_node(2) = elem->node_ptr(3);
   364                   subelem[1]->set_node(0) = elem->node_ptr(1);
   365                   subelem[1]->set_node(1) = elem->node_ptr(2);
   366                   subelem[1]->set_node(2) = elem->node_ptr(3);
   375               if (elem->processor_id() != 
mesh.processor_id())
   376                 added_new_ghost_point = 
true;
   378               subelem[0] = 
new Tri6;
   379               subelem[1] = 
new Tri6;
   382               Node * new_node = 
mesh.add_point((
mesh.point(elem->node_id(0)) +
   383                                                 mesh.point(elem->node_id(1)) +
   384                                                 mesh.point(elem->node_id(2)) +
   385                                                 mesh.point(elem->node_id(3)))/4,
   386                                                DofObject::invalid_id,
   387                                                elem->processor_id());
   390               if ((elem->point(0) - elem->point(2)).norm() <
   391                   (elem->point(1) - elem->point(3)).norm())
   393                   subelem[0]->set_node(0) = elem->node_ptr(0);
   394                   subelem[0]->set_node(1) = elem->node_ptr(1);
   395                   subelem[0]->set_node(2) = elem->node_ptr(2);
   396                   subelem[0]->set_node(3) = elem->node_ptr(4);
   397                   subelem[0]->set_node(4) = elem->node_ptr(5);
   398                   subelem[0]->set_node(5) = new_node;
   400                   subelem[1]->set_node(0) = elem->node_ptr(0);
   401                   subelem[1]->set_node(1) = elem->node_ptr(2);
   402                   subelem[1]->set_node(2) = elem->node_ptr(3);
   403                   subelem[1]->set_node(3) = new_node;
   404                   subelem[1]->set_node(4) = elem->node_ptr(6);
   405                   subelem[1]->set_node(5) = elem->node_ptr(7);
   411                   subelem[0]->set_node(0) = elem->node_ptr(3);
   412                   subelem[0]->set_node(1) = elem->node_ptr(0);
   413                   subelem[0]->set_node(2) = elem->node_ptr(1);
   414                   subelem[0]->set_node(3) = elem->node_ptr(7);
   415                   subelem[0]->set_node(4) = elem->node_ptr(4);
   416                   subelem[0]->set_node(5) = new_node;
   418                   subelem[1]->set_node(0) = elem->node_ptr(1);
   419                   subelem[1]->set_node(1) = elem->node_ptr(2);
   420                   subelem[1]->set_node(2) = elem->node_ptr(3);
   421                   subelem[1]->set_node(3) = elem->node_ptr(5);
   422                   subelem[1]->set_node(4) = elem->node_ptr(6);
   423                   subelem[1]->set_node(5) = new_node;
   431               subelem[0] = 
new Tri6;
   432               subelem[1] = 
new Tri6;
   435               if ((elem->point(0) - elem->point(2)).norm() <
   436                   (elem->point(1) - elem->point(3)).norm())
   438                   subelem[0]->set_node(0) = elem->node_ptr(0);
   439                   subelem[0]->set_node(1) = elem->node_ptr(1);
   440                   subelem[0]->set_node(2) = elem->node_ptr(2);
   441                   subelem[0]->set_node(3) = elem->node_ptr(4);
   442                   subelem[0]->set_node(4) = elem->node_ptr(5);
   443                   subelem[0]->set_node(5) = elem->node_ptr(8);
   445                   subelem[1]->set_node(0) = elem->node_ptr(0);
   446                   subelem[1]->set_node(1) = elem->node_ptr(2);
   447                   subelem[1]->set_node(2) = elem->node_ptr(3);
   448                   subelem[1]->set_node(3) = elem->node_ptr(8);
   449                   subelem[1]->set_node(4) = elem->node_ptr(6);
   450                   subelem[1]->set_node(5) = elem->node_ptr(7);
   455                   subelem[0]->set_node(0) = elem->node_ptr(0);
   456                   subelem[0]->set_node(1) = elem->node_ptr(1);
   457                   subelem[0]->set_node(2) = elem->node_ptr(3);
   458                   subelem[0]->set_node(3) = elem->node_ptr(4);
   459                   subelem[0]->set_node(4) = elem->node_ptr(8);
   460                   subelem[0]->set_node(5) = elem->node_ptr(7);
   462                   subelem[1]->set_node(0) = elem->node_ptr(1);
   463                   subelem[1]->set_node(1) = elem->node_ptr(2);
   464                   subelem[1]->set_node(2) = elem->node_ptr(3);
   465                   subelem[1]->set_node(3) = elem->node_ptr(5);
   466                   subelem[1]->set_node(4) = elem->node_ptr(6);
   467                   subelem[1]->set_node(5) = elem->node_ptr(8);
   476               subelem[0] = 
new Tet4;
   477               subelem[1] = 
new Tet4;
   478               subelem[2] = 
new Tet4;
   496               if (split_first_diagonal(elem, 0,4, 1,3))
   499                   if (split_first_diagonal(elem, 0,5, 2,3))
   502                       if (split_first_diagonal(elem, 1,5, 2,4))
   504                           subelem[0]->set_node(0) = elem->node_ptr(0);
   505                           subelem[0]->set_node(1) = elem->node_ptr(4);
   506                           subelem[0]->set_node(2) = elem->node_ptr(5);
   507                           subelem[0]->set_node(3) = elem->node_ptr(3);
   509                           subelem[1]->set_node(0) = elem->node_ptr(0);
   510                           subelem[1]->set_node(1) = elem->node_ptr(4);
   511                           subelem[1]->set_node(2) = elem->node_ptr(1);
   512                           subelem[1]->set_node(3) = elem->node_ptr(5);
   514                           subelem[2]->set_node(0) = elem->node_ptr(0);
   515                           subelem[2]->set_node(1) = elem->node_ptr(1);
   516                           subelem[2]->set_node(2) = elem->node_ptr(2);
   517                           subelem[2]->set_node(3) = elem->node_ptr(5);
   521                           libmesh_assert (split_first_diagonal(elem, 2,4, 1,5));
   523                           subelem[0]->set_node(0) = elem->node_ptr(0);
   524                           subelem[0]->set_node(1) = elem->node_ptr(4);
   525                           subelem[0]->set_node(2) = elem->node_ptr(5);
   526                           subelem[0]->set_node(3) = elem->node_ptr(3);
   528                           subelem[1]->set_node(0) = elem->node_ptr(0);
   529                           subelem[1]->set_node(1) = elem->node_ptr(4);
   530                           subelem[1]->set_node(2) = elem->node_ptr(2);
   531                           subelem[1]->set_node(3) = elem->node_ptr(5);
   533                           subelem[2]->set_node(0) = elem->node_ptr(0);
   534                           subelem[2]->set_node(1) = elem->node_ptr(1);
   535                           subelem[2]->set_node(2) = elem->node_ptr(2);
   536                           subelem[2]->set_node(3) = elem->node_ptr(4);
   541                       libmesh_assert (split_first_diagonal(elem, 2,3, 0,5));
   544                       libmesh_assert (split_first_diagonal(elem, 2,4, 1,5));
   546                       subelem[0]->set_node(0) = elem->node_ptr(0);
   547                       subelem[0]->set_node(1) = elem->node_ptr(4);
   548                       subelem[0]->set_node(2) = elem->node_ptr(2);
   549                       subelem[0]->set_node(3) = elem->node_ptr(3);
   551                       subelem[1]->set_node(0) = elem->node_ptr(3);
   552                       subelem[1]->set_node(1) = elem->node_ptr(4);
   553                       subelem[1]->set_node(2) = elem->node_ptr(2);
   554                       subelem[1]->set_node(3) = elem->node_ptr(5);
   556                       subelem[2]->set_node(0) = elem->node_ptr(0);
   557                       subelem[2]->set_node(1) = elem->node_ptr(1);
   558                       subelem[2]->set_node(2) = elem->node_ptr(2);
   559                       subelem[2]->set_node(3) = elem->node_ptr(4);
   564                   libmesh_assert (split_first_diagonal(elem, 1,3, 0,4));
   567                   if (split_first_diagonal(elem, 0,5, 2,3))
   570                       libmesh_assert (split_first_diagonal(elem, 1,5, 2,4));
   572                       subelem[0]->set_node(0) = elem->node_ptr(1);
   573                       subelem[0]->set_node(1) = elem->node_ptr(3);
   574                       subelem[0]->set_node(2) = elem->node_ptr(4);
   575                       subelem[0]->set_node(3) = elem->node_ptr(5);
   577                       subelem[1]->set_node(0) = elem->node_ptr(1);
   578                       subelem[1]->set_node(1) = elem->node_ptr(0);
   579                       subelem[1]->set_node(2) = elem->node_ptr(3);
   580                       subelem[1]->set_node(3) = elem->node_ptr(5);
   582                       subelem[2]->set_node(0) = elem->node_ptr(0);
   583                       subelem[2]->set_node(1) = elem->node_ptr(1);
   584                       subelem[2]->set_node(2) = elem->node_ptr(2);
   585                       subelem[2]->set_node(3) = elem->node_ptr(5);
   589                       libmesh_assert (split_first_diagonal(elem, 2,3, 0,5));
   592                       if (split_first_diagonal(elem, 1,5, 2,4))
   594                           subelem[0]->set_node(0) = elem->node_ptr(0);
   595                           subelem[0]->set_node(1) = elem->node_ptr(1);
   596                           subelem[0]->set_node(2) = elem->node_ptr(2);
   597                           subelem[0]->set_node(3) = elem->node_ptr(3);
   599                           subelem[1]->set_node(0) = elem->node_ptr(3);
   600                           subelem[1]->set_node(1) = elem->node_ptr(1);
   601                           subelem[1]->set_node(2) = elem->node_ptr(2);
   602                           subelem[1]->set_node(3) = elem->node_ptr(5);
   604                           subelem[2]->set_node(0) = elem->node_ptr(1);
   605                           subelem[2]->set_node(1) = elem->node_ptr(3);
   606                           subelem[2]->set_node(2) = elem->node_ptr(4);
   607                           subelem[2]->set_node(3) = elem->node_ptr(5);
   611                           libmesh_assert (split_first_diagonal(elem, 2,4, 1,5));
   613                           subelem[0]->set_node(0) = elem->node_ptr(0);
   614                           subelem[0]->set_node(1) = elem->node_ptr(1);
   615                           subelem[0]->set_node(2) = elem->node_ptr(2);
   616                           subelem[0]->set_node(3) = elem->node_ptr(3);
   618                           subelem[1]->set_node(0) = elem->node_ptr(2);
   619                           subelem[1]->set_node(1) = elem->node_ptr(3);
   620                           subelem[1]->set_node(2) = elem->node_ptr(4);
   621                           subelem[1]->set_node(3) = elem->node_ptr(5);
   623                           subelem[2]->set_node(0) = elem->node_ptr(3);
   624                           subelem[2]->set_node(1) = elem->node_ptr(1);
   625                           subelem[2]->set_node(2) = elem->node_ptr(2);
   626                           subelem[2]->set_node(3) = elem->node_ptr(4);
   636               subelem[0] = 
new Tet10;
   637               subelem[1] = 
new Tet10;
   638               subelem[2] = 
new Tet10;
   641               if (split_first_diagonal(elem, 0,4, 1,3))
   644                   if (split_first_diagonal(elem, 0,5, 2,3))
   647                       if (split_first_diagonal(elem, 1,5, 2,4))
   649                           subelem[0]->set_node(0) = elem->node_ptr(0);
   650                           subelem[0]->set_node(1) = elem->node_ptr(4);
   651                           subelem[0]->set_node(2) = elem->node_ptr(5);
   652                           subelem[0]->set_node(3) = elem->node_ptr(3);
   654                           subelem[0]->set_node(4) = elem->node_ptr(15);
   655                           subelem[0]->set_node(5) = elem->node_ptr(13);
   656                           subelem[0]->set_node(6) = elem->node_ptr(17);
   657                           subelem[0]->set_node(7) = elem->node_ptr(9);
   658                           subelem[0]->set_node(8) = elem->node_ptr(12);
   659                           subelem[0]->set_node(9) = elem->node_ptr(14);
   661                           subelem[1]->set_node(0) = elem->node_ptr(0);
   662                           subelem[1]->set_node(1) = elem->node_ptr(4);
   663                           subelem[1]->set_node(2) = elem->node_ptr(1);
   664                           subelem[1]->set_node(3) = elem->node_ptr(5);
   666                           subelem[1]->set_node(4) = elem->node_ptr(15);
   667                           subelem[1]->set_node(5) = elem->node_ptr(10);
   668                           subelem[1]->set_node(6) = elem->node_ptr(6);
   669                           subelem[1]->set_node(7) = elem->node_ptr(17);
   670                           subelem[1]->set_node(8) = elem->node_ptr(13);
   671                           subelem[1]->set_node(9) = elem->node_ptr(16);
   673                           subelem[2]->set_node(0) = elem->node_ptr(0);
   674                           subelem[2]->set_node(1) = elem->node_ptr(1);
   675                           subelem[2]->set_node(2) = elem->node_ptr(2);
   676                           subelem[2]->set_node(3) = elem->node_ptr(5);
   678                           subelem[2]->set_node(4) = elem->node_ptr(6);
   679                           subelem[2]->set_node(5) = elem->node_ptr(7);
   680                           subelem[2]->set_node(6) = elem->node_ptr(8);
   681                           subelem[2]->set_node(7) = elem->node_ptr(17);
   682                           subelem[2]->set_node(8) = elem->node_ptr(16);
   683                           subelem[2]->set_node(9) = elem->node_ptr(11);
   687                           libmesh_assert (split_first_diagonal(elem, 2,4, 1,5));
   689                           subelem[0]->set_node(0) = elem->node_ptr(0);
   690                           subelem[0]->set_node(1) = elem->node_ptr(4);
   691                           subelem[0]->set_node(2) = elem->node_ptr(5);
   692                           subelem[0]->set_node(3) = elem->node_ptr(3);
   694                           subelem[0]->set_node(4) = elem->node_ptr(15);
   695                           subelem[0]->set_node(5) = elem->node_ptr(13);
   696                           subelem[0]->set_node(6) = elem->node_ptr(17);
   697                           subelem[0]->set_node(7) = elem->node_ptr(9);
   698                           subelem[0]->set_node(8) = elem->node_ptr(12);
   699                           subelem[0]->set_node(9) = elem->node_ptr(14);
   701                           subelem[1]->set_node(0) = elem->node_ptr(0);
   702                           subelem[1]->set_node(1) = elem->node_ptr(4);
   703                           subelem[1]->set_node(2) = elem->node_ptr(2);
   704                           subelem[1]->set_node(3) = elem->node_ptr(5);
   706                           subelem[1]->set_node(4) = elem->node_ptr(15);
   707                           subelem[1]->set_node(5) = elem->node_ptr(16);
   708                           subelem[1]->set_node(6) = elem->node_ptr(8);
   709                           subelem[1]->set_node(7) = elem->node_ptr(17);
   710                           subelem[1]->set_node(8) = elem->node_ptr(13);
   711                           subelem[1]->set_node(9) = elem->node_ptr(11);
   713                           subelem[2]->set_node(0) = elem->node_ptr(0);
   714                           subelem[2]->set_node(1) = elem->node_ptr(1);
   715                           subelem[2]->set_node(2) = elem->node_ptr(2);
   716                           subelem[2]->set_node(3) = elem->node_ptr(4);
   718                           subelem[2]->set_node(4) = elem->node_ptr(6);
   719                           subelem[2]->set_node(5) = elem->node_ptr(7);
   720                           subelem[2]->set_node(6) = elem->node_ptr(8);
   721                           subelem[2]->set_node(7) = elem->node_ptr(15);
   722                           subelem[2]->set_node(8) = elem->node_ptr(10);
   723                           subelem[2]->set_node(9) = elem->node_ptr(16);
   728                       libmesh_assert (split_first_diagonal(elem, 2,3, 0,5));
   731                       libmesh_assert (split_first_diagonal(elem, 2,4, 1,5));
   733                       subelem[0]->set_node(0) = elem->node_ptr(0);
   734                       subelem[0]->set_node(1) = elem->node_ptr(4);
   735                       subelem[0]->set_node(2) = elem->node_ptr(2);
   736                       subelem[0]->set_node(3) = elem->node_ptr(3);
   738                       subelem[0]->set_node(4) = elem->node_ptr(15);
   739                       subelem[0]->set_node(5) = elem->node_ptr(16);
   740                       subelem[0]->set_node(6) = elem->node_ptr(8);
   741                       subelem[0]->set_node(7) = elem->node_ptr(9);
   742                       subelem[0]->set_node(8) = elem->node_ptr(12);
   743                       subelem[0]->set_node(9) = elem->node_ptr(17);
   745                       subelem[1]->set_node(0) = elem->node_ptr(3);
   746                       subelem[1]->set_node(1) = elem->node_ptr(4);
   747                       subelem[1]->set_node(2) = elem->node_ptr(2);
   748                       subelem[1]->set_node(3) = elem->node_ptr(5);
   750                       subelem[1]->set_node(4) = elem->node_ptr(12);
   751                       subelem[1]->set_node(5) = elem->node_ptr(16);
   752                       subelem[1]->set_node(6) = elem->node_ptr(17);
   753                       subelem[1]->set_node(7) = elem->node_ptr(14);
   754                       subelem[1]->set_node(8) = elem->node_ptr(13);
   755                       subelem[1]->set_node(9) = elem->node_ptr(11);
   757                       subelem[2]->set_node(0) = elem->node_ptr(0);
   758                       subelem[2]->set_node(1) = elem->node_ptr(1);
   759                       subelem[2]->set_node(2) = elem->node_ptr(2);
   760                       subelem[2]->set_node(3) = elem->node_ptr(4);
   762                       subelem[2]->set_node(4) = elem->node_ptr(6);
   763                       subelem[2]->set_node(5) = elem->node_ptr(7);
   764                       subelem[2]->set_node(6) = elem->node_ptr(8);
   765                       subelem[2]->set_node(7) = elem->node_ptr(15);
   766                       subelem[2]->set_node(8) = elem->node_ptr(10);
   767                       subelem[2]->set_node(9) = elem->node_ptr(16);
   772                   libmesh_assert (split_first_diagonal(elem, 1,3, 0,4));
   775                   if (split_first_diagonal(elem, 0,5, 2,3))
   778                       libmesh_assert (split_first_diagonal(elem, 1,5, 2,4));
   780                       subelem[0]->set_node(0) = elem->node_ptr(1);
   781                       subelem[0]->set_node(1) = elem->node_ptr(3);
   782                       subelem[0]->set_node(2) = elem->node_ptr(4);
   783                       subelem[0]->set_node(3) = elem->node_ptr(5);
   785                       subelem[0]->set_node(4) = elem->node_ptr(15);
   786                       subelem[0]->set_node(5) = elem->node_ptr(12);
   787                       subelem[0]->set_node(6) = elem->node_ptr(10);
   788                       subelem[0]->set_node(7) = elem->node_ptr(16);
   789                       subelem[0]->set_node(8) = elem->node_ptr(14);
   790                       subelem[0]->set_node(9) = elem->node_ptr(13);
   792                       subelem[1]->set_node(0) = elem->node_ptr(1);
   793                       subelem[1]->set_node(1) = elem->node_ptr(0);
   794                       subelem[1]->set_node(2) = elem->node_ptr(3);
   795                       subelem[1]->set_node(3) = elem->node_ptr(5);
   797                       subelem[1]->set_node(4) = elem->node_ptr(6);
   798                       subelem[1]->set_node(5) = elem->node_ptr(9);
   799                       subelem[1]->set_node(6) = elem->node_ptr(15);
   800                       subelem[1]->set_node(7) = elem->node_ptr(16);
   801                       subelem[1]->set_node(8) = elem->node_ptr(17);
   802                       subelem[1]->set_node(9) = elem->node_ptr(14);
   804                       subelem[2]->set_node(0) = elem->node_ptr(0);
   805                       subelem[2]->set_node(1) = elem->node_ptr(1);
   806                       subelem[2]->set_node(2) = elem->node_ptr(2);
   807                       subelem[2]->set_node(3) = elem->node_ptr(5);
   809                       subelem[2]->set_node(4) = elem->node_ptr(6);
   810                       subelem[2]->set_node(5) = elem->node_ptr(7);
   811                       subelem[2]->set_node(6) = elem->node_ptr(8);
   812                       subelem[2]->set_node(7) = elem->node_ptr(17);
   813                       subelem[2]->set_node(8) = elem->node_ptr(16);
   814                       subelem[2]->set_node(9) = elem->node_ptr(11);
   818                       libmesh_assert (split_first_diagonal(elem, 2,3, 0,5));
   821                       if (split_first_diagonal(elem, 1,5, 2,4))
   823                           subelem[0]->set_node(0) = elem->node_ptr(0);
   824                           subelem[0]->set_node(1) = elem->node_ptr(1);
   825                           subelem[0]->set_node(2) = elem->node_ptr(2);
   826                           subelem[0]->set_node(3) = elem->node_ptr(3);
   828                           subelem[0]->set_node(4) = elem->node_ptr(6);
   829                           subelem[0]->set_node(5) = elem->node_ptr(7);
   830                           subelem[0]->set_node(6) = elem->node_ptr(8);
   831                           subelem[0]->set_node(7) = elem->node_ptr(9);
   832                           subelem[0]->set_node(8) = elem->node_ptr(15);
   833                           subelem[0]->set_node(9) = elem->node_ptr(17);
   835                           subelem[1]->set_node(0) = elem->node_ptr(3);
   836                           subelem[1]->set_node(1) = elem->node_ptr(1);
   837                           subelem[1]->set_node(2) = elem->node_ptr(2);
   838                           subelem[1]->set_node(3) = elem->node_ptr(5);
   840                           subelem[1]->set_node(4) = elem->node_ptr(15);
   841                           subelem[1]->set_node(5) = elem->node_ptr(7);
   842                           subelem[1]->set_node(6) = elem->node_ptr(17);
   843                           subelem[1]->set_node(7) = elem->node_ptr(14);
   844                           subelem[1]->set_node(8) = elem->node_ptr(16);
   845                           subelem[1]->set_node(9) = elem->node_ptr(11);
   847                           subelem[2]->set_node(0) = elem->node_ptr(1);
   848                           subelem[2]->set_node(1) = elem->node_ptr(3);
   849                           subelem[2]->set_node(2) = elem->node_ptr(4);
   850                           subelem[2]->set_node(3) = elem->node_ptr(5);
   852                           subelem[2]->set_node(4) = elem->node_ptr(15);
   853                           subelem[2]->set_node(5) = elem->node_ptr(12);
   854                           subelem[2]->set_node(6) = elem->node_ptr(10);
   855                           subelem[2]->set_node(7) = elem->node_ptr(16);
   856                           subelem[2]->set_node(8) = elem->node_ptr(14);
   857                           subelem[2]->set_node(9) = elem->node_ptr(13);
   861                           libmesh_assert (split_first_diagonal(elem, 2,4, 1,5));
   863                           subelem[0]->set_node(0) = elem->node_ptr(0);
   864                           subelem[0]->set_node(1) = elem->node_ptr(1);
   865                           subelem[0]->set_node(2) = elem->node_ptr(2);
   866                           subelem[0]->set_node(3) = elem->node_ptr(3);
   868                           subelem[0]->set_node(4) = elem->node_ptr(6);
   869                           subelem[0]->set_node(5) = elem->node_ptr(7);
   870                           subelem[0]->set_node(6) = elem->node_ptr(8);
   871                           subelem[0]->set_node(7) = elem->node_ptr(9);
   872                           subelem[0]->set_node(8) = elem->node_ptr(15);
   873                           subelem[0]->set_node(9) = elem->node_ptr(17);
   875                           subelem[1]->set_node(0) = elem->node_ptr(2);
   876                           subelem[1]->set_node(1) = elem->node_ptr(3);
   877                           subelem[1]->set_node(2) = elem->node_ptr(4);
   878                           subelem[1]->set_node(3) = elem->node_ptr(5);
   880                           subelem[1]->set_node(4) = elem->node_ptr(17);
   881                           subelem[1]->set_node(5) = elem->node_ptr(12);
   882                           subelem[1]->set_node(6) = elem->node_ptr(16);
   883                           subelem[1]->set_node(7) = elem->node_ptr(11);
   884                           subelem[1]->set_node(8) = elem->node_ptr(14);
   885                           subelem[1]->set_node(9) = elem->node_ptr(13);
   887                           subelem[2]->set_node(0) = elem->node_ptr(3);
   888                           subelem[2]->set_node(1) = elem->node_ptr(1);
   889                           subelem[2]->set_node(2) = elem->node_ptr(2);
   890                           subelem[2]->set_node(3) = elem->node_ptr(4);
   892                           subelem[2]->set_node(4) = elem->node_ptr(15);
   893                           subelem[2]->set_node(5) = elem->node_ptr(7);
   894                           subelem[2]->set_node(6) = elem->node_ptr(17);
   895                           subelem[2]->set_node(7) = elem->node_ptr(12);
   896                           subelem[2]->set_node(8) = elem->node_ptr(10);
   897                           subelem[2]->set_node(9) = elem->node_ptr(16);
   925               libMesh::err << 
"Error, encountered unimplemented element "   926                            << Utility::enum_to_string<ElemType>(etype)
   927                            << 
" in MeshTools::Modification::all_tri()..."   929               libmesh_not_implemented();
   936         for (
unsigned int i=0; i != max_subelems; ++i)
   938             subelem[i]->processor_id() = elem->processor_id();
   939             subelem[i]->subdomain_id() = elem->subdomain_id();
   947         bool mesh_is_serial = 
mesh.is_serial();
   949         if (mesh_has_boundary_data || mesh_is_serial)
   952             std::vector<boundary_id_type> bc_ids;
   954             for (
auto sn : elem->side_index_range())
   956                 mesh.get_boundary_info().boundary_ids(elem, sn, bc_ids);
   957                 for (
const auto & b_id : bc_ids)
   959                     if (mesh_is_serial && b_id == BoundaryInfo::invalid_id)
   963                     std::unique_ptr<Elem> elem_side = elem->build_side_ptr(sn);
   964                     std::vector<dof_id_type> elem_side_nodes(elem_side->n_nodes());
   965                     for (
unsigned int esn=0,
   966                          n_esn = cast_int<unsigned int>(elem_side_nodes.size());
   968                       elem_side_nodes[esn] = elem_side->node_id(esn);
   969                     std::sort(elem_side_nodes.begin(), elem_side_nodes.end());
   971                     for (
unsigned int i=0; i != max_subelems; ++i)
   974                           for (
auto subside : subelem[i]->side_index_range())
   976                               std::unique_ptr<Elem> subside_elem = subelem[i]->build_side_ptr(subside);
   984                               std::vector<dof_id_type> subside_nodes(subside_elem->n_vertices());
   985                               for (
unsigned int ssn=0,
   986                                    n_ssn = cast_int<unsigned int>(subside_nodes.size());
   988                                 subside_nodes[ssn] = subside_elem->node_id(ssn);
   989                               std::sort(subside_nodes.begin(), subside_nodes.end());
   993                               if (std::includes(elem_side_nodes.begin(), elem_side_nodes.end(),
   994                                                 subside_nodes.begin(), subside_nodes.end()))
   996                                   if (b_id != BoundaryInfo::invalid_id)
   998                                       new_bndry_ids.push_back(b_id);
   999                                       new_bndry_elements.push_back(subelem[i]);
  1000                                       new_bndry_sides.push_back(subside);
  1006                                     subelem[i]->set_neighbor(subside, const_cast<RemoteElem*>(
remote_elem));
  1014             mesh.get_boundary_info().remove(elem);
  1022         for (
unsigned int i=0; i != max_subelems; ++i)
  1029               subelem[i]->set_id( max_orig_id + 6*elem->id() + i );
  1031 #ifdef LIBMESH_ENABLE_UNIQUE_ID  1032               subelem[i]->set_unique_id() = max_unique_id + 2*elem->unique_id() + i;
  1036               new_elements.push_back(subelem[i]);
  1040         mesh.delete_elem(elem);
  1048     std::vector<Elem *>::iterator el        = new_elements.begin();
  1049     const std::vector<Elem *>::iterator 
end = new_elements.end();
  1050     for (; el != 
end; ++el)
  1054   if (mesh_has_boundary_data)
  1067       bool nbe_nonempty = new_bndry_elements.size();
  1068       mesh.comm().max(nbe_nonempty);
  1069       libmesh_assert(nbe_nonempty ||
  1070                      mesh.get_boundary_info().n_boundary_conds()>0);
  1075       libmesh_assert_equal_to (new_bndry_elements.size(), new_bndry_sides.size());
  1076       libmesh_assert_equal_to (new_bndry_sides.size(), new_bndry_ids.size());
  1079       for (std::size_t s=0; s<new_bndry_elements.size(); ++s)
  1080         mesh.get_boundary_info().add_side(new_bndry_elements[s],
  1089   if (!
mesh.is_serial())
  1091       mesh.comm().max(added_new_ghost_point);
  1093       if (added_new_ghost_point)
  1094         MeshCommunication().make_nodes_parallel_consistent (
mesh);
  1100   mesh.prepare_for_use( 
false);
 
OStreamProxy err(std::cerr)
const RemoteElem * remote_elem