From 67310ed4ef9a7c1ae6cb5ae967b31cb0f8032b2a Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Wed, 13 Jun 2018 11:08:58 +0200
Subject: [PATCH] ENH: sort cellCentre output according to global cell index
 (issue #869)

- replace SortableList with sortedOrder, to reduce some overhead
---
 src/sampling/sampledSet/cellCentre/cellCentreSet.C | 12 ++++++++++--
 src/sampling/sampledSet/sampledSet/sampledSet.C    |  7 +++----
 src/sampling/sampledSet/sampledSets/sampledSets.C  |  1 -
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/src/sampling/sampledSet/cellCentre/cellCentreSet.C b/src/sampling/sampledSet/cellCentre/cellCentreSet.C
index 2631595ff1f..1c7cc4a1828 100644
--- a/src/sampling/sampledSet/cellCentre/cellCentreSet.C
+++ b/src/sampling/sampledSet/cellCentre/cellCentreSet.C
@@ -27,6 +27,7 @@ License
 #include "meshSearch.H"
 #include "polyMesh.H"
 #include "volFields.H"
+#include "globalIndex.H"
 #include "addToRunTimeSelectionTable.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@@ -44,6 +45,8 @@ void Foam::cellCentreSet::genSamples()
 {
     const label len = mesh().nCells();
 
+    const globalIndex globalSampleNumbers(len);
+
     const auto& cellCentres =
         refCast<const fvMesh>(mesh()).C().primitiveField();
 
@@ -70,8 +73,13 @@ void Foam::cellCentreSet::genSamples()
     }
 
     labelList samplingFaces(selectedCells.size(), -1);
-    labelList samplingSegments(selectedCells.size(), -1);
-    scalarList samplingCurveDist(selectedCells.size(), 0.0);
+    labelList samplingSegments(selectedCells.size(), 0);
+    scalarList samplingCurveDist(selectedCells.size());
+
+    forAll(selectedCells, i)
+    {
+        samplingCurveDist[i] = globalSampleNumbers.toGlobal(selectedCells[i]);
+    }
 
     // Move into *this
     setSamples
diff --git a/src/sampling/sampledSet/sampledSet/sampledSet.C b/src/sampling/sampledSet/sampledSet/sampledSet.C
index f13fce7c77f..cc053293305 100644
--- a/src/sampling/sampledSet/sampledSet/sampledSet.C
+++ b/src/sampling/sampledSet/sampledSet/sampledSet.C
@@ -29,7 +29,6 @@ License
 #include "meshSearch.H"
 #include "writer.H"
 #include "particle.H"
-#include "SortableList.H"
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
@@ -467,7 +466,7 @@ Foam::autoPtr<Foam::coordSet> Foam::sampledSet::gather
     );
 
 
-    if (Pstream::master() && allCurveDist.size() == 0)
+    if (Pstream::master() && allCurveDist.empty())
     {
         WarningInFunction
             << "Sample set " << name()
@@ -475,8 +474,8 @@ Foam::autoPtr<Foam::coordSet> Foam::sampledSet::gather
     }
 
     // Sort curveDist and use to fill masterSamplePts
-    SortableList<scalar> sortedDist(allCurveDist);
-    indexSet = sortedDist.indices();
+    Foam::sortedOrder(allCurveDist, indexSet);      // uses stable sort
+    scalarList sortedDist(allCurveDist, indexSet);  // with indices for mapping
 
     return autoPtr<coordSet>::New
     (
diff --git a/src/sampling/sampledSet/sampledSets/sampledSets.C b/src/sampling/sampledSet/sampledSets/sampledSets.C
index 567aed51120..f706f384860 100644
--- a/src/sampling/sampledSet/sampledSets/sampledSets.C
+++ b/src/sampling/sampledSet/sampledSets/sampledSets.C
@@ -28,7 +28,6 @@ License
 #include "Time.H"
 #include "volFields.H"
 #include "ListListOps.H"
-#include "SortableList.H"
 #include "volPointInterpolation.H"
 #include "mapPolyMesh.H"
 #include "addToRunTimeSelectionTable.H"
-- 
GitLab