Loading...
Searching...
No Matches
Function1Expression.C
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2020-2022 OpenCFD Ltd.
9-------------------------------------------------------------------------------
10License
11 This file is part of OpenFOAM.
12
13 OpenFOAM is free software: you can redistribute it and/or modify it
14 under the terms of the GNU General Public License as published by
15 the Free Software Foundation, either version 3 of the License, or
16 (at your option) any later version.
17
18 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25
26\*---------------------------------------------------------------------------*/
27
28#include "Function1Expression.H"
29
30// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
31
32template<class Type>
34(
35 const word& entryName,
36 const dictionary& dict,
37 const objectRegistry* obrPtr
38)
39:
40 Function1<Type>(entryName, dict, obrPtr),
41 dict_(dict), // Deep copy
42 valueExpr_("expression", dict_),
43 driver_(1, dict_) // size=1
44{
45 if (dict.getOrDefault("debug", false))
46 {
47 debug |= 1;
48 }
49
50 // Basic sanity
51 if (valueExpr_.empty())
52 {
53 FatalIOErrorInFunction(dict_)
54 << "The expression was not defined!" << nl
55 << exit(FatalIOError);
56 }
57
58 driver_.readDict(dict_);
59}
60
61
62template<class Type>
64(
66)
67:
68 Function1<Type>(rhs),
69 dict_(rhs.dict_), // Deep copy
70 valueExpr_(rhs.valueExpr_),
71 driver_(1, rhs.driver_, dict_) // size=1
72{}
73
74
75// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
76
77template<class Type>
79(
80 const scalar x
81) const
82{
83 // Expression evaluation
84 driver_.clearVariables();
85
86 driver_.setArgument(x);
87
88 driver_.resetDb(this->whichDb());
89
90 driver_.parse(this->valueExpr_);
91
92 expressions::exprResult result(driver_.result());
93
95 << "Evaluated: " << result << nl;
96
97 if (!result.hasValue() || !result.size() || !result.isType<Type>())
98 {
100 << "Could not evaluate: " << this->valueExpr_ << nl
101 << "Result size:" << result.size()
102 << " type:" << result.valueType() << nl
103 << exit(FatalError);
105
106 return result.cref<Type>().first();
107}
108
109
110template<class Type>
112(
113 const scalar x1,
114 const scalar x2
115) const
118 return Type();
119}
120
121
122template<class Type>
124(
125 Ostream& os
126) const
127{
128 // Function1-from-subdict so output dictionary contains
129 // only the relevant entries.
130 dict_.writeEntry(this->name(), os);
131}
132
133
134// ************************************************************************* //
if(patchID !=-1)
Function1 with values supplied by a parsed expression.
virtual void writeData(Ostream &os) const
Write in dictionary format.
virtual Type value(const scalar x) const
Return value.
virtual Type integrate(const scalar x1, const scalar x2) const
Integrate between two values.
Function1Expression(const word &entryName, const dictionary &dict, const objectRegistry *obrPtr=nullptr)
Construct from entry name, dictionary and optional registry.
Top level data entry class for use in dictionaries. Provides a mechanism to specify a variable as a c...
Definition Function1.H:92
Function1(const word &entryName, const objectRegistry *obrPtr=nullptr)
Construct from entry name.
Definition Function1.C:31
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition Ostream.H:59
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition dictionary.H:133
A polymorphic field/result from evaluating an expression.
Definition exprResult.H:122
const word & valueType() const noexcept
Basic type for the field or single value.
label size() const
The field or object size.
bool isType() const
True if valueType corresponds to the given Type.
const Field< Type > & cref() const
Return const reference to the field.
bool hasValue() const
Has a value?
Registry of regIOobjects.
A class for handling words, derived from Foam::string.
Definition word.H:66
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
Definition error.H:688
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition error.H:600
OBJstream os(runTime.globalPath()/outputName)
auto & name
#define DebugInfo
Report an information message using Foam::Info.
void rhs(fvMatrix< typename Expr::value_type > &m, const Expr &expression)
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition errorManip.H:125
constexpr char nl
The newline '\n' character (0x0a).
Definition Ostream.H:50
dictionary dict