From 41525f25655568b5e0c3c65599c4743ed62a671d Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Sat, 16 Jun 2018 00:29:41 +0200
Subject: [PATCH] BUG: dictionary lookup of embedded coordinateSystem fails
 (fixes #879)

- also fix incorrect documentation in forces functionObject and
  interRegionExplicitPorositySource fvOption.
---
 src/functionObjects/forces/forces/forces.H    | 16 +++++++++-----
 .../interRegionExplicitPorositySource.H       |  9 ++++++--
 .../coordinateSystems/coordinateSystem.C      | 22 +++++++++++++------
 3 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/src/functionObjects/forces/forces/forces.H b/src/functionObjects/forces/forces/forces.H
index 41d4aa6b6f..4a27514c6a 100644
--- a/src/functionObjects/forces/forces/forces.H
+++ b/src/functionObjects/forces/forces/forces.H
@@ -111,8 +111,12 @@ Note
         coordinateSystem
         {
             origin  (0 0 0);
-            e3      (0 0 1);
-            e1      (1 0 0);
+            coordinateRotation
+            {
+                type    axesRotation;
+                e3      (0 0 1);
+                e1      (1 0 0);
+            }
         }
     \endverbatim
 
@@ -346,11 +350,11 @@ protected:
         //- Write binned data
         void writeBins();
 
-        //- Disallow default bitwise copy construct
-        forces(const forces&);
+        //- No copy construct
+        forces(const forces&) = delete;
 
-        //- Disallow default bitwise assignment
-        void operator=(const forces&);
+        //- No copy assignment
+        void operator=(const forces&) = delete;
 
 
 public:
diff --git a/src/fvOptions/sources/interRegion/interRegionExplicitPorositySource/interRegionExplicitPorositySource.H b/src/fvOptions/sources/interRegion/interRegionExplicitPorositySource/interRegionExplicitPorositySource.H
index e42e29d3db..1b0c33b95b 100644
--- a/src/fvOptions/sources/interRegion/interRegionExplicitPorositySource/interRegionExplicitPorositySource.H
+++ b/src/fvOptions/sources/interRegion/interRegionExplicitPorositySource/interRegionExplicitPorositySource.H
@@ -43,8 +43,13 @@ Description
 
             coordinateSystem
             {
-                e1  (0.70710678 0.70710678 0);
-                e2  (0 0 1);
+                origin      (0 0 0);
+                coordinateRotation
+                {
+                    type axesRotation;
+                    e1  (0.70710678 0.70710678 0);
+                    e2  (0 0 1);
+                }
             }
         }
     }
diff --git a/src/meshTools/coordinateSystems/coordinateSystem.C b/src/meshTools/coordinateSystems/coordinateSystem.C
index e8c507a7f8..da331982e3 100644
--- a/src/meshTools/coordinateSystems/coordinateSystem.C
+++ b/src/meshTools/coordinateSystems/coordinateSystem.C
@@ -129,9 +129,21 @@ Foam::coordinateSystem::coordinateSystem
 {
     const entry* entryPtr = dict.lookupEntryPtr(typeName_(), false, false);
 
-    // non-dictionary entry is a lookup into global coordinateSystems
-    if (entryPtr && !entryPtr->isDict())
+    if (!entryPtr)
     {
+        // No 'coordinateSystem' entry
+        init(dict, obr);
+    }
+    else if (entryPtr->isDict())
+    {
+        // 'coordinateSystem' as dictionary entry - use it
+        init(entryPtr->dict(), obr);
+    }
+    else
+    {
+        // 'coordinateSystem' as non-dictionary entry
+        // - this is a lookup into global coordinateSystems
+
         keyType key(entryPtr->stream());
 
         const coordinateSystems& lst = coordinateSystems::New(obr);
@@ -152,15 +164,11 @@ Foam::coordinateSystem::coordinateSystem
                 << exit(FatalError);
         }
 
-        // copy coordinateSystem, but assign the name as the typeName
+        // Copy from coordinateSystem, but assign the name as the typeName
         // to avoid strange things in writeDict()
         operator=(lst[index]);
         name_ = typeName_();
     }
-    else
-    {
-        init(dict, obr);
-    }
 }
 
 
-- 
GitLab