OpenFOAM-4.x/src/parallel/decompose/decompositionMethods/decompositionConstraints/refinementHistory/refinementHistoryConstraint.C
Henry Weller 1441f8cab0 Patches contributed by Mattijs Janssens:
splitMeshRegions: handle flipping of faces for surface fields

subsetMesh: subset dimensionedFields

decomposePar: use run-time selection of decomposition constraints. Used to
    keep cells on particular processors. See the decomposeParDict in

$FOAM_UTILITIES/parallel/decomposePar:
  - preserveBaffles: keep baffle faces on same processor
  - preserveFaceZones: keep faceZones owner and neighbour on same processor
  - preservePatches: keep owner and neighbour on same processor. Note: not
    suitable for cyclicAMI since these are not coupled on the patch level
  - singleProcessorFaceSets: keep complete faceSet on a single processor
  - refinementHistory: keep cells originating from a single cell on the
    same processor.

decomposePar: clean up decomposition of refinement data from snappyHexMesh

reconstructPar: reconstruct refinement data (refineHexMesh, snappyHexMesh)

reconstructParMesh: reconstruct refinement data (refineHexMesh, snappyHexMesh)

redistributePar:
  - corrected mapping surfaceFields
  - adding processor patches in order consistent with decomposePar

argList: check that slaves are running same version as master

fvMeshSubset: move to dynamicMesh library

fvMeshDistribute:
  - support for mapping dimensionedFields
  - corrected mapping of surfaceFields

parallel routines: allow parallel running on single processor

Field: support for
  - distributed mapping
  - mapping with flipping

mapDistribute: support for flipping

AMIInterpolation: avoid constructing localPoints
2016-05-15 16:36:48 +01:00

212 lines
5.7 KiB
C

/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2015-2016 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/>.
\*---------------------------------------------------------------------------*/
#include "refinementHistoryConstraint.H"
#include "addToRunTimeSelectionTable.H"
#include "syncTools.H"
#include "refinementHistory.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
defineTypeName(refinementHistoryConstraint);
addToRunTimeSelectionTable
(
decompositionConstraint,
refinementHistoryConstraint,
dictionary
);
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::refinementHistoryConstraint::refinementHistoryConstraint
(
const dictionary& constraintsDict,
const word& modelType
)
:
decompositionConstraint(constraintsDict, typeName)
{
if (decompositionConstraint::debug)
{
Info<< type() << " : setting constraints to preserve refinement history"
<< endl;
}
}
Foam::refinementHistoryConstraint::refinementHistoryConstraint()
:
decompositionConstraint(dictionary(), typeName)
{
if (decompositionConstraint::debug)
{
Info<< type() << " : setting constraints to refinement history"
<< endl;
}
}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
void Foam::refinementHistoryConstraint::add
(
const polyMesh& mesh,
boolList& blockedFace,
PtrList<labelList>& specifiedProcessorFaces,
labelList& specifiedProcessor,
List<labelPair>& explicitConnections
) const
{
autoPtr<const refinementHistory> storagePtr;
refinementHistory const* refPtr = NULL;
if (mesh.foundObject<refinementHistory>("refinementHistory"))
{
if (decompositionConstraint::debug)
{
Info<< type() << " : found refinementHistory" << endl;
}
refPtr = &mesh.lookupObject<refinementHistory>("refinementHistory");
}
else
{
if (decompositionConstraint::debug)
{
Info<< type() << " : reading refinementHistory from time "
<< mesh.facesInstance() << endl;
}
storagePtr.reset
(
new refinementHistory
(
IOobject
(
"refinementHistory",
mesh.facesInstance(),
polyMesh::meshSubDir,
mesh,
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE
),
mesh.nCells()
)
);
}
const refinementHistory& history =
(
storagePtr.valid()
? storagePtr()
: *refPtr
);
if (history.active())
{
// refinementHistory itself implements decompositionConstraint
history.add
(
blockedFace,
specifiedProcessorFaces,
specifiedProcessor,
explicitConnections
);
}
}
void Foam::refinementHistoryConstraint::apply
(
const polyMesh& mesh,
const boolList& blockedFace,
const PtrList<labelList>& specifiedProcessorFaces,
const labelList& specifiedProcessor,
const List<labelPair>& explicitConnections,
labelList& decomposition
) const
{
autoPtr<const refinementHistory> storagePtr;
refinementHistory const* refPtr = NULL;
if (mesh.foundObject<refinementHistory>("refinementHistory"))
{
//if (decompositionConstraint::debug)
//{
// Info<< type() << " : found refinementHistory" << endl;
//}
refPtr = &mesh.lookupObject<refinementHistory>("refinementHistory");
}
else
{
//if (decompositionConstraint::debug)
//{
// Info<< type() << " : reading refinementHistory from time "
// << mesh.facesInstance() << endl;
//}
storagePtr.reset
(
new refinementHistory
(
IOobject
(
"refinementHistory",
mesh.facesInstance(),
polyMesh::meshSubDir,
mesh,
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE
),
mesh.nCells()
)
);
}
const refinementHistory& history =
(
storagePtr.valid()
? storagePtr()
: *refPtr
);
if (history.active())
{
// refinementHistory itself implements decompositionConstraint
history.apply
(
blockedFace,
specifiedProcessorFaces,
specifiedProcessor,
explicitConnections,
decomposition
);
}
}
// ************************************************************************* //