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: