diff --git a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C index acaed52ac9..0ea21821e5 100644 --- a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C +++ b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.C @@ -154,6 +154,16 @@ dimensioned::dimensioned } +template +dimensioned::dimensioned +() +: + name_("undefined"), + dimensions_(dimless), + value_(pTraits::zero) +{} + + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template diff --git a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H index 03fd0084ef..3cb8e0222a 100644 --- a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H +++ b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H @@ -107,6 +107,9 @@ public: //- Construct from an Istream with a given name and dimensions dimensioned(const word&, const dimensionSet&, Istream&); + //- Null constructor + dimensioned(); + //- Construct from dictionary, with default value. static dimensioned lookupOrDefault ( diff --git a/src/OpenFOAM/primitives/functions/DataEntry/CSV/CSV.H b/src/OpenFOAM/primitives/functions/DataEntry/CSV/CSV.H index 905544b489..14e6eb1fb5 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/CSV/CSV.H +++ b/src/OpenFOAM/primitives/functions/DataEntry/CSV/CSV.H @@ -163,6 +163,22 @@ public: return TableBase::integrate(x1, x2); } + //- Return dimensioned constant value + virtual dimensioned dimValue(const scalar x) const + { + return TableBase::dimValue(x); + } + + //- Integrate between two values and return dimensioned type + virtual dimensioned dimIntegrate + ( + const scalar x1, + const scalar x2 + ) const + { + return TableBase::dimIntegrate(x1, x2); + } + // I/O diff --git a/src/OpenFOAM/primitives/functions/DataEntry/CompatibilityConstant/CompatibilityConstant.C b/src/OpenFOAM/primitives/functions/DataEntry/CompatibilityConstant/CompatibilityConstant.C index 205b4b5732..78c6a4d7c5 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/CompatibilityConstant/CompatibilityConstant.C +++ b/src/OpenFOAM/primitives/functions/DataEntry/CompatibilityConstant/CompatibilityConstant.C @@ -34,9 +34,27 @@ Foam::CompatibilityConstant::CompatibilityConstant ) : DataEntry(entryName), - value_(pTraits::zero) + value_(pTraits::zero), + dimensions_(dimless) { - dict.lookup(entryName) >> value_; + Istream& is(dict.lookup(entryName)); + + token firstToken(is); + if (firstToken.isWord()) + { + token nextToken(is); + if (nextToken == token::BEGIN_SQR) + { + is.putBack(nextToken); + is >> dimensions_; + is >> value_; + } + } + else + { + is.putBack(firstToken); + is >> value_; + } } @@ -47,10 +65,10 @@ Foam::CompatibilityConstant::CompatibilityConstant ) : DataEntry(cnst), - value_(cnst.value_) + value_(cnst.value_), + dimensions_(cnst.dimensions_) {} - // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // template @@ -78,6 +96,23 @@ Type Foam::CompatibilityConstant::integrate } +template +Foam::dimensioned Foam::CompatibilityConstant:: +dimValue(const scalar x) const +{ + return dimensioned("dimensionedValue", dimensions_, value_); +} + + +template +Foam::dimensioned Foam::CompatibilityConstant::dimIntegrate +( + const scalar x1, const scalar x2 +) const +{ + return dimensioned("dimensionedValue", dimensions_, (x2-x1)*value_); +} + // * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // #include "CompatibilityConstantIO.C" diff --git a/src/OpenFOAM/primitives/functions/DataEntry/CompatibilityConstant/CompatibilityConstant.H b/src/OpenFOAM/primitives/functions/DataEntry/CompatibilityConstant/CompatibilityConstant.H index 9e2f46bb20..8ce8d28170 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/CompatibilityConstant/CompatibilityConstant.H +++ b/src/OpenFOAM/primitives/functions/DataEntry/CompatibilityConstant/CompatibilityConstant.H @@ -42,6 +42,7 @@ SourceFiles #define CompatibilityConstant_H #include "DataEntry.H" +#include "dimensionSet.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -68,6 +69,9 @@ class CompatibilityConstant //- Constant value Type value_; + //- The dimension set + dimensionSet dimensions_; + // Private Member Functions @@ -111,6 +115,16 @@ public: //- Integrate between two values Type integrate(const scalar x1, const scalar x2) const; + //- Return dimensioned constant value + dimensioned dimValue(const scalar) const; + + //- Integrate between two values and return dimensioned type + dimensioned dimIntegrate + ( + const scalar x1, + const scalar x2 + ) const; + // I/O diff --git a/src/OpenFOAM/primitives/functions/DataEntry/Constant/Constant.C b/src/OpenFOAM/primitives/functions/DataEntry/Constant/Constant.C index 410052f560..a1b7f4777b 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/Constant/Constant.C +++ b/src/OpenFOAM/primitives/functions/DataEntry/Constant/Constant.C @@ -31,12 +31,27 @@ template Foam::Constant::Constant(const word& entryName, const dictionary& dict) : DataEntry(entryName), - value_(pTraits::zero) + value_(pTraits::zero), + dimensions_(dimless) { Istream& is(dict.lookup(entryName)); word entryType(is); - - is >> value_; + token firstToken(is); + if (firstToken.isWord()) + { + token nextToken(is); + if (nextToken == token::BEGIN_SQR) + { + is.putBack(nextToken); + is >> dimensions_; + is >> value_; + } + } + else + { + is.putBack(firstToken); + is >> value_; + } } @@ -44,7 +59,8 @@ template Foam::Constant::Constant(const Constant& cnst) : DataEntry(cnst), - value_(cnst.value_) + value_(cnst.value_), + dimensions_(cnst.dimensions_) {} @@ -71,6 +87,22 @@ Type Foam::Constant::integrate(const scalar x1, const scalar x2) const } +template +Foam::dimensioned Foam::Constant::dimValue(const scalar x) const +{ + return dimensioned("dimensionedValue", dimensions_, value_); +} + + +template +Foam::dimensioned Foam::Constant::dimIntegrate +( + const scalar x1, const scalar x2 +) const +{ + return dimensioned("dimensionedValue", dimensions_, (x2-x1)*value_); +} + // * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // #include "ConstantIO.C" diff --git a/src/OpenFOAM/primitives/functions/DataEntry/Constant/Constant.H b/src/OpenFOAM/primitives/functions/DataEntry/Constant/Constant.H index c42e07e054..0c251fec03 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/Constant/Constant.H +++ b/src/OpenFOAM/primitives/functions/DataEntry/Constant/Constant.H @@ -41,6 +41,7 @@ SourceFiles #define Constant_H #include "DataEntry.H" +#include "dimensionSet.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -67,6 +68,9 @@ class Constant //- Constant value Type value_; + //- The dimension set + dimensionSet dimensions_; + // Private Member Functions @@ -107,6 +111,16 @@ public: //- Integrate between two values Type integrate(const scalar x1, const scalar x2) const; + //- Return dimensioned constant value + dimensioned dimValue(const scalar) const; + + //- Integrate between two values and return dimensioned type + dimensioned dimIntegrate + ( + const scalar x1, + const scalar x2 + ) const; + // I/O diff --git a/src/OpenFOAM/primitives/functions/DataEntry/DataEntry/DataEntry.C b/src/OpenFOAM/primitives/functions/DataEntry/DataEntry/DataEntry.C index c4083d8517..985a050021 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/DataEntry/DataEntry.C +++ b/src/OpenFOAM/primitives/functions/DataEntry/DataEntry/DataEntry.C @@ -76,6 +76,22 @@ Type Foam::DataEntry::value(const scalar x) const } +template +Type Foam::DataEntry::integrate(const scalar x1, const scalar x2) const +{ + notImplemented + ( + "Type Foam::DataEntry::integrate" + "(" + "const scalar, " + "const scalar" + ") const" + ); + + return pTraits::zero; +} + + template Foam::tmp > Foam::DataEntry::value ( @@ -93,22 +109,6 @@ Foam::tmp > Foam::DataEntry::value } -template -Type Foam::DataEntry::integrate(const scalar x1, const scalar x2) const -{ - notImplemented - ( - "Type Foam::DataEntry::integrate" - "(" - "const scalar, " - "const scalar" - ") const" - ); - - return pTraits::zero; -} - - template Foam::tmp > Foam::DataEntry::integrate ( @@ -127,6 +127,90 @@ Foam::tmp > Foam::DataEntry::integrate } + +template +Foam::dimensioned Foam::DataEntry::dimValue(const scalar x) const +{ + notImplemented + ( + "dimensioned Foam::DataEntry >::dimValue" + "(const scalar) const" + ); + + return dimensioned("zero", dimless, pTraits::zero); +} + + +template +Foam::dimensioned Foam::DataEntry::dimIntegrate +( + const scalar x1, + const scalar x2 +) const +{ + notImplemented + ( + "dimensioned Foam::DataEntry::dimIntegrate" + "(" + "const scalar, " + "const scalar" + ") const" + ); + + return dimensioned("zero", dimless, pTraits::zero); +} + + +template +Foam::tmp > > +Foam::DataEntry::dimValue +( + const scalarField& x +) const +{ + + tmp > > tfld + ( + new Field > + ( + x.size(), + dimensioned("zero", dimless, pTraits::zero) + ) + ); + + Field >& fld = tfld(); + + forAll(x, i) + { + fld[i] = this->dimValue(x[i]); + } + return tfld; +} + + +template +Foam::tmp > > +Foam::DataEntry::dimIntegrate +( + const scalarField& x1, + const scalarField& x2 +) const +{ + tmp > > tfld + ( + new Field >(x1.size()) + ); + + Field >& fld = tfld(); + + forAll(x1, i) + { + fld[i] = this->dimIntegrate(x1[i], x2[i]); + } + return tfld; +} + + // * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // #include "DataEntryIO.C" diff --git a/src/OpenFOAM/primitives/functions/DataEntry/DataEntry/DataEntry.H b/src/OpenFOAM/primitives/functions/DataEntry/DataEntry/DataEntry.H index 3061fa00f6..9cfdb66e25 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/DataEntry/DataEntry.H +++ b/src/OpenFOAM/primitives/functions/DataEntry/DataEntry/DataEntry.H @@ -41,6 +41,7 @@ SourceFiles #include "dictionary.H" #include "Field.H" +#include "dimensionedType.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -141,23 +142,49 @@ public: virtual void convertTimeBase(const Time& t); - // Evaluation +public: - //- Return value as a function of (scalar) independent variable - virtual Type value(const scalar x) const; - //- Return value as a function of (scalar) independent variable - virtual tmp > value(const scalarField& x) const; + // Evaluation - //- Integrate between two (scalar) values - virtual Type integrate(const scalar x1, const scalar x2) const; + //- Return value as a function of (scalar) independent variable + virtual Type value(const scalar x) const; - //- Integrate between two (scalar) values - virtual tmp > integrate - ( - const scalarField& x1, - const scalarField& x2 - ) const; + //- Return value as a function of (scalar) independent variable + virtual tmp > value(const scalarField& x) const; + + //- Integrate between two (scalar) values + virtual Type integrate(const scalar x1, const scalar x2) const; + + //- Integrate between two (scalar) values + virtual tmp > integrate + ( + const scalarField& x1, + const scalarField& x2 + ) const; + + //- Return dimensioned type + virtual dimensioned dimValue(const scalar x) const; + + //- Return dimensioned type as a function of (scalar) + virtual tmp > > dimValue + ( + const scalarField& x + ) const; + + //- Integrate between two scalars and returns a dimensioned type + virtual dimensioned dimIntegrate + ( + const scalar x1, + const scalar x2 + ) const; + + //- Integrate between two scalars and returns list of dimensioned type + virtual tmp > > dimIntegrate + ( + const scalarField& x1, + const scalarField& x2 + ) const; // I/O diff --git a/src/OpenFOAM/primitives/functions/DataEntry/DataEntry/DataEntryNew.C b/src/OpenFOAM/primitives/functions/DataEntry/DataEntry/DataEntryNew.C index 5786665f6a..dfbb95674b 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/DataEntry/DataEntryNew.C +++ b/src/OpenFOAM/primitives/functions/DataEntry/DataEntry/DataEntryNew.C @@ -41,7 +41,15 @@ Foam::autoPtr > Foam::DataEntry::New word DataEntryType; if (firstToken.isWord()) { - DataEntryType = firstToken.wordToken(); + // Dimensioned type default compatibility + if (firstToken.wordToken() == entryName) + { + DataEntryType = "CompatibilityConstant"; + } + else + { + DataEntryType = firstToken.wordToken(); + } } else { diff --git a/src/OpenFOAM/primitives/functions/DataEntry/Table/Table.C b/src/OpenFOAM/primitives/functions/DataEntry/Table/Table.C index dd60ac90fb..56c7a2b669 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/Table/Table.C +++ b/src/OpenFOAM/primitives/functions/DataEntry/Table/Table.C @@ -36,6 +36,12 @@ Foam::Table::Table(const word& entryName, const dictionary& dict) Istream& is(dict.lookup(entryName)); word entryType(is); + token firstToken(is); + is.putBack(firstToken); + if (firstToken == token::BEGIN_SQR) + { + is >> this->dimensions_; + } is >> this->table_; TableBase::check(); diff --git a/src/OpenFOAM/primitives/functions/DataEntry/Table/Table.H b/src/OpenFOAM/primitives/functions/DataEntry/Table/Table.H index 3f19ec38f2..63d7b293e3 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/Table/Table.H +++ b/src/OpenFOAM/primitives/functions/DataEntry/Table/Table.H @@ -30,7 +30,7 @@ Description in the form, e.g. for an entry \ that is (scalar, vector): \verbatim - table + table [0 1 0 0 0] //dimension set optional ( 0.0 (1 2 3) 1.0 (4 5 6) @@ -129,6 +129,22 @@ public: return TableBase::integrate(x1, x2); } + //- Return dimensioned constant value + virtual dimensioned dimValue(const scalar x) const + { + return TableBase::dimValue(x); + } + + //- Integrate between two values and return dimensioned type + virtual dimensioned dimIntegrate + ( + const scalar x1, + const scalar x2 + ) + { + return TableBase::dimIntegrate(x1, x2); + } + // I/O diff --git a/src/OpenFOAM/primitives/functions/DataEntry/Table/TableBase.C b/src/OpenFOAM/primitives/functions/DataEntry/Table/TableBase.C index cadc9c53a5..c977618e2a 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/Table/TableBase.C +++ b/src/OpenFOAM/primitives/functions/DataEntry/Table/TableBase.C @@ -39,7 +39,8 @@ Foam::TableBase::TableBase(const word& name, const dictionary& dict) dict.lookupOrDefault("outOfBounds", "clamp") ) ), - table_() + table_(), + dimensions_(dimless) {} @@ -48,7 +49,8 @@ Foam::TableBase::TableBase(const TableBase& tbl) : name_(tbl.name_), boundsHandling_(tbl.boundsHandling_), - table_(tbl.table_) + table_(tbl.table_), + dimensions_(tbl.dimensions_) {} @@ -330,6 +332,11 @@ Type Foam::TableBase::value(const scalar x) const i++; } +Info << + (xDash - table_[i].first())/(table_[i+1].first() - table_[i].first()) + * (table_[i+1].second() - table_[i].second()) + + table_[i].second() << endl; + // Linear interpolation to find value return Type ( @@ -403,6 +410,28 @@ Type Foam::TableBase::integrate(const scalar x1, const scalar x2) const } +template +Foam::dimensioned Foam::TableBase:: +dimValue(const scalar x) const +{ + return dimensioned("dimensionedValue", dimensions_, this->value(x)); +} + + +template +Foam::dimensioned Foam::TableBase::dimIntegrate +( + const scalar x1, const scalar x2 +) const +{ + return dimensioned + ( + "dimensionedValue", + dimensions_, + this->integrate(x2, x1) + ); +} + // * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // #include "TableBaseIO.C" diff --git a/src/OpenFOAM/primitives/functions/DataEntry/Table/TableBase.H b/src/OpenFOAM/primitives/functions/DataEntry/Table/TableBase.H index a5cd5edeea..15164b3d90 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/Table/TableBase.H +++ b/src/OpenFOAM/primitives/functions/DataEntry/Table/TableBase.H @@ -37,6 +37,7 @@ SourceFiles #include "DataEntry.H" #include "Tuple2.H" +#include "dimensionSet.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -87,6 +88,9 @@ protected: //- Table data List > table_; + //- The dimension set + dimensionSet dimensions_; + // Protected Member Functions @@ -138,6 +142,16 @@ public: //- Integrate between two (scalar) values virtual Type integrate(const scalar x1, const scalar x2) const; + //- Return dimensioned constant value + virtual dimensioned dimValue(const scalar x) const; + + //- Integrate between two values and return dimensioned type + virtual dimensioned dimIntegrate + ( + const scalar x1, + const scalar x2 + ) const; + // I/O diff --git a/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFile.C b/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFile.C index c2553ee03d..5323ac6a85 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFile.C +++ b/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFile.C @@ -37,6 +37,11 @@ Foam::TableFile::TableFile(const word& entryName, const dictionary& dict) const dictionary coeffs(dict.subDict(type() + "Coeffs")); coeffs.lookup("fileName") >> fName_; + if (coeffs.found("dimensions")) + { + coeffs.lookup("dimensions") >> this->dimensions_; + } + fileName expandedFile(fName_); IFstream is(expandedFile.expand()); diff --git a/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFile.H b/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFile.H index 5c31c5cf68..f167c21156 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFile.H +++ b/src/OpenFOAM/primitives/functions/DataEntry/TableFile/TableFile.H @@ -31,8 +31,9 @@ Description tableFile; tableFileCoeffs { - fileName dataFile; // name of data file - outOfBounds clamp; // optional out-of-bounds handling + dimensions [0 0 1 0 0]; // optional dimensions + fileName dataFile; // name of data file + outOfBounds clamp; // optional out-of-bounds handling } \endverbatim @@ -145,6 +146,22 @@ public: return TableBase::integrate(x1, x2); } + //- Return dimensioned constant value + virtual dimensioned dimValue(const scalar x) const + { + return TableBase::dimValue(x); + } + + //- Integrate between two values and return dimensioned type + virtual dimensioned dimIntegrate + ( + const scalar x1, + const scalar x2 + ) + { + return TableBase::dimIntegrate(x1, x2); + } + // I/O diff --git a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C index c9c8ba3f65..d015aede93 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C +++ b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C @@ -42,11 +42,19 @@ Foam::polynomial::polynomial(const word& entryName, const dictionary& dict) : DataEntry(entryName), coeffs_(), - canIntegrate_(true) + canIntegrate_(true), + dimensions_(dimless) { Istream& is(dict.lookup(entryName)); word entryType(is); + token firstToken(is); + is.putBack(firstToken); + if (firstToken == token::BEGIN_SQR) + { + is >> this->dimensions_; + } + is >> coeffs_; if (!coeffs_.size()) @@ -85,7 +93,8 @@ Foam::polynomial::polynomial : DataEntry(entryName), coeffs_(coeffs), - canIntegrate_(true) + canIntegrate_(true), + dimensions_(dimless) { if (!coeffs_.size()) { @@ -125,7 +134,8 @@ Foam::polynomial::polynomial(const polynomial& poly) : DataEntry(poly), coeffs_(poly.coeffs_), - canIntegrate_(poly.canIntegrate_) + canIntegrate_(poly.canIntegrate_), + dimensions_(poly.dimensions_) {} @@ -180,4 +190,26 @@ Foam::scalar Foam::polynomial::integrate(const scalar x1, const scalar x2) const } +Foam::dimensioned Foam::polynomial::dimValue +( + const scalar x +) const +{ + return dimensioned("dimensionedValue", dimensions_, value(x)); +} + + +Foam::dimensioned Foam::polynomial::dimIntegrate +( + const scalar x1, const scalar x2 +) const +{ + return dimensioned + ( + "dimensionedValue", + dimensions_, + integrate(x1, x2) + ); +} + // ************************************************************************* // diff --git a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H index 2c2cbcb30f..dc4fc7986b 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H +++ b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H @@ -30,7 +30,7 @@ Description describes y = x^2 + 2x^3 \verbatim - polynomial + polynomial [0 0 1 0 0] // optional dimensions ( (1 2) (2 3) @@ -47,6 +47,7 @@ SourceFiles #include "DataEntry.H" #include "Tuple2.H" +#include "dimensionSet.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -79,6 +80,9 @@ class polynomial //- Flag to indicate whether poly can be integrated bool canIntegrate_; + //- The dimension set + dimensionSet dimensions_; + // Private Member Functions @@ -129,6 +133,16 @@ public: //- Integrate between two (scalar) values scalar integrate(const scalar x1, const scalar x2) const; + //- Return dimensioned constant value + dimensioned dimValue(const scalar) const; + + //- Integrate between two values and return dimensioned type + dimensioned dimIntegrate + ( + const scalar x1, + const scalar x2 + ) const; + // I/O diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZone.C b/src/finiteVolume/cfdTools/general/MRF/MRFZone.C index ab1837b1f6..9b88668dcc 100644 --- a/src/finiteVolume/cfdTools/general/MRF/MRFZone.C +++ b/src/finiteVolume/cfdTools/general/MRF/MRFZone.C @@ -240,8 +240,7 @@ Foam::MRFZone::MRFZone(const fvMesh& mesh, Istream& is) ), origin_(dict_.lookup("origin")), axis_(dict_.lookup("axis")), - omega_(dict_.lookup("omega")), - Omega_("Omega", omega_*axis_) + omega_(DataEntry::New("omega", dict_)) { if (dict_.found("patches")) { @@ -256,7 +255,6 @@ Foam::MRFZone::MRFZone(const fvMesh& mesh, Istream& is) const polyBoundaryMesh& patches = mesh_.boundaryMesh(); axis_ = axis_/mag(axis_); - Omega_ = omega_*axis_; excludedPatchLabels_.setSize(excludedPatchNames_.size()); @@ -309,7 +307,9 @@ void Foam::MRFZone::addCoriolis vectorField& ddtUc = ddtU.internalField(); const vectorField& Uc = U.internalField(); - const vector& Omega = Omega_.value(); + const scalar t = mesh_.time().timeOutputValue(); + + const vector& Omega = omega_->value(t)*axis_; forAll(cells, i) { @@ -331,7 +331,9 @@ void Foam::MRFZone::addCoriolis(fvVectorMatrix& UEqn) const vectorField& Usource = UEqn.source(); const vectorField& U = UEqn.psi(); - const vector& Omega = Omega_.value(); + const scalar t = mesh_.time().timeOutputValue(); + + const vector& Omega = omega_->value(t)*axis_; forAll(cells, i) { @@ -357,7 +359,9 @@ void Foam::MRFZone::addCoriolis vectorField& Usource = UEqn.source(); const vectorField& U = UEqn.psi(); - const vector& Omega = Omega_.value(); + const scalar t = mesh_.time().timeOutputValue(); + + const vector& Omega = omega_->value(t)*axis_; forAll(cells, i) { @@ -371,9 +375,11 @@ void Foam::MRFZone::relativeVelocity(volVectorField& U) const { const volVectorField& C = mesh_.C(); - const vector& origin = origin_.value(); + const vector& origin = origin_; - const vector& Omega = Omega_.value(); + const scalar t = mesh_.time().timeOutputValue(); + + const vector& Omega = omega_->value(t)*axis_; const labelList& cells = mesh_.cellZones()[cellZoneID_]; @@ -411,9 +417,11 @@ void Foam::MRFZone::absoluteVelocity(volVectorField& U) const { const volVectorField& C = mesh_.C(); - const vector& origin = origin_.value(); + const vector& origin = origin_; - const vector& Omega = Omega_.value(); + const scalar t = mesh_.time().timeOutputValue(); + + const vector& Omega = omega_->value(t)*axis_; const labelList& cells = mesh_.cellZones()[cellZoneID_]; @@ -481,9 +489,12 @@ void Foam::MRFZone::absoluteFlux void Foam::MRFZone::correctBoundaryVelocity(volVectorField& U) const { - const vector& origin = origin_.value(); + const vector& origin = origin_; + + const scalar t = mesh_.time().timeOutputValue(); + + const vector& Omega = omega_->value(t)*axis_; - const vector& Omega = Omega_.value(); // Included patches forAll(includedFaces_, patchi) @@ -511,7 +522,7 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const MRFZone& MRF) os << token::BEGIN_BLOCK << incrIndent << nl; os.writeKeyword("origin") << MRF.origin_ << token::END_STATEMENT << nl; os.writeKeyword("axis") << MRF.axis_ << token::END_STATEMENT << nl; - os.writeKeyword("omega") << MRF.omega_ << token::END_STATEMENT << nl; + MRF.omega_->writeData(os); if (MRF.excludedPatchNames_.size()) { diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZone.H b/src/finiteVolume/cfdTools/general/MRF/MRFZone.H index 5c5cd245c0..46fb94c39a 100644 --- a/src/finiteVolume/cfdTools/general/MRF/MRFZone.H +++ b/src/finiteVolume/cfdTools/general/MRF/MRFZone.H @@ -49,6 +49,7 @@ SourceFiles #include "fvMatricesFwd.H" #include "fvMatrices.H" #include "DataEntry.H" +#include "autoPtr.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -86,10 +87,14 @@ class MRFZone //- Excluded faces (per patch) that do not move with the MRF labelListList excludedFaces_; - const dimensionedVector origin_; - dimensionedVector axis_; - dimensionedScalar omega_; - dimensionedVector Omega_; + //- Origin of the axis + const vector origin_; + + //- Axis vector + vector axis_; + + //- Angular velocty (rad/sec) + autoPtr > omega_; // Private Member Functions diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZoneTemplates.C b/src/finiteVolume/cfdTools/general/MRF/MRFZoneTemplates.C index 23cae40603..6a13cac888 100644 --- a/src/finiteVolume/cfdTools/general/MRF/MRFZoneTemplates.C +++ b/src/finiteVolume/cfdTools/general/MRF/MRFZoneTemplates.C @@ -41,8 +41,10 @@ void Foam::MRFZone::relativeRhoFlux const surfaceVectorField& Cf = mesh_.Cf(); const surfaceVectorField& Sf = mesh_.Sf(); - const vector& origin = origin_.value(); - const vector& Omega = Omega_.value(); + const vector& origin = origin_; + + const scalar t = mesh_.time().timeOutputValue(); + const vector& Omega = omega_->value(t)*axis_; const vectorField& Cfi = Cf.internalField(); const vectorField& Sfi = Sf.internalField(); @@ -92,8 +94,10 @@ void Foam::MRFZone::absoluteRhoFlux const surfaceVectorField& Cf = mesh_.Cf(); const surfaceVectorField& Sf = mesh_.Sf(); - const vector& origin = origin_.value(); - const vector& Omega = Omega_.value(); + const vector& origin = origin_; + + const scalar t = mesh_.time().timeOutputValue(); + const vector& Omega = omega_->value(t)*axis_; const vectorField& Cfi = Cf.internalField(); const vectorField& Sfi = Sf.internalField(); diff --git a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/MRFZones b/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/MRFZones index b38f82ed73..7c255d51db 100644 --- a/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/MRFZones +++ b/tutorials/compressible/rhoPorousMRFPimpleFoam/mixerVessel2D/constant/MRFZones @@ -22,9 +22,9 @@ FoamFile // Fixed patches (by default they 'move' with the MRF zone) nonRotatingPatches (); - origin origin [0 1 0 0 0 0 0] (0 0 0); - axis axis [0 0 0 0 0 0 0] (0 0 1); - omega omega [0 0 -1 0 0 0 0] 1047.2; + origin (0 0 0); + axis (0 0 1); + omega constant 1047.2; } ) diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/MRFZones b/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/MRFZones index 5fd26d2ab9..87c1c43c6e 100644 --- a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/MRFZones +++ b/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/MRFZones @@ -22,9 +22,9 @@ FoamFile // Fixed patches (by default they 'move' with the MRF zone) nonRotatingPatches (); - origin origin [0 1 0 0 0 0 0] (0 0 0); - axis axis [0 0 0 0 0 0 0] (0 0 1); - omega omega [0 0 -1 0 0 0 0] 104.72; + origin (0 0 0); + axis (0 0 1); + omega 104.72; } ) diff --git a/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/MRFZones b/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/MRFZones index 5fd26d2ab9..d1c9dd95d9 100644 --- a/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/MRFZones +++ b/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/MRFZones @@ -22,9 +22,9 @@ FoamFile // Fixed patches (by default they 'move' with the MRF zone) nonRotatingPatches (); - origin origin [0 1 0 0 0 0 0] (0 0 0); - axis axis [0 0 0 0 0 0 0] (0 0 1); - omega omega [0 0 -1 0 0 0 0] 104.72; + origin (0 0 0); + axis (0 0 1); + omega constant 104.72; } ) diff --git a/tutorials/multiphase/MRFInterFoam/mixerVessel2D/constant/MRFZones b/tutorials/multiphase/MRFInterFoam/mixerVessel2D/constant/MRFZones index 73226af946..ec52208dc0 100644 --- a/tutorials/multiphase/MRFInterFoam/mixerVessel2D/constant/MRFZones +++ b/tutorials/multiphase/MRFInterFoam/mixerVessel2D/constant/MRFZones @@ -22,9 +22,9 @@ FoamFile // Fixed patches (by default they 'move' with the MRF zone) nonRotatingPatches (); - origin origin [0 1 0 0 0 0 0] (0 0 0); - axis axis [0 0 0 0 0 0 0] (0 0 1); - omega omega [0 0 -1 0 0 0 0] 6.2831853; + origin (0 0 0); + axis (0 0 1); + omega constant 6.2831853; } ) diff --git a/tutorials/multiphase/MRFMultiphaseInterFoam/mixerVessel2D/constant/MRFZones b/tutorials/multiphase/MRFMultiphaseInterFoam/mixerVessel2D/constant/MRFZones index 73226af946..ec52208dc0 100644 --- a/tutorials/multiphase/MRFMultiphaseInterFoam/mixerVessel2D/constant/MRFZones +++ b/tutorials/multiphase/MRFMultiphaseInterFoam/mixerVessel2D/constant/MRFZones @@ -22,9 +22,9 @@ FoamFile // Fixed patches (by default they 'move' with the MRF zone) nonRotatingPatches (); - origin origin [0 1 0 0 0 0 0] (0 0 0); - axis axis [0 0 0 0 0 0 0] (0 0 1); - omega omega [0 0 -1 0 0 0 0] 6.2831853; + origin (0 0 0); + axis (0 0 1); + omega constant 6.2831853; } ) diff --git a/tutorials/multiphase/compressibleTwoPhaseEulerFoam/mixerVessel2D/constant/MRFZones b/tutorials/multiphase/compressibleTwoPhaseEulerFoam/mixerVessel2D/constant/MRFZones index 25c3311d0b..7dd518ca65 100644 --- a/tutorials/multiphase/compressibleTwoPhaseEulerFoam/mixerVessel2D/constant/MRFZones +++ b/tutorials/multiphase/compressibleTwoPhaseEulerFoam/mixerVessel2D/constant/MRFZones @@ -22,9 +22,9 @@ FoamFile // Fixed patches (by default they 'move' with the MRF zone) nonRotatingPatches (); - origin origin [0 1 0 0 0 0 0] (0 0 0); - axis axis [0 0 0 0 0 0 0] (0 0 1); - omega omega [0 0 -1 0 0 0 0] 10.472; + origin (0 0 0); + axis (0 0 1); + omega constant 10.472; } ) diff --git a/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/constant/MRFZones b/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/constant/MRFZones index 25c3311d0b..7dd518ca65 100644 --- a/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/constant/MRFZones +++ b/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/constant/MRFZones @@ -22,9 +22,9 @@ FoamFile // Fixed patches (by default they 'move' with the MRF zone) nonRotatingPatches (); - origin origin [0 1 0 0 0 0 0] (0 0 0); - axis axis [0 0 0 0 0 0 0] (0 0 1); - omega omega [0 0 -1 0 0 0 0] 10.472; + origin (0 0 0); + axis (0 0 1); + omega constant 10.472; } ) diff --git a/tutorials/multiphase/twoPhaseEulerFoam/mixerVessel2D/constant/MRFZones b/tutorials/multiphase/twoPhaseEulerFoam/mixerVessel2D/constant/MRFZones index 25c3311d0b..7dd518ca65 100644 --- a/tutorials/multiphase/twoPhaseEulerFoam/mixerVessel2D/constant/MRFZones +++ b/tutorials/multiphase/twoPhaseEulerFoam/mixerVessel2D/constant/MRFZones @@ -22,9 +22,9 @@ FoamFile // Fixed patches (by default they 'move' with the MRF zone) nonRotatingPatches (); - origin origin [0 1 0 0 0 0 0] (0 0 0); - axis axis [0 0 0 0 0 0 0] (0 0 1); - omega omega [0 0 -1 0 0 0 0] 10.472; + origin (0 0 0); + axis (0 0 1); + omega constant 10.472; } )