Cantera 2.6.0
HFC134a.cpp
Go to the documentation of this file.
1//! @file HFC134a.cpp
2
3// This file is part of Cantera. See License.txt in the top-level directory or
4// at https://cantera.org/license.txt for license and copyright information.
5
6#include "HFC134a.h"
8
9using namespace Cantera;
10
11namespace tpx
12{
13
14const double
15M = 102.032,
16Tmn = 170.0,
17Tmx = 455.0,
18Tc = 374.18,
19Pc = 4056290.0,
20Roc = 508.0,
21R = 81.48885644;
22
23const double a134[] = {
24 0.5586817e-1,
25 0.4982230,
26 0.2458698e-1,
27 0.8570145e-3,
28 0.4788584e-3,
29 -0.1800808e1,
30 0.2671641,
31 -0.4781652e-1,
32 0.1423987e-1,
33 0.3324062,
34 -0.7485907e-2,
35 0.1017263e-3,
36 -0.5184567,
37 -0.8692288e-1,
38 0.2057144,
39 -0.5000457e-2,
40 0.4603262e-3,
41 -0.3497836e-2,
42 0.6995038e-2,
43 -0.1452184e-1,
44 -0.1285458e-3
45};
46
47const double t134[] = {
48 -0.5, 0.0, 0.0, 0.0, 1.5, 1.5, 2.0, 2.0, 1.0, 3.0, 5.0,
49 1.0, 5.0, 5.0, 6.0, 10.0, 10.0, 10.0, 18.0, 22.0, 50.0
50};
51
52const int d134[] = {
53 2, 1, 3, 6, 6, 1, 1, 2, 5, 2, 2,
54 4, 1, 4, 1, 2, 4, 1, 5, 3, 10
55};
56
57const double b134[] = {
58 -1.019535,
59 9.047135,
60 -1.629789,
61 -9.723916,
62 -3.927170
63};
64
65double HFC134a::fp()
66{
67 double sum1 = 0.0, sum2 = 0.0, sum3 = 0.0,
68 sum4 = 0.0, sum5 = 0.0;
69 double tau = Tc/T;
70 double delta = Rho/Roc;
71
72 double phi0 = b134[0] + b134[1]*tau + b134[2]*log(tau)
73 + log(delta) + b134[3]/sqrt(tau) + b134[4]*pow(tau,-0.75);
74 int i;
75 for (i = 0; i<8; i++) {
76 sum1 += a134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
77 }
78 for (i = 8; i<11; i++) {
79 sum2 += a134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
80 }
81 for (i = 11; i<17; i++) {
82 sum3 += a134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
83 }
84 for (i = 17; i<20; i++) {
85 sum4 += a134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
86 }
87 sum5 = a134[20]*pow(tau,t134[20])*pow(delta,d134[20]);
88 double phir = sum1 + exp(-delta)*sum2 + exp(-delta*delta)*sum3
89 + exp(-delta*delta*delta)*sum4
90 + exp(-delta*delta*delta*delta)*sum5;
91 return R*T*(phir + phi0);
92}
93
95{
96 double sum1 = 0.0, sum2 = 0.0, sum3 = 0.0,
97 sum4 = 0.0, sum5 = 0.0;
98 double tau = Tc/T;
99 double delta = Rho/Roc;
100
101 double phi0t = b134[1]*tau + b134[2]
102 - 0.5*b134[3]*pow(tau,-0.5) - 0.75*b134[4]*pow(tau,-0.75);
103 int i;
104 for (i = 0; i<8; i++) {
105 sum1 += a134[i]*t134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
106 }
107 for (i = 8; i<11; i++) {
108 sum2 += a134[i]*t134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
109 }
110 for (i = 11; i<17; i++) {
111 sum3 += a134[i]*t134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
112 }
113 for (i = 17; i<20; i++) {
114 sum4 += a134[i]*t134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
115 }
116 sum5 = a134[20]*t134[20]*pow(tau,t134[20])*pow(delta,d134[20]);
117 double phirt = sum1 + exp(-delta)*sum2 + exp(-delta*delta)*sum3
118 + exp(-delta*delta*delta)*sum4
119 + exp(-delta*delta*delta*delta)*sum5;
120 return R*T*(phirt + phi0t) + m_energy_offset;
121}
122
123double HFC134a::Pp()
124{
125 double sum1 = 0.0, sum2 = 0.0, sum3 = 0.0,
126 sum4 = 0.0, sum5 = 0.0;
127 double tau = Tc/T;
128 double delta = Rho/Roc;
129 double phi0d = 1.0/delta;
130
131 int i;
132 for (i = 0; i<8; i++) {
133 sum1 += a134[i]*pow(tau,t134[i])*d134[i]*pow(delta,d134[i]-1);
134 }
135 for (i = 8; i<11; i++) {
136 sum2 += a134[i]*pow(tau,t134[i])*(d134[i] - delta)*pow(delta,d134[i]-1);
137 }
138 sum2 *= exp(-delta);
139 double dk = delta*delta;
140 for (i = 11; i<17; i++) {
141 sum3 += a134[i]*pow(tau,t134[i])*(d134[i] - 2.0*dk)*pow(delta,d134[i]-1);
142 }
143 sum3 *= exp(-dk);
144 dk *= delta;
145 for (i = 17; i<20; i++) {
146 sum4 += a134[i]*pow(tau,t134[i])*(d134[i] - 3.0*dk)*pow(delta,d134[i]-1);
147 }
148 sum4 *= exp(-dk);
149 dk *= delta;
150 sum5 = a134[20]*pow(tau,t134[20])*(d134[20] - 4.0*dk)*pow(delta,d134[20]-1);
151 sum5 *= exp(-dk);
152 double phird = sum1 + sum2 + sum3 + sum4 + sum5;
153 return R*T*delta*delta*Roc*(phird + phi0d);
154}
155
157{
158 if ((T < Tmn) || (T > Tc)) {
159 throw CanteraError("HFC134a::Psat",
160 "Temperature out of range. T = {}", T);
161 }
162 double x1 = T/Tc;
163 double x2 = 1.0 - x1;
164 double f = -7.686556*x2 + 2.311791*pow(x2,1.5)
165 - 2.039554*x2*x2 - 3.583758*pow(x2,4);
166 return Pc*exp(f/x1);
167}
168
169double HFC134a::ldens()
170{
171 if ((T < Tmn) || (T > Tc)) {
172 throw CanteraError("HFC134a::ldens",
173 "Temperature out of range. T = {}", T);
174 }
175 double x1 = T/Tc;
176 double x2 = 1.0 - x1;
177 return 518.2 + 884.13*pow(x2,1.0/3.0) + 485.84*pow(x2,2.0/3.0)
178 + 193.29*pow(x2,10.0/3.0);
179}
180
182{
183 return 374.21;
184}
186{
187 return 4059280.0;
188}
190{
191 return 1.0/511.95;
192}
194{
195 return Tmn;
196}
198{
199 return Tmx;
200}
202{
203 return M;
204}
205
206}
Base class for exceptions thrown by Cantera classes.
Definition: ctexceptions.h:61
double Vcrit()
Critical specific volume [m^3/kg].
Definition: HFC134a.cpp:189
double Tmax()
Maximum temperature for which the equation of state is valid.
Definition: HFC134a.cpp:197
double Tmin()
Minimum temperature for which the equation of state is valid.
Definition: HFC134a.cpp:193
double MolWt()
Molecular weight [kg/kmol].
Definition: HFC134a.cpp:201
double Tcrit()
Critical temperature [K].
Definition: HFC134a.cpp:181
double Pcrit()
Critical pressure [Pa].
Definition: HFC134a.cpp:185
double Psat()
Saturation pressure, Pa.
Definition: HFC134a.cpp:156
double up()
Internal energy of a single-phase state.
Definition: HFC134a.cpp:94
double f()
Helmholtz function [J/kg].
Definition: Sub.h:114
Namespace for the Cantera kernel.
Definition: AnyMap.h:29
Contains declarations for string manipulation functions within Cantera.