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

108 lines
3.0 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
Additional mesh accounting (Ensight)
\*---------------------------------------------------------------------------*/
PtrList<ensightCase> ensightCases(regionNames.size());
PtrList<ensightMesh> ensightMeshes(regionNames.size());
PtrList<faMesh> meshesFa(regionNames.size());
PtrList<ensightCase> ensightCasesFa(regionNames.size());
PtrList<ensightFaMesh> ensightMeshesFa(regionNames.size());
{
forAll(regionNames, regioni)
{
const fvMesh& mesh = meshes[regioni];
const word& regionName = regionNames[regioni];
const word& regionDir =
(
regionName != polyMesh::defaultRegion
? regionName
: word::null
);
fileName ensCasePath(outputDir);
word ensCaseName(args.globalCaseName());
if (!regionDir.empty())
{
ensCaseName = regionName;
ensCasePath /= regionName;
// Handle very rare naming collision with Ensight directories
if (regionName == "data")
{
ensCasePath += "-region";
}
}
ensightMeshes.set
(
regioni,
new ensightMesh(mesh, writeOpts)
);
// New ensight case file, initialize header etc.
ensightCases.set
(
regioni,
new ensightCase(ensCasePath, ensCaseName, caseOpts)
);
if (doFiniteArea)
{
autoPtr<faMesh> faMeshPtr;
const bool throwing = FatalError.throwExceptions();
try
{
faMeshPtr.reset(new faMesh(mesh));
}
catch (const Foam::error& err)
{
faMeshPtr.reset(nullptr);
}
FatalError.throwExceptions(throwing);
if (faMeshPtr)
{
ensightCasesFa.set
(
regioni,
new ensightCase
(
ensCasePath/"finite-area",
"finite-area",
caseOpts
)
);
meshesFa.set(regioni, faMeshPtr);
ensightMeshesFa.set
(
regioni,
new ensightFaMesh(meshesFa[regioni])
);
}
}
}
}
// ************************************************************************* //