From f88feaf0d4e20a8187d096ad929c31f0a0e6c62e Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Fri, 22 Jan 2021 15:36:37 +0100
Subject: [PATCH] BUG: surfaceFieldValue fails writing legacy VTK format

- number of fields was not set.
- interpolated surfaces incorrectly written for all formats
---
 .../surfaceFieldValue/surfaceFieldValue.C            | 12 +++++++++++-
 .../surfaceFieldValue/surfaceFieldValueTemplates.C   | 11 ++++++++++-
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.C b/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.C
index bc55e595233..23c52913b6b 100644
--- a/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.C
+++ b/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
-    Copyright (C) 2017-2020 OpenCFD Ltd.
+    Copyright (C) 2017-2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -1034,6 +1034,16 @@ bool Foam::functionObjects::fieldValues::surfaceFieldValue::read
             mesh_,
             dict.subDict("sampledSurfaceDict")
         );
+
+        if (sampledPtr_->interpolate())
+        {
+            // Should probably ignore interpolate entirely,
+            // but the oldest isoSurface algorithm requires it!
+            WarningInFunction
+                << type() << ' ' << name() << ": "
+                << "sampledSurface with interpolate = true "
+                << "is likely incorrect" << nl << nl;
+        }
     }
 
     Info<< type() << ' ' << name() << ':' << nl
diff --git a/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValueTemplates.C b/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValueTemplates.C
index 8b08f070375..20effe990b4 100644
--- a/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValueTemplates.C
+++ b/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValueTemplates.C
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
-    Copyright (C) 2015-2020 OpenCFD Ltd.
+    Copyright (C) 2015-2021 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -388,6 +388,15 @@ bool Foam::functionObjects::fieldValues::surfaceFieldValue::writeValues
                     false  // serial - already merged
                 );
 
+                // Point data? Should probably disallow
+                if (sampledPtr_)
+                {
+                    surfaceWriterPtr_->isPointData() =
+                        sampledPtr_->interpolate();
+                }
+
+                surfaceWriterPtr_->nFields() = 1;  // Needed for VTK legacy
+
                 surfaceWriterPtr_->write(fieldName, allValues);
 
                 surfaceWriterPtr_->clear();
-- 
GitLab