From 959d769fa32eea0c7a113d9e422ae3b22d372747 Mon Sep 17 00:00:00 2001
From: andy <andy>
Date: Tue, 5 Nov 2013 15:57:33 +0000
Subject: [PATCH] ENH: lagrangian - moved poissionsRatio and youngsModulus to
 CollidingCloud

---
 .../Templates/CollidingCloud/CollidingCloud.C |  2 +
 .../Templates/CollidingCloud/CollidingCloud.H |  9 +++
 .../CollidingCloud/CollidingCloudI.H          |  8 ++
 .../CollidingParcel/CollidingParcel.H         | 52 +++++++++++++
 .../CollidingParcel/CollidingParcelI.H        | 77 ++++++++++++++++++-
 .../KinematicParcel/KinematicParcel.H         | 16 +---
 .../KinematicParcel/KinematicParcelI.H        | 36 ++-------
 7 files changed, 153 insertions(+), 47 deletions(-)

diff --git a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C
index 8292b9712b1..3ad01176c08 100644
--- a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C
+++ b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C
@@ -92,6 +92,7 @@ Foam::CollidingCloud<CloudType>::CollidingCloud
 )
 :
     CloudType(cloudName, rho, U, mu, g, false),
+    constProps_(this->particleProperties()),
     collisionModel_(NULL)
 {
     if (this->solution().steadyState())
@@ -246,4 +247,5 @@ void Foam::CollidingCloud<CloudType>::info()
         << rotationalKineticEnergy << nl;
 }
 
+
 // ************************************************************************* //
diff --git a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.H b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.H
index 3b42061bf43..ceac587e933 100644
--- a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.H
+++ b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.H
@@ -97,6 +97,10 @@ protected:
 
     // Protected data
 
+        //- Thermo parcel constant properties
+        typename parcelType::constantProperties constProps_;
+
+
         // References to the cloud sub-models
 
             //- Collision model
@@ -180,6 +184,11 @@ public:
             //- Return a reference to the cloud copy
             inline const CollidingCloud& cloudCopy() const;
 
+            //- Return the constant properties
+            inline const typename parcelType::constantProperties&
+                constProps() const;
+
+
             //- If the collision model controls the wall interaction,
             //  then the wall impact distance should be zero.
             //  Otherwise, it should be allowed to be the value from
diff --git a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloudI.H b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloudI.H
index 1dedd5da9ce..f22610f9674 100644
--- a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloudI.H
+++ b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloudI.H
@@ -33,6 +33,14 @@ Foam::CollidingCloud<CloudType>::cloudCopy() const
 }
 
 
+template<class CloudType>
+inline const typename CloudType::particleType::constantProperties&
+Foam::CollidingCloud<CloudType>::constProps() const
+{
+    return constProps_;
+}
+
+
 template<class CloudType>
 inline const Foam::CollisionModel<Foam::CollidingCloud<CloudType> >&
 Foam::CollidingCloud<CloudType>::collision() const
diff --git a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.H b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.H
index 00cadb13ed4..6fd579cd7bf 100644
--- a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.H
@@ -74,6 +74,58 @@ class CollidingParcel
 :
     public ParcelType
 {
+public:
+
+    //- Class to hold thermo particle constant properties
+    class constantProperties
+    :
+        public ParcelType::constantProperties
+    {
+
+        // Private data
+
+            //- Young's modulus [N/m2]
+            demandDrivenEntry<scalar> youngsModulus_;
+
+            //- Poisson's ratio
+            demandDrivenEntry<scalar> poissonsRatio_;
+
+
+    public:
+
+        // Constructors
+
+            //- Null constructor
+            constantProperties();
+
+            //- Copy constructor
+            constantProperties(const constantProperties& cp);
+
+            //- Construct from dictionary
+            constantProperties(const dictionary& parentDict);
+
+            //- Construct from components
+            constantProperties
+            (
+                const label parcelTypeId,
+                const scalar rhoMin,
+                const scalar rho0,
+                const scalar minParticleMass,
+                const scalar youngsModulus,
+                const scalar poissonsRatio
+            );
+
+
+        // Member functions
+
+            //- Return const access to Young's Modulus
+            inline scalar youngsModulus() const;
+
+            //- Return const access to Poisson's ratio
+            inline scalar poissonsRatio() const;
+    };
+
+
 protected:
 
     // Protected data
diff --git a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcelI.H b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcelI.H
index cb8fb964fee..9490aba9c7e 100644
--- a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcelI.H
+++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcelI.H
@@ -25,6 +25,63 @@ License
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
+template<class ParcelType>
+inline Foam::CollidingParcel<ParcelType>::constantProperties::
+constantProperties()
+:
+    ParcelType::constantProperties(),
+    youngsModulus_(this->dict_, 0.0),
+    poissonsRatio_(this->dict_, 0.0)
+{}
+
+
+template<class ParcelType>
+inline Foam::CollidingParcel<ParcelType>::constantProperties::constantProperties
+(
+    const constantProperties& cp
+)
+:
+    ParcelType::constantProperties(cp),
+    youngsModulus_(cp.youngsModulus_),
+    poissonsRatio_(cp.poissonsRatio_)
+{}
+
+
+template<class ParcelType>
+inline Foam::CollidingParcel<ParcelType>::constantProperties::constantProperties
+(
+    const dictionary& parentDict
+)
+:
+    ParcelType::constantProperties(parentDict),
+    youngsModulus_(this->dict_, "youngsModulus"),
+    poissonsRatio_(this->dict_, "poissonsRatio")
+{}
+
+
+template<class ParcelType>
+inline Foam::CollidingParcel<ParcelType>::constantProperties::constantProperties
+(
+    const label parcelTypeId,
+    const scalar rhoMin,
+    const scalar rho0,
+    const scalar minParticleMass,
+    const scalar youngsModulus,
+    const scalar poissonsRatio
+)
+:
+    ParcelType::constantProperties
+    (
+        parcelTypeId,
+        rhoMin,
+        rho0,
+        minParticleMass
+    ),
+    youngsModulus_(this->dict_, youngsModulus),
+    poissonsRatio_(this->dict_, poissonsRatio)
+{}
+
+
 template<class ParcelType>
 inline Foam::CollidingParcel<ParcelType>::CollidingParcel
 (
@@ -83,7 +140,25 @@ inline Foam::CollidingParcel<ParcelType>::CollidingParcel
 {}
 
 
-// * * * * * * * CollidingParcel Member Functions  * * * * * * * //
+// * * * * * * * * * constantProperties Member Functions * * * * * * * * * * //
+
+template<class ParcelType>
+inline Foam::scalar
+Foam::CollidingParcel<ParcelType>::constantProperties::youngsModulus() const
+{
+    return youngsModulus_.value();
+}
+
+
+template<class ParcelType>
+inline Foam::scalar
+Foam::CollidingParcel<ParcelType>::constantProperties::poissonsRatio() const
+{
+    return poissonsRatio_.value();
+}
+
+
+// * * * * * * * * * * CollidingParcel Member Functions  * * * * * * * * * * //
 
 template<class ParcelType>
 inline const Foam::vector& Foam::CollidingParcel<ParcelType>::f() const
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
index 929d24bdf2c..b7b24059a3d 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
@@ -108,12 +108,6 @@ public:
             //- Minimum particle mass [kg]
             demandDrivenEntry<scalar> minParticleMass_;
 
-            //- Young's modulus [N/m2]
-            demandDrivenEntry<scalar> youngsModulus_;
-
-            //- Poisson's ratio
-            demandDrivenEntry<scalar> poissonsRatio_;
-
 
     public:
 
@@ -134,9 +128,7 @@ public:
                 const label parcelTypeId,
                 const scalar rhoMin,
                 const scalar rho0,
-                const scalar minParticleMass,
-                const scalar youngsModulus,
-                const scalar poissonsRatio
+                const scalar minParticleMass
             );
 
 
@@ -156,12 +148,6 @@ public:
 
             //- Return const access to the minimum particle mass
             inline scalar minParticleMass() const;
-
-            //- Return const access to Young's Modulus
-            inline scalar youngsModulus() const;
-
-            //- Return const access to Poisson's ratio
-            inline scalar poissonsRatio() const;
     };
 
 
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H
index dafcf471ebb..19dc18c1301 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H
@@ -37,9 +37,7 @@ Foam::KinematicParcel<ParcelType>::constantProperties::constantProperties()
     parcelTypeId_(dict_, -1),
     rhoMin_(dict_, 0.0),
     rho0_(dict_, 0.0),
-    minParticleMass_(dict_, 0.0),
-    youngsModulus_(dict_, 0.0),
-    poissonsRatio_(dict_, 0.0)
+    minParticleMass_(dict_, 0.0)
 {}
 
 
@@ -53,9 +51,7 @@ inline Foam::KinematicParcel<ParcelType>::constantProperties::constantProperties
     parcelTypeId_(cp.parcelTypeId_),
     rhoMin_(cp.rhoMin_),
     rho0_(cp.rho0_),
-    minParticleMass_(cp.minParticleMass_),
-    youngsModulus_(cp.youngsModulus_),
-    poissonsRatio_(cp.poissonsRatio_)
+    minParticleMass_(cp.minParticleMass_)
 {}
 
 
@@ -69,9 +65,7 @@ inline Foam::KinematicParcel<ParcelType>::constantProperties::constantProperties
     parcelTypeId_(dict_, "parcelTypeId", 1),
     rhoMin_(dict_, "rhoMin", 1e-15),
     rho0_(dict_, "rho0"),
-    minParticleMass_(dict_, "minParticleMass", 1e-15),
-    youngsModulus_(dict_, "youngsModulus"),
-    poissonsRatio_(dict_, "poissonsRatio")
+    minParticleMass_(dict_, "minParticleMass", 1e-15)
 {}
 
 
@@ -81,18 +75,14 @@ inline Foam::KinematicParcel<ParcelType>::constantProperties::constantProperties
     const label parcelTypeId,
     const scalar rhoMin,
     const scalar rho0,
-    const scalar minParticleMass,
-    const scalar youngsModulus,
-    const scalar poissonsRatio
+    const scalar minParticleMass
 )
 :
     dict_(dictionary::null),
     parcelTypeId_(dict_, parcelTypeId),
     rhoMin_(dict_, rhoMin),
     rho0_(dict_, rho0),
-    minParticleMass_(dict_, minParticleMass),
-    youngsModulus_(dict_, youngsModulus),
-    poissonsRatio_(dict_, poissonsRatio)
+    minParticleMass_(dict_, minParticleMass)
 {}
 
 
@@ -198,22 +188,6 @@ Foam::KinematicParcel<ParcelType>::constantProperties::minParticleMass() const
 }
 
 
-template<class ParcelType>
-inline Foam::scalar
-Foam::KinematicParcel<ParcelType>::constantProperties::youngsModulus() const
-{
-    return youngsModulus_.value();
-}
-
-
-template<class ParcelType>
-inline Foam::scalar
-Foam::KinematicParcel<ParcelType>::constantProperties::poissonsRatio() const
-{
-    return poissonsRatio_.value();
-}
-
-
 // * * * * * * * KinematicParcel Member Functions  * * * * * * * //
 
 template<class ParcelType>
-- 
GitLab