From 368dbd2dba67ca5d6966fb70d6bb31c518e3f9db Mon Sep 17 00:00:00 2001 From: andy Date: Tue, 1 Nov 2011 16:50:27 +0000 Subject: [PATCH] ENH Templated and re-worked explicitSetValue field source --- src/finiteVolume/Make/files | 2 - .../makeBasicSource.H | 0 .../explicitSetValue/ExplicitSetValue.C | 129 ++++++++++++++++++ ...{explicitSetValue.H => ExplicitSetValue.H} | 56 +++----- ...licitSetValueIO.C => ExplicitSetValueIO.C} | 8 +- .../explicitSetValue/explicitSetValue.C | 108 ++------------- .../explicitSetValueTemplates.C | 105 -------------- .../explicitSource/ExplicitSource.C | 26 ++-- .../explicitSource/ExplicitSource.H | 3 + 9 files changed, 178 insertions(+), 259 deletions(-) rename src/finiteVolume/cfdTools/general/fieldSources/basicSource/{explicitSource => basicSource}/makeBasicSource.H (100%) create mode 100644 src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/ExplicitSetValue.C rename src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/{explicitSetValue.H => ExplicitSetValue.H} (72%) rename src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/{explicitSetValueIO.C => ExplicitSetValueIO.C} (88%) delete mode 100644 src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/explicitSetValueTemplates.C diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files index 6ee60166c8..0eed2c9f4b 100644 --- a/src/finiteVolume/Make/files +++ b/src/finiteVolume/Make/files @@ -388,9 +388,7 @@ $(basicSource)/pressureGradientExplicitSource/pressureGradientExplicitSource.C $(basicSource)/pressureGradientExplicitSource/pressureGradientExplicitSourceIO.C $(basicSource)/explicitSource/explicitSource.C - $(basicSource)/explicitSetValue/explicitSetValue.C -$(basicSource)/explicitSetValue/explicitSetValueIO.C $(basicSource)/rotorDiskSource/rotorDiskSource.C $(basicSource)/rotorDiskSource/bladeModel/bladeModel.C diff --git a/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSource/makeBasicSource.H b/src/finiteVolume/cfdTools/general/fieldSources/basicSource/basicSource/makeBasicSource.H similarity index 100% rename from src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSource/makeBasicSource.H rename to src/finiteVolume/cfdTools/general/fieldSources/basicSource/basicSource/makeBasicSource.H diff --git a/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/ExplicitSetValue.C b/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/ExplicitSetValue.C new file mode 100644 index 0000000000..a175a3bc3d --- /dev/null +++ b/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/ExplicitSetValue.C @@ -0,0 +1,129 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011 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 "ExplicitSetValue.H" +#include "fvMesh.H" +#include "volFields.H" + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template +void Foam::ExplicitSetValue::setFieldData(const dictionary& dict) +{ + fieldData_.setSize(dict.toc().size()); + + label i = 0; + forAllConstIter(dictionary, dict, iter) + { + fieldData_[i].first() = iter().keyword(); + dict.lookup(iter().keyword()) >> fieldData_[i].second(); + i++; + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::ExplicitSetValue::ExplicitSetValue +( + const word& name, + const word& modelType, + const dictionary& dict, + const fvMesh& mesh +) +: + basicSource(name, modelType, dict, mesh), + fieldData_() +{ + setFieldData(coeffs_.subDict("fieldData")); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +Foam::label Foam::ExplicitSetValue::applyToField +( + const word& fieldName +) const +{ + forAll(fieldData_, i) + { + if (fieldData_[i].first() == fieldName) + { + return i; + } + } + + return -1; +} + + +template +void Foam::ExplicitSetValue::setValue +( + fvMatrix& eqn, + const label fieldI +) +{ + if (debug) + { + Info<< "ExplicitSetValue<"<< pTraits::typeName + << ">::setValue for source " << name_ << endl; + } + + DimensionedField rhs + ( + IOobject + ( + name_ + fieldData_[fieldI].first() + "rhs", + eqn.psi().mesh().time().timeName(), + eqn.psi().mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ), + eqn.psi().mesh(), + dimensioned + ( + "zero", + dimless, + pTraits::zero + ) + ); + + List values(cells_.size()); + + forAll(values, i) + { + values[i] = fieldData_[fieldI].second(); + } + + eqn.setValues(cells_, values); +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/explicitSetValue.H b/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/ExplicitSetValue.H similarity index 72% rename from src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/explicitSetValue.H rename to src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/ExplicitSetValue.H index 6effb616a3..bc7219ba4c 100644 --- a/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/explicitSetValue.H +++ b/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/ExplicitSetValue.H @@ -43,13 +43,11 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef explicitSetValue_H -#define explicitSetValue_H +#ifndef ExplicitSetValue_H +#define ExplicitSetValue_H -#include "cellSet.H" -#include "volFieldsFwd.H" -#include "DimensionedField.H" #include "basicSource.H" +#include "Tuple2.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -60,33 +58,22 @@ namespace Foam Class explicitSetValue Declaration \*---------------------------------------------------------------------------*/ -class explicitSetValue +template +class ExplicitSetValue : public basicSource { - // Private data - - //- List of field types - HashTable scalarFields_; - HashTable vectorFields_; - - //- Set value to field - template - void setFieldValue(fvMatrix&, const Type&) const; - - //- Add field names and values to field table for types. - template - void addField - ( - HashTable& fields, - const wordList& fieldTypes, - const wordList& fieldNames, - const dictionary& dict - ); - protected: + // Protected data + + typedef Tuple2 fieldNameValuePair; + + //- Source value per field + List fieldData_; + + // Protected functions //- Set the local field data @@ -102,7 +89,7 @@ public: // Constructors //- Construct from components - explicitSetValue + ExplicitSetValue ( const word& name, const word& modelType, @@ -110,13 +97,6 @@ public: const fvMesh& mesh ); - //- Return clone - autoPtr clone() const - { - notImplemented("autoPtr clone() const"); - return autoPtr(NULL); - } - // Member Functions @@ -129,10 +109,7 @@ public: // Evaluation //- Set value on vector field - virtual void setValue(fvMatrix& eqn, const label fieldI); - - //- Set value on scalar field - virtual void setValue(fvMatrix& eqn, const label fieldI); + virtual void setValue(fvMatrix& eqn, const label fieldI); // I-O @@ -152,7 +129,8 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository -# include "explicitSetValueTemplates.C" +# include "ExplicitSetValue.C" +# include "ExplicitSetValueIO.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/explicitSetValueIO.C b/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/ExplicitSetValueIO.C similarity index 88% rename from src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/explicitSetValueIO.C rename to src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/ExplicitSetValueIO.C index 45d56fc783..357d94beba 100644 --- a/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/explicitSetValueIO.C +++ b/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/ExplicitSetValueIO.C @@ -23,18 +23,20 @@ License \*---------------------------------------------------------------------------*/ -#include "explicitSetValue.H" +#include "ExplicitSetValue.H" // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::explicitSetValue::writeData(Ostream& os) const +template +void Foam::ExplicitSetValue::writeData(Ostream& os) const { os << indent << name_ << endl; coeffs_.write(os); } -bool Foam::explicitSetValue::read(const dictionary& dict) +template +bool Foam::ExplicitSetValue::read(const dictionary& dict) { if (basicSource::read(dict)) { diff --git a/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/explicitSetValue.C b/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/explicitSetValue.C index cb778fcae8..78bb54bcb3 100644 --- a/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/explicitSetValue.C +++ b/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/explicitSetValue.C @@ -23,110 +23,18 @@ License \*---------------------------------------------------------------------------*/ -#include "explicitSetValue.H" -#include "fvMesh.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" -#include "HashSet.H" +#include "makeBasicSource.H" +#include "ExplicitSetValue.H" -// * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { - defineTypeNameAndDebug(explicitSetValue, 0); - addToRunTimeSelectionTable - ( - basicSource, - explicitSetValue, - dictionary - ); -} - - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -void Foam::explicitSetValue::setFieldData(const dictionary& dict) -{ - scalarFields_.clear(); - vectorFields_.clear(); - - wordList fieldTypes(dict.toc().size()); - wordList fieldNames(dict.toc().size()); - - forAll(dict.toc(), i) - { - const word& fieldName = dict.toc()[i]; - IOobject io - ( - fieldName, - this->mesh().time().timeName(), - this->mesh(), - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ); - if (io.headerOk()) - { - fieldTypes[i] = io.headerClassName(); - fieldNames[i] = dict.toc()[i]; - } - else - { - FatalErrorIn("explicitSetValue::setFieldData") - << "header not OK for field " << io.name() - << abort(FatalError); - } - } - - addField(scalarFields_, fieldTypes, fieldNames, dict); - addField(vectorFields_, fieldTypes, fieldNames, dict); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::explicitSetValue::explicitSetValue -( - const word& name, - const word& modelType, - const dictionary& dict, - const fvMesh& mesh -) -: - basicSource(name, modelType, dict, mesh) -{ - setFieldData(coeffs_.subDict("fieldData")); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -Foam::label Foam::explicitSetValue::applyToField -( - const word& fieldName -) const -{ - notImplemented("Foam::explicitSetValue::applyToField(const word&)"); -} - - -void Foam::explicitSetValue::setValue -( - fvMatrix& eqn, - const label -) -{ - setFieldValue(eqn, scalarFields_[eqn.psi().name()]); -} - - -void Foam::explicitSetValue::setValue -( - fvMatrix& eqn, - const label -) -{ - setFieldValue(eqn, vectorFields_[eqn.psi().name()]); + makeBasicSource(ExplicitSetValue, scalar); + makeBasicSource(ExplicitSetValue, vector); + makeBasicSource(ExplicitSetValue, sphericalTensor); + makeBasicSource(ExplicitSetValue, symmTensor); + makeBasicSource(ExplicitSetValue, tensor); } diff --git a/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/explicitSetValueTemplates.C b/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/explicitSetValueTemplates.C deleted file mode 100644 index 9a5a7bbbb2..0000000000 --- a/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSetValue/explicitSetValueTemplates.C +++ /dev/null @@ -1,105 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011 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 . - -\*---------------------------------------------------------------------------*/ - -template -void Foam::explicitSetValue::setFieldValue -( - fvMatrix& Eqn, - const Type& value -) const -{ - Type data = value; - - DimensionedField rhs - ( - IOobject - ( - "rhs", - Eqn.psi().mesh().time().timeName(), - Eqn.psi().mesh(), - IOobject::NO_READ, - IOobject::NO_WRITE, - false - ), - Eqn.psi().mesh(), - dimensioned - ( - "zero", - dimless, - pTraits::zero - ) - ); - - List values(cells_.size()); - - forAll(values, i) - { - values[i] = data; - } - - Eqn.setValues(cells_, values); -} - - -template -void Foam::explicitSetValue::addField -( - HashTable& fields, - const wordList& fieldTypes, - const wordList& fieldNames, - const dictionary& fieldDataDict -) -{ - typedef GeometricField geometricField; - - forAll (fieldTypes, fieldI) - { - word fieldName = fieldNames[fieldI]; - word fieldType = fieldTypes[fieldI]; - - if - ( - ( - fieldType - == GeometricField::typeName - ) && - ( - this->mesh().foundObject(fieldName) - ) - ) - { - Type fieldValue = fieldDataDict.lookupOrDefault - ( - fieldName, - pTraits::zero - ); - - fields.insert(fieldName, fieldValue); - } - } -} - - -// ************************************************************************* // diff --git a/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSource/ExplicitSource.C b/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSource/ExplicitSource.C index 41d0d4f4f1..63c5349a6e 100644 --- a/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSource/ExplicitSource.C +++ b/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSource/ExplicitSource.C @@ -30,7 +30,6 @@ License // * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * * // - template const Foam::wordList Foam::ExplicitSource:: volumeModeTypeNames_ @@ -85,6 +84,21 @@ Foam::word Foam::ExplicitSource::volumeModeTypeToWord } +template +void Foam::ExplicitSource::setFieldData(const dictionary& dict) +{ + fieldData_.setSize(dict.toc().size()); + + label i = 0; + forAllConstIter(dictionary, dict, iter) + { + fieldData_[i].first() = iter().keyword(); + dict.lookup(iter().keyword()) >> fieldData_[i].second(); + i++; + } +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template @@ -101,15 +115,7 @@ Foam::ExplicitSource::ExplicitSource VDash_(1.0), fieldData_() { - const dictionary& fieldDict(coeffs_.subDict("fieldData")); - fieldData_.setSize(fieldDict.toc().size()); - label i = 0; - forAllConstIter(dictionary, fieldDict, iter) - { - fieldData_[i].first() = iter().keyword(); - fieldDict.lookup(iter().keyword()) >> fieldData_[i].second(); - i++; - } + setFieldData(coeffs_.subDict("fieldData")); // Set volume normalisation if (volumeMode_ == vmAbsolute) diff --git a/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSource/ExplicitSource.H b/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSource/ExplicitSource.H index 2b24fb159c..bdb20a43d1 100644 --- a/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSource/ExplicitSource.H +++ b/src/finiteVolume/cfdTools/general/fieldSources/basicSource/explicitSource/ExplicitSource.H @@ -134,6 +134,9 @@ protected: //- Helper function to convert from a volumeModeType to a word word volumeModeTypeToWord(const volumeModeType& vtType) const; + //- Set the local field data + void setFieldData(const dictionary& dict); + public: