From 85dd515956452894a13c4c19b9e61a895424f014 Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 12 Jul 2013 13:08:54 +0100 Subject: [PATCH 01/40] ENH: triangle - added cachedRandom random point function --- .../primitiveShapes/triangle/triangle.H | 5 +++++ .../primitiveShapes/triangle/triangleI.H | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/OpenFOAM/meshes/primitiveShapes/triangle/triangle.H b/src/OpenFOAM/meshes/primitiveShapes/triangle/triangle.H index de339b172e..6e8030c797 100644 --- a/src/OpenFOAM/meshes/primitiveShapes/triangle/triangle.H +++ b/src/OpenFOAM/meshes/primitiveShapes/triangle/triangle.H @@ -40,6 +40,7 @@ SourceFiles #include "tensor.H" #include "pointHit.H" #include "Random.H" +#include "cachedRandom.H" #include "FixedList.H" #include "UList.H" #include "linePointRef.H" @@ -162,6 +163,10 @@ public: // distribution inline Point randomPoint(Random& rndGen) const; + //- Return a random point on the triangle from a uniform + // distribution + inline Point randomPoint(cachedRandom& rndGen) const; + //- Calculate the barycentric coordinates of the given // point, in the same order as a, b, c. Returns the // determinant of the solution. diff --git a/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H b/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H index 1f4465637f..fbc5a14286 100644 --- a/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H +++ b/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H @@ -244,6 +244,25 @@ inline Point Foam::triangle::randomPoint(Random& rndGen) const } +template +inline Point Foam::triangle::randomPoint +( + cachedRandom& rndGen +) const +{ + // Generating Random Points in Triangles + // by Greg Turk + // from "Graphics Gems", Academic Press, 1990 + // http://tog.acm.org/GraphicsGems/gems/TriPoints.c + + scalar s = rndGen.sample01(); + + scalar t = sqrt(rndGen.sample01()); + + return (1 - t)*a_ + (1 - s)*t*b_ + s*t*c_; +} + + template Foam::scalar Foam::triangle::barycentric ( From 3353aa68d50985b6ed2fdd5319d714157195c6e5 Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 12 Jul 2013 13:10:23 +0100 Subject: [PATCH 02/40] ENH: distributionModel - added utility function to calc return mean value --- .../distributionModel/distributionModel.C | 13 ++++++++++++- .../distributionModel/distributionModel.H | 5 ++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/lagrangian/distributionModels/distributionModel/distributionModel.C b/src/lagrangian/distributionModels/distributionModel/distributionModel.C index ea332b9e1e..83772fc77b 100644 --- a/src/lagrangian/distributionModels/distributionModel/distributionModel.C +++ b/src/lagrangian/distributionModels/distributionModel/distributionModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -124,4 +124,15 @@ Foam::scalar Foam::distributionModels::distributionModel::maxValue() const } +Foam::scalar Foam::distributionModels::distributionModel::meanValue() const +{ + notImplemented + ( + "Foam::scalar " + "Foam::distributionModels::distributionModel::meanValue() const" + ); + return 0.0; +} + + // ************************************************************************* // diff --git a/src/lagrangian/distributionModels/distributionModel/distributionModel.H b/src/lagrangian/distributionModels/distributionModel/distributionModel.H index a9099eb3f7..efc7f2b1ad 100644 --- a/src/lagrangian/distributionModels/distributionModel/distributionModel.H +++ b/src/lagrangian/distributionModels/distributionModel/distributionModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -149,6 +149,9 @@ public: //- Return the maximum value virtual scalar maxValue() const; + + //- Return the maximum value + virtual scalar meanValue() const; }; From 1619b3afe5f21f2c9885fe83a3961200c6e96e29 Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 12 Jul 2013 13:11:27 +0100 Subject: [PATCH 03/40] ENH: Updates to distribution models --- .../RosinRammler/RosinRammler.C | 8 +++++++- .../RosinRammler/RosinRammler.H | 5 ++++- .../exponential/exponential.C | 8 +++++++- .../exponential/exponential.H | 5 ++++- .../distributionModels/fixedValue/fixedValue.C | 8 +++++++- .../distributionModels/fixedValue/fixedValue.H | 5 ++++- .../distributionModels/general/general.C | 17 ++++++++++++++--- .../distributionModels/general/general.H | 7 ++++++- .../multiNormal/multiNormal.C | 14 +++++++++++++- .../multiNormal/multiNormal.H | 5 ++++- .../distributionModels/normal/normal.C | 8 +++++++- .../distributionModels/normal/normal.H | 5 ++++- .../distributionModels/uniform/uniform.C | 6 ++++++ .../distributionModels/uniform/uniform.H | 3 +++ 14 files changed, 90 insertions(+), 14 deletions(-) diff --git a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.C b/src/lagrangian/distributionModels/RosinRammler/RosinRammler.C index 705cd97f20..f2e5ac0965 100644 --- a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.C +++ b/src/lagrangian/distributionModels/RosinRammler/RosinRammler.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -94,4 +94,10 @@ Foam::scalar Foam::distributionModels::RosinRammler::maxValue() const } +Foam::scalar Foam::distributionModels::RosinRammler::meanValue() const +{ + return d_; +} + + // ************************************************************************* // diff --git a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.H b/src/lagrangian/distributionModels/RosinRammler/RosinRammler.H index 2ec0325ce6..64cc13ca3f 100644 --- a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.H +++ b/src/lagrangian/distributionModels/RosinRammler/RosinRammler.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -108,6 +108,9 @@ public: //- Return the maximum value virtual scalar maxValue() const; + + //- Return the mean value + virtual scalar meanValue() const; }; diff --git a/src/lagrangian/distributionModels/exponential/exponential.C b/src/lagrangian/distributionModels/exponential/exponential.C index 72df563826..01298de33c 100644 --- a/src/lagrangian/distributionModels/exponential/exponential.C +++ b/src/lagrangian/distributionModels/exponential/exponential.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -91,4 +91,10 @@ Foam::scalar Foam::distributionModels::exponential::maxValue() const } +Foam::scalar Foam::distributionModels::exponential::meanValue() const +{ + return 1.0/lambda_; +} + + // ************************************************************************* // diff --git a/src/lagrangian/distributionModels/exponential/exponential.H b/src/lagrangian/distributionModels/exponential/exponential.H index c19d0ac002..0bcadfc0b8 100644 --- a/src/lagrangian/distributionModels/exponential/exponential.H +++ b/src/lagrangian/distributionModels/exponential/exponential.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -101,6 +101,9 @@ public: //- Return the maximum value virtual scalar maxValue() const; + + //- Return the mean value + virtual scalar meanValue() const; }; diff --git a/src/lagrangian/distributionModels/fixedValue/fixedValue.C b/src/lagrangian/distributionModels/fixedValue/fixedValue.C index 44d4a07d67..048a9482f3 100644 --- a/src/lagrangian/distributionModels/fixedValue/fixedValue.C +++ b/src/lagrangian/distributionModels/fixedValue/fixedValue.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -83,4 +83,10 @@ Foam::scalar Foam::distributionModels::fixedValue::fixedValue::maxValue() const } +Foam::scalar Foam::distributionModels::fixedValue::fixedValue::meanValue() const +{ + return value_; +} + + // ************************************************************************* // diff --git a/src/lagrangian/distributionModels/fixedValue/fixedValue.H b/src/lagrangian/distributionModels/fixedValue/fixedValue.H index 8ed5e61211..3de10f43b6 100644 --- a/src/lagrangian/distributionModels/fixedValue/fixedValue.H +++ b/src/lagrangian/distributionModels/fixedValue/fixedValue.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -92,6 +92,9 @@ public: //- Return the maximum value virtual scalar maxValue() const; + + //- Return the mean value + virtual scalar meanValue() const; }; diff --git a/src/lagrangian/distributionModels/general/general.C b/src/lagrangian/distributionModels/general/general.C index 98e3336f25..5199ff8074 100644 --- a/src/lagrangian/distributionModels/general/general.C +++ b/src/lagrangian/distributionModels/general/general.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -50,6 +50,7 @@ Foam::distributionModels::general::general nEntries_(xy_.size()), minValue_(xy_[0][0]), maxValue_(xy_[nEntries_-1][0]), + meanValue_(0.0), integral_(nEntries_) { check(); @@ -69,10 +70,14 @@ Foam::distributionModels::general::general integral_[i] = area + integral_[i-1]; } + scalar sumArea = integral_.last(); + + meanValue_ = sumArea/(maxValue_ - minValue_); + for (label i=0; i integral_; @@ -104,6 +106,9 @@ public: //- Return the maximum value virtual scalar maxValue() const; + + //- Return the mean value + virtual scalar meanValue() const; }; diff --git a/src/lagrangian/distributionModels/multiNormal/multiNormal.C b/src/lagrangian/distributionModels/multiNormal/multiNormal.C index 7a5f6ea9e9..9a8bf423ec 100644 --- a/src/lagrangian/distributionModels/multiNormal/multiNormal.C +++ b/src/lagrangian/distributionModels/multiNormal/multiNormal.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -145,4 +145,16 @@ Foam::scalar Foam::distributionModels::multiNormal::maxValue() const } +Foam::scalar Foam::distributionModels::multiNormal::meanValue() const +{ + scalar mean = 0.0; + forAll(strength_, i) + { + mean += strength_[i]*expectation_[i]; + } + + return mean; +} + + // ************************************************************************* // diff --git a/src/lagrangian/distributionModels/multiNormal/multiNormal.H b/src/lagrangian/distributionModels/multiNormal/multiNormal.H index 90c2a8334d..c1fc3adf79 100644 --- a/src/lagrangian/distributionModels/multiNormal/multiNormal.H +++ b/src/lagrangian/distributionModels/multiNormal/multiNormal.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -111,6 +111,9 @@ public: //- Return the maximum value virtual scalar maxValue() const; + + //- Return the mean value + virtual scalar meanValue() const; }; diff --git a/src/lagrangian/distributionModels/normal/normal.C b/src/lagrangian/distributionModels/normal/normal.C index 627ea6e9ea..c9e4cc0184 100644 --- a/src/lagrangian/distributionModels/normal/normal.C +++ b/src/lagrangian/distributionModels/normal/normal.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -120,6 +120,12 @@ Foam::scalar Foam::distributionModels::normal::maxValue() const } +Foam::scalar Foam::distributionModels::normal::meanValue() const +{ + return expectation_; +} + + Foam::scalar Foam::distributionModels::normal::erfInv(const scalar y) const { scalar k = 2.0/(constant::mathematical::pi*a_) + 0.5*log(1.0 - y*y); diff --git a/src/lagrangian/distributionModels/normal/normal.H b/src/lagrangian/distributionModels/normal/normal.H index b9559f0c29..01ecdb04ed 100644 --- a/src/lagrangian/distributionModels/normal/normal.H +++ b/src/lagrangian/distributionModels/normal/normal.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -112,6 +112,9 @@ public: //- Return the maximum value virtual scalar maxValue() const; + //- Return the mean value + virtual scalar meanValue() const; + virtual scalar erfInv(const scalar y) const; }; diff --git a/src/lagrangian/distributionModels/uniform/uniform.C b/src/lagrangian/distributionModels/uniform/uniform.C index 8328490588..05f7a21bef 100644 --- a/src/lagrangian/distributionModels/uniform/uniform.C +++ b/src/lagrangian/distributionModels/uniform/uniform.C @@ -87,4 +87,10 @@ Foam::scalar Foam::distributionModels::uniform::maxValue() const } +Foam::scalar Foam::distributionModels::uniform::meanValue() const +{ + return 0.5*(minValue_ + maxValue_); +} + + // ************************************************************************* // diff --git a/src/lagrangian/distributionModels/uniform/uniform.H b/src/lagrangian/distributionModels/uniform/uniform.H index cd4a6733a0..21d0e1c14b 100644 --- a/src/lagrangian/distributionModels/uniform/uniform.H +++ b/src/lagrangian/distributionModels/uniform/uniform.H @@ -96,6 +96,9 @@ public: //- Return the maximum value virtual scalar maxValue() const; + + //- Return the mean value + virtual scalar meanValue() const; }; From 7004727257b6da8fa3b0f37f8549a4de638ef5d1 Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 12 Jul 2013 13:12:35 +0100 Subject: [PATCH 04/40] ENH: InjectionModel - made averageParcelMass function virtual --- .../Kinematic/InjectionModel/InjectionModel/InjectionModel.H | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H index a5492a12b6..70948c356c 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H @@ -292,7 +292,7 @@ public: ); //- Return the average parcel mass over the injection period - scalar averageParcelMass(); + virtual scalar averageParcelMass(); // Counters From 7f413189494bb410730d72533ad6ef277a56403a Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 12 Jul 2013 13:12:57 +0100 Subject: [PATCH 05/40] ENH: InjectionModel - stabilised volume fraction calculation --- .../Kinematic/InjectionModel/InjectionModel/InjectionModel.C | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C index 94eb19932e..f49e790867 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C @@ -72,7 +72,9 @@ bool Foam::InjectionModel::prepareForNextTimeStep newParcels = this->parcelsToInject(t0, t1); // Volume of parcels to inject - newVolumeFraction = this->volumeToInject(t0, t1)/volumeTotal_; + newVolumeFraction = + this->volumeToInject(t0, t1) + /(volumeTotal_ + ROOTVSMALL); if (newVolumeFraction > 0) { From f67b047dbb1104dbe2aceb40997da9d11bcb0c6f Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 12 Jul 2013 13:14:00 +0100 Subject: [PATCH 06/40] ENH: Patch injection model - refactored and improved injection location functionality --- src/lagrangian/intermediate/Make/files | 2 +- .../PatchInjection/PatchInjection.C | 87 ++----- .../PatchInjection/PatchInjection.H | 22 +- .../PatchInjection/patchInjectionBase.C | 244 ++++++++++++++++++ .../PatchInjection/patchInjectionBase.H | 139 ++++++++++ 5 files changed, 408 insertions(+), 86 deletions(-) create mode 100644 src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/patchInjectionBase.C create mode 100644 src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/patchInjectionBase.H diff --git a/src/lagrangian/intermediate/Make/files b/src/lagrangian/intermediate/Make/files index 9165621d6c..6d4e26a441 100644 --- a/src/lagrangian/intermediate/Make/files +++ b/src/lagrangian/intermediate/Make/files @@ -54,13 +54,13 @@ KINEMATICINJECTION=submodels/Kinematic/InjectionModel $(KINEMATICINJECTION)/KinematicLookupTableInjection/kinematicParcelInjectionData.C $(KINEMATICINJECTION)/KinematicLookupTableInjection/kinematicParcelInjectionDataIO.C $(KINEMATICINJECTION)/KinematicLookupTableInjection/kinematicParcelInjectionDataIOList.C +$(KINEMATICINJECTION)/PatchInjection/patchInjectionBase.C THERMOINJECTION=submodels/Thermodynamic/InjectionModel $(THERMOINJECTION)/ThermoLookupTableInjection/thermoParcelInjectionData.C $(THERMOINJECTION)/ThermoLookupTableInjection/thermoParcelInjectionDataIO.C $(THERMOINJECTION)/ThermoLookupTableInjection/thermoParcelInjectionDataIOList.C - REACTINGINJECTION=submodels/Reacting/InjectionModel $(REACTINGINJECTION)/ReactingLookupTableInjection/reactingParcelInjectionData.C $(REACTINGINJECTION)/ReactingLookupTableInjection/reactingParcelInjectionDataIO.C diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C index 9744364ca1..184c026b92 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -38,8 +38,7 @@ Foam::PatchInjection::PatchInjection ) : InjectionModel(dict, owner, modelName, typeName), - patchName_(this->coeffDict().lookup("patchName")), - patchId_(owner.mesh().boundaryMesh().findPatchID(patchName_)), + patchInjectionBase(owner.mesh(), this->coeffDict().lookup("patchName")), duration_(readScalar(this->coeffDict().lookup("duration"))), parcelsPerSecond_ ( @@ -62,32 +61,11 @@ Foam::PatchInjection::PatchInjection this->coeffDict().subDict("sizeDistribution"), owner.rndGen() ) - ), - cellOwners_(), - fraction_(1.0) + ) { - if (patchId_ < 0) - { - FatalErrorIn - ( - "PatchInjection::PatchInjection" - "(" - "const dictionary&, " - "CloudType&" - ")" - ) << "Requested patch " << patchName_ << " not found" << nl - << "Available patches are: " << owner.mesh().boundaryMesh().names() - << nl << exit(FatalError); - } - duration_ = owner.db().time().userTimeToTime(duration_); - updateMesh(); - - label patchSize = cellOwners_.size(); - label totalPatchSize = patchSize; - reduce(totalPatchSize, sumOp