Bug fix: use of pointers instead of autoPtr in BeetstraDragPoly prevents double destruction at the end of run.

This commit is contained in:
tlichtenegger
2019-11-13 16:54:25 +01:00
parent 73b4879b06
commit 3351b85908
2 changed files with 19 additions and 12 deletions

View File

@ -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];
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -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;