From 75fabe3666cafac4be735b40c250ddd647ee2d41 Mon Sep 17 00:00:00 2001
From: andy <a.heather@opencfd.co.uk>
Date: Wed, 20 Oct 2010 12:10:56 +0100
Subject: [PATCH] ENH: Added copy/clone functionality to solids and
 solidMixture classes

---
 .../solidMixture/solidMixture/solidMixture.C      | 12 ++++++++++++
 .../solidMixture/solidMixture/solidMixture.H      | 15 ++++++++++++++-
 src/thermophysicalModels/solids/C/C.C             |  6 ++++++
 src/thermophysicalModels/solids/C/C.H             | 13 +++++++++++--
 src/thermophysicalModels/solids/CaCO3/CaCO3.C     |  6 ++++++
 src/thermophysicalModels/solids/CaCO3/CaCO3.H     | 13 +++++++++++--
 src/thermophysicalModels/solids/ash/ash.C         |  6 ++++++
 src/thermophysicalModels/solids/ash/ash.H         | 13 +++++++++++--
 src/thermophysicalModels/solids/solid/solid.C     | 10 ++++++++++
 src/thermophysicalModels/solids/solid/solid.H     | 12 ++++++++++++
 10 files changed, 99 insertions(+), 7 deletions(-)

diff --git a/src/thermophysicalModels/solidMixture/solidMixture/solidMixture.C b/src/thermophysicalModels/solidMixture/solidMixture/solidMixture.C
index 1132a9e870a..bacc517e0e1 100644
--- a/src/thermophysicalModels/solidMixture/solidMixture/solidMixture.C
+++ b/src/thermophysicalModels/solidMixture/solidMixture/solidMixture.C
@@ -54,6 +54,18 @@ Foam::solidMixture::solidMixture
 }
 
 
+Foam::solidMixture::solidMixture(const solidMixture& s)
+:
+    components_(s.components_),
+    properties_(s.properties_.size())
+{
+    forAll(properties_, i)
+    {
+        properties_.set(i, s.properties_(i)->clone());
+    }
+}
+
+
 // * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * //
 
 Foam::autoPtr<Foam::solidMixture> Foam::solidMixture::New
diff --git a/src/thermophysicalModels/solidMixture/solidMixture/solidMixture.H b/src/thermophysicalModels/solidMixture/solidMixture/solidMixture.H
index f7dc730920f..17f491e0318 100644
--- a/src/thermophysicalModels/solidMixture/solidMixture/solidMixture.H
+++ b/src/thermophysicalModels/solidMixture/solidMixture/solidMixture.H
@@ -59,7 +59,6 @@ namespace Foam
 
 class solidMixture
 {
-
     // Private data
 
         //- The names of the solids
@@ -76,6 +75,20 @@ public:
         //- Construct from dictionary
         solidMixture(const dictionary&);
 
+        //- Construct copy
+        solidMixture(const solidMixture& lm);
+
+        //- Construct and return a clone
+        virtual autoPtr<solidMixture> clone() const
+        {
+            return autoPtr<solidMixture>(new solidMixture(*this));
+        }
+
+
+    //- Destructor
+    virtual ~solidMixture()
+    {}
+
 
     // Selectors
 
diff --git a/src/thermophysicalModels/solids/C/C.C b/src/thermophysicalModels/solids/C/C.C
index 85dab6090dd..49d180550f3 100644
--- a/src/thermophysicalModels/solids/C/C.C
+++ b/src/thermophysicalModels/solids/C/C.C
@@ -69,6 +69,12 @@ Foam::C::C(const dictionary& dict)
 {}
 
 
+Foam::C::C(const C& s)
+:
+    solid(s)
+{}
+
+
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 void Foam::C::writeData(Ostream& os) const
diff --git a/src/thermophysicalModels/solids/C/C.H b/src/thermophysicalModels/solids/C/C.H
index 5dc2e2b350c..5b23b217566 100644
--- a/src/thermophysicalModels/solids/C/C.H
+++ b/src/thermophysicalModels/solids/C/C.H
@@ -46,8 +46,8 @@ class C;
 
 Ostream& operator<<
 (
-     Ostream&,
-     const C&
+    Ostream&,
+    const C&
 );
 
 
@@ -79,6 +79,15 @@ public:
         //- Construct from dictionary
         C(const dictionary& dict);
 
+        //- Construct copy
+        C(const C& s);
+
+        //- Construct and return clone
+        virtual autoPtr<solid> clone() const
+        {
+            return autoPtr<solid>(new C(*this));
+        }
+
 
     // I-O
 
diff --git a/src/thermophysicalModels/solids/CaCO3/CaCO3.C b/src/thermophysicalModels/solids/CaCO3/CaCO3.C
index 3e200895555..24917758562 100644
--- a/src/thermophysicalModels/solids/CaCO3/CaCO3.C
+++ b/src/thermophysicalModels/solids/CaCO3/CaCO3.C
@@ -69,6 +69,12 @@ Foam::CaCO3::CaCO3(const dictionary& dict)
 {}
 
 
+Foam::CaCO3::CaCO3(const CaCO3& s)
+:
+    solid(s)
+{}
+
+
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 void Foam::CaCO3::writeData(Ostream& os) const
diff --git a/src/thermophysicalModels/solids/CaCO3/CaCO3.H b/src/thermophysicalModels/solids/CaCO3/CaCO3.H
index d5d725d938a..794ba828a44 100644
--- a/src/thermophysicalModels/solids/CaCO3/CaCO3.H
+++ b/src/thermophysicalModels/solids/CaCO3/CaCO3.H
@@ -46,8 +46,8 @@ class CaCO3;
 
 Ostream& operator<<
 (
-     Ostream&,
-     const CaCO3&
+    Ostream&,
+    const CaCO3&
 );
 
 
@@ -80,6 +80,15 @@ public:
         //- Construct from dictionary
         CaCO3(const dictionary& dict);
 
+        //- Construct copy
+        CaCO3(const CaCO3& s);
+
+        //- Construct and return clone
+        virtual autoPtr<solid> clone() const
+        {
+            return autoPtr<solid>(new CaCO3(*this));
+        }
+
 
     // I-O
 
diff --git a/src/thermophysicalModels/solids/ash/ash.C b/src/thermophysicalModels/solids/ash/ash.C
index e75119b8a7a..e7f337e60bd 100644
--- a/src/thermophysicalModels/solids/ash/ash.C
+++ b/src/thermophysicalModels/solids/ash/ash.C
@@ -69,6 +69,12 @@ Foam::ash::ash(const dictionary& dict)
 {}
 
 
+Foam::ash::ash(const ash& s)
+:
+    solid(s)
+{}
+
+
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 void Foam::ash::writeData(Ostream& os) const
diff --git a/src/thermophysicalModels/solids/ash/ash.H b/src/thermophysicalModels/solids/ash/ash.H
index 0769ffff830..bb39c14c6af 100644
--- a/src/thermophysicalModels/solids/ash/ash.H
+++ b/src/thermophysicalModels/solids/ash/ash.H
@@ -46,8 +46,8 @@ class ash;
 
 Ostream& operator<<
 (
-     Ostream&,
-     const ash&
+    Ostream&,
+    const ash&
 );
 
 
@@ -80,6 +80,15 @@ public:
         //- Construct from dictionary
         ash(const dictionary& dict);
 
+        //- Construct copy
+        ash(const ash& s);
+
+        //- Construct and return clone
+        virtual autoPtr<solid> clone() const
+        {
+            return autoPtr<solid>(new ash(*this));
+        }
+
 
     // I-O
 
diff --git a/src/thermophysicalModels/solids/solid/solid.C b/src/thermophysicalModels/solids/solid/solid.C
index cda24449622..83b85eb6879 100644
--- a/src/thermophysicalModels/solids/solid/solid.C
+++ b/src/thermophysicalModels/solids/solid/solid.C
@@ -74,6 +74,16 @@ Foam::solid::solid(const dictionary& dict)
 {}
 
 
+Foam::solid::solid(const solid& s)
+:
+    rho_(s.rho_),
+    Cp_(s.Cp_),
+    K_(s.K_),
+    Hf_(s.Hf_),
+    emissivity_(s.emissivity_)
+{}
+
+
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 void Foam::solid::writeData(Ostream& os) const
diff --git a/src/thermophysicalModels/solids/solid/solid.H b/src/thermophysicalModels/solids/solid/solid.H
index 1adb26e4d90..83ac6894ae3 100644
--- a/src/thermophysicalModels/solids/solid/solid.H
+++ b/src/thermophysicalModels/solids/solid/solid.H
@@ -133,6 +133,18 @@ public:
         //- Construct from dictionary
         solid(const dictionary& dict);
 
+        //- Construct copy
+        solid(const solid& s);
+
+        //- Construct and return clone
+        virtual autoPtr<solid> clone() const
+        {
+            return autoPtr<solid>(new solid(*this));
+        }
+
+
+    // Selectors
+
         //- Return a pointer to a new solid created from input
         static autoPtr<solid> New(Istream& is);
 
-- 
GitLab