From f5fd3227b979d1de5530f3d4e43929dd493fc667 Mon Sep 17 00:00:00 2001
From: Henry Weller <http://cfd.direct>
Date: Sun, 20 Dec 2015 19:12:11 +0000
Subject: [PATCH] temperatureDependentAlphaContactAngleFvPatchScalarField:
 Temperature-dependent constant alphaContactAngle scalar boundary condition

Evaluates the contact angle as a function of the optionally specified
temperature field (defaults to T).  The "theta0" function is provided as
a DataEntry currently supporting:
    CompatibilityConstant
    constant
    csvFile
    polynomial
    table
    tableFile
---
 .../twoPhaseProperties/Make/files             |   1 +
 ...ndentAlphaContactAngleFvPatchScalarField.C | 141 ++++++++++++++
 ...ndentAlphaContactAngleFvPatchScalarField.H | 182 ++++++++++++++++++
 3 files changed, 324 insertions(+)
 create mode 100644 src/transportModels/twoPhaseProperties/alphaContactAngle/temperatureDependentAlphaContactAngle/temperatureDependentAlphaContactAngleFvPatchScalarField.C
 create mode 100644 src/transportModels/twoPhaseProperties/alphaContactAngle/temperatureDependentAlphaContactAngle/temperatureDependentAlphaContactAngleFvPatchScalarField.H

diff --git a/src/transportModels/twoPhaseProperties/Make/files b/src/transportModels/twoPhaseProperties/Make/files
index 5457dcde52e..2e5b03ff0e2 100644
--- a/src/transportModels/twoPhaseProperties/Make/files
+++ b/src/transportModels/twoPhaseProperties/Make/files
@@ -1,5 +1,6 @@
 alphaContactAngle/alphaContactAngle/alphaContactAngleFvPatchScalarField.C
 alphaContactAngle/constantAlphaContactAngle/constantAlphaContactAngleFvPatchScalarField.C
+alphaContactAngle/temperatureDependentAlphaContactAngle/temperatureDependentAlphaContactAngleFvPatchScalarField.C
 alphaContactAngle/dynamicAlphaContactAngle/dynamicAlphaContactAngleFvPatchScalarField.C
 alphaContactAngle/timeVaryingAlphaContactAngle/timeVaryingAlphaContactAngleFvPatchScalarField.C
 alphaFixedPressure/alphaFixedPressureFvPatchScalarField.C
diff --git a/src/transportModels/twoPhaseProperties/alphaContactAngle/temperatureDependentAlphaContactAngle/temperatureDependentAlphaContactAngleFvPatchScalarField.C b/src/transportModels/twoPhaseProperties/alphaContactAngle/temperatureDependentAlphaContactAngle/temperatureDependentAlphaContactAngleFvPatchScalarField.C
new file mode 100644
index 00000000000..e39da64c067
--- /dev/null
+++ b/src/transportModels/twoPhaseProperties/alphaContactAngle/temperatureDependentAlphaContactAngle/temperatureDependentAlphaContactAngleFvPatchScalarField.C
@@ -0,0 +1,141 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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 "temperatureDependentAlphaContactAngleFvPatchScalarField.H"
+#include "fvPatchFieldMapper.H"
+#include "volFields.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::temperatureDependentAlphaContactAngleFvPatchScalarField::
+temperatureDependentAlphaContactAngleFvPatchScalarField
+(
+    const fvPatch& p,
+    const DimensionedField<scalar, volMesh>& iF
+)
+:
+    alphaContactAngleFvPatchScalarField(p, iF),
+    TName_("T"),
+    theta0_()
+{}
+
+
+Foam::temperatureDependentAlphaContactAngleFvPatchScalarField::
+temperatureDependentAlphaContactAngleFvPatchScalarField
+(
+    const fvPatch& p,
+    const DimensionedField<scalar, volMesh>& iF,
+    const dictionary& dict
+)
+:
+    alphaContactAngleFvPatchScalarField(p, iF, dict),
+    TName_(dict.lookupOrDefault<word>("T", "T")),
+    theta0_(DataEntry<scalar>::New("theta0", dict))
+{
+    evaluate();
+}
+
+
+Foam::temperatureDependentAlphaContactAngleFvPatchScalarField::
+temperatureDependentAlphaContactAngleFvPatchScalarField
+(
+    const temperatureDependentAlphaContactAngleFvPatchScalarField& psf,
+    const fvPatch& p,
+    const DimensionedField<scalar, volMesh>& iF,
+    const fvPatchFieldMapper& mapper
+)
+:
+    alphaContactAngleFvPatchScalarField(psf, p, iF, mapper),
+    TName_(psf.TName_),
+    theta0_(psf.theta0_, false)
+{}
+
+
+Foam::temperatureDependentAlphaContactAngleFvPatchScalarField::
+temperatureDependentAlphaContactAngleFvPatchScalarField
+(
+    const temperatureDependentAlphaContactAngleFvPatchScalarField& psf
+)
+:
+    alphaContactAngleFvPatchScalarField(psf),
+    TName_(psf.TName_),
+    theta0_(psf.theta0_, false)
+{}
+
+
+Foam::temperatureDependentAlphaContactAngleFvPatchScalarField::
+temperatureDependentAlphaContactAngleFvPatchScalarField
+(
+    const temperatureDependentAlphaContactAngleFvPatchScalarField& psf,
+    const DimensionedField<scalar, volMesh>& iF
+)
+:
+    alphaContactAngleFvPatchScalarField(psf, iF),
+    TName_(psf.TName_),
+    theta0_(psf.theta0_, false)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+Foam::tmp<Foam::scalarField>
+Foam::temperatureDependentAlphaContactAngleFvPatchScalarField::theta
+(
+    const fvPatchVectorField&,
+    const fvsPatchVectorField&
+) const
+{
+    return theta0_->value
+    (
+        patch().lookupPatchField<volScalarField, scalar>(TName_)
+    );
+}
+
+
+void Foam::temperatureDependentAlphaContactAngleFvPatchScalarField::write
+(
+    Ostream& os
+) const
+{
+    alphaContactAngleFvPatchScalarField::write(os);
+    writeEntryIfDifferent<word>(os, "T", "T", TName_);
+    theta0_->writeData(os);
+    writeEntry("value", os);
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    makePatchTypeField
+    (
+        fvPatchScalarField,
+        temperatureDependentAlphaContactAngleFvPatchScalarField
+    );
+}
+
+// ************************************************************************* //
diff --git a/src/transportModels/twoPhaseProperties/alphaContactAngle/temperatureDependentAlphaContactAngle/temperatureDependentAlphaContactAngleFvPatchScalarField.H b/src/transportModels/twoPhaseProperties/alphaContactAngle/temperatureDependentAlphaContactAngle/temperatureDependentAlphaContactAngleFvPatchScalarField.H
new file mode 100644
index 00000000000..ae92f01ae68
--- /dev/null
+++ b/src/transportModels/twoPhaseProperties/alphaContactAngle/temperatureDependentAlphaContactAngle/temperatureDependentAlphaContactAngleFvPatchScalarField.H
@@ -0,0 +1,182 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2015 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::temperatureDependentAlphaContactAngleFvPatchScalarField
+
+Description
+    Temperature-dependent constant alphaContactAngle scalar boundary condition.
+
+    \heading Patch usage
+
+    \table
+        Property     | Description             | Required    | Default value
+        TName        | Temperature field name  | no          | T
+        theta0       | Contact angle data      | yes         |
+    \endtable
+
+    Example of the boundary condition specification:
+    \verbatim
+    myPatch
+    {
+        type            temperatureDependentAlphaContactAngle;
+        theta0          constant 60;
+    }
+    \endverbatim
+
+SeeAlso
+    Foam::alphaContactAngleFvPatchScalarField
+    Foam::constantAlphaContactAngleFvPatchScalarField
+
+SourceFiles
+    temperatureDependentAlphaContactAngleFvPatchScalarField.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef temperatureDependentAlphaContactAngleFvPatchScalarField_H
+#define temperatureDependentAlphaContactAngleFvPatchScalarField_H
+
+#include "alphaContactAngleFvPatchScalarField.H"
+#include "DataEntry.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+       Class temperatureDependentAlphaContactAngleFvPatch Declaration
+\*---------------------------------------------------------------------------*/
+
+class temperatureDependentAlphaContactAngleFvPatchScalarField
+:
+    public alphaContactAngleFvPatchScalarField
+{
+    // Private data
+
+        //- Name of temperature field, default = "T"
+        word TName_;
+
+        //- Equilibrium contact angle table
+        autoPtr<DataEntry<scalar> > theta0_;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("temperatureDependentAlphaContactAngle");
+
+
+    // Constructors
+
+        //- Construct from patch and internal field
+        temperatureDependentAlphaContactAngleFvPatchScalarField
+        (
+            const fvPatch&,
+            const DimensionedField<scalar, volMesh>&
+        );
+
+        //- Construct from patch, internal field and dictionary
+        temperatureDependentAlphaContactAngleFvPatchScalarField
+        (
+            const fvPatch&,
+            const DimensionedField<scalar, volMesh>&,
+            const dictionary&
+        );
+
+        //- Construct by mapping given
+        //  temperatureDependentAlphaContactAngleFvPatchScalarField
+        //  onto a new patch
+        temperatureDependentAlphaContactAngleFvPatchScalarField
+        (
+            const temperatureDependentAlphaContactAngleFvPatchScalarField&,
+            const fvPatch&,
+            const DimensionedField<scalar, volMesh>&,
+            const fvPatchFieldMapper&
+        );
+
+        //- Construct as copy
+        temperatureDependentAlphaContactAngleFvPatchScalarField
+        (
+            const temperatureDependentAlphaContactAngleFvPatchScalarField&
+        );
+
+        //- Construct and return a clone
+        virtual tmp<fvPatchScalarField> clone() const
+        {
+            return tmp<fvPatchScalarField>
+            (
+                new temperatureDependentAlphaContactAngleFvPatchScalarField
+                (
+                    *this
+                )
+            );
+        }
+
+        //- Construct as copy setting internal field reference
+        temperatureDependentAlphaContactAngleFvPatchScalarField
+        (
+            const temperatureDependentAlphaContactAngleFvPatchScalarField&,
+            const DimensionedField<scalar, volMesh>&
+        );
+
+        //- Construct and return a clone setting internal field reference
+        virtual tmp<fvPatchScalarField> clone
+        (
+            const DimensionedField<scalar, volMesh>& iF
+        ) const
+        {
+            return tmp<fvPatchScalarField>
+            (
+                new temperatureDependentAlphaContactAngleFvPatchScalarField
+                (
+                    *this,
+                    iF
+                )
+            );
+        }
+
+
+    // Member functions
+
+        //- Return the equilibrium contact-angle
+        virtual tmp<scalarField> theta
+        (
+            const fvPatchVectorField& Up,
+            const fvsPatchVectorField& nHat
+        ) const;
+
+        //- Write
+        virtual void write(Ostream&) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
-- 
GitLab