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-2021 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_(),
43 driver_(1, dict_)
44{
45 if (dict.getOrDefault("debug", false))
46 {
47 debug |= 1;
48 }
49
50 valueExpr_.readEntry("expression", dict_);
51
52 // Basic sanity
53 if (valueExpr_.empty())
54 {
56 << "The expression was not defined!" << nl
58 }
59
60 driver_.readDict(dict_);
61}
62
63
64template<class Type>
66(
68)
69:
70 Function1<Type>(rhs),
71 dict_(rhs.dict_), // Deep copy
72 valueExpr_(rhs.valueExpr_),
73 driver_(1, rhs.driver_, dict_)
74{}
75
76
77// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
78
79template<class Type>
81(
82 const scalar x
83) const
84{
85 // Expression evaluation
86 driver_.clearVariables();
87
88 driver_.setArgument(x);
89
90 driver_.resetDb(this->whichDb());
91
92 driver_.parse(this->valueExpr_);
93
94 expressions::exprResult result(driver_.result());
95
97 << "Evaluated: " << result << nl;
98
99 if (!result.hasValue() || !result.size() || !result.isType<Type>())
100 {
102 << "Could not evaluate: " << this->valueExpr_ << nl
103 << "Result size:" << result.size()
104 << " type:" << result.valueType() << nl
105 << exit(FatalError);
106 }
107
108 return result.cref<Type>().first();
109}
110
111
112template<class Type>
114(
115 const scalar x1,
116 const scalar x2
117) const
118{
120 return Zero;
121}
122
123
124template<class Type>
126(
127 Ostream& os
128) const
129{
130 // Function1-from-subdict so output dictionary contains
131 // only the relevant entries.
132 dict_.writeEntry(this->name(), os);
133}
134
135
136// ************************************************************************* //
Function1 with values supplied by a parsed expression.
virtual Type integrate(const scalar x1, const scalar x2) const
Integrate between two values.
Top level data entry class for use in dictionaries. Provides a mechanism to specify a variable as a c...
Definition: Function1.H:96
const word const dictionary & dict
Definition: Function1.H:134
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:62
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:126
virtual bool readDict(const dictionary &dict)
Read variables, tables etc.
Definition: exprDriver.C:297
A polymorphic field/result from evaluating an expression.
Definition: exprResult.H:127
const word & valueType() const noexcept
Basic type for the field or single value.
Definition: exprResultI.H:235
label size() const
The field or object size.
Definition: exprResultI.H:281
bool isType() const
True if valueType corresponds to the given Type.
Definition: exprResultI.H:257
const Field< Type > & cref() const
Return const reference to the field.
bool hasValue() const
Has a value?
Definition: exprResultI.H:228
bool readEntry(const word &keyword, const dictionary &dict, bool mandatory=true, const bool stripComments=true)
Definition: exprString.C:103
void resetDb(const objectRegistry *obrPtr=nullptr) noexcept
Reset the associated objectRegistry.
Registry of regIOobjects.
A class for handling words, derived from Foam::string.
Definition: word.H:68
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
Definition: error.H:517
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
Definition: error.H:473
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:453
OBJstream os(runTime.globalPath()/outputName)
#define DebugInfo
Report an information message using Foam::Info.
IOerror FatalIOError
static constexpr const zero Zero
Global zero (0)
Definition: zero.H:131
error FatalError
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
Definition: exprTraits.C:59
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:130
constexpr char nl
The newline '\n' character (0x0a)
Definition: Ostream.H:53
dictionary dict