Some changes to drag and pressure force in the presence of fines.
This commit is contained in:
@ -52,7 +52,8 @@ BeetstraDragPoly::BeetstraDragPoly
|
||||
dFine_(1.0),
|
||||
alphaP_(NULL),
|
||||
alphaSt_(NULL),
|
||||
dSauter_(NULL)
|
||||
dSauter_(NULL),
|
||||
dSauterMix_(NULL)
|
||||
{
|
||||
// if fines are present, take mixture dSauter, otherwise normal dSauter
|
||||
if (fines_)
|
||||
@ -63,13 +64,11 @@ BeetstraDragPoly::BeetstraDragPoly
|
||||
volScalarField& alphaSt(const_cast<volScalarField&>(sm.mesh().lookupObject<volScalarField> ("alphaSt")));
|
||||
alphaSt_ = &alphaSt;
|
||||
volScalarField& dSauter(const_cast<volScalarField&>(sm.mesh().lookupObject<volScalarField> ("dSauterMix")));
|
||||
dSauter_ = &dSauter;
|
||||
}
|
||||
else
|
||||
{
|
||||
volScalarField& dSauter(const_cast<volScalarField&>(sm.mesh().lookupObject<volScalarField> ("dSauter")));
|
||||
dSauter_ = &dSauter;
|
||||
dSauterMix_ = &dSauter;
|
||||
}
|
||||
|
||||
volScalarField& dSauter(const_cast<volScalarField&>(sm.mesh().lookupObject<volScalarField> ("dSauter")));
|
||||
dSauter_ = &dSauter;
|
||||
}
|
||||
|
||||
|
||||
@ -84,15 +83,19 @@ scalar BeetstraDragPoly::effDiameter(double d, label cellI, label index) const
|
||||
{
|
||||
scalar dS = (*dSauter_)[cellI];
|
||||
scalar effD = d*d / dS + 0.064*d*d*d*d / (dS*dS*dS);
|
||||
|
||||
|
||||
if (fines_)
|
||||
{
|
||||
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;
|
||||
scalar dSMix = (*dSauterMix_)[cellI];
|
||||
scalar aP = (*alphaP_)[cellI];
|
||||
scalar aSt = (*alphaSt_)[cellI];
|
||||
|
||||
effD = d*d*dS + 0.064*d*d*d*d / dS;
|
||||
effD *= 1.0 / (dSMix*dSMix);
|
||||
effD *= (aP + aSt)/aP;
|
||||
}
|
||||
|
||||
if (particleCloud_.getParticleEffVolFactors())
|
||||
|
||||
if (particleCloud_.getParticleEffVolFactors())
|
||||
{
|
||||
scalar effVolFac = particleCloud_.particleEffVolFactor(index);
|
||||
effD *= effVolFac;
|
||||
@ -103,7 +106,14 @@ scalar BeetstraDragPoly::effDiameter(double d, label cellI, label index) const
|
||||
|
||||
scalar BeetstraDragPoly::meanSauterDiameter(double d, label cellI) const
|
||||
{
|
||||
return (*dSauter_)[cellI];
|
||||
if (fines_)
|
||||
{
|
||||
return (*dSauterMix_)[cellI];
|
||||
}
|
||||
else
|
||||
{
|
||||
return (*dSauter_)[cellI];
|
||||
}
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
@ -43,17 +43,19 @@ class BeetstraDragPoly
|
||||
protected:
|
||||
|
||||
const bool fines_;
|
||||
|
||||
|
||||
scalar dFine_;
|
||||
|
||||
volScalarField* alphaP_;
|
||||
|
||||
|
||||
volScalarField* alphaSt_;
|
||||
|
||||
volScalarField* dSauter_;
|
||||
|
||||
volScalarField* dSauterMix_;
|
||||
|
||||
scalar effDiameter(double, label, label) const;
|
||||
|
||||
|
||||
scalar meanSauterDiameter(double, label) const;
|
||||
|
||||
public:
|
||||
|
||||
@ -66,6 +66,9 @@ gradPForce::gradPForce
|
||||
p_(sm.mesh().lookupObject<volScalarField> (pFieldName_)),
|
||||
velocityFieldName_(propsDict_.lookup("velocityFieldName")),
|
||||
U_(sm.mesh().lookupObject<volVectorField> (velocityFieldName_)),
|
||||
alphaP_(NULL),
|
||||
alphaSt_(NULL),
|
||||
fines_(propsDict_.lookupOrDefault<bool>("fines",false)),
|
||||
useRho_(false),
|
||||
useU_(false),
|
||||
addedMassCoeff_(0.0)
|
||||
@ -102,6 +105,14 @@ gradPForce::gradPForce
|
||||
}
|
||||
}
|
||||
|
||||
if (fines_)
|
||||
{
|
||||
volScalarField& alphaP(const_cast<volScalarField&>(sm.mesh().lookupObject<volScalarField> ("alphaP")));
|
||||
alphaP_ = &alphaP;
|
||||
volScalarField& alphaSt(const_cast<volScalarField&>(sm.mesh().lookupObject<volScalarField> ("alphaSt")));
|
||||
alphaSt_ = &alphaSt;
|
||||
}
|
||||
|
||||
if (propsDict_.found("useU"))
|
||||
useU_ = true;
|
||||
|
||||
@ -148,6 +159,8 @@ void gradPForce::setForce() const
|
||||
vector gradP;
|
||||
scalar Vs;
|
||||
scalar rho;
|
||||
scalar aP;
|
||||
scalar aSt;
|
||||
vector position;
|
||||
vector force;
|
||||
label cellI;
|
||||
@ -179,6 +192,13 @@ void gradPForce::setForce() const
|
||||
Vs = particleCloud_.particleVolume(index);
|
||||
rho = forceSubM(0).rhoField()[cellI];
|
||||
|
||||
if (fines_)
|
||||
{
|
||||
aP = (*alphaP_)[cellI];
|
||||
aSt = (*alphaSt_)[cellI];
|
||||
Vs *= (1+aSt/aP);
|
||||
}
|
||||
|
||||
// calc particle's pressure gradient force
|
||||
if (useRho_)
|
||||
force = -Vs*gradP*rho*(1.0+addedMassCoeff_);
|
||||
|
||||
@ -71,6 +71,12 @@ private:
|
||||
|
||||
const volVectorField& U_;
|
||||
|
||||
volScalarField* alphaP_;
|
||||
|
||||
volScalarField* alphaSt_;
|
||||
|
||||
bool fines_;
|
||||
|
||||
bool useRho_;
|
||||
|
||||
bool useU_; // if false: substitution p=0.5*rho*U^2
|
||||
|
||||
Reference in New Issue
Block a user