mirror of
https://github.com/OpenFOAM/OpenFOAM-6.git
synced 2025-12-08 06:57:46 +00:00
functionObjects: Moved into the functionObjects namespace and rationalized and simplified failable construction
Rather than requiring each functionObject to handle failed construction internally (using the active_ flag) the static member function "viable" is provided which returns true if construction of the functionObject is likely to be successful. Failed construction is then handled by the wrapper-class which constructs the functionObject, e.g. "OutputFilterFunctionObject".
This commit is contained in:
@ -138,7 +138,7 @@ void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
dsmcFields dF
|
functionObjects::dsmcFields dF
|
||||||
(
|
(
|
||||||
"dsmcFieldsUtility",
|
"dsmcFieldsUtility",
|
||||||
mesh,
|
mesh,
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -76,6 +76,18 @@ ${typeName}FunctionObject::${typeName}FunctionObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool ${typeName}FunctionObject::viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry& obr,
|
||||||
|
const dictionary& dict,
|
||||||
|
const bool
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
${typeName}FunctionObject::~${typeName}FunctionObject()
|
${typeName}FunctionObject::~${typeName}FunctionObject()
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -102,6 +102,16 @@ public:
|
|||||||
const bool loadFromFilesUnused = false
|
const bool loadFromFilesUnused = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct for given objectRegistry and dictionary.
|
||||||
|
// Allow the possibility to load fields from files
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry& unused,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFilesUnused = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~${typeName}FunctionObject();
|
virtual ~${typeName}FunctionObject();
|
||||||
|
|||||||
@ -71,21 +71,15 @@ void Foam::FUNCTIONOBJECT::read(const dictionary& dict)
|
|||||||
|
|
||||||
|
|
||||||
void Foam::FUNCTIONOBJECT::execute()
|
void Foam::FUNCTIONOBJECT::execute()
|
||||||
{
|
{}
|
||||||
// Do nothing - only valid on write
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::FUNCTIONOBJECT::end()
|
void Foam::FUNCTIONOBJECT::end()
|
||||||
{
|
{}
|
||||||
// Do nothing - only valid on write
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::FUNCTIONOBJECT::timeSet()
|
void Foam::FUNCTIONOBJECT::timeSet()
|
||||||
{
|
{}
|
||||||
// Do nothing - only valid on write
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::FUNCTIONOBJECT::write()
|
void Foam::FUNCTIONOBJECT::write()
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -66,6 +66,32 @@ Foam::IOOutputFilter<OutputFilter>::IOOutputFilter
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class OutputFilter>
|
||||||
|
bool Foam::IOOutputFilter<OutputFilter>::viable
|
||||||
|
(
|
||||||
|
const word& outputFilterName,
|
||||||
|
const objectRegistry& obr,
|
||||||
|
const word& dictName,
|
||||||
|
const IOobject::readOption rOpt,
|
||||||
|
const bool readFromFiles
|
||||||
|
)
|
||||||
|
{
|
||||||
|
IOdictionary dict
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
dictName,
|
||||||
|
obr.time().system(),
|
||||||
|
obr,
|
||||||
|
rOpt,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return OutputFilter::viable(outputFilterName, obr, dict, readFromFiles);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class OutputFilter>
|
template<class OutputFilter>
|
||||||
Foam::IOOutputFilter<OutputFilter>::IOOutputFilter
|
Foam::IOOutputFilter<OutputFilter>::IOOutputFilter
|
||||||
(
|
(
|
||||||
@ -99,6 +125,13 @@ Foam::IOOutputFilter<OutputFilter>::~IOOutputFilter()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class OutputFilter>
|
||||||
|
const Foam::word& Foam::IOOutputFilter<OutputFilter>::name() const
|
||||||
|
{
|
||||||
|
return IOdictionary::name();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class OutputFilter>
|
template<class OutputFilter>
|
||||||
bool Foam::IOOutputFilter<OutputFilter>::read()
|
bool Foam::IOOutputFilter<OutputFilter>::read()
|
||||||
{
|
{
|
||||||
@ -121,4 +154,20 @@ void Foam::IOOutputFilter<OutputFilter>::write()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class OutputFilter>
|
||||||
|
void Foam::IOOutputFilter<OutputFilter>::updateMesh(const mapPolyMesh& mpm)
|
||||||
|
{
|
||||||
|
read();
|
||||||
|
OutputFilter::updateMesh(mpm);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class OutputFilter>
|
||||||
|
void Foam::IOOutputFilter<OutputFilter>::movePoints(const polyMesh& mesh)
|
||||||
|
{
|
||||||
|
read();
|
||||||
|
OutputFilter::movePoints(mesh);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -94,6 +94,16 @@ public:
|
|||||||
const bool loadFromFile = false
|
const bool loadFromFile = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& outputFilterName,
|
||||||
|
const objectRegistry&,
|
||||||
|
const word& dictName = OutputFilter::typeName() + "Dict",
|
||||||
|
const IOobject::readOption rOpt = IOobject::MUST_READ_IF_MODIFIED,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
//- Construct for given objectRegistry and dictionary
|
//- Construct for given objectRegistry and dictionary
|
||||||
// Dictionary read from full path.
|
// Dictionary read from full path.
|
||||||
// Allow the possibility to load fields from files
|
// Allow the possibility to load fields from files
|
||||||
@ -114,10 +124,7 @@ public:
|
|||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return name
|
//- Return name
|
||||||
virtual const word& name() const
|
virtual const word& name() const;
|
||||||
{
|
|
||||||
return IOdictionary::name();
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Inherit read from OutputFilter
|
//- Inherit read from OutputFilter
|
||||||
using OutputFilter::read;
|
using OutputFilter::read;
|
||||||
@ -132,18 +139,10 @@ public:
|
|||||||
virtual void write();
|
virtual void write();
|
||||||
|
|
||||||
//- Update for changes of mesh
|
//- Update for changes of mesh
|
||||||
virtual void updateMesh(const mapPolyMesh& mpm)
|
virtual void updateMesh(const mapPolyMesh& mpm);
|
||||||
{
|
|
||||||
read();
|
|
||||||
OutputFilter::updateMesh(mpm);
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Update for changes of mesh
|
//- Update for changes of mesh
|
||||||
virtual void movePoints(const polyMesh& mesh)
|
virtual void movePoints(const polyMesh& mesh);
|
||||||
{
|
|
||||||
read();
|
|
||||||
OutputFilter::movePoints(mesh);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -55,32 +55,64 @@ bool Foam::OutputFilterFunctionObject<OutputFilter>::active() const
|
|||||||
|
|
||||||
|
|
||||||
template<class OutputFilter>
|
template<class OutputFilter>
|
||||||
void Foam::OutputFilterFunctionObject<OutputFilter>::allocateFilter()
|
bool Foam::OutputFilterFunctionObject<OutputFilter>::allocateFilter()
|
||||||
{
|
{
|
||||||
if (dictName_.size())
|
if (dictName_.size())
|
||||||
{
|
{
|
||||||
ptr_.reset
|
if
|
||||||
(
|
(
|
||||||
new IOOutputFilter<OutputFilter>
|
IOOutputFilter<OutputFilter>::viable
|
||||||
(
|
(
|
||||||
name(),
|
name(),
|
||||||
time_.lookupObject<objectRegistry>(regionName_),
|
time_.lookupObject<objectRegistry>(regionName_),
|
||||||
dictName_
|
dictName_
|
||||||
)
|
)
|
||||||
);
|
)
|
||||||
|
{
|
||||||
|
ptr_.reset
|
||||||
|
(
|
||||||
|
new IOOutputFilter<OutputFilter>
|
||||||
|
(
|
||||||
|
name(),
|
||||||
|
time_.lookupObject<objectRegistry>(regionName_),
|
||||||
|
dictName_
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
enabled_ = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ptr_.reset
|
if
|
||||||
(
|
(
|
||||||
new OutputFilter
|
OutputFilter::viable
|
||||||
(
|
(
|
||||||
name(),
|
name(),
|
||||||
time_.lookupObject<objectRegistry>(regionName_),
|
time_.lookupObject<objectRegistry>(regionName_),
|
||||||
dict_
|
dict_
|
||||||
)
|
)
|
||||||
);
|
)
|
||||||
|
{
|
||||||
|
ptr_.reset
|
||||||
|
(
|
||||||
|
new OutputFilter
|
||||||
|
(
|
||||||
|
name(),
|
||||||
|
time_.lookupObject<objectRegistry>(regionName_),
|
||||||
|
dict_
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
enabled_ = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return enabled_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -144,10 +176,12 @@ bool Foam::OutputFilterFunctionObject<OutputFilter>::start()
|
|||||||
|
|
||||||
if (enabled_ && storeFilter_)
|
if (enabled_ && storeFilter_)
|
||||||
{
|
{
|
||||||
allocateFilter();
|
return allocateFilter();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -159,9 +193,9 @@ bool Foam::OutputFilterFunctionObject<OutputFilter>::execute
|
|||||||
{
|
{
|
||||||
if (active())
|
if (active())
|
||||||
{
|
{
|
||||||
if (!storeFilter_)
|
if (!storeFilter_ && !allocateFilter())
|
||||||
{
|
{
|
||||||
allocateFilter();
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (evaluateControl_.output())
|
if (evaluateControl_.output())
|
||||||
@ -189,9 +223,9 @@ bool Foam::OutputFilterFunctionObject<OutputFilter>::end()
|
|||||||
{
|
{
|
||||||
if (enabled_)
|
if (enabled_)
|
||||||
{
|
{
|
||||||
if (!storeFilter_)
|
if (!storeFilter_ && !allocateFilter())
|
||||||
{
|
{
|
||||||
allocateFilter();
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr_->end();
|
ptr_->end();
|
||||||
|
|||||||
@ -111,7 +111,7 @@ class OutputFilterFunctionObject
|
|||||||
void readDict();
|
void readDict();
|
||||||
|
|
||||||
//- Creates most of the data associated with this object.
|
//- Creates most of the data associated with this object.
|
||||||
void allocateFilter();
|
bool allocateFilter();
|
||||||
|
|
||||||
//- Destroys most of the data associated with this object.
|
//- Destroys most of the data associated with this object.
|
||||||
void destroyFilter();
|
void destroyFilter();
|
||||||
|
|||||||
@ -96,7 +96,6 @@ void Foam::fv::rotorDiskSource::checkData()
|
|||||||
}
|
}
|
||||||
case ifLocal:
|
case ifLocal:
|
||||||
{
|
{
|
||||||
// Do nothing
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|||||||
@ -58,8 +58,7 @@ Foam::functionObjects::partialWrite::partialWrite
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::autoPtr<Foam::functionObjects::partialWrite>
|
bool Foam::functionObjects::partialWrite::viable
|
||||||
Foam::functionObjects::partialWrite::New
|
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -67,17 +66,8 @@ Foam::functionObjects::partialWrite::New
|
|||||||
const bool loadFromFiles
|
const bool loadFromFiles
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (isA<fvMesh>(obr))
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
{
|
return isA<fvMesh>(obr);
|
||||||
return autoPtr<partialWrite>
|
|
||||||
(
|
|
||||||
new partialWrite(name, obr, dict, loadFromFiles)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return autoPtr<partialWrite>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::partialWrite
|
Foam::functionObjects::partialWrite
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpIOFunctionObjects
|
grpIOFunctionObjects
|
||||||
@ -171,9 +171,9 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct on free-store and return pointer if successful
|
//- Return true if the construction of this functionObject is viable
|
||||||
// otherwise return a null-pointer
|
// i.e. the prerequisites for construction are available
|
||||||
static autoPtr<partialWrite> New
|
static bool viable
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry&,
|
const objectRegistry&,
|
||||||
|
|||||||
@ -56,8 +56,7 @@ Foam::functionObjects::removeRegisteredObject::removeRegisteredObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::autoPtr<Foam::functionObjects::removeRegisteredObject>
|
bool Foam::functionObjects::removeRegisteredObject::viable
|
||||||
Foam::functionObjects::removeRegisteredObject::New
|
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -65,10 +64,7 @@ Foam::functionObjects::removeRegisteredObject::New
|
|||||||
const bool loadFromFiles
|
const bool loadFromFiles
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return autoPtr<removeRegisteredObject>
|
return true;
|
||||||
(
|
|
||||||
new removeRegisteredObject(name, obr, dict, loadFromFiles)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::removeRegisteredObject
|
Foam::functionObjects::removeRegisteredObject
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpIOFunctionObjects
|
grpIOFunctionObjects
|
||||||
@ -128,9 +128,9 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct on free-store and return pointer if successful
|
//- Return true if the construction of this functionObject is viable
|
||||||
// otherwise return a null-pointer
|
// i.e. the prerequisites for construction are available
|
||||||
static autoPtr<removeRegisteredObject> New
|
static bool viable
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry&,
|
const objectRegistry&,
|
||||||
|
|||||||
@ -107,8 +107,7 @@ Foam::functionObjects::writeDictionary::writeDictionary
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::autoPtr<Foam::functionObjects::writeDictionary>
|
bool Foam::functionObjects::writeDictionary::viable
|
||||||
Foam::functionObjects::writeDictionary::New
|
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -116,10 +115,7 @@ Foam::functionObjects::writeDictionary::New
|
|||||||
const bool loadFromFiles
|
const bool loadFromFiles
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return autoPtr<writeDictionary>
|
return true;
|
||||||
(
|
|
||||||
new writeDictionary(name, obr, dict, loadFromFiles)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::writeDictionary
|
Foam::functionObjects::writeDictionary
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpUtilitiesFunctionObjects
|
grpUtilitiesFunctionObjects
|
||||||
@ -120,9 +120,9 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct on free-store and return pointer if successful
|
//- Return true if the construction of this functionObject is viable
|
||||||
// otherwise return a null-pointer
|
// i.e. the prerequisites for construction are available
|
||||||
static autoPtr<writeDictionary> New
|
static bool viable
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry&,
|
const objectRegistry&,
|
||||||
|
|||||||
@ -57,8 +57,7 @@ Foam::functionObjects::writeRegisteredObject::writeRegisteredObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::autoPtr<Foam::functionObjects::writeRegisteredObject>
|
bool Foam::functionObjects::writeRegisteredObject::viable
|
||||||
Foam::functionObjects::writeRegisteredObject::New
|
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -66,10 +65,7 @@ Foam::functionObjects::writeRegisteredObject::New
|
|||||||
const bool loadFromFiles
|
const bool loadFromFiles
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return autoPtr<writeRegisteredObject>
|
return true;
|
||||||
(
|
|
||||||
new writeRegisteredObject(name, obr, dict, loadFromFiles)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::writeRegisteredObject
|
Foam::functionObjects::writeRegisteredObject
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpIOFunctionObjects
|
grpIOFunctionObjects
|
||||||
@ -143,9 +143,9 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct on free-store and return pointer if successful
|
//- Return true if the construction of this functionObject is viable
|
||||||
// otherwise return a null-pointer
|
// i.e. the prerequisites for construction are available
|
||||||
static autoPtr<writeRegisteredObject> New
|
static bool viable
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry&,
|
const objectRegistry&,
|
||||||
|
|||||||
@ -62,15 +62,13 @@ Foam::functionObjects::cloudInfo::cloudInfo
|
|||||||
:
|
:
|
||||||
functionObjectFiles(obr, name),
|
functionObjectFiles(obr, name),
|
||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr)
|
||||||
active_(true)
|
|
||||||
{
|
{
|
||||||
read(dict);
|
read(dict);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::autoPtr<Foam::functionObjects::cloudInfo>
|
bool Foam::functionObjects::cloudInfo::viable
|
||||||
Foam::functionObjects::cloudInfo::New
|
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -78,10 +76,7 @@ Foam::functionObjects::cloudInfo::New
|
|||||||
const bool loadFromFiles
|
const bool loadFromFiles
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return autoPtr<cloudInfo>
|
return true;
|
||||||
(
|
|
||||||
new cloudInfo(name, obr, dict, loadFromFiles)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -95,24 +90,21 @@ Foam::functionObjects::cloudInfo::~cloudInfo()
|
|||||||
|
|
||||||
void Foam::functionObjects::cloudInfo::read(const dictionary& dict)
|
void Foam::functionObjects::cloudInfo::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (active_)
|
functionObjectFiles::resetNames(dict.lookup("clouds"));
|
||||||
{
|
|
||||||
functionObjectFiles::resetNames(dict.lookup("clouds"));
|
|
||||||
|
|
||||||
Info<< type() << " " << name_ << ": ";
|
Info<< type() << " " << name_ << ": ";
|
||||||
if (names().size())
|
if (names().size())
|
||||||
|
{
|
||||||
|
Info<< "applying to clouds:" << nl;
|
||||||
|
forAll(names(), i)
|
||||||
{
|
{
|
||||||
Info<< "applying to clouds:" << nl;
|
Info<< " " << names()[i] << nl;
|
||||||
forAll(names(), i)
|
|
||||||
{
|
|
||||||
Info<< " " << names()[i] << nl;
|
|
||||||
}
|
|
||||||
Info<< endl;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Info<< "no clouds to be processed" << nl << endl;
|
|
||||||
}
|
}
|
||||||
|
Info<< endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Info<< "no clouds to be processed" << nl << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,29 +123,26 @@ void Foam::functionObjects::cloudInfo::timeSet()
|
|||||||
|
|
||||||
void Foam::functionObjects::cloudInfo::write()
|
void Foam::functionObjects::cloudInfo::write()
|
||||||
{
|
{
|
||||||
if (active_)
|
functionObjectFiles::write();
|
||||||
|
|
||||||
|
forAll(names(), i)
|
||||||
{
|
{
|
||||||
functionObjectFiles::write();
|
const word& cloudName = names()[i];
|
||||||
|
|
||||||
forAll(names(), i)
|
const kinematicCloud& cloud =
|
||||||
|
obr_.lookupObject<kinematicCloud>(cloudName);
|
||||||
|
|
||||||
|
label nParcels = returnReduce(cloud.nParcels(), sumOp<label>());
|
||||||
|
scalar massInSystem =
|
||||||
|
returnReduce(cloud.massInSystem(), sumOp<scalar>());
|
||||||
|
|
||||||
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
const word& cloudName = names()[i];
|
writeTime(file(i));
|
||||||
|
file(i)
|
||||||
const kinematicCloud& cloud =
|
<< token::TAB
|
||||||
obr_.lookupObject<kinematicCloud>(cloudName);
|
<< nParcels << token::TAB
|
||||||
|
<< massInSystem << endl;
|
||||||
label nParcels = returnReduce(cloud.nParcels(), sumOp<label>());
|
|
||||||
scalar massInSystem =
|
|
||||||
returnReduce(cloud.massInSystem(), sumOp<scalar>());
|
|
||||||
|
|
||||||
if (Pstream::master())
|
|
||||||
{
|
|
||||||
writeTime(file(i));
|
|
||||||
file(i)
|
|
||||||
<< token::TAB
|
|
||||||
<< nParcels << token::TAB
|
|
||||||
<< massInSystem << endl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::cloudInfo
|
Foam::functionObjects::cloudInfo
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpCloudFunctionObjects
|
grpCloudFunctionObjects
|
||||||
@ -109,9 +109,6 @@ protected:
|
|||||||
//- Reference to the database
|
//- Reference to the database
|
||||||
const objectRegistry& obr_;
|
const objectRegistry& obr_;
|
||||||
|
|
||||||
//- on/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
|
|
||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
@ -148,9 +145,9 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct on free-store and return pointer if successful
|
//- Return true if the construction of this functionObject is viable
|
||||||
// otherwise return a null-pointer
|
// i.e. the prerequisites for construction are available
|
||||||
static autoPtr<cloudInfo> New
|
static bool viable
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry&,
|
const objectRegistry&,
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -39,7 +39,7 @@ Description
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef IOOutputFilter<fieldAverage> IOFieldAverage;
|
typedef IOOutputFilter<functionObjects::fieldAverage> IOFieldAverage;
|
||||||
}
|
}
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -26,20 +26,22 @@ License
|
|||||||
#include "fieldAverage.H"
|
#include "fieldAverage.H"
|
||||||
#include "volFields.H"
|
#include "volFields.H"
|
||||||
#include "Time.H"
|
#include "Time.H"
|
||||||
|
|
||||||
#include "fieldAverageItem.H"
|
#include "fieldAverageItem.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace functionObjects
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(fieldAverage, 0);
|
defineTypeNameAndDebug(fieldAverage, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::fieldAverage::resetFields()
|
void Foam::functionObjects::fieldAverage::resetFields()
|
||||||
{
|
{
|
||||||
forAll(faItems_, i)
|
forAll(faItems_, i)
|
||||||
{
|
{
|
||||||
@ -62,7 +64,7 @@ void Foam::fieldAverage::resetFields()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldAverage::initialize()
|
void Foam::functionObjects::fieldAverage::initialize()
|
||||||
{
|
{
|
||||||
resetFields();
|
resetFields();
|
||||||
|
|
||||||
@ -85,16 +87,6 @@ void Foam::fieldAverage::initialize()
|
|||||||
addPrime2MeanField<vector, symmTensor>(fieldI);
|
addPrime2MeanField<vector, symmTensor>(fieldI);
|
||||||
}
|
}
|
||||||
|
|
||||||
forAll(faItems_, fieldI)
|
|
||||||
{
|
|
||||||
if (!faItems_[fieldI].active())
|
|
||||||
{
|
|
||||||
WarningInFunction
|
|
||||||
<< "Field " << faItems_[fieldI].fieldName()
|
|
||||||
<< " not found in database for averaging";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ensure first averaging works unconditionally
|
// ensure first averaging works unconditionally
|
||||||
prevTimeIndex_ = -1;
|
prevTimeIndex_ = -1;
|
||||||
|
|
||||||
@ -104,7 +96,7 @@ void Foam::fieldAverage::initialize()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldAverage::restart()
|
void Foam::functionObjects::fieldAverage::restart()
|
||||||
{
|
{
|
||||||
Info<< " Restarting averaging at time " << obr_.time().timeName()
|
Info<< " Restarting averaging at time " << obr_.time().timeName()
|
||||||
<< nl << endl;
|
<< nl << endl;
|
||||||
@ -119,7 +111,7 @@ void Foam::fieldAverage::restart()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldAverage::calcAverages()
|
void Foam::functionObjects::fieldAverage::calcAverages()
|
||||||
{
|
{
|
||||||
if (!initialised_)
|
if (!initialised_)
|
||||||
{
|
{
|
||||||
@ -168,7 +160,7 @@ void Foam::fieldAverage::calcAverages()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldAverage::writeAverages() const
|
void Foam::functionObjects::fieldAverage::writeAverages() const
|
||||||
{
|
{
|
||||||
Info<< " Writing average fields" << endl;
|
Info<< " Writing average fields" << endl;
|
||||||
|
|
||||||
@ -180,7 +172,7 @@ void Foam::fieldAverage::writeAverages() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldAverage::writeAveragingProperties() const
|
void Foam::functionObjects::fieldAverage::writeAveragingProperties() const
|
||||||
{
|
{
|
||||||
IOdictionary propsDict
|
IOdictionary propsDict
|
||||||
(
|
(
|
||||||
@ -208,7 +200,7 @@ void Foam::fieldAverage::writeAveragingProperties() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldAverage::readAveragingProperties()
|
void Foam::functionObjects::fieldAverage::readAveragingProperties()
|
||||||
{
|
{
|
||||||
totalIter_.clear();
|
totalIter_.clear();
|
||||||
totalIter_.setSize(faItems_.size(), 1);
|
totalIter_.setSize(faItems_.size(), 1);
|
||||||
@ -264,7 +256,7 @@ void Foam::fieldAverage::readAveragingProperties()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::fieldAverage::fieldAverage
|
Foam::functionObjects::fieldAverage::fieldAverage
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -274,7 +266,6 @@ Foam::fieldAverage::fieldAverage
|
|||||||
:
|
:
|
||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr),
|
||||||
active_(true),
|
|
||||||
prevTimeIndex_(-1),
|
prevTimeIndex_(-1),
|
||||||
restartOnRestart_(false),
|
restartOnRestart_(false),
|
||||||
restartOnOutput_(false),
|
restartOnOutput_(false),
|
||||||
@ -286,105 +277,91 @@ Foam::fieldAverage::fieldAverage
|
|||||||
totalTime_(),
|
totalTime_(),
|
||||||
periodIndex_(1)
|
periodIndex_(1)
|
||||||
{
|
{
|
||||||
// Only active if a fvMesh is available
|
read(dict);
|
||||||
if (isA<fvMesh>(obr_))
|
}
|
||||||
{
|
|
||||||
read(dict);
|
|
||||||
}
|
bool Foam::functionObjects::fieldAverage::viable
|
||||||
else
|
(
|
||||||
{
|
const word& name,
|
||||||
active_ = false;
|
const objectRegistry& obr,
|
||||||
WarningInFunction
|
const dictionary& dict,
|
||||||
<< "No fvMesh available, deactivating " << name_ << nl
|
const bool loadFromFiles
|
||||||
<< endl;
|
)
|
||||||
}
|
{
|
||||||
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
|
return isA<fvMesh>(obr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::fieldAverage::~fieldAverage()
|
Foam::functionObjects::fieldAverage::~fieldAverage()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::fieldAverage::read(const dictionary& dict)
|
void Foam::functionObjects::fieldAverage::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (active_)
|
initialised_ = false;
|
||||||
|
|
||||||
|
Info<< type() << " " << name_ << ":" << nl;
|
||||||
|
|
||||||
|
dict.readIfPresent("restartOnRestart", restartOnRestart_);
|
||||||
|
dict.readIfPresent("restartOnOutput", restartOnOutput_);
|
||||||
|
dict.readIfPresent("periodicRestart", periodicRestart_);
|
||||||
|
dict.lookup("fields") >> faItems_;
|
||||||
|
|
||||||
|
if (periodicRestart_)
|
||||||
{
|
{
|
||||||
initialised_ = false;
|
dict.lookup("restartPeriod") >> restartPeriod_;
|
||||||
|
|
||||||
Info<< type() << " " << name_ << ":" << nl;
|
|
||||||
|
|
||||||
dict.readIfPresent("restartOnRestart", restartOnRestart_);
|
|
||||||
dict.readIfPresent("restartOnOutput", restartOnOutput_);
|
|
||||||
dict.readIfPresent("periodicRestart", periodicRestart_);
|
|
||||||
dict.lookup("fields") >> faItems_;
|
|
||||||
|
|
||||||
if (periodicRestart_)
|
|
||||||
{
|
|
||||||
dict.lookup("restartPeriod") >> restartPeriod_;
|
|
||||||
}
|
|
||||||
|
|
||||||
readAveragingProperties();
|
|
||||||
|
|
||||||
Info<< endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
readAveragingProperties();
|
||||||
|
|
||||||
|
Info<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldAverage::execute()
|
void Foam::functionObjects::fieldAverage::execute()
|
||||||
{
|
{
|
||||||
if (active_)
|
calcAverages();
|
||||||
{
|
Info<< endl;
|
||||||
calcAverages();
|
|
||||||
Info<< endl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldAverage::end()
|
void Foam::functionObjects::fieldAverage::end()
|
||||||
{
|
{
|
||||||
if (active_)
|
calcAverages();
|
||||||
{
|
Info<< endl;
|
||||||
calcAverages();
|
|
||||||
Info<< endl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldAverage::timeSet()
|
void Foam::functionObjects::fieldAverage::timeSet()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldAverage::write()
|
void Foam::functionObjects::fieldAverage::write()
|
||||||
{
|
{
|
||||||
if (active_)
|
writeAverages();
|
||||||
|
writeAveragingProperties();
|
||||||
|
|
||||||
|
if (restartOnOutput_)
|
||||||
{
|
{
|
||||||
writeAverages();
|
restart();
|
||||||
writeAveragingProperties();
|
|
||||||
|
|
||||||
if (restartOnOutput_)
|
|
||||||
{
|
|
||||||
restart();
|
|
||||||
}
|
|
||||||
|
|
||||||
Info<< endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Info<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldAverage::updateMesh(const mapPolyMesh&)
|
void Foam::functionObjects::fieldAverage::updateMesh(const mapPolyMesh&)
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldAverage::movePoints(const polyMesh&)
|
void Foam::functionObjects::fieldAverage::movePoints(const polyMesh&)
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::fieldAverage
|
Foam::functionObjects::fieldAverage
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFieldFunctionObjects
|
grpFieldFunctionObjects
|
||||||
@ -133,12 +133,17 @@ namespace Foam
|
|||||||
// Forward declaration of classes
|
// Forward declaration of classes
|
||||||
class objectRegistry;
|
class objectRegistry;
|
||||||
class dictionary;
|
class dictionary;
|
||||||
class fieldAverageItem;
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
class List;
|
class List;
|
||||||
class polyMesh;
|
class polyMesh;
|
||||||
class mapPolyMesh;
|
class mapPolyMesh;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
|
// Forward declaration of classes
|
||||||
|
class fieldAverageItem;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class fieldAverage Declaration
|
Class fieldAverage Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -155,9 +160,6 @@ protected:
|
|||||||
//- Database this class is registered to
|
//- Database this class is registered to
|
||||||
const objectRegistry& obr_;
|
const objectRegistry& obr_;
|
||||||
|
|
||||||
//- On/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
//- Time at last call, prevents repeated averaging
|
//- Time at last call, prevents repeated averaging
|
||||||
label prevTimeIndex_;
|
label prevTimeIndex_;
|
||||||
|
|
||||||
@ -299,6 +301,16 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~fieldAverage();
|
virtual ~fieldAverage();
|
||||||
@ -337,6 +349,7 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -31,10 +31,8 @@ License
|
|||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::fieldAverage::addMeanFieldType(const label fieldI)
|
void Foam::functionObjects::fieldAverage::addMeanFieldType(const label fieldI)
|
||||||
{
|
{
|
||||||
faItems_[fieldI].active() = true;
|
|
||||||
|
|
||||||
const word& fieldName = faItems_[fieldI].fieldName();
|
const word& fieldName = faItems_[fieldI].fieldName();
|
||||||
const word& meanFieldName = faItems_[fieldI].meanFieldName();
|
const word& meanFieldName = faItems_[fieldI].meanFieldName();
|
||||||
|
|
||||||
@ -79,7 +77,7 @@ void Foam::fieldAverage::addMeanFieldType(const label fieldI)
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::fieldAverage::addMeanField(const label fieldI)
|
void Foam::functionObjects::fieldAverage::addMeanField(const label fieldI)
|
||||||
{
|
{
|
||||||
if (faItems_[fieldI].mean())
|
if (faItems_[fieldI].mean())
|
||||||
{
|
{
|
||||||
@ -101,7 +99,10 @@ void Foam::fieldAverage::addMeanField(const label fieldI)
|
|||||||
|
|
||||||
|
|
||||||
template<class Type1, class Type2>
|
template<class Type1, class Type2>
|
||||||
void Foam::fieldAverage::addPrime2MeanFieldType(const label fieldI)
|
void Foam::functionObjects::fieldAverage::addPrime2MeanFieldType
|
||||||
|
(
|
||||||
|
const label fieldI
|
||||||
|
)
|
||||||
{
|
{
|
||||||
const word& fieldName = faItems_[fieldI].fieldName();
|
const word& fieldName = faItems_[fieldI].fieldName();
|
||||||
const word& meanFieldName = faItems_[fieldI].meanFieldName();
|
const word& meanFieldName = faItems_[fieldI].meanFieldName();
|
||||||
@ -149,7 +150,7 @@ void Foam::fieldAverage::addPrime2MeanFieldType(const label fieldI)
|
|||||||
|
|
||||||
|
|
||||||
template<class Type1, class Type2>
|
template<class Type1, class Type2>
|
||||||
void Foam::fieldAverage::addPrime2MeanField(const label fieldI)
|
void Foam::functionObjects::fieldAverage::addPrime2MeanField(const label fieldI)
|
||||||
{
|
{
|
||||||
typedef GeometricField<Type1, fvPatchField, volMesh> volFieldType1;
|
typedef GeometricField<Type1, fvPatchField, volMesh> volFieldType1;
|
||||||
typedef GeometricField<Type1, fvsPatchField, surfaceMesh> surfFieldType1;
|
typedef GeometricField<Type1, fvsPatchField, surfaceMesh> surfFieldType1;
|
||||||
@ -182,7 +183,10 @@ void Foam::fieldAverage::addPrime2MeanField(const label fieldI)
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::fieldAverage::calculateMeanFieldType(const label fieldI) const
|
void Foam::functionObjects::fieldAverage::calculateMeanFieldType
|
||||||
|
(
|
||||||
|
const label fieldI
|
||||||
|
) const
|
||||||
{
|
{
|
||||||
const word& fieldName = faItems_[fieldI].fieldName();
|
const word& fieldName = faItems_[fieldI].fieldName();
|
||||||
|
|
||||||
@ -224,7 +228,7 @@ void Foam::fieldAverage::calculateMeanFieldType(const label fieldI) const
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::fieldAverage::calculateMeanFields() const
|
void Foam::functionObjects::fieldAverage::calculateMeanFields() const
|
||||||
{
|
{
|
||||||
typedef GeometricField<Type, fvPatchField, volMesh> volFieldType;
|
typedef GeometricField<Type, fvPatchField, volMesh> volFieldType;
|
||||||
typedef GeometricField<Type, fvsPatchField, surfaceMesh> surfFieldType;
|
typedef GeometricField<Type, fvsPatchField, surfaceMesh> surfFieldType;
|
||||||
@ -241,7 +245,10 @@ void Foam::fieldAverage::calculateMeanFields() const
|
|||||||
|
|
||||||
|
|
||||||
template<class Type1, class Type2>
|
template<class Type1, class Type2>
|
||||||
void Foam::fieldAverage::calculatePrime2MeanFieldType(const label fieldI) const
|
void Foam::functionObjects::fieldAverage::calculatePrime2MeanFieldType
|
||||||
|
(
|
||||||
|
const label fieldI
|
||||||
|
) const
|
||||||
{
|
{
|
||||||
const word& fieldName = faItems_[fieldI].fieldName();
|
const word& fieldName = faItems_[fieldI].fieldName();
|
||||||
|
|
||||||
@ -288,7 +295,7 @@ void Foam::fieldAverage::calculatePrime2MeanFieldType(const label fieldI) const
|
|||||||
|
|
||||||
|
|
||||||
template<class Type1, class Type2>
|
template<class Type1, class Type2>
|
||||||
void Foam::fieldAverage::calculatePrime2MeanFields() const
|
void Foam::functionObjects::fieldAverage::calculatePrime2MeanFields() const
|
||||||
{
|
{
|
||||||
typedef GeometricField<Type1, fvPatchField, volMesh> volFieldType1;
|
typedef GeometricField<Type1, fvPatchField, volMesh> volFieldType1;
|
||||||
typedef GeometricField<Type1, fvsPatchField, surfaceMesh> surfFieldType1;
|
typedef GeometricField<Type1, fvsPatchField, surfaceMesh> surfFieldType1;
|
||||||
@ -308,7 +315,10 @@ void Foam::fieldAverage::calculatePrime2MeanFields() const
|
|||||||
|
|
||||||
|
|
||||||
template<class Type1, class Type2>
|
template<class Type1, class Type2>
|
||||||
void Foam::fieldAverage::addMeanSqrToPrime2MeanType(const label fieldI) const
|
void Foam::functionObjects::fieldAverage::addMeanSqrToPrime2MeanType
|
||||||
|
(
|
||||||
|
const label fieldI
|
||||||
|
) const
|
||||||
{
|
{
|
||||||
const word& fieldName = faItems_[fieldI].fieldName();
|
const word& fieldName = faItems_[fieldI].fieldName();
|
||||||
|
|
||||||
@ -328,7 +338,7 @@ void Foam::fieldAverage::addMeanSqrToPrime2MeanType(const label fieldI) const
|
|||||||
|
|
||||||
|
|
||||||
template<class Type1, class Type2>
|
template<class Type1, class Type2>
|
||||||
void Foam::fieldAverage::addMeanSqrToPrime2Mean() const
|
void Foam::functionObjects::fieldAverage::addMeanSqrToPrime2Mean() const
|
||||||
{
|
{
|
||||||
typedef GeometricField<Type1, fvPatchField, volMesh> volFieldType1;
|
typedef GeometricField<Type1, fvPatchField, volMesh> volFieldType1;
|
||||||
typedef GeometricField<Type1, fvsPatchField, surfaceMesh> surfFieldType1;
|
typedef GeometricField<Type1, fvsPatchField, surfaceMesh> surfFieldType1;
|
||||||
@ -348,7 +358,10 @@ void Foam::fieldAverage::addMeanSqrToPrime2Mean() const
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::fieldAverage::writeFieldType(const word& fieldName) const
|
void Foam::functionObjects::fieldAverage::writeFieldType
|
||||||
|
(
|
||||||
|
const word& fieldName
|
||||||
|
) const
|
||||||
{
|
{
|
||||||
if (obr_.foundObject<Type>(fieldName))
|
if (obr_.foundObject<Type>(fieldName))
|
||||||
{
|
{
|
||||||
@ -359,7 +372,7 @@ void Foam::fieldAverage::writeFieldType(const word& fieldName) const
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::fieldAverage::writeFields() const
|
void Foam::functionObjects::fieldAverage::writeFields() const
|
||||||
{
|
{
|
||||||
typedef GeometricField<Type, fvPatchField, volMesh> volFieldType;
|
typedef GeometricField<Type, fvPatchField, volMesh> volFieldType;
|
||||||
typedef GeometricField<Type, fvsPatchField, surfaceMesh> surfFieldType;
|
typedef GeometricField<Type, fvsPatchField, surfaceMesh> surfFieldType;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,7 +43,7 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<fieldAverage>
|
typedef OutputFilterFunctionObject<functionObjects::fieldAverage>
|
||||||
fieldAverageFunctionObject;
|
fieldAverageFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -27,33 +27,34 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
const Foam::word Foam::functionObjects::fieldAverageItem::EXT_MEAN
|
||||||
{
|
(
|
||||||
const word fieldAverageItem::EXT_MEAN = "Mean";
|
"Mean"
|
||||||
const word fieldAverageItem::EXT_PRIME2MEAN = "Prime2Mean";
|
);
|
||||||
|
|
||||||
template<>
|
const Foam::word Foam::functionObjects::fieldAverageItem::EXT_PRIME2MEAN
|
||||||
const char* Foam::NamedEnum
|
(
|
||||||
<
|
"Prime2Mean"
|
||||||
Foam::fieldAverageItem::baseType,
|
);
|
||||||
2
|
|
||||||
>::names[] =
|
|
||||||
{
|
|
||||||
"iteration",
|
|
||||||
"time"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const char* Foam::NamedEnum
|
||||||
|
<
|
||||||
|
Foam::functionObjects::fieldAverageItem::baseType,
|
||||||
|
2
|
||||||
|
>::names[] = { "iteration", "time"};
|
||||||
|
|
||||||
const Foam::NamedEnum<Foam::fieldAverageItem::baseType, 2>
|
const Foam::NamedEnum
|
||||||
Foam::fieldAverageItem::baseTypeNames_;
|
<
|
||||||
|
Foam::functionObjects::fieldAverageItem::baseType,
|
||||||
|
2
|
||||||
|
> Foam::functionObjects::fieldAverageItem::baseTypeNames_;
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::fieldAverageItem::fieldAverageItem()
|
Foam::functionObjects::fieldAverageItem::fieldAverageItem()
|
||||||
:
|
:
|
||||||
active_(false),
|
|
||||||
fieldName_("unknown"),
|
fieldName_("unknown"),
|
||||||
mean_(0),
|
mean_(0),
|
||||||
meanFieldName_("unknown"),
|
meanFieldName_("unknown"),
|
||||||
@ -65,9 +66,11 @@ Foam::fieldAverageItem::fieldAverageItem()
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
Foam::fieldAverageItem::fieldAverageItem(const fieldAverageItem& faItem)
|
Foam::functionObjects::fieldAverageItem::fieldAverageItem
|
||||||
|
(
|
||||||
|
const fieldAverageItem& faItem
|
||||||
|
)
|
||||||
:
|
:
|
||||||
active_(faItem.active_),
|
|
||||||
fieldName_(faItem.fieldName_),
|
fieldName_(faItem.fieldName_),
|
||||||
mean_(faItem.mean_),
|
mean_(faItem.mean_),
|
||||||
meanFieldName_(faItem.meanFieldName_),
|
meanFieldName_(faItem.meanFieldName_),
|
||||||
@ -81,13 +84,16 @@ Foam::fieldAverageItem::fieldAverageItem(const fieldAverageItem& faItem)
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::fieldAverageItem::~fieldAverageItem()
|
Foam::functionObjects::fieldAverageItem::~fieldAverageItem()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::fieldAverageItem::operator=(const fieldAverageItem& rhs)
|
void Foam::functionObjects::fieldAverageItem::operator=
|
||||||
|
(
|
||||||
|
const fieldAverageItem& rhs
|
||||||
|
)
|
||||||
{
|
{
|
||||||
// Check for assignment to self
|
// Check for assignment to self
|
||||||
if (this == &rhs)
|
if (this == &rhs)
|
||||||
@ -98,7 +104,6 @@ void Foam::fieldAverageItem::operator=(const fieldAverageItem& rhs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set updated values
|
// Set updated values
|
||||||
active_ = rhs.active_;
|
|
||||||
fieldName_ = rhs.fieldName_;
|
fieldName_ = rhs.fieldName_;
|
||||||
mean_ = rhs.mean_;
|
mean_ = rhs.mean_;
|
||||||
meanFieldName_ = rhs.meanFieldName_;
|
meanFieldName_ = rhs.meanFieldName_;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::fieldAverageItem
|
Foam::functionObjects::fieldAverageItem
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Helper class to describe what form of averaging to apply. A set will be
|
Helper class to describe what form of averaging to apply. A set will be
|
||||||
@ -62,12 +62,14 @@ namespace Foam
|
|||||||
class Istream;
|
class Istream;
|
||||||
class Ostream;
|
class Ostream;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
// Forward declaration of friend functions and operators
|
// Forward declaration of friend functions and operators
|
||||||
class fieldAverageItem;
|
class fieldAverageItem;
|
||||||
Istream& operator>>(Istream&, fieldAverageItem&);
|
Istream& operator>>(Istream&, fieldAverageItem&);
|
||||||
Ostream& operator<<(Ostream&, const fieldAverageItem&);
|
Ostream& operator<<(Ostream&, const fieldAverageItem&);
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class fieldAverageItem Declaration
|
Class fieldAverageItem Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -98,9 +100,6 @@ private:
|
|||||||
|
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
//- Active flag
|
|
||||||
Switch active_;
|
|
||||||
|
|
||||||
//- Field name
|
//- Field name
|
||||||
word fieldName_;
|
word fieldName_;
|
||||||
|
|
||||||
@ -151,18 +150,6 @@ public:
|
|||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
//- Return const access to the active flag
|
|
||||||
const Switch& active() const
|
|
||||||
{
|
|
||||||
return active_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Return non-const access to the active flag
|
|
||||||
Switch& active()
|
|
||||||
{
|
|
||||||
return active_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Return const access to the field name
|
//- Return const access to the field name
|
||||||
const word& fieldName() const
|
const word& fieldName() const
|
||||||
{
|
{
|
||||||
@ -277,6 +264,7 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -29,9 +29,8 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::fieldAverageItem::fieldAverageItem(Istream& is)
|
Foam::functionObjects::fieldAverageItem::fieldAverageItem(Istream& is)
|
||||||
:
|
:
|
||||||
active_(false),
|
|
||||||
fieldName_("unknown"),
|
fieldName_("unknown"),
|
||||||
mean_(0),
|
mean_(0),
|
||||||
meanFieldName_("unknown"),
|
meanFieldName_("unknown"),
|
||||||
@ -40,7 +39,11 @@ Foam::fieldAverageItem::fieldAverageItem(Istream& is)
|
|||||||
base_(ITER),
|
base_(ITER),
|
||||||
window_(-1.0)
|
window_(-1.0)
|
||||||
{
|
{
|
||||||
is.check("Foam::fieldAverageItem::fieldAverageItem(Foam::Istream&)");
|
is.check
|
||||||
|
(
|
||||||
|
"Foam::functionObjects::fieldAverageItem::fieldAverageItem"
|
||||||
|
"(Foam::Istream&)"
|
||||||
|
);
|
||||||
|
|
||||||
const dictionaryEntry entry(dictionary::null, is);
|
const dictionaryEntry entry(dictionary::null, is);
|
||||||
|
|
||||||
@ -63,17 +66,20 @@ Foam::fieldAverageItem::fieldAverageItem(Istream& is)
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::Istream& Foam::operator>>(Istream& is, fieldAverageItem& faItem)
|
Foam::Istream& Foam::functionObjects::operator>>
|
||||||
|
(
|
||||||
|
Istream& is,
|
||||||
|
fieldAverageItem& faItem
|
||||||
|
)
|
||||||
{
|
{
|
||||||
is.check
|
is.check
|
||||||
(
|
(
|
||||||
"Foam::Istream& Foam::operator>>"
|
"Foam::Istream& Foam::operator>>"
|
||||||
"(Foam::Istream&, Foam::fieldAverageItem&)"
|
"(Foam::Istream&, Foam::functionObjects::fieldAverageItem&)"
|
||||||
);
|
);
|
||||||
|
|
||||||
const dictionaryEntry entry(dictionary::null, is);
|
const dictionaryEntry entry(dictionary::null, is);
|
||||||
|
|
||||||
faItem.active_ = false;
|
|
||||||
faItem.fieldName_ = entry.keyword();
|
faItem.fieldName_ = entry.keyword();
|
||||||
entry.lookup("mean") >> faItem.mean_;
|
entry.lookup("mean") >> faItem.mean_;
|
||||||
entry.lookup("prime2Mean") >> faItem.prime2Mean_;
|
entry.lookup("prime2Mean") >> faItem.prime2Mean_;
|
||||||
@ -97,12 +103,16 @@ Foam::Istream& Foam::operator>>(Istream& is, fieldAverageItem& faItem)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::Ostream& Foam::operator<<(Ostream& os, const fieldAverageItem& faItem)
|
Foam::Ostream& Foam::functionObjects::operator<<
|
||||||
|
(
|
||||||
|
Ostream& os,
|
||||||
|
const fieldAverageItem& faItem
|
||||||
|
)
|
||||||
{
|
{
|
||||||
os.check
|
os.check
|
||||||
(
|
(
|
||||||
"Foam::Ostream& Foam::operator<<"
|
"Foam::Ostream& Foam::operator<<"
|
||||||
"(Foam::Ostream&, const Foam::fieldAverageItem&)"
|
"(Foam::Ostream&, const Foam::functionObjects::fieldAverageItem&)"
|
||||||
);
|
);
|
||||||
|
|
||||||
os << faItem.fieldName_ << nl << token::BEGIN_BLOCK << nl;
|
os << faItem.fieldName_ << nl << token::BEGIN_BLOCK << nl;
|
||||||
@ -129,7 +139,7 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const fieldAverageItem& faItem)
|
|||||||
os.check
|
os.check
|
||||||
(
|
(
|
||||||
"Foam::Ostream& Foam::operator<<"
|
"Foam::Ostream& Foam::operator<<"
|
||||||
"(Foam::Ostream&, const Foam::fieldAverageItem&)"
|
"(Foam::Ostream&, const Foam::functionObjects::fieldAverageItem&)"
|
||||||
);
|
);
|
||||||
|
|
||||||
return os;
|
return os;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -30,13 +30,17 @@ License
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(fieldCoordinateSystemTransform, 0);
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(fieldCoordinateSystemTransform, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::fieldCoordinateSystemTransform::fieldCoordinateSystemTransform
|
Foam::functionObjects::fieldCoordinateSystemTransform::
|
||||||
|
fieldCoordinateSystemTransform
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -46,100 +50,91 @@ Foam::fieldCoordinateSystemTransform::fieldCoordinateSystemTransform
|
|||||||
:
|
:
|
||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr),
|
||||||
active_(true),
|
|
||||||
fieldSet_(),
|
fieldSet_(),
|
||||||
coordSys_(obr, dict)
|
coordSys_(obr, dict)
|
||||||
{
|
{
|
||||||
// Check if the available mesh is an fvMesh otherise deactivate
|
read(dict);
|
||||||
if (isA<fvMesh>(obr_))
|
|
||||||
{
|
|
||||||
read(dict);
|
|
||||||
|
|
||||||
Info<< type() << " " << name_ << ":" << nl
|
Info<< type() << " " << name_ << ":" << nl
|
||||||
<< " Applying transformation from global Cartesian to local "
|
<< " Applying transformation from global Cartesian to local "
|
||||||
<< coordSys_ << nl << endl;
|
<< coordSys_ << nl << endl;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
active_ = false;
|
bool Foam::functionObjects::fieldCoordinateSystemTransform::viable
|
||||||
WarningInFunction
|
(
|
||||||
<< "No fvMesh available, deactivating " << name_
|
const word& name,
|
||||||
<< endl;
|
const objectRegistry& obr,
|
||||||
}
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
|
return isA<fvMesh>(obr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::fieldCoordinateSystemTransform::~fieldCoordinateSystemTransform()
|
Foam::functionObjects::fieldCoordinateSystemTransform::
|
||||||
|
~fieldCoordinateSystemTransform()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::fieldCoordinateSystemTransform::read(const dictionary& dict)
|
void Foam::functionObjects::fieldCoordinateSystemTransform::read
|
||||||
|
(
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
{
|
{
|
||||||
if (active_)
|
dict.lookup("fields") >> fieldSet_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::fieldCoordinateSystemTransform::execute()
|
||||||
|
{
|
||||||
|
Info<< type() << " " << name_ << " output:" << nl;
|
||||||
|
|
||||||
|
forAll(fieldSet_, fieldI)
|
||||||
{
|
{
|
||||||
dict.lookup("fields") >> fieldSet_;
|
// If necessary load field
|
||||||
|
transform<scalar>(fieldSet_[fieldI]);
|
||||||
|
transform<vector>(fieldSet_[fieldI]);
|
||||||
|
transform<sphericalTensor>(fieldSet_[fieldI]);
|
||||||
|
transform<symmTensor>(fieldSet_[fieldI]);
|
||||||
|
transform<tensor>(fieldSet_[fieldI]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldCoordinateSystemTransform::execute()
|
void Foam::functionObjects::fieldCoordinateSystemTransform::end()
|
||||||
{
|
{
|
||||||
if (active_)
|
execute();
|
||||||
{
|
|
||||||
Info<< type() << " " << name_ << " output:" << nl;
|
|
||||||
|
|
||||||
forAll(fieldSet_, fieldI)
|
|
||||||
{
|
|
||||||
// If necessary load field
|
|
||||||
transform<scalar>(fieldSet_[fieldI]);
|
|
||||||
transform<vector>(fieldSet_[fieldI]);
|
|
||||||
transform<sphericalTensor>(fieldSet_[fieldI]);
|
|
||||||
transform<symmTensor>(fieldSet_[fieldI]);
|
|
||||||
transform<tensor>(fieldSet_[fieldI]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldCoordinateSystemTransform::end()
|
void Foam::functionObjects::fieldCoordinateSystemTransform::timeSet()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::fieldCoordinateSystemTransform::write()
|
||||||
{
|
{
|
||||||
if (active_)
|
Info<< type() << " " << name_ << " output:" << nl;
|
||||||
|
|
||||||
|
forAll(fieldSet_, fieldI)
|
||||||
{
|
{
|
||||||
execute();
|
const word fieldName = fieldSet_[fieldI] + ":Transformed";
|
||||||
|
|
||||||
|
const regIOobject& field =
|
||||||
|
obr_.lookupObject<regIOobject>(fieldName);
|
||||||
|
|
||||||
|
Info<< " writing field " << field.name() << nl;
|
||||||
|
|
||||||
|
field.write();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
Info<< endl;
|
||||||
void Foam::fieldCoordinateSystemTransform::timeSet()
|
|
||||||
{
|
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldCoordinateSystemTransform::write()
|
|
||||||
{
|
|
||||||
if (active_)
|
|
||||||
{
|
|
||||||
Info<< type() << " " << name_ << " output:" << nl;
|
|
||||||
|
|
||||||
forAll(fieldSet_, fieldI)
|
|
||||||
{
|
|
||||||
const word fieldName = fieldSet_[fieldI] + ":Transformed";
|
|
||||||
|
|
||||||
const regIOobject& field =
|
|
||||||
obr_.lookupObject<regIOobject>(fieldName);
|
|
||||||
|
|
||||||
Info<< " writing field " << field.name() << nl;
|
|
||||||
|
|
||||||
field.write();
|
|
||||||
}
|
|
||||||
|
|
||||||
Info<< endl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::fieldCoordinateSystemTransform
|
Foam::functionObjects::fieldCoordinateSystemTransform
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFieldFunctionObjects
|
grpFieldFunctionObjects
|
||||||
@ -93,6 +93,9 @@ class dictionary;
|
|||||||
class polyMesh;
|
class polyMesh;
|
||||||
class mapPolyMesh;
|
class mapPolyMesh;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class fieldCoordinateSystemTransform Declaration
|
Class fieldCoordinateSystemTransform Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -108,9 +111,6 @@ protected:
|
|||||||
|
|
||||||
const objectRegistry& obr_;
|
const objectRegistry& obr_;
|
||||||
|
|
||||||
//- on/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
//- Fields to transform
|
//- Fields to transform
|
||||||
wordList fieldSet_;
|
wordList fieldSet_;
|
||||||
|
|
||||||
@ -156,6 +156,16 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~fieldCoordinateSystemTransform();
|
virtual ~fieldCoordinateSystemTransform();
|
||||||
@ -196,6 +206,7 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,8 +43,10 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<fieldCoordinateSystemTransform>
|
typedef OutputFilterFunctionObject
|
||||||
fieldCoordinateSystemTransformFunctionObject;
|
<
|
||||||
|
functionObjects::fieldCoordinateSystemTransform
|
||||||
|
> fieldCoordinateSystemTransformFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -32,7 +32,7 @@ License
|
|||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::fieldCoordinateSystemTransform::transformField
|
void Foam::functionObjects::fieldCoordinateSystemTransform::transformField
|
||||||
(
|
(
|
||||||
const Type& field
|
const Type& field
|
||||||
) const
|
) const
|
||||||
@ -74,7 +74,7 @@ void Foam::fieldCoordinateSystemTransform::transformField
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::fieldCoordinateSystemTransform::transform
|
void Foam::functionObjects::fieldCoordinateSystemTransform::transform
|
||||||
(
|
(
|
||||||
const word& fieldName
|
const word& fieldName
|
||||||
) const
|
) const
|
||||||
|
|||||||
@ -29,29 +29,30 @@ License
|
|||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace functionObjects
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(fieldMinMax, 0);
|
defineTypeNameAndDebug(fieldMinMax, 0);
|
||||||
|
}
|
||||||
template<>
|
|
||||||
const char* NamedEnum
|
|
||||||
<
|
|
||||||
fieldMinMax::modeType,
|
|
||||||
2
|
|
||||||
>::names[] =
|
|
||||||
{
|
|
||||||
"magnitude",
|
|
||||||
"component"
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const char* Foam::NamedEnum
|
||||||
|
<
|
||||||
|
Foam::functionObjects::fieldMinMax::modeType,
|
||||||
|
2
|
||||||
|
>::names[] = {"magnitude", "component"};
|
||||||
|
|
||||||
const Foam::NamedEnum<Foam::fieldMinMax::modeType, 2>
|
const Foam::NamedEnum
|
||||||
Foam::fieldMinMax::modeTypeNames_;
|
<
|
||||||
|
Foam::functionObjects::fieldMinMax::modeType,
|
||||||
|
2
|
||||||
|
> Foam::functionObjects::fieldMinMax::modeTypeNames_;
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::fieldMinMax::fieldMinMax
|
Foam::functionObjects::fieldMinMax::fieldMinMax
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -62,47 +63,47 @@ Foam::fieldMinMax::fieldMinMax
|
|||||||
functionObjectFiles(obr, name, typeName),
|
functionObjectFiles(obr, name, typeName),
|
||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr),
|
||||||
active_(true),
|
|
||||||
log_(true),
|
log_(true),
|
||||||
location_(true),
|
location_(true),
|
||||||
mode_(mdMag),
|
mode_(mdMag),
|
||||||
fieldSet_()
|
fieldSet_()
|
||||||
{
|
{
|
||||||
// Check if the available mesh is an fvMesh otherise deactivate
|
|
||||||
if (!isA<fvMesh>(obr_))
|
|
||||||
{
|
|
||||||
active_ = false;
|
|
||||||
WarningInFunction
|
|
||||||
<< "No fvMesh available, deactivating " << name_
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
read(dict);
|
read(dict);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::functionObjects::fieldMinMax::viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry& obr,
|
||||||
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
|
return isA<fvMesh>(obr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::fieldMinMax::~fieldMinMax()
|
Foam::functionObjects::fieldMinMax::~fieldMinMax()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::fieldMinMax::read(const dictionary& dict)
|
void Foam::functionObjects::fieldMinMax::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (active_)
|
log_ = dict.lookupOrDefault<Switch>("log", true);
|
||||||
{
|
location_ = dict.lookupOrDefault<Switch>("location", true);
|
||||||
log_ = dict.lookupOrDefault<Switch>("log", true);
|
|
||||||
location_ = dict.lookupOrDefault<Switch>("location", true);
|
|
||||||
|
|
||||||
mode_ = modeTypeNames_[dict.lookupOrDefault<word>("mode", "magnitude")];
|
mode_ = modeTypeNames_[dict.lookupOrDefault<word>("mode", "magnitude")];
|
||||||
dict.lookup("fields") >> fieldSet_;
|
dict.lookup("fields") >> fieldSet_;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldMinMax::writeFileHeader(const label i)
|
void Foam::functionObjects::fieldMinMax::writeFileHeader(const label i)
|
||||||
{
|
{
|
||||||
OFstream& file = this->file();
|
OFstream& file = this->file();
|
||||||
|
|
||||||
@ -142,45 +143,36 @@ void Foam::fieldMinMax::writeFileHeader(const label i)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldMinMax::execute()
|
void Foam::functionObjects::fieldMinMax::execute()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::fieldMinMax::end()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::fieldMinMax::timeSet()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::fieldMinMax::write()
|
||||||
{
|
{
|
||||||
// Do nothing - only valid on write
|
functionObjectFiles::write();
|
||||||
}
|
|
||||||
|
|
||||||
|
if (!location_) writeTime(file());
|
||||||
|
if (log_) Info<< type() << " " << name_ << " output:" << nl;
|
||||||
|
|
||||||
void Foam::fieldMinMax::end()
|
forAll(fieldSet_, fieldI)
|
||||||
{
|
|
||||||
// Do nothing - only valid on write
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldMinMax::timeSet()
|
|
||||||
{
|
|
||||||
// Do nothing - only valid on write
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldMinMax::write()
|
|
||||||
{
|
|
||||||
if (active_)
|
|
||||||
{
|
{
|
||||||
functionObjectFiles::write();
|
calcMinMaxFields<scalar>(fieldSet_[fieldI], mdCmpt);
|
||||||
|
calcMinMaxFields<vector>(fieldSet_[fieldI], mode_);
|
||||||
if (!location_) writeTime(file());
|
calcMinMaxFields<sphericalTensor>(fieldSet_[fieldI], mode_);
|
||||||
if (log_) Info<< type() << " " << name_ << " output:" << nl;
|
calcMinMaxFields<symmTensor>(fieldSet_[fieldI], mode_);
|
||||||
|
calcMinMaxFields<tensor>(fieldSet_[fieldI], mode_);
|
||||||
forAll(fieldSet_, fieldI)
|
|
||||||
{
|
|
||||||
calcMinMaxFields<scalar>(fieldSet_[fieldI], mdCmpt);
|
|
||||||
calcMinMaxFields<vector>(fieldSet_[fieldI], mode_);
|
|
||||||
calcMinMaxFields<sphericalTensor>(fieldSet_[fieldI], mode_);
|
|
||||||
calcMinMaxFields<symmTensor>(fieldSet_[fieldI], mode_);
|
|
||||||
calcMinMaxFields<tensor>(fieldSet_[fieldI], mode_);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!location_) file()<< endl;
|
|
||||||
if (log_) Info<< endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!location_) file()<< endl;
|
||||||
|
if (log_) Info<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::fieldMinMax
|
Foam::functionObjects::fieldMinMax
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFieldFunctionObjects
|
grpFieldFunctionObjects
|
||||||
@ -93,6 +93,9 @@ class dictionary;
|
|||||||
class polyMesh;
|
class polyMesh;
|
||||||
class mapPolyMesh;
|
class mapPolyMesh;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class fieldMinMax Declaration
|
Class fieldMinMax Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -122,9 +125,6 @@ protected:
|
|||||||
|
|
||||||
const objectRegistry& obr_;
|
const objectRegistry& obr_;
|
||||||
|
|
||||||
//- on/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
//- Switch to send output to Info as well
|
//- Switch to send output to Info as well
|
||||||
Switch log_;
|
Switch log_;
|
||||||
|
|
||||||
@ -182,6 +182,16 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~fieldMinMax();
|
virtual ~fieldMinMax();
|
||||||
@ -230,6 +240,7 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,7 +43,7 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<fieldMinMax>
|
typedef OutputFilterFunctionObject<functionObjects::fieldMinMax>
|
||||||
fieldMinMaxFunctionObject;
|
fieldMinMaxFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -29,7 +29,7 @@ License
|
|||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::fieldMinMax::output
|
void Foam::functionObjects::fieldMinMax::output
|
||||||
(
|
(
|
||||||
const word& fieldName,
|
const word& fieldName,
|
||||||
const word& outputName,
|
const word& outputName,
|
||||||
@ -99,7 +99,7 @@ void Foam::fieldMinMax::output
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::fieldMinMax::calcMinMaxFields
|
void Foam::functionObjects::fieldMinMax::calcMinMaxFields
|
||||||
(
|
(
|
||||||
const word& fieldName,
|
const word& fieldName,
|
||||||
const modeType& mode
|
const modeType& mode
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -32,48 +32,61 @@ License
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
template<>
|
namespace functionObjects
|
||||||
const char* NamedEnum<fieldValues::cellSource::sourceType, 2>::names[] =
|
{
|
||||||
{
|
namespace fieldValues
|
||||||
"cellZone",
|
{
|
||||||
"all"
|
defineTypeNameAndDebug(cellSource, 0);
|
||||||
};
|
addToRunTimeSelectionTable(fieldValue, cellSource, dictionary);
|
||||||
|
}
|
||||||
|
}
|
||||||
template<>
|
|
||||||
const char* NamedEnum<fieldValues::cellSource::operationType, 11>::names[] =
|
|
||||||
{
|
|
||||||
"none",
|
|
||||||
"sum",
|
|
||||||
"sumMag",
|
|
||||||
"average",
|
|
||||||
"weightedAverage",
|
|
||||||
"volAverage",
|
|
||||||
"weightedVolAverage",
|
|
||||||
"volIntegrate",
|
|
||||||
"min",
|
|
||||||
"max",
|
|
||||||
"CoV"
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace fieldValues
|
|
||||||
{
|
|
||||||
defineTypeNameAndDebug(cellSource, 0);
|
|
||||||
addToRunTimeSelectionTable(fieldValue, cellSource, dictionary);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const char*
|
||||||
|
Foam::NamedEnum
|
||||||
|
<
|
||||||
|
Foam::functionObjects::fieldValues::cellSource::sourceType,
|
||||||
|
2
|
||||||
|
>::names[] = {"cellZone", "all"};
|
||||||
|
|
||||||
const Foam::NamedEnum<Foam::fieldValues::cellSource::sourceType, 2>
|
template<>
|
||||||
Foam::fieldValues::cellSource::sourceTypeNames_;
|
const char*
|
||||||
|
Foam::NamedEnum
|
||||||
|
<
|
||||||
|
Foam::functionObjects::fieldValues::cellSource::operationType,
|
||||||
|
11
|
||||||
|
>::names[] =
|
||||||
|
{
|
||||||
|
"none",
|
||||||
|
"sum",
|
||||||
|
"sumMag",
|
||||||
|
"average",
|
||||||
|
"weightedAverage",
|
||||||
|
"volAverage",
|
||||||
|
"weightedVolAverage",
|
||||||
|
"volIntegrate",
|
||||||
|
"min",
|
||||||
|
"max",
|
||||||
|
"CoV"
|
||||||
|
};
|
||||||
|
|
||||||
const Foam::NamedEnum<Foam::fieldValues::cellSource::operationType, 11>
|
const Foam::NamedEnum
|
||||||
Foam::fieldValues::cellSource::operationTypeNames_;
|
<
|
||||||
|
Foam::functionObjects::fieldValues::cellSource::sourceType,
|
||||||
|
2
|
||||||
|
> Foam::functionObjects::fieldValues::cellSource::sourceTypeNames_;
|
||||||
|
|
||||||
|
const Foam::NamedEnum
|
||||||
|
<
|
||||||
|
Foam::functionObjects::fieldValues::cellSource::operationType,
|
||||||
|
11
|
||||||
|
> Foam::functionObjects::fieldValues::cellSource::operationTypeNames_;
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::fieldValues::cellSource::setCellZoneCells()
|
void Foam::functionObjects::fieldValues::cellSource::setCellZoneCells()
|
||||||
{
|
{
|
||||||
switch (source_)
|
switch (source_)
|
||||||
{
|
{
|
||||||
@ -118,7 +131,7 @@ void Foam::fieldValues::cellSource::setCellZoneCells()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::scalar Foam::fieldValues::cellSource::volume() const
|
Foam::scalar Foam::functionObjects::fieldValues::cellSource::volume() const
|
||||||
{
|
{
|
||||||
return gSum(filterField(mesh().V()));
|
return gSum(filterField(mesh().V()));
|
||||||
}
|
}
|
||||||
@ -126,19 +139,19 @@ Foam::scalar Foam::fieldValues::cellSource::volume() const
|
|||||||
|
|
||||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::fieldValues::cellSource::initialise(const dictionary& dict)
|
void Foam::functionObjects::fieldValues::cellSource::initialise
|
||||||
|
(
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
{
|
{
|
||||||
setCellZoneCells();
|
setCellZoneCells();
|
||||||
|
|
||||||
if (nCells_ == 0)
|
if (nCells_ == 0)
|
||||||
{
|
{
|
||||||
WarningInFunction
|
FatalErrorInFunction
|
||||||
<< type() << " " << name_ << ": "
|
<< type() << " " << name_ << ": "
|
||||||
<< sourceTypeNames_[source_] << "(" << sourceName_ << "):" << nl
|
<< sourceTypeNames_[source_] << "(" << sourceName_ << "):" << nl
|
||||||
<< " Source has no cells - deactivating" << endl;
|
<< " Source has no cells" << exit(FatalError);
|
||||||
|
|
||||||
active_ = false;
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
volume_ = volume();
|
volume_ = volume();
|
||||||
@ -158,7 +171,10 @@ void Foam::fieldValues::cellSource::initialise(const dictionary& dict)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValues::cellSource::writeFileHeader(const label i)
|
void Foam::functionObjects::fieldValues::cellSource::writeFileHeader
|
||||||
|
(
|
||||||
|
const label i
|
||||||
|
)
|
||||||
{
|
{
|
||||||
writeCommented(file(), "Source : ");
|
writeCommented(file(), "Source : ");
|
||||||
file() << sourceTypeNames_[source_] << " " << sourceName_ << endl;
|
file() << sourceTypeNames_[source_] << " " << sourceName_ << endl;
|
||||||
@ -186,7 +202,7 @@ void Foam::fieldValues::cellSource::writeFileHeader(const label i)
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::fieldValues::cellSource::cellSource
|
Foam::functionObjects::fieldValues::cellSource::cellSource
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -206,74 +222,84 @@ Foam::fieldValues::cellSource::cellSource
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::functionObjects::fieldValues::cellSource::viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry& obr,
|
||||||
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
|
return isA<fvMesh>(obr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::fieldValues::cellSource::~cellSource()
|
Foam::functionObjects::fieldValues::cellSource::~cellSource()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::fieldValues::cellSource::read(const dictionary& dict)
|
void Foam::functionObjects::fieldValues::cellSource::read
|
||||||
|
(
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
{
|
{
|
||||||
fieldValue::read(dict);
|
fieldValue::read(dict);
|
||||||
|
|
||||||
if (active_)
|
// No additional info to read
|
||||||
{
|
initialise(dict);
|
||||||
// no additional info to read
|
|
||||||
initialise(dict);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValues::cellSource::write()
|
void Foam::functionObjects::fieldValues::cellSource::write()
|
||||||
{
|
{
|
||||||
fieldValue::write();
|
fieldValue::write();
|
||||||
|
|
||||||
if (active_)
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
if (Pstream::master())
|
writeTime(file());
|
||||||
{
|
|
||||||
writeTime(file());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (writeVolume_)
|
|
||||||
{
|
|
||||||
volume_ = volume();
|
|
||||||
if (Pstream::master())
|
|
||||||
{
|
|
||||||
file() << tab << volume_;
|
|
||||||
}
|
|
||||||
if (log_) Info<< " total volume = " << volume_ << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
forAll(fields_, i)
|
|
||||||
{
|
|
||||||
const word& fieldName = fields_[i];
|
|
||||||
bool processed = false;
|
|
||||||
|
|
||||||
processed = processed || writeValues<scalar>(fieldName);
|
|
||||||
processed = processed || writeValues<vector>(fieldName);
|
|
||||||
processed = processed || writeValues<sphericalTensor>(fieldName);
|
|
||||||
processed = processed || writeValues<symmTensor>(fieldName);
|
|
||||||
processed = processed || writeValues<tensor>(fieldName);
|
|
||||||
|
|
||||||
if (!processed)
|
|
||||||
{
|
|
||||||
WarningInFunction
|
|
||||||
<< "Requested field " << fieldName
|
|
||||||
<< " not found in database and not processed"
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Pstream::master())
|
|
||||||
{
|
|
||||||
file()<< endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (log_) Info<< endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (writeVolume_)
|
||||||
|
{
|
||||||
|
volume_ = volume();
|
||||||
|
if (Pstream::master())
|
||||||
|
{
|
||||||
|
file() << tab << volume_;
|
||||||
|
}
|
||||||
|
if (log_) Info<< " total volume = " << volume_ << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
forAll(fields_, i)
|
||||||
|
{
|
||||||
|
const word& fieldName = fields_[i];
|
||||||
|
bool processed = false;
|
||||||
|
|
||||||
|
processed = processed || writeValues<scalar>(fieldName);
|
||||||
|
processed = processed || writeValues<vector>(fieldName);
|
||||||
|
processed = processed || writeValues<sphericalTensor>(fieldName);
|
||||||
|
processed = processed || writeValues<symmTensor>(fieldName);
|
||||||
|
processed = processed || writeValues<tensor>(fieldName);
|
||||||
|
|
||||||
|
if (!processed)
|
||||||
|
{
|
||||||
|
WarningInFunction
|
||||||
|
<< "Requested field " << fieldName
|
||||||
|
<< " not found in database and not processed"
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Pstream::master())
|
||||||
|
{
|
||||||
|
file()<< endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (log_) Info<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::fieldValues::cellSource
|
Foam::functionObjects::fieldValues::cellSource
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFieldFunctionObjects
|
grpFieldFunctionObjects
|
||||||
@ -114,6 +114,8 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
namespace fieldValues
|
namespace fieldValues
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -237,14 +239,26 @@ public:
|
|||||||
TypeName("cellSource");
|
TypeName("cellSource");
|
||||||
|
|
||||||
|
|
||||||
//- Construct from components
|
// Constructors
|
||||||
cellSource
|
|
||||||
(
|
//- Construct from components
|
||||||
const word& name,
|
cellSource
|
||||||
const objectRegistry& obr,
|
(
|
||||||
const dictionary& dict,
|
const word& name,
|
||||||
const bool loadFromFiles = false
|
const objectRegistry& obr,
|
||||||
);
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -283,6 +297,7 @@ public:
|
|||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
} // End namespace fieldValues
|
} // End namespace fieldValues
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,8 +43,10 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<fieldValues::cellSource>
|
typedef OutputFilterFunctionObject
|
||||||
cellSourceFunctionObject;
|
<
|
||||||
|
functionObjects::fieldValues::cellSource
|
||||||
|
> cellSourceFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -27,19 +27,18 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
inline const Foam::fieldValues::cellSource::sourceType&
|
inline const Foam::functionObjects::fieldValues::cellSource::sourceType&
|
||||||
Foam::fieldValues::cellSource::source() const
|
Foam::functionObjects::fieldValues::cellSource::source() const
|
||||||
{
|
{
|
||||||
return source_;
|
return source_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline const Foam::labelList&
|
inline const Foam::labelList&
|
||||||
Foam::fieldValues::cellSource::cellId() const
|
Foam::functionObjects::fieldValues::cellSource::cellId() const
|
||||||
{
|
{
|
||||||
return cellId_;
|
return cellId_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|
||||||
|
|||||||
@ -29,7 +29,10 @@ License
|
|||||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
bool Foam::fieldValues::cellSource::validField(const word& fieldName) const
|
bool Foam::functionObjects::fieldValues::cellSource::validField
|
||||||
|
(
|
||||||
|
const word& fieldName
|
||||||
|
) const
|
||||||
{
|
{
|
||||||
typedef GeometricField<Type, fvPatchField, volMesh> vf;
|
typedef GeometricField<Type, fvPatchField, volMesh> vf;
|
||||||
|
|
||||||
@ -43,7 +46,8 @@ bool Foam::fieldValues::cellSource::validField(const word& fieldName) const
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Foam::tmp<Foam::Field<Type>> Foam::fieldValues::cellSource::setFieldValues
|
Foam::tmp<Foam::Field<Type>>
|
||||||
|
Foam::functionObjects::fieldValues::cellSource::setFieldValues
|
||||||
(
|
(
|
||||||
const word& fieldName,
|
const word& fieldName,
|
||||||
const bool mustGet
|
const bool mustGet
|
||||||
@ -68,7 +72,7 @@ Foam::tmp<Foam::Field<Type>> Foam::fieldValues::cellSource::setFieldValues
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Type Foam::fieldValues::cellSource::processValues
|
Type Foam::functionObjects::fieldValues::cellSource::processValues
|
||||||
(
|
(
|
||||||
const Field<Type>& values,
|
const Field<Type>& values,
|
||||||
const scalarField& V,
|
const scalarField& V,
|
||||||
@ -140,10 +144,8 @@ Type Foam::fieldValues::cellSource::processValues
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
case opNone:
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -153,7 +155,10 @@ Type Foam::fieldValues::cellSource::processValues
|
|||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
bool Foam::fieldValues::cellSource::writeValues(const word& fieldName)
|
bool Foam::functionObjects::fieldValues::cellSource::writeValues
|
||||||
|
(
|
||||||
|
const word& fieldName
|
||||||
|
)
|
||||||
{
|
{
|
||||||
const bool ok = validField<Type>(fieldName);
|
const bool ok = validField<Type>(fieldName);
|
||||||
|
|
||||||
@ -211,7 +216,8 @@ bool Foam::fieldValues::cellSource::writeValues(const word& fieldName)
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Foam::tmp<Foam::Field<Type>> Foam::fieldValues::cellSource::filterField
|
Foam::tmp<Foam::Field<Type>>
|
||||||
|
Foam::functionObjects::fieldValues::cellSource::filterField
|
||||||
(
|
(
|
||||||
const Field<Type>& field
|
const Field<Type>& field
|
||||||
) const
|
) const
|
||||||
|
|||||||
@ -38,53 +38,68 @@ License
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
template<>
|
namespace functionObjects
|
||||||
const char* NamedEnum<fieldValues::faceSource::sourceType, 3>::names[] =
|
{
|
||||||
{
|
namespace fieldValues
|
||||||
"faceZone",
|
{
|
||||||
"patch",
|
defineTypeNameAndDebug(faceSource, 0);
|
||||||
"sampledSurface"
|
addToRunTimeSelectionTable(fieldValue, faceSource, dictionary);
|
||||||
};
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template<>
|
|
||||||
const char* NamedEnum<fieldValues::faceSource::operationType, 15>::names[] =
|
|
||||||
{
|
|
||||||
"none",
|
|
||||||
"sum",
|
|
||||||
"sumMag",
|
|
||||||
"sumDirection",
|
|
||||||
"sumDirectionBalance",
|
|
||||||
"average",
|
|
||||||
"weightedAverage",
|
|
||||||
"areaAverage",
|
|
||||||
"weightedAreaAverage",
|
|
||||||
"areaIntegrate",
|
|
||||||
"min",
|
|
||||||
"max",
|
|
||||||
"CoV",
|
|
||||||
"areaNormalAverage",
|
|
||||||
"areaNormalIntegrate"
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace fieldValues
|
|
||||||
{
|
|
||||||
defineTypeNameAndDebug(faceSource, 0);
|
|
||||||
addToRunTimeSelectionTable(fieldValue, faceSource, dictionary);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const char* Foam::NamedEnum
|
||||||
|
<
|
||||||
|
Foam::functionObjects::fieldValues::faceSource::sourceType,
|
||||||
|
3
|
||||||
|
>::names[] =
|
||||||
|
{
|
||||||
|
"faceZone",
|
||||||
|
"patch",
|
||||||
|
"sampledSurface"
|
||||||
|
};
|
||||||
|
|
||||||
const Foam::NamedEnum<Foam::fieldValues::faceSource::sourceType, 3>
|
template<>
|
||||||
Foam::fieldValues::faceSource::sourceTypeNames_;
|
const char* Foam::NamedEnum
|
||||||
|
<
|
||||||
|
Foam::functionObjects::fieldValues::faceSource::operationType,
|
||||||
|
15
|
||||||
|
>::names[] =
|
||||||
|
{
|
||||||
|
"none",
|
||||||
|
"sum",
|
||||||
|
"sumMag",
|
||||||
|
"sumDirection",
|
||||||
|
"sumDirectionBalance",
|
||||||
|
"average",
|
||||||
|
"weightedAverage",
|
||||||
|
"areaAverage",
|
||||||
|
"weightedAreaAverage",
|
||||||
|
"areaIntegrate",
|
||||||
|
"min",
|
||||||
|
"max",
|
||||||
|
"CoV",
|
||||||
|
"areaNormalAverage",
|
||||||
|
"areaNormalIntegrate"
|
||||||
|
};
|
||||||
|
|
||||||
const Foam::NamedEnum<Foam::fieldValues::faceSource::operationType, 15>
|
const Foam::NamedEnum
|
||||||
Foam::fieldValues::faceSource::operationTypeNames_;
|
<
|
||||||
|
Foam::functionObjects::fieldValues::faceSource::sourceType,
|
||||||
|
3
|
||||||
|
> Foam::functionObjects::fieldValues::faceSource::sourceTypeNames_;
|
||||||
|
|
||||||
|
const Foam::NamedEnum
|
||||||
|
<
|
||||||
|
Foam::functionObjects::fieldValues::faceSource::operationType,
|
||||||
|
15
|
||||||
|
> Foam::functionObjects::fieldValues::faceSource::operationTypeNames_;
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::fieldValues::faceSource::setFaceZoneFaces()
|
void Foam::functionObjects::fieldValues::faceSource::setFaceZoneFaces()
|
||||||
{
|
{
|
||||||
label zoneId = mesh().faceZones().findZoneID(sourceName_);
|
label zoneId = mesh().faceZones().findZoneID(sourceName_);
|
||||||
|
|
||||||
@ -169,7 +184,7 @@ void Foam::fieldValues::faceSource::setFaceZoneFaces()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValues::faceSource::setPatchFaces()
|
void Foam::functionObjects::fieldValues::faceSource::setPatchFaces()
|
||||||
{
|
{
|
||||||
const label patchid = mesh().boundaryMesh().findPatchID(sourceName_);
|
const label patchid = mesh().boundaryMesh().findPatchID(sourceName_);
|
||||||
|
|
||||||
@ -206,7 +221,10 @@ void Foam::fieldValues::faceSource::setPatchFaces()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValues::faceSource::sampledSurfaceFaces(const dictionary& dict)
|
void Foam::functionObjects::fieldValues::faceSource::sampledSurfaceFaces
|
||||||
|
(
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
{
|
{
|
||||||
surfacePtr_ = sampledSurface::New
|
surfacePtr_ = sampledSurface::New
|
||||||
(
|
(
|
||||||
@ -219,7 +237,7 @@ void Foam::fieldValues::faceSource::sampledSurfaceFaces(const dictionary& dict)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValues::faceSource::combineMeshGeometry
|
void Foam::functionObjects::fieldValues::faceSource::combineMeshGeometry
|
||||||
(
|
(
|
||||||
faceList& faces,
|
faceList& faces,
|
||||||
pointField& points
|
pointField& points
|
||||||
@ -340,7 +358,7 @@ void Foam::fieldValues::faceSource::combineMeshGeometry
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValues::faceSource::combineSurfaceGeometry
|
void Foam::functionObjects::fieldValues::faceSource::combineSurfaceGeometry
|
||||||
(
|
(
|
||||||
faceList& faces,
|
faceList& faces,
|
||||||
pointField& points
|
pointField& points
|
||||||
@ -379,7 +397,7 @@ void Foam::fieldValues::faceSource::combineSurfaceGeometry
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::scalar Foam::fieldValues::faceSource::totalArea() const
|
Foam::scalar Foam::functionObjects::fieldValues::faceSource::totalArea() const
|
||||||
{
|
{
|
||||||
scalar totalArea;
|
scalar totalArea;
|
||||||
|
|
||||||
@ -398,7 +416,10 @@ Foam::scalar Foam::fieldValues::faceSource::totalArea() const
|
|||||||
|
|
||||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::fieldValues::faceSource::initialise(const dictionary& dict)
|
void Foam::functionObjects::fieldValues::faceSource::initialise
|
||||||
|
(
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
{
|
{
|
||||||
dict.lookup("sourceName") >> sourceName_;
|
dict.lookup("sourceName") >> sourceName_;
|
||||||
|
|
||||||
@ -431,13 +452,10 @@ void Foam::fieldValues::faceSource::initialise(const dictionary& dict)
|
|||||||
|
|
||||||
if (nFaces_ == 0)
|
if (nFaces_ == 0)
|
||||||
{
|
{
|
||||||
WarningInFunction
|
FatalErrorInFunction
|
||||||
<< type() << " " << name_ << ": "
|
<< type() << " " << name_ << ": "
|
||||||
<< sourceTypeNames_[source_] << "(" << sourceName_ << "):" << nl
|
<< sourceTypeNames_[source_] << "(" << sourceName_ << "):" << nl
|
||||||
<< " Source has no faces - deactivating" << endl;
|
<< " Source has no faces" << exit(FatalError);
|
||||||
|
|
||||||
active_ = false;
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (surfacePtr_.valid())
|
if (surfacePtr_.valid())
|
||||||
@ -513,7 +531,10 @@ void Foam::fieldValues::faceSource::initialise(const dictionary& dict)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValues::faceSource::writeFileHeader(const label i)
|
void Foam::functionObjects::fieldValues::faceSource::writeFileHeader
|
||||||
|
(
|
||||||
|
const label i
|
||||||
|
)
|
||||||
{
|
{
|
||||||
writeCommented(file(), "Source : ");
|
writeCommented(file(), "Source : ");
|
||||||
file() << sourceTypeNames_[source_] << " " << sourceName_ << endl;
|
file() << sourceTypeNames_[source_] << " " << sourceName_ << endl;
|
||||||
@ -540,7 +561,7 @@ void Foam::fieldValues::faceSource::writeFileHeader(const label i)
|
|||||||
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
Foam::scalar Foam::fieldValues::faceSource::processValues
|
Foam::scalar Foam::functionObjects::fieldValues::faceSource::processValues
|
||||||
(
|
(
|
||||||
const Field<scalar>& values,
|
const Field<scalar>& values,
|
||||||
const vectorField& Sf,
|
const vectorField& Sf,
|
||||||
@ -571,7 +592,7 @@ Foam::scalar Foam::fieldValues::faceSource::processValues
|
|||||||
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
Foam::vector Foam::fieldValues::faceSource::processValues
|
Foam::vector Foam::functionObjects::fieldValues::faceSource::processValues
|
||||||
(
|
(
|
||||||
const Field<vector>& values,
|
const Field<vector>& values,
|
||||||
const vectorField& Sf,
|
const vectorField& Sf,
|
||||||
@ -617,7 +638,7 @@ Foam::vector Foam::fieldValues::faceSource::processValues
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::fieldValues::faceSource::faceSource
|
Foam::functionObjects::fieldValues::faceSource::faceSource
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -643,97 +664,106 @@ Foam::fieldValues::faceSource::faceSource
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::functionObjects::fieldValues::faceSource::viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry& obr,
|
||||||
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
|
return isA<fvMesh>(obr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::fieldValues::faceSource::~faceSource()
|
Foam::functionObjects::fieldValues::faceSource::~faceSource()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::fieldValues::faceSource::read(const dictionary& dict)
|
void Foam::functionObjects::fieldValues::faceSource::read
|
||||||
|
(
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
{
|
{
|
||||||
fieldValue::read(dict);
|
fieldValue::read(dict);
|
||||||
|
initialise(dict);
|
||||||
if (active_)
|
|
||||||
{
|
|
||||||
initialise(dict);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValues::faceSource::write()
|
void Foam::functionObjects::fieldValues::faceSource::write()
|
||||||
{
|
{
|
||||||
fieldValue::write();
|
fieldValue::write();
|
||||||
|
|
||||||
if (active_)
|
if (surfacePtr_.valid())
|
||||||
{
|
{
|
||||||
if (surfacePtr_.valid())
|
surfacePtr_().update();
|
||||||
{
|
|
||||||
surfacePtr_().update();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Pstream::master())
|
|
||||||
{
|
|
||||||
writeTime(file());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (writeArea_)
|
|
||||||
{
|
|
||||||
totalArea_ = totalArea();
|
|
||||||
if (Pstream::master())
|
|
||||||
{
|
|
||||||
file() << tab << totalArea_;
|
|
||||||
}
|
|
||||||
if (log_) Info<< " total area = " << totalArea_ << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
// construct weight field. Note: zero size means weight = 1
|
|
||||||
scalarField weightField;
|
|
||||||
if (weightFieldName_ != "none")
|
|
||||||
{
|
|
||||||
weightField =
|
|
||||||
getFieldValues<scalar>
|
|
||||||
(
|
|
||||||
weightFieldName_,
|
|
||||||
true,
|
|
||||||
orientWeightField_
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Combine onto master
|
|
||||||
combineFields(weightField);
|
|
||||||
|
|
||||||
// process the fields
|
|
||||||
forAll(fields_, i)
|
|
||||||
{
|
|
||||||
const word& fieldName = fields_[i];
|
|
||||||
bool ok = false;
|
|
||||||
|
|
||||||
bool orient = i >= orientedFieldsStart_;
|
|
||||||
ok = ok || writeValues<scalar>(fieldName, weightField, orient);
|
|
||||||
ok = ok || writeValues<vector>(fieldName, weightField, orient);
|
|
||||||
ok = ok
|
|
||||||
|| writeValues<sphericalTensor>(fieldName, weightField, orient);
|
|
||||||
ok = ok || writeValues<symmTensor>(fieldName, weightField, orient);
|
|
||||||
ok = ok || writeValues<tensor>(fieldName, weightField, orient);
|
|
||||||
|
|
||||||
if (!ok)
|
|
||||||
{
|
|
||||||
WarningInFunction
|
|
||||||
<< "Requested field " << fieldName
|
|
||||||
<< " not found in database and not processed"
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Pstream::master())
|
|
||||||
{
|
|
||||||
file()<< endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (log_) Info<< endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Pstream::master())
|
||||||
|
{
|
||||||
|
writeTime(file());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (writeArea_)
|
||||||
|
{
|
||||||
|
totalArea_ = totalArea();
|
||||||
|
if (Pstream::master())
|
||||||
|
{
|
||||||
|
file() << tab << totalArea_;
|
||||||
|
}
|
||||||
|
if (log_) Info<< " total area = " << totalArea_ << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// construct weight field. Note: zero size means weight = 1
|
||||||
|
scalarField weightField;
|
||||||
|
if (weightFieldName_ != "none")
|
||||||
|
{
|
||||||
|
weightField =
|
||||||
|
getFieldValues<scalar>
|
||||||
|
(
|
||||||
|
weightFieldName_,
|
||||||
|
true,
|
||||||
|
orientWeightField_
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Combine onto master
|
||||||
|
combineFields(weightField);
|
||||||
|
|
||||||
|
// process the fields
|
||||||
|
forAll(fields_, i)
|
||||||
|
{
|
||||||
|
const word& fieldName = fields_[i];
|
||||||
|
bool ok = false;
|
||||||
|
|
||||||
|
bool orient = i >= orientedFieldsStart_;
|
||||||
|
ok = ok || writeValues<scalar>(fieldName, weightField, orient);
|
||||||
|
ok = ok || writeValues<vector>(fieldName, weightField, orient);
|
||||||
|
ok = ok
|
||||||
|
|| writeValues<sphericalTensor>(fieldName, weightField, orient);
|
||||||
|
ok = ok || writeValues<symmTensor>(fieldName, weightField, orient);
|
||||||
|
ok = ok || writeValues<tensor>(fieldName, weightField, orient);
|
||||||
|
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
WarningInFunction
|
||||||
|
<< "Requested field " << fieldName
|
||||||
|
<< " not found in database and not processed"
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Pstream::master())
|
||||||
|
{
|
||||||
|
file()<< endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (log_) Info<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::fieldValues::faceSource
|
Foam::functionObjects::fieldValues::faceSource
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFieldFunctionObjects
|
grpFieldFunctionObjects
|
||||||
@ -152,6 +152,8 @@ namespace Foam
|
|||||||
|
|
||||||
class sampledSurface;
|
class sampledSurface;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
namespace fieldValues
|
namespace fieldValues
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -337,14 +339,26 @@ public:
|
|||||||
TypeName("faceSource");
|
TypeName("faceSource");
|
||||||
|
|
||||||
|
|
||||||
//- Construct from components
|
// Constructors
|
||||||
faceSource
|
|
||||||
(
|
//- Construct from components
|
||||||
const word& name,
|
faceSource
|
||||||
const objectRegistry& obr,
|
(
|
||||||
const dictionary& dict,
|
const word& name,
|
||||||
const bool loadFromFiles = false
|
const objectRegistry& obr,
|
||||||
);
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -426,6 +440,7 @@ vector faceSource::processValues
|
|||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
} // End namespace fieldValues
|
} // End namespace fieldValues
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,8 +43,10 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<fieldValues::faceSource>
|
typedef OutputFilterFunctionObject
|
||||||
faceSourceFunctionObject;
|
<
|
||||||
|
functionObjects::fieldValues::faceSource
|
||||||
|
> faceSourceFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -27,33 +27,32 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
inline const Foam::fieldValues::faceSource::sourceType&
|
inline const Foam::functionObjects::fieldValues::faceSource::sourceType&
|
||||||
Foam::fieldValues::faceSource::source() const
|
Foam::functionObjects::fieldValues::faceSource::source() const
|
||||||
{
|
{
|
||||||
return source_;
|
return source_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline const Foam::labelList&
|
inline const Foam::labelList&
|
||||||
Foam::fieldValues::faceSource::faceId() const
|
Foam::functionObjects::fieldValues::faceSource::faceId() const
|
||||||
{
|
{
|
||||||
return faceId_;
|
return faceId_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline const Foam::labelList&
|
inline const Foam::labelList&
|
||||||
Foam::fieldValues::faceSource::facePatch() const
|
Foam::functionObjects::fieldValues::faceSource::facePatch() const
|
||||||
{
|
{
|
||||||
return facePatchId_;
|
return facePatchId_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline const Foam::labelList&
|
inline const Foam::labelList&
|
||||||
Foam::fieldValues::faceSource::faceSign() const
|
Foam::functionObjects::fieldValues::faceSource::faceSign() const
|
||||||
{
|
{
|
||||||
return faceSign_;
|
return faceSign_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|
||||||
|
|||||||
@ -32,7 +32,10 @@ License
|
|||||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
bool Foam::fieldValues::faceSource::validField(const word& fieldName) const
|
bool Foam::functionObjects::fieldValues::faceSource::validField
|
||||||
|
(
|
||||||
|
const word& fieldName
|
||||||
|
) const
|
||||||
{
|
{
|
||||||
typedef GeometricField<Type, fvsPatchField, surfaceMesh> sf;
|
typedef GeometricField<Type, fvsPatchField, surfaceMesh> sf;
|
||||||
typedef GeometricField<Type, fvPatchField, volMesh> vf;
|
typedef GeometricField<Type, fvPatchField, volMesh> vf;
|
||||||
@ -51,7 +54,8 @@ bool Foam::fieldValues::faceSource::validField(const word& fieldName) const
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Foam::tmp<Foam::Field<Type>> Foam::fieldValues::faceSource::getFieldValues
|
Foam::tmp<Foam::Field<Type>>
|
||||||
|
Foam::functionObjects::fieldValues::faceSource::getFieldValues
|
||||||
(
|
(
|
||||||
const word& fieldName,
|
const word& fieldName,
|
||||||
const bool mustGet,
|
const bool mustGet,
|
||||||
@ -120,7 +124,7 @@ Foam::tmp<Foam::Field<Type>> Foam::fieldValues::faceSource::getFieldValues
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Type Foam::fieldValues::faceSource::processSameTypeValues
|
Type Foam::functionObjects::fieldValues::faceSource::processSameTypeValues
|
||||||
(
|
(
|
||||||
const Field<Type>& values,
|
const Field<Type>& values,
|
||||||
const vectorField& Sf,
|
const vectorField& Sf,
|
||||||
@ -236,10 +240,12 @@ Type Foam::fieldValues::faceSource::processSameTypeValues
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
case opAreaNormalAverage:
|
||||||
{
|
{}
|
||||||
// Do nothing
|
case opAreaNormalIntegrate:
|
||||||
}
|
{}
|
||||||
|
case opNone:
|
||||||
|
{}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -247,7 +253,7 @@ Type Foam::fieldValues::faceSource::processSameTypeValues
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Type Foam::fieldValues::faceSource::processValues
|
Type Foam::functionObjects::fieldValues::faceSource::processValues
|
||||||
(
|
(
|
||||||
const Field<Type>& values,
|
const Field<Type>& values,
|
||||||
const vectorField& Sf,
|
const vectorField& Sf,
|
||||||
@ -262,7 +268,7 @@ Type Foam::fieldValues::faceSource::processValues
|
|||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
bool Foam::fieldValues::faceSource::writeValues
|
bool Foam::functionObjects::fieldValues::faceSource::writeValues
|
||||||
(
|
(
|
||||||
const word& fieldName,
|
const word& fieldName,
|
||||||
const scalarField& weightField,
|
const scalarField& weightField,
|
||||||
@ -348,7 +354,8 @@ bool Foam::fieldValues::faceSource::writeValues
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Foam::tmp<Foam::Field<Type>> Foam::fieldValues::faceSource::filterField
|
Foam::tmp<Foam::Field<Type>>
|
||||||
|
Foam::functionObjects::fieldValues::faceSource::filterField
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvPatchField, volMesh>& field,
|
const GeometricField<Type, fvPatchField, volMesh>& field,
|
||||||
const bool applyOrientation
|
const bool applyOrientation
|
||||||
@ -389,7 +396,8 @@ Foam::tmp<Foam::Field<Type>> Foam::fieldValues::faceSource::filterField
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Foam::tmp<Foam::Field<Type>> Foam::fieldValues::faceSource::filterField
|
Foam::tmp<Foam::Field<Type>>
|
||||||
|
Foam::functionObjects::fieldValues::faceSource::filterField
|
||||||
(
|
(
|
||||||
const GeometricField<Type, fvsPatchField, surfaceMesh>& field,
|
const GeometricField<Type, fvsPatchField, surfaceMesh>& field,
|
||||||
const bool applyOrientation
|
const bool applyOrientation
|
||||||
|
|||||||
@ -41,25 +41,19 @@ namespace Foam
|
|||||||
|
|
||||||
void Foam::fieldValue::read(const dictionary& dict)
|
void Foam::fieldValue::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (active_)
|
dict_ = dict;
|
||||||
{
|
|
||||||
dict_ = dict;
|
|
||||||
|
|
||||||
log_ = dict.lookupOrDefault<Switch>("log", true);
|
log_ = dict.lookupOrDefault<Switch>("log", true);
|
||||||
dict.lookup("fields") >> fields_;
|
dict.lookup("fields") >> fields_;
|
||||||
dict.lookup("valueOutput") >> valueOutput_;
|
dict.lookup("valueOutput") >> valueOutput_;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValue::write()
|
void Foam::fieldValue::write()
|
||||||
{
|
{
|
||||||
if (active_)
|
functionObjectFiles::write();
|
||||||
{
|
|
||||||
functionObjectFiles::write();
|
|
||||||
|
|
||||||
if (log_) Info<< type() << " " << name_ << " output:" << nl;
|
if (log_) Info<< type() << " " << name_ << " output:" << nl;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -78,25 +72,13 @@ Foam::fieldValue::fieldValue
|
|||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr),
|
||||||
dict_(dict),
|
dict_(dict),
|
||||||
active_(true),
|
|
||||||
log_(true),
|
log_(true),
|
||||||
sourceName_(word::null),
|
sourceName_(word::null),
|
||||||
fields_(dict.lookup("fields")),
|
fields_(dict.lookup("fields")),
|
||||||
valueOutput_(dict.lookup("valueOutput")),
|
valueOutput_(dict.lookup("valueOutput")),
|
||||||
resultDict_(fileName("name"), dictionary::null)
|
resultDict_(fileName("name"), dictionary::null)
|
||||||
{
|
{
|
||||||
// Only active if obr is an fvMesh
|
read(dict);
|
||||||
if (isA<fvMesh>(obr_))
|
|
||||||
{
|
|
||||||
read(dict);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WarningInFunction
|
|
||||||
<< "No fvMesh available, deactivating " << name << nl
|
|
||||||
<< endl;
|
|
||||||
active_ = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -109,33 +91,23 @@ Foam::fieldValue::~fieldValue()
|
|||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::fieldValue::execute()
|
void Foam::fieldValue::execute()
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValue::end()
|
void Foam::fieldValue::end()
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValue::timeSet()
|
void Foam::fieldValue::timeSet()
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValue::updateMesh(const mapPolyMesh&)
|
void Foam::fieldValue::updateMesh(const mapPolyMesh&)
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValue::movePoints(const polyMesh&)
|
void Foam::fieldValue::movePoints(const polyMesh&)
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -78,9 +78,6 @@ protected:
|
|||||||
//- Construction dictionary
|
//- Construction dictionary
|
||||||
dictionary dict_;
|
dictionary dict_;
|
||||||
|
|
||||||
//- Active flag
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
//- Switch to send output to Info as well as to file
|
//- Switch to send output to Info as well as to file
|
||||||
Switch log_;
|
Switch log_;
|
||||||
|
|
||||||
@ -155,9 +152,6 @@ public:
|
|||||||
//- Return the reference to the construction dictionary
|
//- Return the reference to the construction dictionary
|
||||||
inline const dictionary& dict() const;
|
inline const dictionary& dict() const;
|
||||||
|
|
||||||
//- Return the active flag
|
|
||||||
inline bool active() const;
|
|
||||||
|
|
||||||
//- Return the switch to send output to Info as well as to file
|
//- Return the switch to send output to Info as well as to file
|
||||||
inline const Switch& log() const;
|
inline const Switch& log() const;
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -46,12 +46,6 @@ inline const Foam::dictionary& Foam::fieldValue::dict() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline bool Foam::fieldValue::active() const
|
|
||||||
{
|
|
||||||
return active_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline const Foam::Switch& Foam::fieldValue::log() const
|
inline const Foam::Switch& Foam::fieldValue::log() const
|
||||||
{
|
{
|
||||||
return log_;
|
return log_;
|
||||||
|
|||||||
@ -33,51 +33,42 @@ License
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
namespace fieldValues
|
namespace functionObjects
|
||||||
{
|
|
||||||
defineTypeNameAndDebug(fieldValueDelta, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<>
|
|
||||||
const char*
|
|
||||||
NamedEnum<fieldValues::fieldValueDelta::operationType, 5>::names[] =
|
|
||||||
{
|
|
||||||
"add",
|
|
||||||
"subtract",
|
|
||||||
"min",
|
|
||||||
"max",
|
|
||||||
"average"
|
|
||||||
};
|
|
||||||
|
|
||||||
const NamedEnum<fieldValues::fieldValueDelta::operationType, 5>
|
|
||||||
fieldValues::fieldValueDelta::operationTypeNames_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::fieldValues::fieldValueDelta::fieldValueDelta
|
|
||||||
(
|
|
||||||
const word& name,
|
|
||||||
const objectRegistry& obr,
|
|
||||||
const dictionary& dict,
|
|
||||||
const bool loadFromFiles
|
|
||||||
)
|
|
||||||
:
|
|
||||||
functionObjectFiles(obr, name, typeName),
|
|
||||||
name_(name),
|
|
||||||
obr_(obr),
|
|
||||||
loadFromFiles_(loadFromFiles),
|
|
||||||
log_(true),
|
|
||||||
operation_(opSubtract),
|
|
||||||
source1Ptr_(NULL),
|
|
||||||
source2Ptr_(NULL)
|
|
||||||
{
|
{
|
||||||
read(dict);
|
namespace fieldValues
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(fieldValueDelta, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const char* Foam::NamedEnum
|
||||||
|
<
|
||||||
|
Foam::functionObjects::fieldValues::fieldValueDelta::operationType,
|
||||||
|
5
|
||||||
|
>::names[] =
|
||||||
|
{
|
||||||
|
"add",
|
||||||
|
"subtract",
|
||||||
|
"min",
|
||||||
|
"max",
|
||||||
|
"average"
|
||||||
|
};
|
||||||
|
|
||||||
void Foam::fieldValues::fieldValueDelta::writeFileHeader(const label i)
|
const Foam::NamedEnum
|
||||||
|
<
|
||||||
|
Foam::functionObjects::fieldValues::fieldValueDelta::operationType,
|
||||||
|
5
|
||||||
|
> Foam::functionObjects::fieldValues::fieldValueDelta::operationTypeNames_;
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::functionObjects::fieldValues::fieldValueDelta::writeFileHeader
|
||||||
|
(
|
||||||
|
const label i
|
||||||
|
)
|
||||||
{
|
{
|
||||||
const wordList& fields1 = source1Ptr_->fields();
|
const wordList& fields1 = source1Ptr_->fields();
|
||||||
const wordList& fields2 = source2Ptr_->fields();
|
const wordList& fields2 = source2Ptr_->fields();
|
||||||
@ -108,15 +99,54 @@ void Foam::fieldValues::fieldValueDelta::writeFileHeader(const label i)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::functionObjects::fieldValues::fieldValueDelta::fieldValueDelta
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry& obr,
|
||||||
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles
|
||||||
|
)
|
||||||
|
:
|
||||||
|
functionObjectFiles(obr, name, typeName),
|
||||||
|
name_(name),
|
||||||
|
obr_(obr),
|
||||||
|
loadFromFiles_(loadFromFiles),
|
||||||
|
log_(true),
|
||||||
|
operation_(opSubtract),
|
||||||
|
source1Ptr_(NULL),
|
||||||
|
source2Ptr_(NULL)
|
||||||
|
{
|
||||||
|
read(dict);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::functionObjects::fieldValues::fieldValueDelta::viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry& obr,
|
||||||
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
|
return isA<fvMesh>(obr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::fieldValues::fieldValueDelta::~fieldValueDelta()
|
Foam::functionObjects::fieldValues::fieldValueDelta::~fieldValueDelta()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::fieldValues::fieldValueDelta::read(const dictionary& dict)
|
void Foam::functionObjects::fieldValues::fieldValueDelta::read
|
||||||
|
(
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
{
|
{
|
||||||
log_ = dict.lookupOrDefault<Switch>("log", true);
|
log_ = dict.lookupOrDefault<Switch>("log", true);
|
||||||
source1Ptr_.reset
|
source1Ptr_.reset
|
||||||
@ -146,7 +176,7 @@ void Foam::fieldValues::fieldValueDelta::read(const dictionary& dict)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValues::fieldValueDelta::write()
|
void Foam::functionObjects::fieldValues::fieldValueDelta::write()
|
||||||
{
|
{
|
||||||
functionObjectFiles::write();
|
functionObjectFiles::write();
|
||||||
|
|
||||||
@ -186,34 +216,30 @@ void Foam::fieldValues::fieldValueDelta::write()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValues::fieldValueDelta::execute()
|
void Foam::functionObjects::fieldValues::fieldValueDelta::execute()
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValues::fieldValueDelta::end()
|
void Foam::functionObjects::fieldValues::fieldValueDelta::end()
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValues::fieldValueDelta::timeSet()
|
void Foam::functionObjects::fieldValues::fieldValueDelta::timeSet()
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValues::fieldValueDelta::updateMesh(const mapPolyMesh&)
|
void Foam::functionObjects::fieldValues::fieldValueDelta::updateMesh
|
||||||
{
|
(
|
||||||
// Do nothing
|
const mapPolyMesh&
|
||||||
}
|
)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
void Foam::fieldValues::fieldValueDelta::movePoints(const polyMesh&)
|
void Foam::functionObjects::fieldValues::fieldValueDelta::movePoints
|
||||||
{
|
(
|
||||||
// Do nothing
|
const polyMesh&
|
||||||
}
|
)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::fieldValues::fieldValueDelta
|
Foam::functionObjects::fieldValues::fieldValueDelta
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFieldFunctionObjects
|
grpFieldFunctionObjects
|
||||||
@ -84,7 +84,8 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
namespace fieldValues
|
namespace fieldValues
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -162,14 +163,26 @@ public:
|
|||||||
TypeName("fieldValueDelta");
|
TypeName("fieldValueDelta");
|
||||||
|
|
||||||
|
|
||||||
//- Construct from components
|
// Constructors
|
||||||
fieldValueDelta
|
|
||||||
(
|
//- Construct from components
|
||||||
const word& name,
|
fieldValueDelta
|
||||||
const objectRegistry& obr,
|
(
|
||||||
const dictionary& dict,
|
const word& name,
|
||||||
const bool loadFromFiles = false
|
const objectRegistry& obr,
|
||||||
);
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -206,6 +219,7 @@ public:
|
|||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
} // End namespace fieldValues
|
} // End namespace fieldValues
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,8 +43,10 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<fieldValues::fieldValueDelta>
|
typedef OutputFilterFunctionObject
|
||||||
fieldValueDeltaFunctionObject;
|
<
|
||||||
|
functionObjects::fieldValues::fieldValueDelta
|
||||||
|
> fieldValueDeltaFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -30,7 +30,7 @@ License
|
|||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Type Foam::fieldValues::fieldValueDelta::applyOperation
|
Type Foam::functionObjects::fieldValues::fieldValueDelta::applyOperation
|
||||||
(
|
(
|
||||||
const Type& value1,
|
const Type& value1,
|
||||||
const Type& value2
|
const Type& value2
|
||||||
@ -79,7 +79,10 @@ Type Foam::fieldValues::fieldValueDelta::applyOperation
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::fieldValues::fieldValueDelta::processFields(bool& found)
|
void Foam::functionObjects::fieldValues::fieldValueDelta::processFields
|
||||||
|
(
|
||||||
|
bool& found
|
||||||
|
)
|
||||||
{
|
{
|
||||||
typedef GeometricField<Type, fvPatchField, volMesh> vf;
|
typedef GeometricField<Type, fvPatchField, volMesh> vf;
|
||||||
typedef GeometricField<Type, fvsPatchField, surfaceMesh> sf;
|
typedef GeometricField<Type, fvsPatchField, surfaceMesh> sf;
|
||||||
|
|||||||
@ -75,26 +75,13 @@ Foam::functionObjects::histogram::histogram
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
functionObjectFile(obr, typeName),
|
functionObjectFile(obr, typeName),
|
||||||
name_(name),
|
name_(name)
|
||||||
active_(true)
|
|
||||||
{
|
{
|
||||||
// Check if the available mesh is an fvMesh, otherwise deactivate
|
read(dict);
|
||||||
if (isA<fvMesh>(obr_))
|
|
||||||
{
|
|
||||||
read(dict);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
active_ = false;
|
|
||||||
WarningInFunction
|
|
||||||
<< "No fvMesh available, deactivating " << name_ << nl
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::autoPtr<Foam::functionObjects::histogram>
|
bool Foam::functionObjects::histogram::viable
|
||||||
Foam::functionObjects::histogram::New
|
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -102,17 +89,8 @@ Foam::functionObjects::histogram::New
|
|||||||
const bool loadFromFiles
|
const bool loadFromFiles
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (isA<fvMesh>(obr))
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
{
|
return isA<fvMesh>(obr);
|
||||||
return autoPtr<histogram>
|
|
||||||
(
|
|
||||||
new histogram(name, obr, dict, loadFromFiles)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return autoPtr<histogram>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -126,16 +104,13 @@ Foam::functionObjects::histogram::~histogram()
|
|||||||
|
|
||||||
void Foam::functionObjects::histogram::read(const dictionary& dict)
|
void Foam::functionObjects::histogram::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (active_)
|
dict.lookup("field") >> fieldName_;
|
||||||
{
|
dict.lookup("max") >> max_;
|
||||||
dict.lookup("field") >> fieldName_;
|
min_ = dict.lookupOrDefault<scalar>("min", 0);
|
||||||
dict.lookup("max") >> max_;
|
dict.lookup("nBins") >> nBins_;
|
||||||
min_ = dict.lookupOrDefault<scalar>("min", 0);
|
|
||||||
dict.lookup("nBins") >> nBins_;
|
|
||||||
|
|
||||||
word format(dict.lookup("setFormat"));
|
word format(dict.lookup("setFormat"));
|
||||||
formatterPtr_ = writer<scalar>::New(format);
|
formatterPtr_ = writer<scalar>::New(format);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -153,87 +128,84 @@ void Foam::functionObjects::histogram::timeSet()
|
|||||||
|
|
||||||
void Foam::functionObjects::histogram::write()
|
void Foam::functionObjects::histogram::write()
|
||||||
{
|
{
|
||||||
if (active_)
|
Info<< type() << " " << name_ << " output:" << nl;
|
||||||
|
|
||||||
|
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
||||||
|
|
||||||
|
autoPtr<volScalarField> fieldPtr;
|
||||||
|
if (obr_.foundObject<volScalarField>(fieldName_))
|
||||||
{
|
{
|
||||||
Info<< type() << " " << name_ << " output:" << nl;
|
Info<< " Looking up field " << fieldName_ << endl;
|
||||||
|
}
|
||||||
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
else
|
||||||
|
{
|
||||||
autoPtr<volScalarField> fieldPtr;
|
Info<< " Reading field " << fieldName_ << endl;
|
||||||
if (obr_.foundObject<volScalarField>(fieldName_))
|
fieldPtr.reset
|
||||||
{
|
|
||||||
Info<< " Looking up field " << fieldName_ << endl;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Info<< " Reading field " << fieldName_ << endl;
|
|
||||||
fieldPtr.reset
|
|
||||||
(
|
|
||||||
new volScalarField
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
fieldName_,
|
|
||||||
mesh.time().timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::MUST_READ,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const volScalarField& field =
|
|
||||||
(
|
(
|
||||||
fieldPtr.valid()
|
new volScalarField
|
||||||
? fieldPtr()
|
(
|
||||||
: obr_.lookupObject<volScalarField>(fieldName_)
|
IOobject
|
||||||
);
|
|
||||||
|
|
||||||
// Calculate the mid-points of bins for the graph axis
|
|
||||||
pointField xBin(nBins_);
|
|
||||||
const scalar delta = (max_- min_)/nBins_;
|
|
||||||
|
|
||||||
scalar x = min_ + 0.5*delta;
|
|
||||||
forAll(xBin, i)
|
|
||||||
{
|
|
||||||
xBin[i] = point(x, 0, 0);
|
|
||||||
x += delta;
|
|
||||||
}
|
|
||||||
|
|
||||||
scalarField volFrac(nBins_, 0);
|
|
||||||
const scalarField& V = mesh.V();
|
|
||||||
|
|
||||||
forAll(field, celli)
|
|
||||||
{
|
|
||||||
const label bini = (field[celli] - min_)/delta;
|
|
||||||
if (bini >= 0 && bini < nBins_)
|
|
||||||
{
|
|
||||||
volFrac[bini] += V[celli];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Pstream::listCombineGather(volFrac, plusEqOp<scalar>());
|
|
||||||
|
|
||||||
if (Pstream::master())
|
|
||||||
{
|
|
||||||
const scalar sumVol = sum(volFrac);
|
|
||||||
|
|
||||||
if (sumVol > SMALL)
|
|
||||||
{
|
|
||||||
volFrac /= sumVol;
|
|
||||||
|
|
||||||
const coordSet coords
|
|
||||||
(
|
(
|
||||||
"Volume_Fraction",
|
fieldName_,
|
||||||
"x",
|
mesh.time().timeName(),
|
||||||
xBin,
|
mesh,
|
||||||
mag(xBin)
|
IOobject::MUST_READ,
|
||||||
);
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
mesh
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
writeGraph(coords, field.name(), volFrac);
|
const volScalarField& field =
|
||||||
}
|
(
|
||||||
|
fieldPtr.valid()
|
||||||
|
? fieldPtr()
|
||||||
|
: obr_.lookupObject<volScalarField>(fieldName_)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Calculate the mid-points of bins for the graph axis
|
||||||
|
pointField xBin(nBins_);
|
||||||
|
const scalar delta = (max_- min_)/nBins_;
|
||||||
|
|
||||||
|
scalar x = min_ + 0.5*delta;
|
||||||
|
forAll(xBin, i)
|
||||||
|
{
|
||||||
|
xBin[i] = point(x, 0, 0);
|
||||||
|
x += delta;
|
||||||
|
}
|
||||||
|
|
||||||
|
scalarField volFrac(nBins_, 0);
|
||||||
|
const scalarField& V = mesh.V();
|
||||||
|
|
||||||
|
forAll(field, celli)
|
||||||
|
{
|
||||||
|
const label bini = (field[celli] - min_)/delta;
|
||||||
|
if (bini >= 0 && bini < nBins_)
|
||||||
|
{
|
||||||
|
volFrac[bini] += V[celli];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Pstream::listCombineGather(volFrac, plusEqOp<scalar>());
|
||||||
|
|
||||||
|
if (Pstream::master())
|
||||||
|
{
|
||||||
|
const scalar sumVol = sum(volFrac);
|
||||||
|
|
||||||
|
if (sumVol > SMALL)
|
||||||
|
{
|
||||||
|
volFrac /= sumVol;
|
||||||
|
|
||||||
|
const coordSet coords
|
||||||
|
(
|
||||||
|
"Volume_Fraction",
|
||||||
|
"x",
|
||||||
|
xBin,
|
||||||
|
mag(xBin)
|
||||||
|
);
|
||||||
|
|
||||||
|
writeGraph(coords, field.name(), volFrac);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -99,9 +99,6 @@ class histogram
|
|||||||
//- Name of this histogram
|
//- Name of this histogram
|
||||||
word name_;
|
word name_;
|
||||||
|
|
||||||
//- on/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
//- Name of field
|
//- Name of field
|
||||||
word fieldName_;
|
word fieldName_;
|
||||||
|
|
||||||
@ -152,9 +149,9 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct on free-store and return pointer if successful
|
//- Return true if the construction of this functionObject is viable
|
||||||
// otherwise return a null-pointer
|
// i.e. the prerequisites for construction are available
|
||||||
static autoPtr<histogram> New
|
static bool viable
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry&,
|
const objectRegistry&,
|
||||||
|
|||||||
@ -32,14 +32,17 @@ License
|
|||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace functionObjects
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(nearWallFields, 0);
|
defineTypeNameAndDebug(nearWallFields, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::nearWallFields::calcAddressing()
|
void Foam::functionObjects::nearWallFields::calcAddressing()
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
||||||
|
|
||||||
@ -218,7 +221,7 @@ void Foam::nearWallFields::calcAddressing()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::nearWallFields::nearWallFields
|
Foam::functionObjects::nearWallFields::nearWallFields
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -228,28 +231,28 @@ Foam::nearWallFields::nearWallFields
|
|||||||
:
|
:
|
||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr),
|
||||||
active_(true),
|
|
||||||
fieldSet_()
|
fieldSet_()
|
||||||
{
|
{
|
||||||
// Check if the available mesh is an fvMesh otherise deactivate
|
read(dict);
|
||||||
if (isA<fvMesh>(obr_))
|
}
|
||||||
{
|
|
||||||
read(dict);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
active_ = false;
|
|
||||||
WarningInFunction
|
|
||||||
<< "No fvMesh available, deactivating " << name_
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::functionObjects::nearWallFields::viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry& obr,
|
||||||
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
|
return isA<fvMesh>(obr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::nearWallFields::~nearWallFields()
|
Foam::functionObjects::nearWallFields::~nearWallFields()
|
||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
@ -260,157 +263,142 @@ Foam::nearWallFields::~nearWallFields()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::nearWallFields::read(const dictionary& dict)
|
void Foam::functionObjects::nearWallFields::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
InfoInFunction << endl;
|
InfoInFunction << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (active_)
|
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
||||||
|
|
||||||
|
dict.lookup("fields") >> fieldSet_;
|
||||||
|
patchSet_ =
|
||||||
|
mesh.boundaryMesh().patchSet(wordReList(dict.lookup("patches")));
|
||||||
|
distance_ = readScalar(dict.lookup("distance"));
|
||||||
|
|
||||||
|
|
||||||
|
// Clear out any previously loaded fields
|
||||||
|
vsf_.clear();
|
||||||
|
vvf_.clear();
|
||||||
|
vSpheretf_.clear();
|
||||||
|
vSymmtf_.clear();
|
||||||
|
vtf_.clear();
|
||||||
|
fieldMap_.clear();
|
||||||
|
reverseFieldMap_.clear();
|
||||||
|
|
||||||
|
|
||||||
|
// Generate fields with mappedField boundary condition
|
||||||
|
|
||||||
|
// Convert field to map
|
||||||
|
fieldMap_.resize(2*fieldSet_.size());
|
||||||
|
reverseFieldMap_.resize(2*fieldSet_.size());
|
||||||
|
forAll(fieldSet_, setI)
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
const word& fldName = fieldSet_[setI].first();
|
||||||
|
const word& sampleFldName = fieldSet_[setI].second();
|
||||||
|
|
||||||
dict.lookup("fields") >> fieldSet_;
|
fieldMap_.insert(fldName, sampleFldName);
|
||||||
patchSet_ =
|
reverseFieldMap_.insert(sampleFldName, fldName);
|
||||||
mesh.boundaryMesh().patchSet(wordReList(dict.lookup("patches")));
|
}
|
||||||
distance_ = readScalar(dict.lookup("distance"));
|
|
||||||
|
Info<< type() << " " << name_ << ": Sampling " << fieldMap_.size()
|
||||||
|
<< " fields" << endl;
|
||||||
|
|
||||||
|
// Do analysis
|
||||||
|
calcAddressing();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Clear out any previously loaded fields
|
void Foam::functionObjects::nearWallFields::execute()
|
||||||
vsf_.clear();
|
{
|
||||||
vvf_.clear();
|
if (debug)
|
||||||
vSpheretf_.clear();
|
{
|
||||||
vSymmtf_.clear();
|
InfoInFunction << endl;
|
||||||
vtf_.clear();
|
}
|
||||||
fieldMap_.clear();
|
|
||||||
reverseFieldMap_.clear();
|
|
||||||
|
|
||||||
|
if
|
||||||
// Generate fields with mappedField boundary condition
|
(
|
||||||
|
fieldMap_.size()
|
||||||
// Convert field to map
|
&& vsf_.empty()
|
||||||
fieldMap_.resize(2*fieldSet_.size());
|
&& vvf_.empty()
|
||||||
reverseFieldMap_.resize(2*fieldSet_.size());
|
&& vSpheretf_.empty()
|
||||||
forAll(fieldSet_, setI)
|
&& vSymmtf_.empty()
|
||||||
{
|
&& vtf_.empty()
|
||||||
const word& fldName = fieldSet_[setI].first();
|
)
|
||||||
const word& sampleFldName = fieldSet_[setI].second();
|
{
|
||||||
|
Info<< type() << " " << name_ << ": Creating " << fieldMap_.size()
|
||||||
fieldMap_.insert(fldName, sampleFldName);
|
|
||||||
reverseFieldMap_.insert(sampleFldName, fldName);
|
|
||||||
}
|
|
||||||
|
|
||||||
Info<< type() << " " << name_ << ": Sampling " << fieldMap_.size()
|
|
||||||
<< " fields" << endl;
|
<< " fields" << endl;
|
||||||
|
|
||||||
// Do analysis
|
createFields(vsf_);
|
||||||
calcAddressing();
|
createFields(vvf_);
|
||||||
}
|
createFields(vSpheretf_);
|
||||||
}
|
createFields(vSymmtf_);
|
||||||
|
createFields(vtf_);
|
||||||
|
|
||||||
void Foam::nearWallFields::execute()
|
|
||||||
{
|
|
||||||
if (debug)
|
|
||||||
{
|
|
||||||
InfoInFunction << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (active_)
|
|
||||||
{
|
|
||||||
if
|
|
||||||
(
|
|
||||||
fieldMap_.size()
|
|
||||||
&& vsf_.empty()
|
|
||||||
&& vvf_.empty()
|
|
||||||
&& vSpheretf_.empty()
|
|
||||||
&& vSymmtf_.empty()
|
|
||||||
&& vtf_.empty()
|
|
||||||
)
|
|
||||||
{
|
|
||||||
Info<< type() << " " << name_ << ": Creating " << fieldMap_.size()
|
|
||||||
<< " fields" << endl;
|
|
||||||
|
|
||||||
createFields(vsf_);
|
|
||||||
createFields(vvf_);
|
|
||||||
createFields(vSpheretf_);
|
|
||||||
createFields(vSymmtf_);
|
|
||||||
createFields(vtf_);
|
|
||||||
|
|
||||||
Info<< endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
Info<< type() << " " << name_ << " output:" << nl;
|
|
||||||
|
|
||||||
Info<< " Sampling fields to " << obr_.time().timeName()
|
|
||||||
<< endl;
|
|
||||||
|
|
||||||
sampleFields(vsf_);
|
|
||||||
sampleFields(vvf_);
|
|
||||||
sampleFields(vSpheretf_);
|
|
||||||
sampleFields(vSymmtf_);
|
|
||||||
sampleFields(vtf_);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::nearWallFields::end()
|
|
||||||
{
|
|
||||||
if (debug)
|
|
||||||
{
|
|
||||||
InfoInFunction << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (active_)
|
|
||||||
{
|
|
||||||
execute();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::nearWallFields::timeSet()
|
|
||||||
{
|
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::nearWallFields::write()
|
|
||||||
{
|
|
||||||
if (debug)
|
|
||||||
{
|
|
||||||
InfoInFunction << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (active_)
|
|
||||||
{
|
|
||||||
Info<< " Writing sampled fields to " << obr_.time().timeName()
|
|
||||||
<< endl;
|
|
||||||
|
|
||||||
forAll(vsf_, i)
|
|
||||||
{
|
|
||||||
vsf_[i].write();
|
|
||||||
}
|
|
||||||
forAll(vvf_, i)
|
|
||||||
{
|
|
||||||
vvf_[i].write();
|
|
||||||
}
|
|
||||||
forAll(vSpheretf_, i)
|
|
||||||
{
|
|
||||||
vSpheretf_[i].write();
|
|
||||||
}
|
|
||||||
forAll(vSymmtf_, i)
|
|
||||||
{
|
|
||||||
vSymmtf_[i].write();
|
|
||||||
}
|
|
||||||
forAll(vtf_, i)
|
|
||||||
{
|
|
||||||
vtf_[i].write();
|
|
||||||
}
|
|
||||||
|
|
||||||
Info<< endl;
|
Info<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Info<< type() << " " << name_ << " output:" << nl;
|
||||||
|
|
||||||
|
Info<< " Sampling fields to " << obr_.time().timeName()
|
||||||
|
<< endl;
|
||||||
|
|
||||||
|
sampleFields(vsf_);
|
||||||
|
sampleFields(vvf_);
|
||||||
|
sampleFields(vSpheretf_);
|
||||||
|
sampleFields(vSymmtf_);
|
||||||
|
sampleFields(vtf_);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::nearWallFields::end()
|
||||||
|
{
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
InfoInFunction << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::nearWallFields::timeSet()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::nearWallFields::write()
|
||||||
|
{
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
InfoInFunction << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< " Writing sampled fields to " << obr_.time().timeName()
|
||||||
|
<< endl;
|
||||||
|
|
||||||
|
forAll(vsf_, i)
|
||||||
|
{
|
||||||
|
vsf_[i].write();
|
||||||
|
}
|
||||||
|
forAll(vvf_, i)
|
||||||
|
{
|
||||||
|
vvf_[i].write();
|
||||||
|
}
|
||||||
|
forAll(vSpheretf_, i)
|
||||||
|
{
|
||||||
|
vSpheretf_[i].write();
|
||||||
|
}
|
||||||
|
forAll(vSymmtf_, i)
|
||||||
|
{
|
||||||
|
vSymmtf_[i].write();
|
||||||
|
}
|
||||||
|
forAll(vtf_, i)
|
||||||
|
{
|
||||||
|
vtf_[i].write();
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::nearWallFields
|
Foam::functionObjects::nearWallFields
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFieldFunctionObjects
|
grpFieldFunctionObjects
|
||||||
@ -88,6 +88,9 @@ class objectRegistry;
|
|||||||
class dictionary;
|
class dictionary;
|
||||||
class mapPolyMesh;
|
class mapPolyMesh;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class nearWallFields Declaration
|
Class nearWallFields Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -103,9 +106,6 @@ protected:
|
|||||||
|
|
||||||
const objectRegistry& obr_;
|
const objectRegistry& obr_;
|
||||||
|
|
||||||
//- on/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
// Read from dictionary
|
// Read from dictionary
|
||||||
|
|
||||||
//- Fields to process
|
//- Fields to process
|
||||||
@ -197,6 +197,16 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~nearWallFields();
|
virtual ~nearWallFields();
|
||||||
@ -237,6 +247,7 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,7 +43,7 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<nearWallFields>
|
typedef OutputFilterFunctionObject<functionObjects::nearWallFields>
|
||||||
nearWallFieldsFunctionObject;
|
nearWallFieldsFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -28,7 +28,7 @@ License
|
|||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::nearWallFields::createFields
|
void Foam::functionObjects::nearWallFields::createFields
|
||||||
(
|
(
|
||||||
PtrList<GeometricField<Type, fvPatchField, volMesh>>& sflds
|
PtrList<GeometricField<Type, fvPatchField, volMesh>>& sflds
|
||||||
) const
|
) const
|
||||||
@ -72,7 +72,7 @@ void Foam::nearWallFields::createFields
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::nearWallFields::sampleBoundaryField
|
void Foam::functionObjects::nearWallFields::sampleBoundaryField
|
||||||
(
|
(
|
||||||
const interpolationCellPoint<Type>& interpolator,
|
const interpolationCellPoint<Type>& interpolator,
|
||||||
GeometricField<Type, fvPatchField, volMesh>& fld
|
GeometricField<Type, fvPatchField, volMesh>& fld
|
||||||
@ -122,7 +122,7 @@ void Foam::nearWallFields::sampleBoundaryField
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::nearWallFields::sampleFields
|
void Foam::functionObjects::nearWallFields::sampleFields
|
||||||
(
|
(
|
||||||
PtrList<GeometricField<Type, fvPatchField, volMesh>>& sflds
|
PtrList<GeometricField<Type, fvPatchField, volMesh>>& sflds
|
||||||
) const
|
) const
|
||||||
|
|||||||
@ -31,13 +31,16 @@ License
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(processorField, 0);
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(processorField, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::processorField::processorField
|
Foam::functionObjects::processorField::processorField
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -46,96 +49,85 @@ Foam::processorField::processorField
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr)
|
||||||
active_(true)
|
|
||||||
{
|
{
|
||||||
// Check if the available mesh is an fvMesh otherise deactivate
|
read(dict);
|
||||||
if (isA<fvMesh>(obr_))
|
|
||||||
{
|
|
||||||
read(dict);
|
|
||||||
|
|
||||||
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
||||||
|
|
||||||
volScalarField* procFieldPtr
|
volScalarField* procFieldPtr
|
||||||
|
(
|
||||||
|
new volScalarField
|
||||||
(
|
(
|
||||||
new volScalarField
|
IOobject
|
||||||
(
|
(
|
||||||
IOobject
|
"processorID",
|
||||||
(
|
mesh.time().timeName(),
|
||||||
"processorID",
|
|
||||||
mesh.time().timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh,
|
mesh,
|
||||||
dimensionedScalar("0", dimless, 0.0)
|
IOobject::NO_READ,
|
||||||
)
|
IOobject::NO_WRITE
|
||||||
);
|
),
|
||||||
|
mesh,
|
||||||
|
dimensionedScalar("0", dimless, 0.0)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
mesh.objectRegistry::store(procFieldPtr);
|
mesh.objectRegistry::store(procFieldPtr);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
active_ = false;
|
|
||||||
WarningInFunction
|
|
||||||
<< "No fvMesh available, deactivating " << name_
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::functionObjects::processorField::viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry& obr,
|
||||||
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
|
return isA<fvMesh>(obr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::processorField::~processorField()
|
Foam::functionObjects::processorField::~processorField()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::processorField::read(const dictionary& dict)
|
void Foam::functionObjects::processorField::read(const dictionary& dict)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::processorField::execute()
|
||||||
{
|
{
|
||||||
// do nothing
|
const volScalarField& procField =
|
||||||
|
obr_.lookupObject<volScalarField>("processorID");
|
||||||
|
|
||||||
|
const_cast<volScalarField&>(procField) ==
|
||||||
|
dimensionedScalar("proci", dimless, Pstream::myProcNo());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::processorField::execute()
|
void Foam::functionObjects::processorField::end()
|
||||||
{
|
{
|
||||||
if (active_)
|
execute();
|
||||||
{
|
|
||||||
const volScalarField& procField =
|
|
||||||
obr_.lookupObject<volScalarField>("processorID");
|
|
||||||
|
|
||||||
const_cast<volScalarField&>(procField) ==
|
|
||||||
dimensionedScalar("proci", dimless, Pstream::myProcNo());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::processorField::end()
|
void Foam::functionObjects::processorField::timeSet()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::processorField::write()
|
||||||
{
|
{
|
||||||
if (active_)
|
const volScalarField& procField =
|
||||||
{
|
obr_.lookupObject<volScalarField>("processorID");
|
||||||
execute();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
procField.write();
|
||||||
void Foam::processorField::timeSet()
|
|
||||||
{
|
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::processorField::write()
|
|
||||||
{
|
|
||||||
if (active_)
|
|
||||||
{
|
|
||||||
const volScalarField& procField =
|
|
||||||
obr_.lookupObject<volScalarField>("processorID");
|
|
||||||
|
|
||||||
procField.write();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::processorField
|
Foam::functionObjects::processorField
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFieldFunctionObjects
|
grpFieldFunctionObjects
|
||||||
@ -76,6 +76,9 @@ class objectRegistry;
|
|||||||
class dictionary;
|
class dictionary;
|
||||||
class mapPolyMesh;
|
class mapPolyMesh;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class processorField Declaration
|
Class processorField Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -92,9 +95,6 @@ protected:
|
|||||||
//- Reference to the database
|
//- Reference to the database
|
||||||
const objectRegistry& obr_;
|
const objectRegistry& obr_;
|
||||||
|
|
||||||
//- on/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -125,6 +125,16 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~processorField();
|
virtual ~processorField();
|
||||||
@ -165,6 +175,7 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,7 +43,7 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<processorField>
|
typedef OutputFilterFunctionObject<functionObjects::processorField>
|
||||||
processorFieldFunctionObject;
|
processorFieldFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -30,13 +30,16 @@ License
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(readFields, 0);
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(readFields, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::readFields::readFields
|
Foam::functionObjects::readFields::readFields
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -46,92 +49,80 @@ Foam::readFields::readFields
|
|||||||
:
|
:
|
||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr),
|
||||||
active_(true),
|
|
||||||
fieldSet_()
|
fieldSet_()
|
||||||
{
|
{
|
||||||
// Check if the available mesh is an fvMesh otherise deactivate
|
read(dict);
|
||||||
if (isA<fvMesh>(obr_))
|
}
|
||||||
{
|
|
||||||
read(dict);
|
|
||||||
}
|
bool Foam::functionObjects::readFields::viable
|
||||||
else
|
(
|
||||||
{
|
const word& name,
|
||||||
active_ = false;
|
const objectRegistry& obr,
|
||||||
WarningInFunction
|
const dictionary& dict,
|
||||||
<< "No fvMesh available, deactivating " << name_
|
const bool loadFromFiles
|
||||||
<< endl;
|
)
|
||||||
}
|
{
|
||||||
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
|
return isA<fvMesh>(obr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::readFields::~readFields()
|
Foam::functionObjects::readFields::~readFields()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::readFields::read(const dictionary& dict)
|
void Foam::functionObjects::readFields::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (active_)
|
dict.lookup("fields") >> fieldSet_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::readFields::execute()
|
||||||
|
{
|
||||||
|
// Clear out any previously loaded fields
|
||||||
|
vsf_.clear();
|
||||||
|
vvf_.clear();
|
||||||
|
vSpheretf_.clear();
|
||||||
|
vSymmtf_.clear();
|
||||||
|
vtf_.clear();
|
||||||
|
|
||||||
|
ssf_.clear();
|
||||||
|
svf_.clear();
|
||||||
|
sSpheretf_.clear();
|
||||||
|
sSymmtf_.clear();
|
||||||
|
stf_.clear();
|
||||||
|
|
||||||
|
forAll(fieldSet_, fieldI)
|
||||||
{
|
{
|
||||||
dict.lookup("fields") >> fieldSet_;
|
const word& fieldName = fieldSet_[fieldI];
|
||||||
|
|
||||||
|
// If necessary load field
|
||||||
|
loadField<scalar>(fieldName, vsf_, ssf_);
|
||||||
|
loadField<vector>(fieldName, vvf_, svf_);
|
||||||
|
loadField<sphericalTensor>(fieldName, vSpheretf_, sSpheretf_);
|
||||||
|
loadField<symmTensor>(fieldName, vSymmtf_, sSymmtf_);
|
||||||
|
loadField<tensor>(fieldName, vtf_, stf_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::readFields::execute()
|
void Foam::functionObjects::readFields::end()
|
||||||
{
|
{
|
||||||
if (active_)
|
execute();
|
||||||
{
|
|
||||||
// Clear out any previously loaded fields
|
|
||||||
vsf_.clear();
|
|
||||||
vvf_.clear();
|
|
||||||
vSpheretf_.clear();
|
|
||||||
vSymmtf_.clear();
|
|
||||||
vtf_.clear();
|
|
||||||
|
|
||||||
ssf_.clear();
|
|
||||||
svf_.clear();
|
|
||||||
sSpheretf_.clear();
|
|
||||||
sSymmtf_.clear();
|
|
||||||
stf_.clear();
|
|
||||||
|
|
||||||
forAll(fieldSet_, fieldI)
|
|
||||||
{
|
|
||||||
const word& fieldName = fieldSet_[fieldI];
|
|
||||||
|
|
||||||
// If necessary load field
|
|
||||||
loadField<scalar>(fieldName, vsf_, ssf_);
|
|
||||||
loadField<vector>(fieldName, vvf_, svf_);
|
|
||||||
loadField<sphericalTensor>(fieldName, vSpheretf_, sSpheretf_);
|
|
||||||
loadField<symmTensor>(fieldName, vSymmtf_, sSymmtf_);
|
|
||||||
loadField<tensor>(fieldName, vtf_, stf_);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::readFields::end()
|
void Foam::functionObjects::readFields::timeSet()
|
||||||
{
|
{}
|
||||||
if (active_)
|
|
||||||
{
|
|
||||||
execute();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::readFields::timeSet()
|
void Foam::functionObjects::readFields::write()
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::readFields::write()
|
|
||||||
{
|
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::readFields
|
Foam::functionObjects::readFields
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFieldFunctionObjects
|
grpFieldFunctionObjects
|
||||||
@ -81,6 +81,9 @@ class objectRegistry;
|
|||||||
class dictionary;
|
class dictionary;
|
||||||
class mapPolyMesh;
|
class mapPolyMesh;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class readFields Declaration
|
Class readFields Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -96,9 +99,6 @@ protected:
|
|||||||
|
|
||||||
const objectRegistry& obr_;
|
const objectRegistry& obr_;
|
||||||
|
|
||||||
//- on/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
//- Fields to load
|
//- Fields to load
|
||||||
wordList fieldSet_;
|
wordList fieldSet_;
|
||||||
|
|
||||||
@ -156,6 +156,16 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~readFields();
|
virtual ~readFields();
|
||||||
@ -196,6 +206,7 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,7 +43,7 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<readFields>
|
typedef OutputFilterFunctionObject<functionObjects::readFields>
|
||||||
readFieldsFunctionObject;
|
readFieldsFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -31,7 +31,7 @@ License
|
|||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::readFields::loadField
|
void Foam::functionObjects::readFields::loadField
|
||||||
(
|
(
|
||||||
const word& fieldName,
|
const word& fieldName,
|
||||||
PtrList<GeometricField<Type, fvPatchField, volMesh>>& vflds,
|
PtrList<GeometricField<Type, fvPatchField, volMesh>>& vflds,
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::regionSizeDistribution
|
Foam::functionObjects::regionSizeDistribution
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFieldFunctionObjects
|
grpFieldFunctionObjects
|
||||||
@ -126,6 +126,9 @@ class mapPolyMesh;
|
|||||||
class regionSplit;
|
class regionSplit;
|
||||||
class polyMesh;
|
class polyMesh;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class regionSizeDistribution Declaration
|
Class regionSizeDistribution Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -141,9 +144,6 @@ class regionSizeDistribution
|
|||||||
|
|
||||||
const objectRegistry& obr_;
|
const objectRegistry& obr_;
|
||||||
|
|
||||||
//- on/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
//- Name of field
|
//- Name of field
|
||||||
word alphaName_;
|
word alphaName_;
|
||||||
|
|
||||||
@ -255,6 +255,16 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
|
|
||||||
@ -296,6 +306,7 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,7 +43,7 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<regionSizeDistribution>
|
typedef OutputFilterFunctionObject<functionObjects::regionSizeDistribution>
|
||||||
regionSizeDistributionFunctionObject;
|
regionSizeDistributionFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,7 @@ License
|
|||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Foam::Map<Type> Foam::regionSizeDistribution::regionSum
|
Foam::Map<Type> Foam::functionObjects::regionSizeDistribution::regionSum
|
||||||
(
|
(
|
||||||
const regionSplit& regions,
|
const regionSplit& regions,
|
||||||
const Field<Type>& fld
|
const Field<Type>& fld
|
||||||
@ -60,9 +60,8 @@ Foam::Map<Type> Foam::regionSizeDistribution::regionSum
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Get data in sortedToc order
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Foam::List<Type> Foam::regionSizeDistribution::extractData
|
Foam::List<Type> Foam::functionObjects::regionSizeDistribution::extractData
|
||||||
(
|
(
|
||||||
const UList<label>& keys,
|
const UList<label>& keys,
|
||||||
const Map<Type>& regionData
|
const Map<Type>& regionData
|
||||||
|
|||||||
@ -40,14 +40,17 @@ License
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(streamLine, 0);
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(streamLine, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::autoPtr<Foam::indirectPrimitivePatch>
|
Foam::autoPtr<Foam::indirectPrimitivePatch>
|
||||||
Foam::streamLine::wallPatch() const
|
Foam::functionObjects::streamLine::wallPatch() const
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
||||||
|
|
||||||
@ -57,7 +60,6 @@ Foam::streamLine::wallPatch() const
|
|||||||
|
|
||||||
forAll(patches, patchi)
|
forAll(patches, patchi)
|
||||||
{
|
{
|
||||||
//if (!polyPatch::constraintType(patches[patchi].type()))
|
|
||||||
if (isA<wallPolyPatch>(patches[patchi]))
|
if (isA<wallPolyPatch>(patches[patchi]))
|
||||||
{
|
{
|
||||||
nFaces += patches[patchi].size();
|
nFaces += patches[patchi].size();
|
||||||
@ -70,7 +72,6 @@ Foam::streamLine::wallPatch() const
|
|||||||
|
|
||||||
forAll(patches, patchi)
|
forAll(patches, patchi)
|
||||||
{
|
{
|
||||||
//if (!polyPatch::constraintType(patches[patchi].type()))
|
|
||||||
if (isA<wallPolyPatch>(patches[patchi]))
|
if (isA<wallPolyPatch>(patches[patchi]))
|
||||||
{
|
{
|
||||||
const polyPatch& pp = patches[patchi];
|
const polyPatch& pp = patches[patchi];
|
||||||
@ -97,7 +98,7 @@ Foam::streamLine::wallPatch() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::streamLine::track()
|
void Foam::functionObjects::streamLine::track()
|
||||||
{
|
{
|
||||||
const Time& runTime = obr_.time();
|
const Time& runTime = obr_.time();
|
||||||
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
||||||
@ -121,7 +122,7 @@ void Foam::streamLine::track()
|
|||||||
mesh,
|
mesh,
|
||||||
seedPoints[i],
|
seedPoints[i],
|
||||||
seedPoints.cells()[i],
|
seedPoints.cells()[i],
|
||||||
lifeTime_ // lifetime
|
lifeTime_
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -294,7 +295,7 @@ void Foam::streamLine::track()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// additional particle info
|
// Additional particle info
|
||||||
streamLineParticle::trackingData td
|
streamLineParticle::trackingData td
|
||||||
(
|
(
|
||||||
particles,
|
particles,
|
||||||
@ -322,7 +323,7 @@ void Foam::streamLine::track()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::streamLine::streamLine
|
Foam::functionObjects::streamLine::streamLine
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -334,244 +335,217 @@ Foam::streamLine::streamLine
|
|||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr),
|
||||||
loadFromFiles_(loadFromFiles),
|
loadFromFiles_(loadFromFiles),
|
||||||
active_(true),
|
|
||||||
nSubCycle_(0)
|
nSubCycle_(0)
|
||||||
{
|
{
|
||||||
// Only active if a fvMesh is available
|
read(dict_);
|
||||||
if (isA<fvMesh>(obr_))
|
}
|
||||||
{
|
|
||||||
read(dict_);
|
|
||||||
}
|
bool Foam::functionObjects::streamLine::viable
|
||||||
else
|
(
|
||||||
{
|
const word& name,
|
||||||
active_ = false;
|
const objectRegistry& obr,
|
||||||
WarningInFunction
|
const dictionary& dict,
|
||||||
<< "No fvMesh available, deactivating."
|
const bool loadFromFiles
|
||||||
<< nl << endl;
|
)
|
||||||
}
|
{
|
||||||
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
|
return isA<fvMesh>(obr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::streamLine::~streamLine()
|
Foam::functionObjects::streamLine::~streamLine()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::streamLine::read(const dictionary& dict)
|
void Foam::functionObjects::streamLine::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (active_)
|
Info<< type() << " " << name_ << ":" << nl;
|
||||||
|
|
||||||
|
dict.lookup("fields") >> fields_;
|
||||||
|
if (dict.found("UName"))
|
||||||
{
|
{
|
||||||
Info<< type() << " " << name_ << ":" << nl;
|
dict.lookup("UName") >> UName_;
|
||||||
|
|
||||||
//dict_ = dict;
|
|
||||||
dict.lookup("fields") >> fields_;
|
|
||||||
if (dict.found("UName"))
|
|
||||||
{
|
|
||||||
dict.lookup("UName") >> UName_;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UName_ = "U";
|
|
||||||
if (dict.found("U"))
|
|
||||||
{
|
|
||||||
IOWarningInFunction(dict)
|
|
||||||
<< "Using deprecated entry \"U\"."
|
|
||||||
<< " Please use \"UName\" instead."
|
|
||||||
<< endl;
|
|
||||||
dict.lookup("U") >> UName_;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (findIndex(fields_, UName_) == -1)
|
|
||||||
{
|
|
||||||
FatalIOErrorInFunction(dict)
|
|
||||||
<< "Velocity field for tracking " << UName_
|
|
||||||
<< " should be present in the list of fields " << fields_
|
|
||||||
<< exit(FatalIOError);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
dict.lookup("trackForward") >> trackForward_;
|
|
||||||
dict.lookup("lifeTime") >> lifeTime_;
|
|
||||||
if (lifeTime_ < 1)
|
|
||||||
{
|
|
||||||
FatalErrorInFunction
|
|
||||||
<< "Illegal value " << lifeTime_ << " for lifeTime"
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool subCycling = dict.found("nSubCycle");
|
|
||||||
bool fixedLength = dict.found("trackLength");
|
|
||||||
|
|
||||||
if (subCycling && fixedLength)
|
|
||||||
{
|
|
||||||
FatalIOErrorInFunction(dict)
|
|
||||||
<< "Cannot both specify automatic time stepping (through '"
|
|
||||||
<< "nSubCycle' specification) and fixed track length (through '"
|
|
||||||
<< "trackLength')"
|
|
||||||
<< exit(FatalIOError);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
nSubCycle_ = 1;
|
|
||||||
if (dict.readIfPresent("nSubCycle", nSubCycle_))
|
|
||||||
{
|
|
||||||
trackLength_ = VGREAT;
|
|
||||||
if (nSubCycle_ < 1)
|
|
||||||
{
|
|
||||||
nSubCycle_ = 1;
|
|
||||||
}
|
|
||||||
Info<< " automatic track length specified through"
|
|
||||||
<< " number of sub cycles : " << nSubCycle_ << nl << endl;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dict.lookup("trackLength") >> trackLength_;
|
|
||||||
|
|
||||||
Info<< " fixed track length specified : "
|
|
||||||
<< trackLength_ << nl << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
interpolationScheme_ = dict.lookupOrDefault
|
|
||||||
(
|
|
||||||
"interpolationScheme",
|
|
||||||
interpolationCellPoint<scalar>::typeName
|
|
||||||
);
|
|
||||||
|
|
||||||
//Info<< " using interpolation " << interpolationScheme_
|
|
||||||
// << endl;
|
|
||||||
|
|
||||||
cloudName_ = dict.lookupOrDefault<word>("cloudName", "streamLine");
|
|
||||||
dict.lookup("seedSampleSet") >> seedSet_;
|
|
||||||
|
|
||||||
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
|
||||||
|
|
||||||
meshSearchPtr_.reset(new meshSearch(mesh));
|
|
||||||
|
|
||||||
const dictionary& coeffsDict = dict.subDict(seedSet_ + "Coeffs");
|
|
||||||
sampledSetPtr_ = sampledSet::New
|
|
||||||
(
|
|
||||||
seedSet_,
|
|
||||||
mesh,
|
|
||||||
meshSearchPtr_(),
|
|
||||||
coeffsDict
|
|
||||||
);
|
|
||||||
coeffsDict.lookup("axis") >> sampledSetAxis_;
|
|
||||||
|
|
||||||
scalarFormatterPtr_ = writer<scalar>::New(dict.lookup("setFormat"));
|
|
||||||
vectorFormatterPtr_ = writer<vector>::New(dict.lookup("setFormat"));
|
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
|
|
||||||
|
|
||||||
void Foam::streamLine::execute()
|
|
||||||
{
|
|
||||||
// const Time& runTime = obr_.time();
|
|
||||||
// Pout<< "**streamLine::execute : time:" << runTime.timeName() << endl;
|
|
||||||
//
|
|
||||||
// bool isOutputTime = false;
|
|
||||||
//
|
|
||||||
// const functionObjectList& fobs = runTime.functionObjects();
|
|
||||||
//
|
|
||||||
// forAll(fobs, i)
|
|
||||||
// {
|
|
||||||
// if (isA<streamLineFunctionObject>(fobs[i]))
|
|
||||||
// {
|
|
||||||
// const streamLineFunctionObject& fo =
|
|
||||||
// dynamic_cast<const streamLineFunctionObject&>(fobs[i]);
|
|
||||||
//
|
|
||||||
// if (fo.name() == name_)
|
|
||||||
// {
|
|
||||||
// Pout<< "found me:" << i << endl;
|
|
||||||
// if (fo.outputControl().output())
|
|
||||||
// {
|
|
||||||
// isOutputTime = true;
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// if (active_ && isOutputTime)
|
|
||||||
// {
|
|
||||||
// track();
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::streamLine::end()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::streamLine::timeSet()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::streamLine::write()
|
|
||||||
{
|
|
||||||
if (active_)
|
|
||||||
{
|
{
|
||||||
Info<< type() << " " << name_ << " output:" << nl;
|
UName_ = "U";
|
||||||
|
if (dict.found("U"))
|
||||||
const Time& runTime = obr_.time();
|
|
||||||
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
|
||||||
|
|
||||||
|
|
||||||
// Do all injection and tracking
|
|
||||||
track();
|
|
||||||
|
|
||||||
|
|
||||||
if (Pstream::parRun())
|
|
||||||
{
|
{
|
||||||
// Append slave tracks to master ones
|
IOWarningInFunction(dict)
|
||||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
<< "Using deprecated entry \"U\"."
|
||||||
|
<< " Please use \"UName\" instead."
|
||||||
|
<< endl;
|
||||||
|
dict.lookup("U") >> UName_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
globalIndex globalTrackIDs(allTracks_.size());
|
if (findIndex(fields_, UName_) == -1)
|
||||||
|
{
|
||||||
|
FatalIOErrorInFunction(dict)
|
||||||
|
<< "Velocity field for tracking " << UName_
|
||||||
|
<< " should be present in the list of fields " << fields_
|
||||||
|
<< exit(FatalIOError);
|
||||||
|
}
|
||||||
|
|
||||||
// Construct a distribution map to pull all to the master.
|
|
||||||
labelListList sendMap(Pstream::nProcs());
|
|
||||||
labelListList recvMap(Pstream::nProcs());
|
|
||||||
|
|
||||||
if (Pstream::master())
|
dict.lookup("trackForward") >> trackForward_;
|
||||||
|
dict.lookup("lifeTime") >> lifeTime_;
|
||||||
|
if (lifeTime_ < 1)
|
||||||
|
{
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Illegal value " << lifeTime_ << " for lifeTime"
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool subCycling = dict.found("nSubCycle");
|
||||||
|
bool fixedLength = dict.found("trackLength");
|
||||||
|
|
||||||
|
if (subCycling && fixedLength)
|
||||||
|
{
|
||||||
|
FatalIOErrorInFunction(dict)
|
||||||
|
<< "Cannot both specify automatic time stepping (through '"
|
||||||
|
<< "nSubCycle' specification) and fixed track length (through '"
|
||||||
|
<< "trackLength')"
|
||||||
|
<< exit(FatalIOError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
nSubCycle_ = 1;
|
||||||
|
if (dict.readIfPresent("nSubCycle", nSubCycle_))
|
||||||
|
{
|
||||||
|
trackLength_ = VGREAT;
|
||||||
|
if (nSubCycle_ < 1)
|
||||||
|
{
|
||||||
|
nSubCycle_ = 1;
|
||||||
|
}
|
||||||
|
Info<< " automatic track length specified through"
|
||||||
|
<< " number of sub cycles : " << nSubCycle_ << nl << endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dict.lookup("trackLength") >> trackLength_;
|
||||||
|
|
||||||
|
Info<< " fixed track length specified : "
|
||||||
|
<< trackLength_ << nl << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
interpolationScheme_ = dict.lookupOrDefault
|
||||||
|
(
|
||||||
|
"interpolationScheme",
|
||||||
|
interpolationCellPoint<scalar>::typeName
|
||||||
|
);
|
||||||
|
|
||||||
|
cloudName_ = dict.lookupOrDefault<word>("cloudName", "streamLine");
|
||||||
|
dict.lookup("seedSampleSet") >> seedSet_;
|
||||||
|
|
||||||
|
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
||||||
|
|
||||||
|
meshSearchPtr_.reset(new meshSearch(mesh));
|
||||||
|
|
||||||
|
const dictionary& coeffsDict = dict.subDict(seedSet_ + "Coeffs");
|
||||||
|
sampledSetPtr_ = sampledSet::New
|
||||||
|
(
|
||||||
|
seedSet_,
|
||||||
|
mesh,
|
||||||
|
meshSearchPtr_(),
|
||||||
|
coeffsDict
|
||||||
|
);
|
||||||
|
coeffsDict.lookup("axis") >> sampledSetAxis_;
|
||||||
|
|
||||||
|
scalarFormatterPtr_ = writer<scalar>::New(dict.lookup("setFormat"));
|
||||||
|
vectorFormatterPtr_ = writer<vector>::New(dict.lookup("setFormat"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::streamLine::execute()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::streamLine::end()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::streamLine::timeSet()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::streamLine::write()
|
||||||
|
{
|
||||||
|
Info<< type() << " " << name_ << " output:" << nl;
|
||||||
|
|
||||||
|
const Time& runTime = obr_.time();
|
||||||
|
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
||||||
|
|
||||||
|
|
||||||
|
// Do all injection and tracking
|
||||||
|
track();
|
||||||
|
|
||||||
|
|
||||||
|
if (Pstream::parRun())
|
||||||
|
{
|
||||||
|
// Append slave tracks to master ones
|
||||||
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
globalIndex globalTrackIDs(allTracks_.size());
|
||||||
|
|
||||||
|
// Construct a distribution map to pull all to the master.
|
||||||
|
labelListList sendMap(Pstream::nProcs());
|
||||||
|
labelListList recvMap(Pstream::nProcs());
|
||||||
|
|
||||||
|
if (Pstream::master())
|
||||||
|
{
|
||||||
|
// Master: receive all. My own first, then consecutive
|
||||||
|
// processors.
|
||||||
|
label trackI = 0;
|
||||||
|
|
||||||
|
forAll(recvMap, proci)
|
||||||
{
|
{
|
||||||
// Master: receive all. My own first, then consecutive
|
labelList& fromProc = recvMap[proci];
|
||||||
// processors.
|
fromProc.setSize(globalTrackIDs.localSize(proci));
|
||||||
label trackI = 0;
|
forAll(fromProc, i)
|
||||||
|
|
||||||
forAll(recvMap, proci)
|
|
||||||
{
|
{
|
||||||
labelList& fromProc = recvMap[proci];
|
fromProc[i] = trackI++;
|
||||||
fromProc.setSize(globalTrackIDs.localSize(proci));
|
|
||||||
forAll(fromProc, i)
|
|
||||||
{
|
|
||||||
fromProc[i] = trackI++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
labelList& toMaster = sendMap[0];
|
labelList& toMaster = sendMap[0];
|
||||||
toMaster.setSize(globalTrackIDs.localSize());
|
toMaster.setSize(globalTrackIDs.localSize());
|
||||||
forAll(toMaster, i)
|
forAll(toMaster, i)
|
||||||
{
|
{
|
||||||
toMaster[i] = i;
|
toMaster[i] = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
const mapDistribute distMap
|
const mapDistribute distMap
|
||||||
(
|
(
|
||||||
globalTrackIDs.size(),
|
globalTrackIDs.size(),
|
||||||
sendMap.xfer(),
|
sendMap.xfer(),
|
||||||
recvMap.xfer()
|
recvMap.xfer()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Distribute the track positions. Note: use scheduled comms
|
// Distribute the track positions. Note: use scheduled comms
|
||||||
// to prevent buffering.
|
// to prevent buffering.
|
||||||
|
mapDistribute::distribute
|
||||||
|
(
|
||||||
|
Pstream::scheduled,
|
||||||
|
distMap.schedule(),
|
||||||
|
distMap.constructSize(),
|
||||||
|
distMap.subMap(),
|
||||||
|
distMap.constructMap(),
|
||||||
|
allTracks_
|
||||||
|
);
|
||||||
|
|
||||||
|
// Distribute the scalars
|
||||||
|
forAll(allScalars_, scalarI)
|
||||||
|
{
|
||||||
mapDistribute::distribute
|
mapDistribute::distribute
|
||||||
(
|
(
|
||||||
Pstream::scheduled,
|
Pstream::scheduled,
|
||||||
@ -579,193 +553,168 @@ void Foam::streamLine::write()
|
|||||||
distMap.constructSize(),
|
distMap.constructSize(),
|
||||||
distMap.subMap(),
|
distMap.subMap(),
|
||||||
distMap.constructMap(),
|
distMap.constructMap(),
|
||||||
allTracks_
|
allScalars_[scalarI]
|
||||||
);
|
);
|
||||||
|
|
||||||
// Distribute the scalars
|
|
||||||
forAll(allScalars_, scalarI)
|
|
||||||
{
|
|
||||||
mapDistribute::distribute
|
|
||||||
(
|
|
||||||
Pstream::scheduled,
|
|
||||||
distMap.schedule(),
|
|
||||||
distMap.constructSize(),
|
|
||||||
distMap.subMap(),
|
|
||||||
distMap.constructMap(),
|
|
||||||
allScalars_[scalarI]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
// Distribute the vectors
|
|
||||||
forAll(allVectors_, vectorI)
|
|
||||||
{
|
|
||||||
mapDistribute::distribute
|
|
||||||
(
|
|
||||||
Pstream::scheduled,
|
|
||||||
distMap.schedule(),
|
|
||||||
distMap.constructSize(),
|
|
||||||
distMap.subMap(),
|
|
||||||
distMap.constructMap(),
|
|
||||||
allVectors_[vectorI]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// Distribute the vectors
|
||||||
|
forAll(allVectors_, vectorI)
|
||||||
|
{
|
||||||
|
mapDistribute::distribute
|
||||||
|
(
|
||||||
|
Pstream::scheduled,
|
||||||
|
distMap.schedule(),
|
||||||
|
distMap.constructSize(),
|
||||||
|
distMap.subMap(),
|
||||||
|
distMap.constructMap(),
|
||||||
|
allVectors_[vectorI]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
label n = 0;
|
label n = 0;
|
||||||
|
forAll(allTracks_, trackI)
|
||||||
|
{
|
||||||
|
n += allTracks_[trackI].size();
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< " Tracks:" << allTracks_.size() << nl
|
||||||
|
<< " Total samples:" << n
|
||||||
|
<< endl;
|
||||||
|
|
||||||
|
|
||||||
|
// Massage into form suitable for writers
|
||||||
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
if (Pstream::master() && allTracks_.size())
|
||||||
|
{
|
||||||
|
// Make output directory
|
||||||
|
|
||||||
|
fileName vtkPath
|
||||||
|
(
|
||||||
|
Pstream::parRun()
|
||||||
|
? runTime.path()/".."/"postProcessing"/"sets"/name()
|
||||||
|
: runTime.path()/"postProcessing"/"sets"/name()
|
||||||
|
);
|
||||||
|
if (mesh.name() != fvMesh::defaultRegion)
|
||||||
|
{
|
||||||
|
vtkPath = vtkPath/mesh.name();
|
||||||
|
}
|
||||||
|
vtkPath = vtkPath/mesh.time().timeName();
|
||||||
|
|
||||||
|
mkDir(vtkPath);
|
||||||
|
|
||||||
|
// Convert track positions
|
||||||
|
|
||||||
|
PtrList<coordSet> tracks(allTracks_.size());
|
||||||
forAll(allTracks_, trackI)
|
forAll(allTracks_, trackI)
|
||||||
{
|
{
|
||||||
n += allTracks_[trackI].size();
|
tracks.set
|
||||||
|
(
|
||||||
|
trackI,
|
||||||
|
new coordSet
|
||||||
|
(
|
||||||
|
"track" + Foam::name(trackI),
|
||||||
|
sampledSetAxis_ //"xyz"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
tracks[trackI].transfer(allTracks_[trackI]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Info<< " Tracks:" << allTracks_.size() << nl
|
// Convert scalar values
|
||||||
<< " Total samples:" << n
|
|
||||||
<< endl;
|
|
||||||
|
|
||||||
|
if (allScalars_.size() > 0)
|
||||||
// Massage into form suitable for writers
|
|
||||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
if (Pstream::master() && allTracks_.size())
|
|
||||||
{
|
{
|
||||||
// Make output directory
|
List<List<scalarField>> scalarValues(allScalars_.size());
|
||||||
|
|
||||||
fileName vtkPath
|
forAll(allScalars_, scalarI)
|
||||||
|
{
|
||||||
|
DynamicList<scalarList>& allTrackVals =
|
||||||
|
allScalars_[scalarI];
|
||||||
|
scalarValues[scalarI].setSize(allTrackVals.size());
|
||||||
|
|
||||||
|
forAll(allTrackVals, trackI)
|
||||||
|
{
|
||||||
|
scalarList& trackVals = allTrackVals[trackI];
|
||||||
|
scalarValues[scalarI][trackI].transfer(trackVals);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileName vtkFile
|
||||||
(
|
(
|
||||||
Pstream::parRun()
|
vtkPath
|
||||||
? runTime.path()/".."/"postProcessing"/"sets"/name()
|
/ scalarFormatterPtr_().getFileName
|
||||||
: runTime.path()/"postProcessing"/"sets"/name()
|
(
|
||||||
|
tracks[0],
|
||||||
|
scalarNames_
|
||||||
|
)
|
||||||
);
|
);
|
||||||
if (mesh.name() != fvMesh::defaultRegion)
|
|
||||||
|
Info<< " Writing data to " << vtkFile.path() << endl;
|
||||||
|
|
||||||
|
scalarFormatterPtr_().write
|
||||||
|
(
|
||||||
|
true, // writeTracks
|
||||||
|
tracks,
|
||||||
|
scalarNames_,
|
||||||
|
scalarValues,
|
||||||
|
OFstream(vtkFile)()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert vector values
|
||||||
|
|
||||||
|
if (allVectors_.size() > 0)
|
||||||
|
{
|
||||||
|
List<List<vectorField>> vectorValues(allVectors_.size());
|
||||||
|
|
||||||
|
forAll(allVectors_, vectorI)
|
||||||
{
|
{
|
||||||
vtkPath = vtkPath/mesh.name();
|
DynamicList<vectorList>& allTrackVals =
|
||||||
}
|
allVectors_[vectorI];
|
||||||
vtkPath = vtkPath/mesh.time().timeName();
|
vectorValues[vectorI].setSize(allTrackVals.size());
|
||||||
|
|
||||||
mkDir(vtkPath);
|
forAll(allTrackVals, trackI)
|
||||||
|
|
||||||
// Convert track positions
|
|
||||||
|
|
||||||
PtrList<coordSet> tracks(allTracks_.size());
|
|
||||||
forAll(allTracks_, trackI)
|
|
||||||
{
|
|
||||||
tracks.set
|
|
||||||
(
|
|
||||||
trackI,
|
|
||||||
new coordSet
|
|
||||||
(
|
|
||||||
"track" + Foam::name(trackI),
|
|
||||||
sampledSetAxis_ //"xyz"
|
|
||||||
)
|
|
||||||
);
|
|
||||||
tracks[trackI].transfer(allTracks_[trackI]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert scalar values
|
|
||||||
|
|
||||||
if (allScalars_.size() > 0)
|
|
||||||
{
|
|
||||||
List<List<scalarField>> scalarValues(allScalars_.size());
|
|
||||||
|
|
||||||
forAll(allScalars_, scalarI)
|
|
||||||
{
|
{
|
||||||
DynamicList<scalarList>& allTrackVals =
|
vectorList& trackVals = allTrackVals[trackI];
|
||||||
allScalars_[scalarI];
|
vectorValues[vectorI][trackI].transfer(trackVals);
|
||||||
scalarValues[scalarI].setSize(allTrackVals.size());
|
|
||||||
|
|
||||||
forAll(allTrackVals, trackI)
|
|
||||||
{
|
|
||||||
scalarList& trackVals = allTrackVals[trackI];
|
|
||||||
scalarValues[scalarI][trackI].transfer(trackVals);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fileName vtkFile
|
|
||||||
(
|
|
||||||
vtkPath
|
|
||||||
/ scalarFormatterPtr_().getFileName
|
|
||||||
(
|
|
||||||
tracks[0],
|
|
||||||
scalarNames_
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
Info<< " Writing data to " << vtkFile.path() << endl;
|
|
||||||
|
|
||||||
scalarFormatterPtr_().write
|
|
||||||
(
|
|
||||||
true, // writeTracks
|
|
||||||
tracks,
|
|
||||||
scalarNames_,
|
|
||||||
scalarValues,
|
|
||||||
OFstream(vtkFile)()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert vector values
|
fileName vtkFile
|
||||||
|
(
|
||||||
if (allVectors_.size() > 0)
|
vtkPath
|
||||||
{
|
/ vectorFormatterPtr_().getFileName
|
||||||
List<List<vectorField>> vectorValues(allVectors_.size());
|
|
||||||
|
|
||||||
forAll(allVectors_, vectorI)
|
|
||||||
{
|
|
||||||
DynamicList<vectorList>& allTrackVals =
|
|
||||||
allVectors_[vectorI];
|
|
||||||
vectorValues[vectorI].setSize(allTrackVals.size());
|
|
||||||
|
|
||||||
forAll(allTrackVals, trackI)
|
|
||||||
{
|
|
||||||
vectorList& trackVals = allTrackVals[trackI];
|
|
||||||
vectorValues[vectorI][trackI].transfer(trackVals);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fileName vtkFile
|
|
||||||
(
|
(
|
||||||
vtkPath
|
tracks[0],
|
||||||
/ vectorFormatterPtr_().getFileName
|
vectorNames_
|
||||||
(
|
)
|
||||||
tracks[0],
|
);
|
||||||
vectorNames_
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
//Info<< " Writing vector data to " << vtkFile << endl;
|
vectorFormatterPtr_().write
|
||||||
|
(
|
||||||
vectorFormatterPtr_().write
|
true, // writeTracks
|
||||||
(
|
tracks,
|
||||||
true, // writeTracks
|
vectorNames_,
|
||||||
tracks,
|
vectorValues,
|
||||||
vectorNames_,
|
OFstream(vtkFile)()
|
||||||
vectorValues,
|
);
|
||||||
OFstream(vtkFile)()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::streamLine::updateMesh(const mapPolyMesh&)
|
void Foam::functionObjects::streamLine::updateMesh(const mapPolyMesh&)
|
||||||
{
|
{
|
||||||
read(dict_);
|
read(dict_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::streamLine::movePoints(const polyMesh&)
|
void Foam::functionObjects::streamLine::movePoints(const polyMesh&)
|
||||||
{
|
{
|
||||||
// Moving mesh affects the search tree
|
// Moving mesh affects the search tree
|
||||||
read(dict_);
|
read(dict_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//void Foam::streamLine::readUpdate(const polyMesh::readUpdateState state)
|
|
||||||
//{
|
|
||||||
// if (state != UNCHANGED)
|
|
||||||
// {
|
|
||||||
// read(dict_);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::streamLine
|
Foam::functionObjects::streamLine
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFieldFunctionObjects
|
grpFieldFunctionObjects
|
||||||
@ -125,6 +125,9 @@ class mapPolyMesh;
|
|||||||
class meshSearch;
|
class meshSearch;
|
||||||
class sampledSet;
|
class sampledSet;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class streamLine Declaration
|
Class streamLine Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -145,9 +148,6 @@ class streamLine
|
|||||||
//- Load fields from files (not from objectRegistry)
|
//- Load fields from files (not from objectRegistry)
|
||||||
bool loadFromFiles_;
|
bool loadFromFiles_;
|
||||||
|
|
||||||
//- On/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
//- List of fields to sample
|
//- List of fields to sample
|
||||||
wordList fields_;
|
wordList fields_;
|
||||||
|
|
||||||
@ -182,7 +182,6 @@ class streamLine
|
|||||||
wordList vectorNames_;
|
wordList vectorNames_;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Demand driven
|
// Demand driven
|
||||||
|
|
||||||
//- Mesh searching enigne
|
//- Mesh searching enigne
|
||||||
@ -244,6 +243,16 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~streamLine();
|
virtual ~streamLine();
|
||||||
@ -277,14 +286,12 @@ public:
|
|||||||
|
|
||||||
//- Update for mesh point-motion
|
//- Update for mesh point-motion
|
||||||
virtual void movePoints(const polyMesh&);
|
virtual void movePoints(const polyMesh&);
|
||||||
|
|
||||||
////- Update for changes of mesh due to readUpdate
|
|
||||||
//virtual void readUpdate(const polyMesh::readUpdateState state);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,7 +43,7 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<streamLine>
|
typedef OutputFilterFunctionObject<functionObjects::streamLine>
|
||||||
streamLineFunctionObject;
|
streamLineFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -28,14 +28,17 @@ License
|
|||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace functionObjects
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(surfaceInterpolateFields, 0);
|
defineTypeNameAndDebug(surfaceInterpolateFields, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::surfaceInterpolateFields::surfaceInterpolateFields
|
Foam::functionObjects::surfaceInterpolateFields::surfaceInterpolateFields
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -45,109 +48,99 @@ Foam::surfaceInterpolateFields::surfaceInterpolateFields
|
|||||||
:
|
:
|
||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr),
|
||||||
active_(true),
|
|
||||||
fieldSet_()
|
fieldSet_()
|
||||||
{
|
{
|
||||||
// Check if the available mesh is an fvMesh otherise deactivate
|
read(dict);
|
||||||
if (isA<fvMesh>(obr_))
|
}
|
||||||
{
|
|
||||||
read(dict);
|
|
||||||
}
|
bool Foam::functionObjects::surfaceInterpolateFields::viable
|
||||||
else
|
(
|
||||||
{
|
const word& name,
|
||||||
active_ = false;
|
const objectRegistry& obr,
|
||||||
WarningInFunction
|
const dictionary& dict,
|
||||||
<< "No fvMesh available, deactivating " << name_
|
const bool loadFromFiles
|
||||||
<< endl;
|
)
|
||||||
}
|
{
|
||||||
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
|
return isA<fvMesh>(obr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::surfaceInterpolateFields::~surfaceInterpolateFields()
|
Foam::functionObjects::surfaceInterpolateFields::~surfaceInterpolateFields()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::surfaceInterpolateFields::read(const dictionary& dict)
|
void Foam::functionObjects::surfaceInterpolateFields::read
|
||||||
|
(
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
{
|
{
|
||||||
if (active_)
|
dict.lookup("fields") >> fieldSet_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::surfaceInterpolateFields::execute()
|
||||||
|
{
|
||||||
|
Info<< type() << " " << name_ << " output:" << nl;
|
||||||
|
|
||||||
|
// Clear out any previously loaded fields
|
||||||
|
ssf_.clear();
|
||||||
|
svf_.clear();
|
||||||
|
sSpheretf_.clear();
|
||||||
|
sSymmtf_.clear();
|
||||||
|
stf_.clear();
|
||||||
|
|
||||||
|
interpolateFields<scalar>(ssf_);
|
||||||
|
interpolateFields<vector>(svf_);
|
||||||
|
interpolateFields<sphericalTensor>(sSpheretf_);
|
||||||
|
interpolateFields<symmTensor>(sSymmtf_);
|
||||||
|
interpolateFields<tensor>(stf_);
|
||||||
|
|
||||||
|
Info<< endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::surfaceInterpolateFields::end()
|
||||||
|
{
|
||||||
|
execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::surfaceInterpolateFields::timeSet()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::functionObjects::surfaceInterpolateFields::write()
|
||||||
|
{
|
||||||
|
Info<< type() << " " << name_ << " output:" << nl;
|
||||||
|
|
||||||
|
Info<< " Writing interpolated surface fields to "
|
||||||
|
<< obr_.time().timeName() << endl;
|
||||||
|
|
||||||
|
forAll(ssf_, i)
|
||||||
{
|
{
|
||||||
dict.lookup("fields") >> fieldSet_;
|
ssf_[i].write();
|
||||||
}
|
}
|
||||||
}
|
forAll(svf_, i)
|
||||||
|
|
||||||
|
|
||||||
void Foam::surfaceInterpolateFields::execute()
|
|
||||||
{
|
|
||||||
if (active_)
|
|
||||||
{
|
{
|
||||||
Info<< type() << " " << name_ << " output:" << nl;
|
svf_[i].write();
|
||||||
|
|
||||||
// Clear out any previously loaded fields
|
|
||||||
ssf_.clear();
|
|
||||||
svf_.clear();
|
|
||||||
sSpheretf_.clear();
|
|
||||||
sSymmtf_.clear();
|
|
||||||
stf_.clear();
|
|
||||||
|
|
||||||
interpolateFields<scalar>(ssf_);
|
|
||||||
interpolateFields<vector>(svf_);
|
|
||||||
interpolateFields<sphericalTensor>(sSpheretf_);
|
|
||||||
interpolateFields<symmTensor>(sSymmtf_);
|
|
||||||
interpolateFields<tensor>(stf_);
|
|
||||||
|
|
||||||
Info<< endl;
|
|
||||||
}
|
}
|
||||||
}
|
forAll(sSpheretf_, i)
|
||||||
|
|
||||||
|
|
||||||
void Foam::surfaceInterpolateFields::end()
|
|
||||||
{
|
|
||||||
if (active_)
|
|
||||||
{
|
{
|
||||||
execute();
|
sSpheretf_[i].write();
|
||||||
}
|
}
|
||||||
}
|
forAll(sSymmtf_, i)
|
||||||
|
|
||||||
|
|
||||||
void Foam::surfaceInterpolateFields::timeSet()
|
|
||||||
{
|
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::surfaceInterpolateFields::write()
|
|
||||||
{
|
|
||||||
if (active_)
|
|
||||||
{
|
{
|
||||||
Info<< type() << " " << name_ << " output:" << nl;
|
sSymmtf_[i].write();
|
||||||
|
}
|
||||||
Info<< " Writing interpolated surface fields to "
|
forAll(stf_, i)
|
||||||
<< obr_.time().timeName() << endl;
|
{
|
||||||
|
stf_[i].write();
|
||||||
forAll(ssf_, i)
|
|
||||||
{
|
|
||||||
ssf_[i].write();
|
|
||||||
}
|
|
||||||
forAll(svf_, i)
|
|
||||||
{
|
|
||||||
svf_[i].write();
|
|
||||||
}
|
|
||||||
forAll(sSpheretf_, i)
|
|
||||||
{
|
|
||||||
sSpheretf_[i].write();
|
|
||||||
}
|
|
||||||
forAll(sSymmtf_, i)
|
|
||||||
{
|
|
||||||
sSymmtf_[i].write();
|
|
||||||
}
|
|
||||||
forAll(stf_, i)
|
|
||||||
{
|
|
||||||
stf_[i].write();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -84,6 +84,9 @@ class objectRegistry;
|
|||||||
class dictionary;
|
class dictionary;
|
||||||
class mapPolyMesh;
|
class mapPolyMesh;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class surfaceInterpolateFields Declaration
|
Class surfaceInterpolateFields Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -99,9 +102,6 @@ protected:
|
|||||||
|
|
||||||
const objectRegistry& obr_;
|
const objectRegistry& obr_;
|
||||||
|
|
||||||
//- on/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
//- Fields to process
|
//- Fields to process
|
||||||
//wordList fieldSet_;
|
//wordList fieldSet_;
|
||||||
List<Tuple2<word, word>> fieldSet_;
|
List<Tuple2<word, word>> fieldSet_;
|
||||||
@ -152,6 +152,16 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~surfaceInterpolateFields();
|
virtual ~surfaceInterpolateFields();
|
||||||
@ -192,6 +202,7 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,8 +43,10 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<surfaceInterpolateFields>
|
typedef OutputFilterFunctionObject
|
||||||
surfaceInterpolateFieldsFunctionObject;
|
<
|
||||||
|
functionObjects::surfaceInterpolateFields
|
||||||
|
> surfaceInterpolateFieldsFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -30,7 +30,7 @@ License
|
|||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::surfaceInterpolateFields::interpolateFields
|
void Foam::functionObjects::surfaceInterpolateFields::interpolateFields
|
||||||
(
|
(
|
||||||
PtrList<GeometricField<Type, fvsPatchField, surfaceMesh>>& sflds
|
PtrList<GeometricField<Type, fvsPatchField, surfaceMesh>>& sflds
|
||||||
) const
|
) const
|
||||||
|
|||||||
@ -42,14 +42,17 @@ License
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(wallBoundedStreamLine, 0);
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(wallBoundedStreamLine, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::autoPtr<Foam::indirectPrimitivePatch>
|
Foam::autoPtr<Foam::indirectPrimitivePatch>
|
||||||
Foam::wallBoundedStreamLine::wallPatch() const
|
Foam::functionObjects::wallBoundedStreamLine::wallPatch() const
|
||||||
{
|
{
|
||||||
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
||||||
|
|
||||||
@ -99,7 +102,7 @@ Foam::wallBoundedStreamLine::wallPatch() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::tetIndices Foam::wallBoundedStreamLine::findNearestTet
|
Foam::tetIndices Foam::functionObjects::wallBoundedStreamLine::findNearestTet
|
||||||
(
|
(
|
||||||
const PackedBoolList& isWallPatch,
|
const PackedBoolList& isWallPatch,
|
||||||
const point& seedPt,
|
const point& seedPt,
|
||||||
@ -156,7 +159,7 @@ Foam::tetIndices Foam::wallBoundedStreamLine::findNearestTet
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::wallBoundedStreamLine::track()
|
void Foam::functionObjects::wallBoundedStreamLine::track()
|
||||||
{
|
{
|
||||||
const Time& runTime = obr_.time();
|
const Time& runTime = obr_.time();
|
||||||
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
||||||
@ -432,7 +435,7 @@ void Foam::wallBoundedStreamLine::track()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::wallBoundedStreamLine::wallBoundedStreamLine
|
Foam::functionObjects::wallBoundedStreamLine::wallBoundedStreamLine
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -443,180 +446,175 @@ Foam::wallBoundedStreamLine::wallBoundedStreamLine
|
|||||||
dict_(dict),
|
dict_(dict),
|
||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr),
|
||||||
loadFromFiles_(loadFromFiles),
|
loadFromFiles_(loadFromFiles)
|
||||||
active_(true)
|
|
||||||
{
|
{
|
||||||
// Only active if a fvMesh is available
|
read(dict_);
|
||||||
if (isA<fvMesh>(obr_))
|
}
|
||||||
{
|
|
||||||
read(dict_);
|
|
||||||
}
|
bool Foam::functionObjects::wallBoundedStreamLine::viable
|
||||||
else
|
(
|
||||||
{
|
const word& name,
|
||||||
active_ = false;
|
const objectRegistry& obr,
|
||||||
WarningInFunction
|
const dictionary& dict,
|
||||||
<< "No fvMesh available, deactivating " << name_
|
const bool loadFromFiles
|
||||||
<< nl << endl;
|
)
|
||||||
}
|
{
|
||||||
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
|
return isA<fvMesh>(obr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::wallBoundedStreamLine::~wallBoundedStreamLine()
|
Foam::functionObjects::wallBoundedStreamLine::~wallBoundedStreamLine()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::wallBoundedStreamLine::read(const dictionary& dict)
|
void Foam::functionObjects::wallBoundedStreamLine::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (active_)
|
//dict_ = dict;
|
||||||
|
dict.lookup("fields") >> fields_;
|
||||||
|
if (dict.found("UName"))
|
||||||
{
|
{
|
||||||
//dict_ = dict;
|
dict.lookup("UName") >> UName_;
|
||||||
dict.lookup("fields") >> fields_;
|
}
|
||||||
if (dict.found("UName"))
|
else
|
||||||
|
{
|
||||||
|
UName_ = "U";
|
||||||
|
if (dict.found("U"))
|
||||||
{
|
{
|
||||||
dict.lookup("UName") >> UName_;
|
IOWarningInFunction
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UName_ = "U";
|
|
||||||
if (dict.found("U"))
|
|
||||||
{
|
|
||||||
IOWarningInFunction
|
|
||||||
(
|
|
||||||
dict
|
|
||||||
) << "Using deprecated entry \"U\"."
|
|
||||||
<< " Please use \"UName\" instead."
|
|
||||||
<< endl;
|
|
||||||
dict.lookup("U") >> UName_;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (findIndex(fields_, UName_) == -1)
|
|
||||||
{
|
|
||||||
FatalIOErrorInFunction
|
|
||||||
(
|
(
|
||||||
dict
|
dict
|
||||||
) << "Velocity field for tracking " << UName_
|
) << "Using deprecated entry \"U\"."
|
||||||
<< " should be present in the list of fields " << fields_
|
<< " Please use \"UName\" instead."
|
||||||
<< exit(FatalIOError);
|
<< endl;
|
||||||
|
dict.lookup("U") >> UName_;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (findIndex(fields_, UName_) == -1)
|
||||||
dict.lookup("trackForward") >> trackForward_;
|
{
|
||||||
dict.lookup("lifeTime") >> lifeTime_;
|
FatalIOErrorInFunction
|
||||||
if (lifeTime_ < 1)
|
|
||||||
{
|
|
||||||
FatalErrorInFunction
|
|
||||||
<< "Illegal value " << lifeTime_ << " for lifeTime"
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
trackLength_ = VGREAT;
|
|
||||||
if (dict.found("trackLength"))
|
|
||||||
{
|
|
||||||
dict.lookup("trackLength") >> trackLength_;
|
|
||||||
|
|
||||||
Info<< type() << " : fixed track length specified : "
|
|
||||||
<< trackLength_ << nl << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
interpolationScheme_ = dict.lookupOrDefault
|
|
||||||
(
|
(
|
||||||
"interpolationScheme",
|
dict
|
||||||
interpolationCellPoint<scalar>::typeName
|
) << "Velocity field for tracking " << UName_
|
||||||
);
|
<< " should be present in the list of fields " << fields_
|
||||||
|
<< exit(FatalIOError);
|
||||||
|
}
|
||||||
|
|
||||||
//Info<< typeName << " using interpolation " << interpolationScheme_
|
|
||||||
// << endl;
|
|
||||||
|
|
||||||
cloudName_ = dict.lookupOrDefault<word>
|
dict.lookup("trackForward") >> trackForward_;
|
||||||
|
dict.lookup("lifeTime") >> lifeTime_;
|
||||||
|
if (lifeTime_ < 1)
|
||||||
|
{
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Illegal value " << lifeTime_ << " for lifeTime"
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
trackLength_ = VGREAT;
|
||||||
|
if (dict.found("trackLength"))
|
||||||
|
{
|
||||||
|
dict.lookup("trackLength") >> trackLength_;
|
||||||
|
|
||||||
|
Info<< type() << " : fixed track length specified : "
|
||||||
|
<< trackLength_ << nl << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
interpolationScheme_ = dict.lookupOrDefault
|
||||||
|
(
|
||||||
|
"interpolationScheme",
|
||||||
|
interpolationCellPoint<scalar>::typeName
|
||||||
|
);
|
||||||
|
|
||||||
|
cloudName_ = dict.lookupOrDefault<word>
|
||||||
|
(
|
||||||
|
"cloudName",
|
||||||
|
"wallBoundedStreamLine"
|
||||||
|
);
|
||||||
|
dict.lookup("seedSampleSet") >> seedSet_;
|
||||||
|
|
||||||
|
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
||||||
|
|
||||||
|
const dictionary& coeffsDict = dict.subDict(seedSet_ + "Coeffs");
|
||||||
|
|
||||||
|
sampledSetPtr_ = sampledSet::New
|
||||||
|
(
|
||||||
|
seedSet_,
|
||||||
|
mesh,
|
||||||
|
meshSearchMeshObject::New(mesh),
|
||||||
|
coeffsDict
|
||||||
|
);
|
||||||
|
coeffsDict.lookup("axis") >> sampledSetAxis_;
|
||||||
|
|
||||||
|
scalarFormatterPtr_ = writer<scalar>::New(dict.lookup("setFormat"));
|
||||||
|
vectorFormatterPtr_ = writer<vector>::New(dict.lookup("setFormat"));
|
||||||
|
|
||||||
|
|
||||||
|
// Make sure that the mesh is trackable
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
// 1. positive volume decomposition tets
|
||||||
|
faceSet faces(mesh, "lowQualityTetFaces", mesh.nFaces()/100+1);
|
||||||
|
if
|
||||||
(
|
(
|
||||||
"cloudName",
|
polyMeshTetDecomposition::checkFaceTets
|
||||||
"wallBoundedStreamLine"
|
|
||||||
);
|
|
||||||
dict.lookup("seedSampleSet") >> seedSet_;
|
|
||||||
|
|
||||||
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
|
||||||
|
|
||||||
const dictionary& coeffsDict = dict.subDict(seedSet_ + "Coeffs");
|
|
||||||
|
|
||||||
sampledSetPtr_ = sampledSet::New
|
|
||||||
(
|
|
||||||
seedSet_,
|
|
||||||
mesh,
|
|
||||||
meshSearchMeshObject::New(mesh),
|
|
||||||
coeffsDict
|
|
||||||
);
|
|
||||||
coeffsDict.lookup("axis") >> sampledSetAxis_;
|
|
||||||
|
|
||||||
scalarFormatterPtr_ = writer<scalar>::New(dict.lookup("setFormat"));
|
|
||||||
vectorFormatterPtr_ = writer<vector>::New(dict.lookup("setFormat"));
|
|
||||||
|
|
||||||
|
|
||||||
// Make sure that the mesh is trackable
|
|
||||||
if (debug)
|
|
||||||
{
|
|
||||||
// 1. positive volume decomposition tets
|
|
||||||
faceSet faces(mesh, "lowQualityTetFaces", mesh.nFaces()/100+1);
|
|
||||||
if
|
|
||||||
(
|
(
|
||||||
polyMeshTetDecomposition::checkFaceTets
|
mesh,
|
||||||
(
|
polyMeshTetDecomposition::minTetQuality,
|
||||||
mesh,
|
true,
|
||||||
polyMeshTetDecomposition::minTetQuality,
|
&faces
|
||||||
true,
|
|
||||||
&faces
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
label nFaces = returnReduce(faces.size(), sumOp<label>());
|
||||||
|
|
||||||
|
WarningInFunction
|
||||||
|
<< "Found " << nFaces
|
||||||
|
<<" faces with low quality or negative volume "
|
||||||
|
<< "decomposition tets. Writing to faceSet " << faces.name()
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. all edges on a cell having two faces
|
||||||
|
EdgeMap<label> numFacesPerEdge;
|
||||||
|
forAll(mesh.cells(), celli)
|
||||||
|
{
|
||||||
|
const cell& cFaces = mesh.cells()[celli];
|
||||||
|
|
||||||
|
numFacesPerEdge.clear();
|
||||||
|
|
||||||
|
forAll(cFaces, cFacei)
|
||||||
{
|
{
|
||||||
label nFaces = returnReduce(faces.size(), sumOp<label>());
|
label facei = cFaces[cFacei];
|
||||||
|
const face& f = mesh.faces()[facei];
|
||||||
WarningInFunction
|
forAll(f, fp)
|
||||||
<< "Found " << nFaces
|
|
||||||
<<" faces with low quality or negative volume "
|
|
||||||
<< "decomposition tets. Writing to faceSet " << faces.name()
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. all edges on a cell having two faces
|
|
||||||
EdgeMap<label> numFacesPerEdge;
|
|
||||||
forAll(mesh.cells(), celli)
|
|
||||||
{
|
|
||||||
const cell& cFaces = mesh.cells()[celli];
|
|
||||||
|
|
||||||
numFacesPerEdge.clear();
|
|
||||||
|
|
||||||
forAll(cFaces, cFacei)
|
|
||||||
{
|
{
|
||||||
label facei = cFaces[cFacei];
|
const edge e(f[fp], f.nextLabel(fp));
|
||||||
const face& f = mesh.faces()[facei];
|
EdgeMap<label>::iterator eFnd =
|
||||||
forAll(f, fp)
|
numFacesPerEdge.find(e);
|
||||||
|
if (eFnd != numFacesPerEdge.end())
|
||||||
{
|
{
|
||||||
const edge e(f[fp], f.nextLabel(fp));
|
eFnd()++;
|
||||||
EdgeMap<label>::iterator eFnd =
|
}
|
||||||
numFacesPerEdge.find(e);
|
else
|
||||||
if (eFnd != numFacesPerEdge.end())
|
{
|
||||||
{
|
numFacesPerEdge.insert(e, 1);
|
||||||
eFnd()++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
numFacesPerEdge.insert(e, 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
forAllConstIter(EdgeMap<label>, numFacesPerEdge, iter)
|
forAllConstIter(EdgeMap<label>, numFacesPerEdge, iter)
|
||||||
|
{
|
||||||
|
if (iter() != 2)
|
||||||
{
|
{
|
||||||
if (iter() != 2)
|
FatalErrorInFunction
|
||||||
{
|
<< "problem cell:" << celli
|
||||||
FatalErrorInFunction
|
<< abort(FatalError);
|
||||||
<< "problem cell:" << celli
|
|
||||||
<< abort(FatalError);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -624,75 +622,86 @@ void Foam::wallBoundedStreamLine::read(const dictionary& dict)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::wallBoundedStreamLine::execute()
|
void Foam::functionObjects::wallBoundedStreamLine::execute()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
void Foam::wallBoundedStreamLine::end()
|
void Foam::functionObjects::wallBoundedStreamLine::end()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
void Foam::wallBoundedStreamLine::timeSet()
|
void Foam::functionObjects::wallBoundedStreamLine::timeSet()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
void Foam::wallBoundedStreamLine::write()
|
void Foam::functionObjects::wallBoundedStreamLine::write()
|
||||||
{
|
{
|
||||||
if (active_)
|
const Time& runTime = obr_.time();
|
||||||
|
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
||||||
|
|
||||||
|
|
||||||
|
// Do all injection and tracking
|
||||||
|
track();
|
||||||
|
|
||||||
|
|
||||||
|
if (Pstream::parRun())
|
||||||
{
|
{
|
||||||
const Time& runTime = obr_.time();
|
// Append slave tracks to master ones
|
||||||
const fvMesh& mesh = dynamic_cast<const fvMesh&>(obr_);
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
globalIndex globalTrackIDs(allTracks_.size());
|
||||||
|
|
||||||
// Do all injection and tracking
|
// Construct a distribution map to pull all to the master.
|
||||||
track();
|
labelListList sendMap(Pstream::nProcs());
|
||||||
|
labelListList recvMap(Pstream::nProcs());
|
||||||
|
|
||||||
|
if (Pstream::master())
|
||||||
if (Pstream::parRun())
|
|
||||||
{
|
{
|
||||||
// Append slave tracks to master ones
|
// Master: receive all. My own first, then consecutive
|
||||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
// processors.
|
||||||
|
label trackI = 0;
|
||||||
|
|
||||||
globalIndex globalTrackIDs(allTracks_.size());
|
forAll(recvMap, proci)
|
||||||
|
|
||||||
// Construct a distribution map to pull all to the master.
|
|
||||||
labelListList sendMap(Pstream::nProcs());
|
|
||||||
labelListList recvMap(Pstream::nProcs());
|
|
||||||
|
|
||||||
if (Pstream::master())
|
|
||||||
{
|
{
|
||||||
// Master: receive all. My own first, then consecutive
|
labelList& fromProc = recvMap[proci];
|
||||||
// processors.
|
fromProc.setSize(globalTrackIDs.localSize(proci));
|
||||||
label trackI = 0;
|
forAll(fromProc, i)
|
||||||
|
|
||||||
forAll(recvMap, proci)
|
|
||||||
{
|
{
|
||||||
labelList& fromProc = recvMap[proci];
|
fromProc[i] = trackI++;
|
||||||
fromProc.setSize(globalTrackIDs.localSize(proci));
|
|
||||||
forAll(fromProc, i)
|
|
||||||
{
|
|
||||||
fromProc[i] = trackI++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
labelList& toMaster = sendMap[0];
|
labelList& toMaster = sendMap[0];
|
||||||
toMaster.setSize(globalTrackIDs.localSize());
|
toMaster.setSize(globalTrackIDs.localSize());
|
||||||
forAll(toMaster, i)
|
forAll(toMaster, i)
|
||||||
{
|
{
|
||||||
toMaster[i] = i;
|
toMaster[i] = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
const mapDistribute distMap
|
const mapDistribute distMap
|
||||||
(
|
(
|
||||||
globalTrackIDs.size(),
|
globalTrackIDs.size(),
|
||||||
sendMap.xfer(),
|
sendMap.xfer(),
|
||||||
recvMap.xfer()
|
recvMap.xfer()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Distribute the track positions. Note: use scheduled comms
|
// Distribute the track positions. Note: use scheduled comms
|
||||||
// to prevent buffering.
|
// to prevent buffering.
|
||||||
|
mapDistribute::distribute
|
||||||
|
(
|
||||||
|
Pstream::scheduled,
|
||||||
|
distMap.schedule(),
|
||||||
|
distMap.constructSize(),
|
||||||
|
distMap.subMap(),
|
||||||
|
distMap.constructMap(),
|
||||||
|
allTracks_
|
||||||
|
);
|
||||||
|
|
||||||
|
// Distribute the scalars
|
||||||
|
forAll(allScalars_, scalarI)
|
||||||
|
{
|
||||||
mapDistribute::distribute
|
mapDistribute::distribute
|
||||||
(
|
(
|
||||||
Pstream::scheduled,
|
Pstream::scheduled,
|
||||||
@ -700,193 +709,170 @@ void Foam::wallBoundedStreamLine::write()
|
|||||||
distMap.constructSize(),
|
distMap.constructSize(),
|
||||||
distMap.subMap(),
|
distMap.subMap(),
|
||||||
distMap.constructMap(),
|
distMap.constructMap(),
|
||||||
allTracks_
|
allScalars_[scalarI]
|
||||||
);
|
);
|
||||||
|
|
||||||
// Distribute the scalars
|
|
||||||
forAll(allScalars_, scalarI)
|
|
||||||
{
|
|
||||||
mapDistribute::distribute
|
|
||||||
(
|
|
||||||
Pstream::scheduled,
|
|
||||||
distMap.schedule(),
|
|
||||||
distMap.constructSize(),
|
|
||||||
distMap.subMap(),
|
|
||||||
distMap.constructMap(),
|
|
||||||
allScalars_[scalarI]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
// Distribute the vectors
|
|
||||||
forAll(allVectors_, vectorI)
|
|
||||||
{
|
|
||||||
mapDistribute::distribute
|
|
||||||
(
|
|
||||||
Pstream::scheduled,
|
|
||||||
distMap.schedule(),
|
|
||||||
distMap.constructSize(),
|
|
||||||
distMap.subMap(),
|
|
||||||
distMap.constructMap(),
|
|
||||||
allVectors_[vectorI]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// Distribute the vectors
|
||||||
|
forAll(allVectors_, vectorI)
|
||||||
|
{
|
||||||
|
mapDistribute::distribute
|
||||||
|
(
|
||||||
|
Pstream::scheduled,
|
||||||
|
distMap.schedule(),
|
||||||
|
distMap.constructSize(),
|
||||||
|
distMap.subMap(),
|
||||||
|
distMap.constructMap(),
|
||||||
|
allVectors_[vectorI]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
label n = 0;
|
label n = 0;
|
||||||
|
forAll(allTracks_, trackI)
|
||||||
|
{
|
||||||
|
n += allTracks_[trackI].size();
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< " Tracks:" << allTracks_.size() << nl
|
||||||
|
<< " Total samples:" << n << endl;
|
||||||
|
|
||||||
|
|
||||||
|
// Massage into form suitable for writers
|
||||||
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
if (Pstream::master() && allTracks_.size())
|
||||||
|
{
|
||||||
|
// Make output directory
|
||||||
|
|
||||||
|
fileName vtkPath
|
||||||
|
(
|
||||||
|
Pstream::parRun()
|
||||||
|
? runTime.path()/".."/"postProcessing"/"sets"/name()
|
||||||
|
: runTime.path()/"postProcessing"/"sets"/name()
|
||||||
|
);
|
||||||
|
if (mesh.name() != fvMesh::defaultRegion)
|
||||||
|
{
|
||||||
|
vtkPath = vtkPath/mesh.name();
|
||||||
|
}
|
||||||
|
vtkPath = vtkPath/mesh.time().timeName();
|
||||||
|
|
||||||
|
mkDir(vtkPath);
|
||||||
|
|
||||||
|
// Convert track positions
|
||||||
|
|
||||||
|
PtrList<coordSet> tracks(allTracks_.size());
|
||||||
forAll(allTracks_, trackI)
|
forAll(allTracks_, trackI)
|
||||||
{
|
{
|
||||||
n += allTracks_[trackI].size();
|
tracks.set
|
||||||
|
(
|
||||||
|
trackI,
|
||||||
|
new coordSet
|
||||||
|
(
|
||||||
|
"track" + Foam::name(trackI),
|
||||||
|
sampledSetAxis_ //"xyz"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
tracks[trackI].transfer(allTracks_[trackI]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Info<< " Tracks:" << allTracks_.size() << nl
|
// Convert scalar values
|
||||||
<< " Total samples:" << n << endl;
|
|
||||||
|
|
||||||
|
if (allScalars_.size() > 0)
|
||||||
// Massage into form suitable for writers
|
|
||||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
if (Pstream::master() && allTracks_.size())
|
|
||||||
{
|
{
|
||||||
// Make output directory
|
List<List<scalarField>> scalarValues(allScalars_.size());
|
||||||
|
|
||||||
fileName vtkPath
|
forAll(allScalars_, scalarI)
|
||||||
|
{
|
||||||
|
DynamicList<scalarList>& allTrackVals =
|
||||||
|
allScalars_[scalarI];
|
||||||
|
scalarValues[scalarI].setSize(allTrackVals.size());
|
||||||
|
|
||||||
|
forAll(allTrackVals, trackI)
|
||||||
|
{
|
||||||
|
scalarList& trackVals = allTrackVals[trackI];
|
||||||
|
scalarValues[scalarI][trackI].transfer(trackVals);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileName vtkFile
|
||||||
(
|
(
|
||||||
Pstream::parRun()
|
vtkPath
|
||||||
? runTime.path()/".."/"postProcessing"/"sets"/name()
|
/ scalarFormatterPtr_().getFileName
|
||||||
: runTime.path()/"postProcessing"/"sets"/name()
|
(
|
||||||
|
tracks[0],
|
||||||
|
scalarNames_
|
||||||
|
)
|
||||||
);
|
);
|
||||||
if (mesh.name() != fvMesh::defaultRegion)
|
|
||||||
|
Info<< "Writing data to " << vtkFile.path() << endl;
|
||||||
|
|
||||||
|
scalarFormatterPtr_().write
|
||||||
|
(
|
||||||
|
true, // writeTracks
|
||||||
|
tracks,
|
||||||
|
scalarNames_,
|
||||||
|
scalarValues,
|
||||||
|
OFstream(vtkFile)()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert vector values
|
||||||
|
|
||||||
|
if (allVectors_.size() > 0)
|
||||||
|
{
|
||||||
|
List<List<vectorField>> vectorValues(allVectors_.size());
|
||||||
|
|
||||||
|
forAll(allVectors_, vectorI)
|
||||||
{
|
{
|
||||||
vtkPath = vtkPath/mesh.name();
|
DynamicList<vectorList>& allTrackVals =
|
||||||
}
|
allVectors_[vectorI];
|
||||||
vtkPath = vtkPath/mesh.time().timeName();
|
vectorValues[vectorI].setSize(allTrackVals.size());
|
||||||
|
|
||||||
mkDir(vtkPath);
|
forAll(allTrackVals, trackI)
|
||||||
|
|
||||||
// Convert track positions
|
|
||||||
|
|
||||||
PtrList<coordSet> tracks(allTracks_.size());
|
|
||||||
forAll(allTracks_, trackI)
|
|
||||||
{
|
|
||||||
tracks.set
|
|
||||||
(
|
|
||||||
trackI,
|
|
||||||
new coordSet
|
|
||||||
(
|
|
||||||
"track" + Foam::name(trackI),
|
|
||||||
sampledSetAxis_ //"xyz"
|
|
||||||
)
|
|
||||||
);
|
|
||||||
tracks[trackI].transfer(allTracks_[trackI]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert scalar values
|
|
||||||
|
|
||||||
if (allScalars_.size() > 0)
|
|
||||||
{
|
|
||||||
List<List<scalarField>> scalarValues(allScalars_.size());
|
|
||||||
|
|
||||||
forAll(allScalars_, scalarI)
|
|
||||||
{
|
{
|
||||||
DynamicList<scalarList>& allTrackVals =
|
vectorList& trackVals = allTrackVals[trackI];
|
||||||
allScalars_[scalarI];
|
vectorValues[vectorI][trackI].transfer(trackVals);
|
||||||
scalarValues[scalarI].setSize(allTrackVals.size());
|
|
||||||
|
|
||||||
forAll(allTrackVals, trackI)
|
|
||||||
{
|
|
||||||
scalarList& trackVals = allTrackVals[trackI];
|
|
||||||
scalarValues[scalarI][trackI].transfer(trackVals);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fileName vtkFile
|
|
||||||
(
|
|
||||||
vtkPath
|
|
||||||
/ scalarFormatterPtr_().getFileName
|
|
||||||
(
|
|
||||||
tracks[0],
|
|
||||||
scalarNames_
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
Info<< "Writing data to " << vtkFile.path() << endl;
|
|
||||||
|
|
||||||
scalarFormatterPtr_().write
|
|
||||||
(
|
|
||||||
true, // writeTracks
|
|
||||||
tracks,
|
|
||||||
scalarNames_,
|
|
||||||
scalarValues,
|
|
||||||
OFstream(vtkFile)()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert vector values
|
fileName vtkFile
|
||||||
|
(
|
||||||
if (allVectors_.size() > 0)
|
vtkPath
|
||||||
{
|
/ vectorFormatterPtr_().getFileName
|
||||||
List<List<vectorField>> vectorValues(allVectors_.size());
|
|
||||||
|
|
||||||
forAll(allVectors_, vectorI)
|
|
||||||
{
|
|
||||||
DynamicList<vectorList>& allTrackVals =
|
|
||||||
allVectors_[vectorI];
|
|
||||||
vectorValues[vectorI].setSize(allTrackVals.size());
|
|
||||||
|
|
||||||
forAll(allTrackVals, trackI)
|
|
||||||
{
|
|
||||||
vectorList& trackVals = allTrackVals[trackI];
|
|
||||||
vectorValues[vectorI][trackI].transfer(trackVals);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fileName vtkFile
|
|
||||||
(
|
(
|
||||||
vtkPath
|
tracks[0],
|
||||||
/ vectorFormatterPtr_().getFileName
|
vectorNames_
|
||||||
(
|
)
|
||||||
tracks[0],
|
);
|
||||||
vectorNames_
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
//Info<< "Writing vector data to " << vtkFile << endl;
|
vectorFormatterPtr_().write
|
||||||
|
(
|
||||||
vectorFormatterPtr_().write
|
true, // writeTracks
|
||||||
(
|
tracks,
|
||||||
true, // writeTracks
|
vectorNames_,
|
||||||
tracks,
|
vectorValues,
|
||||||
vectorNames_,
|
OFstream(vtkFile)()
|
||||||
vectorValues,
|
);
|
||||||
OFstream(vtkFile)()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::wallBoundedStreamLine::updateMesh(const mapPolyMesh&)
|
void Foam::functionObjects::wallBoundedStreamLine::updateMesh
|
||||||
|
(
|
||||||
|
const mapPolyMesh&
|
||||||
|
)
|
||||||
{
|
{
|
||||||
read(dict_);
|
read(dict_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::wallBoundedStreamLine::movePoints(const polyMesh&)
|
void Foam::functionObjects::wallBoundedStreamLine::movePoints(const polyMesh&)
|
||||||
{
|
{
|
||||||
// Moving mesh affects the search tree
|
// Moving mesh affects the search tree
|
||||||
read(dict_);
|
read(dict_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//void Foam::wallBoundedStreamLine::readUpdate
|
|
||||||
//(const polyMesh::readUpdateState state)
|
|
||||||
//{
|
|
||||||
// if (state != UNCHANGED)
|
|
||||||
// {
|
|
||||||
// read(dict_);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::wallBoundedStreamLine
|
Foam::functionObjects::wallBoundedStreamLine
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFieldFunctionObjects
|
grpFieldFunctionObjects
|
||||||
@ -127,6 +127,9 @@ class mapPolyMesh;
|
|||||||
class meshSearch;
|
class meshSearch;
|
||||||
class sampledSet;
|
class sampledSet;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class wallBoundedStreamLine Declaration
|
Class wallBoundedStreamLine Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -147,10 +150,6 @@ class wallBoundedStreamLine
|
|||||||
//- Load fields from files (not from objectRegistry)
|
//- Load fields from files (not from objectRegistry)
|
||||||
bool loadFromFiles_;
|
bool loadFromFiles_;
|
||||||
|
|
||||||
//- On/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
|
|
||||||
//- List of fields to sample
|
//- List of fields to sample
|
||||||
wordList fields_;
|
wordList fields_;
|
||||||
|
|
||||||
@ -250,6 +249,16 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~wallBoundedStreamLine();
|
virtual ~wallBoundedStreamLine();
|
||||||
@ -283,14 +292,12 @@ public:
|
|||||||
|
|
||||||
//- Update for mesh point-motion
|
//- Update for mesh point-motion
|
||||||
virtual void movePoints(const polyMesh&);
|
virtual void movePoints(const polyMesh&);
|
||||||
|
|
||||||
////- Update for changes of mesh due to readUpdate
|
|
||||||
//virtual void readUpdate(const polyMesh::readUpdateState state);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -44,7 +44,7 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<wallBoundedStreamLine>
|
typedef OutputFilterFunctionObject<functionObjects::wallBoundedStreamLine>
|
||||||
wallBoundedStreamLineFunctionObject;
|
wallBoundedStreamLineFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -140,13 +140,11 @@ Foam::functionObjects::forceCoeffs::forceCoeffs
|
|||||||
Aref_(0.0)
|
Aref_(0.0)
|
||||||
{
|
{
|
||||||
read(dict);
|
read(dict);
|
||||||
|
|
||||||
Info<< endl;
|
Info<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::autoPtr<Foam::functionObjects::forceCoeffs>
|
bool Foam::functionObjects::forceCoeffs::viable
|
||||||
Foam::functionObjects::forceCoeffs::New
|
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -154,17 +152,8 @@ Foam::functionObjects::forceCoeffs::New
|
|||||||
const bool loadFromFiles
|
const bool loadFromFiles
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (isA<fvMesh>(obr))
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
{
|
return isA<fvMesh>(obr);
|
||||||
return autoPtr<forceCoeffs>
|
|
||||||
(
|
|
||||||
new forceCoeffs(name, obr, dict, loadFromFiles)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return autoPtr<forceCoeffs>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -178,22 +167,19 @@ Foam::functionObjects::forceCoeffs::~forceCoeffs()
|
|||||||
|
|
||||||
void Foam::functionObjects::forceCoeffs::read(const dictionary& dict)
|
void Foam::functionObjects::forceCoeffs::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (active_)
|
forces::read(dict);
|
||||||
{
|
|
||||||
forces::read(dict);
|
|
||||||
|
|
||||||
// Directions for lift and drag forces, and pitch moment
|
// Directions for lift and drag forces, and pitch moment
|
||||||
dict.lookup("liftDir") >> liftDir_;
|
dict.lookup("liftDir") >> liftDir_;
|
||||||
dict.lookup("dragDir") >> dragDir_;
|
dict.lookup("dragDir") >> dragDir_;
|
||||||
dict.lookup("pitchAxis") >> pitchAxis_;
|
dict.lookup("pitchAxis") >> pitchAxis_;
|
||||||
|
|
||||||
// Free stream velocity magnitude
|
// Free stream velocity magnitude
|
||||||
dict.lookup("magUInf") >> magUInf_;
|
dict.lookup("magUInf") >> magUInf_;
|
||||||
|
|
||||||
// Reference length and area scales
|
// Reference length and area scales
|
||||||
dict.lookup("lRef") >> lRef_;
|
dict.lookup("lRef") >> lRef_;
|
||||||
dict.lookup("Aref") >> Aref_;
|
dict.lookup("Aref") >> Aref_;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -213,11 +199,6 @@ void Foam::functionObjects::forceCoeffs::write()
|
|||||||
{
|
{
|
||||||
forces::calcForcesMoment();
|
forces::calcForcesMoment();
|
||||||
|
|
||||||
if (!active_)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
functionObjectFiles::write();
|
functionObjectFiles::write();
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::forceCoeffs
|
Foam::functionObjects::forceCoeffs
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpForcesFunctionObjects
|
grpForcesFunctionObjects
|
||||||
@ -172,9 +172,9 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct on free-store and return pointer if successful
|
//- Return true if the construction of this functionObject is viable
|
||||||
// otherwise return a null-pointer
|
// i.e. the prerequisites for construction are available
|
||||||
static autoPtr<forceCoeffs> New
|
static bool viable
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry&,
|
const objectRegistry&,
|
||||||
|
|||||||
@ -161,7 +161,7 @@ void Foam::functionObjects::forces::writeFileHeader(const label i)
|
|||||||
|
|
||||||
void Foam::functionObjects::forces::initialise()
|
void Foam::functionObjects::forces::initialise()
|
||||||
{
|
{
|
||||||
if (initialised_ || !active_)
|
if (initialised_)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -170,11 +170,9 @@ void Foam::functionObjects::forces::initialise()
|
|||||||
{
|
{
|
||||||
if (!obr_.foundObject<volVectorField>(fDName_))
|
if (!obr_.foundObject<volVectorField>(fDName_))
|
||||||
{
|
{
|
||||||
active_ = false;
|
FatalErrorInFunction
|
||||||
WarningInFunction
|
<< "Could not find " << fDName_ << " in database."
|
||||||
<< "Could not find " << fDName_ << " in database." << nl
|
<< exit(FatalError);
|
||||||
<< " De-activating forces."
|
|
||||||
<< endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -189,10 +187,9 @@ void Foam::functionObjects::forces::initialise()
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
active_ = false;
|
FatalErrorInFunction
|
||||||
|
<< "Could not find " << UName_ << ", " << pName_
|
||||||
WarningInFunction
|
<< exit(FatalError);
|
||||||
<< "Could not find " << UName_ << ", " << pName_;
|
|
||||||
|
|
||||||
if (rhoName_ != "rhoInf")
|
if (rhoName_ != "rhoInf")
|
||||||
{
|
{
|
||||||
@ -534,7 +531,6 @@ Foam::functionObjects::forces::forces
|
|||||||
functionObjectFiles(obr, name, createFileNames(dict)),
|
functionObjectFiles(obr, name, createFileNames(dict)),
|
||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr),
|
||||||
active_(true),
|
|
||||||
log_(true),
|
log_(true),
|
||||||
force_(3),
|
force_(3),
|
||||||
moment_(3),
|
moment_(3),
|
||||||
@ -557,28 +553,15 @@ Foam::functionObjects::forces::forces
|
|||||||
binCumulative_(true),
|
binCumulative_(true),
|
||||||
initialised_(false)
|
initialised_(false)
|
||||||
{
|
{
|
||||||
// Check if the available mesh is an fvMesh otherise deactivate
|
if (readFields)
|
||||||
if (isA<fvMesh>(obr_))
|
|
||||||
{
|
{
|
||||||
if (readFields)
|
read(dict);
|
||||||
{
|
Info<< endl;
|
||||||
read(dict);
|
|
||||||
Info<< endl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
active_ = false;
|
|
||||||
WarningInFunction
|
|
||||||
<< "No fvMesh available, deactivating " << name_
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::autoPtr<Foam::functionObjects::forces>
|
bool Foam::functionObjects::forces::viable
|
||||||
Foam::functionObjects::forces::New
|
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -586,17 +569,8 @@ Foam::functionObjects::forces::New
|
|||||||
const bool loadFromFiles
|
const bool loadFromFiles
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (isA<fvMesh>(obr))
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
{
|
return isA<fvMesh>(obr);
|
||||||
return autoPtr<forces>
|
|
||||||
(
|
|
||||||
new forces(name, obr, dict, loadFromFiles)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return autoPtr<forces>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -616,7 +590,6 @@ Foam::functionObjects::forces::forces
|
|||||||
functionObjectFiles(obr, name, typeName),
|
functionObjectFiles(obr, name, typeName),
|
||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr),
|
||||||
active_(true),
|
|
||||||
log_(true),
|
log_(true),
|
||||||
force_(3),
|
force_(3),
|
||||||
moment_(3),
|
moment_(3),
|
||||||
@ -657,134 +630,131 @@ Foam::functionObjects::forces::~forces()
|
|||||||
|
|
||||||
void Foam::functionObjects::forces::read(const dictionary& dict)
|
void Foam::functionObjects::forces::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (active_)
|
initialised_ = false;
|
||||||
|
|
||||||
|
log_ = dict.lookupOrDefault<Switch>("log", false);
|
||||||
|
|
||||||
|
if (log_) Info<< type() << " " << name_ << ":" << nl;
|
||||||
|
|
||||||
|
directForceDensity_ = dict.lookupOrDefault("directForceDensity", false);
|
||||||
|
|
||||||
|
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
||||||
|
const polyBoundaryMesh& pbm = mesh.boundaryMesh();
|
||||||
|
|
||||||
|
patchSet_ = pbm.patchSet(wordReList(dict.lookup("patches")));
|
||||||
|
|
||||||
|
if (directForceDensity_)
|
||||||
{
|
{
|
||||||
initialised_ = false;
|
// Optional entry for fDName
|
||||||
|
fDName_ = dict.lookupOrDefault<word>("fDName", "fD");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Optional entries U and p
|
||||||
|
pName_ = dict.lookupOrDefault<word>("pName", "p");
|
||||||
|
UName_ = dict.lookupOrDefault<word>("UName", "U");
|
||||||
|
rhoName_ = dict.lookupOrDefault<word>("rhoName", "rho");
|
||||||
|
|
||||||
log_ = dict.lookupOrDefault<Switch>("log", false);
|
// Reference density needed for incompressible calculations
|
||||||
|
rhoRef_ = readScalar(dict.lookup("rhoInf"));
|
||||||
|
|
||||||
if (log_) Info<< type() << " " << name_ << ":" << nl;
|
// Reference pressure, 0 by default
|
||||||
|
pRef_ = dict.lookupOrDefault<scalar>("pRef", 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
directForceDensity_ = dict.lookupOrDefault("directForceDensity", false);
|
coordSys_.clear();
|
||||||
|
|
||||||
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
// Centre of rotation for moment calculations
|
||||||
const polyBoundaryMesh& pbm = mesh.boundaryMesh();
|
// specified directly, from coordinate system, or implicitly (0 0 0)
|
||||||
|
if (!dict.readIfPresent<point>("CofR", coordSys_.origin()))
|
||||||
|
{
|
||||||
|
coordSys_ = coordinateSystem(obr_, dict);
|
||||||
|
localSystem_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
patchSet_ = pbm.patchSet(wordReList(dict.lookup("patches")));
|
dict.readIfPresent("porosity", porosity_);
|
||||||
|
if (porosity_)
|
||||||
|
{
|
||||||
|
if (log_) Info<< " Including porosity effects" << endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (log_) Info<< " Not including porosity effects" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
if (directForceDensity_)
|
if (dict.found("binData"))
|
||||||
|
{
|
||||||
|
const dictionary& binDict(dict.subDict("binData"));
|
||||||
|
binDict.lookup("nBin") >> nBin_;
|
||||||
|
|
||||||
|
if (nBin_ < 0)
|
||||||
{
|
{
|
||||||
// Optional entry for fDName
|
FatalIOErrorInFunction(dict)
|
||||||
fDName_ = dict.lookupOrDefault<word>("fDName", "fD");
|
<< "Number of bins (nBin) must be zero or greater"
|
||||||
|
<< exit(FatalIOError);
|
||||||
}
|
}
|
||||||
else
|
else if ((nBin_ == 0) || (nBin_ == 1))
|
||||||
{
|
{
|
||||||
// Optional entries U and p
|
nBin_ = 1;
|
||||||
pName_ = dict.lookupOrDefault<word>("pName", "p");
|
forAll(force_, i)
|
||||||
UName_ = dict.lookupOrDefault<word>("UName", "U");
|
|
||||||
rhoName_ = dict.lookupOrDefault<word>("rhoName", "rho");
|
|
||||||
|
|
||||||
// Reference density needed for incompressible calculations
|
|
||||||
rhoRef_ = readScalar(dict.lookup("rhoInf"));
|
|
||||||
|
|
||||||
// Reference pressure, 0 by default
|
|
||||||
pRef_ = dict.lookupOrDefault<scalar>("pRef", 0.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
coordSys_.clear();
|
|
||||||
|
|
||||||
// Centre of rotation for moment calculations
|
|
||||||
// specified directly, from coordinate system, or implicitly (0 0 0)
|
|
||||||
if (!dict.readIfPresent<point>("CofR", coordSys_.origin()))
|
|
||||||
{
|
|
||||||
coordSys_ = coordinateSystem(obr_, dict);
|
|
||||||
localSystem_ = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
dict.readIfPresent("porosity", porosity_);
|
|
||||||
if (porosity_)
|
|
||||||
{
|
|
||||||
if (log_) Info<< " Including porosity effects" << endl;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (log_) Info<< " Not including porosity effects" << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dict.found("binData"))
|
|
||||||
{
|
|
||||||
const dictionary& binDict(dict.subDict("binData"));
|
|
||||||
binDict.lookup("nBin") >> nBin_;
|
|
||||||
|
|
||||||
if (nBin_ < 0)
|
|
||||||
{
|
{
|
||||||
FatalIOErrorInFunction(dict)
|
force_[i].setSize(1);
|
||||||
<< "Number of bins (nBin) must be zero or greater"
|
moment_[i].setSize(1);
|
||||||
<< exit(FatalIOError);
|
|
||||||
}
|
|
||||||
else if ((nBin_ == 0) || (nBin_ == 1))
|
|
||||||
{
|
|
||||||
nBin_ = 1;
|
|
||||||
forAll(force_, i)
|
|
||||||
{
|
|
||||||
force_[i].setSize(1);
|
|
||||||
moment_[i].setSize(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nBin_ > 1)
|
|
||||||
{
|
|
||||||
binDict.lookup("direction") >> binDir_;
|
|
||||||
binDir_ /= mag(binDir_);
|
|
||||||
|
|
||||||
binMin_ = GREAT;
|
|
||||||
scalar binMax = -GREAT;
|
|
||||||
forAllConstIter(labelHashSet, patchSet_, iter)
|
|
||||||
{
|
|
||||||
label patchi = iter.key();
|
|
||||||
const polyPatch& pp = pbm[patchi];
|
|
||||||
scalarField d(pp.faceCentres() & binDir_);
|
|
||||||
binMin_ = min(min(d), binMin_);
|
|
||||||
binMax = max(max(d), binMax);
|
|
||||||
}
|
|
||||||
reduce(binMin_, minOp<scalar>());
|
|
||||||
reduce(binMax, maxOp<scalar>());
|
|
||||||
|
|
||||||
// slightly boost binMax so that region of interest is fully
|
|
||||||
// within bounds
|
|
||||||
binMax = 1.0001*(binMax - binMin_) + binMin_;
|
|
||||||
|
|
||||||
binDx_ = (binMax - binMin_)/scalar(nBin_);
|
|
||||||
|
|
||||||
// create the bin points used for writing
|
|
||||||
binPoints_.setSize(nBin_);
|
|
||||||
forAll(binPoints_, i)
|
|
||||||
{
|
|
||||||
binPoints_[i] = (i + 0.5)*binDir_*binDx_;
|
|
||||||
}
|
|
||||||
|
|
||||||
binDict.lookup("cumulative") >> binCumulative_;
|
|
||||||
|
|
||||||
// allocate storage for forces and moments
|
|
||||||
forAll(force_, i)
|
|
||||||
{
|
|
||||||
force_[i].setSize(nBin_);
|
|
||||||
moment_[i].setSize(nBin_);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nBin_ == 1)
|
if (nBin_ > 1)
|
||||||
{
|
{
|
||||||
|
binDict.lookup("direction") >> binDir_;
|
||||||
|
binDir_ /= mag(binDir_);
|
||||||
|
|
||||||
|
binMin_ = GREAT;
|
||||||
|
scalar binMax = -GREAT;
|
||||||
|
forAllConstIter(labelHashSet, patchSet_, iter)
|
||||||
|
{
|
||||||
|
label patchi = iter.key();
|
||||||
|
const polyPatch& pp = pbm[patchi];
|
||||||
|
scalarField d(pp.faceCentres() & binDir_);
|
||||||
|
binMin_ = min(min(d), binMin_);
|
||||||
|
binMax = max(max(d), binMax);
|
||||||
|
}
|
||||||
|
reduce(binMin_, minOp<scalar>());
|
||||||
|
reduce(binMax, maxOp<scalar>());
|
||||||
|
|
||||||
|
// slightly boost binMax so that region of interest is fully
|
||||||
|
// within bounds
|
||||||
|
binMax = 1.0001*(binMax - binMin_) + binMin_;
|
||||||
|
|
||||||
|
binDx_ = (binMax - binMin_)/scalar(nBin_);
|
||||||
|
|
||||||
|
// create the bin points used for writing
|
||||||
|
binPoints_.setSize(nBin_);
|
||||||
|
forAll(binPoints_, i)
|
||||||
|
{
|
||||||
|
binPoints_[i] = (i + 0.5)*binDir_*binDx_;
|
||||||
|
}
|
||||||
|
|
||||||
|
binDict.lookup("cumulative") >> binCumulative_;
|
||||||
|
|
||||||
// allocate storage for forces and moments
|
// allocate storage for forces and moments
|
||||||
force_[0].setSize(1);
|
forAll(force_, i)
|
||||||
force_[1].setSize(1);
|
{
|
||||||
force_[2].setSize(1);
|
force_[i].setSize(nBin_);
|
||||||
moment_[0].setSize(1);
|
moment_[i].setSize(nBin_);
|
||||||
moment_[1].setSize(1);
|
}
|
||||||
moment_[2].setSize(1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nBin_ == 1)
|
||||||
|
{
|
||||||
|
// allocate storage for forces and moments
|
||||||
|
force_[0].setSize(1);
|
||||||
|
force_[1].setSize(1);
|
||||||
|
force_[2].setSize(1);
|
||||||
|
moment_[0].setSize(1);
|
||||||
|
moment_[1].setSize(1);
|
||||||
|
moment_[2].setSize(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -804,11 +774,6 @@ void Foam::functionObjects::forces::write()
|
|||||||
{
|
{
|
||||||
calcForcesMoment();
|
calcForcesMoment();
|
||||||
|
|
||||||
if (!active_)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
functionObjectFiles::write();
|
functionObjectFiles::write();
|
||||||
@ -826,11 +791,6 @@ void Foam::functionObjects::forces::calcForcesMoment()
|
|||||||
{
|
{
|
||||||
initialise();
|
initialise();
|
||||||
|
|
||||||
if (!active_)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
force_[0] = Zero;
|
force_[0] = Zero;
|
||||||
force_[1] = Zero;
|
force_[1] = Zero;
|
||||||
force_[2] = Zero;
|
force_[2] = Zero;
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::forces
|
Foam::functionObjects::forces
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpForcesFunctionObjects
|
grpForcesFunctionObjects
|
||||||
@ -156,9 +156,6 @@ protected:
|
|||||||
|
|
||||||
const objectRegistry& obr_;
|
const objectRegistry& obr_;
|
||||||
|
|
||||||
//- On/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
//- Switch to send output to Info as well as to file
|
//- Switch to send output to Info as well as to file
|
||||||
Switch log_;
|
Switch log_;
|
||||||
|
|
||||||
@ -296,9 +293,9 @@ public:
|
|||||||
const bool readFields = true
|
const bool readFields = true
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct on free-store and return pointer if successful
|
//- Return true if the construction of this functionObject is viable
|
||||||
// otherwise return a null-pointer
|
// i.e. the prerequisites for construction are available
|
||||||
static autoPtr<forces> New
|
static bool viable
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry&,
|
const objectRegistry&,
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2013-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -32,13 +32,16 @@ License
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(calcFvcDiv, 0);
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(calcFvcDiv, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::volScalarField& Foam::calcFvcDiv::divField
|
Foam::volScalarField& Foam::functionObjects::calcFvcDiv::divField
|
||||||
(
|
(
|
||||||
const word& divName,
|
const word& divName,
|
||||||
const dimensionSet& dims
|
const dimensionSet& dims
|
||||||
@ -76,7 +79,7 @@ Foam::volScalarField& Foam::calcFvcDiv::divField
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::calcFvcDiv::calcFvcDiv
|
Foam::functionObjects::calcFvcDiv::calcFvcDiv
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -86,93 +89,82 @@ Foam::calcFvcDiv::calcFvcDiv
|
|||||||
:
|
:
|
||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr),
|
||||||
active_(true),
|
|
||||||
fieldName_("undefined-fieldName"),
|
fieldName_("undefined-fieldName"),
|
||||||
resultName_("undefined-resultName")
|
resultName_("undefined-resultName")
|
||||||
{
|
{
|
||||||
// Check if the available mesh is an fvMesh, otherwise deactivate
|
|
||||||
if (!isA<fvMesh>(obr_))
|
|
||||||
{
|
|
||||||
active_ = false;
|
|
||||||
WarningInFunction
|
|
||||||
<< "No fvMesh available, deactivating." << nl
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
read(dict);
|
read(dict);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::functionObjects::calcFvcDiv::viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry& obr,
|
||||||
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
|
return isA<fvMesh>(obr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::calcFvcDiv::~calcFvcDiv()
|
Foam::functionObjects::calcFvcDiv::~calcFvcDiv()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::calcFvcDiv::read(const dictionary& dict)
|
void Foam::functionObjects::calcFvcDiv::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (active_)
|
dict.lookup("fieldName") >> fieldName_;
|
||||||
{
|
dict.lookup("resultName") >> resultName_;
|
||||||
dict.lookup("fieldName") >> fieldName_;
|
|
||||||
dict.lookup("resultName") >> resultName_;
|
|
||||||
|
|
||||||
if (resultName_ == "none")
|
if (resultName_ == "none")
|
||||||
{
|
{
|
||||||
resultName_ = "fvc::div(" + fieldName_ + ")";
|
resultName_ = "fvc::div(" + fieldName_ + ")";
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::calcFvcDiv::execute()
|
void Foam::functionObjects::calcFvcDiv::execute()
|
||||||
{
|
{
|
||||||
if (active_)
|
bool processed = false;
|
||||||
|
|
||||||
|
calcDiv<surfaceScalarField>(fieldName_, resultName_, processed);
|
||||||
|
calcDiv<volVectorField>(fieldName_, resultName_, processed);
|
||||||
|
|
||||||
|
if (!processed)
|
||||||
{
|
{
|
||||||
bool processed = false;
|
WarningInFunction
|
||||||
|
<< "Unprocessed field " << fieldName_ << endl;
|
||||||
calcDiv<surfaceScalarField>(fieldName_, resultName_, processed);
|
|
||||||
calcDiv<volVectorField>(fieldName_, resultName_, processed);
|
|
||||||
|
|
||||||
if (!processed)
|
|
||||||
{
|
|
||||||
WarningInFunction
|
|
||||||
<< "Unprocessed field " << fieldName_ << endl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::calcFvcDiv::end()
|
void Foam::functionObjects::calcFvcDiv::end()
|
||||||
{
|
{
|
||||||
if (active_)
|
execute();
|
||||||
{
|
|
||||||
execute();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::calcFvcDiv::timeSet()
|
void Foam::functionObjects::calcFvcDiv::timeSet()
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::calcFvcDiv::write()
|
void Foam::functionObjects::calcFvcDiv::write()
|
||||||
{
|
{
|
||||||
if (active_)
|
if (obr_.foundObject<regIOobject>(resultName_))
|
||||||
{
|
{
|
||||||
if (obr_.foundObject<regIOobject>(resultName_))
|
const regIOobject& field =
|
||||||
{
|
obr_.lookupObject<regIOobject>(resultName_);
|
||||||
const regIOobject& field =
|
|
||||||
obr_.lookupObject<regIOobject>(resultName_);
|
|
||||||
|
|
||||||
Info<< type() << " " << name_ << " output:" << nl
|
Info<< type() << " " << name_ << " output:" << nl
|
||||||
<< " writing field " << field.name() << nl << endl;
|
<< " writing field " << field.name() << nl << endl;
|
||||||
|
|
||||||
field.write();
|
field.write();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::calcFvcDiv
|
Foam::functionObjects::calcFvcDiv
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFVFunctionObjects
|
grpFVFunctionObjects
|
||||||
@ -59,6 +59,9 @@ class polyMesh;
|
|||||||
class mapPolyMesh;
|
class mapPolyMesh;
|
||||||
class dimensionSet;
|
class dimensionSet;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class calcFvcDiv Declaration
|
Class calcFvcDiv Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -73,9 +76,6 @@ class calcFvcDiv
|
|||||||
//- Reference to the database
|
//- Reference to the database
|
||||||
const objectRegistry& obr_;
|
const objectRegistry& obr_;
|
||||||
|
|
||||||
//- On/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
//- Name of field to process
|
//- Name of field to process
|
||||||
word fieldName_;
|
word fieldName_;
|
||||||
|
|
||||||
@ -126,6 +126,16 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~calcFvcDiv();
|
virtual ~calcFvcDiv();
|
||||||
@ -166,6 +176,7 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,7 +43,8 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<calcFvcDiv> calcFvcDivFunctionObject;
|
typedef OutputFilterFunctionObject<functionObjects::calcFvcDiv>
|
||||||
|
calcFvcDivFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -29,7 +29,7 @@ License
|
|||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class FieldType>
|
template<class FieldType>
|
||||||
void Foam::calcFvcDiv::calcDiv
|
void Foam::functionObjects::calcFvcDiv::calcDiv
|
||||||
(
|
(
|
||||||
const word& fieldName,
|
const word& fieldName,
|
||||||
const word& resultName,
|
const word& resultName,
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2013-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -32,13 +32,16 @@ License
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(calcFvcGrad, 0);
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(calcFvcGrad, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::calcFvcGrad::calcFvcGrad
|
Foam::functionObjects::calcFvcGrad::calcFvcGrad
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -48,93 +51,82 @@ Foam::calcFvcGrad::calcFvcGrad
|
|||||||
:
|
:
|
||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr),
|
||||||
active_(true),
|
|
||||||
fieldName_("undefined-fieldName"),
|
fieldName_("undefined-fieldName"),
|
||||||
resultName_("undefined-resultName")
|
resultName_("undefined-resultName")
|
||||||
{
|
{
|
||||||
// Check if the available mesh is an fvMesh, otherwise deactivate
|
|
||||||
if (!isA<fvMesh>(obr_))
|
|
||||||
{
|
|
||||||
active_ = false;
|
|
||||||
WarningInFunction
|
|
||||||
<< "No fvMesh available, deactivating." << nl
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
read(dict);
|
read(dict);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::functionObjects::calcFvcGrad::viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry& obr,
|
||||||
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
|
return isA<fvMesh>(obr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::calcFvcGrad::~calcFvcGrad()
|
Foam::functionObjects::calcFvcGrad::~calcFvcGrad()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::calcFvcGrad::read(const dictionary& dict)
|
void Foam::functionObjects::calcFvcGrad::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (active_)
|
dict.lookup("fieldName") >> fieldName_;
|
||||||
{
|
dict.lookup("resultName") >> resultName_;
|
||||||
dict.lookup("fieldName") >> fieldName_;
|
|
||||||
dict.lookup("resultName") >> resultName_;
|
|
||||||
|
|
||||||
if (resultName_ == "none")
|
if (resultName_ == "none")
|
||||||
{
|
{
|
||||||
resultName_ = "fvc::grad(" + fieldName_ + ")";
|
resultName_ = "fvc::grad(" + fieldName_ + ")";
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::calcFvcGrad::execute()
|
void Foam::functionObjects::calcFvcGrad::execute()
|
||||||
{
|
{
|
||||||
if (active_)
|
bool processed = false;
|
||||||
|
|
||||||
|
calcGrad<scalar>(fieldName_, resultName_, processed);
|
||||||
|
calcGrad<vector>(fieldName_, resultName_, processed);
|
||||||
|
|
||||||
|
if (!processed)
|
||||||
{
|
{
|
||||||
bool processed = false;
|
WarningInFunction
|
||||||
|
<< "Unprocessed field " << fieldName_ << endl;
|
||||||
calcGrad<scalar>(fieldName_, resultName_, processed);
|
|
||||||
calcGrad<vector>(fieldName_, resultName_, processed);
|
|
||||||
|
|
||||||
if (!processed)
|
|
||||||
{
|
|
||||||
WarningInFunction
|
|
||||||
<< "Unprocessed field " << fieldName_ << endl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::calcFvcGrad::end()
|
void Foam::functionObjects::calcFvcGrad::end()
|
||||||
{
|
{
|
||||||
if (active_)
|
execute();
|
||||||
{
|
|
||||||
execute();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::calcFvcGrad::timeSet()
|
void Foam::functionObjects::calcFvcGrad::timeSet()
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::calcFvcGrad::write()
|
void Foam::functionObjects::calcFvcGrad::write()
|
||||||
{
|
{
|
||||||
if (active_)
|
if (obr_.foundObject<regIOobject>(resultName_))
|
||||||
{
|
{
|
||||||
if (obr_.foundObject<regIOobject>(resultName_))
|
const regIOobject& field =
|
||||||
{
|
obr_.lookupObject<regIOobject>(resultName_);
|
||||||
const regIOobject& field =
|
|
||||||
obr_.lookupObject<regIOobject>(resultName_);
|
|
||||||
|
|
||||||
Info<< type() << " " << name_ << " output:" << nl
|
Info<< type() << " " << name_ << " output:" << nl
|
||||||
<< " writing field " << field.name() << nl << endl;
|
<< " writing field " << field.name() << nl << endl;
|
||||||
|
|
||||||
field.write();
|
field.write();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::calcFvcGrad
|
Foam::functionObjects::calcFvcGrad
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFVFunctionObjects
|
grpFVFunctionObjects
|
||||||
@ -59,6 +59,9 @@ class polyMesh;
|
|||||||
class mapPolyMesh;
|
class mapPolyMesh;
|
||||||
class dimensionSet;
|
class dimensionSet;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class calcFvcGrad Declaration
|
Class calcFvcGrad Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -73,9 +76,6 @@ class calcFvcGrad
|
|||||||
//- Reference to the database
|
//- Reference to the database
|
||||||
const objectRegistry& obr_;
|
const objectRegistry& obr_;
|
||||||
|
|
||||||
//- On/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
//- Name of field to process
|
//- Name of field to process
|
||||||
word fieldName_;
|
word fieldName_;
|
||||||
|
|
||||||
@ -129,6 +129,16 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~calcFvcGrad();
|
virtual ~calcFvcGrad();
|
||||||
@ -169,6 +179,7 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,7 +43,8 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<calcFvcGrad> calcFvcGradFunctionObject;
|
typedef OutputFilterFunctionObject<functionObjects::calcFvcGrad>
|
||||||
|
calcFvcGradFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -35,7 +35,11 @@ Foam::GeometricField
|
|||||||
Foam::fvPatchField,
|
Foam::fvPatchField,
|
||||||
Foam::volMesh
|
Foam::volMesh
|
||||||
>&
|
>&
|
||||||
Foam::calcFvcGrad::gradField(const word& gradName, const dimensionSet& dims)
|
Foam::functionObjects::calcFvcGrad::gradField
|
||||||
|
(
|
||||||
|
const word& gradName,
|
||||||
|
const dimensionSet& dims
|
||||||
|
)
|
||||||
{
|
{
|
||||||
Info<< "gradField" << endl;
|
Info<< "gradField" << endl;
|
||||||
|
|
||||||
@ -78,7 +82,7 @@ Foam::calcFvcGrad::gradField(const word& gradName, const dimensionSet& dims)
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::calcFvcGrad::calcGrad
|
void Foam::functionObjects::calcFvcGrad::calcGrad
|
||||||
(
|
(
|
||||||
const word& fieldName,
|
const word& fieldName,
|
||||||
const word& resultName,
|
const word& resultName,
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2013-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -32,13 +32,16 @@ License
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(calcMag, 0);
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(calcMag, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::calcMag::calcMag
|
Foam::functionObjects::calcMag::calcMag
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -48,96 +51,85 @@ Foam::calcMag::calcMag
|
|||||||
:
|
:
|
||||||
name_(name),
|
name_(name),
|
||||||
obr_(obr),
|
obr_(obr),
|
||||||
active_(true),
|
|
||||||
fieldName_("undefined-fieldName"),
|
fieldName_("undefined-fieldName"),
|
||||||
resultName_("undefined-resultName")
|
resultName_("undefined-resultName")
|
||||||
{
|
{
|
||||||
// Check if the available mesh is an fvMesh, otherwise deactivate
|
|
||||||
if (!isA<fvMesh>(obr_))
|
|
||||||
{
|
|
||||||
active_ = false;
|
|
||||||
WarningInFunction
|
|
||||||
<< "No fvMesh available, deactivating." << nl
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
read(dict);
|
read(dict);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::functionObjects::calcMag::viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry& obr,
|
||||||
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Construction is viable if the available mesh is an fvMesh
|
||||||
|
return isA<fvMesh>(obr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::calcMag::~calcMag()
|
Foam::functionObjects::calcMag::~calcMag()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::calcMag::read(const dictionary& dict)
|
void Foam::functionObjects::calcMag::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (active_)
|
dict.lookup("fieldName") >> fieldName_;
|
||||||
{
|
dict.lookup("resultName") >> resultName_;
|
||||||
dict.lookup("fieldName") >> fieldName_;
|
|
||||||
dict.lookup("resultName") >> resultName_;
|
|
||||||
|
|
||||||
if (resultName_ == "none")
|
if (resultName_ == "none")
|
||||||
{
|
{
|
||||||
resultName_ = "mag(" + fieldName_ + ")";
|
resultName_ = "mag(" + fieldName_ + ")";
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::calcMag::execute()
|
void Foam::functionObjects::calcMag::execute()
|
||||||
{
|
{
|
||||||
if (active_)
|
bool processed = false;
|
||||||
|
|
||||||
|
calc<scalar>(fieldName_, resultName_, processed);
|
||||||
|
calc<vector>(fieldName_, resultName_, processed);
|
||||||
|
calc<sphericalTensor>(fieldName_, resultName_, processed);
|
||||||
|
calc<symmTensor>(fieldName_, resultName_, processed);
|
||||||
|
calc<tensor>(fieldName_, resultName_, processed);
|
||||||
|
|
||||||
|
if (!processed)
|
||||||
{
|
{
|
||||||
bool processed = false;
|
WarningInFunction
|
||||||
|
<< "Unprocessed field " << fieldName_ << endl;
|
||||||
calc<scalar>(fieldName_, resultName_, processed);
|
|
||||||
calc<vector>(fieldName_, resultName_, processed);
|
|
||||||
calc<sphericalTensor>(fieldName_, resultName_, processed);
|
|
||||||
calc<symmTensor>(fieldName_, resultName_, processed);
|
|
||||||
calc<tensor>(fieldName_, resultName_, processed);
|
|
||||||
|
|
||||||
if (!processed)
|
|
||||||
{
|
|
||||||
WarningInFunction
|
|
||||||
<< "Unprocessed field " << fieldName_ << endl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::calcMag::end()
|
void Foam::functionObjects::calcMag::end()
|
||||||
{
|
{
|
||||||
if (active_)
|
execute();
|
||||||
{
|
|
||||||
execute();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::calcMag::timeSet()
|
void Foam::functionObjects::calcMag::timeSet()
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::calcMag::write()
|
void Foam::functionObjects::calcMag::write()
|
||||||
{
|
{
|
||||||
if (active_)
|
if (obr_.foundObject<regIOobject>(resultName_))
|
||||||
{
|
{
|
||||||
if (obr_.foundObject<regIOobject>(resultName_))
|
const regIOobject& field =
|
||||||
{
|
obr_.lookupObject<regIOobject>(resultName_);
|
||||||
const regIOobject& field =
|
|
||||||
obr_.lookupObject<regIOobject>(resultName_);
|
|
||||||
|
|
||||||
Info<< type() << " " << name_ << " output:" << nl
|
Info<< type() << " " << name_ << " output:" << nl
|
||||||
<< " writing field " << field.name() << nl << endl;
|
<< " writing field " << field.name() << nl << endl;
|
||||||
|
|
||||||
field.write();
|
field.write();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::calcMag
|
Foam::functionObjects::calcMag
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFVFunctionObjects
|
grpFVFunctionObjects
|
||||||
@ -59,6 +59,9 @@ class polyMesh;
|
|||||||
class mapPolyMesh;
|
class mapPolyMesh;
|
||||||
class dimensionSet;
|
class dimensionSet;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class calcMag Declaration
|
Class calcMag Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -73,9 +76,6 @@ class calcMag
|
|||||||
//- Reference to the database
|
//- Reference to the database
|
||||||
const objectRegistry& obr_;
|
const objectRegistry& obr_;
|
||||||
|
|
||||||
//- On/off switch
|
|
||||||
bool active_;
|
|
||||||
|
|
||||||
//- Name of field to process
|
//- Name of field to process
|
||||||
word fieldName_;
|
word fieldName_;
|
||||||
|
|
||||||
@ -123,6 +123,16 @@ public:
|
|||||||
const bool loadFromFiles = false
|
const bool loadFromFiles = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~calcMag();
|
virtual ~calcMag();
|
||||||
@ -163,6 +173,7 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,7 +43,8 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<calcMag> calcMagFunctionObject;
|
typedef OutputFilterFunctionObject<functionObjects::calcMag>
|
||||||
|
calcMagFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -29,7 +29,7 @@ License
|
|||||||
#include "surfaceFields.H"
|
#include "surfaceFields.H"
|
||||||
|
|
||||||
template<class FieldType>
|
template<class FieldType>
|
||||||
FieldType& Foam::calcMag::magField
|
FieldType& Foam::functionObjects::calcMag::magField
|
||||||
(
|
(
|
||||||
const word& magName,
|
const word& magName,
|
||||||
const dimensionSet& dims
|
const dimensionSet& dims
|
||||||
@ -68,7 +68,7 @@ FieldType& Foam::calcMag::magField
|
|||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::calcMag::calc
|
void Foam::functionObjects::calcMag::calc
|
||||||
(
|
(
|
||||||
const word& fieldName,
|
const word& fieldName,
|
||||||
const word& resultName,
|
const word& resultName,
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -34,35 +34,34 @@ License
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(abortCalculation, 0);
|
namespace functionObjects
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
{
|
||||||
template<>
|
defineTypeNameAndDebug(abortCalculation, 0);
|
||||||
const char* Foam::NamedEnum
|
}
|
||||||
<
|
|
||||||
Foam::abortCalculation::actionType,
|
|
||||||
3
|
|
||||||
>::names[] =
|
|
||||||
{
|
|
||||||
"noWriteNow",
|
|
||||||
"writeNow",
|
|
||||||
"nextWrite"
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const char* Foam::NamedEnum
|
||||||
|
<
|
||||||
|
Foam::functionObjects::abortCalculation::actionType,
|
||||||
|
3
|
||||||
|
>::names[] =
|
||||||
|
{
|
||||||
|
"noWriteNow",
|
||||||
|
"writeNow",
|
||||||
|
"nextWrite"
|
||||||
|
};
|
||||||
|
|
||||||
const Foam::NamedEnum<Foam::abortCalculation::actionType, 3>
|
const Foam::NamedEnum
|
||||||
Foam::abortCalculation::actionTypeNames_;
|
<
|
||||||
|
Foam::functionObjects::abortCalculation::actionType,
|
||||||
|
3
|
||||||
|
> Foam::functionObjects::abortCalculation::actionTypeNames_;
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::abortCalculation::removeFile() const
|
void Foam::functionObjects::abortCalculation::removeFile() const
|
||||||
{
|
{
|
||||||
bool hasAbort = isFile(abortFile_);
|
bool hasAbort = isFile(abortFile_);
|
||||||
reduce(hasAbort, orOp<bool>());
|
reduce(hasAbort, orOp<bool>());
|
||||||
@ -77,7 +76,7 @@ void Foam::abortCalculation::removeFile() const
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::abortCalculation::abortCalculation
|
Foam::functionObjects::abortCalculation::abortCalculation
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry& obr,
|
const objectRegistry& obr,
|
||||||
@ -98,15 +97,28 @@ Foam::abortCalculation::abortCalculation
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::functionObjects::abortCalculation::viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry& obr,
|
||||||
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::abortCalculation::~abortCalculation()
|
Foam::functionObjects::abortCalculation::~abortCalculation()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::abortCalculation::read(const dictionary& dict)
|
void Foam::functionObjects::abortCalculation::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
if (dict.found("action"))
|
if (dict.found("action"))
|
||||||
{
|
{
|
||||||
@ -124,7 +136,7 @@ void Foam::abortCalculation::read(const dictionary& dict)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::abortCalculation::execute()
|
void Foam::functionObjects::abortCalculation::execute()
|
||||||
{
|
{
|
||||||
bool hasAbort = isFile(abortFile_);
|
bool hasAbort = isFile(abortFile_);
|
||||||
reduce(hasAbort, orOp<bool>());
|
reduce(hasAbort, orOp<bool>());
|
||||||
@ -173,22 +185,18 @@ void Foam::abortCalculation::execute()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::abortCalculation::end()
|
void Foam::functionObjects::abortCalculation::end()
|
||||||
{
|
{
|
||||||
removeFile();
|
removeFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::abortCalculation::timeSet()
|
void Foam::functionObjects::abortCalculation::timeSet()
|
||||||
{
|
{}
|
||||||
// Do nothing - only valid on execute
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::abortCalculation::write()
|
void Foam::functionObjects::abortCalculation::write()
|
||||||
{
|
{}
|
||||||
// Do nothing - only valid on execute
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::abortCalculation
|
Foam::functionObjects::abortCalculation
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpJobControlFunctionObjects
|
grpJobControlFunctionObjects
|
||||||
@ -58,6 +58,9 @@ class dictionary;
|
|||||||
class polyMesh;
|
class polyMesh;
|
||||||
class mapPolyMesh;
|
class mapPolyMesh;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class abortCalculation Declaration
|
Class abortCalculation Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -124,6 +127,16 @@ public:
|
|||||||
const bool loadFromFilesUnused = false
|
const bool loadFromFilesUnused = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~abortCalculation();
|
virtual ~abortCalculation();
|
||||||
@ -164,6 +177,7 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,7 +43,7 @@ SourceFiles
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
typedef OutputFilterFunctionObject<abortCalculation>
|
typedef OutputFilterFunctionObject<functionObjects::abortCalculation>
|
||||||
abortCalculationFunctionObject;
|
abortCalculationFunctionObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -31,13 +31,16 @@ License
|
|||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(systemCall, 0);
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(systemCall, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::systemCall::systemCall
|
Foam::functionObjects::systemCall::systemCall
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const objectRegistry&,
|
const objectRegistry&,
|
||||||
@ -54,15 +57,27 @@ Foam::systemCall::systemCall
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::functionObjects::systemCall::viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry& obr,
|
||||||
|
const dictionary& dict,
|
||||||
|
const bool loadFromFiles
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::systemCall::~systemCall()
|
Foam::functionObjects::systemCall::~systemCall()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::systemCall::read(const dictionary& dict)
|
void Foam::functionObjects::systemCall::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
dict.readIfPresent("executeCalls", executeCalls_);
|
dict.readIfPresent("executeCalls", executeCalls_);
|
||||||
dict.readIfPresent("endCalls", endCalls_);
|
dict.readIfPresent("endCalls", endCalls_);
|
||||||
@ -93,7 +108,7 @@ void Foam::systemCall::read(const dictionary& dict)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::systemCall::execute()
|
void Foam::functionObjects::systemCall::execute()
|
||||||
{
|
{
|
||||||
forAll(executeCalls_, callI)
|
forAll(executeCalls_, callI)
|
||||||
{
|
{
|
||||||
@ -102,7 +117,7 @@ void Foam::systemCall::execute()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::systemCall::end()
|
void Foam::functionObjects::systemCall::end()
|
||||||
{
|
{
|
||||||
forAll(endCalls_, callI)
|
forAll(endCalls_, callI)
|
||||||
{
|
{
|
||||||
@ -111,13 +126,11 @@ void Foam::systemCall::end()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::systemCall::timeSet()
|
void Foam::functionObjects::systemCall::timeSet()
|
||||||
{
|
{}
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::systemCall::write()
|
void Foam::functionObjects::systemCall::write()
|
||||||
{
|
{
|
||||||
forAll(writeCalls_, callI)
|
forAll(writeCalls_, callI)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -22,7 +22,7 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::systemCall
|
Foam::functionObjects::systemCall
|
||||||
|
|
||||||
Group
|
Group
|
||||||
grpFunctionObjects
|
grpFunctionObjects
|
||||||
@ -100,6 +100,9 @@ class dictionary;
|
|||||||
class polyMesh;
|
class polyMesh;
|
||||||
class mapPolyMesh;
|
class mapPolyMesh;
|
||||||
|
|
||||||
|
namespace functionObjects
|
||||||
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class systemCall Declaration
|
Class systemCall Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -152,6 +155,16 @@ public:
|
|||||||
const bool loadFromFilesUnused = false
|
const bool loadFromFilesUnused = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Return true if the construction of this functionObject is viable
|
||||||
|
// i.e. the prerequisites for construction are available
|
||||||
|
static bool viable
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const objectRegistry&,
|
||||||
|
const dictionary&,
|
||||||
|
const bool loadFromFiles = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~systemCall();
|
virtual ~systemCall();
|
||||||
@ -192,6 +205,7 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace functionObjects
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user