CoolProp  4.2.5
An open-source fluid property and humid air property database
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
R507A.cpp
Go to the documentation of this file.
1 /*
2 Properties for R507A.
3 by Ian Bell (ihb2@cornell.edu)
4 
5 Pseudo-pure fluid thermo props from
6 "Pseudo-pure fluid Equations of State for the Refrigerant Blends R410A, R404A, R507C and R407C"
7 by E.W. Lemmon, Int. J. Thermophys. v. 24, n4, 2003
8 
9 */
10 
11 #if defined(_MSC_VER)
12 #define _CRTDBG_MAP_ALLOC
13 #define _CRT_SECURE_NO_WARNINGS
14 #include <stdlib.h>
15 #include <crtdbg.h>
16 #else
17 #include <stdlib.h>
18 #endif
19 
20 #include "math.h"
21 #include "stdio.h"
22 #include <string.h>
23 #include "CoolProp.h"
24 #include "FluidClass.h"
25 #include "R507A.h"
26 
27 static const double a[]={
28  9.93541, //[0]
29  7.9985, //[1]
30  -21.6054, //[2]
31  0.95006, //[3]
32  4.1887, //[4]
33  5.5184 //[5]
34 };
35 
36 static const double b[]={
37  0, //[0]
38  0, //[1]
39  -0.25, //[2]
40  1.05886, //[3]
41  2.37081, //[4]
42  5.14305 //[5]
43 };
44 
45 static const double N[]={
46  0.0, //[0]
47  6.24982, //[1]
48  -8.07855, //[2]
49  0.0264843, //[3]
50  0.286215, //[4]
51  -0.00507076, //[5]
52  0.0109552, //[6]
53  0.00116124, //[7]
54  1.38469, //[8]
55  -0.922473, //[9]
56  -0.0503562, //[10]
57  0.822098, //[11]
58  -0.277727, //[12]
59  0.358172, //[13]
60  -0.0126426, //[14]
61  -0.00607010, //[15]
62  -0.0815653, //[16]
63  -0.0233323, //[17]
64  0.0352952, //[18]
65  0.0159566, //[19]
66  0.0755927, //[20]
67  -0.0542007, //[21]
68  0.0170451 //[22]
69 
70 };
71 
72 static const double t[]={
73  0.0, //[0]
74  0.692, //[1]
75  0.943, //[2]
76  5.8, //[3]
77  0.77, //[4]
78  5.84, //[5]
79  0.24, //[6]
80  0.69, //[7]
81  2.0, //[8]
82  3.0, //[9]
83  7.0, //[10]
84  2.2, //[11]
85  4.3, //[12]
86  2.7, //[13]
87  1.2, //[14]
88  1.23, //[15]
89  12.0, //[16]
90  6.0, //[17]
91  8.5, //[18]
92  11.5, //[19]
93  13.0, //[20]
94  17.0, //[21]
95  16.2 //[22]
96 };
97 
98 static const int d[]={
99  0, //[0]
100  1, //[1]
101  1, //[2]
102  1, //[3]
103  2, //[4]
104  2, //[5]
105  4, //[6]
106  6, //[7]
107  1, //[8]
108  1, //[9]
109  1, //[10]
110  2, //[11]
111  2, //[12]
112  3, //[13]
113  4, //[14]
114  7, //[15]
115  2, //[16]
116  3, //[17]
117  4, //[18]
118  4, //[19]
119  2, //[20]
120  3, //[21]
121  5 //[22]
122 };
123 
124 static const int l[]={
125  0, //[0]
126  0, //[1]
127  0, //[2]
128  0, //[3]
129  0, //[4]
130  0, //[5]
131  0, //[6]
132  0, //[7]
133  1, //[8]
134  1, //[9]
135  1, //[10]
136  1, //[11]
137  1, //[12]
138  1, //[13]
139  1, //[14]
140  1, //[15]
141  2, //[16]
142  2, //[17]
143  2, //[18]
144  2, //[19]
145  3, //[20]
146  3, //[21]
147  3 //[22]
148 };
149 
150 static const double Nbp[]={
151  0.0, //[0]
152  -7.4853, //[1]
153  2.0115, //[2]
154  -2.0141, //[3]
155  -3.7763 //[4]
156 };
157 
158 static const double tbp[]={
159  0.0, //[0]
160  1.0, //[1]
161  1.5, //[2]
162  2.2, //[3]
163  4.6 //[4]
164 };
165 
166 static const double Ndp[]={
167  0.0, //[0]
168  -7.5459, //[1]
169  2.3380, //[2]
170  -2.2370, //[3]
171  -4.1535 //[4]
172 };
173 
174 static const double tdp[]={
175  0.0, //[0]
176  1.0, //[1]
177  1.5, //[2]
178  2.1, //[3]
179  4.7 //[4]
180 };
181 
182 
183 
185 {
186  std::vector<double> n_v(N,N+sizeof(N)/sizeof(double));
187  std::vector<double> d_v(d,d+sizeof(d)/sizeof(int));
188  std::vector<double> t_v(t,t+sizeof(t)/sizeof(double));
189  std::vector<double> l_v(l,l+sizeof(l)/sizeof(int));
190  std::vector<double> a0(a,a+sizeof(a)/sizeof(double));
191  std::vector<double> n0(b,b+sizeof(b)/sizeof(double));
192 
193  phi_BC * phir_ = new phir_power(n_v,d_v,t_v,l_v,1,22);
194  phirlist.push_back(phir_);
195 
196  /*
197  sum=log(delta)-log(tau)+a[0]+a[1]*tau+a[2]*pow(tau,b[2]);
198  for(k=3;k<=5;k++)
199  {
200  sum+=a[k]*log(1.0-exp(-b[k]*tau));
201  }
202  */
203  phi_BC * phi0_lead_ = new phi0_lead(a0[0],a0[1]);
204  phi_BC * phi0_logtau_ = new phi0_logtau(-1.0);
205  phi_BC * phi0_power_ = new phi0_power(a0[2],n0[2]);
206  phi_BC * phi0_Planck_Einstein_ = new phi0_Planck_Einstein(a0,n0,3,5);
207 
208  phi0list.push_back(phi0_lead_);
209  phi0list.push_back(phi0_logtau_);
210  phi0list.push_back(phi0_power_);
211  phi0list.push_back(phi0_Planck_Einstein_);
212 
213  // Critical parameters (max condensing temperature)
214  crit.rho = 490.74;
215  crit.p = PressureUnit(3704.9,UNIT_KPA);
216  crit.T = 343.765;
217  crit.v = 1.0/crit.rho;
218 
219  // Other fluid parameters
220  params.molemass = 98.8592;
221  params.Ttriple = 200.0;
222  params.ptriple = 23.2234432758;
223  params.accentricfactor = 0.286;
224  params.R_u = 8.314472;
225  isPure = false;
226 
227  // Limits of EOS
228  limits.Tmin = params.Ttriple;
229  limits.Tmax = 500.0;
230  limits.pmax = 50000.0;
231  limits.rhomax = 14.13*params.molemass;
232 
233  EOSReference.assign("E.W. Lemmon, \"Pseudo-pure fluid Equations of State for the Refrigerant Blends R410A, R404A, R507C and R407C\""
234  ",Int. J. Thermophys. v. 24, n4, 2003");
235  TransportReference.assign("Viscosity: V. Geller, \"Viscosity of Mixed Refrigerants R404A,R407C,"
236  "R410A, and R507A\", 2000 Purdue Refrigeration conferences\n\n"
237  "Thermal Conductivity: V.Z. Geller, B.Z. Nemzer, and U.V. Cheremnykh \"Thermal Conductivity "
238  "of the Refrigerant mixtures R404A,R407C,R410A, and R507A\" "
239  "Int. J. Thermophysics, v. 22, n 4 2001");
240 
241  name.assign("R507A");
242  aliases.push_back("R507a");
243 
244  BibTeXKeys.EOS = "Lemmon-IJT-2003";
245  BibTeXKeys.VISCOSITY = "Geller-PURDUE-2000";
246  BibTeXKeys.CONDUCTIVITY = "Geller-IJT-2001";
247 
248 }
249 double R507AClass::psatL(double T)
250 {
251  //Bubble point of R410A
252  double sum=0,theta;
253  int k;
254  theta=1-T/crit.T;
255 
256  for (k=1;k<=4;k++)
257  {
258  sum+=Nbp[k]*pow(theta,tbp[k]);
259  }
260  return reduce.p.Pa*exp(reduce.T/T*sum);
261 }
262 
263 double R507AClass::psatV(double T)
264 {
265  //Dew point of R410A
266  double sum=0,theta;
267  int k;
268  theta=1-T/crit.T;
269 
270  for (k=1;k<=4;k++)
271  {
272  sum+=Ndp[k]*pow(theta,tdp[k]);
273  }
274  return reduce.p.Pa*exp(reduce.T/T*sum);
275 }
276 
277 double R507AClass::rhosatV(double T)
278 {
279  double theta;
280  theta=1-T/343.765;
281  return exp(+2.685721675+2.703462155742e+00*pow(theta,-0.031591)-12.9219949523*theta+48.3326995201*theta*theta-301.352305753*powInt(theta,3)+953.161091912*powInt(theta,4)-1667.82041758*powInt(theta,5)+1132.7963359*powInt(theta,6));
282 }
283 
284 double R507AClass::rhosatL(double T)
285 {
286 
287  double theta;
288  theta=1-T/343.765;
289  return exp(6.059998874+1.305406634077e+00*pow(theta,0.21588)+0.585710808997*theta-2.09578513606*theta*theta+4.667514451*powInt(theta,3)-3.93369379654*powInt(theta,4));
290 }
291 
292 double R507AClass::viscosity_Trho(double T, double rho)
293 {
294  // Properties taken from "Viscosity of Mixed
295  // Refrigerants R404A,R407C,R410A, and R507A"
296  // by Vladimir Geller,
297  // 2000 Purdue Refrigeration conferences
298 
299  // inputs in T [K], and p [kPa]
300  // output in Pa-s
301 
302  double eta_microPa_s;
303 
304  //Set constants required
305  double a_0=-2.530e0,a_1=5.626e-2,a_2=-2.323e-5,b_1=5.308e-4,b_2=2.234e-4,
306  b_3=-6.742e-7,b_4=1.411e-9,b_5=-1.388e-12,b_6=5.274e-16;
307 
308  eta_microPa_s=a_0+a_1*T+a_2*T*T+b_1*rho+b_2*rho*rho+b_3*rho*rho*rho+b_4*rho*rho*rho*rho+b_5*rho*rho*rho*rho*rho+b_6*rho*rho*rho*rho*rho*rho;
309  return eta_microPa_s/1e6;
310 }
311 
312 double R507AClass::conductivity_Trho(double T, double rho)
313 {
314  // Properties taken from "Thermal Conductivity
315  // of the Refrigerant mixtures R404A,R407C,R410A, and R507A"
316  // by V.Z. Geller, B.Z. Nemzer, and U.V. Cheremnykh
317  // Int. J. Thermophysics, v. 22, n 4 2001
318 
319  // inputs in T [K], and p [kPa] or rho [kg/m^3]
320  // output in W/m-K
321 
322  //Set constants required
323  double a_0=-8.656e0,a_1=7.383e-2,b_1=2.799e-2,b_2=3.065e-5,b_3=-3.644e-8,b_4=2.609e-11;
324 
325  return (a_0+a_1*T+b_1*rho+b_2*rho*rho+b_3*rho*rho*rho+b_4*rho*rho*rho*rho)/1.e3; // from mW/m-K to W/m-K
326 }
std::vector< phi_BC * > phirlist
Definition: FluidClass.h:178
struct FluidLimits limits
Definition: FluidClass.h:219
std::string EOS
Definition: FluidClass.h:120
std::string VISCOSITY
Definition: FluidClass.h:122
PressureUnit p
Definition: FluidClass.h:50
std::string name
A container to hold the cache for residual Helmholtz derivatives.
Definition: FluidClass.h:151
std::string TransportReference
A std::string that contains a reference for thermo properties for the fluid.
Definition: FluidClass.h:158
double Pa
Definition: Units.h:22
double psatL(double)
Definition: R507A.cpp:249
virtual double viscosity_Trho(double, double)
Definition: R507A.cpp:292
std::vector< std::string > aliases
The REFPROP-compliant name if REFPROP-"name" is not a compatible fluid name. If not included...
Definition: FluidClass.h:153
double powInt(double x, int y)
struct CriticalStruct reduce
A pointer to the point that is used to reduce the T and rho for EOS.
Definition: FluidClass.h:222
double rhosatL(double)
Definition: R507A.cpp:284
double Tmax
Definition: FluidClass.h:54
virtual double conductivity_Trho(double, double)
Definition: R507A.cpp:312
std::string EOSReference
The critical qd parameter for the Olchowy-Sengers cross-over term.
Definition: FluidClass.h:157
bool isPure
A std::string that contains a reference for the transport properties of the fluid.
Definition: FluidClass.h:159
double pmax
Definition: FluidClass.h:54
params
struct CriticalStruct crit
Definition: FluidClass.h:218
BibTeXKeysStruct BibTeXKeys
Definition: FluidClass.h:175
std::vector< phi_BC * > phi0list
A vector of instances of the phi_BC classes for the residual Helmholtz energy contribution.
Definition: FluidClass.h:179
double psatV(double)
Definition: R507A.cpp:263
This is the abstract base class upon which each residual Helmholtz energy class is built...
Definition: Helmholtz.h:24
double Tmin
Definition: FluidClass.h:54
R507AClass()
Definition: R507A.cpp:184
double rhomax
Definition: FluidClass.h:54
std::string CONDUCTIVITY
Definition: FluidClass.h:123
double rhosatV(double)
Definition: R507A.cpp:277