From b3c3c86a0663fd1552e718d31c9a035b4aacf20d Mon Sep 17 00:00:00 2001
From: Henry <Henry>
Date: Tue, 15 Apr 2014 12:42:28 +0100
Subject: [PATCH] interRegionHeatTransferModel: Corrected semi-implicit
 treatment of energy h and e, non-constant Cp/Cv and non-zero origin now
 supported

---
 .../interRegionHeatTransferModel.C               | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/fvOptions/sources/interRegion/interRegionHeatTransferModel/interRegionHeatTransferModel/interRegionHeatTransferModel.C b/src/fvOptions/sources/interRegion/interRegionHeatTransferModel/interRegionHeatTransferModel/interRegionHeatTransferModel.C
index 25b18606dc8..6dd8c3f0731 100644
--- a/src/fvOptions/sources/interRegion/interRegionHeatTransferModel/interRegionHeatTransferModel/interRegionHeatTransferModel.C
+++ b/src/fvOptions/sources/interRegion/interRegionHeatTransferModel/interRegionHeatTransferModel/interRegionHeatTransferModel.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2011-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2011-2014 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -170,7 +170,7 @@ void Foam::fv::interRegionHeatTransferModel::addSup
 
     correct();
 
-    const volScalarField& h = eqn.psi();
+    const volScalarField& he = eqn.psi();
 
     const volScalarField& T = mesh_.lookupObject<volScalarField>(TName_);
 
@@ -214,19 +214,21 @@ void Foam::fv::interRegionHeatTransferModel::addSup
 
     if (semiImplicit_)
     {
-        if (h.dimensions() == dimEnergy/dimMass)
+        if (he.dimensions() == dimEnergy/dimMass)
         {
             if (mesh_.foundObject<fluidThermo>("thermophysicalProperties"))
             {
                 const basicThermo& thermo =
                    mesh_.lookupObject<basicThermo>("thermophysicalProperties");
 
-                eqn += htc_*Tmapped - fvm::SuSp(htc_/thermo.Cp(), h);
+                volScalarField htcByCpv(htc_/thermo.Cpv());
+
+                eqn += htc_*(Tmapped - T) + htcByCpv*he - fvm::Sp(htcByCpv, he);
 
                 if (debug)
                 {
                     const dimensionedScalar energy =
-                        fvc::domainIntegrate(htc_*(h/thermo.Cp() - Tmapped));
+                        fvc::domainIntegrate(htc_*(he/thermo.Cp() - Tmapped));
 
                     Info<< "Energy exchange from region " << nbrMesh.name()
                         << " To " << mesh_.name() << " : " <<  energy.value()
@@ -251,9 +253,9 @@ void Foam::fv::interRegionHeatTransferModel::addSup
                     << exit(FatalError);
             }
         }
-        else if (h.dimensions() == dimTemperature)
+        else if (he.dimensions() == dimTemperature)
         {
-            eqn += htc_*Tmapped - fvm::SuSp(htc_, h);
+            eqn += htc_*Tmapped - fvm::Sp(htc_, he);
         }
     }
     else
-- 
GitLab