From 2cdebff3b7cc035277ed1639a0e65b1a8529abb3 Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Thu, 2 Jun 2016 12:14:51 +0100 Subject: [PATCH] LESfilters: Ensure the coupled BCs of the field are updated before filtering Resolves bug-report http://bugs.openfoam.org/view.php?id=2108 --- .../LES/LESfilters/LESfilter/LESfilter.H | 18 +++++++++++++++++- .../anisotropicFilter/anisotropicFilter.C | 8 ++++++++ .../LESfilters/laplaceFilter/laplaceFilter.C | 8 ++++++++ .../LES/LESfilters/simpleFilter/simpleFilter.C | 10 +++++++++- 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESfilters/LESfilter/LESfilter.H b/src/TurbulenceModels/turbulenceModels/LES/LESfilters/LESfilter/LESfilter.H index 04d32bd76f..336bb4ca00 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESfilters/LESfilter/LESfilter.H +++ b/src/TurbulenceModels/turbulenceModels/LES/LESfilters/LESfilter/LESfilter.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -65,6 +65,22 @@ class LESfilter LESfilter(const LESfilter&); void operator=(const LESfilter&); +protected: + + //- Temporary function to ensure the coupled boundary conditions of the + // field are correct for filtering. + // + // Following the rewrite of the turbulence models to use + // GeometricField::InternalField for sources etc. delta() will return a + // GeometricField::InternalField and filters will take a + // tmp argument and handle the coupled BCs + // appropriately + template + void correctBoundaryConditions(const tmp& tgf) const + { + const_cast(tgf()).correctBoundaryConditions(); + } + public: diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.C b/src/TurbulenceModels/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.C index a23cadce9b..467949de78 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.C +++ b/src/TurbulenceModels/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.C @@ -129,6 +129,8 @@ Foam::tmp Foam::anisotropicFilter::operator() const tmp& unFilteredField ) const { + correctBoundaryConditions(unFilteredField); + tmp tmpFilteredField = unFilteredField + ( @@ -151,6 +153,8 @@ Foam::tmp Foam::anisotropicFilter::operator() const tmp& unFilteredField ) const { + correctBoundaryConditions(unFilteredField); + tmp tmpFilteredField = unFilteredField + ( @@ -173,6 +177,8 @@ Foam::tmp Foam::anisotropicFilter::operator() const tmp& unFilteredField ) const { + correctBoundaryConditions(unFilteredField); + tmp tmpFilteredField ( new volSymmTensorField @@ -207,6 +213,8 @@ Foam::tmp Foam::anisotropicFilter::operator() const tmp& unFilteredField ) const { + correctBoundaryConditions(unFilteredField); + tmp tmpFilteredField ( new volTensorField diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESfilters/laplaceFilter/laplaceFilter.C b/src/TurbulenceModels/turbulenceModels/LES/LESfilters/laplaceFilter/laplaceFilter.C index 3fbedbbe19..11fea86543 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESfilters/laplaceFilter/laplaceFilter.C +++ b/src/TurbulenceModels/turbulenceModels/LES/LESfilters/laplaceFilter/laplaceFilter.C @@ -97,6 +97,8 @@ Foam::tmp Foam::laplaceFilter::operator() const tmp& unFilteredField ) const { + correctBoundaryConditions(unFilteredField); + tmp filteredField = unFilteredField() + fvc::laplacian(coeff_, unFilteredField()); @@ -111,6 +113,8 @@ Foam::tmp Foam::laplaceFilter::operator() const tmp& unFilteredField ) const { + correctBoundaryConditions(unFilteredField); + tmp filteredField = unFilteredField() + fvc::laplacian(coeff_, unFilteredField()); @@ -125,6 +129,8 @@ Foam::tmp Foam::laplaceFilter::operator() const tmp& unFilteredField ) const { + correctBoundaryConditions(unFilteredField); + tmp filteredField = unFilteredField() + fvc::laplacian(coeff_, unFilteredField()); @@ -139,6 +145,8 @@ Foam::tmp Foam::laplaceFilter::operator() const tmp& unFilteredField ) const { + correctBoundaryConditions(unFilteredField); + tmp filteredField = unFilteredField() + fvc::laplacian(coeff_, unFilteredField()); diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESfilters/simpleFilter/simpleFilter.C b/src/TurbulenceModels/turbulenceModels/LES/LESfilters/simpleFilter/simpleFilter.C index d3140fddcc..8bcd18ff25 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESfilters/simpleFilter/simpleFilter.C +++ b/src/TurbulenceModels/turbulenceModels/LES/LESfilters/simpleFilter/simpleFilter.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -66,6 +66,8 @@ Foam::tmp Foam::simpleFilter::operator() const tmp& unFilteredField ) const { + correctBoundaryConditions(unFilteredField); + tmp filteredField = fvc::surfaceSum ( mesh().magSf()*fvc::interpolate(unFilteredField) @@ -82,6 +84,8 @@ Foam::tmp Foam::simpleFilter::operator() const tmp& unFilteredField ) const { + correctBoundaryConditions(unFilteredField); + tmp filteredField = fvc::surfaceSum ( mesh().magSf()*fvc::interpolate(unFilteredField) @@ -98,6 +102,8 @@ Foam::tmp Foam::simpleFilter::operator() const tmp& unFilteredField ) const { + correctBoundaryConditions(unFilteredField); + tmp filteredField = fvc::surfaceSum ( mesh().magSf()*fvc::interpolate(unFilteredField) @@ -114,6 +120,8 @@ Foam::tmp Foam::simpleFilter::operator() const tmp& unFilteredField ) const { + correctBoundaryConditions(unFilteredField); + tmp filteredField = fvc::surfaceSum ( mesh().magSf()*fvc::interpolate(unFilteredField)