Cantera
Install
User Guide
Examples
Reference
Develop
Community
4.0.0a2
Toggle main menu visibility
Loading...
Searching...
No Matches
Heptane.cpp
Go to the documentation of this file.
1
/**
2
* @file Heptane.cpp representation of substance Heptane.
3
*
4
* Values and functions are from "Thermodynamic Properties in SI" by W.C.
5
* Reynolds. AUTHOR: jrh@stanford.edu: GCEP, Stanford University
6
*/
7
8
// This file is part of Cantera. See License.txt in the top-level directory or
9
// at https://cantera.org/license.txt for license and copyright information.
10
11
#include "
Heptane.h
"
12
#include "
cantera/base/stringUtils.h
"
13
14
using namespace
Cantera
;
15
16
namespace
tpx
17
{
18
19
// Heptane constants
20
static
const
double
Tmn = 182.56;
// [K] minimum temperature for which calculations are valid
21
static
const
double
Tmx = 1000.0;
// [K] maximum temperature for which calculations are valid
22
static
const
double
Tc=537.68;
// [K] critical temperature
23
static
const
double
Roc=197.60;
// [kg/m^3] critical density
24
static
const
double
To=300;
// [K] reference Temperature
25
static
const
double
R=82.99504;
// [J/(kg*K)] gas constant (for this substance)
26
static
const
double
Gamma=9.611604E-6;
// [??]
27
static
const
double
u0=3.4058439E5;
// [] internal energy at To
28
static
const
double
s0=1.1080254E3;
// [] entropy at To
29
static
const
double
Tp=400;
// [K] ??
30
static
const
double
Pc=2.6199E6;
// [Pa] critical pressure
31
static
const
double
M=100.20;
// [kg/kmol] molar density
32
33
// array Ahept is used by the function Pp
34
static
const
double
Ahept[]= {
35
2.246032E-3,
36
2.082990E2,
37
5.085746E7,
38
3.566396E9,
39
1.622168E9,
40
1.065237E-5,
41
5.987922E-1,
42
7.736602,
43
1.929386E5,
44
5.291379E-9
45
};
46
47
// array F is used by Psat
48
static
const
double
F[]= {
49
-7.2298764,
50
3.8607475E-1,
51
-3.4216472,
52
4.6274432E-1,
53
-9.7926124,
54
-4.2058094E1,
55
7.5468678E1,
56
3.1758992E2
57
};
58
59
// array D is used by the function ldens
60
static
const
double
D[]= {
61
1.9760405E2,
62
8.9451237E2,
63
-1.1462908E3,
64
1.7996947E3,
65
-1.7250843E3,
66
9.7088329E2
67
};
68
69
// array G is used by the function sp
70
static
const
double
G[]= {
71
1.1925213E5,
72
-7.7231363E2,
73
7.4463527,
74
-3.0888167E-3,
75
0.0,
76
0.0
77
};
78
79
double
Heptane::C
(
int
j,
double
Tinverse,
double
T2inverse,
double
T3inverse,
double
T4inverse)
80
{
81
switch
(j) {
82
case
0:
83
return
Ahept[0] * R * T -
84
Ahept[1] -
85
Ahept[2] * T2inverse +
86
Ahept[3] * T3inverse -
87
Ahept[4] * T4inverse;
88
case
1:
89
return
Ahept[5] * R * T -
90
Ahept[6] -
91
Ahept[7] * Tinverse;
92
case
2:
93
return
Ahept[9] * (Ahept[6] + Ahept[7] * Tinverse);
94
case
3:
95
return
Ahept[8] * T2inverse;
96
default
:
97
return
0.0;
98
}
99
}
100
101
double
Heptane::Cprime
(
int
j,
double
T2inverse,
double
T3inverse,
double
T4inverse)
102
{
103
switch
(j) {
104
case
0:
105
return
Ahept[0] * R -
106
-2 * Ahept[2] * T3inverse +
107
-3 * Ahept[3] * T4inverse -
108
-4 * Ahept[4] * pow(T, -5.0);
109
case
1:
110
return
Ahept[5] * R -
111
-1 * Ahept[7] * T2inverse;
112
case
2:
113
return
Ahept[9] * (-1 * Ahept[7] * T2inverse);
114
case
3:
115
return
-2 * Ahept[8] * T3inverse;
116
default
:
117
return
0.0;
118
}
119
}
120
121
double
Heptane::I
(
int
j,
double
ergho,
double
Gamma)
122
{
123
switch
(j) {
124
case
0:
125
return
Rho;
126
case
1:
127
return
Rho * Rho / 2;
128
case
2:
129
return
pow(Rho, 5.0)/ 5;
130
case
3:
131
return
1 / Gamma - (Gamma * Rho * Rho + 2) * ergho / (2 * Gamma);
132
default
:
133
return
0.0;
134
}
135
}
136
137
double
Heptane::H
(
int
i,
double
egrho)
138
{
139
if
(i < 2) {
140
return
pow(Rho,i+2);
141
}
else
if
(i == 2) {
142
return
pow(Rho,6.0);
143
}
else
if
(i == 3) {
144
return
pow(Rho,3) * (1 + Gamma * Rho * Rho) * egrho;
145
}
else
{
146
return
0;
147
}
148
}
149
150
double
Heptane::up
()
151
{
152
double
Tinverse = 1.0/T;
153
double
T2inverse = pow(T, -2);
154
double
T3inverse = pow(T, -3);
155
double
T4inverse = pow(T, -4);
156
double
egrho = exp(-Gamma*Rho*Rho);
157
158
double
sum = 0.0;
159
int
i;
160
for
(i=1; i<=5; i++) {
161
sum += G[i]*(pow(T,i) - pow(To,i))/
double
(i);
162
}
163
sum += G[0]*log(T/To);
164
for
(i=0; i<=6; i++) {
165
sum += (
C
(i, Tinverse, T2inverse, T3inverse, T4inverse) - T*
Cprime
(i,T2inverse, T3inverse, T4inverse))*
I
(i,egrho, Gamma);
166
}
167
sum += u0;
168
return
sum + m_energy_offset;
169
}
170
171
double
Heptane::sp
()
172
{
173
double
T2inverse = pow(T, -2);
174
double
T3inverse = pow(T, -3);
175
double
T4inverse = pow(T, -4);
176
double
egrho = exp(-Gamma*Rho*Rho);
177
178
double
sum = 0.0;
179
for
(
int
i=2; i<=5; i++) {
180
sum += G[i]*(pow(T,i-1) - pow(To,i-1))/
double
(i-1);
181
}
182
sum += G[1]*log(T/To);
183
sum -= G[0]*(1.0/T - 1.0/To);
184
for
(
int
i=0; i<=6; i++) {
185
sum -=
Cprime
(i,T2inverse, T3inverse, T4inverse)*
I
(i,egrho, Gamma);
186
}
187
sum += s0 - R*log(Rho);
188
return
sum + m_entropy_offset;
189
}
190
191
double
Heptane::Pp
()
192
{
193
double
Tinverse = pow(T,-1);
194
double
T2inverse = pow(T, -2);
195
double
T3inverse = pow(T, -3);
196
double
T4inverse = pow(T, -4);
197
double
egrho = exp(-Gamma*Rho*Rho);
198
199
double
P
= Rho*R*T;
200
for
(
int
i=0; i<=3; i++) {
201
P
+=
C
(i,Tinverse, T2inverse, T3inverse, T4inverse)*
H
(i,egrho);
202
}
203
return
P
;
204
}
205
206
double
Heptane::Psat
()
207
{
208
double
log, sum=0;
209
if
((T < Tmn) || (T > Tc)) {
210
throw
CanteraError
(
"Heptane::Psat"
,
211
"Temperature out of range. T = {}"
, T);
212
}
213
for
(
int
i=1; i<=8; i++) {
214
sum += F[i-1] * pow((T/Tp -1),
double
(i-1));
215
}
216
217
log = ((Tc/T)-1)*sum;
218
return
exp(log)*Pc;
219
}
220
221
double
Heptane::ldens
()
222
{
223
double
xx=1-(T/Tc), sum=0;
224
if
((T < Tmn) || (T > Tc)) {
225
throw
CanteraError
(
"Heptane::ldens"
,
226
"Temperature out of range. T = {}"
, T);
227
}
228
for
(
int
i=1; i<=6; i++) {
229
sum+=D[i-1]*pow(xx,
double
(i-1)/3.0);
230
}
231
232
return
sum;
233
}
234
235
// The following functions allow users to get the properties of Heptane that
236
// are not dependent on the state
237
238
double
Heptane::Tcrit
()
239
{
240
return
Tc;
241
}
242
double
Heptane::Pcrit
()
243
{
244
return
Pc;
245
}
246
double
Heptane::Vcrit
()
247
{
248
return
1.0/Roc;
249
}
250
double
Heptane::Tmin
()
251
{
252
return
Tmn;
253
}
254
double
Heptane::Tmax
()
255
{
256
return
Tmx;
257
}
258
double
Heptane::MolWt
()
259
{
260
return
M;
261
}
262
}
Heptane.h
Cantera::CanteraError
Base class for exceptions thrown by Cantera classes.
Definition
ctexceptions.h:66
tpx::Heptane::Tmax
double Tmax() override
Maximum temperature for which the equation of state is valid.
Definition
Heptane.cpp:254
tpx::Heptane::up
double up() override
Internal energy.
Definition
Heptane.cpp:150
tpx::Heptane::ldens
double ldens() override
liquid density. Equation D2 in Reynolds.
Definition
Heptane.cpp:221
tpx::Heptane::I
double I(int i, double, double)
I = integral from o-rho { 1/(rho^2) * H(i, rho) d rho } ( see section 2 of Reynolds TPSI ).
Definition
Heptane.cpp:121
tpx::Heptane::Tmin
double Tmin() override
Minimum temperature for which the equation of state is valid.
Definition
Heptane.cpp:250
tpx::Heptane::Tcrit
double Tcrit() override
Critical temperature [K].
Definition
Heptane.cpp:238
tpx::Heptane::sp
double sp() override
Entropy. See Reynolds eqn (16) section 2.
Definition
Heptane.cpp:171
tpx::Heptane::Pp
double Pp() override
Pressure. Equation P-2 in Reynolds.
Definition
Heptane.cpp:191
tpx::Heptane::MolWt
double MolWt() override
Molecular weight [kg/kmol].
Definition
Heptane.cpp:258
tpx::Heptane::H
double H(int i, double egrho)
H returns a multiplier in each term of the sum in P-2.
Definition
Heptane.cpp:137
tpx::Heptane::C
double C(int jm, double, double, double, double)
C returns a multiplier in each term of the sum in P-2, used in conjunction with C in the function Pp.
Definition
Heptane.cpp:79
tpx::Heptane::Vcrit
double Vcrit() override
Critical specific volume [m^3/kg].
Definition
Heptane.cpp:246
tpx::Heptane::Pcrit
double Pcrit() override
Critical pressure [Pa].
Definition
Heptane.cpp:242
tpx::Heptane::Psat
double Psat() override
Pressure at Saturation. Equation S-2 in Reynolds.
Definition
Heptane.cpp:206
tpx::Heptane::Cprime
double Cprime(int i, double, double, double)
derivative of C(i)
Definition
Heptane.cpp:101
tpx::Substance::P
double P()
Pressure [Pa].
Definition
Sub.cpp:37
Cantera
Namespace for the Cantera kernel.
Definition
AnyMap.cpp:595
stringUtils.h
Contains declarations for string manipulation functions within Cantera.
src
tpx
Heptane.cpp
Generated by
1.17.0