From faacebb1f296f0f67245d4e0cb8d354a8da2dfd0 Mon Sep 17 00:00:00 2001 From: mattijs Date: Mon, 20 Feb 2012 13:07:21 +0000 Subject: [PATCH] ENH: renumberMesh: changed api of renumber library. Changed API. Made bandCompression proper CutHillMcKey. Better stats. --- .../manipulation/renumberMesh/renumberMesh.C | 134 ++++++++++++++---- .../renumberMesh/renumberMeshDict | 2 +- .../meshes/bandCompression/bandCompression.C | 121 +++++++++++----- .../meshes/bandCompression/bandCompression.H | 5 +- .../polyTopoChange/polyTopoChange.C | 120 +++++++++++----- .../decompositionMethod/decompositionMethod.C | 4 +- .../CuthillMcKeeRenumber.C | 6 +- .../CuthillMcKeeRenumber.H | 15 +- .../boundaryFirstRenumber.C | 4 +- .../boundaryFirstRenumber.H | 15 +- .../manualRenumber/manualRenumber.C | 28 ++-- .../manualRenumber/manualRenumber.H | 17 ++- .../randomRenumber/randomRenumber.C | 12 +- .../randomRenumber/randomRenumber.H | 15 +- .../renumberMethod/renumberMethod.H | 18 ++- .../springRenumber/springRenumber.C | 4 +- .../springRenumber/springRenumber.H | 14 +- 17 files changed, 364 insertions(+), 170 deletions(-) diff --git a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C index 02e5a06567..487fde704a 100644 --- a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C +++ b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anispulation | ------------------------------------------------------------------------------- License @@ -105,6 +105,44 @@ label getBand(const labelList& owner, const labelList& neighbour) } +// Calculate band of matrix +void getBand +( + const label nCells, + const labelList& owner, + const labelList& neighbour, + label& bandwidth, + scalar& profile, // scalar to avoid overflow + scalar& sumSqrIntersect // scalar to avoid overflow +) +{ + labelList cellBandwidth(nCells, 0); + scalarField nIntersect(nCells, 0.0); + + forAll(neighbour, faceI) + { + label own = owner[faceI]; + label nei = neighbour[faceI]; + + // Note: mag not necessary for correct (upper-triangular) ordering. + label diff = nei-own; + cellBandwidth[nei] = max(cellBandwidth[nei], diff); + } + + forAll(nIntersect, cellI) + { + for (label rowI = cellI-cellBandwidth[cellI]; rowI < cellI; rowI++) + { + nIntersect[rowI]++; + } + } + + bandwidth = max(cellBandwidth); + profile = sum(cellBandwidth); + sumSqrIntersect = sum(Foam::sqr(nIntersect)); +} + + // Determine upper-triangular face order labelList getFaceOrder ( @@ -488,21 +526,12 @@ labelList regionRenumber const fvMesh& subMesh = subsetter.subMesh(); - labelList subReverseCellOrder = method.renumber + labelList subCellOrder = method.renumber ( subMesh, subMesh.cellCentres() ); - labelList subCellOrder - ( - invert - ( - subMesh.nCells(), - subReverseCellOrder - ) - ); - // Restore state UPstream::parRun() = oldParRun; @@ -556,13 +585,46 @@ int main(int argc, char *argv[]) const bool overwrite = args.optionFound("overwrite"); - label band = getBand(mesh.faceOwner(), mesh.faceNeighbour()); + label band; + scalar profile; + scalar sumSqrIntersect; + getBand + ( + mesh.nCells(), + mesh.faceOwner(), + mesh.faceNeighbour(), + band, + profile, + sumSqrIntersect + ); - Info<< "Mesh size: " << returnReduce(mesh.nCells(), sumOp