ENH. Making equivalent size collisions switchable.

This commit is contained in:
graham
2010-05-25 11:53:52 +01:00
parent d7cade2b6b
commit bcdc6291ca
4 changed files with 53 additions and 9 deletions

View File

@ -46,7 +46,11 @@ void Foam::PairSpringSliderDashpot<CloudType>::findMinMaxProperties
// Finding minimum diameter to avoid excessive arithmetic
scalar dEff = p.d();
// scalar dEff = p.d()*cbrt(p.nParticle()*volumeFactor_);
if (useEquivalentSize_)
{
dEff *= cbrt(p.nParticle()*volumeFactor_);
}
RMin = min(dEff, RMin);
@ -95,8 +99,14 @@ Foam::PairSpringSliderDashpot<CloudType>::PairSpringSliderDashpot
this->coeffDict().lookup("collisionResolutionSteps")
)
),
volumeFactor_(this->dict().lookupOrDefault("volumeFactor", 1.0))
volumeFactor_(1.0),
useEquivalentSize_(Switch(this->dict().lookup("useEquivalentSize")))
{
if (useEquivalentSize_)
{
volumeFactor_ = readScalar(this->dict().lookup("volumeFactor"));
}
scalar nu = this->owner().constProps().poissonsRatio();
scalar E = this->owner().constProps().youngsModulus();
@ -159,12 +169,20 @@ void Foam::PairSpringSliderDashpot<CloudType>::evaluatePair
{
vector r_AB = (pA.position() - pB.position());
//scalar dAEff = pA.d()*cbrt(pA.nParticle()*volumeFactor_);
scalar dAEff = pA.d();
// scalar dBEff = pB.d()*cbrt(pB.nParticle()*volumeFactor_);
if (useEquivalentSize_)
{
dAEff *= cbrt(pA.nParticle()*volumeFactor_);
}
scalar dBEff = pB.d();
if (useEquivalentSize_)
{
dBEff *= cbrt(pB.nParticle()*volumeFactor_);
}
scalar normalOverlapMag = 0.5*(dAEff + dBEff) - mag(r_AB);
if (normalOverlapMag > 0)

View File

@ -92,6 +92,10 @@ class PairSpringSliderDashpot
// factor
scalar volumeFactor_;
//- Switch to control use of equivalent size particles. Used
// because cbrt calculation is very expensive.
bool useEquivalentSize_;
// Private Member Functions

View File

@ -46,7 +46,11 @@ void Foam::WallSpringSliderDashpot<CloudType>::findMinMaxProperties
// Finding minimum diameter to avoid excessive arithmetic
scalar dEff = p.d();
// scalar dEff = p.d()*cbrt(p.nParticle()*volumeFactor_);
if (useEquivalentSize_)
{
dEff *= cbrt(p.nParticle()*volumeFactor_);
}
rMin = min(dEff, rMin);
@ -65,6 +69,7 @@ void Foam::WallSpringSliderDashpot<CloudType>::findMinMaxProperties
rMin /= 2.0;
}
template <class CloudType>
void Foam::WallSpringSliderDashpot<CloudType>::evaluateWall
(
@ -163,8 +168,14 @@ Foam::WallSpringSliderDashpot<CloudType>::WallSpringSliderDashpot
this->coeffDict().lookup("collisionResolutionSteps")
)
),
volumeFactor_(this->dict().lookupOrDefault("volumeFactor", 1.0))
{}
volumeFactor_(1.0),
useEquivalentSize_(Switch(this->dict().lookup("useEquivalentSize")))
{
if (useEquivalentSize_)
{
volumeFactor_ = readScalar(this->dict().lookup("volumeFactor"));
}
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
@ -182,10 +193,17 @@ Foam::scalar Foam::WallSpringSliderDashpot<CloudType>::pREff
const typename CloudType::parcelType& p
) const
{
// return p.d()/2*cbrt(p.nParticle()*volumeFactor_);
return p.d()/2;
if (useEquivalentSize_)
{
return p.d()/2*cbrt(p.nParticle()*volumeFactor_);
}
else
{
return p.d()/2;
}
}
template<class CloudType>
bool Foam::WallSpringSliderDashpot<CloudType>::controlsTimestep() const
{

View File

@ -87,6 +87,10 @@ class WallSpringSliderDashpot
// factor
scalar volumeFactor_;
//- Switch to control use of equivalent size particles. Used
// because the calculation can be very expensive.
bool useEquivalentSize_;
// Private Member Functions