From 3351b859083e05f3a95faa0aa4a81556cfabcac6 Mon Sep 17 00:00:00 2001 From: tlichtenegger Date: Wed, 13 Nov 2019 16:54:25 +0100 Subject: [PATCH] Bug fix: use of pointers instead of autoPtr in BeetstraDragPoly prevents double destruction at the end of run. --- .../BeetstraDragPoly/BeetstraDragPoly.C | 25 ++++++++++++------- .../BeetstraDragPoly/BeetstraDragPoly.H | 6 ++--- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDragPoly/BeetstraDragPoly.C b/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDragPoly/BeetstraDragPoly.C index 04e12ed9..d0580349 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDragPoly/BeetstraDragPoly.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDragPoly/BeetstraDragPoly.C @@ -49,23 +49,30 @@ BeetstraDragPoly::BeetstraDragPoly : BeetstraDrag(dict,sm), fines_(propsDict_.lookupOrDefault("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(sm.mesh().lookupObject ("alphaP"))); - alphaP_.set(&alphaP); + // alphaP_.set(&alphaP); + alphaP_ = &alphaP; volScalarField& alphaSt(const_cast(sm.mesh().lookupObject ("alphaSt"))); - alphaSt_.set(&alphaSt); + // alphaSt_.set(&alphaSt); + alphaSt_ = &alphaSt; volScalarField& dSauter(const_cast(sm.mesh().lookupObject ("dSauterMix"))); - dSauter_.set(&dSauter); +// dSauter_.set(&dSauter); + dSauter_ = &dSauter; } else { volScalarField& dSauter(const_cast(sm.mesh().lookupObject ("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]; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDragPoly/BeetstraDragPoly.H b/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDragPoly/BeetstraDragPoly.H index 88965010..67096b8b 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDragPoly/BeetstraDragPoly.H +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/BeetstraDragPoly/BeetstraDragPoly.H @@ -46,11 +46,11 @@ protected: scalar dFine_; - autoPtr alphaP_; + volScalarField* alphaP_; - autoPtr alphaSt_; + volScalarField* alphaSt_; - autoPtr dSauter_; + volScalarField* dSauter_; void adaptVoidfraction(double&, label) const;