From 8514ff55d08a91429ec2b2afae4ec11bb04bafb7 Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Sun, 30 Apr 2017 19:38:47 +0100 Subject: [PATCH] VoF solvers: New interfaceCompressionFvPatchScalarField BC and additional shear compression Provides the additional compression necessary to ensure interface integrity adjacent to a boundary at a low angle of incidence to the interface. This is particularly important when simulating planing hulls. --- .../solvers/multiphase/VoF/alphaEqn.H | 8 + src/finiteVolume/Make/files | 1 + .../cfdTools/general/include/alphaControls.H | 6 + .../interfaceCompressionFvPatchScalarField.C | 127 ++++++++++++++ .../interfaceCompressionFvPatchScalarField.H | 155 ++++++++++++++++++ 5 files changed, 297 insertions(+) create mode 100644 src/finiteVolume/fields/fvPatchFields/derived/interfaceCompression/interfaceCompressionFvPatchScalarField.C create mode 100644 src/finiteVolume/fields/fvPatchFields/derived/interfaceCompression/interfaceCompressionFvPatchScalarField.H diff --git a/applications/solvers/multiphase/VoF/alphaEqn.H b/applications/solvers/multiphase/VoF/alphaEqn.H index abae00fb3..147ca677b 100644 --- a/applications/solvers/multiphase/VoF/alphaEqn.H +++ b/applications/solvers/multiphase/VoF/alphaEqn.H @@ -65,6 +65,14 @@ phic += (mixture.cAlpha()*icAlpha)*fvc::interpolate(mag(U)); } + // Add the optional shear compression contribution + if (scAlpha > 0) + { + phic += + scAlpha*mag(mesh.delta() & fvc::interpolate(symm(fvc::grad(U)))); + } + + surfaceScalarField::Boundary& phicBf = phic.boundaryFieldRef(); diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files index 8f9122b58..3084f3b55 100644 --- a/src/finiteVolume/Make/files +++ b/src/finiteVolume/Make/files @@ -205,6 +205,7 @@ $(derivedFvPatchFields)/prghTotalPressure/prghTotalPressureFvPatchScalarField.C $(derivedFvPatchFields)/prghTotalHydrostaticPressure/prghTotalHydrostaticPressureFvPatchScalarField.C $(derivedFvPatchFields)/fixedProfile/fixedProfileFvPatchFields.C $(derivedFvPatchFields)/plenumPressure/plenumPressureFvPatchScalarField.C +$(derivedFvPatchFields)/interfaceCompression/interfaceCompressionFvPatchScalarField.C fvsPatchFields = fields/fvsPatchFields $(fvsPatchFields)/fvsPatchField/fvsPatchFields.C diff --git a/src/finiteVolume/cfdTools/general/include/alphaControls.H b/src/finiteVolume/cfdTools/general/include/alphaControls.H index 3819789af..2f1b50a78 100644 --- a/src/finiteVolume/cfdTools/general/include/alphaControls.H +++ b/src/finiteVolume/cfdTools/general/include/alphaControls.H @@ -19,3 +19,9 @@ scalar icAlpha ( alphaControls.lookupOrDefault("icAlpha", 0) ); + +// Shear compression coefficient +scalar scAlpha +( + alphaControls.lookupOrDefault("scAlpha", 0) +); diff --git a/src/finiteVolume/fields/fvPatchFields/derived/interfaceCompression/interfaceCompressionFvPatchScalarField.C b/src/finiteVolume/fields/fvPatchFields/derived/interfaceCompression/interfaceCompressionFvPatchScalarField.C new file mode 100644 index 000000000..6300160c1 --- /dev/null +++ b/src/finiteVolume/fields/fvPatchFields/derived/interfaceCompression/interfaceCompressionFvPatchScalarField.C @@ -0,0 +1,127 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 . + +\*---------------------------------------------------------------------------*/ + +#include "interfaceCompressionFvPatchScalarField.H" +#include "addToRunTimeSelectionTable.H" +#include "fvPatchFieldMapper.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::interfaceCompressionFvPatchScalarField:: +interfaceCompressionFvPatchScalarField +( + const fvPatch& p, + const DimensionedField& iF +) +: + fixedValueFvPatchScalarField(p, iF) +{} + + +Foam::interfaceCompressionFvPatchScalarField:: +interfaceCompressionFvPatchScalarField +( + const fvPatch& p, + const DimensionedField& iF, + const dictionary& dict +) +: + fixedValueFvPatchScalarField(p, iF) +{ + evaluate(); +} + + +Foam::interfaceCompressionFvPatchScalarField:: +interfaceCompressionFvPatchScalarField +( + const interfaceCompressionFvPatchScalarField& ptf, + const fvPatch& p, + const DimensionedField& iF, + const fvPatchFieldMapper& mapper +) +: + fixedValueFvPatchScalarField(ptf, p, iF, mapper) +{} + + +Foam::interfaceCompressionFvPatchScalarField:: +interfaceCompressionFvPatchScalarField +( + const interfaceCompressionFvPatchScalarField& ptf +) +: + fixedValueFvPatchScalarField(ptf) +{} + + +Foam::interfaceCompressionFvPatchScalarField:: +interfaceCompressionFvPatchScalarField +( + const interfaceCompressionFvPatchScalarField& ptf, + const DimensionedField& iF +) +: + fixedValueFvPatchScalarField(ptf, iF) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::interfaceCompressionFvPatchScalarField::updateCoeffs() +{ + if (updated()) + { + return; + } + + operator==(pos(this->patchInternalField() - 0.5)); + + fixedValueFvPatchScalarField::updateCoeffs(); +} + + +void Foam::interfaceCompressionFvPatchScalarField::write +( + Ostream& os +) const +{ + fvPatchScalarField::write(os); + writeEntry("value", os); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makePatchTypeField + ( + fvPatchScalarField, + interfaceCompressionFvPatchScalarField + ); +} + +// ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/interfaceCompression/interfaceCompressionFvPatchScalarField.H b/src/finiteVolume/fields/fvPatchFields/derived/interfaceCompression/interfaceCompressionFvPatchScalarField.H new file mode 100644 index 000000000..27787975a --- /dev/null +++ b/src/finiteVolume/fields/fvPatchFields/derived/interfaceCompression/interfaceCompressionFvPatchScalarField.H @@ -0,0 +1,155 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 . + +Class + Foam::interfaceCompressionFvPatchScalarField + +Group + grpGenericBoundaryConditions + +Description + Applies interface-compression to the phase-fraction distribution at the + patch by setting the phase-fraction to 0 if it is below 0.5, otherwise + to 1. + + This approach is useful to avoid unphysical "bleed" of the lighter phase + along the surface in regions of high shear adjacent to the surface which + is at a shallow angle to the interface. + +See also + Foam::fixedValueFvPatchScalarField + +SourceFiles + interfaceCompressionFvPatchScalarField.C + +\*---------------------------------------------------------------------------*/ + +#ifndef interfaceCompressionFvPatchScalarField_H +#define interfaceCompressionFvPatchScalarField_H + +#include "fixedValueFvPatchFields.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class interfaceCompressionFvPatchScalarField Declaration +\*---------------------------------------------------------------------------*/ + +class interfaceCompressionFvPatchScalarField +: + public fixedValueFvPatchScalarField +{ + +public: + + //- Runtime type information + TypeName("interfaceCompression"); + + + // Constructors + + //- Construct from patch and internal field + interfaceCompressionFvPatchScalarField + ( + const fvPatch&, + const DimensionedField& + ); + + //- Construct from patch, internal field and dictionary + interfaceCompressionFvPatchScalarField + ( + const fvPatch&, + const DimensionedField&, + const dictionary& + ); + + //- Construct by mapping given + // interfaceCompressionFvPatchScalarField onto a new patch + interfaceCompressionFvPatchScalarField + ( + const interfaceCompressionFvPatchScalarField&, + const fvPatch&, + const DimensionedField&, + const fvPatchFieldMapper& + ); + + //- Construct as copy + interfaceCompressionFvPatchScalarField + ( + const interfaceCompressionFvPatchScalarField& + ); + + //- Construct and return a clone + virtual tmp clone() const + { + return tmp + ( + new interfaceCompressionFvPatchScalarField(*this) + ); + } + + //- Construct as copy setting internal field reference + interfaceCompressionFvPatchScalarField + ( + const interfaceCompressionFvPatchScalarField&, + const DimensionedField& + ); + + //- Construct and return a clone setting internal field reference + virtual tmp clone + ( + const DimensionedField& iF + ) const + { + return tmp + ( + new interfaceCompressionFvPatchScalarField(*this, iF) + ); + } + + + // Member functions + + // Evaluation functions + + //- Update the coefficients associated with the patch field + virtual void updateCoeffs(); + + + //- Write + virtual void write(Ostream&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* //