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,27 +112,41 @@ void drippingInjection::correct
// Collect the data to be transferred // Collect the data to be transferred
forAll(massToInject, cellI) forAll(massDrip, cellI)
{ {
scalar rhoc = rho[cellI]; if (massDrip[cellI] > 0)
scalar diam = diameter_[cellI];
scalar minMass = particlesPerParcel_*rhoc*pi/6*pow3(diam);
if (massDrip[cellI] > minMass)
{ {
// All drip mass can be injected // set new particle diameter if not already set
massToInject[cellI] += massDrip[cellI]; if (diameter_[cellI] < 0)
availableMass[cellI] -= massDrip[cellI]; {
diameter_[cellI] = parcelDistribution_->sample();
}
// Set particle diameter scalar& diam = diameter_[cellI];
diameterToInject[cellI] = diameter_[cellI]; scalar rhoc = rho[cellI];
scalar minMass = particlesPerParcel_*rhoc*pi/6*pow3(diam);
// Retrieve new particle diameter sample if (massDrip[cellI] > minMass)
diameter_[cellI] = parcelDistribution_->sample(); {
// All drip mass can be injected
massToInject[cellI] += massDrip[cellI];
availableMass[cellI] -= massDrip[cellI];
// Set particle diameter
diameterToInject[cellI] = diam;
// Retrieve new particle diameter 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;
} }