From a0352b0ae0c585447e70edffaac123e78a33c2d9 Mon Sep 17 00:00:00 2001
From: mattijs <mattijs>
Date: Fri, 28 Oct 2011 11:31:23 +0100
Subject: [PATCH] ENH: polyTopoChange: efficient sorting

---
 .../polyTopoChange/polyTopoChange.C           | 26 ++++++++++++++-----
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C
index 622748be1e5..63f533e090f 100644
--- a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C
+++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C
@@ -680,13 +680,17 @@ void Foam::polyTopoChange::getFaceOrder
     // First unassigned face
     label newFaceI = 0;
 
+    labelList nbr;
+    labelList order;
+
     forAll(cellMap_, cellI)
     {
         label startOfCell = cellFaceOffsets[cellI];
         label nFaces = cellFaceOffsets[cellI+1] - startOfCell;
 
         // Neighbouring cells
-        SortableList<label> nbr(nFaces);
+        //SortableList<label> nbr(nFaces);
+        nbr.setSize(nFaces);
 
         for (label i = 0; i < nFaces; i++)
         {
@@ -725,14 +729,24 @@ void Foam::polyTopoChange::getFaceOrder
             }
         }
 
-        nbr.sort();
+        //nbr.sort();
+        order.setSize(nFaces);
+        sortedOrder(nbr, order);
 
-        forAll(nbr, i)
+        //forAll(nbr, i)
+        //{
+        //    if (nbr[i] != -1)
+        //    {
+        //        oldToNew[cellFaces[startOfCell + nbr.indices()[i]]] =
+        //            newFaceI++;
+        //    }
+        //}
+        forAll(order, i)
         {
-            if (nbr[i] != -1)
+            label index = order[i];
+            if (nbr[index] != -1)
             {
-                oldToNew[cellFaces[startOfCell + nbr.indices()[i]]] =
-                    newFaceI++;
+                oldToNew[cellFaces[startOfCell + index]] = newFaceI++;
             }
         }
     }
-- 
GitLab