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