From 6608c7c57b26b523deaa19cdf58108a644aa6593 Mon Sep 17 00:00:00 2001 From: graham Date: Mon, 11 Oct 2010 17:38:51 +0100 Subject: [PATCH] ENH: overrideCellCentres function. --- .../meshes/primitiveMesh/primitiveMesh.H | 6 +++ .../primitiveMeshCellCentresAndVols.C | 38 +++++++++++++++++++ src/meshTools/octree/treeBoundBox.C | 2 +- 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/OpenFOAM/meshes/primitiveMesh/primitiveMesh.H b/src/OpenFOAM/meshes/primitiveMesh/primitiveMesh.H index 61c3da9bb9..826272a45f 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/primitiveMesh.H +++ b/src/OpenFOAM/meshes/primitiveMesh/primitiveMesh.H @@ -489,6 +489,12 @@ public: const scalarField& cellVolumes() const; const vectorField& faceAreas() const; + // Override cell centres with supplied positions + void overrideCellCentres + ( + const vectorField& cellCtrs + ) const; + // Mesh motion diff --git a/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCellCentresAndVols.C b/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCellCentresAndVols.C index 7b3d28439b..376017c2e3 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCellCentresAndVols.C +++ b/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCellCentresAndVols.C @@ -28,6 +28,7 @@ Description \*---------------------------------------------------------------------------*/ #include "primitiveMesh.H" +#include "demandDrivenData.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -168,4 +169,41 @@ const Foam::scalarField& Foam::primitiveMesh::cellVolumes() const } +void Foam::primitiveMesh::overrideCellCentres +( + const vectorField& newCellCtrs +) const +{ + if (newCellCtrs.size() != nCells()) + { + FatalErrorIn + ( + "void Foam::primitiveMesh::overrideCellCentres" + "(" + "const vectorField& newCellCtrs" + ") const" + ) + << "Size of new cell centres for override not equal to the " + << "number of cells in the mesh." + << abort(FatalError); + } + + if (debug) + { + Pout<< "void Foam::primitiveMesh::overrideCellCentres" + << "(const vectorField& newCellCtrs) const : " + << "overriding cell centres." << endl; + } + + deleteDemandDrivenData(cellCentresPtr_); + deleteDemandDrivenData(cellVolumesPtr_); + + // Calculate the cell volumes - these are invariant with respect + // to the centre. + calcCellCentresAndVols(); + + *cellCentresPtr_ = newCellCtrs; +} + + // ************************************************************************* // diff --git a/src/meshTools/octree/treeBoundBox.C b/src/meshTools/octree/treeBoundBox.C index e4f4c14543..6b1fef6bf4 100644 --- a/src/meshTools/octree/treeBoundBox.C +++ b/src/meshTools/octree/treeBoundBox.C @@ -134,7 +134,7 @@ Foam::treeBoundBox::treeBoundBox(const UList& points) WarningIn ( "treeBoundBox::treeBoundBox(const UList&)" - ) << "cannot find bounding box for zero-sized pointField" + ) << "cannot find bounding box for zero-sized pointField, " << "returning zero" << endl; return;