ENH: ensightSurfaceReader updates re: replacing file name masks

This commit is contained in:
Andrew Heather
2020-06-18 21:41:06 +01:00
parent ceed53775d
commit 1251b82175
5 changed files with 49 additions and 31 deletions

View File

@ -104,7 +104,8 @@ void surfaceNoise::initialise(const fileName& fName)
deltaT_ = checkUniformTimeStep(times_);
// Read the surface geometry
const meshedSurface& surf = readerPtr_->geometry();
// Note: hard-coded to read mesh from first time index
const meshedSurface& surf = readerPtr_->geometry(0);
nFace_ = surf.size();
}
@ -208,7 +209,6 @@ void surfaceNoise::readSurfaceData
Info<< " time: " << times_[i] << endl;
const scalarField p(readerPtr_->field(timeI, pIndex_, scalar(0)));
forAll(p, faceI)
{
pData[faceI][i] = p[faceI]*rhoRef_;
@ -256,7 +256,8 @@ Foam::scalar surfaceNoise::writeSurfaceData
scalar areaAverage = 0;
if (Pstream::master())
{
const meshedSurface& surf = readerPtr_->geometry();
// Note: hard-coded to read mesh from first time index
const meshedSurface& surf = readerPtr_->geometry(0);
scalarField allData(surf.size());
@ -298,7 +299,7 @@ Foam::scalar surfaceNoise::writeSurfaceData
// TO BE VERIFIED: area-averaged values
// areaAverage = sum(allData*surf.magSf())/sum(surf.magSf());
areaAverage = sum(allData)/allData.size();
areaAverage = sum(allData)/(allData.size() + ROOTVSMALL);
}
Pstream::scatter(areaAverage);
@ -306,7 +307,8 @@ Foam::scalar surfaceNoise::writeSurfaceData
}
else
{
const meshedSurface& surf = readerPtr_->geometry();
// Note: hard-coded to read mesh from first time index
const meshedSurface& surf = readerPtr_->geometry(0);
if (writeSurface)
{
@ -329,7 +331,7 @@ Foam::scalar surfaceNoise::writeSurfaceData
// TO BE VERIFIED: area-averaged values
// return sum(data*surf.magSf())/sum(surf.magSf());
return sum(data)/data.size();
return sum(data)/(data.size() + ROOTVSMALL);
}
}
@ -357,7 +359,8 @@ Foam::scalar surfaceNoise::surfaceAverage
scalar areaAverage = 0;
if (Pstream::master())
{
const meshedSurface& surf = readerPtr_->geometry();
// Note: hard-coded to read mesh from first time index
const meshedSurface& surf = readerPtr_->geometry(0);
scalarField allData(surf.size());

View File

@ -123,6 +123,25 @@ void Foam::ensightSurfaceReader::debugSection
}
Foam::fileName Foam::ensightSurfaceReader::replaceMask
(
const fileName& fName,
const label timeIndex
) const
{
fileName result(fName);
std::ostringstream oss;
label nMask = stringOps::count(fName, '*');
const std::string maskStr(nMask, '*');
oss << std::setfill('0') << std::setw(nMask) << timeIndex;
const word indexStr = oss.str();
result.replace(maskStr, indexStr);
return result;
}
Foam::Pair<Foam::ensightSurfaceReader::idTypes>
Foam::ensightSurfaceReader::readGeometryHeader(ensightReadFile& is) const
{
@ -230,6 +249,8 @@ void Foam::ensightSurfaceReader::readCase(IFstream& is)
// - use the last entry
meshFileName_ = stringOps::splitSpace(buffer).last().str();
DebugInfo << "mesh file:" << meshFileName_ << endl;
debugSection("VARIABLE", is);
// Read the field description
@ -330,13 +351,17 @@ Foam::ensightSurfaceReader::ensightSurfaceReader(const fileName& fName)
// * * * * * * * * * * * * * Public Member Functions * * * * * * * * * * * //
const Foam::meshedSurface& Foam::ensightSurfaceReader::geometry()
const Foam::meshedSurface& Foam::ensightSurfaceReader::geometry
(
const label timeIndex
)
{
DebugInFunction << endl;
if (!surfPtr_.valid())
{
IFstream isBinary(baseDir_/meshFileName_, IOstream::BINARY);
fileName meshInstance(replaceMask(meshFileName_, timeIndex));
IFstream isBinary(baseDir_/meshInstance, IOstream::BINARY);
if (!isBinary.good())
{
@ -391,7 +416,7 @@ const Foam::meshedSurface& Foam::ensightSurfaceReader::geometry()
}
ensightReadFile is(baseDir_/meshFileName_, streamFormat_);
ensightReadFile is(baseDir_/meshInstance, streamFormat_);
DebugInfo
<< "File: " << is.name() << nl;

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2015-2019 OpenCFD Ltd.
Copyright (C) 2015-2020 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -112,6 +112,13 @@ protected:
//- Read and check a section header
void debugSection(const word& expected, IFstream& is) const;
//- Replace the mask with an 0 padded string
fileName replaceMask
(
const fileName& fName,
const label timeIndex
) const;
//- Read (and discard) geometry file header.
// \return information about node/element id handling
Pair<idTypes> readGeometryHeader(ensightReadFile& is) const;
@ -164,7 +171,7 @@ public:
// Member Functions
//- Return a reference to the surface geometry
virtual const meshedSurface& geometry();
virtual const meshedSurface& geometry(const label timeIndex);
//- Return a list of the available times
virtual instantList times() const;

View File

@ -70,24 +70,7 @@ Foam::tmp<Foam::Field<Type>> Foam::ensightSurfaceReader::readField
const word& fieldName(fieldNames_[fieldIndex]);
const label fileIndex = timeStartIndex_ + timeIndex*timeIncrement_;
fileName fieldFileName(fieldFileNames_[fieldIndex]);
std::ostringstream oss;
label nMask = 0;
for (size_t chari = 0; chari < fieldFileName.size(); ++chari)
{
if (fieldFileName[chari] == '*')
{
nMask++;
}
}
const std::string maskStr(nMask, '*');
oss << std::setfill('0') << std::setw(nMask) << fileIndex;
const word indexStr = oss.str();
fieldFileName.replace(maskStr, indexStr);
fileName fieldFileName(replaceMask(fieldFileNames_[fieldIndex], fileIndex));
ensightReadFile is(baseDir_/fieldFileName, streamFormat_);
if (!is.good())

View File

@ -101,7 +101,7 @@ public:
// Member Functions
//- Return a reference to the surface geometry
virtual const meshedSurface& geometry() = 0;
virtual const meshedSurface& geometry(const label timeIndex) = 0;
//- Return a list of the available times
virtual instantList times() const = 0;