From 509450e438f5d5d45a024128b1b42468b52d270b Mon Sep 17 00:00:00 2001
From: Henry Weller <http://cfd.direct>
Date: Mon, 26 Jun 2017 17:36:10 +0100
Subject: [PATCH] saturationModels::function1: New Function1 Tsat model

based on code contributed by Juho Peltola, VTT.

Resolves contribution request https://bugs.openfoam.org/view.php?id=2573
---
 .../interfacialCompositionModels/Make/files   |   1 +
 .../saturationModels/function1/function1.C    | 142 ++++++++++++++++++
 .../saturationModels/function1/function1.H    | 142 ++++++++++++++++++
 3 files changed, 285 insertions(+)
 create mode 100644 applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/saturationModels/function1/function1.C
 create mode 100644 applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/saturationModels/function1/function1.H

diff --git a/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/Make/files b/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/Make/files
index 0642107d64..34919abb2b 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/Make/files
+++ b/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/Make/files
@@ -17,6 +17,7 @@ saturationModels/Antoine/Antoine.C
 saturationModels/AntoineExtended/AntoineExtended.C
 saturationModels/ArdenBuck/ArdenBuck.C
 saturationModels/polynomial/polynomial.C
+saturationModels/function1/function1.C
 saturationModels/constantSaturationConditions/constantSaturationConditions.C
 
 LIB = $(FOAM_LIBBIN)/libreactingEulerianInterfacialCompositionModels
diff --git a/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/saturationModels/function1/function1.C b/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/saturationModels/function1/function1.C
new file mode 100644
index 0000000000..f165c24d29
--- /dev/null
+++ b/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/saturationModels/function1/function1.C
@@ -0,0 +1,142 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2017 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "function1.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace saturationModels
+{
+    defineTypeNameAndDebug(function1, 0);
+    addToRunTimeSelectionTable(saturationModel, function1, dictionary);
+}
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::saturationModels::function1::function1(const dictionary& dict)
+:
+    saturationModel(),
+    function_
+    (
+        Function1<scalar>::New("function", dict)
+    )
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::saturationModels::function1::~function1()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+Foam::tmp<Foam::volScalarField>
+Foam::saturationModels::function1::pSat
+(
+    const volScalarField& T
+) const
+{
+    NotImplemented;
+    return volScalarField::null();
+}
+
+
+Foam::tmp<Foam::volScalarField>
+Foam::saturationModels::function1::pSatPrime
+(
+    const volScalarField& T
+) const
+{
+    NotImplemented;
+    return volScalarField::null();
+}
+
+
+Foam::tmp<Foam::volScalarField>
+Foam::saturationModels::function1::lnPSat
+(
+    const volScalarField& T
+) const
+{
+    NotImplemented;
+    return volScalarField::null();
+}
+
+
+Foam::tmp<Foam::volScalarField>
+Foam::saturationModels::function1::Tsat
+(
+    const volScalarField& p
+) const
+{
+    tmp<volScalarField> tTsat
+    (
+        new volScalarField
+        (
+            IOobject
+            (
+                "Tsat",
+                p.mesh().time().timeName(),
+                p.mesh(),
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            p.mesh(),
+            dimensionedScalar("zero", dimTemperature, 0)
+        )
+    );
+
+    volScalarField& Tsat = tTsat.ref();
+
+    forAll(Tsat, celli)
+    {
+        Tsat[celli] = function_->value(p[celli]);
+    }
+
+    volScalarField::Boundary& TsatBf = Tsat.boundaryFieldRef();
+
+    forAll(Tsat.boundaryField(), patchi)
+    {
+        scalarField& Tsatp = TsatBf[patchi];
+        const scalarField& pp = p.boundaryField()[patchi];
+
+        forAll(Tsatp, facei)
+        {
+            Tsatp[facei] = function_->value(pp[facei]);
+
+        }
+    }
+
+    return tTsat;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/saturationModels/function1/function1.H b/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/saturationModels/function1/function1.H
new file mode 100644
index 0000000000..bbac62d50b
--- /dev/null
+++ b/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/saturationModels/function1/function1.H
@@ -0,0 +1,142 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2017 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::saturationModels::function1
+
+Description
+    Saturation vapour temperature in terms of
+    the vapour pressure (in Pa). The saturation temperature in Kelvins is
+    specified as a Foam::Function1 type, to enable use of, e.g. constant,
+    polynomial, table values.
+
+    Currently this class only provides \f$T_sat\f$, the inverse function to
+    return the vapour pressure for a given temperature are not implemented.
+
+    Examples:
+
+    \verbatim
+        type function1;
+        function polynomial
+        (
+            (308.0422       0)
+            (0.0015096      1)
+            (-1.61589e-8    2)
+            (1.114106e-13   3)
+            (-4.52216e-19   4)
+            (1.05192e-24    5)
+            (-1.2953e-30    6)
+            (6.5365e-37     7)
+        )
+    \endverbatim
+
+    \verbatim
+        type function1;
+
+        function csvFile;
+        functionCoeffs
+        {
+            nHeaderLine         1;
+            refColumn           0;
+            componentColumns    (1);
+            separator           ",";
+            mergeSeparators     no;
+            file                "filename.csv";
+            outOfBounds         clamp;
+            interpolationScheme linear;
+        };
+    \endverbatim
+
+SourceFiles
+    function1.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef function1_saturationModel_H
+#define function1_saturationModel_H
+
+#include "saturationModel.H"
+#include "Function1.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace saturationModels
+{
+
+/*---------------------------------------------------------------------------*\
+                         Class function1 Declaration
+\*---------------------------------------------------------------------------*/
+
+class function1
+:
+    public saturationModel
+{
+    // Private data
+
+        //- Saturation temperature as a function of pressure
+        autoPtr<Function1<scalar>> function_;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("function1");
+
+    // Constructors
+
+        //- Construct from a dictionary
+        function1(const dictionary& dict);
+
+
+    //- Destructor
+    virtual ~function1();
+
+
+    // Member Functions
+
+        //- Saturation pressure
+        virtual tmp<volScalarField> pSat(const volScalarField& T) const;
+
+        //- Saturation pressure derivetive w.r.t. temperature
+        virtual tmp<volScalarField> pSatPrime(const volScalarField& T) const;
+
+        //- Natural log of the saturation pressure
+        virtual tmp<volScalarField> lnPSat(const volScalarField& T) const;
+
+        //- Saturation temperature
+        virtual tmp<volScalarField> Tsat(const volScalarField& p) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace saturationModels
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
-- 
GitLab