From f52a64b083ceed7213cdf032a999649c033341a2 Mon Sep 17 00:00:00 2001 From: mattijs <mattijs> Date: Wed, 8 Feb 2012 14:27:01 +0000 Subject: [PATCH] ENH: fanFvPatchField: generic DataEntry form allowed --- .../derived/fan/fanFvPatchField.C | 44 +++------ .../derived/fan/fanFvPatchField.H | 61 ++++++++++--- .../derived/fan/fanFvPatchFields.C | 90 +++++++++++++++---- 3 files changed, 134 insertions(+), 61 deletions(-) diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.C index 0261efd54e6..477b242b76a 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,7 +24,6 @@ License \*---------------------------------------------------------------------------*/ #include "fanFvPatchField.H" -#include "IOmanip.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -36,7 +35,7 @@ Foam::fanFvPatchField<Type>::fanFvPatchField ) : fixedJumpFvPatchField<Type>(p, iF), - f_(0) + jumpTable_(0) {} @@ -50,7 +49,7 @@ Foam::fanFvPatchField<Type>::fanFvPatchField ) : fixedJumpFvPatchField<Type>(ptf, p, iF, mapper), - f_(ptf.f_) + jumpTable_(ptf.jumpTable_().clone().ptr()) {} @@ -63,28 +62,8 @@ Foam::fanFvPatchField<Type>::fanFvPatchField ) : fixedJumpFvPatchField<Type>(p, iF), - f_() -{ - { - Istream& is = dict.lookup("f"); - is.format(IOstream::ASCII); - is >> f_; - - // Check that f_ table is same on both sides.? - } - - if (dict.found("value")) - { - fvPatchField<Type>::operator= - ( - Field<Type>("value", dict, p.size()) - ); - } - else - { - this->evaluate(Pstream::blocking); - } -} + jumpTable_(DataEntry<Type>::New("jumpTable", dict)) +{} template<class Type> @@ -95,7 +74,7 @@ Foam::fanFvPatchField<Type>::fanFvPatchField : cyclicLduInterfaceField(), fixedJumpFvPatchField<Type>(ptf), - f_(ptf.f_) + jumpTable_(ptf.jumpTable_().clone().ptr()) {} @@ -107,7 +86,7 @@ Foam::fanFvPatchField<Type>::fanFvPatchField ) : fixedJumpFvPatchField<Type>(ptf, iF), - f_(ptf.f_) + jumpTable_(ptf.jumpTable_().clone().ptr()) {} @@ -119,11 +98,10 @@ void Foam::fanFvPatchField<Type>::write(Ostream& os) const { fixedJumpFvPatchField<Type>::write(os); - - IOstream::streamFormat fmt0 = os.format(IOstream::ASCII); - os.writeKeyword("f") << f_ << token::END_STATEMENT << nl; - os.format(fmt0); - + if (this->cyclicPatch().owner()) + { + jumpTable_->writeData(os); + } this->writeEntry("value", os); } diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.H index e93b6979776..b3799c2bd9b 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,7 +25,43 @@ Class Foam::fanFvPatchField Description - Foam::fanFvPatchField + Jump boundary condition. Operates on cyclic. Jump specified as a DataEntry. + (table, fileTable, csv etc.) + + Example of the boundary condition specification: + \verbatim + fan_half0 + { + type fan; + patchType cyclic; + jump uniform 0; + jumpTable csvFile; + csvFileCoeffs + { + hasHeaderLine 1; + refColumn 0; + componentColumns 1(1); + separator ","; + fileName "$FOAM_CASE/constant/pressureVsU"; + } + value uniform 0; + } + \endverbatim + + + Backwards compatibility: if the 'f' keyword is detected it assumes + it is a power of the flowrate. + + \verbatim + fan_half0 + { + type fan; + patchType cyclic; + jump uniform 0; + f 2(100 -0.1); + value uniform 0; + } + \endverbatim SourceFiles fanFvPatchField.C @@ -36,6 +72,7 @@ SourceFiles #define fanFvPatchField_H #include "fixedJumpFvPatchField.H" +#include "DataEntry.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -53,8 +90,8 @@ class fanFvPatchField { // Private data - //- Fan pressure rise polynomial coefficients - List<scalar> f_; + //- Interpolation table + autoPtr<DataEntry<Type> > jumpTable_; public: @@ -126,15 +163,6 @@ public: // Member functions - // Access - - //- Return the polynomial coefficients - const List<scalar>& f() const - { - return f_; - } - - // Evaluation functions //- Update the coefficients associated with the patch field @@ -148,6 +176,13 @@ public: //- Specialisation of the jump-condition for the pressure template<> +fanFvPatchField<scalar>::fanFvPatchField +( + const fvPatch&, + const DimensionedField<scalar, volMesh>&, + const dictionary& +); +template<> void fanFvPatchField<scalar>::updateCoeffs(); diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchFields.C b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchFields.C index b3af1d22454..eacee81a37c 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchFields.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchFields.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -27,6 +27,8 @@ License #include "addToRunTimeSelectionTable.H" #include "volFields.H" #include "surfaceFields.H" +#include "Tuple2.H" +#include "polynomial.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -41,24 +43,87 @@ makeTemplatePatchTypeField fanFvPatchScalarField ); +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<> +Foam::fanFvPatchField<Foam::scalar>::fanFvPatchField +( + const fvPatch& p, + const DimensionedField<scalar, volMesh>& iF, + const dictionary& dict +) +: + fixedJumpFvPatchField<scalar>(p, iF), + jumpTable_(new DataEntry<scalar>("jumpTable")) +{ + if (this->cyclicPatch().owner()) + { + if (dict.found("f")) + { + // Backwards compatibility + Istream& is = dict.lookup("f"); + is.format(IOstream::ASCII); + scalarList f(is); + + label nPows = 0; + forAll(f, powI) + { + if (mag(f[powI]) > VSMALL) + { + nPows++; + } + } + List<Tuple2<scalar, scalar> > coeffs(nPows); + nPows = 0; + forAll(f, powI) + { + if (mag(f[powI]) > VSMALL) + { + coeffs[nPows++] = Tuple2<scalar, scalar>(f[powI], powI); + } + } + + Pout<< "** coeffss:" << coeffs << endl; + + jumpTable_.reset + ( + new polynomial("jumpTable", coeffs) + ); + } + else + { + // Generic input constructed from dictionary + jumpTable_ = DataEntry<scalar>::New("jumpTable", dict); + } + } + + + if (dict.found("value")) + { + fvPatchScalarField::operator= + ( + scalarField("value", dict, p.size()) + ); + } + else + { + this->evaluate(Pstream::blocking); + } +} + + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // //- Specialisation of the jump-condition for the pressure template<> void Foam::fanFvPatchField<Foam::scalar>::updateCoeffs() { - if (updated()) + if (this->updated()) { return; } - // Note that the neighbour side jump_ data is never actually used; the - // jump() function just calls the owner side jump(). - - // Constant - jump_ = f_[0]; - - if (f_.size() > 1) + if (this->cyclicPatch().owner()) { const surfaceScalarField& phi = db().lookupObject<surfaceScalarField>("phi"); @@ -73,12 +138,7 @@ void Foam::fanFvPatchField<Foam::scalar>::updateCoeffs() Un /= patch().lookupPatchField<volScalarField, scalar>("rho"); } - for (label i=1; i<f_.size(); i++) - { - jump_ += f_[i]*pow(Un, i); - } - - jump_ = max(jump_, scalar(0)); + jump_ = jumpTable_->value(Un); } fixedJumpFvPatchField<scalar>::updateCoeffs(); -- GitLab