From e730fbec127c684eb5736b7e52d0eaceac843139 Mon Sep 17 00:00:00 2001
From: mattijs <mattijs>
Date: Wed, 8 Feb 2012 13:46:31 +0000
Subject: [PATCH] ENH: polynomial: added constructor from components

---
 .../DataEntry/polynomial/polynomial.C         | 51 ++++++++++++++++++-
 .../DataEntry/polynomial/polynomial.H         |  3 ++
 2 files changed, 52 insertions(+), 2 deletions(-)

diff --git a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C
index 34c595f8acf..c9c8ba3f654 100644
--- a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C
+++ b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C
@@ -31,8 +31,11 @@ License
 namespace Foam
 {
     defineTypeNameAndDebug(polynomial, 0);
+    DataEntry<scalar>::adddictionaryConstructorToTable<polynomial>
+        addpolynomialConstructorToTable_;
 }
 
+
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 Foam::polynomial::polynomial(const word& entryName, const dictionary& dict)
@@ -48,7 +51,7 @@ Foam::polynomial::polynomial(const word& entryName, const dictionary& dict)
 
     if (!coeffs_.size())
     {
-        FatalErrorIn("Foam::polynomial::polynomial(const word&, Istream&)")
+        FatalErrorIn("Foam::polynomial::polynomial(const word&, dictionary&)")
             << "polynomial coefficients for entry " << this->name_
             << " are invalid (empty)" << nl << exit(FatalError);
     }
@@ -66,7 +69,7 @@ Foam::polynomial::polynomial(const word& entryName, const dictionary& dict)
     {
         if (!canIntegrate_)
         {
-            WarningIn("Foam::polynomial::polynomial(const word&, Istream&)")
+            WarningIn("Foam::polynomial::polynomial(const word&, dictionary&)")
                 << "Polynomial " << this->name_ << " cannot be integrated"
                 << endl;
         }
@@ -74,6 +77,50 @@ Foam::polynomial::polynomial(const word& entryName, const dictionary& dict)
 }
 
 
+Foam::polynomial::polynomial
+(
+    const word& entryName,
+    const List<Tuple2<scalar, scalar> >& coeffs
+)
+:
+    DataEntry<scalar>(entryName),
+    coeffs_(coeffs),
+    canIntegrate_(true)
+{
+    if (!coeffs_.size())
+    {
+        FatalErrorIn
+        (
+            "Foam::polynomial::polynomial"
+            "(const word&, const List<Tuple2<scalar, scalar> >&&)"
+        )   << "polynomial coefficients for entry " << this->name_
+            << " are invalid (empty)" << nl << exit(FatalError);
+    }
+
+    forAll(coeffs_, i)
+    {
+        if (mag(coeffs_[i].second() + 1) < ROOTVSMALL)
+        {
+            canIntegrate_ = false;
+            break;
+        }
+    }
+
+    if (debug)
+    {
+        if (!canIntegrate_)
+        {
+            WarningIn
+            (
+                "Foam::polynomial::polynomial"
+                "(const word&, const List<Tuple2<scalar, scalar> >&&)"
+            )   << "Polynomial " << this->name_ << " cannot be integrated"
+                << endl;
+        }
+    }
+}
+
+
 Foam::polynomial::polynomial(const polynomial& poly)
 :
     DataEntry<scalar>(poly),
diff --git a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H
index 2ed38a9f322..2c2cbcb30fc 100644
--- a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H
+++ b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H
@@ -96,6 +96,9 @@ public:
 
         polynomial(const word& entryName, const dictionary& dict);
 
+        //- Construct from components
+        polynomial(const word& entryName, const List<Tuple2<scalar, scalar> >&);
+
         //- Copy constructor
         polynomial(const polynomial& poly);
 
-- 
GitLab