From 002e7d7b06fdd0395710841753a43dbb8669e667 Mon Sep 17 00:00:00 2001 From: Will Bainbridge Date: Thu, 7 Jun 2018 17:33:16 +0100 Subject: [PATCH] Random: Replaced drand48 with an in-class implementation This is faster than the library functionality that it replaces, as it allows the compiler to do inlining. It also does not utilise any static state so generators do not interfere with each other. It is also faster than the the array lookup in cachedRandom. The cachedRandom class therefore offers no advantage over Random and has been removed. --- applications/test/Distribution/Make/files | 2 +- .../test/Distribution/Test-Distribution.C | 34 +- .../test/fieldMapping/Test-fieldMapping.C | 2 +- applications/test/hexRef8/Test-hexRef8.C | 12 +- applications/test/parallel/Test-parallel.C | 5 +- .../test/speed/scalarSpeed/Test-scalarSpeed.C | 2 +- applications/test/syncTools/Test-syncTools.C | 11 +- .../autoDensity/autoDensity.C | 2 +- .../miscellaneous/pdfPlot/createFields.H | 2 +- src/OpenFOAM/Make/files | 3 +- .../primitiveShapes/tetrahedron/tetrahedron.H | 7 +- .../tetrahedron/tetrahedronI.H | 10 - .../primitiveShapes/triangle/triangle.H | 5 - .../primitiveShapes/triangle/triangleI.H | 10 - .../Barycentric/barycentric/barycentric.C | 40 +-- .../Barycentric/barycentric/barycentric.H | 4 +- .../barycentric2D/barycentric2D.C | 36 +-- .../barycentric2D/barycentric2D.H | 4 +- src/OpenFOAM/primitives/Random/Random.C | 109 +++++++ src/OpenFOAM/primitives/Random/Random.H | 158 ++++++++++ src/OpenFOAM/primitives/Random/RandomI.H | 139 +++++++++ .../primitives/random/Random/Random.C | 198 ------------ .../primitives/random/Random/Random.H | 110 ------- .../random/cachedRandom/cachedRandom.C | 293 ------------------ .../random/cachedRandom/cachedRandom.H | 234 -------------- .../random/cachedRandom/cachedRandomI.H | 54 ---- .../cachedRandom/cachedRandomTemplates.C | 140 --------- .../turbulentInletFvPatchField.C | 4 +- .../field/randomise/randomiseTemplates.C | 5 +- .../clouds/Templates/DSMCCloud/DSMCCloud.C | 19 +- .../FreeStream/FreeStream.C | 4 +- .../MaxwellianThermal/MaxwellianThermal.C | 4 +- .../MixedDiffuseSpecular.C | 4 +- .../RosinRammler/RosinRammler.C | 4 +- .../RosinRammler/RosinRammler.H | 2 +- .../distributionModel/distributionModel.C | 4 +- .../distributionModel/distributionModel.H | 12 +- .../distributionModel/distributionModelNew.C | 4 +- .../exponential/exponential.C | 4 +- .../exponential/exponential.H | 2 +- .../fixedValue/fixedValue.C | 4 +- .../fixedValue/fixedValue.H | 2 +- .../distributionModels/general/general.C | 2 +- .../distributionModels/general/general.H | 2 +- .../massRosinRammler/massRosinRammler.C | 4 +- .../massRosinRammler/massRosinRammler.H | 2 +- .../multiNormal/multiNormal.C | 4 +- .../multiNormal/multiNormal.H | 2 +- .../distributionModels/normal/normal.C | 4 +- .../distributionModels/normal/normal.H | 2 +- .../distributionModels/uniform/uniform.C | 6 +- .../distributionModels/uniform/uniform.H | 2 +- .../Templates/KinematicCloud/KinematicCloud.C | 14 +- .../Templates/KinematicCloud/KinematicCloud.H | 8 +- .../KinematicCloud/KinematicCloudI.H | 2 +- .../ParticleCollector/ParticleCollector.C | 2 +- .../CellZoneInjection/CellZoneInjection.C | 4 +- .../ConeInjection/ConeInjection.C | 4 +- .../ConeNozzleInjection/ConeNozzleInjection.C | 8 +- .../InflationInjection/InflationInjection.C | 14 +- .../KinematicLookupTableInjection.C | 6 +- .../PatchFlowRateInjection.C | 9 +- .../PatchInjection/PatchInjection.C | 9 +- .../PatchInjection/patchInjectionBase.C | 10 +- .../PatchInjection/patchInjectionBase.H | 4 +- .../IsotropyModels/Stochastic/Stochastic.C | 4 +- .../ReactingLookupTableInjection.C | 6 +- .../ReactingMultiphaseLookupTableInjection.C | 6 +- .../ThermoLookupTableInjection.C | 6 +- .../ThermoSurfaceFilm/ThermoSurfaceFilm.H | 4 +- .../molecule/moleculeCloud/moleculeCloudI.H | 19 +- .../AtomizationModel/AtomizationModel.H | 4 +- .../BlobsSheetAtomization.C | 4 +- .../BlobsSheetAtomization.H | 4 +- .../LISAAtomization/LISAAtomization.C | 2 +- .../LISAAtomization/LISAAtomization.H | 4 +- .../NoAtomization/NoAtomization.C | 4 +- .../NoAtomization/NoAtomization.H | 4 +- .../spray/submodels/BreakupModel/SHF/SHF.C | 2 +- .../spray/submodels/BreakupModel/TAB/TAB.C | 4 +- .../GradientDispersionRAS.C | 6 +- .../StochasticDispersionRAS.C | 8 +- .../BrownianMotion/BrownianMotionForce.C | 10 +- .../BrownianMotion/BrownianMotionForce.H | 6 +- .../surfaceIntersection/edgeIntersections.C | 4 +- .../pointToPointPlanarInterpolation.C | 2 +- .../processes/UOprocess/UOprocess.C | 6 +- src/randomProcesses/turbulence/turbGen.C | 4 +- .../distributionContactAngleForce.C | 4 +- .../distributionContactAngleForce.H | 6 +- ...bedTemperatureDependentContactAngleForce.C | 4 +- ...bedTemperatureDependentContactAngleForce.H | 6 +- .../drippingInjection/drippingInjection.C | 2 +- .../drippingInjection/drippingInjection.H | 4 +- .../randomRenumber/randomRenumber.C | 4 +- .../sampledSet/patchSeed/patchSeedSet.C | 2 +- 96 files changed, 625 insertions(+), 1358 deletions(-) create mode 100644 src/OpenFOAM/primitives/Random/Random.C create mode 100644 src/OpenFOAM/primitives/Random/Random.H create mode 100644 src/OpenFOAM/primitives/Random/RandomI.H delete mode 100644 src/OpenFOAM/primitives/random/Random/Random.C delete mode 100644 src/OpenFOAM/primitives/random/Random/Random.H delete mode 100644 src/OpenFOAM/primitives/random/cachedRandom/cachedRandom.C delete mode 100644 src/OpenFOAM/primitives/random/cachedRandom/cachedRandom.H delete mode 100644 src/OpenFOAM/primitives/random/cachedRandom/cachedRandomI.H delete mode 100644 src/OpenFOAM/primitives/random/cachedRandom/cachedRandomTemplates.C diff --git a/applications/test/Distribution/Make/files b/applications/test/Distribution/Make/files index 3b3486c124..627b32aea2 100644 --- a/applications/test/Distribution/Make/files +++ b/applications/test/Distribution/Make/files @@ -1,3 +1,3 @@ Test-Distribution.C -EXE = $(FOAM_USER_APPBIN)/Test-DistributionTest +EXE = $(FOAM_USER_APPBIN)/Test-Distribution diff --git a/applications/test/Distribution/Test-Distribution.C b/applications/test/Distribution/Test-Distribution.C index f893e1e4bc..60f0c1660f 100644 --- a/applications/test/Distribution/Test-Distribution.C +++ b/applications/test/Distribution/Test-Distribution.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -66,12 +66,12 @@ int main(int argc, char *argv[]) Info<< nl << "Distribution" << nl << "Sampling " << randomDistributionTestSize - << " times from GaussNormal distribution." + << " times from a standard normal distribution." << endl; for (label i = 0; i < randomDistributionTestSize; i++) { - dS.add(2.5*R.GaussNormal() + 8.5); + dS.add(2.5*R.scalarNormal() + 8.5); } Info<< "Mean " << dS.mean() << nl @@ -85,12 +85,12 @@ int main(int argc, char *argv[]) Info<< nl << "Distribution" << nl << "Sampling " << randomDistributionTestSize - << " times from GaussNormal distribution." + << " times from a standard normal distribution." << endl; for (label i = 0; i < randomDistributionTestSize; i++) { - dS2.add(1.5*R.GaussNormal() -6.0); + dS2.add(1.5*R.scalarNormal() -6.0); } Info<< "Mean " << dS2.mean() << nl @@ -150,23 +150,23 @@ int main(int argc, char *argv[]) Info<< nl << "Distribution" << nl << "Sampling " << randomDistributionTestSize - << " times from uniform and GaussNormal distribution." + << " times from uniform and a standard normal distribution." << endl; for (label i = 0; i < randomDistributionTestSize; i++) { - dV.add(R.vector01()); + dV.add(R.sample01()); - // Adding separate GaussNormal components with component + // Adding separate standard normal components with component // weights dV.add ( vector ( - R.GaussNormal()*3.0 + 1.5, - R.GaussNormal()*0.25 + 4.0, - R.GaussNormal()*3.0 - 1.5 + R.scalarNormal()*3.0 + 1.5, + R.scalarNormal()*0.25 + 4.0, + R.scalarNormal()*3.0 - 1.5 ), vector(1.0, 2.0, 5.0) ); @@ -197,9 +197,9 @@ int main(int argc, char *argv[]) // ( // labelVector // ( - // R.integer(-1000, 1000), - // R.integer(-5000, 5000), - // R.integer(-2000, 7000) + // R.sampleAB