ENH: polyMesh: update pointMesh.

This commit is contained in:
mattijs
2013-12-17 09:02:25 +00:00
parent 0f86a78673
commit 08a9d05ccd
9 changed files with 124 additions and 35 deletions

View File

@ -265,7 +265,7 @@ Foam::polyMesh::polyMesh(const IOobject& io)
), ),
globalMeshDataPtr_(NULL), globalMeshDataPtr_(NULL),
moving_(false), moving_(false),
changing_(false), topoChanging_(false),
curMotionTimeIndex_(time().timeIndex()), curMotionTimeIndex_(time().timeIndex()),
oldPointsPtr_(NULL) oldPointsPtr_(NULL)
{ {
@ -447,7 +447,7 @@ Foam::polyMesh::polyMesh
), ),
globalMeshDataPtr_(NULL), globalMeshDataPtr_(NULL),
moving_(false), moving_(false),
changing_(false), topoChanging_(false),
curMotionTimeIndex_(time().timeIndex()), curMotionTimeIndex_(time().timeIndex()),
oldPointsPtr_(NULL) oldPointsPtr_(NULL)
{ {
@ -606,7 +606,7 @@ Foam::polyMesh::polyMesh
), ),
globalMeshDataPtr_(NULL), globalMeshDataPtr_(NULL),
moving_(false), moving_(false),
changing_(false), topoChanging_(false),
curMotionTimeIndex_(time().timeIndex()), curMotionTimeIndex_(time().timeIndex()),
oldPointsPtr_(NULL) oldPointsPtr_(NULL)
{ {
@ -673,8 +673,8 @@ void Foam::polyMesh::resetPrimitives
const bool validBoundary const bool validBoundary
) )
{ {
// Clear addressing. Keep geometric props for mapping. // Clear addressing. Keep geometric props and updateable props for mapping.
clearAddressing(); clearAddressing(true);
// Take over new primitive data. // Take over new primitive data.
// Optimized to avoid overwriting data at all // Optimized to avoid overwriting data at all

View File

@ -172,8 +172,8 @@ private:
//- Is the mesh moving //- Is the mesh moving
bool moving_; bool moving_;
//- Is the mesh changing (moving and/or topology changing) //- Is the mesh topology changing
bool changing_; bool topoChanging_;
//- Current time index for mesh motion //- Current time index for mesh motion
mutable label curMotionTimeIndex_; mutable label curMotionTimeIndex_;
@ -489,22 +489,27 @@ public:
{ {
bool m0 = moving_; bool m0 = moving_;
moving_ = m; moving_ = m;
changing_ = changing_ || moving_;
return m0; return m0;
} }
//- Is mesh topology changing
bool topoChanging() const
{
return topoChanging_;
}
//- Set the mesh topology to be changing
bool topoChanging(const bool c)
{
bool c0 = topoChanging_;
topoChanging_ = c;
return c0;
}
//- Is mesh changing (topology changing and/or moving) //- Is mesh changing (topology changing and/or moving)
bool changing() const bool changing() const
{ {
return changing_; return moving()||topoChanging();
}
//- Set the mesh to be changing
bool changing(const bool c)
{
bool c0 = changing_;
changing_ = c;
return c0;
} }
//- Move points, returns volumes swept by faces in motion //- Move points, returns volumes swept by faces in motion
@ -580,7 +585,7 @@ public:
void clearGeom(); void clearGeom();
//- Clear addressing //- Clear addressing
void clearAddressing(); void clearAddressing(const bool isMeshUpdate = false);
//- Clear all geometry and addressing unnecessary for CFD //- Clear all geometry and addressing unnecessary for CFD
void clearOut(); void clearOut();

View File

@ -60,6 +60,7 @@ void Foam::polyMesh::clearGeom()
<< endl; << endl;
} }
// Clear all geometric mesh objects
meshObject::clear<polyMesh, GeometricMeshObject>(*this); meshObject::clear<polyMesh, GeometricMeshObject>(*this);
primitiveMesh::clearGeom(); primitiveMesh::clearGeom();
@ -93,16 +94,33 @@ void Foam::polyMesh::clearAdditionalGeom()
} }
void Foam::polyMesh::clearAddressing() void Foam::polyMesh::clearAddressing(const bool isMeshUpdate)
{ {
if (debug) if (debug)
{ {
Info<< "void polyMesh::clearAddressing() : " Info<< "void polyMesh::clearAddressing() : "
<< "clearing topology" << "clearing topology isMeshUpdate:" << isMeshUpdate
<< endl; << endl;
} }
meshObject::clear<polyMesh, TopologicalMeshObject>(*this); if (isMeshUpdate)
{
// Part of a mesh update. Keep meshObjects that have an updateMesh
// callback
meshObject::clearUpto
<
polyMesh,
TopologicalMeshObject,
UpdateableMeshObject
>
(
*this
);
}
else
{
meshObject::clear<polyMesh, TopologicalMeshObject>(*this);
}
primitiveMesh::clearAddressing(); primitiveMesh::clearAddressing();

View File

@ -553,7 +553,7 @@ Foam::polyMesh::polyMesh
), ),
globalMeshDataPtr_(NULL), globalMeshDataPtr_(NULL),
moving_(false), moving_(false),
changing_(false), topoChanging_(false),
curMotionTimeIndex_(time().timeIndex()), curMotionTimeIndex_(time().timeIndex()),
oldPointsPtr_(NULL) oldPointsPtr_(NULL)
{ {
@ -837,7 +837,7 @@ Foam::polyMesh::polyMesh
), ),
globalMeshDataPtr_(NULL), globalMeshDataPtr_(NULL),
moving_(false), moving_(false),
changing_(false), topoChanging_(false),
curMotionTimeIndex_(time().timeIndex()), curMotionTimeIndex_(time().timeIndex()),
oldPointsPtr_(NULL) oldPointsPtr_(NULL)
{ {

View File

@ -32,6 +32,7 @@ License
#include "syncTools.H" #include "syncTools.H"
#include "pointFields.H" #include "pointFields.H"
#include "sigFpe.H" #include "sigFpe.H"
#include "cellSet.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@ -1072,6 +1073,26 @@ Foam::dynamicRefineFvMesh::dynamicRefineFvMesh(const IOobject& io)
{ {
protectedCell_.clear(); protectedCell_.clear();
} }
else
{
cellSet protectedCells(*this, "protectedCells", nProtected);
forAll(protectedCell_, cellI)
{
if (protectedCell_[cellI])
{
protectedCells.insert(cellI);
}
}
Info<< "Detected " << returnReduce(nProtected, sumOp<label>())
<< " cells that are projected from refinement."
<< " Writing these to cellSet "
<< protectedCells.name()
<< "." << endl;
protectedCells.write();
}
} }
@ -1110,7 +1131,7 @@ bool Foam::dynamicRefineFvMesh::update()
if (refineInterval == 0) if (refineInterval == 0)
{ {
changing(hasChanged); topoChanging(hasChanged);
return false; return false;
} }
@ -1279,7 +1300,13 @@ bool Foam::dynamicRefineFvMesh::update()
nRefinementIterations_++; nRefinementIterations_++;
} }
changing(hasChanged); topoChanging(hasChanged);
if (hasChanged)
{
// Reset moving flag (if any). If not using inflation we'll not move,
// if are using inflation any follow on movePoints will set it.
moving(false);
}
return hasChanged; return hasChanged;
} }

View File

@ -3184,7 +3184,9 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::changeMesh
syncParallel syncParallel
); );
mesh.changing(true); mesh.topoChanging(true);
// Note: could already set moving flag as well
// mesh.moving(true);
} }
else else
{ {
@ -3199,7 +3201,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::changeMesh
patchStarts, patchStarts,
syncParallel syncParallel
); );
mesh.changing(true); mesh.topoChanging(true);
} }
// Clear out primitives // Clear out primitives

View File

@ -110,10 +110,42 @@ void Foam::fvMesh::clearGeom()
} }
void Foam::fvMesh::clearAddressing() void Foam::fvMesh::clearAddressing(const bool isMeshUpdate)
{ {
meshObject::clear<fvMesh, TopologicalMeshObject>(*this); if (debug)
meshObject::clear<lduMesh, TopologicalMeshObject>(*this); {
Info<< "fvMesh::clearAddressing(const bool) :"
<< " isMeshUpdate:" << isMeshUpdate << endl;
}
if (isMeshUpdate)
{
// Part of a mesh update. Keep meshObjects that have an updateMesh
// callback
meshObject::clearUpto
<
fvMesh,
TopologicalMeshObject,
UpdateableMeshObject
>
(
*this
);
meshObject::clearUpto
<
lduMesh,
TopologicalMeshObject,
UpdateableMeshObject
>
(
*this
);
}
else
{
meshObject::clear<fvMesh, TopologicalMeshObject>(*this);
meshObject::clear<lduMesh, TopologicalMeshObject>(*this);
}
deleteDemandDrivenData(lduPtr_); deleteDemandDrivenData(lduPtr_);
} }
@ -806,7 +838,8 @@ void Foam::fvMesh::updateMesh(const mapPolyMesh& mpm)
// Clear the current volume and other geometry factors // Clear the current volume and other geometry factors
surfaceInterpolation::clearOut(); surfaceInterpolation::clearOut();
clearAddressing(); // Clear any non-updateable addressing
clearAddressing(true);
meshObject::updateMesh<fvMesh>(*this, mpm); meshObject::updateMesh<fvMesh>(*this, mpm);
meshObject::updateMesh<lduMesh>(*this, mpm); meshObject::updateMesh<lduMesh>(*this, mpm);

View File

@ -141,7 +141,7 @@ class fvMesh
void clearGeom(); void clearGeom();
//- Clear addressing //- Clear addressing
void clearAddressing(); void clearAddressing(const bool isMeshUpdate = false);
//- Preserve old volume(s) //- Preserve old volume(s)
void storeOldVol(const scalarField&); void storeOldVol(const scalarField&);

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -65,6 +65,12 @@ bool Foam::rawTopoChangerFvMesh::update()
// Do mesh changes (use inflation - put new points in topoChangeMap) // Do mesh changes (use inflation - put new points in topoChangeMap)
Info<< "rawTopoChangerFvMesh : Checking for topology changes..." Info<< "rawTopoChangerFvMesh : Checking for topology changes..."
<< endl; << endl;
// Mesh not moved/changed yet
moving(false);
topoChanging(false);
// Do any topology changes. Sets topoChanging (through polyTopoChange)
autoPtr<mapPolyMesh> topoChangeMap = topoChanger_.changeMesh(true); autoPtr<mapPolyMesh> topoChangeMap = topoChanger_.changeMesh(true);
bool hasChanged = topoChangeMap.valid(); bool hasChanged = topoChangeMap.valid();
@ -170,8 +176,6 @@ bool Foam::rawTopoChangerFvMesh::update()
// << " no topology changes..." << endl; // << " no topology changes..." << endl;
} }
changing(hasChanged);
return hasChanged; return hasChanged;
} }