From 2adfd534db0fdb5a33d5e67e59a96e52dd2c9856 Mon Sep 17 00:00:00 2001 From: mattijs Date: Tue, 8 Feb 2011 16:16:50 +0000 Subject: [PATCH 01/17] ENH: globalMeshData, mapDistribute : added pointBoundaryFaces/pointBoundaryCells --- .../test/globalMeshData/Test-globalMeshData.C | 215 ++-- applications/test/syncTools/Test-syncTools.C | 10 +- .../Fields/transformList/transformList.C | 50 +- .../Fields/transformList/transformList.H | 26 +- .../polyMesh/globalMeshData/globalMeshData.C | 1005 ++++++++++------- .../polyMesh/globalMeshData/globalMeshData.H | 72 +- .../globalMeshData/globalMeshDataTemplates.C | 14 +- .../mapPolyMesh/mapDistribute/mapDistribute.C | 188 ++- .../mapPolyMesh/mapDistribute/mapDistribute.H | 206 +++- .../mapDistribute/mapDistributeTemplates.C | 65 +- .../meshes/polyMesh/syncTools/syncTools.C | 71 -- .../meshes/polyMesh/syncTools/syncTools.H | 324 +++--- .../polyMesh/syncTools/syncToolsTemplates.C | 288 ++--- 13 files changed, 1462 insertions(+), 1072 deletions(-) diff --git a/applications/test/globalMeshData/Test-globalMeshData.C b/applications/test/globalMeshData/Test-globalMeshData.C index 6feaf5cc05..3c789748bf 100644 --- a/applications/test/globalMeshData/Test-globalMeshData.C +++ b/applications/test/globalMeshData/Test-globalMeshData.C @@ -70,7 +70,12 @@ int main(int argc, char *argv[]) ); // Exchange data. Apply positional transforms. - globalPointSlavesMap.distribute(transforms, coords, true); + globalPointSlavesMap.distribute + ( + transforms, + coords, + mapDistribute::transformPosition() + ); // Print forAll(slaves, pointI) @@ -127,7 +132,12 @@ int main(int argc, char *argv[]) } // Exchange data Apply positional transforms. - globalEdgeSlavesMap.distribute(transforms, ec, true); + globalEdgeSlavesMap.distribute + ( + transforms, + ec, + mapDistribute::transformPosition() + ); // Print forAll(slaves, edgeI) @@ -163,82 +173,131 @@ int main(int argc, char *argv[]) } - //// Test: (collocated) point to faces addressing - //{ - // const labelListList& globalPointBoundaryFaces = - // globalData.globalPointBoundaryFaces(); - // const mapDistribute& globalPointBoundaryFacesMap = - // globalData.globalPointBoundaryFacesMap(); - // - // label nBnd = mesh.nFaces()-mesh.nInternalFaces(); - // - // pointField fc(globalPointBoundaryFacesMap.constructSize()); - // SubList(fc, nBnd).assign - // ( - // primitivePatch - // ( - // SubList - // ( - // mesh.faces(), - // nBnd, - // mesh.nInternalFaces() - // ), - // mesh.points() - // ).faceCentres() - // ); - // - // // Exchange data - // globalPointBoundaryFacesMap.distribute(fc); - // - // // Print - // forAll(globalPointBoundaryFaces, pointI) - // { - // const labelList& bFaces = globalPointBoundaryFaces[pointI]; - // - // Pout<< "Point:" << pointI - // << " at:" << coupledPatch.localPoints()[pointI] - // << " connected to faces:" << endl; - // - // forAll(bFaces, i) - // { - // Pout<< " " << fc[bFaces[i]] << endl; - // } - // } - //} - // - // - //// Test:(collocated) point to cells addressing - //{ - // const labelList& boundaryCells = globalData.boundaryCells(); - // const labelListList& globalPointBoundaryCells = - // globalData.globalPointBoundaryCells(); - // const mapDistribute& globalPointBoundaryCellsMap = - // globalData.globalPointBoundaryCellsMap(); - // - // pointField cc(globalPointBoundaryCellsMap.constructSize()); - // forAll(boundaryCells, i) - // { - // cc[i] = mesh.cellCentres()[boundaryCells[i]]; - // } - // - // // Exchange data - // globalPointBoundaryCellsMap.distribute(cc); - // - // // Print - // forAll(globalPointBoundaryCells, pointI) - // { - // const labelList& bCells = globalPointBoundaryCells[pointI]; - // - // Pout<< "Point:" << pointI - // << " at:" << coupledPatch.localPoints()[pointI] - // << " connected to cells:" << endl; - // - // forAll(bCells, i) - // { - // Pout<< " " << cc[bCells[i]] << endl; - // } - // } - //} + // Test: point to faces addressing + { + const mapDistribute& globalPointBoundaryFacesMap = + globalData.globalPointBoundaryFacesMap(); + const labelListList& slaves = + globalData.globalPointBoundaryFaces(); + const labelListList& transformedSlaves = + globalData.globalPointTransformedBoundaryFaces(); + + label nBnd = mesh.nFaces()-mesh.nInternalFaces(); + + pointField fc(globalPointBoundaryFacesMap.constructSize()); + SubList(fc, nBnd).assign + ( + primitivePatch + ( + SubList + ( + mesh.faces(), + nBnd, + mesh.nInternalFaces() + ), + mesh.points() + ).faceCentres() + ); + + // Exchange data + globalPointBoundaryFacesMap.distribute + ( + transforms, + fc, + mapDistribute::transformPosition() + ); + + // Print + forAll(slaves, pointI) + { + const labelList& slaveFaces = slaves[pointI]; + + if (slaveFaces.size() > 0) + { + Pout<< "Master point:" << pointI + << " at:" << coupledPatch.localPoints()[pointI] + << " connected to " << slaveFaces.size() + << " untransformed faces:" << endl; + + forAll(slaveFaces, i) + { + Pout<< " " << fc[slaveFaces[i]] << endl; + } + } + + const labelList& transformedSlaveFaces = transformedSlaves[pointI]; + + if (transformedSlaveFaces.size() > 0) + { + Pout<< "Master point:" << pointI + << " connected to " << transformedSlaveFaces.size() + << " transformed faces:" << endl; + + forAll(transformedSlaveFaces, i) + { + Pout<< " " << fc[transformedSlaveFaces[i]] << endl; + } + } + } + } + + + // Test: point to cells addressing + { + const labelList& boundaryCells = globalData.boundaryCells(); + const mapDistribute& globalPointBoundaryCellsMap = + globalData.globalPointBoundaryCellsMap(); + const labelListList& slaves = globalData.globalPointBoundaryCells(); + const labelListList& transformedSlaves = + globalData.globalPointTransformedBoundaryCells(); + + pointField cc(globalPointBoundaryCellsMap.constructSize()); + forAll(boundaryCells, i) + { + cc[i] = mesh.cellCentres()[boundaryCells[i]]; + } + + // Exchange data + globalPointBoundaryCellsMap.distribute + ( + transforms, + cc, + mapDistribute::transformPosition() + ); + + // Print + forAll(slaves, pointI) + { + const labelList& pointCells = slaves[pointI]; + + if (pointCells.size() > 0) + { + Pout<< "Master point:" << pointI + << " at:" << coupledPatch.localPoints()[pointI] + << " connected to " << pointCells.size() + << " untransformed boundaryCells:" << endl; + + forAll(pointCells, i) + { + Pout<< " " << cc[pointCells[i]] << endl; + } + } + + const labelList& transformPointCells = transformedSlaves[pointI]; + + if (transformPointCells.size() > 0) + { + Pout<< "Master point:" << pointI + << " connected to " << transformPointCells.size() + << " transformed boundaryCells:" << endl; + + forAll(transformPointCells, i) + { + Pout<< " " << cc[transformPointCells[i]] << endl; + } + } + } + } Info<< "End\n" << endl; diff --git a/applications/test/syncTools/Test-syncTools.C b/applications/test/syncTools/Test-syncTools.C index 094068e94a..6f9d5f408a 100644 --- a/applications/test/syncTools/Test-syncTools.C +++ b/applications/test/syncTools/Test-syncTools.C @@ -30,12 +30,12 @@ Description \*---------------------------------------------------------------------------*/ +#include "syncTools.H" #include "argList.H" #include "polyMesh.H" #include "Time.H" #include "Random.H" #include "PackedList.H" -#include "syncTools.H" using namespace Foam; @@ -285,7 +285,7 @@ void testSparseData(const polyMesh& mesh, Random& rndGen) { // Create some data. Use slightly perturbed positions. - EdgeMap sparseData; + EdgeMap sparseData; pointField fullData(mesh.nEdges(), point::max); const edgeList& edges = allBoundary.edges(); @@ -313,13 +313,13 @@ void testSparseData(const polyMesh& mesh, Random& rndGen) ( mesh, sparseData, - minEqOp() + minMagSqrEqOp() ); syncTools::syncEdgeList ( mesh, fullData, - minEqOp(), + minMagSqrEqOp(), point::max ); @@ -350,7 +350,7 @@ void testSparseData(const polyMesh& mesh, Random& rndGen) { const edge& e = mesh.edges()[meshEdgeI]; - EdgeMap::const_iterator iter = sparseData.find(e); + EdgeMap::const_iterator iter = sparseData.find(e); if (iter != sparseData.end()) { diff --git a/src/OpenFOAM/fields/Fields/transformList/transformList.C b/src/OpenFOAM/fields/Fields/transformList/transformList.C index 04cff1b22d..73353620d9 100644 --- a/src/OpenFOAM/fields/Fields/transformList/transformList.C +++ b/src/OpenFOAM/fields/Fields/transformList/transformList.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,11 +46,17 @@ Foam::List Foam::transform template -void Foam::transformList -( - const tensorField& rotTensor, - UList& field -) +void Foam::transformList(const tensor& rotTensor, UList& field) +{ + forAll(field, i) + { + field[i] = transform(rotTensor, field[i]); + } +} + + +template +void Foam::transformList(const tensorField& rotTensor, UList& field) { if (rotTensor.size() == 1) { @@ -79,11 +85,17 @@ void Foam::transformList template -void Foam::transformList -( - const tensorField& rotTensor, - Map& field -) +void Foam::transformList(const tensor& rotTensor, Map& field) +{ + forAllIter(typename Map, field, iter) + { + iter() = transform(rotTensor[0], iter()); + } +} + + +template +void Foam::transformList(const tensorField& rotTensor, Map& field) { if (rotTensor.size() == 1) { @@ -105,11 +117,17 @@ void Foam::transformList template -void Foam::transformList -( - const tensorField& rotTensor, - EdgeMap& field -) +void Foam::transformList(const tensor& rotTensor, EdgeMap& field) +{ + forAllIter(typename EdgeMap, field, iter) + { + iter() = transform(rotTensor[0], iter()); + } +} + + +template +void Foam::transformList(const tensorField& rotTensor, EdgeMap& field) { if (rotTensor.size() == 1) { diff --git a/src/OpenFOAM/fields/Fields/transformList/transformList.H b/src/OpenFOAM/fields/Fields/transformList/transformList.H index 3dde0e65bb..16fbc4b946 100644 --- a/src/OpenFOAM/fields/Fields/transformList/transformList.H +++ b/src/OpenFOAM/fields/Fields/transformList/transformList.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -60,33 +60,57 @@ List transform //- Apply transformation to list. Either single transformation tensor // or one tensor per element. template +void transformList(const tensor&, UList&); +template void transformList(const tensorField&, UList&); +template +void transformList(const tensor&, Map&); template void transformList(const tensorField&, Map&); +template +void transformList(const tensor&, EdgeMap&); template void transformList(const tensorField&, EdgeMap&); +template<> +inline void transformList(const tensor&, labelUList&) +{} template<> inline void transformList(const tensorField&, labelUList&) {} template<> +inline void transformList(const tensor&, Map