ENH: Only generate random numbers when required

This commit is contained in:
andy
2013-02-12 10:12:54 +00:00
parent c5755f7aed
commit 124ad071a7

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -66,13 +66,8 @@ drippingInjection::drippingInjection
rndGen_ rndGen_
) )
), ),
diameter_(owner.regionMesh().nCells(), 0.0) diameter_(owner.regionMesh().nCells(), -1.0)
{ {}
forAll(diameter_, faceI)
{
diameter_[faceI] = parcelDistribution_->sample();
}
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
@ -117,10 +112,18 @@ void drippingInjection::correct
// Collect the data to be transferred // Collect the data to be transferred
forAll(massToInject, cellI) forAll(massDrip, cellI)
{ {
if (massDrip[cellI] > 0)
{
// set new particle diameter if not already set
if (diameter_[cellI] < 0)
{
diameter_[cellI] = parcelDistribution_->sample();
}
scalar& diam = diameter_[cellI];
scalar rhoc = rho[cellI]; scalar rhoc = rho[cellI];
scalar diam = diameter_[cellI];
scalar minMass = particlesPerParcel_*rhoc*pi/6*pow3(diam); scalar minMass = particlesPerParcel_*rhoc*pi/6*pow3(diam);
if (massDrip[cellI] > minMass) if (massDrip[cellI] > minMass)
@ -130,14 +133,20 @@ void drippingInjection::correct
availableMass[cellI] -= massDrip[cellI]; availableMass[cellI] -= massDrip[cellI];
// Set particle diameter // Set particle diameter
diameterToInject[cellI] = diameter_[cellI]; diameterToInject[cellI] = diam;
// Retrieve new particle diameter sample // Retrieve new particle diameter sample
diameter_[cellI] = parcelDistribution_->sample(); diam = parcelDistribution_->sample();
}
else
{
// Particle mass below minimum threshold - cannot be injected
massToInject[cellI] = 0.0;
diameterToInject[cellI] = 0.0;
}
} }
else else
{ {
// Mass below minimum threshold - cannot be injected
massToInject[cellI] = 0.0; massToInject[cellI] = 0.0;
diameterToInject[cellI] = 0.0; diameterToInject[cellI] = 0.0;
} }