mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: noiseModels - updated frequency bounds handling
This commit is contained in:
@ -159,7 +159,11 @@ bool Foam::noiseModel::read(const dictionary& dict)
|
|||||||
dict.readIfPresent("rhoRef", rhoRef_);
|
dict.readIfPresent("rhoRef", rhoRef_);
|
||||||
dict.readIfPresent("N", nSamples_);
|
dict.readIfPresent("N", nSamples_);
|
||||||
customBounds_ = false;
|
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;
|
customBounds_ = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -504,10 +504,16 @@ void surfaceNoise::calculate()
|
|||||||
|
|
||||||
Info<< "Creating noise FFTs" << endl;
|
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
|
// Storage for FFT data
|
||||||
const label nLocalFace = pData.size();
|
const label nLocalFace = pData.size();
|
||||||
const scalarField freq1(noiseFFT::frequencies(nSamples_, deltaT_));
|
const label nFFT = ceil(freq1.size()/scalar(fftWriteInterval_));
|
||||||
const label nFFT = freq1.size()/fftWriteInterval_;
|
|
||||||
List<scalarField> surfPrmsf(nFFT);
|
List<scalarField> surfPrmsf(nFFT);
|
||||||
List<scalarField> surfPSDf(nFFT);
|
List<scalarField> surfPSDf(nFFT);
|
||||||
forAll(surfPrmsf, freqI)
|
forAll(surfPrmsf, freqI)
|
||||||
@ -563,7 +569,7 @@ void surfaceNoise::calculate()
|
|||||||
// Store the frequency results in slot for face of surface
|
// Store the frequency results in slot for face of surface
|
||||||
forAll(surfPrmsf, i)
|
forAll(surfPrmsf, i)
|
||||||
{
|
{
|
||||||
label freqI = (i + 1)*fftWriteInterval_ - 1;
|
label freqI = i*fftWriteInterval_;
|
||||||
surfPrmsf[i][faceI] = Prmsf.y()[freqI];
|
surfPrmsf[i][faceI] = Prmsf.y()[freqI];
|
||||||
surfPSDf[i][faceI] = PSDf.y()[freqI];
|
surfPSDf[i][faceI] = PSDf.y()[freqI];
|
||||||
}
|
}
|
||||||
@ -588,14 +594,24 @@ void surfaceNoise::calculate()
|
|||||||
fileName outDir(baseFileDir()/typeName/fNameBase);
|
fileName outDir(baseFileDir()/typeName/fNameBase);
|
||||||
|
|
||||||
const scalar deltaf = 1.0/(deltaT_*win.nSamples());
|
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
|
// Determine frequency range of interest
|
||||||
// Note: freqencies have fixed interval, and are in the range
|
// Note: freqencies have fixed interval, and are in the range
|
||||||
// 0 to (n-1)*deltaf
|
// 0 to fftWriteInterval_*(n-1)*deltaf
|
||||||
label f0 = ceil(fLower_/deltaf);
|
label f0 = ceil(fLower_/deltaf/fftWriteInterval_);
|
||||||
label f1 = floor(fUpper_/deltaf);
|
label f1 = floor(fUpper_/deltaf/fftWriteInterval_);
|
||||||
label nFreq = f1 - f0 + 1;
|
label nFreq = f0 == f1 ? 0 : f1 - f0 + 1;
|
||||||
|
|
||||||
scalarField PrmsfAve(nFreq, 0);
|
scalarField PrmsfAve(nFreq, 0);
|
||||||
scalarField PSDfAve(nFreq, 0);
|
scalarField PSDfAve(nFreq, 0);
|
||||||
@ -603,9 +619,10 @@ void surfaceNoise::calculate()
|
|||||||
|
|
||||||
for (label i = f0; i <= f1; ++i)
|
for (label i = f0; i <= f1; ++i)
|
||||||
{
|
{
|
||||||
label freqI = (i + 1)*fftWriteInterval_ - 1;
|
label freqI = i*fftWriteInterval_;
|
||||||
fOut[i] = freq1[freqI];
|
fOut[i] = freq1[freqI];
|
||||||
const word gName = "fft";
|
const word gName = "fft";
|
||||||
|
|
||||||
PrmsfAve[i] = writeSurfaceData
|
PrmsfAve[i] = writeSurfaceData
|
||||||
(
|
(
|
||||||
fNameBase,
|
fNameBase,
|
||||||
|
|||||||
Reference in New Issue
Block a user