@@ -898,7 +898,6 @@ void myalgorithm::assignedgenumbers(std::vector<bool>& isownelem, std::vector<st
898898 int numneighbours = dt->countneighbours ();
899899 std::vector<int > neighbours = dt->getneighbours ();
900900
901-
902901 std::vector<int > nn (8 ), ne (8 );
903902 for (int i = 0 ; i < 8 ; i++)
904903 {
@@ -955,15 +954,10 @@ void myalgorithm::assignedgenumbers(std::vector<bool>& isownelem, std::vector<st
955954 removeduplicates (catcornercoords);
956955 std::vector<int > neighboursnumownedges = appendneighbourvalues (barys, catcornercoords, numownedges);
957956
958- // Remove duplicated barycenters :
957+ // Find duplicates :
959958 std::vector<int > renumberingvector;
960959 int numunique = removeduplicates (barys, renumberingvector);
961960
962- // Assign a unique edge number for each edge:
963- edgenumbers = std::vector<int >(numedges);
964- for (int i = 0 ; i < numedges; i++)
965- edgenumbers[i] = renumberingvector[i];
966-
967961 // Calculate which edges must be split:
968962 std::vector<bool > isanodeatnum (numunique, false );
969963 for (int i = 0 ; i < barys.size ()/3 -numedges; i++)
@@ -972,10 +966,21 @@ void myalgorithm::assignedgenumbers(std::vector<bool>& isownelem, std::vector<st
972966 isbarycenteronnode = std::vector<bool >(numedges, false );
973967 for (int i = 0 ; i < numedges; i++)
974968 {
975- if (isanodeatnum[edgenumbers [i]])
969+ if (isanodeatnum[renumberingvector [i]])
976970 isbarycenteronnode[i] = true ;
977971 }
978972
973+ // Assign a unique edge number for each edge:
974+ edgenumbers = std::vector<int >(numedges);
975+ for (int i = 0 ; i < numedges; i++)
976+ edgenumbers[i] = renumberingvector[i];
977+
978+ // Make the edges numbers continuous:
979+ std::vector<int > edgerenum;
980+ int numuniqueedges = squeeze (edgenumbers, numunique, edgerenum);
981+ for (int i = 0 ; i < numedges; i++)
982+ edgenumbers[i] = edgerenum[edgenumbers[i]];
983+
979984 // Harmonize the edges numbers across neighbour ranks:
980985 if (dt->isdefined () == false || numranks == 1 )
981986 return ;
@@ -988,15 +993,15 @@ void myalgorithm::assignedgenumbers(std::vector<bool>& isownelem, std::vector<st
988993 std::vector<double > ownbarys (3 *numownedges);
989994 selectcoordinates (isownedge, barys, ownbarys.data ());
990995
991- // Get edges count on all ranks to create unique edge numbers:
992- std::vector<int > fragment = {numedges };
993- std::vector<int > allnumedges ;
994- slmpi::allgather (fragment, allnumedges );
996+ // Get the edges count on all ranks to create unique global edge numbers:
997+ std::vector<int > fragment = {numuniqueedges };
998+ std::vector<int > allnumuniqueedges ;
999+ slmpi::allgather (fragment, allnumuniqueedges );
9951000
996- // Use long long int to allow more edges in the mesh .
1001+ // USE LONG LONG INT TO ALLOW MORE EDGES IN THE MESH .
9971002 std::vector<int > edgenumshift (numranks, 0 );
9981003 for (int i = 1 ; i < numranks; i++)
999- edgenumshift[i] = edgenumshift[i-1 ] + allnumedges [i-1 ];
1004+ edgenumshift[i] = edgenumshift[i-1 ] + allnumuniqueedges [i-1 ];
10001005
10011006 for (int i = 0 ; i < numedges; i++)
10021007 edgenumbers[i] += edgenumshift[rank];
0 commit comments