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