Files
OpenFOAM-12/src/OpenFOAM/meshes/polyMesh/polyMeshUpdate.C
Henry Weller ab92fc5a39 fvMesh: Moved functionObject mesh change updates from polyMesh -> fvMesh
Many functionObjects operate on fvMesh objects, in particular vol and surface
fields and they cannot be updated in polyMesh as they depend on fvMesh data
which is updated after polyMesh.
2022-07-13 16:21:05 +01:00

143 lines
4.3 KiB
C++

/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Description
Update the polyMesh corresponding to the given map.
\*---------------------------------------------------------------------------*/
#include "polyMesh.H"
#include "polyTopoChangeMap.H"
#include "Time.H"
#include "globalMeshData.H"
#include "pointMesh.H"
#include "indexedOctree.H"
#include "treeDataCell.H"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::polyMesh::topoChange(const polyTopoChangeMap& map)
{
if (debug)
{
InfoInFunction
<< "Updating addressing and (optional) pointMesh/pointFields"
<< endl;
}
// Update boundaryMesh (note that patches themselves already ok)
boundary_.topoChange();
// Update zones
pointZones_.clearAddressing();
faceZones_.clearAddressing();
cellZones_.clearAddressing();
// Remove the stored tet base points
tetBasePtIsPtr_.clear();
// Remove the cell tree
cellTreePtr_.clear();
// Update parallel data
if (globalMeshDataPtr_.valid())
{
globalMeshDataPtr_->topoChange();
}
setInstance(time().timeName());
// Map the old motion points if present
if (oldPointsPtr_.valid())
{
// Make a copy of the original points
pointField oldMotionPoints = oldPointsPtr_();
pointField& newMotionPoints = oldPointsPtr_();
// Resize the list to new size
newMotionPoints.setSize(points_.size());
// Map the list
newMotionPoints.map(oldMotionPoints, map.pointMap());
// Any points created out-of-nothing get set to the current coordinate
// for lack of anything better.
forAll(map.pointMap(), newPointi)
{
if (map.pointMap()[newPointi] == -1)
{
newMotionPoints[newPointi] = points_[newPointi];
}
}
}
if (oldCellCentresPtr_.valid())
{
// Make a copy of the original cell-centres
pointField oldMotionCellCentres = oldCellCentresPtr_();
pointField& newMotionCellCentres = oldCellCentresPtr_();
// Resize the list to new size
newMotionCellCentres.setSize(cellCentres().size());
// Map the list
newMotionCellCentres.map(oldMotionCellCentres, map.cellMap());
// Any points created out-of-nothing get set to the current coordinate
// for lack of anything better.
forAll(map.cellMap(), newCelli)
{
if (map.cellMap()[newCelli] == -1)
{
newMotionCellCentres[newCelli] = cellCentres()[newCelli];
}
}
}
meshObject::topoChange<polyMesh>(*this, map);
meshObject::topoChange<pointMesh>(*this, map);
// Reset valid directions (could change by faces put into empty patches)
geometricD_ = Zero;
solutionD_ = Zero;
}
void Foam::polyMesh::mapMesh(const polyMeshMap& map)
{
meshObject::mapMesh<polyMesh>(*this, map);
meshObject::mapMesh<pointMesh>(*this, map);
}
void Foam::polyMesh::distribute(const polyDistributionMap& map)
{
meshObject::distribute<polyMesh>(*this, map);
meshObject::distribute<pointMesh>(*this, map);
}
// ************************************************************************* //