From ce9e29688be143ee3a2d497593396ddabd62e89f Mon Sep 17 00:00:00 2001 From: mattijs Date: Tue, 16 Feb 2010 18:35:41 +0000 Subject: [PATCH 1/5] ENH: Added syncPointData routine to apply combineReduce op to shared points. --- .../polyMesh/globalMeshData/globalMeshData.H | 32 +++++ .../globalMeshData/globalMeshDataTemplates.C | 128 ++++++++++++++++++ 2 files changed, 160 insertions(+) create mode 100644 src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshDataTemplates.C diff --git a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshData.H b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshData.H index f397d69ae1..8b6a6b247f 100644 --- a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshData.H +++ b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshData.H @@ -319,6 +319,17 @@ class globalMeshData void calcGlobalEdgeAllSlaves() const; + //- Synchronise pointwise data + template + void syncPointData + ( + List& pointData, + const labelListList& slaves, + const mapDistribute& slavesMap, + const CombineOp& cop + ) const; + + //- Disallow default bitwise copy construct globalMeshData(const globalMeshData&); @@ -505,6 +516,13 @@ public: // distributed by below map. const labelListList& globalPointSlaves() const; const mapDistribute& globalPointSlavesMap() const; + //- Helper to synchronise mesh data + template + void syncPointData + ( + List& pointData, + const CombineOp& cop + ) const; // Coupled edge to coupled edges. @@ -539,6 +557,13 @@ public: const globalIndex& globalPointAllNumbering()const; const labelListList& globalPointAllSlaves() const; const mapDistribute& globalPointAllSlavesMap() const; + //- Helper to synchronise mesh data + template + void syncPointAllData + ( + List& pointData, + const CombineOp& cop + ) const; // Coupled edge to all coupled edges (same numbering as // collocated) @@ -596,6 +621,13 @@ public: } // End namespace Foam +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "globalMeshDataTemplates.C" +#endif + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif diff --git a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshDataTemplates.C b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshDataTemplates.C new file mode 100644 index 0000000000..5e6415941e --- /dev/null +++ b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshDataTemplates.C @@ -0,0 +1,128 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "globalMeshData.H" +#include "polyMesh.H" +#include "mapDistribute.H" + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +void Foam::globalMeshData::syncPointData +( + List& pointData, + const labelListList& slaves, + const mapDistribute& slavesMap, + const CombineOp& cop +) const +{ + if (pointData.size() != mesh_.nPoints()) + { + FatalErrorIn("globalMeshData::syncPointData(..)") + << "Number of elements in data:" << pointData.size() + << " differs from number of points in mesh:" << mesh_.nPoints() + << abort(FatalError); + } + + const indirectPrimitivePatch& cpp = coupledPatch(); + const labelList& meshPoints = cpp.meshPoints(); + + // Copy mesh (point)data to coupled patch (point)data + Field cppFld(slavesMap.constructSize()); + forAll(meshPoints, patchPointI) + { + cppFld[patchPointI] = pointData[meshPoints[patchPointI]]; + } + + // Pull slave data onto master + slavesMap.distribute(cppFld); + + // Combine master data with slave data + forAll(slaves, patchPointI) + { + const labelList& slavePoints = slaves[patchPointI]; + + // Combine master with slave data + forAll(slavePoints, i) + { + cop(cppFld[patchPointI], cppFld[slavePoints[i]]); + } + // Copy result back to slave slots + forAll(slavePoints, i) + { + cppFld[slavePoints[i]] = cppFld[patchPointI]; + } + } + + // Push master data back to slaves + slavesMap.reverseDistribute(meshPoints.size(), cppFld); + + // Update mesh (point)data from coupled patch (point)data + forAll(meshPoints, patchPointI) + { + pointData[meshPoints[patchPointI]] = cppFld[patchPointI]; + } +} + + +template +void Foam::globalMeshData::syncPointData +( + List& pointData, + const CombineOp& cop +) const +{ + const labelListList& slaves = globalPointSlaves(); + const mapDistribute& map = globalPointSlavesMap(); + + syncPointData + ( + pointData, + slaves, + map, + cop + ); +} + + +template +void Foam::globalMeshData::syncPointAllData +( + List& pointData, + const CombineOp& cop +) const +{ + syncPointData + ( + pointData, + globalPointAllSlaves(), + globalPointAllSlavesMap(), + cop + ); +} + + +// ************************************************************************* // From a7c6b2a54765b1c1ee82b68a608a48a7156c3e85 Mon Sep 17 00:00:00 2001 From: mattijs Date: Tue, 16 Feb 2010 18:37:03 +0000 Subject: [PATCH 2/5] ENH: Added dummy operation, nopEqOp so gather/scatter becomes scatter only --- src/OpenFOAM/primitives/ops/ops.H | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/OpenFOAM/primitives/ops/ops.H b/src/OpenFOAM/primitives/ops/ops.H index f18ac14408..2706657f1b 100644 --- a/src/OpenFOAM/primitives/ops/ops.H +++ b/src/OpenFOAM/primitives/ops/ops.H @@ -82,6 +82,8 @@ EqOp(orEq, x = (x || y)) EqOp(eqMinus, x = -y) +EqOp(nopEq, (void)x) + #undef EqOp From 0720fb7466c8a08adbfd99e996dc41ac3a088183 Mon Sep 17 00:00:00 2001 From: mattijs Date: Wed, 17 Feb 2010 13:58:46 +0000 Subject: [PATCH 3/5] ENH: Have on coupledPolyPatch per face information on which are collocated --- .../polyMesh/globalMeshData/globalPoints.C | 144 +++--------------- .../polyMesh/globalMeshData/globalPoints.H | 20 +-- .../basic/coupled/coupledPolyPatch.C | 26 +++- .../basic/coupled/coupledPolyPatch.H | 10 +- 4 files changed, 57 insertions(+), 143 deletions(-) diff --git a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.C b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.C index f62527b272..2bb331fee8 100644 --- a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.C +++ b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.C @@ -35,141 +35,50 @@ defineTypeNameAndDebug(Foam::globalPoints, 0); const Foam::label Foam::globalPoints::fromCollocated = labelMax/2; -const Foam::scalar Foam::globalPoints::mergeDist = ROOTVSMALL; - // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // Routines to handle global indices // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -bool Foam::globalPoints::noTransform(const tensor& tt, const scalar mergeDist) -{ - return - (mag(tt.xx()-1) < mergeDist) - && (mag(tt.yy()-1) < mergeDist) - && (mag(tt.zz()-1) < mergeDist) - && (mag(tt.xy()) < mergeDist) - && (mag(tt.xz()) < mergeDist) - && (mag(tt.yx()) < mergeDist) - && (mag(tt.yz()) < mergeDist) - && (mag(tt.zx()) < mergeDist) - && (mag(tt.zy()) < mergeDist); -} - - -// Calculates per face whether couple is collocated. -Foam::PackedBoolList Foam::globalPoints::collocatedFaces -( - const coupledPolyPatch& pp, - const scalar mergeDist -) -{ - // Initialise to false - PackedBoolList collocated(pp.size()); - - const vectorField& separation = pp.separation(); - const tensorField& forwardT = pp.forwardT(); - - if (forwardT.size() == 0) - { - // Parallel. - if (separation.size() == 0) - { - collocated = 1u; - } - else if (separation.size() == 1) - { - // Fully separate. Do not synchronise. - } - else - { - // Per face separation. - forAll(pp, faceI) - { - if (mag(separation[faceI]) < mergeDist) - { - collocated[faceI] = 1u; - } - } - } - } - else if (forwardT.size() == 1) - { - // Fully transformed. - } - else - { - // Per face transformation. - forAll(pp, faceI) - { - if (noTransform(forwardT[faceI], mergeDist)) - { - collocated[faceI] = 1u; - } - } - } - return collocated; -} - - Foam::PackedBoolList Foam::globalPoints::collocatedPoints ( - const coupledPolyPatch& pp, - const scalar mergeDist + const coupledPolyPatch& pp ) { // Initialise to false - PackedBoolList collocated(pp.nPoints()); + PackedBoolList isCollocated(pp.nPoints()); - const vectorField& separation = pp.separation(); - const tensorField& forwardT = pp.forwardT(); + const boolList& collocated = pp.collocated(); - if (forwardT.size() == 0) + if (collocated.size() == 0) { - // Parallel. - if (separation.size() == 0) - { - collocated = 1u; - } - else if (separation.size() == 1) - { - // Fully separate. - } - else - { - // Per face separation. - for (label pointI = 0; pointI < pp.nPoints(); pointI++) - { - label faceI = pp.pointFaces()[pointI][0]; - - if (mag(separation[faceI]) < mergeDist) - { - collocated[pointI] = 1u; - } - } - } + isCollocated = 1; } - else if (forwardT.size() == 1) + else if (collocated.size() == 1) { - // Fully transformed. + // Uniform. + if (collocated[0]) + { + isCollocated = 1; + } } else { - // Per face transformation. - for (label pointI = 0; pointI < pp.nPoints(); pointI++) - { - label faceI = pp.pointFaces()[pointI][0]; + // Per face collocated or not. + const labelListList& pointFaces = pp.pointFaces(); - if (noTransform(forwardT[faceI], mergeDist)) + forAll(pointFaces, pfi) + { + if (collocated[pointFaces[pfi][0]]) { - collocated[pointI] = 1u; + isCollocated[pfi] = 1; } } } - return collocated; + return isCollocated; } - + Foam::label Foam::globalPoints::toGlobal ( @@ -467,8 +376,7 @@ void Foam::globalPoints::initOwnPoints ( collocatedPoints ( - refCast(pp), - mergeDist + refCast(pp) ) ); @@ -563,8 +471,7 @@ void Foam::globalPoints::sendPatchPoints ( collocatedPoints ( - procPatch, - mergeDist + procPatch ) ); @@ -663,8 +570,7 @@ void Foam::globalPoints::receivePatchPoints ( collocatedPoints ( - procPatch, - mergeDist + procPatch ) ); @@ -726,8 +632,7 @@ void Foam::globalPoints::receivePatchPoints ( collocatedPoints ( - cycPatch, - mergeDist + cycPatch ) ); @@ -1233,8 +1138,7 @@ void Foam::globalPoints::receiveSharedPoints ( collocatedPoints ( - cycPatch, - mergeDist + cycPatch ) ); diff --git a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.H b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.H index 246842632a..5498e46bb9 100644 --- a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.H +++ b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalPoints.H @@ -127,9 +127,6 @@ class globalPoints // collocated coupled points. static const label fromCollocated; - //- Distance to check whether points/faces are collocated. - static const scalar mergeDist; - // Private data @@ -162,22 +159,9 @@ class globalPoints // Private Member Functions - //- Is identity transform? - static bool noTransform(const tensor&, const scalar mergeDist); - - //- Return per face collocated status - static PackedBoolList collocatedFaces - ( - const coupledPolyPatch&, - const scalar mergeDist - ); - //- Return per point collocated status - static PackedBoolList collocatedPoints - ( - const coupledPolyPatch&, - const scalar mergeDist - ); + static PackedBoolList collocatedPoints(const coupledPolyPatch&); + // Wrappers around global point numbering to add collocated bit diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.C b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.C index 8e18f68c77..ba92292d42 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.C +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.C @@ -285,6 +285,7 @@ void Foam::coupledPolyPatch::calcTransformTensors separation_.setSize(0); forwardT_ = I; reverseT_ = I; + collocated_.setSize(0); } else { @@ -299,10 +300,14 @@ void Foam::coupledPolyPatch::calcTransformTensors { // Rotation, no separation + // Assume per-face differening transformation, correct later + separation_.setSize(0); forwardT_.setSize(Cf.size()); reverseT_.setSize(Cf.size()); + collocated_.setSize(Cf.size()); + collocated_ = false; forAll (forwardT_, facei) { @@ -321,6 +326,7 @@ void Foam::coupledPolyPatch::calcTransformTensors { forwardT_.setSize(1); reverseT_.setSize(1); + collocated_.setSize(1); if (debug) { @@ -332,11 +338,15 @@ void Foam::coupledPolyPatch::calcTransformTensors } else { + // No rotation, possible separation + forwardT_.setSize(0); reverseT_.setSize(0); separation_ = (nf&(Cr - Cf))*nf; + collocated_.setSize(separation_.size()); + // Three situations: // - separation is zero. No separation. // - separation is same. Single separation vector. @@ -344,15 +354,23 @@ void Foam::coupledPolyPatch::calcTransformTensors // Check for different separation per face bool sameSeparation = true; + bool doneWarning = false; forAll(separation_, facei) { scalar smallSqr = sqr(smallDist[facei]); + collocated_[facei] = (magSqr(separation_[facei]) < smallSqr); + + // Check if separation differing w.r.t. face 0. if (magSqr(separation_[facei] - separation_[0]) > smallSqr) { - if (debug) + sameSeparation = false; + + if (!doneWarning && debug) { + doneWarning = true; + Pout<< " separation " << separation_[facei] << " at " << facei << " differs from separation[0] " << separation_[0] @@ -360,15 +378,13 @@ void Foam::coupledPolyPatch::calcTransformTensors << smallDist[facei] << ". Assuming non-uniform separation." << endl; } - sameSeparation = false; - break; } } if (sameSeparation) { // Check for zero separation (at 0 so everywhere) - if (magSqr(separation_[0]) < sqr(smallDist[0])) + if (collocated_[0]) { if (debug) { @@ -378,6 +394,7 @@ void Foam::coupledPolyPatch::calcTransformTensors } separation_.setSize(0); + collocated_ = boolList(1, true); } else { @@ -389,6 +406,7 @@ void Foam::coupledPolyPatch::calcTransformTensors } separation_.setSize(1); + collocated_ = boolList(1, false); } } } diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H index e1afad60a8..6da230d300 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H @@ -64,6 +64,9 @@ class coupledPolyPatch //- Neighbour-cell transformation tensor mutable tensorField reverseT_; + //- Are faces collocated. Either size 0,1 or length of patch. + mutable boolList collocated_; + public: // Static data members @@ -261,7 +264,6 @@ public: return separation_; } - //- Are the cyclic planes parallel bool parallel() const { @@ -280,6 +282,12 @@ public: return reverseT_; } + //- Are faces collocated. Either size 0,1 or length of patch + const boolList& collocated() const + { + return collocated_; + } + //- Initialize ordering for primitivePatch. Does not // refer to *this (except for name() and type() etc.) From 3989723067b035bbd609825e95a9cc8933ecc712 Mon Sep 17 00:00:00 2001 From: mattijs Date: Wed, 17 Feb 2010 13:59:30 +0000 Subject: [PATCH 4/5] STYLE: Changed comment --- .../polyMesh/polyPatches/basic/generic/genericPolyPatch.H | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/generic/genericPolyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/generic/genericPolyPatch.H index ae8f7cbedb..2ac9cba937 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/generic/genericPolyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/generic/genericPolyPatch.H @@ -26,8 +26,8 @@ Class Foam::genericPolyPatch Description - Determines a mapping between patch face centres and mesh cell centres and - processors they're on. + Substitute for unknown patches. Used for postprocessing when only + basic polyPatch info is needed. Note Storage is not optimal. It stores all face centres and cells on all From 62637d8471fdbea865c858f5794c5480a5831e33 Mon Sep 17 00:00:00 2001 From: mattijs Date: Wed, 17 Feb 2010 14:01:44 +0000 Subject: [PATCH 5/5] ENH: initial overhaul of volPointInterpolation. - removed globalPointPatch* - removed pointPatchInterpolate* since all is now inside volPointInterpolation. --- .../decomposePar/decomposePar.C | 2 +- .../decomposePar/domainDecomposition.C | 10 - .../decomposePar/domainDecomposition.H | 3 - .../decomposePar/domainDecompositionMesh.C | 73 --- .../pointFieldDecomposerDecomposeFields.C | 20 +- .../foamToVTK/lagrangianWriter.H | 1 - etc/controlDict | 1 - src/OpenFOAM/Make/files | 4 + .../basic/coupled/coupledPointPatchField.H | 12 +- .../constraint/cyclic/cyclicPointPatchField.C | 8 +- .../constraint/cyclic/cyclicPointPatchField.H | 6 +- .../processor/processorPointPatchField.C | 36 +- .../processor/processorPointPatchField.H | 14 +- .../derived/global/globalPointPatchField.C | 169 ------ .../derived/global/globalPointPatchField.H | 166 ------ .../derived/global/globalPointPatchFields.C | 44 -- .../derived/global/globalPointPatchFields.H | 51 -- .../pointPatchField/pointPatchField.C | 64 +- .../pointPatchField/pointPatchField.H | 19 + .../lduAddressing/lduInterface/lduInterface.H | 1 + .../lduInterfaceField/lduInterfaceField.H | 1 + .../pointBoundaryMesh/pointBoundaryMesh.C | 27 +- .../pointBoundaryMesh/pointBoundaryMesh.H | 4 - src/OpenFOAM/meshes/pointMesh/pointMesh.C | 27 +- src/OpenFOAM/meshes/pointMesh/pointMesh.H | 6 +- .../basic/generic/genericPointPatch.H | 3 +- .../constraint/cyclic/cyclicPointPatch.C | 110 +--- .../constraint/cyclic/cyclicPointPatch.H | 9 +- .../processor/processorPointPatch.C | 322 ++-------- .../processor/processorPointPatch.H | 18 +- .../derived/coupled/coupledFacePointPatch.C | 19 - .../derived/coupled/coupledFacePointPatch.H | 26 +- .../derived/global/globalPointPatch.C | 58 -- .../derived/global/globalPointPatch.H | 209 ------- .../facePointPatch/facePointPatch.C | 60 +- .../facePointPatch/facePointPatch.H | 25 +- src/OpenFOAM/meshes/polyMesh/polyMesh.C | 14 +- src/OpenFOAM/primitives/bools/Switch/Switch.H | 11 + .../motionSmoother/motionSmootherTemplates.C | 1 - src/finiteVolume/Make/files | 2 +- .../pointPatchInterpolate.C | 208 ------- .../pointPatchInterpolation.C | 337 ----------- .../pointPatchInterpolation.H | 169 ------ .../volPointInterpolate.C | 243 ++++++-- .../volPointInterpolation.C | 556 ++++++++++++++++-- .../volPointInterpolation.H | 89 ++- .../meshRefinement/meshRefinement.C | 7 +- 47 files changed, 1078 insertions(+), 2187 deletions(-) delete mode 100644 src/OpenFOAM/fields/pointPatchFields/derived/global/globalPointPatchField.C delete mode 100644 src/OpenFOAM/fields/pointPatchFields/derived/global/globalPointPatchField.H delete mode 100644 src/OpenFOAM/fields/pointPatchFields/derived/global/globalPointPatchFields.C delete mode 100644 src/OpenFOAM/fields/pointPatchFields/derived/global/globalPointPatchFields.H delete mode 100644 src/OpenFOAM/meshes/pointMesh/pointPatches/derived/global/globalPointPatch.C delete mode 100644 src/OpenFOAM/meshes/pointMesh/pointPatches/derived/global/globalPointPatch.H delete mode 100644 src/finiteVolume/interpolation/volPointInterpolation/pointPatchInterpolation/pointPatchInterpolate.C delete mode 100644 src/finiteVolume/interpolation/volPointInterpolation/pointPatchInterpolation/pointPatchInterpolation.C delete mode 100644 src/finiteVolume/interpolation/volPointInterpolation/pointPatchInterpolation/pointPatchInterpolation.H diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C index ea8ffe9469..ac1d5a72fb 100644 --- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C +++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C @@ -666,7 +666,7 @@ int main(int argc, char *argv[]) ) ); - pointMesh procPMesh(procMesh, true); + pointMesh procPMesh(procMesh); pointFieldDecomposer fieldDecomposer ( diff --git a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C index 1fc3560763..eb9d5b02b9 100644 --- a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C +++ b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C @@ -109,7 +109,6 @@ Foam::domainDecomposition::domainDecomposition(const IOobject& io) procNeighbourProcessors_(nProcs_), procProcessorPatchSize_(nProcs_), procProcessorPatchStartIndex_(nProcs_), - globallySharedPoints_(0), cyclicParallel_(false) { if (decompositionDict_.found("distributed")) @@ -132,15 +131,6 @@ bool Foam::domainDecomposition::writeDecomposition() { Info<< "\nConstructing processor meshes" << endl; - // Make a lookup map for globally shared points - Map