Beetstra drag model. For polydisp case, BeetstraDragPoly overrides functions for diameter. Effect of fines phase in terms of static hold-up field is included in BeetstraDragPoly.

This commit is contained in:
Thomas Lichtenegger
2018-05-18 12:08:56 +02:00
parent e0530dcf5b
commit 19dd9c9646
4 changed files with 44 additions and 19 deletions

View File

@ -163,6 +163,7 @@ void BeetstraDrag::setForce() const
vector Ur(0,0,0);
scalar ds(0);
scalar ds_scaled(0);
scalar dSauter(0);
scalar scaleDia3 = typeCG_[0]*typeCG_[0]*typeCG_[0];
scalar nuf(0);
scalar rho(0);
@ -225,20 +226,20 @@ void BeetstraDrag::setForce() const
magUr = mag(Ur);
ds = 2*particleCloud_.radius(index);
ds_scaled = ds/cg;
dSauter = meanSauterDiameter(ds_scaled, cellI);
rho = rhoField[cellI];
nuf = nufField[cellI];
Rep=0.0;
localPhiP = 1.0f-voidfraction+SMALL;
// calc particle's drag coefficient (i.e., Force per unit slip velocity and Stokes drag)
Rep=ds_scaled*voidfraction*magUr/nuf + SMALL;
Rep=dSauter*voidfraction*magUr/nuf + SMALL;
dragCoefficient = F(voidfraction, Rep)
*3*M_PI*nuf*rho*voidfraction
*effDiameter(ds_scaled, voidfraction, cellI, index)
*effDiameter(ds_scaled, cellI, index)
*scaleDia3*scaleDrag_;
// calculate filtering corrections

View File

@ -85,7 +85,9 @@ protected:
virtual void adaptVoidfraction(double&, label) const {}
virtual scalar effDiameter(double d, double voidfraction, label cellI, label index) const {return d;}
virtual scalar effDiameter(double d, label cellI, label index) const {return d;}
virtual scalar meanSauterDiameter(double d, label cellI) const {return d;}
double F(double, double) const;

View File

@ -49,14 +49,26 @@ BeetstraDragPoly::BeetstraDragPoly
:
BeetstraDrag(dict,sm),
fines_(propsDict_.lookupOrDefault<bool>("fines",false)),
dSauter_(sm.mesh().lookupObject<volScalarField> ("dSauter"))
dFine_(propsDict_.lookupOrDefault<scalar>("dFine",1.0))
{
// if fines are present, take mixture dSauter, otherwise normal dSauter
if (fines_)
{
if (!propsDict_.found("dFine"))
{
FatalError << "forceModel BeetstraDragPoly: Define fines diameter." << abort(FatalError);
}
volScalarField& alphaP(const_cast<volScalarField&>(sm.mesh().lookupObject<volScalarField> ("alphaP")));
alphaP_.set(&alphaP);
volScalarField& alphaSt(const_cast<volScalarField&>(sm.mesh().lookupObject<volScalarField> ("alphaSt")));
alphaSt_.set(&alphaSt);
volScalarField& dSauterMix(const_cast<volScalarField&>(sm.mesh().lookupObject<volScalarField> ("dSauterMix")));
dSauterMix_.set(&dSauterMix);
volScalarField& dSauter(const_cast<volScalarField&>(sm.mesh().lookupObject<volScalarField> ("dSauterMix")));
dSauter_.set(&dSauter);
}
else
{
volScalarField& dSauter(const_cast<volScalarField&>(sm.mesh().lookupObject<volScalarField> ("dSauter")));
dSauter_.set(&dSauter);
}
}
@ -75,24 +87,30 @@ void BeetstraDragPoly::adaptVoidfraction(double& voidfraction, label cellI) cons
if (voidfraction < minVoidfraction_) voidfraction = minVoidfraction_;
}
scalar BeetstraDragPoly::effDiameter(double d, double voidfraction, label cellI, label index) const
scalar BeetstraDragPoly::effDiameter(double d, label cellI, label index) const
{
scalar dS = dSauter_[cellI];
scalar effD = d*d/dS;
scalar dS = dSauter_()[cellI];
scalar effD = d*d / dS + 0.064*d*d*d*d / (dS*dS*dS);
if (fines_)
{
scalar pureVoidfraction = voidfraction_[cellI];
scalar dSmix = dSauterMix_()[cellI];
effD *= pureVoidfraction / voidfraction * (1 - voidfraction) / (1 - pureVoidfraction);
effD *= dS * dS / (dSmix * dSmix);
scalar fineCorr = dFine_*dFine_ / dS + 0.064*dFine_*dFine_*dFine_*dFine_ / (dS*dS*dS);
fineCorr *= d*d*d / (dFine_*dFine_*dFine_) * alphaSt_()[cellI] / alphaP_()[cellI];
effD += fineCorr;
}
if (particleCloud_.getParticleEffVolFactors())
{
scalar effVolFac = particleCloud_.particleEffVolFactor(index);
effD *= effVolFac;
}
return effD;
}
scalar BeetstraDragPoly::meanSauterDiameter(double d, label cellI) const
{
return dSauter_()[cellI];
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -43,16 +43,20 @@ class BeetstraDragPoly
protected:
const bool fines_;
scalar dFine_;
autoPtr<volScalarField> alphaP_;
autoPtr<volScalarField> alphaSt_;
const volScalarField& dSauter_;
autoPtr<volScalarField> dSauterMix_;
autoPtr<volScalarField> dSauter_;
void adaptVoidfraction(double&, label) const;
scalar effDiameter(double, double, label, label) const;
scalar effDiameter(double, label, label) const;
scalar meanSauterDiameter(double, label) const;
public: