From 23af7e435a4acb100add288dd5322697cb9b5a0a Mon Sep 17 00:00:00 2001 From: Andrew Heather <a.heather@opencfd.co.uk> Date: Fri, 29 Dec 2017 23:57:22 +0000 Subject: [PATCH] ENH: FFT - removed power-of-2 constraint on number of samples --- .../utilities/postProcessing/noise/noise.C | 3 +-- .../utilities/postProcessing/noise/noiseDict | 6 ++---- src/randomProcesses/fft/fft.C | 14 -------------- .../noise/noiseModels/noiseModel/noiseModel.C | 10 ---------- .../noise/noiseModels/noiseModel/noiseModel.H | 3 --- .../noise/noiseModels/pointNoise/pointNoise.H | 3 +-- .../noise/noiseModels/surfaceNoise/surfaceNoise.H | 3 +-- .../LES/vortexShed/system/noiseDict-point | 2 +- .../LES/vortexShed/system/noiseDict-surface | 2 +- 9 files changed, 7 insertions(+), 39 deletions(-) diff --git a/applications/utilities/postProcessing/noise/noise.C b/applications/utilities/postProcessing/noise/noise.C index 97f2cb775f3..61653947eaa 100644 --- a/applications/utilities/postProcessing/noise/noise.C +++ b/applications/utilities/postProcessing/noise/noise.C @@ -74,8 +74,7 @@ Usage } } - // Number of samples in sampling window - // Must be a power of 2, default = 2^16 (=65536) + // Number of samples in sampling window, default = 2^16 (=65536) N 4096; // Write interval for FFT data, default = 1 diff --git a/applications/utilities/postProcessing/noise/noiseDict b/applications/utilities/postProcessing/noise/noiseDict index ca808462c4c..9323c98df62 100644 --- a/applications/utilities/postProcessing/noise/noiseDict +++ b/applications/utilities/postProcessing/noise/noiseDict @@ -72,8 +72,7 @@ surfaceNoiseCoeffs // Reference density (to convert from kinematic to static pressure) rhoRef 1.205; - // Number of samples in sampling window - // Must be a power of 2, default = 2^16 (=65536) + // Number of samples in sampling window, default = 2^16 (=65536) N 4096; // 8192; // 4096; // Lower frequency limit, default = 25Hz @@ -123,8 +122,7 @@ pointNoiseCoeffs // Reference density (to convert from kinematic to static pressure) rhoRef 1.2; - // Number of samples in sampling window - // Must be a power of 2, default = 2^16 (=65536) + // Number of samples in sampling window, default = 2^16 (=65536) N 4096; // Lower frequency limit, default = 25Hz diff --git a/src/randomProcesses/fft/fft.C b/src/randomProcesses/fft/fft.C index 658e477f1e2..260bc1901e0 100644 --- a/src/randomProcesses/fft/fft.C +++ b/src/randomProcesses/fft/fft.C @@ -95,20 +95,6 @@ void Foam::fft::transform transformDirection dir ) { - forAll(nn, idim) - { - // Check for power of two - unsigned int dimCount = nn[idim]; - if (!dimCount || (dimCount & (dimCount - 1))) - { - FatalErrorInFunction - << "number of elements in direction " << idim - << " is not a power of 2" << endl - << " Number of elements in each direction = " << nn - << abort(FatalError); - } - } - // Copy field into fftw containers const label N = field.size(); fftw_complex in[N], out[N]; diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C index 84ba84ca4be..008d161cbd9 100644 --- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C +++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.C @@ -206,16 +206,6 @@ bool Foam::noiseModel::read(const dictionary& dict) dict.readIfPresent("maxPressure", maxPressure_); dict.readIfPresent("outputPrefix", outputPrefix_); - // Check number of samples - must be a power of 2 for our FFT - bool powerOf2 = ((nSamples_ != 0) && !(nSamples_ & (nSamples_ - 1))); - if (!powerOf2) - { - FatalIOErrorInFunction(dict) - << "N: Number of samples in sampling windows must be a " - << "power of 2" - << exit(FatalIOError); - } - if (fLower_ < 0) { FatalIOErrorInFunction(dict) diff --git a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H index b74e053dd00..336f46ca863 100644 --- a/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H +++ b/src/randomProcesses/noise/noiseModels/noiseModel/noiseModel.H @@ -66,9 +66,6 @@ Description writeOctaves | Write octaves data | no | yes \endtable -Note - The number of samples in the sampling window must be a power of 2 - SourceFiles noiseModel.C diff --git a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H index 3e05e14cb7d..1a860fe8e2c 100644 --- a/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H +++ b/src/randomProcesses/noise/noiseModels/pointNoise/pointNoise.H @@ -33,8 +33,7 @@ Description // Pressure reference pRef 0; - // Number of samples in sampling window - // Must be a power of 2, default = 2^16 (=65536) + // Number of samples in sampling window, default = 2^16 (=65536) N 4096; // Lower frequency bounds diff --git a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H index ad7cedebcc0..6cb08327ea5 100644 --- a/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H +++ b/src/randomProcesses/noise/noiseModels/surfaceNoise/surfaceNoise.H @@ -33,8 +33,7 @@ Description // Pressure reference pRef 0; - // Number of samples in sampling window - // Must be a power of 2, default = 2^16 (=65536) + // Number of samples in sampling window, default = 2^16 (=65536) N 4096; // Lower frequency bounds diff --git a/tutorials/incompressible/pimpleFoam/LES/vortexShed/system/noiseDict-point b/tutorials/incompressible/pimpleFoam/LES/vortexShed/system/noiseDict-point index 2f640c98c26..b7935e68103 100644 --- a/tutorials/incompressible/pimpleFoam/LES/vortexShed/system/noiseDict-point +++ b/tutorials/incompressible/pimpleFoam/LES/vortexShed/system/noiseDict-point @@ -45,7 +45,7 @@ pointNoiseCoeffs separator " "; // Number of samples in sampling window - // Must be a power of 2, default = 2^16 (=65536) + // default = 2^16 (=65536) N 4096; rhoRef 1.205; diff --git a/tutorials/incompressible/pimpleFoam/LES/vortexShed/system/noiseDict-surface b/tutorials/incompressible/pimpleFoam/LES/vortexShed/system/noiseDict-surface index a1206332108..6d620735bc4 100644 --- a/tutorials/incompressible/pimpleFoam/LES/vortexShed/system/noiseDict-surface +++ b/tutorials/incompressible/pimpleFoam/LES/vortexShed/system/noiseDict-surface @@ -56,7 +56,7 @@ surfaceNoiseCoeffs p Curle; // Number of samples in sampling window - // Must be a power of 2, default = 2^16 (=65536) + // default = 2^16 (=65536) N 1024; rhoRef 1.205; -- GitLab