Cantera  2.1.2
HFC134a.cpp
Go to the documentation of this file.
1 //! @file HFC134a.cpp
2 
3 #include "HFC134a.h"
5 
6 using namespace Cantera;
7 
8 namespace tpx
9 {
10 
11 const double
12 M = 102.032,
13 Tmn = 170.0,
14 Tmx = 455.0,
15 Tc = 374.18,
16 Pc = 4056290.0,
17 Roc = 508.0,
18 R = 81.48885644;
19 
20 const double a134[] = {
21  0.5586817e-1,
22  0.4982230,
23  0.2458698e-1,
24  0.8570145e-3,
25  0.4788584e-3,
26  -0.1800808e1,
27  0.2671641,
28  -0.4781652e-1,
29  0.1423987e-1,
30  0.3324062,
31  -0.7485907e-2,
32  0.1017263e-3,
33  -0.5184567,
34  -0.8692288e-1,
35  0.2057144,
36  -0.5000457e-2,
37  0.4603262e-3,
38  -0.3497836e-2,
39  0.6995038e-2,
40  -0.1452184e-1,
41  -0.1285458e-3
42 };
43 
44 const double t134[] = {
45  -0.5, 0.0, 0.0, 0.0, 1.5, 1.5, 2.0, 2.0, 1.0, 3.0, 5.0,
46  1.0, 5.0, 5.0, 6.0, 10.0, 10.0, 10.0, 18.0, 22.0, 50.0
47 };
48 
49 const int d134[] = {
50  2, 1, 3, 6, 6, 1, 1, 2, 5, 2, 2,
51  4, 1, 4, 1, 2, 4, 1, 5, 3, 10
52 };
53 
54 const double b134[] = {
55  -1.019535,
56  9.047135,
57  -1.629789,
58  -9.723916,
59  -3.927170
60 };
61 
62 double HFC134a::fp()
63 {
64  double sum1 = 0.0, sum2 = 0.0, sum3 = 0.0,
65  sum4 = 0.0, sum5 = 0.0;
66  double tau = Tc/T;
67  double delta = Rho/Roc;
68 
69  double phi0 = b134[0] + b134[1]*tau + b134[2]*log(tau)
70  + log(delta) + b134[3]/sqrt(tau) + b134[4]*pow(tau,-0.75);
71  int i;
72  for (i = 0; i<8; i++) {
73  sum1 += a134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
74  }
75  for (i = 8; i<11; i++) {
76  sum2 += a134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
77  }
78  for (i = 11; i<17; i++) {
79  sum3 += a134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
80  }
81  for (i = 17; i<20; i++) {
82  sum4 += a134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
83  }
84  sum5 = a134[20]*pow(tau,t134[20])*pow(delta,d134[20]);
85  double phir = sum1 + exp(-delta)*sum2 + exp(-delta*delta)*sum3
86  + exp(-delta*delta*delta)*sum4
87  + exp(-delta*delta*delta*delta)*sum5;
88  return R*T*(phir + phi0);
89 }
90 
91 double HFC134a::up()
92 {
93  double sum1 = 0.0, sum2 = 0.0, sum3 = 0.0,
94  sum4 = 0.0, sum5 = 0.0;
95  double tau = Tc/T;
96  double delta = Rho/Roc;
97 
98  double phi0t = b134[1]*tau + b134[2]
99  - 0.5*b134[3]*pow(tau,-0.5) - 0.75*b134[4]*pow(tau,-0.75);
100  int i;
101  for (i = 0; i<8; i++) {
102  sum1 += a134[i]*t134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
103  }
104  for (i = 8; i<11; i++) {
105  sum2 += a134[i]*t134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
106  }
107  for (i = 11; i<17; i++) {
108  sum3 += a134[i]*t134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
109  }
110  for (i = 17; i<20; i++) {
111  sum4 += a134[i]*t134[i]*pow(tau,t134[i])*pow(delta,d134[i]);
112  }
113  sum5 = a134[20]*t134[20]*pow(tau,t134[20])*pow(delta,d134[20]);
114  double phirt = sum1 + exp(-delta)*sum2 + exp(-delta*delta)*sum3
115  + exp(-delta*delta*delta)*sum4
116  + exp(-delta*delta*delta*delta)*sum5;
117  return R*T*(phirt + phi0t) + m_energy_offset;
118 }
119 
120 double HFC134a::Pp()
121 {
122  double sum1 = 0.0, sum2 = 0.0, sum3 = 0.0,
123  sum4 = 0.0, sum5 = 0.0;
124  double tau = Tc/T;
125  double delta = Rho/Roc;
126 
127  double phi0d = 1.0/delta;
128 
129  int i;
130  for (i = 0; i<8; i++) {
131  sum1 += a134[i]*pow(tau,t134[i])*d134[i]*pow(delta,d134[i]-1);
132  }
133  for (i = 8; i<11; i++) {
134  sum2 += a134[i]*pow(tau,t134[i])*(d134[i] - delta)*pow(delta,d134[i]-1);
135  }
136  sum2 *= exp(-delta);
137  double dk = delta*delta;
138  for (i = 11; i<17; i++) {
139  sum3 += a134[i]*pow(tau,t134[i])*(d134[i] - 2.0*dk)*pow(delta,d134[i]-1);
140  }
141  sum3 *= exp(-dk);
142  dk *= delta;
143  for (i = 17; i<20; i++) {
144  sum4 += a134[i]*pow(tau,t134[i])*(d134[i] - 3.0*dk)*pow(delta,d134[i]-1);
145  }
146  sum4 *= exp(-dk);
147  dk *= delta;
148  sum5 = a134[20]*pow(tau,t134[20])*(d134[20] - 4.0*dk)*pow(delta,d134[20]-1);
149  sum5 *= exp(-dk);
150  double phird = sum1 + sum2 + sum3 + sum4 + sum5;
151  return R*T*delta*delta*Roc*(phird + phi0d);
152 }
153 
154 
155 double HFC134a::Psat()
156 {
157  if ((T < Tmn) || (T > Tc)) {
158  throw TPX_Error("HFC134a::Psat",
159  "Temperature out of range. T = " + fp2str(T));
160  }
161  double x1 = T/Tc;
162  double x2 = 1.0 - x1;
163  double f = -7.686556*x2 + 2.311791*pow(x2,1.5)
164  - 2.039554*x2*x2 - 3.583758*pow(x2,4);
165  return Pc*exp(f/x1);
166 }
167 
168 /*
169  double HFC134a::dPsatdT(){
170  if ((T < Tmn) || (T > Tc)) set_Err(TempError);
171  double x1 = T/Tc;
172  double x2 = 1.0 - x1;
173  double f = -7.686556*x2 + 2.311791*pow(x2,1.5)
174  - 2.039554*x2*x2 - 3.583758*pow(x2,4);
175  double fp = -7.686556 + 1.5*2.311791*pow(x2,0.5)
176  - 2.0*2.039554*x2 - 4.0*3.583758*pow(x2,3);
177  return -Pc*exp(f/x1)*(fp/T + f/(x1*T));
178  }
179 */
180 
181 double HFC134a::ldens()
182 {
183  if ((T < Tmn) || (T > Tc)) {
184  throw TPX_Error("HFC134a::ldens",
185  "Temperature out of range. T = " + fp2str(T));
186  }
187  double x1 = T/Tc;
188  double x2 = 1.0 - x1;
189  return 518.2 + 884.13*pow(x2,1.0/3.0) + 485.84*pow(x2,2.0/3.0)
190  + 193.29*pow(x2,10.0/3.0);
191 }
192 
193 double HFC134a::Tcrit()
194 {
195  return 374.21;
196 }
197 double HFC134a::Pcrit()
198 {
199  return 4059280.0;
200 }
201 double HFC134a::Vcrit()
202 {
203  return 1.0/511.95;
204 }
205 double HFC134a::Tmin()
206 {
207  return Tmn;
208 }
209 double HFC134a::Tmax()
210 {
211  return Tmx;
212 }
213 char* HFC134a::name()
214 {
215  return (char*) m_name.c_str();
216 }
217 char* HFC134a::formula()
218 {
219  return (char*) m_formula.c_str();
220 }
221 double HFC134a::MolWt()
222 {
223  return M;
224 }
225 
226 }
std::string fp2str(const double x, const std::string &fmt)
Convert a double into a c++ string.
Definition: stringUtils.cpp:29
Contains declarations for string manipulation functions within Cantera.