diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C index 49f7280c8b..66d7b22cf2 100644 --- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C +++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C @@ -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()); diff --git a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C index 1b4425e735..25f1b63e5b 100644 --- a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C +++ b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C @@ -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::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; diff --git a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.H b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.H index 5b30eceebd..da725dc315 100644 --- a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.H +++ b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.H @@ -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 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; diff --git a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReaderTemplates.C b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReaderTemplates.C index a0da8f152b..b733c1a024 100644 --- a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReaderTemplates.C +++ b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReaderTemplates.C @@ -70,24 +70,7 @@ Foam::tmp> 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()) diff --git a/src/sampling/sampledSurface/readers/surfaceReader.H b/src/sampling/sampledSurface/readers/surfaceReader.H index d0c7355117..b1f38fc525 100644 --- a/src/sampling/sampledSurface/readers/surfaceReader.H +++ b/src/sampling/sampledSurface/readers/surfaceReader.H @@ -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;