From 68093ce564608ba70b301bf34830fbad02ae0d7b Mon Sep 17 00:00:00 2001 From: mattijs <mattijs> Date: Wed, 1 Feb 2012 15:15:32 +0000 Subject: [PATCH] BUG: fvMesh::movePoints: re-create demand-driven geometry data as early as possible --- src/finiteVolume/fvMesh/fvMesh.C | 50 ++++++++++++++++++++++++++++---- src/finiteVolume/fvMesh/fvMesh.H | 6 +++- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/src/finiteVolume/fvMesh/fvMesh.C b/src/finiteVolume/fvMesh/fvMesh.C index e90919877d7..98346e4c777 100644 --- a/src/finiteVolume/fvMesh/fvMesh.C +++ b/src/finiteVolume/fvMesh/fvMesh.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) 2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -82,6 +82,40 @@ void Foam::fvMesh::clearGeomNotOldVol() } +void Foam::fvMesh::updateGeomNotOldVol() +{ + bool haveV = (VPtr_ != NULL); + bool haveSf = (SfPtr_ != NULL); + bool haveMagSf = (magSfPtr_ != NULL); + bool haveCP = (CPtr_ != NULL); + bool haveCf = (CfPtr_ != NULL); + + clearGeomNotOldVol(); + + // Now recreate the fields + if (haveV) + { + (void)V(); + } + if (haveSf) + { + (void)Sf(); + } + if (haveMagSf) + { + (void)magSf(); + } + if (haveCP) + { + (void)C(); + } + if (haveCf) + { + (void)Cf(); + } +} + + void Foam::fvMesh::clearGeom() { clearGeomNotOldVol(); @@ -562,10 +596,6 @@ Foam::tmp<Foam::scalarField> Foam::fvMesh::movePoints(const pointField& p) } - // delete out of date geometrical information - clearGeomNotOldVol(); - - if (!phiPtr_) { // Create mesh motion flux @@ -612,6 +642,16 @@ Foam::tmp<Foam::scalarField> Foam::fvMesh::movePoints(const pointField& p) phi.boundaryField()[patchI] *= rDeltaT; } + // Update or delete the local geometric properties as early as possible so + // they can be used if necessary. These get recreated here instead of + // demand driven since they might do parallel transfers which can conflict + // with when they're actually being used. + // Note that between above "polyMesh::movePoints(p)" and here nothing + // should use the local geometric properties. + updateGeomNotOldVol(); + + + // Update other local data boundary_.movePoints(); surfaceInterpolation::movePoints(); diff --git a/src/finiteVolume/fvMesh/fvMesh.H b/src/finiteVolume/fvMesh/fvMesh.H index c2d414dceaa..907cc418fde 100644 --- a/src/finiteVolume/fvMesh/fvMesh.H +++ b/src/finiteVolume/fvMesh/fvMesh.H @@ -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) 2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -133,6 +133,10 @@ class fvMesh //- Clear geometry but not the old-time cell volumes void clearGeomNotOldVol(); + //- Clear geometry like clearGeomNotOldVol but recreate any + // geometric demand-driven data that was set + void updateGeomNotOldVol(); + //- Clear geometry void clearGeom(); -- GitLab