From 6ab92370fbcfb049fe84338656d8076f00f2ef92 Mon Sep 17 00:00:00 2001
From: Henry Weller <http://cfd.direct>
Date: Fri, 18 Mar 2016 11:45:45 +0000
Subject: [PATCH] Identity: special type derived from SphericalTensor to
 provide the concept of identity (I)

Allows efficient operators to be defined for the interaction between
types and the equivalent identity.
---
 .../primitives/SphericalTensor/Identity.H     | 72 +++++++++++++++++++
 .../sphericalTensor/sphericalTensor.H         |  3 +-
 2 files changed, 74 insertions(+), 1 deletion(-)
 create mode 100644 src/OpenFOAM/primitives/SphericalTensor/Identity.H

diff --git a/src/OpenFOAM/primitives/SphericalTensor/Identity.H b/src/OpenFOAM/primitives/SphericalTensor/Identity.H
new file mode 100644
index 00000000000..e175edfe322
--- /dev/null
+++ b/src/OpenFOAM/primitives/SphericalTensor/Identity.H
@@ -0,0 +1,72 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2016 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::Identity
+
+Description
+    Templated Identity tensor derived from SphericalTensor.
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef Identity_H
+#define Identity_H
+
+#include "SphericalTensor.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                           Class Identity Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class Cmpt>
+class Identity
+:
+    public SphericalTensor<Cmpt>
+{
+
+public:
+
+    // Constructors
+
+        //- Construct initializing the SphericalTensor to 1
+        Identity()
+        :
+            SphericalTensor<Cmpt>(1)
+        {}
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/primitives/SphericalTensor/sphericalTensor/sphericalTensor.H b/src/OpenFOAM/primitives/SphericalTensor/sphericalTensor/sphericalTensor.H
index 462db416bc2..31417fa424f 100644
--- a/src/OpenFOAM/primitives/SphericalTensor/sphericalTensor/sphericalTensor.H
+++ b/src/OpenFOAM/primitives/SphericalTensor/sphericalTensor/sphericalTensor.H
@@ -36,6 +36,7 @@ SourceFiles
 #define sphericalTensor_H
 
 #include "SphericalTensor.H"
+#include "Identity.H"
 #include "contiguous.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -48,7 +49,7 @@ namespace Foam
 typedef SphericalTensor<scalar> sphericalTensor;
 
 // Identity tensor
-static const sphericalTensor I(1);
+static const Identity<scalar> I;
 
 static const sphericalTensor oneThirdI(1.0/3.0);
 static const sphericalTensor twoThirdsI(2.0/3.0);
-- 
GitLab