mirror of
https://github.com/ParticulateFlow/CFDEMcoupling-PFM.git
synced 2025-12-08 06:37:44 +00:00
Bug fix: use of pointers instead of autoPtr in BeetstraDragPoly prevents double destruction at the end of run.
This commit is contained in:
@ -49,23 +49,30 @@ BeetstraDragPoly::BeetstraDragPoly
|
||||
:
|
||||
BeetstraDrag(dict,sm),
|
||||
fines_(propsDict_.lookupOrDefault<bool>("fines",false)),
|
||||
dFine_(1.0)
|
||||
dFine_(1.0),
|
||||
alphaP_(NULL),
|
||||
alphaSt_(NULL),
|
||||
dSauter_(NULL)
|
||||
{
|
||||
// if fines are present, take mixture dSauter, otherwise normal dSauter
|
||||
if (fines_)
|
||||
{
|
||||
dFine_ = readScalar(propsDict_.lookup("dFine"));
|
||||
volScalarField& alphaP(const_cast<volScalarField&>(sm.mesh().lookupObject<volScalarField> ("alphaP")));
|
||||
alphaP_.set(&alphaP);
|
||||
// alphaP_.set(&alphaP);
|
||||
alphaP_ = &alphaP;
|
||||
volScalarField& alphaSt(const_cast<volScalarField&>(sm.mesh().lookupObject<volScalarField> ("alphaSt")));
|
||||
alphaSt_.set(&alphaSt);
|
||||
// alphaSt_.set(&alphaSt);
|
||||
alphaSt_ = &alphaSt;
|
||||
volScalarField& dSauter(const_cast<volScalarField&>(sm.mesh().lookupObject<volScalarField> ("dSauterMix")));
|
||||
dSauter_.set(&dSauter);
|
||||
// dSauter_.set(&dSauter);
|
||||
dSauter_ = &dSauter;
|
||||
}
|
||||
else
|
||||
{
|
||||
volScalarField& dSauter(const_cast<volScalarField&>(sm.mesh().lookupObject<volScalarField> ("dSauter")));
|
||||
dSauter_.set(&dSauter);
|
||||
// dSauter_.set(&dSauter);
|
||||
dSauter_ = &dSauter;
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,19 +87,19 @@ BeetstraDragPoly::~BeetstraDragPoly()
|
||||
|
||||
void BeetstraDragPoly::adaptVoidfraction(double& voidfraction, label cellI) const
|
||||
{
|
||||
if (fines_) voidfraction -= alphaSt_()[cellI];
|
||||
if (fines_) voidfraction -= (*alphaSt_)[cellI];
|
||||
if (voidfraction < minVoidfraction_) voidfraction = minVoidfraction_;
|
||||
}
|
||||
|
||||
scalar BeetstraDragPoly::effDiameter(double d, label cellI, label index) const
|
||||
{
|
||||
scalar dS = dSauter_()[cellI];
|
||||
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];
|
||||
fineCorr *= d*d*d / (dFine_*dFine_*dFine_) * (*alphaSt_)[cellI] / (*alphaP_)[cellI];
|
||||
effD += fineCorr;
|
||||
}
|
||||
|
||||
@ -107,7 +114,7 @@ scalar BeetstraDragPoly::effDiameter(double d, label cellI, label index) const
|
||||
|
||||
scalar BeetstraDragPoly::meanSauterDiameter(double d, label cellI) const
|
||||
{
|
||||
return dSauter_()[cellI];
|
||||
return (*dSauter_)[cellI];
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
@ -46,11 +46,11 @@ protected:
|
||||
|
||||
scalar dFine_;
|
||||
|
||||
autoPtr<volScalarField> alphaP_;
|
||||
volScalarField* alphaP_;
|
||||
|
||||
autoPtr<volScalarField> alphaSt_;
|
||||
volScalarField* alphaSt_;
|
||||
|
||||
autoPtr<volScalarField> dSauter_;
|
||||
volScalarField* dSauter_;
|
||||
|
||||
void adaptVoidfraction(double&, label) const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user