From 125902a87257f41f0051cc3ea283c732f0db2f66 Mon Sep 17 00:00:00 2001 From: Will Bainbridge Date: Wed, 5 Jun 2024 12:29:00 +0100 Subject: [PATCH] randomGenerator: Global flag A random generator can now be constructed with a global flag. If the flag is false then the provided seed will be randomised across the different processes. If the flag is true then the synchronicity of the generators state will be checked when performing certain operations in debug mode. --- applications/test/parallel/Test-parallel.C | 2 +- applications/test/syncTools/Test-syncTools.C | 2 +- .../randomGenerator/randomGenerator.C | 69 ++++- .../randomGenerator/randomGenerator.H | 128 ++++++++-- .../randomGenerator/randomGeneratorI.H | 237 +++++++++++++----- .../clouds/Templates/DSMCCloud/DSMCCloud.C | 4 +- .../patchIntersection/star/starTemplates.C | 3 +- .../decompositionMethods/random/random.C | 2 +- .../boundaryRandom/boundaryRandom.C | 2 +- .../sampledSet/circleRandom/circleRandom.C | 2 +- .../sampledSet/sphereRandom/sphereRandom.C | 2 +- src/waves/waveModels/irregular/irregular.C | 2 +- 12 files changed, 363 insertions(+), 92 deletions(-) diff --git a/applications/test/parallel/Test-parallel.C b/applications/test/parallel/Test-parallel.C index f679fefc13..09449c2435 100644 --- a/applications/test/parallel/Test-parallel.C +++ b/applications/test/parallel/Test-parallel.C @@ -56,7 +56,7 @@ int main(int argc, char *argv[]) if (true) { - randomGenerator rndGen(43544*Pstream::myProcNo()); + randomGenerator rndGen(43544); // Generate random data. List>> complexData(100); diff --git a/applications/test/syncTools/Test-syncTools.C b/applications/test/syncTools/Test-syncTools.C index f7051cd29f..df898a803b 100644 --- a/applications/test/syncTools/Test-syncTools.C +++ b/applications/test/syncTools/Test-syncTools.C @@ -593,7 +593,7 @@ int main(int argc, char *argv[]) #include "createPolyMesh.H" - randomGenerator rndGen(5341*(Pstream::myProcNo()+1)); + randomGenerator rndGen(5341); // Face sync diff --git a/src/OpenFOAM/primitives/randomGenerator/randomGenerator.C b/src/OpenFOAM/primitives/randomGenerator/randomGenerator.C index e37d8f9c08..608bd0bb31 100644 --- a/src/OpenFOAM/primitives/randomGenerator/randomGenerator.C +++ b/src/OpenFOAM/primitives/randomGenerator/randomGenerator.C @@ -28,17 +28,75 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::randomGenerator::randomGenerator(Istream& is) +Foam::randomGenerator::randomGenerator(Istream& is, const bool global) : + global_(global), x_(pTraits(is)) +{ + checkSync(); +} + + +Foam::randomGenerator::randomGenerator +( + const word& name, + const dictionary& dict, + randomGenerator&& defaultRndGen +) +: + global_(defaultRndGen.global_), + x_ + ( + dict.found(name) + ? dict.lookup(name) + : dict.found(name + "Seed") + ? seed(dict.lookup