From cb33b1d0e730811d6d15f35dcb9ab345c058b220 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Thu, 9 Dec 2021 10:42:31 +0100
Subject: [PATCH] STYLE: inherit SubField from FieldBase instead of refCount

- at the moment there is no significant difference since FieldBase is
  essentially just a refCount anyhow, but changing the inheritance
  ensures that reinterpret casting from SubField -> Field will
  continue to work if FieldBase is changed in the future.
---
 src/OpenFOAM/fields/Fields/Field/Field.H     | 11 ++++-----
 src/OpenFOAM/fields/Fields/Field/FieldBase.H |  8 ++++---
 src/OpenFOAM/fields/Fields/Field/FieldI.H    |  9 +++++++
 src/OpenFOAM/fields/Fields/Field/SubField.H  | 25 ++++++++++----------
 src/OpenFOAM/fields/Fields/Field/SubFieldI.H | 16 +++++++------
 5 files changed, 39 insertions(+), 30 deletions(-)

diff --git a/src/OpenFOAM/fields/Fields/Field/Field.H b/src/OpenFOAM/fields/Fields/Field/Field.H
index dd5f559b2ef..55f11617b87 100644
--- a/src/OpenFOAM/fields/Fields/Field/Field.H
+++ b/src/OpenFOAM/fields/Fields/Field/Field.H
@@ -47,10 +47,10 @@ SourceFiles
 
 #include "tmp.H"
 #include "direction.H"
-#include "VectorSpace.H"
-#include "scalarList.H"
 #include "labelList.H"
+#include "scalarList.H"
 #include "FieldBase.H"
+#include "VectorSpace.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -92,11 +92,8 @@ public:
 
     // Static Member Functions
 
-        //- Return nullObject reference field
-        inline static const Field<Type>& null()
-        {
-            return NullObjectRef<Field<Type>>();
-        }
+        //- Return nullObject reference Field
+        inline static const Field<Type>& null();
 
 
     // Constructors
diff --git a/src/OpenFOAM/fields/Fields/Field/FieldBase.H b/src/OpenFOAM/fields/Fields/Field/FieldBase.H
index 33626fdeed2..c603acd3114 100644
--- a/src/OpenFOAM/fields/Fields/Field/FieldBase.H
+++ b/src/OpenFOAM/fields/Fields/Field/FieldBase.H
@@ -27,7 +27,7 @@ Class
     Foam::FieldBase
 
 Description
-    Template invariant parts for Field
+    Template invariant parts for Field and SubField
 
 SourceFiles
     FieldBase.C
@@ -54,17 +54,19 @@ class FieldBase
 {
 public:
 
-    // Static data members
+    // Static Data Members
 
         //- Typename for Field
         static const char* const typeName;
 
+        //- Permit read construct from a larger size.
+        //  Mostly required for things like column mesh, for example.
         static bool allowConstructFromLargerSize;
 
 
     // Constructors
 
-        //- Construct null, with refCount zero
+        //- Default construct, refCount zero
         constexpr FieldBase() noexcept
         :
             refCount()
diff --git a/src/OpenFOAM/fields/Fields/Field/FieldI.H b/src/OpenFOAM/fields/Fields/Field/FieldI.H
index 7cfd44d6f94..08eb5de9484 100644
--- a/src/OpenFOAM/fields/Fields/Field/FieldI.H
+++ b/src/OpenFOAM/fields/Fields/Field/FieldI.H
@@ -25,6 +25,15 @@ License
 
 \*---------------------------------------------------------------------------*/
 
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+template<class Type>
+inline const Foam::Field<Type>& Foam::Field<Type>::null()
+{
+    return NullObjectRef<Field<Type>>();
+}
+
+
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 template<class Type>
diff --git a/src/OpenFOAM/fields/Fields/Field/SubField.H b/src/OpenFOAM/fields/Fields/Field/SubField.H
index e2f668bd509..90a04824908 100644
--- a/src/OpenFOAM/fields/Fields/Field/SubField.H
+++ b/src/OpenFOAM/fields/Fields/Field/SubField.H
@@ -28,11 +28,9 @@ Class
     Foam::SubField
 
 Description
-    SubField is a Field obtained as a section of another Field.
-
-    Thus it is itself unallocated so that no storage is allocated or
-    deallocated during its use.  To achieve this behaviour, SubField is
-    derived from a SubList rather than a List.
+    SubField is a Field obtained as a section of another Field,
+    without its own allocation.
+    SubField is derived from a SubList rather than a List.
 
 SourceFiles
     SubFieldI.H
@@ -42,17 +40,15 @@ SourceFiles
 #ifndef SubField_H
 #define SubField_H
 
-#include "SubList.H"
 #include "Field.H"
-#include "VectorSpace.H"
+#include "SubList.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 namespace Foam
 {
 
-// Forward declarations
-template<class Type> class Field;
+// Forward Declarations
 template<class Type> class SubField;
 
 /*---------------------------------------------------------------------------*\
@@ -62,7 +58,7 @@ template<class Type> class SubField;
 template<class Type>
 class SubField
 :
-    public refCount,
+    public FieldBase,
     public SubList<Type>
 {
 public:
@@ -71,6 +67,12 @@ public:
     typedef typename pTraits<Type>::cmptType cmptType;
 
 
+    // Static Member Functions
+
+        //- Return nullObject reference SubField
+        inline static const SubField<Type>& null();
+
+
     // Constructors
 
         //- Default construct, zero-sized and nullptr
@@ -120,9 +122,6 @@ public:
 
     // Member Functions
 
-        //- Return a null SubField
-        static inline const SubField<Type>& null();
-
         //- Return a component field of the field
         inline tmp<Field<cmptType>> component(const direction) const;
 
diff --git a/src/OpenFOAM/fields/Fields/Field/SubFieldI.H b/src/OpenFOAM/fields/Fields/Field/SubFieldI.H
index 8d574359da3..6b42e8d91f2 100644
--- a/src/OpenFOAM/fields/Fields/Field/SubFieldI.H
+++ b/src/OpenFOAM/fields/Fields/Field/SubFieldI.H
@@ -26,6 +26,15 @@ License
 
 \*---------------------------------------------------------------------------*/
 
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+template<class Type>
+inline const Foam::SubField<Type>& Foam::SubField<Type>::null()
+{
+    return NullObjectRef<SubField<Type>>();
+}
+
+
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 template<class Type>
@@ -105,13 +114,6 @@ inline Foam::SubField<Type>::SubField
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-template<class Type>
-inline const Foam::SubField<Type>& Foam::SubField<Type>::null()
-{
-    return NullObjectRef<SubField<Type>>();
-}
-
-
 template<class Type>
 inline Foam::tmp<Foam::Field<typename Foam::SubField<Type>::cmptType>>
 Foam::SubField<Type>::component
-- 
GitLab