Bugfix: fixed memory leak for cached gradient in limited grad schemes
This commit is contained in:
parent
ca9da6ed66
commit
480cf683dd
6 changed files with 10 additions and 21 deletions
|
@ -158,12 +158,6 @@ Foam::fv::gradScheme<Type>::grad
|
||||||
solution::cachePrintMessage("Recalculating", name, vsf);
|
solution::cachePrintMessage("Recalculating", name, vsf);
|
||||||
tmp<GradFieldType> tgGrad = calcGrad(vsf, name);
|
tmp<GradFieldType> tgGrad = calcGrad(vsf, name);
|
||||||
|
|
||||||
// Note: in order for the patchNeighbourField to be
|
|
||||||
// correct on coupled boundaries,
|
|
||||||
// correctBoundaryConditions needs to be called. The call
|
|
||||||
// shall be moved into the library fvc operators
|
|
||||||
tgGrad().correctBoundaryConditions();
|
|
||||||
|
|
||||||
solution::cachePrintMessage("Storing", name, vsf);
|
solution::cachePrintMessage("Storing", name, vsf);
|
||||||
regIOobject::store(tgGrad.ptr());
|
regIOobject::store(tgGrad.ptr());
|
||||||
GradFieldType& gGrad = const_cast<GradFieldType&>
|
GradFieldType& gGrad = const_cast<GradFieldType&>
|
||||||
|
|
|
@ -100,7 +100,7 @@ tmp<volVectorField> cellLimitedGrad<scalar>::calcGrad
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = vsf.mesh();
|
const fvMesh& mesh = vsf.mesh();
|
||||||
|
|
||||||
tmp<volVectorField> tGrad = basicGradScheme_().grad(vsf);
|
tmp<volVectorField> tGrad = basicGradScheme_().calcGrad(vsf, name);
|
||||||
|
|
||||||
if (k_ < SMALL)
|
if (k_ < SMALL)
|
||||||
{
|
{
|
||||||
|
@ -253,7 +253,7 @@ tmp<volTensorField> cellLimitedGrad<vector>::calcGrad
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = vsf.mesh();
|
const fvMesh& mesh = vsf.mesh();
|
||||||
|
|
||||||
tmp<volTensorField> tGrad = basicGradScheme_().grad(vsf);
|
tmp<volTensorField> tGrad = basicGradScheme_().calcGrad(vsf, name);
|
||||||
|
|
||||||
if (k_ < SMALL)
|
if (k_ < SMALL)
|
||||||
{
|
{
|
||||||
|
@ -428,6 +428,7 @@ tmp<BlockLduSystem<vector, vector> > cellLimitedGrad<scalar>::fvmGrad
|
||||||
|
|
||||||
// Calculate current gradient for explicit limiting
|
// Calculate current gradient for explicit limiting
|
||||||
// In fvm::grad the current gradient may be cached
|
// In fvm::grad the current gradient may be cached
|
||||||
|
// Using cached gradient? Check. HJ, 4/Jun/2016
|
||||||
tmp<volVectorField> tGrad = basicGradScheme_().grad(vsf);
|
tmp<volVectorField> tGrad = basicGradScheme_().grad(vsf);
|
||||||
const volVectorField& g = tGrad();
|
const volVectorField& g = tGrad();
|
||||||
|
|
||||||
|
|
|
@ -387,6 +387,7 @@ tmp<BlockLduSystem<vector, vector> > faceLimitedGrad<scalar>::fvmGrad
|
||||||
BlockLduSystem<vector, vector>& bs = tbs();
|
BlockLduSystem<vector, vector>& bs = tbs();
|
||||||
|
|
||||||
// Calculate current gradient for explicit limiting
|
// Calculate current gradient for explicit limiting
|
||||||
|
// Using cached gradient? Check. HJ, 4/Jun/2016
|
||||||
tmp<volVectorField> tGrad = basicGradScheme_().grad(vsf);
|
tmp<volVectorField> tGrad = basicGradScheme_().grad(vsf);
|
||||||
const volVectorField& g = tGrad();
|
const volVectorField& g = tGrad();
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ tmp<volVectorField> faceMDLimitedGrad<scalar>::calcGrad
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = vsf.mesh();
|
const fvMesh& mesh = vsf.mesh();
|
||||||
|
|
||||||
tmp<volVectorField> tGrad = basicGradScheme_().grad(vsf, name);
|
tmp<volVectorField> tGrad = basicGradScheme_().calcGrad(vsf, name);
|
||||||
|
|
||||||
if (k_ < SMALL)
|
if (k_ < SMALL)
|
||||||
{
|
{
|
||||||
|
@ -196,7 +196,7 @@ tmp<volTensorField> faceMDLimitedGrad<vector>::calcGrad
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = vvf.mesh();
|
const fvMesh& mesh = vvf.mesh();
|
||||||
|
|
||||||
tmp<volTensorField> tGrad = basicGradScheme_().grad(vvf, name);
|
tmp<volTensorField> tGrad = basicGradScheme_().calcGrad(vvf, name);
|
||||||
|
|
||||||
if (k_ < SMALL)
|
if (k_ < SMALL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -232,7 +232,7 @@ LimitedGrad<Type, GradientLimiter>::gradientField
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
// Get base gradient
|
// Get base gradient
|
||||||
tmp<GeoGradFieldType> tGrad = basicGradScheme_().grad(vf, name);
|
tmp<GeoGradFieldType> tGrad = basicGradScheme_().calcGrad(vf, name);
|
||||||
GeoGradFieldType& gradVf = tGrad();
|
GeoGradFieldType& gradVf = tGrad();
|
||||||
|
|
||||||
// Apply the limiter
|
// Apply the limiter
|
||||||
|
@ -263,6 +263,7 @@ LimitedGrad<Type, GradientLimiter>::gradientMatrix
|
||||||
GradMatrixType& bs = tbs();
|
GradMatrixType& bs = tbs();
|
||||||
|
|
||||||
// Calculate limiter. Using explicit gradient
|
// Calculate limiter. Using explicit gradient
|
||||||
|
// Using cached gradient? Check. HJ, 4/Jun/2016
|
||||||
GeoFieldType limitField
|
GeoFieldType limitField
|
||||||
(
|
(
|
||||||
this->limiter
|
this->limiter
|
||||||
|
|
|
@ -30,6 +30,7 @@ Description
|
||||||
#include "volFields.H"
|
#include "volFields.H"
|
||||||
#include "surfaceFields.H"
|
#include "surfaceFields.H"
|
||||||
#include "linear.H"
|
#include "linear.H"
|
||||||
|
#include "surfaceInterpolate.H"
|
||||||
#include "fvcGrad.H"
|
#include "fvcGrad.H"
|
||||||
#include "gaussGrad.H"
|
#include "gaussGrad.H"
|
||||||
|
|
||||||
|
@ -61,17 +62,8 @@ Foam::fv::correctedSnGrad<Type>::fullGradCorrection
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = this->mesh();
|
const fvMesh& mesh = this->mesh();
|
||||||
|
|
||||||
// construct GeometricField<Type, fvsPatchField, surfaceMesh>
|
|
||||||
tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > tssf =
|
tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > tssf =
|
||||||
mesh.correctionVectors()
|
mesh.correctionVectors() & fvc::interpolate(fvc::grad(vf));
|
||||||
& linear<typename outerProduct<vector, Type>::type>(mesh).interpolate
|
|
||||||
(
|
|
||||||
gradScheme<Type>::New
|
|
||||||
(
|
|
||||||
mesh,
|
|
||||||
mesh.schemesDict().gradScheme("grad(" + vf.name() + ')')
|
|
||||||
)().grad(vf, "grad(" + vf.name() + ')')
|
|
||||||
);
|
|
||||||
tssf().rename("snGradCorr(" + vf.name() + ')');
|
tssf().rename("snGradCorr(" + vf.name() + ')');
|
||||||
|
|
||||||
return tssf;
|
return tssf;
|
||||||
|
|
Reference in a new issue