From 0a7259cc46298f3500b64068ca0b326d88b6fb53 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 12 Mar 2014 12:27:19 +0000 Subject: [PATCH] Revert pressureInletOutletVelocity BCs due to convergence problems with the new version for runs at high Courant number --- ...ureInletOutletVelocityFvPatchVectorField.C | 122 ++++++------------ ...ureInletOutletVelocityFvPatchVectorField.H | 69 +++------- ...ureInletOutletVelocityFvPatchVectorField.C | 41 +++--- ...ureInletOutletVelocityFvPatchVectorField.H | 5 +- .../interDyMFoam/ras/DTCHull/0.org/U | 1 + 5 files changed, 76 insertions(+), 162 deletions(-) diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressureInletOutletVelocity/pressureInletOutletVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/pressureInletOutletVelocity/pressureInletOutletVelocityFvPatchVectorField.C index fda087d8b5..63f9707715 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/pressureInletOutletVelocity/pressureInletOutletVelocityFvPatchVectorField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/pressureInletOutletVelocity/pressureInletOutletVelocityFvPatchVectorField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,10 +25,10 @@ License #include "pressureInletOutletVelocityFvPatchVectorField.H" #include "addToRunTimeSelectionTable.H" -#include "fvPatchFieldMapper.H" #include "volFields.H" #include "surfaceFields.H" + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::pressureInletOutletVelocityFvPatchVectorField:: @@ -38,14 +38,12 @@ pressureInletOutletVelocityFvPatchVectorField const DimensionedField& iF ) : - mixedFvPatchVectorField(p, iF), - phiName_("phi"), - rhoName_("rho"), - applyTangentialVelocity_(false) + directionMixedFvPatchVectorField(p, iF), + phiName_("phi") { - refValue() = *this; + refValue() = vector::zero; refGrad() = vector::zero; - valueFraction() = 0.0; + valueFraction() = symmTensor::zero; } @@ -58,12 +56,10 @@ pressureInletOutletVelocityFvPatchVectorField const fvPatchFieldMapper& mapper ) : - mixedFvPatchVectorField(ptf, p, iF, mapper), - phiName_(ptf.phiName_), - rhoName_(ptf.rhoName_), - applyTangentialVelocity_(ptf.applyTangentialVelocity_) + directionMixedFvPatchVectorField(ptf, p, iF, mapper), + phiName_(ptf.phiName_) { - if (applyTangentialVelocity_) + if (ptf.tangentialVelocity_.size()) { tangentialVelocity_ = mapper(ptf.tangentialVelocity_); } @@ -78,26 +74,25 @@ pressureInletOutletVelocityFvPatchVectorField const dictionary& dict ) : - mixedFvPatchVectorField(p, iF), - phiName_(dict.lookupOrDefault("phi", "phi")), - rhoName_(dict.lookupOrDefault("rho", "rho")), - applyTangentialVelocity_(false) + directionMixedFvPatchVectorField(p, iF), + phiName_(dict.lookupOrDefault("phi", "phi")) { fvPatchVectorField::operator=(vectorField("value", dict, p.size())); if (dict.found("tangentialVelocity")) { - applyTangentialVelocity_ = true; - setTangentialVelocity ( vectorField("tangentialVelocity", dict, p.size()) ); } + else + { + refValue() = vector::zero; + } - refValue() = *this; refGrad() = vector::zero; - valueFraction() = 0.0; + valueFraction() = symmTensor::zero; } @@ -107,11 +102,9 @@ pressureInletOutletVelocityFvPatchVectorField const pressureInletOutletVelocityFvPatchVectorField& pivpvf ) : - mixedFvPatchVectorField(pivpvf), + directionMixedFvPatchVectorField(pivpvf), phiName_(pivpvf.phiName_), - rhoName_(pivpvf.rhoName_), - tangentialVelocity_(pivpvf.tangentialVelocity_), - applyTangentialVelocity_(pivpvf.applyTangentialVelocity_) + tangentialVelocity_(pivpvf.tangentialVelocity_) {} @@ -122,11 +115,9 @@ pressureInletOutletVelocityFvPatchVectorField const DimensionedField& iF ) : - mixedFvPatchVectorField(pivpvf, iF), + directionMixedFvPatchVectorField(pivpvf, iF), phiName_(pivpvf.phiName_), - rhoName_(pivpvf.rhoName_), - tangentialVelocity_(pivpvf.tangentialVelocity_), - applyTangentialVelocity_(pivpvf.applyTangentialVelocity_) + tangentialVelocity_(pivpvf.tangentialVelocity_) {} @@ -135,10 +126,9 @@ pressureInletOutletVelocityFvPatchVectorField void Foam::pressureInletOutletVelocityFvPatchVectorField:: setTangentialVelocity(const vectorField& tangentialVelocity) { - applyTangentialVelocity_ = true; tangentialVelocity_ = tangentialVelocity; - vectorField n(patch().nf()); - tangentialVelocity_ -= n*(n & tangentialVelocity_); + const vectorField n(patch().nf()); + refValue() = tangentialVelocity_ - n*(n & tangentialVelocity_); } @@ -147,8 +137,8 @@ void Foam::pressureInletOutletVelocityFvPatchVectorField::autoMap const fvPatchFieldMapper& m ) { - mixedFvPatchVectorField::autoMap(m); - if (applyTangentialVelocity_) + directionMixedFvPatchVectorField::autoMap(m); + if (tangentialVelocity_.size()) { tangentialVelocity_.autoMap(m); } @@ -161,9 +151,9 @@ void Foam::pressureInletOutletVelocityFvPatchVectorField::rmap const labelList& addr ) { - mixedFvPatchVectorField::rmap(ptf, addr); + directionMixedFvPatchVectorField::rmap(ptf, addr); - if (applyTangentialVelocity_) + if (tangentialVelocity_.size()) { const pressureInletOutletVelocityFvPatchVectorField& tiptf = refCast(ptf); @@ -180,67 +170,25 @@ void Foam::pressureInletOutletVelocityFvPatchVectorField::updateCoeffs() return; } - const surfaceScalarField& phi = - db().lookupObject(phiName_); - const fvsPatchField& phip = - patch().patchField(phi); + patch().lookupPatchField(phiName_); - vectorField n(patch().nf()); - const Field& magSf = patch().magSf(); + valueFraction() = neg(phip)*(I - sqr(patch().nf())); - if (phi.dimensions() == dimVelocity*dimArea) - { - refValue() = n*phip/magSf; - } - else if (phi.dimensions() == dimDensity*dimVelocity*dimArea) - { - const fvPatchField& rhop = - patch().lookupPatchField(rhoName_); - - refValue() = n*phip/(rhop*magSf); - } - else - { - FatalErrorIn - ( - "pressureInletOutletVelocityFvPatchVectorField::" - "updateCoeffs()" - ) << "dimensions of phi are not correct" << nl - << " on patch " << this->patch().name() - << " of field " << this->dimensionedInternalField().name() - << " in file " << this->dimensionedInternalField().objectPath() - << exit(FatalError); - } - - if (applyTangentialVelocity_) - { - // Adjust the tangential velocity to conserve kinetic energy - // of the entrained fluid - // scalarField magSqrUt(magSqr(tangentialVelocity_)); - // scalarField scale - // ( - // sqrt(max(magSqrUt - magSqr(refValue()), scalar(0))/magSqrUt) - // ); - // refValue() += scale*tangentialVelocity_; - refValue() += tangentialVelocity_; - } - - valueFraction() = 1.0 - pos(phip); - - mixedFvPatchVectorField::updateCoeffs(); + directionMixedFvPatchVectorField::updateCoeffs(); + directionMixedFvPatchVectorField::evaluate(); } void Foam::pressureInletOutletVelocityFvPatchVectorField::write ( Ostream& os -) const +) +const { fvPatchVectorField::write(os); writeEntryIfDifferent(os, "phi", "phi", phiName_); - writeEntryIfDifferent(os, "rho", "rho", rhoName_); - if (applyTangentialVelocity_) + if (tangentialVelocity_.size()) { tangentialVelocity_.writeEntry("tangentialVelocity", os); } @@ -255,7 +203,9 @@ void Foam::pressureInletOutletVelocityFvPatchVectorField::operator= const fvPatchField& pvf ) { - fvPatchField::operator=(pvf); + tmp normalValue = transform(valueFraction(), refValue()); + tmp transformGradValue = transform(I - valueFraction(), pvf); + fvPatchField::operator=(normalValue + transformGradValue); } diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressureInletOutletVelocity/pressureInletOutletVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/pressureInletOutletVelocity/pressureInletOutletVelocityFvPatchVectorField.H index 4f8c546452..1a6def9be3 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/pressureInletOutletVelocity/pressureInletOutletVelocityFvPatchVectorField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/pressureInletOutletVelocity/pressureInletOutletVelocityFvPatchVectorField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,21 +25,21 @@ Class Foam::pressureInletOutletVelocityFvPatchVectorField Group - grpInletBoundaryConditions grpOutletBoundaryConditions + grpInletletBoundaryConditions grpOutletBoundaryConditions Description This velocity inlet/outlet boundary condition is applied to pressure boundaries where the pressure is specified. A zero-gradient condition is applied for outflow (as defined by the flux); for inflow, the velocity is - obtained from the patch-face normal component of the internal-cell value and - the tangential patch velocity can be optionally specified. + obtained from the patch-face normal component of the internal-cell value. + + The tangential patch velocity can be optionally specified. \heading Patch usage \table Property | Description | Required | Default value phi | flux field name | no | phi - rho | density field name | no | rho tangentialVelocity | tangential velocity field | no | \endtable @@ -49,7 +49,6 @@ Description { type pressureInletOutletVelocity; phi phi; - rho rho; tangentialVelocity uniform (0 0 0); value uniform 0; } @@ -70,7 +69,7 @@ SourceFiles #define pressureInletOutletVelocityFvPatchVectorField_H #include "fvPatchFields.H" -#include "mixedFvPatchFields.H" +#include "directionMixedFvPatchFields.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -78,29 +77,21 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class pressureInletOutletVelocityFvPatchVectorField Declaration + Class pressureInletOutletVelocityFvPatchVectorField Declaration \*---------------------------------------------------------------------------*/ class pressureInletOutletVelocityFvPatchVectorField : - public mixedFvPatchVectorField + public directionMixedFvPatchVectorField { // Private data //- Flux field name word phiName_; - //- Density field name - word rhoName_; - - -protected: - //- Optional tangential velocity component vectorField tangentialVelocity_; - bool applyTangentialVelocity_; - public: @@ -117,17 +108,6 @@ public: const DimensionedField& ); - //- Construct by mapping given - // pressureInletOutletVelocityFvPatchVectorField - // onto a new patch - pressureInletOutletVelocityFvPatchVectorField - ( - const pressureInletOutletVelocityFvPatchVectorField&, - const fvPatch&, - const DimensionedField&, - const fvPatchFieldMapper& - ); - //- Construct from patch, internal field and dictionary pressureInletOutletVelocityFvPatchVectorField ( @@ -136,6 +116,16 @@ public: const dictionary& ); + //- Construct by mapping given + // pressureInletOutletVelocityFvPatchVectorField onto a new patch + pressureInletOutletVelocityFvPatchVectorField + ( + const pressureInletOutletVelocityFvPatchVectorField&, + const fvPatch&, + const DimensionedField&, + const fvPatchFieldMapper& + ); + //- Construct as copy pressureInletOutletVelocityFvPatchVectorField ( @@ -147,10 +137,7 @@ public: { return tmp ( - new pressureInletOutletVelocityFvPatchVectorField - ( - *this - ) + new pressureInletOutletVelocityFvPatchVectorField(*this) ); } @@ -169,11 +156,7 @@ public: { return tmp ( - new pressureInletOutletVelocityFvPatchVectorField - ( - *this, - iF - ) + new pressureInletOutletVelocityFvPatchVectorField(*this, iF) ); } @@ -194,18 +177,6 @@ public: return phiName_; } - //- Return the name of rho - const word& rhoName() const - { - return rhoName_; - } - - //- Return reference to the name of rho to allow adjustment - word& rhoName() - { - return rhoName_; - } - //- Return the tangential velocity const vectorField& tangentialVelocity() const { diff --git a/src/finiteVolume/fields/fvPatchFields/derived/rotatingPressureInletOutletVelocity/rotatingPressureInletOutletVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/rotatingPressureInletOutletVelocity/rotatingPressureInletOutletVelocityFvPatchVectorField.C index e9f2bbeef6..22b36b0844 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/rotatingPressureInletOutletVelocity/rotatingPressureInletOutletVelocityFvPatchVectorField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/rotatingPressureInletOutletVelocity/rotatingPressureInletOutletVelocityFvPatchVectorField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -33,17 +33,17 @@ License void Foam::rotatingPressureInletOutletVelocityFvPatchVectorField:: calcTangentialVelocity() { - applyTangentialVelocity_ = true; - const scalar t = this->db().time().timeOutputValue(); vector om = omega_->value(t); vector axisHat = om/mag(om); - tangentialVelocity_ = - (-om) ^ (patch().Cf() - axisHat*(axisHat & patch().Cf())); + const vectorField tangentialVelocity + ( + (-om) ^ (patch().Cf() - axisHat*(axisHat & patch().Cf())) + ); const vectorField n(patch().nf()); - tangentialVelocity_ -= n*(n & tangentialVelocity_); + refValue() = tangentialVelocity - n*(n & tangentialVelocity); } @@ -72,7 +72,9 @@ rotatingPressureInletOutletVelocityFvPatchVectorField : pressureInletOutletVelocityFvPatchVectorField(ptf, p, iF, mapper), omega_(ptf.omega_().clone().ptr()) -{} +{ + calcTangentialVelocity(); +} Foam::rotatingPressureInletOutletVelocityFvPatchVectorField:: @@ -85,7 +87,9 @@ rotatingPressureInletOutletVelocityFvPatchVectorField : pressureInletOutletVelocityFvPatchVectorField(p, iF, dict), omega_(DataEntry::New("omega", dict)) -{} +{ + calcTangentialVelocity(); +} Foam::rotatingPressureInletOutletVelocityFvPatchVectorField:: @@ -96,7 +100,9 @@ rotatingPressureInletOutletVelocityFvPatchVectorField : pressureInletOutletVelocityFvPatchVectorField(rppvf), omega_(rppvf.omega_().clone().ptr()) -{} +{ + calcTangentialVelocity(); +} Foam::rotatingPressureInletOutletVelocityFvPatchVectorField:: @@ -108,24 +114,13 @@ rotatingPressureInletOutletVelocityFvPatchVectorField : pressureInletOutletVelocityFvPatchVectorField(rppvf, iF), omega_(rppvf.omega_().clone().ptr()) -{} +{ + calcTangentialVelocity(); +} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::rotatingPressureInletOutletVelocityFvPatchVectorField::updateCoeffs() -{ - if (updated()) - { - return; - } - - calcTangentialVelocity(); - - pressureInletOutletVelocityFvPatchVectorField::updateCoeffs(); -} - - void Foam::rotatingPressureInletOutletVelocityFvPatchVectorField::write ( Ostream& os diff --git a/src/finiteVolume/fields/fvPatchFields/derived/rotatingPressureInletOutletVelocity/rotatingPressureInletOutletVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/rotatingPressureInletOutletVelocity/rotatingPressureInletOutletVelocityFvPatchVectorField.H index b4b7297692..2335f45739 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/rotatingPressureInletOutletVelocity/rotatingPressureInletOutletVelocityFvPatchVectorField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/rotatingPressureInletOutletVelocity/rotatingPressureInletOutletVelocityFvPatchVectorField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -177,9 +177,6 @@ public: // Member functions - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - //- Write virtual void write(Ostream&) const; }; diff --git a/tutorials/multiphase/interDyMFoam/ras/DTCHull/0.org/U b/tutorials/multiphase/interDyMFoam/ras/DTCHull/0.org/U index 4105aa55af..1e4f3e6751 100644 --- a/tutorials/multiphase/interDyMFoam/ras/DTCHull/0.org/U +++ b/tutorials/multiphase/interDyMFoam/ras/DTCHull/0.org/U @@ -44,6 +44,7 @@ boundaryField atmosphere { type pressureInletOutletVelocity; + tangentialVelocity $internalField; value uniform (0 0 0); }