Constant.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) 2011-2017 OpenFOAM Foundation
9 Copyright (C) 2015-2021 OpenCFD Ltd.
10-------------------------------------------------------------------------------
11License
12 This file is part of OpenFOAM.
13
14 OpenFOAM is free software: you can redistribute it and/or modify it
15 under the terms of the GNU General Public License as published by
16 the Free Software Foundation, either version 3 of the License, or
17 (at your option) any later version.
18
19 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 for more details.
23
24 You should have received a copy of the GNU General Public License
25 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26
27\*---------------------------------------------------------------------------*/
28
29#include "Constant.H"
30
31// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
32
33template<class Type>
35(
36 const word& entryName,
37 const Type& value,
38 const objectRegistry* obrPtr
39)
40:
41 Function1<Type>(entryName, obrPtr),
42 value_(value)
43{}
44
45
46template<class Type>
48(
49 const word& entryName,
50 const dictionary& dict,
51 const objectRegistry* obrPtr
52)
53:
54 Function1<Type>(entryName, dict, obrPtr),
55 value_(Zero)
56{
57 const entry* eptr = dict.findEntry(entryName, keyType::LITERAL);
58
59 if (eptr && eptr->isStream())
60 {
61 // Primitive (inline) format. Eg,
62 // - key constant 1.2;
63 // - key 1.2;
64
65 ITstream& is = eptr->stream();
66 if (is.peek().isWord())
67 {
68 is.skip(); // Discard leading 'constant'
69 }
70 is >> value_;
71 dict.checkITstream(is, entryName);
72 }
73 else
74 {
75 // Dictionary format. Eg,
76 // key { type constant; value 1.2; }
77
78 dict.readEntry("value", value_);
79 }
80}
81
82
83template<class Type>
85(
86 const word& entryName,
87 Istream& is
88)
89:
90 Function1<Type>(entryName),
91 value_(pTraits<Type>(is))
92{}
93
94
95template<class Type>
97:
98 Function1<Type>(rhs),
99 value_(rhs.value_)
100{}
101
102
103// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
104
105template<class Type>
107(
108 const scalarField& x
109) const
110{
111 return tmp<Field<Type>>::New(x.size(), value_);
112}
113
114
115template<class Type>
117{
119
120 os << token::SPACE << value_;
121 os.endEntry();
122}
123
124
125// ************************************************************************* //
Templated function that returns a constant value.
Definition: Constant.H:75
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
const word & entryName
Definition: Function1.H:133
An input stream of tokens.
Definition: ITstream.H:56
const token & peek() const
Failsafe peek at what the next read would return,.
Definition: ITstream.C:352
void skip(label n=1)
Move tokenIndex relative to the current position.
Definition: ITstream.C:411
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
Definition: Istream.H:64
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
A keyword and a list of tokens is an 'entry'.
Definition: entry.H:70
virtual ITstream & stream() const =0
Return token stream, if entry is a primitive entry.
virtual bool isStream() const noexcept
Return true if this entry is a stream.
Definition: entry.H:223
@ LITERAL
String literal.
Definition: keyType.H:81
Registry of regIOobjects.
A traits class, which is primarily used for primitives.
Definition: pTraits.H:59
A class for managing temporary objects.
Definition: tmp.H:65
@ SPACE
Space [isspace].
Definition: token.H:125
bool isWord() const noexcept
Token is word-variant (WORD, DIRECTIVE)
Definition: tokenI.H:609
A class for handling words, derived from Foam::string.
Definition: word.H:68
OBJstream os(runTime.globalPath()/outputName)
static constexpr const zero Zero
Global zero (0)
Definition: zero.H:131
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh > > &tdf1, const word &name, const dimensionSet &dimensions)
Global function forwards to reuseTmpDimensionedField::New.
dictionary dict