From 329656ecb342e7c168e36f2101c2339ec24897fb Mon Sep 17 00:00:00 2001
From: Henry <Henry>
Date: Mon, 19 Aug 2013 11:48:52 +0100
Subject: [PATCH] interstitialInletVelocity: New inlet velocity BC for
 multiphase flow

---
 ...erstitialInletVelocityFvPatchVectorField.C | 139 +++++++++++++++
 ...erstitialInletVelocityFvPatchVectorField.H | 161 ++++++++++++++++++
 2 files changed, 300 insertions(+)
 create mode 100644 src/finiteVolume/fields/fvPatchFields/derived/interstitialInletVelocity/interstitialInletVelocityFvPatchVectorField.C
 create mode 100644 src/finiteVolume/fields/fvPatchFields/derived/interstitialInletVelocity/interstitialInletVelocityFvPatchVectorField.H

diff --git a/src/finiteVolume/fields/fvPatchFields/derived/interstitialInletVelocity/interstitialInletVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/interstitialInletVelocity/interstitialInletVelocityFvPatchVectorField.C
new file mode 100644
index 00000000000..745918403b5
--- /dev/null
+++ b/src/finiteVolume/fields/fvPatchFields/derived/interstitialInletVelocity/interstitialInletVelocityFvPatchVectorField.C
@@ -0,0 +1,139 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 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 "interstitialInletVelocityFvPatchVectorField.H"
+#include "volFields.H"
+#include "addToRunTimeSelectionTable.H"
+#include "fvPatchFieldMapper.H"
+#include "surfaceFields.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::interstitialInletVelocityFvPatchVectorField::
+interstitialInletVelocityFvPatchVectorField
+(
+    const fvPatch& p,
+    const DimensionedField<vector, volMesh>& iF
+)
+:
+    fixedValueFvPatchField<vector>(p, iF),
+    inletVelocity_(p.size(), vector::zero),
+    alphaName_("alpha")
+{}
+
+
+Foam::interstitialInletVelocityFvPatchVectorField::
+interstitialInletVelocityFvPatchVectorField
+(
+    const interstitialInletVelocityFvPatchVectorField& ptf,
+    const fvPatch& p,
+    const DimensionedField<vector, volMesh>& iF,
+    const fvPatchFieldMapper& mapper
+)
+:
+    fixedValueFvPatchField<vector>(ptf, p, iF, mapper),
+    inletVelocity_(ptf.inletVelocity_),
+    alphaName_(ptf.alphaName_)
+{}
+
+
+Foam::interstitialInletVelocityFvPatchVectorField::
+interstitialInletVelocityFvPatchVectorField
+(
+    const fvPatch& p,
+    const DimensionedField<vector, volMesh>& iF,
+    const dictionary& dict
+)
+:
+    fixedValueFvPatchField<vector>(p, iF, dict),
+    inletVelocity_("inletVelocity", dict, p.size()),
+    alphaName_(dict.lookupOrDefault<word>("alpha", "alpha"))
+{}
+
+
+Foam::interstitialInletVelocityFvPatchVectorField::
+interstitialInletVelocityFvPatchVectorField
+(
+    const interstitialInletVelocityFvPatchVectorField& ptf
+)
+:
+    fixedValueFvPatchField<vector>(ptf),
+    inletVelocity_(ptf.inletVelocity_),
+    alphaName_(ptf.alphaName_)
+{}
+
+
+Foam::interstitialInletVelocityFvPatchVectorField::
+interstitialInletVelocityFvPatchVectorField
+(
+    const interstitialInletVelocityFvPatchVectorField& ptf,
+    const DimensionedField<vector, volMesh>& iF
+)
+:
+    fixedValueFvPatchField<vector>(ptf, iF),
+    inletVelocity_(ptf.inletVelocity_),
+    alphaName_(ptf.alphaName_)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+void Foam::interstitialInletVelocityFvPatchVectorField::updateCoeffs()
+{
+    if (updated())
+    {
+        return;
+    }
+
+    const fvPatchField<scalar>& alphap =
+        patch().lookupPatchField<volScalarField, scalar>(alphaName_);
+
+    operator==(inletVelocity_/alphap);
+    fixedValueFvPatchField<vector>::updateCoeffs();
+}
+
+
+void Foam::interstitialInletVelocityFvPatchVectorField::write(Ostream& os) const
+{
+    fvPatchField<vector>::write(os);
+    writeEntryIfDifferent<word>(os, "alpha", "alpha", alphaName_);
+    inletVelocity_.writeEntry("inletVelocity", os);
+    writeEntry("value", os);
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+   makePatchTypeField
+   (
+       fvPatchVectorField,
+       interstitialInletVelocityFvPatchVectorField
+   );
+}
+
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/interstitialInletVelocity/interstitialInletVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/interstitialInletVelocity/interstitialInletVelocityFvPatchVectorField.H
new file mode 100644
index 00000000000..1952b826335
--- /dev/null
+++ b/src/finiteVolume/fields/fvPatchFields/derived/interstitialInletVelocity/interstitialInletVelocityFvPatchVectorField.H
@@ -0,0 +1,161 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 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::interstitialInletVelocityFvPatchVectorField
+
+Description
+    Inlet velocity in which the actual interstitial velocity is calculated
+    by dividing the specified inletVelocity field with the local phase-fraction.
+
+    Example of the boundary condition specification:
+    \verbatim
+    inlet
+    {
+        type              interstitialInletVelocity;
+        inletVelocity     uniform (0 0.2 0; // Non-interstitial inlet velocity
+        alpha             alpha.particles;  // Name of the phase-fraction field
+        value             uniform (0 0 0);
+    }
+    \endverbatim
+
+SourceFiles
+    interstitialInletVelocityFvPatchVectorField.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef interstitialInletVelocityFvPatchVectorField_H
+#define interstitialInletVelocityFvPatchVectorField_H
+
+#include "fixedValueFvPatchFields.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+/*---------------------------------------------------------------------------*\
+               Class interstitialInletVelocityFvPatch Declaration
+\*---------------------------------------------------------------------------*/
+
+class interstitialInletVelocityFvPatchVectorField
+:
+    public fixedValueFvPatchVectorField
+{
+    // Private data
+
+        //- Inlet velocity
+        vectorField inletVelocity_;
+
+        //- Name of the flux transporting the field
+        word alphaName_;
+
+
+public:
+
+   //- Runtime type information
+   TypeName("interstitialInletVelocity");
+
+
+   // Constructors
+
+        //- Construct from patch and internal field
+        interstitialInletVelocityFvPatchVectorField
+        (
+            const fvPatch&,
+            const DimensionedField<vector, volMesh>&
+        );
+
+        //- Construct from patch, internal field and dictionary
+        interstitialInletVelocityFvPatchVectorField
+        (
+            const fvPatch&,
+            const DimensionedField<vector, volMesh>&,
+            const dictionary&
+        );
+
+        //- Construct by mapping given
+        //  interstitialInletVelocityFvPatchVectorField
+        //  onto a new patch
+        interstitialInletVelocityFvPatchVectorField
+        (
+            const interstitialInletVelocityFvPatchVectorField&,
+            const fvPatch&,
+            const DimensionedField<vector, volMesh>&,
+            const fvPatchFieldMapper&
+        );
+
+        //- Construct as copy
+        interstitialInletVelocityFvPatchVectorField
+        (
+            const interstitialInletVelocityFvPatchVectorField&
+        );
+
+        //- Construct and return a clone
+        virtual tmp<fvPatchVectorField> clone() const
+        {
+            return tmp<fvPatchVectorField>
+            (
+                new interstitialInletVelocityFvPatchVectorField(*this)
+            );
+        }
+
+        //- Construct as copy setting internal field reference
+        interstitialInletVelocityFvPatchVectorField
+        (
+            const interstitialInletVelocityFvPatchVectorField&,
+            const DimensionedField<vector, volMesh>&
+        );
+
+        //- Construct and return a clone setting internal field reference
+        virtual tmp<fvPatchVectorField> clone
+        (
+            const DimensionedField<vector, volMesh>& iF
+        ) const
+        {
+            return tmp<fvPatchVectorField>
+            (
+                new interstitialInletVelocityFvPatchVectorField(*this, iF)
+            );
+        }
+
+
+    // Member functions
+
+        //- Update the coefficients associated with the patch field
+        virtual void updateCoeffs();
+
+        //- Write
+        virtual void write(Ostream&) const;
+
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
-- 
GitLab