From 6e59e9a75fecead0b4cfc309e0ea84067ef9b9d5 Mon Sep 17 00:00:00 2001
From: Sergio Ferraris <sergio@alex.opencfd.co.uk>
Date: Thu, 12 Sep 2013 10:01:52 +0100
Subject: [PATCH] ENH: Adding thermal multi layers to
 externalWallHeatFluxTemperatureFvPatchScalarField

---
 ...allHeatFluxTemperatureFvPatchScalarField.C | 46 +++++++++++++------
 ...allHeatFluxTemperatureFvPatchScalarField.H | 17 +++----
 2 files changed, 41 insertions(+), 22 deletions(-)

diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C b/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C
index a9aef8f49fe..0327dd1da75 100644
--- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C
+++ b/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C
@@ -69,8 +69,8 @@ externalWallHeatFluxTemperatureFvPatchScalarField
     q_(p.size(), 0.0),
     h_(p.size(), 0.0),
     Ta_(p.size(), 0.0),
-    thicknessLayer_(0),
-    kappaLayer_(0)
+    thicknessLayers_(),
+    kappaLayers_()
 {
     this->refValue() = 0.0;
     this->refGrad() = 0.0;
@@ -93,8 +93,8 @@ externalWallHeatFluxTemperatureFvPatchScalarField
     q_(ptf.q_, mapper),
     h_(ptf.h_, mapper),
     Ta_(ptf.Ta_, mapper),
-    thicknessLayer_(ptf.thicknessLayer_),
-    kappaLayer_(ptf.kappaLayer_)
+    thicknessLayers_(ptf.thicknessLayers_),
+    kappaLayers_(ptf.kappaLayers_)
 {}
 
 
@@ -112,8 +112,8 @@ externalWallHeatFluxTemperatureFvPatchScalarField
     q_(p.size(), 0.0),
     h_(p.size(), 0.0),
     Ta_(p.size(), 0.0),
-    thicknessLayer_(dict.lookupOrDefault<scalar>("thicknessLayer", 0.0)),
-    kappaLayer_(dict.lookupOrDefault<scalar>("kappaLayer", 0.0))
+    thicknessLayers_(),
+    kappaLayers_()
 {
     if (dict.found("q") && !dict.found("h") && !dict.found("Ta"))
     {
@@ -125,6 +125,11 @@ externalWallHeatFluxTemperatureFvPatchScalarField
         mode_ = fixedHeatTransferCoeff;
         h_ = scalarField("h", dict, p.size());
         Ta_ = scalarField("Ta", dict, p.size());
+        if (dict.found("thicknessLayers"))
+        {
+            dict.lookup("thicknessLayers") >> thicknessLayers_;
+            dict.lookup("kappaLayers") >> kappaLayers_;
+        }
     }
     else
     {
@@ -176,8 +181,8 @@ externalWallHeatFluxTemperatureFvPatchScalarField
     q_(tppsf.q_),
     h_(tppsf.h_),
     Ta_(tppsf.Ta_),
-    thicknessLayer_(tppsf.thicknessLayer_),
-    kappaLayer_(tppsf.kappaLayer_)
+    thicknessLayers_(tppsf.thicknessLayers_),
+    kappaLayers_(tppsf.kappaLayers_)
 {}
 
 
@@ -194,8 +199,8 @@ externalWallHeatFluxTemperatureFvPatchScalarField
     q_(tppsf.q_),
     h_(tppsf.h_),
     Ta_(tppsf.Ta_),
-    thicknessLayer_(tppsf.thicknessLayer_),
-    kappaLayer_(tppsf.kappaLayer_)
+    thicknessLayers_(tppsf.thicknessLayers_),
+    kappaLayers_(tppsf.kappaLayers_)
 {}
 
 
@@ -252,7 +257,19 @@ void Foam::externalWallHeatFluxTemperatureFvPatchScalarField::updateCoeffs()
         }
         case fixedHeatTransferCoeff:
         {
-            q = (Ta_ - Tp)*(1.0/h_ + thicknessLayer_/(kappaLayer_ + VSMALL));
+            scalar totalSolidRes = 0.0;
+            if (thicknessLayers_.size() > 0)
+            {
+                forAll (thicknessLayers_, iLayer)
+                {
+                    const scalar l = thicknessLayers_[iLayer];
+                    if (l > 0.0)
+                    {
+                        totalSolidRes += kappaLayers_[iLayer]/l;
+                    }
+                }
+            }
+            q = (Ta_ - Tp)*(1.0/h_ + totalSolidRes);
             break;
         }
         default:
@@ -308,9 +325,6 @@ void Foam::externalWallHeatFluxTemperatureFvPatchScalarField::write
 {
     mixedFvPatchScalarField::write(os);
     temperatureCoupledBase::write(os);
-    os.writeKeyword("thicknessLayer")<< thicknessLayer_
-        << token::END_STATEMENT << nl;
-    os.writeKeyword("kappaLayer")<< kappaLayer_ << token::END_STATEMENT << nl;
 
     switch (mode_)
     {
@@ -323,6 +337,10 @@ void Foam::externalWallHeatFluxTemperatureFvPatchScalarField::write
         {
             h_.writeEntry("h", os);
             Ta_.writeEntry("Ta", os);
+            os.writeKeyword("thicknessLayers")<< thicknessLayers_
+                << token::END_STATEMENT << nl;
+            os.writeKeyword("kappaLayers")<< kappaLayers_
+                << token::END_STATEMENT << nl;
             break;
         }
         default:
diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.H b/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.H
index d8c4bc9a12a..000bc8473ca 100644
--- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.H
+++ b/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.H
@@ -26,8 +26,9 @@ Class
 
 Description
     This boundary condition supplies a heat flux condition for temperature
-    on an external wall.Optional thin thermal layer resistance can be
-    specified through thicknessLayer and kappaLayer entries.
+    on an external wall. Optional thin thermal layer resistances can be
+    specified through thicknessLayers and kappaLayers entries for the
+    fixed heat transfer coefficient mode.
 
     The condition can operate in two modes:
         \li fixed heat transfer coefficient: supply h and Ta
@@ -52,8 +53,8 @@ Description
             q               uniform 1000;      // heat flux / [W/m2]
             Ta              uniform 300.0;     // ambient temperature /[K]
             h               uniform 10.0;      // heat transfer coeff /[W/Km2]
-            thicknessLayer  0.001              // thickness of layer [m]
-            kappaLayer      0.0                // thermal conductivity of
+            thicknessLayers (0.1 0.2 0.3 0.4); // thickness of layer [m]
+            kappaLayers     (1 2 3 4)          // thermal conductivity of
                                                // layer [W/m/K]
             value           uniform 300.0;     // initial temperature / [K]
             kappaName       none;
@@ -118,11 +119,11 @@ private:
         //- Ambient temperature / [K]
         scalarField Ta_;
 
-        //- Thickness of the thin wall
-        scalar thicknessLayer_;
+        //- Thickness of layers
+        scalarList thicknessLayers_;
 
-        //- Thermal conductivity of the thin wall
-        scalar kappaLayer_;
+        //- Conductivity of layers
+        scalarList kappaLayers_;
 
 
 public:
-- 
GitLab