diff --git a/src/finiteVolume/fvMesh/fvMesh.C b/src/finiteVolume/fvMesh/fvMesh.C index e90919877d74510879cc58993e31c2e3fa3097a8..98346e4c777b4acf0510d202dc092624845245d0 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 c2d414dceaac2c0efaa276dfda595d51ce0da8f5..907cc418fde3b90c644b5ae3064a68e5cffb68ac 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();