From 77e3602052e986a60fd79f077f5c8f318a5ce9b6 Mon Sep 17 00:00:00 2001
From: andy <a.heather@opencfd.co.uk>
Date: Wed, 20 Oct 2010 12:04:11 +0100
Subject: [PATCH] ENH: Added copy/clone functionality to liquids and
 liquidMixture classes

---
 .../liquidMixture/liquidMixture.C             |  12 ++
 .../liquidMixture/liquidMixture.H             |  16 ++-
 src/thermophysicalModels/liquids/Ar/Ar.C      |  19 +++
 src/thermophysicalModels/liquids/Ar/Ar.H      |   9 ++
 .../liquids/C10H22/C10H22.C                   |  19 +++
 .../liquids/C10H22/C10H22.H                   |   9 ++
 .../liquids/C12H26/C12H26.C                   |  19 +++
 .../liquids/C12H26/C12H26.H                   |   9 ++
 .../liquids/C13H28/C13H28.C                   |  19 +++
 .../liquids/C13H28/C13H28.H                   |   9 ++
 .../liquids/C14H30/C14H30.C                   |  19 +++
 .../liquids/C14H30/C14H30.H                   |   9 ++
 .../liquids/C16H34/C16H34.C                   |  19 +++
 .../liquids/C16H34/C16H34.H                   |   9 ++
 .../liquids/C2H5OH/C2H5OH.C                   |  19 +++
 .../liquids/C2H5OH/C2H5OH.H                   |   9 ++
 src/thermophysicalModels/liquids/C2H6/C2H6.C  |  19 +++
 src/thermophysicalModels/liquids/C2H6/C2H6.H  |   9 ++
 .../liquids/C2H6O/C2H6O.C                     |  19 +++
 .../liquids/C2H6O/C2H6O.H                     |   9 ++
 .../liquids/C3H6O/C3H6O.C                     |  19 +++
 .../liquids/C3H6O/C3H6O.H                     |   9 ++
 src/thermophysicalModels/liquids/C3H8/C3H8.C  |  19 +++
 src/thermophysicalModels/liquids/C3H8/C3H8.H  |   9 ++
 .../liquids/C4H10O/C4H10O.C                   |  19 +++
 .../liquids/C4H10O/C4H10O.H                   |   9 ++
 .../liquids/C6H14/C6H14.C                     |  19 +++
 .../liquids/C6H14/C6H14.H                     |   9 ++
 src/thermophysicalModels/liquids/C6H6/C6H6.C  |  19 +++
 src/thermophysicalModels/liquids/C6H6/C6H6.H  |   9 ++
 .../liquids/C7H16/C7H16.C                     |  19 +++
 .../liquids/C7H16/C7H16.H                     |   9 ++
 src/thermophysicalModels/liquids/C7H8/C7H8.C  |  19 +++
 src/thermophysicalModels/liquids/C7H8/C7H8.H  |   9 ++
 .../liquids/C8H10/C8H10.C                     |  19 +++
 .../liquids/C8H10/C8H10.H                     |   9 ++
 .../liquids/C8H18/C8H18.C                     |  19 +++
 .../liquids/C8H18/C8H18.H                     |   9 ++
 .../liquids/C9H20/C9H20.C                     |  19 +++
 .../liquids/C9H20/C9H20.H                     |   9 ++
 .../liquids/CH3OH/CH3OH.C                     |  19 +++
 .../liquids/CH3OH/CH3OH.H                     |   9 ++
 .../liquids/CH4N2O/CH4N2O.C                   |  19 +++
 .../liquids/CH4N2O/CH4N2O.H                   |   9 ++
 src/thermophysicalModels/liquids/H2O/H2O.C    |  19 +++
 src/thermophysicalModels/liquids/H2O/H2O.H    |   9 ++
 .../liquids/IC8H18/IC8H18.C                   |  19 +++
 .../liquids/IC8H18/IC8H18.H                   |   9 ++
 src/thermophysicalModels/liquids/IDEA/IDEA.C  |  19 +++
 src/thermophysicalModels/liquids/IDEA/IDEA.H  |   9 ++
 src/thermophysicalModels/liquids/MB/MB.C      |  19 +++
 src/thermophysicalModels/liquids/MB/MB.H      |   9 ++
 src/thermophysicalModels/liquids/N2/N2.C      |  19 +++
 src/thermophysicalModels/liquids/N2/N2.H      |   9 ++
 .../liquids/aC10H7CH3/aC10H7CH3.C             |  19 +++
 .../liquids/aC10H7CH3/aC10H7CH3.H             |   9 ++
 .../liquids/bC10H7CH3/bC10H7CH3.C             |  19 +++
 .../liquids/bC10H7CH3/bC10H7CH3.H             |   9 ++
 .../liquids/iC3H8O/iC3H8O.C                   |  19 +++
 .../liquids/iC3H8O/iC3H8O.H                   |   9 ++
 .../liquids/liquid/liquid.C                   | 134 ++++++++++++++++++
 .../liquids/liquid/liquid.H                   |  46 +++---
 .../liquids/nC3H8O/nC3H8O.C                   |  19 +++
 .../liquids/nC3H8O/nC3H8O.H                   |   9 ++
 64 files changed, 1024 insertions(+), 24 deletions(-)

diff --git a/src/thermophysicalModels/liquidMixture/liquidMixture/liquidMixture.C b/src/thermophysicalModels/liquidMixture/liquidMixture/liquidMixture.C
index 6db944c0287..05660e55f13 100644
--- a/src/thermophysicalModels/liquidMixture/liquidMixture/liquidMixture.C
+++ b/src/thermophysicalModels/liquidMixture/liquidMixture/liquidMixture.C
@@ -62,6 +62,18 @@ Foam::liquidMixture::liquidMixture
 }
 
 
+Foam::liquidMixture::liquidMixture(const liquidMixture& lm)
+:
+    components_(lm.components_),
+    properties_(lm.properties_.size())
+{
+    forAll(properties_, i)
+    {
+        properties_.set(i, lm.properties_(i)->clone());
+    }
+}
+
+
 // * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * //
 
 Foam::autoPtr<Foam::liquidMixture> Foam::liquidMixture::New
diff --git a/src/thermophysicalModels/liquidMixture/liquidMixture/liquidMixture.H b/src/thermophysicalModels/liquidMixture/liquidMixture/liquidMixture.H
index 2ecde01b7b8..9409e0508fa 100644
--- a/src/thermophysicalModels/liquidMixture/liquidMixture/liquidMixture.H
+++ b/src/thermophysicalModels/liquidMixture/liquidMixture/liquidMixture.H
@@ -119,7 +119,21 @@ public:
     // Constructors
 
         //- Construct from dictionary
-        liquidMixture(const dictionary&);
+        liquidMixture(const dictionary& dict);
+
+        //- Construct copy
+        liquidMixture(const liquidMixture& lm);
+
+        //- Construct and return a clone
+        virtual autoPtr<liquidMixture> clone() const
+        {
+            return autoPtr<liquidMixture>(new liquidMixture(*this));
+        }
+
+
+    //- Destructor
+    virtual ~liquidMixture()
+    {}
 
 
     // Selectors
diff --git a/src/thermophysicalModels/liquids/Ar/Ar.C b/src/thermophysicalModels/liquids/Ar/Ar.C
index cb783569104..7da2de5a41f 100644
--- a/src/thermophysicalModels/liquids/Ar/Ar.C
+++ b/src/thermophysicalModels/liquids/Ar/Ar.C
@@ -158,4 +158,23 @@ Foam::Ar::Ar(const dictionary& dict)
 {}
 
 
+Foam::Ar::Ar(const Ar& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/Ar/Ar.H b/src/thermophysicalModels/liquids/Ar/Ar.H
index 560b99a583e..d77b2edc0d2 100644
--- a/src/thermophysicalModels/liquids/Ar/Ar.H
+++ b/src/thermophysicalModels/liquids/Ar/Ar.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         Ar(const dictionary& dict);
 
+        //- Construct copy
+        Ar(const Ar& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new Ar(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C10H22/C10H22.C b/src/thermophysicalModels/liquids/C10H22/C10H22.C
index c2746691265..cc5189d0864 100644
--- a/src/thermophysicalModels/liquids/C10H22/C10H22.C
+++ b/src/thermophysicalModels/liquids/C10H22/C10H22.C
@@ -166,4 +166,23 @@ Foam::C10H22::C10H22(const dictionary& dict)
 {}
 
 
+Foam::C10H22::C10H22(const C10H22& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C10H22/C10H22.H b/src/thermophysicalModels/liquids/C10H22/C10H22.H
index 9fc03f06407..93aea87d902 100644
--- a/src/thermophysicalModels/liquids/C10H22/C10H22.H
+++ b/src/thermophysicalModels/liquids/C10H22/C10H22.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C10H22(const dictionary& dict);
 
+        //- Construct copy
+        C10H22(const C10H22& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C10H22(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C12H26/C12H26.C b/src/thermophysicalModels/liquids/C12H26/C12H26.C
index f384008d691..1dc0a8428a6 100644
--- a/src/thermophysicalModels/liquids/C12H26/C12H26.C
+++ b/src/thermophysicalModels/liquids/C12H26/C12H26.C
@@ -158,4 +158,23 @@ Foam::C12H26::C12H26(const dictionary& dict)
 {}
 
 
+Foam::C12H26::C12H26(const C12H26& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C12H26/C12H26.H b/src/thermophysicalModels/liquids/C12H26/C12H26.H
index bbdba13e792..10e5c1f73ef 100644
--- a/src/thermophysicalModels/liquids/C12H26/C12H26.H
+++ b/src/thermophysicalModels/liquids/C12H26/C12H26.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C12H26(const dictionary& dict);
 
+        //- Construct copy
+        C12H26(const C12H26& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C12H26(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C13H28/C13H28.C b/src/thermophysicalModels/liquids/C13H28/C13H28.C
index adb9e449115..2a236c5c998 100644
--- a/src/thermophysicalModels/liquids/C13H28/C13H28.C
+++ b/src/thermophysicalModels/liquids/C13H28/C13H28.C
@@ -166,4 +166,23 @@ Foam::C13H28::C13H28(const dictionary& dict)
 {}
 
 
+Foam::C13H28::C13H28(const C13H28& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C13H28/C13H28.H b/src/thermophysicalModels/liquids/C13H28/C13H28.H
index 3cd8dfcb798..63b67797c00 100644
--- a/src/thermophysicalModels/liquids/C13H28/C13H28.H
+++ b/src/thermophysicalModels/liquids/C13H28/C13H28.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C13H28(const dictionary& dict);
 
+        //- Construct copy
+        C13H28(const C13H28& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C13H28(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C14H30/C14H30.C b/src/thermophysicalModels/liquids/C14H30/C14H30.C
index 0b2d2515c42..c096b62a147 100644
--- a/src/thermophysicalModels/liquids/C14H30/C14H30.C
+++ b/src/thermophysicalModels/liquids/C14H30/C14H30.C
@@ -166,4 +166,23 @@ Foam::C14H30::C14H30(const dictionary& dict)
 {}
 
 
+Foam::C14H30::C14H30(const C14H30& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C14H30/C14H30.H b/src/thermophysicalModels/liquids/C14H30/C14H30.H
index b96d4daf7df..7b9c1373584 100644
--- a/src/thermophysicalModels/liquids/C14H30/C14H30.H
+++ b/src/thermophysicalModels/liquids/C14H30/C14H30.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C14H30(const dictionary& dict);
 
+        //- Construct copy
+        C14H30(const C14H30& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C14H30(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C16H34/C16H34.C b/src/thermophysicalModels/liquids/C16H34/C16H34.C
index 3f7089378e0..b3549a16aee 100644
--- a/src/thermophysicalModels/liquids/C16H34/C16H34.C
+++ b/src/thermophysicalModels/liquids/C16H34/C16H34.C
@@ -166,4 +166,23 @@ Foam::C16H34::C16H34(const dictionary& dict)
 {}
 
 
+Foam::C16H34::C16H34(const C16H34& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C16H34/C16H34.H b/src/thermophysicalModels/liquids/C16H34/C16H34.H
index 4654a0eef3e..ec3037d2b2f 100644
--- a/src/thermophysicalModels/liquids/C16H34/C16H34.H
+++ b/src/thermophysicalModels/liquids/C16H34/C16H34.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C16H34(const dictionary& dict);
 
+        //- Construct copy
+        C16H34(const C16H34& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C16H34(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.C b/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.C
index 1f7c2beab62..ceeae4389dd 100644
--- a/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.C
+++ b/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.C
@@ -166,4 +166,23 @@ Foam::C2H5OH::C2H5OH(const dictionary& dict)
 {}
 
 
+Foam::C2H5OH::C2H5OH(const C2H5OH& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.H b/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.H
index 57a692608d5..4b280382c93 100644
--- a/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.H
+++ b/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C2H5OH(const dictionary& dict);
 
+        //- Construct copy
+        C2H5OH(const C2H5OH& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C2H5OH(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C2H6/C2H6.C b/src/thermophysicalModels/liquids/C2H6/C2H6.C
index 57b63c89a86..b9ee6478d0f 100644
--- a/src/thermophysicalModels/liquids/C2H6/C2H6.C
+++ b/src/thermophysicalModels/liquids/C2H6/C2H6.C
@@ -157,4 +157,23 @@ Foam::C2H6::C2H6(const dictionary& dict)
 {}
 
 
+Foam::C2H6::C2H6(const C2H6& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C2H6/C2H6.H b/src/thermophysicalModels/liquids/C2H6/C2H6.H
index f3647fae40e..caaadc13bf7 100644
--- a/src/thermophysicalModels/liquids/C2H6/C2H6.H
+++ b/src/thermophysicalModels/liquids/C2H6/C2H6.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C2H6(const dictionary& dict);
 
+        //- Construct copy
+        C2H6(const C2H6& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C2H6(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C2H6O/C2H6O.C b/src/thermophysicalModels/liquids/C2H6O/C2H6O.C
index d3ea71a5281..da0d737304d 100644
--- a/src/thermophysicalModels/liquids/C2H6O/C2H6O.C
+++ b/src/thermophysicalModels/liquids/C2H6O/C2H6O.C
@@ -166,4 +166,23 @@ Foam::C2H6O::C2H6O(const dictionary& dict)
 {}
 
 
+Foam::C2H6O::C2H6O(const C2H6O& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C2H6O/C2H6O.H b/src/thermophysicalModels/liquids/C2H6O/C2H6O.H
index d4faffa564a..1a1778322b6 100644
--- a/src/thermophysicalModels/liquids/C2H6O/C2H6O.H
+++ b/src/thermophysicalModels/liquids/C2H6O/C2H6O.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C2H6O(const dictionary& dict);
 
+        //- Construct copy
+        C2H6O(const C2H6O& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C2H6O(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C3H6O/C3H6O.C b/src/thermophysicalModels/liquids/C3H6O/C3H6O.C
index b72d1f43d8a..8bddb28e6c0 100644
--- a/src/thermophysicalModels/liquids/C3H6O/C3H6O.C
+++ b/src/thermophysicalModels/liquids/C3H6O/C3H6O.C
@@ -166,4 +166,23 @@ Foam::C3H6O::C3H6O(const dictionary& dict)
 {}
 
 
+Foam::C3H6O::C3H6O(const C3H6O& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C3H6O/C3H6O.H b/src/thermophysicalModels/liquids/C3H6O/C3H6O.H
index 664693ac74b..f6f49ba51a0 100644
--- a/src/thermophysicalModels/liquids/C3H6O/C3H6O.H
+++ b/src/thermophysicalModels/liquids/C3H6O/C3H6O.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C3H6O(const dictionary& dict);
 
+        //- Construct copy
+        C3H6O(const C3H6O& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C3H6O(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C3H8/C3H8.C b/src/thermophysicalModels/liquids/C3H8/C3H8.C
index 79069ed5b60..51acfc3b43e 100644
--- a/src/thermophysicalModels/liquids/C3H8/C3H8.C
+++ b/src/thermophysicalModels/liquids/C3H8/C3H8.C
@@ -156,4 +156,23 @@ Foam::C3H8::C3H8(const dictionary& dict)
 {}
 
 
+Foam::C3H8::C3H8(const C3H8& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C3H8/C3H8.H b/src/thermophysicalModels/liquids/C3H8/C3H8.H
index 88de0f86d3f..b87d7964428 100644
--- a/src/thermophysicalModels/liquids/C3H8/C3H8.H
+++ b/src/thermophysicalModels/liquids/C3H8/C3H8.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C3H8(const dictionary& dict);
 
+        //- Construct copy
+        C3H8(const C3H8& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C3H8(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C4H10O/C4H10O.C b/src/thermophysicalModels/liquids/C4H10O/C4H10O.C
index 10483d5decb..b27f7210155 100644
--- a/src/thermophysicalModels/liquids/C4H10O/C4H10O.C
+++ b/src/thermophysicalModels/liquids/C4H10O/C4H10O.C
@@ -166,4 +166,23 @@ Foam::C4H10O::C4H10O(const dictionary& dict)
 {}
 
 
+Foam::C4H10O::C4H10O(const C4H10O& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C4H10O/C4H10O.H b/src/thermophysicalModels/liquids/C4H10O/C4H10O.H
index 2099cffa8b7..24fd46f7301 100644
--- a/src/thermophysicalModels/liquids/C4H10O/C4H10O.H
+++ b/src/thermophysicalModels/liquids/C4H10O/C4H10O.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C4H10O(const dictionary& dict);
 
+        //- Construct copy
+        C4H10O(const C4H10O& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C4H10O(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C6H14/C6H14.C b/src/thermophysicalModels/liquids/C6H14/C6H14.C
index 607e94217f7..cbee72cf84f 100644
--- a/src/thermophysicalModels/liquids/C6H14/C6H14.C
+++ b/src/thermophysicalModels/liquids/C6H14/C6H14.C
@@ -166,4 +166,23 @@ Foam::C6H14::C6H14(const dictionary& dict)
 {}
 
 
+Foam::C6H14::C6H14(const C6H14& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C6H14/C6H14.H b/src/thermophysicalModels/liquids/C6H14/C6H14.H
index fe97e35f9b6..88a2a845196 100644
--- a/src/thermophysicalModels/liquids/C6H14/C6H14.H
+++ b/src/thermophysicalModels/liquids/C6H14/C6H14.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C6H14(const dictionary& dict);
 
+        //- Construct copy
+        C6H14(const C6H14& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C6H14(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C6H6/C6H6.C b/src/thermophysicalModels/liquids/C6H6/C6H6.C
index 5dd2ee1398c..443aa82185c 100644
--- a/src/thermophysicalModels/liquids/C6H6/C6H6.C
+++ b/src/thermophysicalModels/liquids/C6H6/C6H6.C
@@ -166,4 +166,23 @@ Foam::C6H6::C6H6(const dictionary& dict)
 {}
 
 
+Foam::C6H6::C6H6(const C6H6& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C6H6/C6H6.H b/src/thermophysicalModels/liquids/C6H6/C6H6.H
index 3484656d009..b9939297af7 100644
--- a/src/thermophysicalModels/liquids/C6H6/C6H6.H
+++ b/src/thermophysicalModels/liquids/C6H6/C6H6.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C6H6(const dictionary& dict);
 
+        //- Construct copy
+        C6H6(const C6H6& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C6H6(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C7H16/C7H16.C b/src/thermophysicalModels/liquids/C7H16/C7H16.C
index 15d2b2678bf..7b4d2a2c2d6 100644
--- a/src/thermophysicalModels/liquids/C7H16/C7H16.C
+++ b/src/thermophysicalModels/liquids/C7H16/C7H16.C
@@ -165,4 +165,23 @@ Foam::C7H16::C7H16(const dictionary& dict)
 {}
 
 
+Foam::C7H16::C7H16(const C7H16& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C7H16/C7H16.H b/src/thermophysicalModels/liquids/C7H16/C7H16.H
index ce8b9dfb37e..15f7ab793c7 100644
--- a/src/thermophysicalModels/liquids/C7H16/C7H16.H
+++ b/src/thermophysicalModels/liquids/C7H16/C7H16.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C7H16(const dictionary& dict);
 
+        //- Construct copy
+        C7H16(const C7H16& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C7H16(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C7H8/C7H8.C b/src/thermophysicalModels/liquids/C7H8/C7H8.C
index 311eabbe124..88aae3594b6 100644
--- a/src/thermophysicalModels/liquids/C7H8/C7H8.C
+++ b/src/thermophysicalModels/liquids/C7H8/C7H8.C
@@ -166,4 +166,23 @@ Foam::C7H8::C7H8(const dictionary& dict)
 {}
 
 
+Foam::C7H8::C7H8(const C7H8& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C7H8/C7H8.H b/src/thermophysicalModels/liquids/C7H8/C7H8.H
index 31130737cb5..3829414a749 100644
--- a/src/thermophysicalModels/liquids/C7H8/C7H8.H
+++ b/src/thermophysicalModels/liquids/C7H8/C7H8.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C7H8(const dictionary& dict);
 
+        //- Construct copy
+        C7H8(const C7H8& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C7H8(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C8H10/C8H10.C b/src/thermophysicalModels/liquids/C8H10/C8H10.C
index a7d001394c8..e65e7db2f36 100644
--- a/src/thermophysicalModels/liquids/C8H10/C8H10.C
+++ b/src/thermophysicalModels/liquids/C8H10/C8H10.C
@@ -166,4 +166,23 @@ Foam::C8H10::C8H10(const dictionary& dict)
 {}
 
 
+Foam::C8H10::C8H10(const C8H10& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C8H10/C8H10.H b/src/thermophysicalModels/liquids/C8H10/C8H10.H
index 3757aabee51..b9279689465 100644
--- a/src/thermophysicalModels/liquids/C8H10/C8H10.H
+++ b/src/thermophysicalModels/liquids/C8H10/C8H10.H
@@ -112,6 +112,15 @@ public:
         //- Construct from dictionary
         C8H10(const dictionary& dict);
 
+        //- Construct copy
+        C8H10(const C8H10& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C8H10(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C8H18/C8H18.C b/src/thermophysicalModels/liquids/C8H18/C8H18.C
index a5f3529d1a6..a1c0c71ee45 100644
--- a/src/thermophysicalModels/liquids/C8H18/C8H18.C
+++ b/src/thermophysicalModels/liquids/C8H18/C8H18.C
@@ -166,4 +166,23 @@ Foam::C8H18::C8H18(const dictionary& dict)
 {}
 
 
+Foam::C8H18::C8H18(const C8H18& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C8H18/C8H18.H b/src/thermophysicalModels/liquids/C8H18/C8H18.H
index 57223738b05..cef1f09751c 100644
--- a/src/thermophysicalModels/liquids/C8H18/C8H18.H
+++ b/src/thermophysicalModels/liquids/C8H18/C8H18.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C8H18(const dictionary& dict);
 
+        //- Construct copy
+        C8H18(const C8H18& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C8H18(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/C9H20/C9H20.C b/src/thermophysicalModels/liquids/C9H20/C9H20.C
index 966965dbd27..d3c5dde9479 100644
--- a/src/thermophysicalModels/liquids/C9H20/C9H20.C
+++ b/src/thermophysicalModels/liquids/C9H20/C9H20.C
@@ -166,4 +166,23 @@ Foam::C9H20::C9H20(const dictionary& dict)
 {}
 
 
+Foam::C9H20::C9H20(const C9H20& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/C9H20/C9H20.H b/src/thermophysicalModels/liquids/C9H20/C9H20.H
index 375219da826..fdf0fc77e62 100644
--- a/src/thermophysicalModels/liquids/C9H20/C9H20.H
+++ b/src/thermophysicalModels/liquids/C9H20/C9H20.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         C9H20(const dictionary& dict);
 
+        //- Construct copy
+        C9H20(const C9H20& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new C9H20(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/CH3OH/CH3OH.C b/src/thermophysicalModels/liquids/CH3OH/CH3OH.C
index e93e52aa951..324b21ceaa9 100644
--- a/src/thermophysicalModels/liquids/CH3OH/CH3OH.C
+++ b/src/thermophysicalModels/liquids/CH3OH/CH3OH.C
@@ -166,4 +166,23 @@ Foam::CH3OH::CH3OH(const dictionary& dict)
 {}
 
 
+Foam::CH3OH::CH3OH(const CH3OH& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/CH3OH/CH3OH.H b/src/thermophysicalModels/liquids/CH3OH/CH3OH.H
index 5f90bafe921..cf577d7571b 100644
--- a/src/thermophysicalModels/liquids/CH3OH/CH3OH.H
+++ b/src/thermophysicalModels/liquids/CH3OH/CH3OH.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         CH3OH(const dictionary& dict);
 
+        //- Construct copy
+        CH3OH(const CH3OH& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new CH3OH(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.C b/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.C
index b32f82f269c..21e19255551 100644
--- a/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.C
+++ b/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.C
@@ -151,4 +151,23 @@ Foam::CH4N2O::CH4N2O(const dictionary& dict)
 {}
 
 
+Foam::CH4N2O::CH4N2O(const CH4N2O& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.H b/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.H
index b4d221b42df..de549873265 100644
--- a/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.H
+++ b/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         CH4N2O(const dictionary& dict);
 
+        //- Construct copy
+        CH4N2O(const CH4N2O& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new CH4N2O(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/H2O/H2O.C b/src/thermophysicalModels/liquids/H2O/H2O.C
index 6820731f8bc..ef16dbd7685 100644
--- a/src/thermophysicalModels/liquids/H2O/H2O.C
+++ b/src/thermophysicalModels/liquids/H2O/H2O.C
@@ -173,4 +173,23 @@ Foam::H2O::H2O(const dictionary& dict)
 {}
 
 
+Foam::H2O::H2O(const H2O& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/H2O/H2O.H b/src/thermophysicalModels/liquids/H2O/H2O.H
index a25c9f48db6..8fc694e0ec7 100644
--- a/src/thermophysicalModels/liquids/H2O/H2O.H
+++ b/src/thermophysicalModels/liquids/H2O/H2O.H
@@ -112,6 +112,15 @@ public:
         //- Construct from dictionary
         H2O(const dictionary& dict);
 
+        //- Construct copy
+        H2O(const H2O& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new H2O(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/IC8H18/IC8H18.C b/src/thermophysicalModels/liquids/IC8H18/IC8H18.C
index cfc4736d605..cce8daebd7e 100644
--- a/src/thermophysicalModels/liquids/IC8H18/IC8H18.C
+++ b/src/thermophysicalModels/liquids/IC8H18/IC8H18.C
@@ -166,4 +166,23 @@ Foam::IC8H18::IC8H18(const dictionary& dict)
 {}
 
 
+Foam::IC8H18::IC8H18(const IC8H18& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/IC8H18/IC8H18.H b/src/thermophysicalModels/liquids/IC8H18/IC8H18.H
index 967a458b47c..848b8e11e70 100644
--- a/src/thermophysicalModels/liquids/IC8H18/IC8H18.H
+++ b/src/thermophysicalModels/liquids/IC8H18/IC8H18.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         IC8H18(const dictionary& dict);
 
+        //- Construct copy
+        IC8H18(const IC8H18& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new IC8H18(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/IDEA/IDEA.C b/src/thermophysicalModels/liquids/IDEA/IDEA.C
index 8e113b90c88..1d2966d629e 100644
--- a/src/thermophysicalModels/liquids/IDEA/IDEA.C
+++ b/src/thermophysicalModels/liquids/IDEA/IDEA.C
@@ -186,4 +186,23 @@ Foam::IDEA::IDEA(const dictionary& dict)
 {}
 
 
+Foam::IDEA::IDEA(const IDEA& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/IDEA/IDEA.H b/src/thermophysicalModels/liquids/IDEA/IDEA.H
index f5e6d9152ea..14569dfcff1 100644
--- a/src/thermophysicalModels/liquids/IDEA/IDEA.H
+++ b/src/thermophysicalModels/liquids/IDEA/IDEA.H
@@ -135,6 +135,15 @@ public:
         //- Construct from dictionary
         IDEA(const dictionary& dict);
 
+        //- Construct copy
+        IDEA(const IDEA& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new IDEA(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/MB/MB.C b/src/thermophysicalModels/liquids/MB/MB.C
index c4d6fe38f4b..3c105a83b21 100644
--- a/src/thermophysicalModels/liquids/MB/MB.C
+++ b/src/thermophysicalModels/liquids/MB/MB.C
@@ -150,4 +150,23 @@ Foam::MB::MB(const dictionary& dict)
 {}
 
 
+Foam::MB::MB(const MB& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/MB/MB.H b/src/thermophysicalModels/liquids/MB/MB.H
index 15245c6e47b..060fd2ec528 100644
--- a/src/thermophysicalModels/liquids/MB/MB.H
+++ b/src/thermophysicalModels/liquids/MB/MB.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         MB(const dictionary& dict);
 
+        //- Construct copy
+        MB(const MB& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new MB(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/N2/N2.C b/src/thermophysicalModels/liquids/N2/N2.C
index 5e414122434..b77028fa5e3 100644
--- a/src/thermophysicalModels/liquids/N2/N2.C
+++ b/src/thermophysicalModels/liquids/N2/N2.C
@@ -166,4 +166,23 @@ Foam::N2::N2(const dictionary& dict)
 {}
 
 
+Foam::N2::N2(const N2& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/N2/N2.H b/src/thermophysicalModels/liquids/N2/N2.H
index 6f318f1a452..1a7ea9411eb 100644
--- a/src/thermophysicalModels/liquids/N2/N2.H
+++ b/src/thermophysicalModels/liquids/N2/N2.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         N2(const dictionary& dict);
 
+        //- Construct copy
+        N2(const N2& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new N2(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.C b/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.C
index 9532106b78c..49e26581ee4 100644
--- a/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.C
+++ b/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.C
@@ -158,4 +158,23 @@ Foam::aC10H7CH3::aC10H7CH3(const dictionary& dict)
 {}
 
 
+Foam::aC10H7CH3::aC10H7CH3(const aC10H7CH3& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.H b/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.H
index 05ec2c90a07..a7de909a239 100644
--- a/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.H
+++ b/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         aC10H7CH3(const dictionary& dict);
 
+        //- Construct copy
+        aC10H7CH3(const aC10H7CH3& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new aC10H7CH3(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.C b/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.C
index 656a57d23bb..ee371c9a171 100644
--- a/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.C
+++ b/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.C
@@ -158,4 +158,23 @@ Foam::bC10H7CH3::bC10H7CH3(const dictionary& dict)
 {}
 
 
+Foam::bC10H7CH3::bC10H7CH3(const bC10H7CH3& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.H b/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.H
index d3ff3512913..b9f2361e276 100644
--- a/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.H
+++ b/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.H
@@ -113,6 +113,15 @@ public:
         //- Construct from dictionary
         bC10H7CH3(const dictionary& dict);
 
+        //- Construct copy
+        bC10H7CH3(const bC10H7CH3& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new bC10H7CH3(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.C b/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.C
index 1faec0b0c29..c1b434a1d5c 100644
--- a/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.C
+++ b/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.C
@@ -166,4 +166,23 @@ Foam::iC3H8O::iC3H8O(const dictionary& dict)
 {}
 
 
+Foam::iC3H8O::iC3H8O(const iC3H8O& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.H b/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.H
index 6caa0592224..fdf4279f2c3 100644
--- a/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.H
+++ b/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.H
@@ -111,6 +111,15 @@ public:
         //- Construct from dictionary
         iC3H8O(const dictionary& dict);
 
+        //- Construct copy
+        iC3H8O(const iC3H8O& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new iC3H8O(*this));
+        }
+
 
     // Member Functions
 
diff --git a/src/thermophysicalModels/liquids/liquid/liquid.C b/src/thermophysicalModels/liquids/liquid/liquid.C
index cb3f3221822..f23f87d6378 100644
--- a/src/thermophysicalModels/liquids/liquid/liquid.C
+++ b/src/thermophysicalModels/liquids/liquid/liquid.C
@@ -74,6 +74,10 @@ Foam::liquid::liquid(Istream& is)
     Tc_(readScalar(is)),
     Pc_(readScalar(is)),
     Vc_(readScalar(is)),
+    Zc_(readScalar(is)),
+    Tt_(readScalar(is)),
+    Pt_(readScalar(is)),
+    Tb_(readScalar(is)),
     dipm_(readScalar(is)),
     omega_(readScalar(is)),
     delta_(readScalar(is))
@@ -86,12 +90,32 @@ Foam::liquid::liquid(const dictionary& dict)
     Tc_(readScalar(dict.lookup("Tc"))),
     Pc_(readScalar(dict.lookup("Pc"))),
     Vc_(readScalar(dict.lookup("Vc"))),
+    Zc_(readScalar(dict.lookup("Zc"))),
+    Tt_(readScalar(dict.lookup("Tt"))),
+    Pt_(readScalar(dict.lookup("Pt"))),
+    Tb_(readScalar(dict.lookup("Tb"))),
     dipm_(readScalar(dict.lookup("dipm"))),
     omega_(readScalar(dict.lookup("omega"))),
     delta_(readScalar(dict.lookup("delta")))
 {}
 
 
+Foam::liquid::liquid(const liquid& liq)
+:
+    W_(liq.W_),
+    Tc_(liq.Tc_),
+    Pc_(liq.Pc_),
+    Vc_(liq.Vc_),
+    Zc_(liq.Zc_),
+    Tt_(liq.Tt_),
+    Pt_(liq.Pt_),
+    Tb_(liq.Tb_),
+    dipm_(liq.dipm_),
+    omega_(liq.omega_),
+    delta_(liq.delta_)
+{}
+
+
 // * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * //
 
 Foam::autoPtr<Foam::liquid> Foam::liquid::New(Istream& is)
@@ -203,4 +227,114 @@ Foam::autoPtr<Foam::liquid> Foam::liquid::New(const dictionary& dict)
 }
 
 
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+Foam::scalar Foam::liquid::rho(scalar p, scalar T) const
+{
+    notImplemented("Foam::scalar Foam::liquid::rho(scalar, scalar) const");
+    return 0.0;
+}
+
+
+Foam::scalar Foam::liquid::pv(scalar p, scalar T) const
+{
+    notImplemented("Foam::scalar Foam::liquid::pv(scalar, scalar) const");
+    return 0.0;
+}
+
+
+Foam::scalar Foam::liquid::hl(scalar p, scalar T) const
+{
+    notImplemented("Foam::scalar Foam::liquid::hl(scalar, scalar) const");
+    return 0.0;
+}
+
+
+Foam::scalar Foam::liquid::Cp(scalar p, scalar T) const
+{
+    notImplemented("Foam::scalar Foam::liquid::Cp(scalar, scalar) const");
+    return 0.0;
+}
+
+
+Foam::scalar Foam::liquid::h(scalar p, scalar T) const
+{
+    notImplemented("Foam::scalar Foam::liquid::h(scalar, scalar) const");
+    return 0.0;
+}
+
+
+Foam::scalar Foam::liquid::Cpg(scalar p, scalar T) const
+{
+    notImplemented("Foam::scalar Foam::liquid::Cpg(scalar, scalar) const");
+    return 0.0;
+}
+
+
+Foam::scalar Foam::liquid::mu(scalar p, scalar T) const
+{
+    notImplemented("Foam::scalar Foam::liquid::mu(scalar, scalar) const");
+    return 0.0;
+}
+
+
+Foam::scalar Foam::liquid::mug(scalar p, scalar T) const
+{
+    notImplemented("Foam::scalar Foam::liquid::mug(scalar, scalar) const");
+    return 0.0;
+}
+
+
+Foam::scalar Foam::liquid::K(scalar p, scalar T) const
+{
+    notImplemented("Foam::scalar Foam::liquid::K(scalar, scalar) const");
+    return 0.0;
+}
+
+
+Foam::scalar Foam::liquid::Kg(scalar p, scalar T) const
+{
+    notImplemented("Foam::scalar Foam::liquid::Kg(scalar, scalar) const");
+    return 0.0;
+}
+
+
+Foam::scalar Foam::liquid::sigma(scalar p, scalar T) const
+{
+    notImplemented("Foam::scalar Foam::liquid::sigms(scalar, scalar) const");
+    return 0.0;
+}
+
+
+Foam::scalar Foam::liquid::D(scalar p, scalar T) const
+{
+    notImplemented("Foam::scalar Foam::liquid::D(scalar, scalar) const");
+    return 0.0;
+}
+
+
+Foam::scalar Foam::liquid::D(scalar p, scalar T, scalar Wb) const
+{
+    notImplemented("Foam::scalar Foam::liquid::D(scalar, scalar) const");
+    return 0.0;
+}
+
+
+void Foam::liquid::writeData(Ostream& os) const
+{
+
+    os  << W_ << token::SPACE
+        << Tc_ << token::SPACE
+        << Pc_ << token::SPACE
+        << Vc_ << token::SPACE
+        << Zc_ << token::SPACE
+        << Tt_ << token::SPACE
+        << Pt_ << token::SPACE
+        << Tb_ << token::SPACE
+        << dipm_ << token::SPACE
+        << omega_<< token::SPACE
+        << delta_;
+}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/liquid/liquid.H b/src/thermophysicalModels/liquids/liquid/liquid.H
index 005058857e5..ab3b876d9b0 100644
--- a/src/thermophysicalModels/liquids/liquid/liquid.H
+++ b/src/thermophysicalModels/liquids/liquid/liquid.H
@@ -148,6 +148,15 @@ public:
         //- Construct from dictionary
         liquid(const dictionary& dict);
 
+        //- Construct copy
+        liquid(const liquid& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new liquid(*this));
+        }
+
 
     // Selectors
 
@@ -204,58 +213,49 @@ public:
         // Physical property pure virtual functions
 
             //- Liquid rho [kg/m^3]
-            virtual scalar rho(scalar p, scalar T) const = 0;
+            virtual scalar rho(scalar p, scalar T) const;
 
             //- Vapour pressure [Pa]
-            virtual scalar pv(scalar p, scalar T) const = 0;
+            virtual scalar pv(scalar p, scalar T) const;
 
             //- Heat of vapourisation [J/kg]
-            virtual scalar hl(scalar p, scalar T) const = 0;
+            virtual scalar hl(scalar p, scalar T) const;
 
             //- Liquid heat capacity [J/(kg K)]
-            virtual scalar Cp(scalar p, scalar T) const = 0;
+            virtual scalar Cp(scalar p, scalar T) const;
 
             //- Liquid enthalpy [J/kg] - reference to 298.15 K
-            virtual scalar h(scalar p, scalar T) const = 0;
+            virtual scalar h(scalar p, scalar T) const;
 
             //- Ideal gas heat capacity [J/(kg K)]
-            virtual scalar Cpg(scalar p, scalar T) const = 0;
+            virtual scalar Cpg(scalar p, scalar T) const;
 
             //- Liquid viscosity [Pa s]
-            virtual scalar mu(scalar p, scalar T) const = 0;
+            virtual scalar mu(scalar p, scalar T) const;
 
             //- Vapour viscosity [Pa s]
-            virtual scalar mug(scalar p, scalar T) const = 0;
+            virtual scalar mug(scalar p, scalar T) const;
 
             //- Liquid thermal conductivity  [W/(m K)]
-            virtual scalar K(scalar p, scalar T) const = 0;
+            virtual scalar K(scalar p, scalar T) const;
 
             //- Vapour thermal conductivity  [W/(m K)]
-            virtual scalar Kg(scalar p, scalar T) const = 0;
+            virtual scalar Kg(scalar p, scalar T) const;
 
             //- Surface tension [N/m]
-            virtual scalar sigma(scalar p, scalar T) const = 0;
+            virtual scalar sigma(scalar p, scalar T) const;
 
             //- Vapour diffussivity [m2/s]
-            virtual scalar D(scalar p, scalar T) const = 0;
+            virtual scalar D(scalar p, scalar T) const;
 
             //- Vapour diffussivity [m2/s] with specified binary pair
-            virtual scalar D(scalar p, scalar T, scalar Wb) const = 0;
+            virtual scalar D(scalar p, scalar T, scalar Wb) const;
 
 
     // I-O
 
         //- Write the function coefficients
-        virtual void writeData(Ostream& os) const
-        {
-            os  << W_ << token::SPACE
-                << Tc_ << token::SPACE
-                << Pc_ << token::SPACE
-                << Vc_ << token::SPACE
-                << dipm_ << token::SPACE
-                << omega_<< token::SPACE
-                << delta_;
-        }
+        virtual void writeData(Ostream& os) const;
 
         //- Ostream Operator
         friend Ostream& operator<<(Ostream& os, const liquid& l)
diff --git a/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.C b/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.C
index 6d816baa76e..6725c00493a 100644
--- a/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.C
+++ b/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.C
@@ -166,4 +166,23 @@ Foam::nC3H8O::nC3H8O(const dictionary& dict)
 {}
 
 
+Foam::nC3H8O::nC3H8O(const nC3H8O& liq)
+:
+    liquid(liq),
+    rho_(liq.rho_),
+    pv_(liq.pv_),
+    hl_(liq.hl_),
+    Cp_(liq.Cp_),
+    h_(liq.h_),
+    Cpg_(liq.Cpg_),
+    B_(liq.B_),
+    mu_(liq.mu_),
+    mug_(liq.mug_),
+    K_(liq.K_),
+    Kg_(liq.Kg_),
+    sigma_(liq.sigma_),
+    D_(liq.D_)
+{}
+
+
 // ************************************************************************* //
diff --git a/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.H b/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.H
index f4751b0fcf0..1f34a5ca74e 100644
--- a/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.H
+++ b/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.H
@@ -111,6 +111,15 @@ public:
         //- Construct from dictionary
         nC3H8O(const dictionary& dict);
 
+        //- Construct copy
+        nC3H8O(const nC3H8O& liq);
+
+        //- Construct and return clone
+        virtual autoPtr<liquid> clone() const
+        {
+            return autoPtr<liquid>(new nC3H8O(*this));
+        }
+
 
     // Member Functions
 
-- 
GitLab