diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C index a0a088c2c59e2b74cef0a2f2271835854675229d..a5bb6ce5832f068c844c459dab18863ba7d65264 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 1db4efb6135d88cb5023fc96ab2c00c941394515..ee3a793545d5fdb629d45230a963320054e86496 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 21f56d273be2aee123943f2e73985aeb875f540e..1d0703d22489dac8c2b1564d2c84dc21b2355633 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<scalarField> surfPrmsf(nFFT); List<scalarField> 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,