From d3994638b43804828202ecb50ec5572461103027 Mon Sep 17 00:00:00 2001 From: Henry Weller <http://cfd.direct> Date: Thu, 26 May 2016 14:55:44 +0100 Subject: [PATCH] surfaceInterpolation:localMin,localMax: Add support for consistent interpolation on coupled BCs Resolves bug-report http://bugs.openfoam.org/view.php?id=2100 --- .../schemes/localMax/localMax.H | 35 ++++++++++++++----- .../schemes/localMin/localMin.H | 35 ++++++++++++++----- 2 files changed, 54 insertions(+), 16 deletions(-) diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/localMax/localMax.H b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/localMax/localMax.H index da72d52859d..6dc51cc7908 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/localMax/localMax.H +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/localMax/localMax.H @@ -138,14 +138,6 @@ public: ); GeometricField<Type, fvsPatchField, surfaceMesh>& vff = tvff.ref(); - typename GeometricField<Type, fvsPatchField, surfaceMesh>:: - Boundary& vffbf = vff.boundaryFieldRef(); - - forAll(vffbf, patchi) - { - vffbf[patchi] = vf.boundaryField()[patchi]; - } - const labelUList& own = mesh.owner(); const labelUList& nei = mesh.neighbour(); @@ -154,6 +146,33 @@ public: vff[facei] = max(vf[own[facei]], vf[nei[facei]]); } + typename GeometricField<Type, fvsPatchField, surfaceMesh>:: + Boundary& bff = vff.boundaryFieldRef(); + + forAll(bff, patchi) + { + const fvPatchField<Type>& pf = vf.boundaryField()[patchi]; + Field<Type>& pff = bff[patchi]; + + if (pf.coupled()) + { + tmp<Field<Type>> tpif(pf.patchInternalField()); + const Field<Type>& pif = tpif(); + + tmp<Field<Type>> tpnf(pf.patchNeighbourField()); + const Field<Type>& pnf = tpnf(); + + forAll(pff, i) + { + pff[i] = max(pif[i], pnf[i]); + } + } + else + { + pff = pf; + } + } + return tvff; } }; diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/localMin/localMin.H b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/localMin/localMin.H index 35c53ee6604..48f008ae7a1 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/localMin/localMin.H +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/localMin/localMin.H @@ -138,14 +138,6 @@ public: ); GeometricField<Type, fvsPatchField, surfaceMesh>& vff = tvff.ref(); - typename GeometricField<Type, fvsPatchField, surfaceMesh>:: - Boundary& vffbf = vff.boundaryFieldRef(); - - forAll(vffbf, patchi) - { - vffbf[patchi] = vf.boundaryField()[patchi]; - } - const labelUList& own = mesh.owner(); const labelUList& nei = mesh.neighbour(); @@ -154,6 +146,33 @@ public: vff[facei] = minMod(vf[own[facei]], vf[nei[facei]]); } + typename GeometricField<Type, fvsPatchField, surfaceMesh>:: + Boundary& bff = vff.boundaryFieldRef(); + + forAll(bff, patchi) + { + const fvPatchField<Type>& pf = vf.boundaryField()[patchi]; + Field<Type>& pff = bff[patchi]; + + if (pf.coupled()) + { + tmp<Field<Type>> tpif(pf.patchInternalField()); + const Field<Type>& pif = tpif(); + + tmp<Field<Type>> tpnf(pf.patchNeighbourField()); + const Field<Type>& pnf = tpnf(); + + forAll(pff, i) + { + pff[i] = minMod(pif[i], pnf[i]); + } + } + else + { + pff = pf; + } + } + return tvff; } }; -- GitLab