From bcde59e646827394151c89996738db5d11d5ad41 Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Wed, 1 Mar 2017 10:53:18 +0000 Subject: [PATCH 1/8] STYLE: Minor typo corrections --- src/functionObjects/forces/forces/forces.C | 2 +- src/meshTools/coordinateSystems/cylindricalCS.H | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/functionObjects/forces/forces/forces.C b/src/functionObjects/forces/forces/forces.C index 97de38581f..669fa94d85 100644 --- a/src/functionObjects/forces/forces/forces.C +++ b/src/functionObjects/forces/forces/forces.C @@ -353,7 +353,7 @@ Foam::functionObjects::forces::devRhoReff() const else if (foundObject("transportProperties")) { const dictionary& transportProperties = - lookupObject("transportProperties"); + lookupObject("transportProperties"); dimensionedScalar nu(transportProperties.lookup("nu")); diff --git a/src/meshTools/coordinateSystems/cylindricalCS.H b/src/meshTools/coordinateSystems/cylindricalCS.H index 16b46a7245..4504231cae 100644 --- a/src/meshTools/coordinateSystems/cylindricalCS.H +++ b/src/meshTools/coordinateSystems/cylindricalCS.H @@ -142,7 +142,7 @@ public: // Member Functions //- Are angles in degrees? - bool inDegrees() const; + bool inDegrees() const; //- Non-const access to inDegrees bool& inDegrees(); From 34bc14a53dae539d0d2dad112e8429618b742658 Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Wed, 1 Mar 2017 13:55:05 +0000 Subject: [PATCH 2/8] ENH: noiseModel updates - Limit output to frequency range given by fLower and fUpper (if supplied) - Enable noise models to be run outside of $FOAM_CASE directory - if relative paths are used, $FOAM_CASE is prepended to the noise dict and input file names - Enable output to be customised, e.g. // Optional write options dictionary (all default to 'yes') writeOptions { writePrmsf no; writeSPL yes; writePSD yes; writePSDf no; writeOctaves yes; } --- src/OpenFOAM/graph/graph.C | 40 +++++ src/OpenFOAM/graph/graph.H | 3 + .../noise/noiseModels/noiseModel/noiseModel.C | 51 ++++++- .../noise/noiseModels/noiseModel/noiseModel.H | 49 +++++- .../noise/noiseModels/pointNoise/pointNoise.C | 144 +++++++++++------- .../noiseModels/surfaceNoise/surfaceNoise.C | 114 ++++++++------ .../noiseModels/surfaceNoise/surfaceNoise.H | 21 ++- 7 files changed, 312 insertions(+), 110 deletions(-) diff --git a/src/OpenFOAM/graph/graph.C b/src/OpenFOAM/graph/graph.C index a7698a20f4..5eb1599d6e 100644 --- a/src/OpenFOAM/graph/graph.C +++ b/src/OpenFOAM/graph/graph.C @@ -28,6 +28,7 @@ License #include "IOmanip.H" #include "Pair.H" #include "OSspecific.H" +#include "SubField.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -160,6 +161,45 @@ Foam::scalarField& Foam::graph::y() } +void Foam::graph::setXRange(const scalar x0, const scalar x1) +{ + if (x1 < x0) + { + FatalErrorInFunction + << "When setting limits, x1 must be greater than x0" << nl + << " x0: " << x0 << nl + << " x1: " << x1 << nl + << abort(FatalError); + } + + label i0 = 0; + label i1 = 0; + + forAll(x_, i) + { + if (x_[i] < x0) + { + i0 = i + 1; + } + if (x_[i] < x1) + { + i1 = i; + } + } + + label nX = i1 - i0 + 1; + scalarField xNew(SubField(x_, nX, i0)); + x_.transfer(xNew); + + forAllIter(HashPtrTable, *this, iter) + { + curve* c = iter(); + scalarField cNew(SubField(*c, nX, i0)); + c->transfer(cNew); + } +} + + Foam::autoPtr Foam::graph::writer::New ( const word& graphFormat diff --git a/src/OpenFOAM/graph/graph.H b/src/OpenFOAM/graph/graph.H index b3ff00c37d..d77d468d34 100644 --- a/src/OpenFOAM/graph/graph.H +++ b/src/OpenFOAM/graph/graph.H @@ -178,6 +178,9 @@ public: scalarField& y(); + // Limit the data for all axes based on x-limits + void setXRange(const scalar x0, const scalar x1); + // Write diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C index ae80887fe8..a0a088c2c5 100644 --- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C +++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C @@ -35,6 +35,26 @@ namespace Foam // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // +void Foam::noiseModel::readWriteOption +( + const dictionary& dict, + const word& lookup, + bool& option +) const +{ + dict.readIfPresent(lookup, option); + + if (option) + { + Info<< " " << lookup << ": " << "yes" << endl; + } + else + { + Info<< " " << lookup << ": " << "no" << endl; + } +} + + Foam::scalar Foam::noiseModel::checkUniformTimeStep ( const scalarList& times @@ -92,6 +112,14 @@ Foam::label Foam::noiseModel::findStartTimeIndex } +Foam::fileName Foam::noiseModel::baseFileDir() const +{ + fileName baseDir("$FOAM_CASE"); + baseDir = baseDir.expand()/"postProcessing"/"noise"; + return baseDir; +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::noiseModel::noiseModel(const dictionary& dict, const bool readFields) @@ -101,9 +129,15 @@ Foam::noiseModel::noiseModel(const dictionary& dict, const bool readFields) nSamples_(65536), fLower_(25), fUpper_(10000), + customBounds_(false), startTime_(0), windowModelPtr_(), - graphFormat_("raw") + graphFormat_("raw"), + writePrmsf_(true), + writeSPL_(true), + writePSD_(true), + writePSDf_(true), + writeOctaves_(true) { if (readFields) { @@ -124,8 +158,11 @@ bool Foam::noiseModel::read(const dictionary& dict) { dict.readIfPresent("rhoRef", rhoRef_); dict.readIfPresent("N", nSamples_); - dict.readIfPresent("fl", fLower_); - dict.readIfPresent("fu", fUpper_); + customBounds_ = false; + if (dict.readIfPresent("fl", fLower_) || dict.readIfPresent("fu", fUpper_)) + { + customBounds_ = true; + } dict.readIfPresent("startTime", startTime_); dict.readIfPresent("graphFormat", graphFormat_); @@ -164,6 +201,14 @@ bool Foam::noiseModel::read(const dictionary& dict) } + Info<< " Write options:" << endl; + dictionary optDict(dict.subOrEmptyDict("writeOptions")); + readWriteOption(optDict, "writePrmsf", writePrmsf_); + readWriteOption(optDict, "writeSPL", writeSPL_); + readWriteOption(optDict, "writePSD", writePSD_); + readWriteOption(optDict, "writeOctaves", writeOctaves_); + + windowModelPtr_ = windowModel::New(dict, nSamples_); return true; diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H index 89c41edb84..1db4efb613 100644 --- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H +++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2015-2016 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2015-2017 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,6 +35,16 @@ Description fl 25; fu 25; startTime 0; + + // Optional write options dictionary + writeOptions + { + writePrmsf no; + writeSPL yes; + writePSD yes; + writePSDf no; + writeOctaves yes; + } \endverbatim where @@ -46,6 +56,11 @@ Description fu | Upper frequency bounds | no | 10000 startTime | Start time | no | 0 graphFormat | Graph format | no | raw + writePrmsf | Write Prmsf data | no | yes + writeSPL | Write SPL data | no | yes + writePSD | Write PSD data | no | yes + writePSDf | Write PSDf data | no | yes + writeOctaves| Write octaves data | no | yes \endtable Note @@ -108,6 +123,9 @@ protected: //- Upper frequency limit, default = 10kHz scalar fUpper_; + //- Flagto indicate that custom frequenct bounds are being used + bool customBounds_; + //- Start time, default = 0s scalar startTime_; @@ -118,8 +136,34 @@ protected: word graphFormat_; + // Write options + + //- Write Prmsf; default = yes + bool writePrmsf_; + + //- Write SPL; default = yes + bool writeSPL_; + + //- Write PSD; default = yes + bool writePSD_; + + //- Write PSDf; default = yes + bool writePSDf_; + + //- Write writeOctaves; default = yes + bool writeOctaves_; + + // Protected Member Functions + //- Helper function to read write options and provide info feedback + void readWriteOption + ( + const dictionary& dict, + const word& lookup, + bool& option + ) const; + //- Check and return uniform time step scalar checkUniformTimeStep ( @@ -133,6 +177,9 @@ protected: const scalar startTime ) const; + //- Return the base output directory + fileName baseFileDir() const; + public: diff --git a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C index b711a55bac..7af0c1c9e0 100644 --- a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C +++ b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2015-2016 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2015-2017 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -86,7 +86,7 @@ void pointNoise::processData(const Function1Types::CSV& data) windowModelPtr_->validate(t.size()); const windowModel& win = windowModelPtr_(); const scalar deltaf = 1.0/(deltaT*win.nSamples()); - fileName outDir(fileName("postProcessing")/"noise"/typeName/fNameBase); + fileName outDir(baseFileDir()/typeName/fNameBase); // Create the fft noiseFFT nfft(deltaT, p); @@ -97,13 +97,27 @@ void pointNoise::processData(const Function1Types::CSV& data) // RMS pressure [Pa] graph Prmsf(nfft.RMSmeanPf(win)); - Info<< " Creating graph for " << Prmsf.title() << endl; - Prmsf.write(outDir, graph::wordify(Prmsf.title()), graphFormat_); + if (customBounds_) + { + Prmsf.setXRange(fLower_, fUpper_); + } + if (writePrmsf_) + { + Info<< " Creating graph for " << Prmsf.title() << endl; + Prmsf.write(outDir, graph::wordify(Prmsf.title()), graphFormat_); + } // PSD [Pa^2/Hz] graph PSDf(nfft.PSDf(win)); - Info<< " Creating graph for " << PSDf.title() << endl; - PSDf.write(outDir, graph::wordify(PSDf.title()), graphFormat_); + if (customBounds_) + { + PSDf.setXRange(fLower_, fUpper_); + } + if (writePSDf_) + { + Info<< " Creating graph for " << PSDf.title() << endl; + PSDf.write(outDir, graph::wordify(PSDf.title()), graphFormat_); + } // PSD [dB/Hz] graph PSDg @@ -114,8 +128,12 @@ void pointNoise::processData(const Function1Types::CSV& data) Prmsf.x(), noiseFFT::PSD(PSDf.y()) ); - Info<< " Creating graph for " << PSDg.title() << endl; - PSDg.write(outDir, graph::wordify(PSDg.title()), graphFormat_); + + if (writePSD_) + { + Info<< " Creating graph for " << PSDg.title() << endl; + PSDg.write(outDir, graph::wordify(PSDg.title()), graphFormat_); + } // SPL [dB] graph SPLg @@ -126,52 +144,59 @@ void pointNoise::processData(const Function1Types::CSV& data) Prmsf.x(), noiseFFT::SPL(PSDf.y()*deltaf) ); - Info<< " Creating graph for " << SPLg.title() << endl; - SPLg.write(outDir, graph::wordify(SPLg.title()), graphFormat_); - labelList octave13BandIDs; - scalarField octave13FreqCentre; - noiseFFT::octaveBandInfo - ( - Prmsf.x(), - fLower_, - fUpper_, - 3, - octave13BandIDs, - octave13FreqCentre - ); + if (writeSPL_) + { + Info<< " Creating graph for " << SPLg.title() << endl; + SPLg.write(outDir, graph::wordify(SPLg.title()), graphFormat_); + } + + if (writeOctaves_) + { + labelList octave13BandIDs; + scalarField octave13FreqCentre; + noiseFFT::octaveBandInfo + ( + Prmsf.x(), + fLower_, + fUpper_, + 3, + octave13BandIDs, + octave13FreqCentre + ); - // 1/3 octave data - // --------------- + // 1/3 octave data + // --------------- - // PSD [Pa^2/Hz] - graph PSD13f(nfft.octaves(PSDf, octave13BandIDs, false)); + // PSD [Pa^2/Hz] + graph PSD13f(nfft.octaves(PSDf, octave13BandIDs, false)); - // Integrated PSD = P(rms)^2 [Pa^2] - graph Prms13f2(nfft.octaves(PSDf, octave13BandIDs, true)); + // Integrated PSD = P(rms)^2 [Pa^2] + graph Prms13f2(nfft.octaves(PSDf, octave13BandIDs, true)); - graph PSD13g - ( - "PSD13_dB_Hz(fm)", - "fm [Hz]", - "PSD(fm) [dB_Hz]", - octave13FreqCentre, - noiseFFT::PSD(PSD13f.y()) - ); - Info<< " Creating graph for " << PSD13g.title() << endl; - PSD13g.write(outDir, graph::wordify(PSD13g.title()), graphFormat_); + graph PSD13g + ( + "PSD13_dB_Hz(fm)", + "fm [Hz]", + "PSD(fm) [dB_Hz]", + octave13FreqCentre, + noiseFFT::PSD(PSD13f.y()) + ); + Info<< " Creating graph for " << PSD13g.title() << endl; + PSD13g.write(outDir, graph::wordify(PSD13g.title()), graphFormat_); - graph SPL13g - ( - "SPL13_dB(fm)", - "fm [Hz]", - "SPL(fm) [dB]", - octave13FreqCentre, - noiseFFT::SPL(Prms13f2.y()) - ); - Info<< " Creating graph for " << SPL13g.title() << endl; - SPL13g.write(outDir, graph::wordify(SPL13g.title()), graphFormat_); + graph SPL13g + ( + "SPL13_dB(fm)", + "fm [Hz]", + "SPL(fm) [dB]", + octave13FreqCentre, + noiseFFT::SPL(Prms13f2.y()) + ); + Info<< " Creating graph for " << SPL13g.title() << endl; + SPL13g.write(outDir, graph::wordify(SPL13g.title()), graphFormat_); + } } @@ -186,18 +211,15 @@ void pointNoise::calculate() } - if (inputFileNames_.size()) + forAll(inputFileNames_, i) { - forAll(inputFileNames_, i) + fileName fName = inputFileNames_[i]; + if (!fName.isAbsolute()) { - const fileName fName = inputFileNames_[i].expand(); - Function1Types::CSV data("pressure", dict_, "Data", fName); - processData(data); + fName = "$FOAM_CASE"/fName; } - } - else - { - Function1Types::CSV data("pressure", dict_, "Data"); + fName.expand(); + Function1Types::CSV data("pressure", dict_, "Data", fName); processData(data); } } @@ -226,7 +248,15 @@ bool pointNoise::read(const dictionary& dict) { if (noiseModel::read(dict)) { - dict.readIfPresent("inputFiles", inputFileNames_); + if (!dict.readIfPresent("inputFiles", inputFileNames_)) + { + inputFileNames_.setSize(1); + + // Note: unsafe lookup of file name from pressureData sub-dict! + dict.subDict("pressureData").lookup("fileName") + >> inputFileNames_[0]; + } + return true; } diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C index faed14eea6..23a661df2a 100644 --- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C +++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2015-2016 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2015-2017 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -231,15 +231,13 @@ Foam::scalar surfaceNoise::writeSurfaceData const word& title, const scalar freq, const scalarField& data, - const labelList& procFaceOffset + const labelList& procFaceOffset, + const bool writeSurface ) const { Info<< " processing " << title << " for frequency " << freq << endl; - fileName outDir - ( - fileName("postProcessing")/"noise"/groupName/Foam::name(freq) - ); + fileName outDir(baseFileDir()/groupName/Foam::name(freq)); if (Pstream::parRun()) { @@ -279,20 +277,23 @@ Foam::scalar surfaceNoise::writeSurfaceData } } - // could also have meshedSurface implement meshedSurf - fileName outFileName = writerPtr_->write - ( - outDir, - fName, - meshedSurfRef + // Could also have meshedSurface implement meshedSurf + if (writeSurface) + { + fileName outFileName = writerPtr_->write ( - surf.points(), - surf.surfFaces() - ), - title, - allData, - false - ); + outDir, + fName, + meshedSurfRef + ( + surf.points(), + surf.surfFaces() + ), + title, + allData, + false + ); + } // TO BE VERIFIED: area-averaged values // areaAverage = sum(allData*surf.magSf())/sum(surf.magSf()); @@ -306,20 +307,23 @@ Foam::scalar surfaceNoise::writeSurfaceData { const meshedSurface& surf = readerPtr_->geometry(); - // could also have meshedSurface implement meshedSurf - writerPtr_->write - ( - outDir, - fName, - meshedSurfRef + // Could also have meshedSurface implement meshedSurf + if (writeSurface) + { + writerPtr_->write ( - surf.points(), - surf.surfFaces() - ), - title, - data, - false - ); + outDir, + fName, + meshedSurfRef + ( + surf.points(), + surf.surfFaces() + ), + title, + data, + false + ); + } // TO BE VERIFIED: area-averaged values // return sum(data*surf.magSf())/sum(surf.magSf()); @@ -463,6 +467,11 @@ void surfaceNoise::calculate() { fileName fName = inputFileNames_[i]; + if (!fName.isAbsolute()) + { + fName = "$FOAM_CASE"/fName; + } + initialise(fName.expand()); // Container for pressure time history data per face @@ -575,19 +584,23 @@ void surfaceNoise::calculate() const word& fNameBase = fName.name(true); // Output directory for graphs - fileName outDir - ( - fileName("postProcessing")/"noise"/typeName/fNameBase - ); + fileName outDir(baseFileDir()/typeName/fNameBase); const scalar deltaf = 1.0/(deltaT_*win.nSamples()); Info<< "Writing fft surface data" << endl; { - scalarField PrmsfAve(surfPrmsf.size(), 0); - scalarField PSDfAve(surfPrmsf.size(), 0); - scalarField fOut(surfPrmsf.size(), 0); + // Determine frequency range of interest + // Note: freqencies have fixed interval, and are in the range + // 0 to (n-1)*deltaf + label f0 = ceil(fLower_/deltaf); + label f1 = floor(fUpper_/deltaf); + label nFreq = f1 - f0 + 1; - forAll(surfPrmsf, i) + scalarField PrmsfAve(nFreq, 0); + scalarField PSDfAve(nFreq, 0); + scalarField fOut(nFreq, 0); + + for (label i = f0; i <= f1; ++i) { label freqI = (i + 1)*fftWriteInterval_ - 1; fOut[i] = freq1[freqI]; @@ -599,7 +612,8 @@ void surfaceNoise::calculate() "Prmsf", freq1[freqI], surfPrmsf[i], - procFaceOffset + procFaceOffset, + writePrmsf_ ); PSDfAve[i] = writeSurfaceData @@ -609,7 +623,8 @@ void surfaceNoise::calculate() "PSDf", freq1[freqI], surfPSDf[i], - procFaceOffset + procFaceOffset, + writePSDf_ ); writeSurfaceData ( @@ -618,7 +633,8 @@ void surfaceNoise::calculate() "PSD", freq1[freqI], noiseFFT::PSD(surfPSDf[i]), - procFaceOffset + procFaceOffset, + writePSD_ ); writeSurfaceData ( @@ -627,7 +643,8 @@ void surfaceNoise::calculate() "SPL", freq1[freqI], noiseFFT::SPL(surfPSDf[i]*deltaf), - procFaceOffset + procFaceOffset, + writeSPL_ ); } @@ -688,7 +705,8 @@ void surfaceNoise::calculate() "PSD13f", octave13FreqCentre[i], surfPSD13f[i], - procFaceOffset + procFaceOffset, + writeOctaves_ ); writeSurfaceData ( @@ -697,7 +715,8 @@ void surfaceNoise::calculate() "PSD13", octave13FreqCentre[i], noiseFFT::PSD(surfPSD13f[i]), - procFaceOffset + procFaceOffset, + writeOctaves_ ); writeSurfaceData ( @@ -706,7 +725,8 @@ void surfaceNoise::calculate() "SPL13", octave13FreqCentre[i], noiseFFT::SPL(surfPrms13f2[i]), - procFaceOffset + procFaceOffset, + writeOctaves_ ); Prms13f2Ave[i] = diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H index 165a1cefd7..b513af162f 100644 --- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H +++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2015-2016 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2015-2017 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -71,7 +71,23 @@ Description { collateTimes true; } + + // Write Prmsf; default = yes + writePrmsf no; + + // Write SPL; default = yes + writeSPL yes; + + // Write PSD; default = yes + writePSD yes; + + // Write PSDf; default = yes + writePSDf no; + + // Write writeOctaves; default = yes + writeOctaves yes; } + \endverbatim SourceFiles @@ -172,7 +188,8 @@ protected: const word& title, const scalar freq, const scalarField& data, - const labelList& procFaceOffset + const labelList& procFaceOffset, + const bool writeSurface ) const; //- Calculate the area average value From 9741ce6e0dd2c72139b66e7da5d8cf1366ff3136 Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Thu, 2 Mar 2017 12:39:03 +0000 Subject: [PATCH 3/8] ENH: noise models - expand input file name before check for isAbsolute --- src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C | 1 + .../noise/noiseModels/surfaceNoise/surfaceNoise.C | 1 + 2 files changed, 2 insertions(+) diff --git a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C index 7af0c1c9e0..ddbb419fce 100644 --- a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C +++ b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C @@ -214,6 +214,7 @@ void pointNoise::calculate() forAll(inputFileNames_, i) { fileName fName = inputFileNames_[i]; + fName.expand(); if (!fName.isAbsolute()) { fName = "$FOAM_CASE"/fName; diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C index 23a661df2a..21f56d273b 100644 --- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C +++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C @@ -466,6 +466,7 @@ void surfaceNoise::calculate() forAll(inputFileNames_, i) { fileName fName = inputFileNames_[i]; + fName.expand(); if (!fName.isAbsolute()) { From f3abf405a89c82c8d3695f2a632254d56df3fc1b Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Fri, 3 Mar 2017 14:24:56 +0000 Subject: [PATCH 4/8] ENH: noiseModels - updated frequency bounds handling --- .../noise/noiseModels/noiseModel/noiseModel.C | 6 +++- .../noise/noiseModels/noiseModel/noiseModel.H | 2 +- .../noiseModels/surfaceNoise/surfaceNoise.C | 35 ++++++++++++++----- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C index a0a088c2c5..a5bb6ce583 100644 --- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C +++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C @@ -159,7 +159,11 @@ bool Foam::noiseModel::read(const dictionary& dict) dict.readIfPresent("rhoRef", rhoRef_); dict.readIfPresent("N", nSamples_); customBounds_ = false; - if (dict.readIfPresent("fl", fLower_) || dict.readIfPresent("fu", fUpper_)) + if (dict.readIfPresent("fl", fLower_)) + { + customBounds_ = true; + } + if (dict.readIfPresent("fu", fUpper_)) { customBounds_ = true; } diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H index 1db4efb613..ee3a793545 100644 --- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H +++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H @@ -123,7 +123,7 @@ protected: //- Upper frequency limit, default = 10kHz scalar fUpper_; - //- Flagto indicate that custom frequenct bounds are being used + //- Flag to indicate that custom frequenct bounds are being used bool customBounds_; //- Start time, default = 0s diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C index 21f56d273b..1d0703d224 100644 --- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C +++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C @@ -504,10 +504,16 @@ void surfaceNoise::calculate() Info<< "Creating noise FFTs" << endl; + const scalarField freq1(noiseFFT::frequencies(nSamples_, deltaT_)); + + // Reset desired frequency range if outside actual frequency range + fLower_ = min(fLower_, max(freq1)); + fUpper_ = min(fUpper_, max(freq1)); + // Storage for FFT data const label nLocalFace = pData.size(); - const scalarField freq1(noiseFFT::frequencies(nSamples_, deltaT_)); - const label nFFT = freq1.size()/fftWriteInterval_; + const label nFFT = ceil(freq1.size()/scalar(fftWriteInterval_)); + List surfPrmsf(nFFT); List surfPSDf(nFFT); forAll(surfPrmsf, freqI) @@ -563,7 +569,7 @@ void surfaceNoise::calculate() // Store the frequency results in slot for face of surface forAll(surfPrmsf, i) { - label freqI = (i + 1)*fftWriteInterval_ - 1; + label freqI = i*fftWriteInterval_; surfPrmsf[i][faceI] = Prmsf.y()[freqI]; surfPSDf[i][faceI] = PSDf.y()[freqI]; } @@ -588,14 +594,24 @@ void surfaceNoise::calculate() fileName outDir(baseFileDir()/typeName/fNameBase); const scalar deltaf = 1.0/(deltaT_*win.nSamples()); - Info<< "Writing fft surface data" << endl; + Info<< "Writing fft surface data"; + if (fftWriteInterval_ == 1) + { + Info<< endl; + } + else + { + Info<< " at every " << fftWriteInterval_ << " frequency points" + << endl; + } + { // Determine frequency range of interest // Note: freqencies have fixed interval, and are in the range - // 0 to (n-1)*deltaf - label f0 = ceil(fLower_/deltaf); - label f1 = floor(fUpper_/deltaf); - label nFreq = f1 - f0 + 1; + // 0 to fftWriteInterval_*(n-1)*deltaf + label f0 = ceil(fLower_/deltaf/fftWriteInterval_); + label f1 = floor(fUpper_/deltaf/fftWriteInterval_); + label nFreq = f0 == f1 ? 0 : f1 - f0 + 1; scalarField PrmsfAve(nFreq, 0); scalarField PSDfAve(nFreq, 0); @@ -603,9 +619,10 @@ void surfaceNoise::calculate() for (label i = f0; i <= f1; ++i) { - label freqI = (i + 1)*fftWriteInterval_ - 1; + label freqI = i*fftWriteInterval_; fOut[i] = freq1[freqI]; const word gName = "fft"; + PrmsfAve[i] = writeSurfaceData ( fNameBase, From a2f54aef3cb34b2006e5bfc2d62445ea6baea69c Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Mon, 6 Mar 2017 12:09:05 +0000 Subject: [PATCH 5/8] ENH: surfaceNoise - warn if no data available to process --- .../noiseModels/surfaceNoise/surfaceNoise.C | 97 ++++++++++--------- 1 file changed, 53 insertions(+), 44 deletions(-) diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C index 1d0703d224..48bf385d04 100644 --- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C +++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C @@ -617,53 +617,62 @@ void surfaceNoise::calculate() scalarField PSDfAve(nFreq, 0); scalarField fOut(nFreq, 0); - for (label i = f0; i <= f1; ++i) + if (nFreq == 0) { - label freqI = i*fftWriteInterval_; - fOut[i] = freq1[freqI]; - const word gName = "fft"; + WarningInFunction + << "No surface data available using a fftWriteInterval of " + << fftWriteInterval_ << endl; + } + else + { + for (label i = f0; i <= f1; ++i) + { + label freqI = i*fftWriteInterval_; + fOut[i] = freq1[freqI]; + const word gName = "fft"; - PrmsfAve[i] = writeSurfaceData - ( - fNameBase, - gName, - "Prmsf", - freq1[freqI], - surfPrmsf[i], - procFaceOffset, - writePrmsf_ - ); + PrmsfAve[i] = writeSurfaceData + ( + fNameBase, + gName, + "Prmsf", + freq1[freqI], + surfPrmsf[i], + procFaceOffset, + writePrmsf_ + ); - PSDfAve[i] = writeSurfaceData - ( - fNameBase, - gName, - "PSDf", - freq1[freqI], - surfPSDf[i], - procFaceOffset, - writePSDf_ - ); - writeSurfaceData - ( - fNameBase, - gName, - "PSD", - freq1[freqI], - noiseFFT::PSD(surfPSDf[i]), - procFaceOffset, - writePSD_ - ); - writeSurfaceData - ( - fNameBase, - gName, - "SPL", - freq1[freqI], - noiseFFT::SPL(surfPSDf[i]*deltaf), - procFaceOffset, - writeSPL_ - ); + PSDfAve[i] = writeSurfaceData + ( + fNameBase, + gName, + "PSDf", + freq1[freqI], + surfPSDf[i], + procFaceOffset, + writePSDf_ + ); + writeSurfaceData + ( + fNameBase, + gName, + "PSD", + freq1[freqI], + noiseFFT::PSD(surfPSDf[i]), + procFaceOffset, + writePSD_ + ); + writeSurfaceData + ( + fNameBase, + gName, + "SPL", + freq1[freqI], + noiseFFT::SPL(surfPSDf[i]*deltaf), + procFaceOffset, + writeSPL_ + ); + } } graph Prmsfg From 518bb6e8fc5d824cd9b89416057a07afce9d0880 Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Fri, 10 Mar 2017 09:08:46 +0000 Subject: [PATCH 6/8] ENH: surfaceNoise - updated surface output --- .../noise/noiseModels/surfaceNoise/surfaceNoise.C | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C index 48bf385d04..fda5de9c52 100644 --- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C +++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C @@ -609,9 +609,9 @@ void surfaceNoise::calculate() // Determine frequency range of interest // Note: freqencies have fixed interval, and are in the range // 0 to fftWriteInterval_*(n-1)*deltaf - label f0 = ceil(fLower_/deltaf/fftWriteInterval_); - label f1 = floor(fUpper_/deltaf/fftWriteInterval_); - label nFreq = f0 == f1 ? 0 : f1 - f0 + 1; + label f0 = ceil(fLower_/deltaf/scalar(fftWriteInterval_)); + label f1 = floor(fUpper_/deltaf/scalar(fftWriteInterval_)); + label nFreq = f1 - f0; scalarField PrmsfAve(nFreq, 0); scalarField PSDfAve(nFreq, 0); @@ -625,9 +625,9 @@ void surfaceNoise::calculate() } else { - for (label i = f0; i <= f1; ++i) + forAll(fOut, i) { - label freqI = i*fftWriteInterval_; + label freqI = (i + f0)*fftWriteInterval_; fOut[i] = freq1[freqI]; const word gName = "fft"; From 4bc957cc3e61667bc55f0d244b41d05aa70da4c7 Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Fri, 10 Mar 2017 09:08:46 +0000 Subject: [PATCH 7/8] ENH: surfaceNoise - updated surface output --- .../noiseModels/surfaceNoise/surfaceNoise.C | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C index 48bf385d04..c1fefd3d1c 100644 --- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C +++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C @@ -609,9 +609,9 @@ void surfaceNoise::calculate() // Determine frequency range of interest // Note: freqencies have fixed interval, and are in the range // 0 to fftWriteInterval_*(n-1)*deltaf - label f0 = ceil(fLower_/deltaf/fftWriteInterval_); - label f1 = floor(fUpper_/deltaf/fftWriteInterval_); - label nFreq = f0 == f1 ? 0 : f1 - f0 + 1; + label f0 = ceil(fLower_/deltaf/scalar(fftWriteInterval_)); + label f1 = floor(fUpper_/deltaf/scalar(fftWriteInterval_)); + label nFreq = f1 - f0; scalarField PrmsfAve(nFreq, 0); scalarField PSDfAve(nFreq, 0); @@ -625,9 +625,9 @@ void surfaceNoise::calculate() } else { - for (label i = f0; i <= f1; ++i) + forAll(fOut, i) { - label freqI = i*fftWriteInterval_; + label freqI = (i + f0)*fftWriteInterval_; fOut[i] = freq1[freqI]; const word gName = "fft"; @@ -637,7 +637,7 @@ void surfaceNoise::calculate() gName, "Prmsf", freq1[freqI], - surfPrmsf[i], + surfPrmsf[i + f0], procFaceOffset, writePrmsf_ ); @@ -648,7 +648,7 @@ void surfaceNoise::calculate() gName, "PSDf", freq1[freqI], - surfPSDf[i], + surfPSDf[i + f0], procFaceOffset, writePSDf_ ); @@ -658,7 +658,7 @@ void surfaceNoise::calculate() gName, "PSD", freq1[freqI], - noiseFFT::PSD(surfPSDf[i]), + noiseFFT::PSD(surfPSDf[i + f0]), procFaceOffset, writePSD_ ); @@ -668,7 +668,7 @@ void surfaceNoise::calculate() gName, "SPL", freq1[freqI], - noiseFFT::SPL(surfPSDf[i]*deltaf), + noiseFFT::SPL(surfPSDf[i + f0]*deltaf), procFaceOffset, writeSPL_ ); From a7a3126a7672565d92c0630ba8531f955e8607b7 Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Tue, 14 Mar 2017 13:15:39 +0000 Subject: [PATCH 8/8] ENH: noiseModels - re-worked output directories to avoid clashes. Fixes Both point- and surfaceNoise utilities can operate on multiple input files. However, if the files had the same name, the output would be overwritten. To avoid this, the output files are now written to a sub-directory including the path '/input/', e.g. postProcessing/noise/surfaceNoise/input0/nearWall/[fft|oneThirdOctave] An optional 'outputPrefix' can be included (defaults to empty), e.g. when set to 'test1': postProcessing/noise/test1/surfaceNoise/input0/nearWall/[fft|oneThirdOctave] --- .../noise/noiseModels/noiseModel/noiseModel.C | 14 ++++- .../noise/noiseModels/noiseModel/noiseModel.H | 32 ++++++---- .../noise/noiseModels/pointNoise/pointNoise.C | 60 ++++++++++--------- .../noise/noiseModels/pointNoise/pointNoise.H | 6 +- .../noiseModels/surfaceNoise/surfaceNoise.C | 31 +++++----- .../noiseModels/surfaceNoise/surfaceNoise.H | 2 +- 6 files changed, 86 insertions(+), 59 deletions(-) diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C index a5bb6ce583..b98f00c8bd 100644 --- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C +++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C @@ -112,10 +112,18 @@ Foam::label Foam::noiseModel::findStartTimeIndex } -Foam::fileName Foam::noiseModel::baseFileDir() const +Foam::fileName Foam::noiseModel::baseFileDir(const label dataseti) const { fileName baseDir("$FOAM_CASE"); - baseDir = baseDir.expand()/"postProcessing"/"noise"; + word datasetName("input" + Foam::name(dataseti)); + baseDir = + baseDir.expand() + /"postProcessing" + /"noise" + /outputPrefix_ + /type() + /datasetName; + return baseDir; } @@ -133,6 +141,7 @@ Foam::noiseModel::noiseModel(const dictionary& dict, const bool readFields) startTime_(0), windowModelPtr_(), graphFormat_("raw"), + outputPrefix_(), writePrmsf_(true), writeSPL_(true), writePSD_(true), @@ -169,6 +178,7 @@ bool Foam::noiseModel::read(const dictionary& dict) } dict.readIfPresent("startTime", startTime_); dict.readIfPresent("graphFormat", graphFormat_); + dict.readIfPresent("outputPrefix", outputPrefix_); // Check number of samples - must be a power of 2 for our FFT bool powerOf2 = ((nSamples_ != 0) && !(nSamples_ & (nSamples_ - 1))); diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H index ee3a793545..7b625096ce 100644 --- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H +++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H @@ -36,6 +36,8 @@ Description fu 25; startTime 0; + outputPrefix "test1"; + // Optional write options dictionary writeOptions { @@ -49,18 +51,19 @@ Description where \table - Property | Description | Required | Default value - rhoRef | Reference density | no | 1 - N | Number of samples in sampling window | no | 65536 (2^16) - fl | Lower frequency bounds | no | 25 - fu | Upper frequency bounds | no | 10000 - startTime | Start time | no | 0 - graphFormat | Graph format | no | raw - writePrmsf | Write Prmsf data | no | yes - writeSPL | Write SPL data | no | yes - writePSD | Write PSD data | no | yes - writePSDf | Write PSDf data | no | yes - writeOctaves| Write octaves data | no | yes + Property | Description | Required | Default value + rhoRef | Reference density | no | 1 + N | Number of samples in sampling window | no | 65536 (2^16) + fl | Lower frequency bounds | no | 25 + fu | Upper frequency bounds | no | 10000 + startTime | Start time | no | 0 + outputPrefix | Prefix applied to output files| no | '' + graphFormat | Graph format | no | raw + writePrmsf | Write Prmsf data | no | yes + writeSPL | Write SPL data | no | yes + writePSD | Write PSD data | no | yes + writePSDf | Write PSDf data | no | yes + writeOctaves | Write octaves data | no | yes \endtable Note @@ -138,6 +141,9 @@ protected: // Write options + //- Output file prefix, default = '' + fileName outputPrefix_; + //- Write Prmsf; default = yes bool writePrmsf_; @@ -178,7 +184,7 @@ protected: ) const; //- Return the base output directory - fileName baseFileDir() const; + fileName baseFileDir(const label dataseti) const; public: diff --git a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C index ddbb419fce..decddc9609 100644 --- a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C +++ b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.C @@ -66,7 +66,11 @@ void pointNoise::filterTimeData } -void pointNoise::processData(const Function1Types::CSV& data) +void pointNoise::processData +( + const label dataseti, + const Function1Types::CSV& data +) { Info<< "Reading data file " << data.fName() << endl; @@ -86,7 +90,7 @@ void pointNoise::processData(const Function1Types::CSV& data) windowModelPtr_->validate(t.size()); const windowModel& win = windowModelPtr_(); const scalar deltaf = 1.0/(deltaT*win.nSamples()); - fileName outDir(baseFileDir()/typeName/fNameBase); + fileName outDir(baseFileDir(dataseti)/fNameBase); // Create the fft noiseFFT nfft(deltaT, p); @@ -200,32 +204,6 @@ void pointNoise::processData(const Function1Types::CSV& data) } -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void pointNoise::calculate() -{ - // Point data only handled by master - if (!Pstream::master()) - { - return; - } - - - forAll(inputFileNames_, i) - { - fileName fName = inputFileNames_[i]; - fName.expand(); - if (!fName.isAbsolute()) - { - fName = "$FOAM_CASE"/fName; - } - fName.expand(); - Function1Types::CSV data("pressure", dict_, "Data", fName); - processData(data); - } -} - - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // pointNoise::pointNoise(const dictionary& dict, const bool readFields) @@ -245,6 +223,32 @@ pointNoise::~pointNoise() {} +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void pointNoise::calculate() +{ + // Point data only handled by master + if (!Pstream::master()) + { + return; + } + + + forAll(inputFileNames_, filei) + { + fileName fName = inputFileNames_[filei]; + fName.expand(); + if (!fName.isAbsolute()) + { + fName = "$FOAM_CASE"/fName; + } + fName.expand(); + Function1Types::CSV data("pressure", dict_, "Data", fName); + processData(filei, data); + } +} + + bool pointNoise::read(const dictionary& dict) { if (noiseModel::read(dict)) diff --git a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H index 374678487f..693418939a 100644 --- a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H +++ b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H @@ -117,7 +117,11 @@ protected: ) const; //- Process the CSV data - void processData(const Function1Types::CSV& data); + void processData + ( + const label dataseti, + const Function1Types::CSV& data + ); public: diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C index c1fefd3d1c..6cea3fc855 100644 --- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C +++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.C @@ -226,8 +226,8 @@ void surfaceNoise::readSurfaceData Foam::scalar surfaceNoise::writeSurfaceData ( + const fileName& outDirBase, const word& fName, - const word& groupName, const word& title, const scalar freq, const scalarField& data, @@ -237,7 +237,7 @@ Foam::scalar surfaceNoise::writeSurfaceData { Info<< " processing " << title << " for frequency " << freq << endl; - fileName outDir(baseFileDir()/groupName/Foam::name(freq)); + const fileName outDir(outDirBase/Foam::name(freq)); if (Pstream::parRun()) { @@ -463,9 +463,9 @@ bool surfaceNoise::read(const dictionary& dict) void surfaceNoise::calculate() { - forAll(inputFileNames_, i) + forAll(inputFileNames_, filei) { - fileName fName = inputFileNames_[i]; + fileName fName = inputFileNames_[filei]; fName.expand(); if (!fName.isAbsolute()) @@ -591,7 +591,7 @@ void surfaceNoise::calculate() const word& fNameBase = fName.name(true); // Output directory for graphs - fileName outDir(baseFileDir()/typeName/fNameBase); + fileName outDirBase(baseFileDir(filei)/fNameBase); const scalar deltaf = 1.0/(deltaT_*win.nSamples()); Info<< "Writing fft surface data"; @@ -606,6 +606,8 @@ void surfaceNoise::calculate() } { + fileName outDir(outDirBase/"fft"); + // Determine frequency range of interest // Note: freqencies have fixed interval, and are in the range // 0 to fftWriteInterval_*(n-1)*deltaf @@ -629,12 +631,12 @@ void surfaceNoise::calculate() { label freqI = (i + f0)*fftWriteInterval_; fOut[i] = freq1[freqI]; - const word gName = "fft"; + PrmsfAve[i] = writeSurfaceData ( + outDir, fNameBase, - gName, "Prmsf", freq1[freqI], surfPrmsf[i + f0], @@ -644,8 +646,8 @@ void surfaceNoise::calculate() PSDfAve[i] = writeSurfaceData ( + outDir, fNameBase, - gName, "PSDf", freq1[freqI], surfPSDf[i + f0], @@ -654,8 +656,8 @@ void surfaceNoise::calculate() ); writeSurfaceData ( + outDir, fNameBase, - gName, "PSD", freq1[freqI], noiseFFT::PSD(surfPSDf[i + f0]), @@ -664,8 +666,8 @@ void surfaceNoise::calculate() ); writeSurfaceData ( + outDir, fNameBase, - gName, "SPL", freq1[freqI], noiseFFT::SPL(surfPSDf[i + f0]*deltaf), @@ -719,16 +721,17 @@ void surfaceNoise::calculate() Info<< "Writing one-third octave surface data" << endl; { + fileName outDir(outDirBase/"oneThirdOctave"); + scalarField PSDfAve(surfPSD13f.size(), 0); scalarField Prms13f2Ave(surfPSD13f.size(), 0); forAll(surfPSD13f, i) { - const word gName = "oneThirdOctave"; PSDfAve[i] = writeSurfaceData ( + outDir, fNameBase, - gName, "PSD13f", octave13FreqCentre[i], surfPSD13f[i], @@ -737,8 +740,8 @@ void surfaceNoise::calculate() ); writeSurfaceData ( + outDir, fNameBase, - gName, "PSD13", octave13FreqCentre[i], noiseFFT::PSD(surfPSD13f[i]), @@ -747,8 +750,8 @@ void surfaceNoise::calculate() ); writeSurfaceData ( + outDir, fNameBase, - gName, "SPL13", octave13FreqCentre[i], noiseFFT::SPL(surfPrms13f2[i]), diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H index b513af162f..6450881d76 100644 --- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H +++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H @@ -183,8 +183,8 @@ protected: // Returns the area average value scalar writeSurfaceData ( + const fileName& outDirBase, const word& fName, - const word& groupName, const word& title, const scalar freq, const scalarField& data,