Skip to content
Snippets Groups Projects
Commit bc2b469f authored by Andrew Heather's avatar Andrew Heather Committed by Mark OLESEN
Browse files

ENH: Added new Function1: FunctionObjectValue

Returns a value retrieved from a function object result.

Usage:
    <entryName> functionObjectValue;
    <entryName>Coeffs
    {
        functionObject          <name>;
        functionObjectResult    <function object result field name>
    }
parent 2c2310dc
No related branches found
No related tags found
1 merge request!499Function1 objectRegistry access
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "FunctionObjectValue.H"
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class Type>
void Foam::Function1Types::FunctionObjectValue<Type>::read
(
const dictionary& coeffs
)
{
foName_ = coeffs.get<word>("functionObject");
foResultName_ = coeffs.get<word>("functionObjectResult");
haveDefaultValue_ = coeffs.readIfPresent("defaultValue", defaultValue_);
}
template<class Type>
Foam::Function1Types::FunctionObjectValue<Type>::FunctionObjectValue
(
const word& entryName,
const dictionary& dict,
const objectRegistry* obrPtr
)
:
Function1<Type>(entryName, dict, obrPtr),
foName_(),
foResultName_(),
defaultValue_(Zero),
haveDefaultValue_(false)
{
read(dict);
}
template<class Type>
Foam::Function1Types::FunctionObjectValue<Type>::FunctionObjectValue
(
const FunctionObjectValue<Type>& rhs
)
:
Function1<Type>(rhs),
foName_(rhs.foName_),
foResultName_(rhs.foResultName_),
defaultValue_(rhs.defaultValue_),
haveDefaultValue_(rhs.haveDefaultValue_)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Type>
void Foam::Function1Types::FunctionObjectValue<Type>::writeEntries
(
Ostream& os
) const
{
os.writeEntry("functionObject", foName_);
os.writeEntry("functionObjectResult", foResultName_);
if (haveDefaultValue_)
{
os.writeEntry("defaultValue", defaultValue_);
}
}
template<class Type>
void Foam::Function1Types::FunctionObjectValue<Type>::writeData
(
Ostream& os
) const
{
Function1<Type>::writeData(os);
os.endEntry();
os.beginBlock(word(this->name() + "Coeffs"));
writeEntries(os);
os.endBlock();
}
// ************************************************************************* //
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::Function1Types::FunctionObjectValue
Description
Returns a value retrieved from a function object result.
Usage:
\verbatim
<entryName> functionObjectValue;
<entryName>Coeffs
{
functionObject <name>;
functionObjectResult <function object result field>;
defaultValue <value>; // optional
}
\endverbatim
Note
- does not implement integrate()
SourceFiles
FunctionObjectValue.C
\*---------------------------------------------------------------------------*/
#ifndef Function1Types_FunctionObjectValue_H
#define Function1Types_FunctionObjectValue_H
#include "Function1.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace Function1Types
{
/*---------------------------------------------------------------------------*\
Class FunctionObjectValue Declaration
\*---------------------------------------------------------------------------*/
template<class Type>
class FunctionObjectValue
:
public Function1<Type>
{
// Private Data
//- Function object name
word foName_;
//- Function object result name
word foResultName_;
//- Default value when function object result is unavailable
Type defaultValue_;
//- Flag to indicate that default value is available
bool haveDefaultValue_;
// Private Member Functions
//- Read the coefficients from the given dictionary
void read(const dictionary& coeffs);
public:
//- Runtime type information
TypeName("functionObjectValue");
// Generated Methods
//- No copy assignment
void operator=(const FunctionObjectValue<Type>&) = delete;
// Constructors
//- Construct from entry name, dictionary and optional registry
FunctionObjectValue
(
const word& entryName,
const dictionary& dict,
const objectRegistry* obrPtr = nullptr
);
//- Copy construct
explicit FunctionObjectValue(const FunctionObjectValue<Type>& rhs);
//- Construct and return a clone
virtual tmp<Function1<Type>> clone() const
{
return tmp<Function1<Type>>(new FunctionObjectValue<Type>(*this));
}
//- Destructor
virtual ~FunctionObjectValue() = default;
// Member Functions
//- Return value for time t
virtual inline Type value(const scalar t) const;
//- Integrate between two (scalar) values
virtual Type integrate(const scalar x1, const scalar x2) const;
//- Write in dictionary format
virtual void writeData(Ostream& os) const;
//- Write coefficient entries in dictionary format
void writeEntries(Ostream& os) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Function1Types
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "FunctionObjectValueI.H"
#ifdef NoRepository
#include "FunctionObjectValue.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "FunctionObjectValue.H"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Type>
inline Type Foam::Function1Types::FunctionObjectValue<Type>::value
(
const scalar /*unused*/
) const
{
const auto& props = this->time().functionObjects().propsDict();
if (!props.hasResultObject(foName_))
{
if (haveDefaultValue_)
{
Info<< " Function object " << foName_
<< " not found; using default value " << defaultValue_
<< endl;
return defaultValue_;
}
FatalErrorInFunction
<< "Function object " << foName_
<< " results not found. Valid objects with results include: "
<< props.objectResultNames()
<< exit(FatalError);
}
if (!props.hasResultObjectEntry(foName_, foResultName_))
{
if (haveDefaultValue_)
{
Info<< " Function object " << foName_
<< " result " << foResultName_
<< " not found; using default value " << defaultValue_
<< endl;
return defaultValue_;
}
FatalErrorInFunction
<< "Function object " << foName_
<< " does not have a result field " << foResultName_ << nl
<< " Available result fields include: "
<< props.objectResultEntries(foName_)
<< exit(FatalError);
}
Info<< " Using " << foName_ << " function object value" << endl;
return props.template getObjectResult<Type>(foName_, foResultName_);
}
template<class Type>
inline Type Foam::Function1Types::FunctionObjectValue<Type>::integrate
(
const scalar x1,
const scalar x2
) const
{
NotImplemented;
return pTraits<Type>::zero;
}
// ************************************************************************* //
...@@ -39,6 +39,7 @@ License ...@@ -39,6 +39,7 @@ License
#include "TableFile.H" #include "TableFile.H"
#include "Scale.H" #include "Scale.H"
#include "LimitRange.H" #include "LimitRange.H"
#include "FunctionObjectValue.H"
#include "fieldTypes.H" #include "fieldTypes.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
...@@ -57,7 +58,8 @@ License ...@@ -57,7 +58,8 @@ License
makeFunction1Type(Table, Type); \ makeFunction1Type(Table, Type); \
makeFunction1Type(TableFile, Type); \ makeFunction1Type(TableFile, Type); \
makeFunction1Type(Scale, Type); \ makeFunction1Type(Scale, Type); \
makeFunction1Type(LimitRange, Type); makeFunction1Type(LimitRange, Type); \
makeFunction1Type(FunctionObjectValue, Type);
#define makeFieldFunction1s(Type) \ #define makeFieldFunction1s(Type) \
makeFunction1(Type); \ makeFunction1(Type); \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment