liquidProperties.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) 2019-2020 OpenCFD Ltd.
10 -------------------------------------------------------------------------------
11 License
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 "liquidProperties.H"
30 #include "HashTable.H"
31 
32 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
33 
34 namespace Foam
35 {
36  defineTypeNameAndDebug(liquidProperties, 0);
37  defineRunTimeSelectionTable(liquidProperties,);
38  defineRunTimeSelectionTable(liquidProperties, dictionary);
39 }
40 
41 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
42 
44 (
45  scalar W,
46  scalar Tc,
47  scalar Pc,
48  scalar Vc,
49  scalar Zc,
50  scalar Tt,
51  scalar Pt,
52  scalar Tb,
53  scalar dipm,
54  scalar omega,
55  scalar delta
56 )
57 :
59  Tc_(Tc),
60  Pc_(Pc),
61  Vc_(Vc),
62  Zc_(Zc),
63  Tt_(Tt),
64  Pt_(Pt),
65  Tb_(Tb),
66  dipm_(dipm),
67  omega_(omega),
68  delta_(delta)
69 {}
70 
71 
73 :
75  Tc_(dict.get<label>("Tc")),
76  Pc_(dict.get<label>("Pc")),
77  Vc_(dict.get<label>("Vc")),
78  Zc_(dict.get<label>("Zc")),
79  Tt_(dict.get<label>("Tt")),
80  Pt_(dict.get<label>("Pt")),
81  Tb_(dict.get<label>("Tb")),
82  dipm_(dict.get<label>("dipm")),
83  omega_(dict.get<label>("omega")),
84  delta_(dict.get<label>("delta"))
85 {}
86 
87 
88 // * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * //
89 
91 (
92  const word& name
93 )
94 {
95  DebugInFunction << "Constructing liquidProperties" << nl;
96 
97  auto cstrIter = ConstructorTablePtr_->cfind(name);
98 
99  if (!cstrIter.found())
100  {
102  (
103  "liquidProperties",
104  name,
105  *ConstructorTablePtr_
106  ) << exit(FatalError);
107  }
108 
109  return autoPtr<liquidProperties>(cstrIter()());
110 }
111 
112 
114 (
115  const dictionary& dict
116 )
117 {
118  DebugInFunction << "Constructing liquidProperties" << nl;
119 
120  const word liquidType(dict.dictName());
121 
122  if (dict.found("defaultCoeffs"))
123  {
124  // Backward-compatibility
125 
126  if (dict.get<bool>("defaultCoeffs"))
127  {
128  return New(liquidType);
129  }
130 
131  auto cstrIter = dictionaryConstructorTablePtr_->cfind(liquidType);
132 
133  if (!cstrIter.found())
134  {
136  (
137  dict,
138  "liquidProperties",
139  liquidType,
140  *dictionaryConstructorTablePtr_
141  ) << exit(FatalIOError);
142  }
143 
145  (
146  cstrIter()
147  (
148  dict.optionalSubDict(liquidType + "Coeffs")
149  )
150  );
151  }
152 
153  auto cstrIter = dictionaryConstructorTablePtr_->cfind(liquidType);
154 
155  if (!cstrIter.found())
156  {
158  (
159  dict,
160  "liquidProperties",
161  liquidType,
162  *dictionaryConstructorTablePtr_
163  ) << exit(FatalIOError);
164  }
165 
166  return autoPtr<liquidProperties>(cstrIter()(dict));
167 }
168 
169 
170 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
171 
172 Foam::scalar Foam::liquidProperties::S(scalar p, scalar T) const
173 {
175  return 0;
176 }
177 
178 
179 Foam::scalar Foam::liquidProperties::pvInvert(scalar p) const
180 {
181  // Check for critical and solid phase conditions
182  if (p >= Pc_)
183  {
184  return Tc_;
185  }
186  else if (p < Pt_)
187  {
188  if (debug)
189  {
191  << "Pressure below triple point pressure: "
192  << "p = " << p << " < Pt = " << Pt_ << nl << endl;
193  }
194  return -1;
195  }
196 
197  // Set initial upper and lower bounds
198  scalar Thi = Tc_;
199  scalar Tlo = Tt_;
200 
201  // Initialise T as boiling temperature under normal conditions
202  scalar T = Tb_;
203 
204  while ((Thi - Tlo) > 1.0e-4)
205  {
206  if ((pv(p, T) - p) <= 0)
207  {
208  Tlo = T;
209  }
210  else
211  {
212  Thi = T;
213  }
214 
215  T = (Thi + Tlo)*0.5;
216  }
217 
218  return T;
219 }
220 
221 
223 {
225  dict.readIfPresent("Tc", Tc_);
226  dict.readIfPresent("Pc", Pc_);
227  dict.readIfPresent("Vc", Vc_);
228  dict.readIfPresent("Zc", Zc_);
229  dict.readIfPresent("Tt", Tt_);
230  dict.readIfPresent("Pt", Pt_);
231  dict.readIfPresent("Tb", Tb_);
232  dict.readIfPresent("dipm", dipm_);
233  dict.readIfPresent("omega", omega_);
234  dict.readIfPresent("delta", delta_);
235 }
236 
237 
239 {
241  os << token::SPACE
242  << Tc_ << token::SPACE
243  << Pc_ << token::SPACE
244  << Vc_ << token::SPACE
245  << Zc_ << token::SPACE
246  << Tt_ << token::SPACE
247  << Pt_ << token::SPACE
248  << Tb_ << token::SPACE
249  << dipm_ << token::SPACE
250  << omega_<< token::SPACE
251  << delta_;
252 }
253 
254 
255 // * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
256 
258 {
259  l.writeData(os);
260  return os;
261 }
262 
263 
264 // ************************************************************************* //
Foam::expressions::patchExpr::debug
int debug
Static debugging option.
p
volScalarField & p
Definition: createFieldRefs.H:8
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:62
HashTable.H
Foam::liquidProperties::New
static autoPtr< liquidProperties > New(const word &name)
Return a pointer to a new liquidProperties created from name.
Definition: liquidProperties.C:91
Foam::dictionary::found
bool found(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Search for an entry (const access) with the given keyword.
Definition: dictionary.C:364
Foam::defineRunTimeSelectionTable
defineRunTimeSelectionTable(reactionRateFlameArea, dictionary)
Foam::liquidProperties::writeData
virtual void writeData(Ostream &os) const =0
Write the function coefficients.
Definition: liquidProperties.C:238
Foam::FatalIOError
IOerror FatalIOError
Foam::endl
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:350
Foam::dictionary::get
T get(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Definition: dictionaryTemplates.C:81
Foam::operator<<
Ostream & operator<<(Ostream &, const boundaryPatch &p)
Write boundaryPatch as dictionary entries (without surrounding braces)
Definition: boundaryPatch.C:83
NotImplemented
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
Definition: error.H:445
Foam::thermophysicalProperties
Base-class for thermophysical properties of solids, liquids and gases providing an interface compatib...
Definition: thermophysicalProperties.H:55
Foam::liquidProperties
The thermophysical properties of a liquid.
Definition: liquidProperties.H:51
Foam::liquidProperties::liquidProperties
liquidProperties(scalar W, scalar Tc, scalar Pc, scalar Vc, scalar Zc, scalar Tt, scalar Pt, scalar Tb, scalar dipm, scalar omega, scalar delta)
Construct from components.
Definition: liquidProperties.C:44
FatalIOErrorInLookup
#define FatalIOErrorInLookup(ios, lookupTag, lookupName, lookupTable)
Report an error message using Foam::FatalIOError.
Definition: error.H:406
DebugInFunction
#define DebugInFunction
Report an information message using Foam::Info.
Definition: messageStream.H:365
Foam::name
word name(const complex &c)
Return string representation of complex.
Definition: complex.C:76
delta
scalar delta
Definition: LISASMDCalcMethod2.H:8
Foam::T
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
Definition: FieldFieldFunctions.C:58
Foam::thermophysicalProperties::writeData
virtual void writeData(Ostream &os) const =0
Write the function coefficients.
Definition: thermophysicalProperties.C:115
Foam::liquidProperties::S
scalar S(const scalar p, const scalar T) const
Definition: liquidProperties.C:172
Foam::liquidProperties::pvInvert
virtual scalar pvInvert(scalar p) const
Invert the vapour pressure relationship to retrieve the.
Definition: liquidProperties.C:179
Foam::dictionary::dictName
word dictName() const
The local dictionary name (final part of scoped name)
Definition: dictionary.H:458
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::FatalError
error FatalError
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:121
FatalErrorInLookup
#define FatalErrorInLookup(lookupTag, lookupName, lookupTable)
Report an error message using Foam::FatalError.
Definition: error.H:385
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
liquidProperties.H
Foam::exit
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:130
Foam::New
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh >> &tdf1, const word &name, const dimensionSet &dimensions)
Global function forwards to reuseTmpDimensionedField::New.
Definition: DimensionedFieldReuseFunctions.H:105
Foam::autoPtr< Foam::liquidProperties >
Foam::liquidProperties::readIfPresent
void readIfPresent(const dictionary &dict)
Read and set the properties present it the given dictionary.
Definition: liquidProperties.C:222
Foam::nl
constexpr char nl
Definition: Ostream.H:385
Foam::thermophysicalProperties::readIfPresent
void readIfPresent(const dictionary &dict)
Read and set the properties present it the given dictionary.
Definition: thermophysicalProperties.C:109
Foam::token::SPACE
Space [isspace].
Definition: token.H:117
Foam::constant::electromagnetic::e
const dimensionedScalar e
Elementary charge.
Definition: createFields.H:11
Foam::dictionary::optionalSubDict
const dictionary & optionalSubDict(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Find and return a sub-dictionary, otherwise return this dictionary.
Definition: dictionary.C:645
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:56
Foam::defineTypeNameAndDebug
defineTypeNameAndDebug(combustionModel, 0)
WarningInFunction
#define WarningInFunction
Report a warning using Foam::Warning.
Definition: messageStream.H:303
Foam::dictionary::readIfPresent
bool readIfPresent(const word &keyword, T &val, enum keyType::option matchOpt=keyType::REGEX) const
Definition: dictionaryTemplates.C:417