openfoam/applications/utilities/postProcessing/dataConversion/foamToEnsight/checkMeshMoving.H
Mark Olesen 3e87a46498 ENH: multi-region support for foamToEnsight (#2080)
- additional finite-area support too.
2021-05-30 21:02:59 +02:00

84 lines
2.3 KiB
C

/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
Description
Check for "points" in any of the result directories (each region)
\*---------------------------------------------------------------------------*/
// All regions moving, or no regions moving. Do not mix.
bool hasMovingMesh(false);
if (timeDirs.size() > 1)
{
// We already loaded meshes (usually from constant).
// See if any other "polyMesh/points" files exist too.
// Do all regions as moving, or all as static.
boolList isMoving(meshes.size(), false);
label nMoving = 0;
Info<< "Search for moving mesh ... " << flush;
for (const instant& inst : timeDirs)
{
const word& timeName = inst.name();
forAll(meshes, regioni)
{
const fvMesh& mesh = meshes[regioni];
if
(
!isMoving[regioni]
&& (timeName != mesh.pointsInstance())
&& IOobject
(
"points",
timeName,
polyMesh::meshSubDir,
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE,
false // no register
).typeHeaderOk<pointIOField>(true, false)
)
{
isMoving[regioni] = true;
++nMoving;
}
}
if (nMoving == isMoving.size())
{
break;
}
}
if (nMoving)
{
Info<< "found " << nMoving
<< " moving regions. Writing meshes for every timestep." << endl;
}
else
{
Info<< "none detected." << endl;
}
hasMovingMesh = (nMoving != 0);
}
// Ensure consistency
reduce(hasMovingMesh, orOp<bool>());
// ************************************************************************* //