Commit bcfc9cea authored by Mark Olesen's avatar Mark Olesen
Browse files

ENH: use average value for ensight faceZone on proc boundary (#1176)

parent 4bf0ac06
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation | Copyright (C) 2016-2018 OpenCFD Ltd. \\/ M anipulation | Copyright (C) 2016-2019 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
...@@ -27,6 +27,7 @@ License ...@@ -27,6 +27,7 @@ License
#include "fvMesh.H" #include "fvMesh.H"
#include "globalMeshData.H" #include "globalMeshData.H"
#include "PstreamCombineReduceOps.H" #include "PstreamCombineReduceOps.H"
#include "emptyPolyPatch.H"
#include "processorPolyPatch.H" #include "processorPolyPatch.H"
#include "mapDistribute.H" #include "mapDistribute.H"
#include "stringListOps.H" #include "stringListOps.H"
...@@ -209,16 +210,23 @@ void Foam::ensightMesh::correct() ...@@ -209,16 +210,23 @@ void Foam::ensightMesh::correct()
if (option().useFaceZones()) if (option().useFaceZones())
{ {
// Mark boundary faces to be excluded from export // Mark boundary faces to be excluded from export
bitSet excludeFace(mesh_.nFaces()); // all false bitSet excludeFace(mesh_.nFaces());
for (const polyPatch& pp : mesh_.boundaryMesh()) for (const polyPatch& pp : mesh_.boundaryMesh())
{ {
if #if OPENFOAM >= 1906
( const auto* procPatch = isA<processorPolyPatch>(pp);
isA<processorPolyPatch>(pp) #else
&& !refCast<const processorPolyPatch>(pp).owner() const auto* procPatch=dynamic_cast<const processorPolyPatch*>(&pp);
) #endif
if (isA<emptyPolyPatch>(pp))
{
excludeFace.set(pp.range());
}
else if (procPatch && !procPatch->owner())
{ {
// Exclude neighbour-side, retain owner-side only
excludeFace.set(pp.range()); excludeFace.set(pp.range());
} }
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd. \\/ M anipulation | Copyright (C) 2016-2019 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
...@@ -38,6 +38,7 @@ License ...@@ -38,6 +38,7 @@ License
#include "uindirectPrimitivePatch.H" #include "uindirectPrimitivePatch.H"
#include "interpolation.H" #include "interpolation.H"
#include "linear.H" #include "linear.H"
#include "processorFvPatch.H"
// * * * * * * * * * * Static Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * Static Private Member Functions * * * * * * * * * * * //
...@@ -119,10 +120,8 @@ bool Foam::ensightOutput::writeFaceField ...@@ -119,10 +120,8 @@ bool Foam::ensightOutput::writeFaceField
return true; return true;
} }
else
{ return false;
return false;
}
} }
...@@ -257,37 +256,36 @@ bool Foam::ensightOutput::writeField ...@@ -257,37 +256,36 @@ bool Foam::ensightOutput::writeField
); );
// flat boundary field // flat boundary field
// as per volPointInterpolation::flatBoundaryField() // similar to volPointInterpolation::flatBoundaryField()
Field<Type> flat(mesh.nBoundaryFaces()); Field<Type> flat(mesh.nBoundaryFaces(), Zero);
const fvBoundaryMesh& bm = mesh.boundary(); const fvBoundaryMesh& bm = mesh.boundary();
forAll(vf.boundaryField(), patchI) forAll(vf.boundaryField(), patchi)
{ {
const polyPatch& pp = bm[patchI].patch(); const polyPatch& pp = bm[patchi].patch();
const label bFaceI = pp.start() - mesh.nInternalFaces(); const auto& bf = vf.boundaryField()[patchi];
if if (isA<processorFvPatch>(bm[patchi]))
(
isA<emptyFvPatch>(bm[patchI])
|| vf.boundaryField()[patchI].coupled()
)
{ {
// Use average value for processor faces
// own cell value = patchInternalField
// nei cell value = evaluated boundary values
SubList<Type> SubList<Type>
( (
flat, flat,
pp.size(), bf.size(),
bFaceI pp.offset()
) = Zero; ) = (0.5 * (bf.patchInternalField() + bf));
} }
else else if (!isA<emptyFvPatch>(bm[patchi]))
{ {
SubList<Type> SubList<Type>
( (
flat, flat,
vf.boundaryField()[patchI].size(), bf.size(),
bFaceI pp.offset()
) = vf.boundaryField()[patchI]; ) = bf;
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment