From aea876885f64a2c2b2a86202cc08103b5a4342ad Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Mon, 19 Oct 2020 12:38:22 +0200
Subject: [PATCH] ENH: support surfaceFieldValue faceZone on internal volume
 (#1884)

- uses averaged value instead of emitting a fatal error
---
 .../surfaceFieldValue/surfaceFieldValueTemplates.C | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValueTemplates.C b/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValueTemplates.C
index 51fb11bf994..53e1dcad9a4 100644
--- a/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValueTemplates.C
+++ b/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValueTemplates.C
@@ -495,6 +495,9 @@ Foam::functionObjects::fieldValues::surfaceFieldValue::filterField
     const GeometricField<Type, fvPatchField, volMesh>& field
 ) const
 {
+    const labelList& own = field.mesh().faceOwner();
+    const labelList& nei = field.mesh().faceNeighbour();
+
     auto tvalues = tmp<Field<Type>>::New(faceId_.size());
     auto& values = tvalues.ref();
 
@@ -502,18 +505,16 @@ Foam::functionObjects::fieldValues::surfaceFieldValue::filterField
     {
         const label facei = faceId_[i];
         const label patchi = facePatchId_[i];
+
         if (patchi >= 0)
         {
+            // Boundary face - face id is the patch-local face id
             values[i] = field.boundaryField()[patchi][facei];
         }
         else
         {
-            FatalErrorInFunction
-                << type() << " " << name() << ": "
-                << regionTypeNames_[regionType_] << "(" << regionName_ << "):"
-                << nl
-                << "    Unable to process internal faces for volume field "
-                << field.name() << nl << abort(FatalError);
+            // Internal face
+            values[i] = 0.5*(field[own[facei]] + field[nei[facei]]);
         }
     }
 
@@ -537,6 +538,7 @@ Foam::functionObjects::fieldValues::surfaceFieldValue::filterField
     {
         const label facei = faceId_[i];
         const label patchi = facePatchId_[i];
+
         if (patchi >= 0)
         {
             values[i] = field.boundaryField()[patchi][facei];
-- 
GitLab