From 2049c5c2a47386427a877f05b307870266f2cfdf Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@Germany>
Date: Thu, 9 Feb 2017 15:19:47 +0100
Subject: [PATCH] BUG: using tmp() instead of tmp.ref() in combineFields
 (closes #400)

- templated code that is not actually be used yet.

ENH: avoid combineFields for serial case

Note: a 'master-only' variant with combineList only on the master and
without scatter can be pursued later.
---
 .../fieldValue/fieldValueTemplates.C          | 32 ++++++++++---------
 1 file changed, 17 insertions(+), 15 deletions(-)

diff --git a/src/functionObjects/field/fieldValues/fieldValue/fieldValueTemplates.C b/src/functionObjects/field/fieldValues/fieldValue/fieldValueTemplates.C
index 3414c2a40bb..4353ce35632 100644
--- a/src/functionObjects/field/fieldValues/fieldValue/fieldValueTemplates.C
+++ b/src/functionObjects/field/fieldValues/fieldValue/fieldValueTemplates.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  | Copyright (C) 2015-2017 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -32,26 +32,28 @@ License
 template<class Type>
 void Foam::functionObjects::fieldValue::combineFields(Field<Type>& field)
 {
-    List<Field<Type>> allValues(Pstream::nProcs());
-
-    allValues[Pstream::myProcNo()] = field;
-
-    Pstream::gatherList(allValues);
-    Pstream::scatterList(allValues);
-
-    field =
-        ListListOps::combine<Field<Type>>
-        (
-            allValues,
-            accessOp<Field<Type>>()
-        );
+    if (Pstream::parRun())
+    {
+        List<Field<Type>> allValues(Pstream::nProcs());
+        allValues[Pstream::myProcNo()] = field;
+
+        Pstream::gatherList(allValues);
+        Pstream::scatterList(allValues);
+
+        field =
+            ListListOps::combine<Field<Type>>
+            (
+                allValues,
+                accessOp<Field<Type>>()
+            );
+    }
 }
 
 
 template<class Type>
 void Foam::functionObjects::fieldValue::combineFields(tmp<Field<Type>>& field)
 {
-    combineFields(field());
+    combineFields(field.ref());
 }
 
 
-- 
GitLab