From 124ad071a7f148477288889e8da3103f203f38bd Mon Sep 17 00:00:00 2001 From: andy <andy> Date: Tue, 12 Feb 2013 10:12:54 +0000 Subject: [PATCH] ENH: Only generate random numbers when required --- .../drippingInjection/drippingInjection.C | 57 +++++++++++-------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/src/regionModels/surfaceFilmModels/submodels/kinematic/injectionModel/drippingInjection/drippingInjection.C b/src/regionModels/surfaceFilmModels/submodels/kinematic/injectionModel/drippingInjection/drippingInjection.C index e271674b10d..237e1b243ef 100644 --- a/src/regionModels/surfaceFilmModels/submodels/kinematic/injectionModel/drippingInjection/drippingInjection.C +++ b/src/regionModels/surfaceFilmModels/submodels/kinematic/injectionModel/drippingInjection/drippingInjection.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 @@ -66,13 +66,8 @@ drippingInjection::drippingInjection rndGen_ ) ), - diameter_(owner.regionMesh().nCells(), 0.0) -{ - forAll(diameter_, faceI) - { - diameter_[faceI] = parcelDistribution_->sample(); - } -} + diameter_(owner.regionMesh().nCells(), -1.0) +{} // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // @@ -117,27 +112,41 @@ void drippingInjection::correct // Collect the data to be transferred - forAll(massToInject, cellI) + forAll(massDrip, cellI) { - scalar rhoc = rho[cellI]; - scalar diam = diameter_[cellI]; - scalar minMass = particlesPerParcel_*rhoc*pi/6*pow3(diam); - - if (massDrip[cellI] > minMass) + if (massDrip[cellI] > 0) { - // All drip mass can be injected - massToInject[cellI] += massDrip[cellI]; - availableMass[cellI] -= massDrip[cellI]; - - // Set particle diameter - diameterToInject[cellI] = diameter_[cellI]; - - // Retrieve new particle diameter sample - diameter_[cellI] = parcelDistribution_->sample(); + // 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 minMass = particlesPerParcel_*rhoc*pi/6*pow3(diam); + + if (massDrip[cellI] > minMass) + { + // 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 { - // Mass below minimum threshold - cannot be injected massToInject[cellI] = 0.0; diameterToInject[cellI] = 0.0; } -- GitLab