/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2022-2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
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 .
\*---------------------------------------------------------------------------*/
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
Foam::fileName Foam::coordSetWriters::ensightWriter::writeUncollated
(
const bool writeTracks
)
{
return fileName::null;
}
template
Foam::fileName Foam::coordSetWriters::ensightWriter::writeUncollated
(
const word& fieldName,
const UPtrList>& fieldPtrs,
elemOutputType elemOutput
)
{
checkOpen();
const ensight::FileName baseName(outputPath_.name());
const ensight::VarName varName(fieldName);
// Uncollated
// ==========
// CaseFile: rootdir/time//NAME.case
// Geometry: rootdir/time//NAME..mesh
// Field: rootdir/time//NAME..
// Variable name as sub-directory for results. Eg,
// - VAR1/NAME1.case
// - VAR1/NAME1.00000000.mesh
// - VAR1/NAME1.00000001.VAR1
// and
// - VAR2/NAME1.case
// - VAR2/NAME1.00000000.mesh
// - VAR2/NAME1.00000001.VAR2
fileName outputDir;
if (useTimeDir() && !timeName().empty())
{
// Splice in time-directory
outputDir = outputPath_.path() / timeName();
}
else
{
outputDir = outputPath_.path();
}
const fileName baseDir = outputDir / varName;
const word timeDir = timeName();
const scalar timeValue = currTime_.value();
const fileName outputFile = baseDir / baseName + ".case";
if (verbose_)
{
Info<< "Writing case file to " << outputFile << endl;
}
merge();
{
if (!Foam::isDir(outputFile.path()))
{
Foam::mkDir(outputFile.path());
}
// Two-argument form for path-name to avoid validating base-dir
ensightGeoFile osGeom
(
baseDir,
baseName + ".00000000.mesh",
caseOpts_.format()
);
ensightFile osField
(
baseDir,
baseName + ".00000000." + varName,
caseOpts_.format()
);
osGeom.beginGeometry();
writeGeometry(osGeom, elemOutput);
// Write field (serial only)
writeTrackField(osField, fieldPtrs);
// Update case file
{
OFstream osCase
(
IOstreamOption::ATOMIC,
outputFile,
IOstreamOption::ASCII
);
ensightCase::setTimeFormat(osCase, caseOpts_); // time-format
osCase
<< "FORMAT" << nl
<< "type: ensight gold" << nl
<< nl
<< "GEOMETRY" << nl
<< "model: 1 " << osGeom.name().name() << nl
<< nl
<< "VARIABLE" << nl
<< ensightPTraits::typeName
<<
(
true // this->isPointData()
? " per node: 1 " // time-set 1
: " per element: 1 " // time-set 1
)
<< setw(15) << varName << ' '
<< baseName.c_str() << ".********."
<< ensight::FileName(varName).c_str() << nl;
osCase
<< nl
<< "TIME" << nl;
ensightCase::printTimeset(osCase, 1, timeValue);
osCase << "# end" << nl;
}
}
wroteGeom_ = true;
return outputFile;
}
// ************************************************************************* //