From 3adf33da5446c34adcc3f4c8164aaa756a5f3c61 Mon Sep 17 00:00:00 2001
From: Henry Weller <http://cfd.direct>
Date: Fri, 3 Jul 2015 18:02:24 +0100
Subject: [PATCH] src/OpenFOAM: Added posPart and negPart functions

posPart returns a value or field in which the value or values are set to
0 if negative

negPart returns a value or field in which the value or values are set to
0 if positive
---
 src/OpenFOAM/dimensionSet/dimensionSet.C      | 14 ++++++++++-
 src/OpenFOAM/dimensionSet/dimensionSet.H      |  4 +++-
 .../dimensionedScalar/dimensionedScalar.C     | 24 ++++++++++++++++++-
 .../dimensionedScalar/dimensionedScalar.H     |  4 +++-
 .../DimensionedScalarField.C                  |  4 +++-
 .../DimensionedScalarField.H                  |  4 +++-
 .../scalarFieldField/scalarFieldField.C       |  4 +++-
 .../scalarFieldField/scalarFieldField.H       |  4 +++-
 .../fields/Fields/scalarField/scalarField.C   |  4 +++-
 .../fields/Fields/scalarField/scalarField.H   |  4 +++-
 .../GeometricScalarField.C                    |  4 +++-
 .../GeometricScalarField.H                    |  4 +++-
 src/OpenFOAM/primitives/Scalar/Scalar.H       | 12 ++++++++++
 .../primitives/ints/label/labelSpecific.H     | 13 +++++++++-
 14 files changed, 90 insertions(+), 13 deletions(-)

diff --git a/src/OpenFOAM/dimensionSet/dimensionSet.C b/src/OpenFOAM/dimensionSet/dimensionSet.C
index de1b547681f..c289689ce97 100644
--- a/src/OpenFOAM/dimensionSet/dimensionSet.C
+++ b/src/OpenFOAM/dimensionSet/dimensionSet.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -417,6 +417,18 @@ Foam::dimensionSet Foam::neg(const dimensionSet&)
 }
 
 
+Foam::dimensionSet Foam::posPart(const dimensionSet& ds)
+{
+    return ds;
+}
+
+
+Foam::dimensionSet Foam::negPart(const dimensionSet& ds)
+{
+    return ds;
+}
+
+
 Foam::dimensionSet Foam::inv(const dimensionSet& ds)
 {
     return dimless/ds;
diff --git a/src/OpenFOAM/dimensionSet/dimensionSet.H b/src/OpenFOAM/dimensionSet/dimensionSet.H
index 105ea879a53..b4af80416b2 100644
--- a/src/OpenFOAM/dimensionSet/dimensionSet.H
+++ b/src/OpenFOAM/dimensionSet/dimensionSet.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -82,6 +82,8 @@ dimensionSet mag(const dimensionSet&);
 dimensionSet sign(const dimensionSet&);
 dimensionSet pos(const dimensionSet&);
 dimensionSet neg(const dimensionSet&);
+dimensionSet posPart(const dimensionSet&);
+dimensionSet negPart(const dimensionSet&);
 dimensionSet inv(const dimensionSet&);
 
 // Function to check the argument is dimensionless
diff --git a/src/OpenFOAM/dimensionedTypes/dimensionedScalar/dimensionedScalar.C b/src/OpenFOAM/dimensionedTypes/dimensionedScalar/dimensionedScalar.C
index c1b00f52da6..fee971a8e85 100644
--- a/src/OpenFOAM/dimensionedTypes/dimensionedScalar/dimensionedScalar.C
+++ b/src/OpenFOAM/dimensionedTypes/dimensionedScalar/dimensionedScalar.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -209,6 +209,28 @@ dimensionedScalar neg(const dimensionedScalar& ds)
 }
 
 
+dimensionedScalar posPart(const dimensionedScalar& ds)
+{
+    return dimensionedScalar
+    (
+        "posPart(" + ds.name() + ')',
+        posPart(ds.dimensions()),
+        ::Foam::pos(ds.value())
+    );
+}
+
+
+dimensionedScalar negPart(const dimensionedScalar& ds)
+{
+    return dimensionedScalar
+    (
+        "negPart(" + ds.name() + ')',
+        negPart(ds.dimensions()),
+        ::Foam::neg(ds.value())
+    );
+}
+
+
 #define transFunc(func)                                                    \
 dimensionedScalar func(const dimensionedScalar& ds)                        \
 {                                                                          \
diff --git a/src/OpenFOAM/dimensionedTypes/dimensionedScalar/dimensionedScalar.H b/src/OpenFOAM/dimensionedTypes/dimensionedScalar/dimensionedScalar.H
index 96854aecfb4..d1f618c2de5 100644
--- a/src/OpenFOAM/dimensionedTypes/dimensionedScalar/dimensionedScalar.H
+++ b/src/OpenFOAM/dimensionedTypes/dimensionedScalar/dimensionedScalar.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -69,6 +69,8 @@ dimensionedScalar hypot(const dimensionedScalar&, const dimensionedScalar&);
 dimensionedScalar sign(const dimensionedScalar&);
 dimensionedScalar pos(const dimensionedScalar&);
 dimensionedScalar neg(const dimensionedScalar&);
+dimensionedScalar posPart(const dimensionedScalar&);
+dimensionedScalar negPart(const dimensionedScalar&);
 
 dimensionedScalar exp(const dimensionedScalar&);
 dimensionedScalar log(const dimensionedScalar&);
diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedScalarField/DimensionedScalarField.C b/src/OpenFOAM/fields/DimensionedFields/DimensionedScalarField/DimensionedScalarField.C
index fd0967da810..019991ea994 100644
--- a/src/OpenFOAM/fields/DimensionedFields/DimensionedScalarField/DimensionedScalarField.C
+++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedScalarField/DimensionedScalarField.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -638,6 +638,8 @@ UNARY_FUNCTION(scalar, scalar, cbrt, cbrt)
 UNARY_FUNCTION(scalar, scalar, sign, sign)
 UNARY_FUNCTION(scalar, scalar, pos, pos)
 UNARY_FUNCTION(scalar, scalar, neg, neg)
+UNARY_FUNCTION(scalar, scalar, posPart, posPart)
+UNARY_FUNCTION(scalar, scalar, negPart, negPart)
 
 UNARY_FUNCTION(scalar, scalar, exp, trans)
 UNARY_FUNCTION(scalar, scalar, log, trans)
diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedScalarField/DimensionedScalarField.H b/src/OpenFOAM/fields/DimensionedFields/DimensionedScalarField/DimensionedScalarField.H
index d5e1e54680b..1734c9dde06 100644
--- a/src/OpenFOAM/fields/DimensionedFields/DimensionedScalarField/DimensionedScalarField.H
+++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedScalarField/DimensionedScalarField.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -92,6 +92,8 @@ UNARY_FUNCTION(scalar, scalar, cbrt, cbrt)
 UNARY_FUNCTION(scalar, scalar, sign, sign)
 UNARY_FUNCTION(scalar, scalar, pos, pos)
 UNARY_FUNCTION(scalar, scalar, neg, neg)
+UNARY_FUNCTION(scalar, scalar, posPart, posPart)
+UNARY_FUNCTION(scalar, scalar, negPart, negPart)
 
 UNARY_FUNCTION(scalar, scalar, exp, trans)
 UNARY_FUNCTION(scalar, scalar, log, trans)
diff --git a/src/OpenFOAM/fields/FieldFields/scalarFieldField/scalarFieldField.C b/src/OpenFOAM/fields/FieldFields/scalarFieldField/scalarFieldField.C
index 4132ba79f3c..4f4ddcb429d 100644
--- a/src/OpenFOAM/fields/FieldFields/scalarFieldField/scalarFieldField.C
+++ b/src/OpenFOAM/fields/FieldFields/scalarFieldField/scalarFieldField.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -109,6 +109,8 @@ UNARY_FUNCTION(scalar, scalar, cbrt)
 UNARY_FUNCTION(scalar, scalar, sign)
 UNARY_FUNCTION(scalar, scalar, pos)
 UNARY_FUNCTION(scalar, scalar, neg)
+UNARY_FUNCTION(scalar, scalar, posPart)
+UNARY_FUNCTION(scalar, scalar, negPart)
 UNARY_FUNCTION(scalar, scalar, exp)
 UNARY_FUNCTION(scalar, scalar, log)
 UNARY_FUNCTION(scalar, scalar, log10)
diff --git a/src/OpenFOAM/fields/FieldFields/scalarFieldField/scalarFieldField.H b/src/OpenFOAM/fields/FieldFields/scalarFieldField/scalarFieldField.H
index f6fcc4c901a..0af7ac39d43 100644
--- a/src/OpenFOAM/fields/FieldFields/scalarFieldField/scalarFieldField.H
+++ b/src/OpenFOAM/fields/FieldFields/scalarFieldField/scalarFieldField.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -102,6 +102,8 @@ UNARY_FUNCTION(scalar, scalar, cbrt)
 UNARY_FUNCTION(scalar, scalar, sign)
 UNARY_FUNCTION(scalar, scalar, pos)
 UNARY_FUNCTION(scalar, scalar, neg)
+UNARY_FUNCTION(scalar, scalar, posPart)
+UNARY_FUNCTION(scalar, scalar, negPart)
 UNARY_FUNCTION(scalar, scalar, exp)
 UNARY_FUNCTION(scalar, scalar, log)
 UNARY_FUNCTION(scalar, scalar, log10)
diff --git a/src/OpenFOAM/fields/Fields/scalarField/scalarField.C b/src/OpenFOAM/fields/Fields/scalarField/scalarField.C
index 7ae37531de2..e7400669af4 100644
--- a/src/OpenFOAM/fields/Fields/scalarField/scalarField.C
+++ b/src/OpenFOAM/fields/Fields/scalarField/scalarField.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -133,6 +133,8 @@ UNARY_FUNCTION(scalar, scalar, cbrt)
 UNARY_FUNCTION(scalar, scalar, sign)
 UNARY_FUNCTION(scalar, scalar, pos)
 UNARY_FUNCTION(scalar, scalar, neg)
+UNARY_FUNCTION(scalar, scalar, posPart)
+UNARY_FUNCTION(scalar, scalar, negPart)
 UNARY_FUNCTION(scalar, scalar, exp)
 UNARY_FUNCTION(scalar, scalar, log)
 UNARY_FUNCTION(scalar, scalar, log10)
diff --git a/src/OpenFOAM/fields/Fields/scalarField/scalarField.H b/src/OpenFOAM/fields/Fields/scalarField/scalarField.H
index f30938e9b68..4d85eece112 100644
--- a/src/OpenFOAM/fields/Fields/scalarField/scalarField.H
+++ b/src/OpenFOAM/fields/Fields/scalarField/scalarField.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -107,6 +107,8 @@ UNARY_FUNCTION(scalar, scalar, cbrt)
 UNARY_FUNCTION(scalar, scalar, sign)
 UNARY_FUNCTION(scalar, scalar, pos)
 UNARY_FUNCTION(scalar, scalar, neg)
+UNARY_FUNCTION(scalar, scalar, posPart)
+UNARY_FUNCTION(scalar, scalar, negPart)
 UNARY_FUNCTION(scalar, scalar, exp)
 UNARY_FUNCTION(scalar, scalar, log)
 UNARY_FUNCTION(scalar, scalar, log10)
diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricScalarField/GeometricScalarField.C b/src/OpenFOAM/fields/GeometricFields/GeometricScalarField/GeometricScalarField.C
index 79e253d9f7c..eb160c0e74c 100644
--- a/src/OpenFOAM/fields/GeometricFields/GeometricScalarField/GeometricScalarField.C
+++ b/src/OpenFOAM/fields/GeometricFields/GeometricScalarField/GeometricScalarField.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -762,6 +762,8 @@ UNARY_FUNCTION(scalar, scalar, cbrt, cbrt)
 UNARY_FUNCTION(scalar, scalar, sign, sign)
 UNARY_FUNCTION(scalar, scalar, pos, pos)
 UNARY_FUNCTION(scalar, scalar, neg, neg)
+UNARY_FUNCTION(scalar, scalar, posPart, posPart)
+UNARY_FUNCTION(scalar, scalar, negPart, negPart)
 
 UNARY_FUNCTION(scalar, scalar, exp, trans)
 UNARY_FUNCTION(scalar, scalar, log, trans)
diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricScalarField/GeometricScalarField.H b/src/OpenFOAM/fields/GeometricFields/GeometricScalarField/GeometricScalarField.H
index a7bc057e9eb..78dc2e1d30e 100644
--- a/src/OpenFOAM/fields/GeometricFields/GeometricScalarField/GeometricScalarField.H
+++ b/src/OpenFOAM/fields/GeometricFields/GeometricScalarField/GeometricScalarField.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -100,6 +100,8 @@ UNARY_FUNCTION(scalar, scalar, cbrt, cbrt)
 UNARY_FUNCTION(scalar, scalar, sign, sign)
 UNARY_FUNCTION(scalar, scalar, pos, pos)
 UNARY_FUNCTION(scalar, scalar, neg, neg)
+UNARY_FUNCTION(scalar, scalar, posPart, posPart)
+UNARY_FUNCTION(scalar, scalar, negPart, negPart)
 
 UNARY_FUNCTION(scalar, scalar, exp, trans)
 UNARY_FUNCTION(scalar, scalar, log, trans)
diff --git a/src/OpenFOAM/primitives/Scalar/Scalar.H b/src/OpenFOAM/primitives/Scalar/Scalar.H
index 49f4072dd92..f0c38d6d6a2 100644
--- a/src/OpenFOAM/primitives/Scalar/Scalar.H
+++ b/src/OpenFOAM/primitives/Scalar/Scalar.H
@@ -131,6 +131,18 @@ inline Scalar neg(const Scalar s)
 }
 
 
+inline Scalar posPart(const Scalar s)
+{
+    return (s > 0)? s: 0;
+}
+
+
+inline Scalar negPart(const Scalar s)
+{
+    return (s < 0)? s: 0;
+}
+
+
 inline bool equal(const Scalar& s1, const Scalar& s2)
 {
     return mag(s1 - s2) <= ScalarVSMALL;
diff --git a/src/OpenFOAM/primitives/ints/label/labelSpecific.H b/src/OpenFOAM/primitives/ints/label/labelSpecific.H
index f6b9fd5dd90..21e5c7aec24 100644
--- a/src/OpenFOAM/primitives/ints/label/labelSpecific.H
+++ b/src/OpenFOAM/primitives/ints/label/labelSpecific.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2014 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2014-2015 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -60,6 +60,17 @@ inline label neg(const label s)
     return (s < 0)? 1: 0;
 }
 
+inline label posPart(const label s)
+{
+    return (s > 0)? s: 0;
+}
+
+inline label negPart(const label s)
+{
+    return (s < 0)? s: 0;
+}
+
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 } // End namespace Foam
-- 
GitLab