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
R410A.cpp
Go to the documentation of this file.
1 /*
2 Properties for R410A.
3 by Ian Bell
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 In order to call the exposed functions, rho_, h_, s_, cp_,......
10 there are three different ways the inputs can be passed, and this is expressed by the Types integer flag.
11 These macros are defined in the PropMacros.h header file:
12 1) First parameter temperature, second parameter pressure ex: h_R410A(260,354.7,1)=274
13  In this case, the lookup tables are built if needed and then interpolated
14 2) First parameter temperature, second parameter density ex: h_R410A(260,13.03,2)=274
15  Density and temp plugged directly into EOS
16 3) First parameter temperature, second parameter pressure ex: h_R410A(260,354.7,3)=274
17  Density solved for, then plugged into EOS (can be quite slow)
18 */
19 
20 
21 #if defined(_MSC_VER)
22 #define _CRTDBG_MAP_ALLOC
23 #define _CRT_SECURE_NO_WARNINGS
24 #include <stdlib.h>
25 #include <crtdbg.h>
26 #else
27 #include <stdlib.h>
28 #endif
29 
30 #include "math.h"
31 #include "stdio.h"
32 #include <string.h>
33 #include "CoolProp.h"
34 #include "FluidClass.h"
35 #include "R410A.h"
36 
38 {
39  static double a[]={
40  36.8871, //[0]
41  7.15807, //[1]
42  -46.87575, //[2]
43  2.0623, //[3]
44  5.9751, //[4]
45  1.5612 //[5]
46  };
47 
48  static double b[]={
49  0, //[0]
50  0, //[1]
51  -0.1, //[2]
52  2.02326, //[3]
53  5.00154, //[4]
54  11.2484 //[5]
55  };
56 
57  static double N[]={
58  0.0, //[0]
59  0.987252, //[1]
60  -1.03017, //[2]
61  1.17666, //[3]
62  -0.138991, //[4]
63  0.00302373, //[5]
64  -2.53639, //[6]
65  -1.96680, //[7]
66  -0.830480, //[8]
67  0.172477, //[9]
68  -0.261116, //[10]
69  -0.0745473, //[11]
70  0.679757, //[12]
71  -0.652431, //[13]
72  0.0553849, //[14]
73  -0.0710970, //[15]
74  -0.000875332, //[16]
75  0.0200760, //[17]
76  -0.0139761, //[18]
77  -0.0185110, //[19]
78  0.0171939, //[20]
79  -0.00482049 //[21]
80  };
81 
82  static double t[]={
83  0.0, //[0]
84  0.44, //[1]
85  1.2, //[2]
86  2.97, //[3]
87  2.95, //[4]
88  0.2, //[5]
89  1.93, //[6]
90  1.78, //[7]
91  3.0, //[8]
92  0.2, //[9]
93  0.74, //[10]
94  3.0, //[11]
95  2.1, //[12]
96  4.3, //[13]
97  0.25, //[14]
98  7.0, //[15]
99  4.7, //[16]
100  13.0, //[17]
101  16.0, //[18]
102  25.0, //[19]
103  17.0, //[20]
104  7.4 //[21]
105  };
106 
107  static double d[]={
108  0, //[0]
109  1, //[1]
110  1, //[2]
111  1, //[3]
112  2, //[4]
113  5, //[5]
114  1, //[6]
115  2, //[7]
116  3, //[8]
117  5, //[9]
118  5, //[10]
119  5, //[11]
120  1, //[12]
121  1, //[13]
122  4, //[14]
123  4, //[15]
124  9, //[16]
125  2, //[17]
126  2, //[18]
127  4, //[19]
128  5, //[20]
129  6 //[21]
130  };
131 
132  static double l[]={
133  0, //[0]
134  0, //[1]
135  0, //[2]
136  0, //[3]
137  0, //[4]
138  0, //[5]
139  1, //[6]
140  1, //[7]
141  1, //[8]
142  1, //[9]
143  1, //[10]
144  1, //[11]
145  2, //[12]
146  2, //[13]
147  2, //[14]
148  2, //[15]
149  2, //[16]
150  3, //[17]
151  3, //[18]
152  3, //[19]
153  3, //[20]
154  3 //[21]
155  };
156 
157  phirlist.push_back(new phir_power(N,d,t,l,1,21,22));
158 
159  /*
160  sum=log(delta)-log(tau)+a[0]+a[1]*tau+a[2]*pow(tau,b[2]);
161  for(k=3;k<=5;k++)
162  {
163  sum+=a[k]*log(1.0-exp(-b[k]*tau));
164  }
165  */
166  phi0list.push_back(new phi0_lead(a[0],a[1]));
167  phi0list.push_back(new phi0_logtau(-1.0));
168  phi0list.push_back(new phi0_power(a[2],b[2]));
169  phi0list.push_back(new phi0_Planck_Einstein(a,b,3,5,6));
170 
171  // Other fluid parameters
172  params.molemass = 72.5854;
173  params.Ttriple = 200.0;
174  params.ptriple = 29.0116613767;
175  params.accentricfactor = 0.296;
176  params.R_u = 8.314472;
177  isPure = false;
178 
179  // Critical parameters
180  crit.rho = 459.0300696;
181  crit.p = PressureUnit(4901.2,UNIT_KPA);
182  crit.T = 344.494;
183  crit.v = 1.0/crit.rho;
184 
185  // Limits of EOS
186  limits.Tmin = params.Ttriple;
187  limits.Tmax = 500.0;
188  limits.pmax = 50000.0;
189  limits.rhomax = 19.51*params.molemass;
190 
191  EOSReference.assign("E.W. Lemmon, \"Pseudo-pure fluid Equations of State for the Refrigerant Blends R410A, R404A, R507C and R407C\""
192  ",Int. J. Thermophys. v. 24, n4, 2003");
193  TransportReference.assign("Viscosity: V. Geller, \"Viscosity of Mixed Refrigerants R404A,R407C,"
194  "R410A, and R507A\", 2000 Purdue Refrigeration conferences\n\n"
195  "Thermal Conductivity: V.Z. Geller, B.Z. Nemzer, and U.V. Cheremnykh \"Thermal Conductivity "
196  "of the Refrigerant mixtures R404A,R407C,R410A, and R507A\" "
197  "Int. J. Thermophysics, v. 22, n 4 2001");
198 
199  name.assign("R410A");
200  aliases.push_back("R410a");
201 
202  BibTeXKeys.EOS = "Lemmon-IJT-2003";
203  BibTeXKeys.VISCOSITY = "Geller-PURDUE-2000";
204  BibTeXKeys.CONDUCTIVITY = "Geller-IJT-2001";
205 }
206 double R410AClass::psatL(double T)
207 {
208  //Bubble point of R410A
209  double sum=0,theta;
210  int k;
211  static const double Nbp[]={
212  0.0, //[0]
213  -7.2818, //[1]
214  2.5093, //[2]
215  -3.2695, //[3]
216  -2.8022 //[4]
217  };
218 
219  static const double tbp[]={
220  0.0, //[0]
221  1.0, //[1]
222  1.8, //[2]
223  2.4, //[3]
224  4.9 //[4]
225  };
226 
227  theta=1-T/reduce.T;
228 
229  for (k=1;k<=4;k++)
230  {
231  sum+=Nbp[k]*pow(theta,tbp[k]);
232  }
233  return reduce.p.Pa*exp(reduce.T/T*sum);
234 }
235 
236 double R410AClass::psatV(double T)
237 {
238  //Dew point of R410A
239  double sum=0,theta;
240  int k;
241 
242  static const double Ndp[]={
243  0.0, //[0]
244  -7.4411, //[1]
245  1.9883, //[2]
246  -2.4925, //[3]
247  -3.2633 //[4]
248  };
249 
250  static const double tdp[]={
251  0.0, //[0]
252  1.0, //[1]
253  1.6, //[2]
254  2.4, //[3]
255  5.0 //[4]
256  };
257 
258  theta=1-T/reduce.T;
259 
260  for (k=1;k<=4;k++)
261  {
262  sum+=Ndp[k]*pow(theta,tdp[k]);
263  }
264  return reduce.p.Pa*exp(reduce.T/T*sum);
265 }
266 
267 double R410AClass::rhosatV(double T)
268 {
269  double THETA,a1,a2,a3,a4,a5,a6,a7,a8,b1,b2,b3,b4,b5,b6,b7,b8;
270  THETA=1-T/344.5;
271 
272  a1 = -4.02;
273  a2 = -18.8;
274  a3 = -18.16;
275  a4 = -17.37;
276  a5 = -16.15;
277  a6 = -7.87;
278  a7 = -20.46;
279  a8 = -18.59;
280  b1 = 0.4803;
281  b2 = 9.217;
282  b3 = 7.52;
283  b4 = 3.471;
284  b5 = 5.124;
285  b6 = 1.498;
286  b7 = 9.831;
287  b8 = 8.99;
288 
289  return exp(a1*pow(THETA,b1)+a2*pow(THETA,b2)+a3*pow(THETA,b3)+a4*pow(THETA,b4)+a5*pow(THETA,b5)+a6*pow(THETA,b6)+a7*pow(THETA,b7)+a8*pow(THETA,b8))*459.53;
290 }
291 
292 double R410AClass::rhosatL(double T)
293 {
294  double THETA,a1,a2,a3,a4,a5,a6,b1,b2,b3,b4,b5,b6;
295  THETA=1-T/344.5;
296 
297  a1 = 2.876;
298  a2 = -2.465;
299  a3 = -0.9235;
300  a4 = -0.4798;
301  a5 = 0.7394;
302  a6 = 1.762;
303  b1 = 0.365;
304  b2 = 0.6299;
305  b3 = 1.864;
306  b4 = 1.932;
307  b5 = 2.559;
308  b6 = 1.149;
309 
310  return exp(a1*pow(THETA,b1)+a2*pow(THETA,b2)+a3*pow(THETA,b3)+a4*pow(THETA,b4)+a5*pow(THETA,b5)+a6*pow(THETA,b6))*459.53;
311 }
312 
313 double R410AClass::viscosity_Trho(double T, double rho)
314 {
315  // Properties taken from "Viscosity of Mixed
316  // Refrigerants R404A,R407C,R410A, and R507A"
317  // by Vladimir Geller,
318  // 2000 Purdue Refrigeration conferences
319 
320  // inputs in T [K], and p [kPa]
321  // output in Pa-s
322 
323  double eta_microPa_s;
324 
325  //Set constants required
326  double a_0=-2.695e0,a_1=5.850e-2,a_2=-2.129e-5,b_1=9.047e-3,b_2=5.784e-5,
327  b_3=1.309e-7,b_4=-2.422e-10,b_5=9.424e-14,b_6=3.933e-17;
328 
329  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;
330  return eta_microPa_s/1e6;
331 }
332 
333 double R410AClass::conductivity_Trho(double T, double rho)
334 {
335  // Properties taken from "Thermal Conductivity
336  // of the Refrigerant mixtures R404A,R407C,R410A, and R507A"
337  // by V.Z. Geller, B.Z. Nemzer, and U.V. Cheremnykh
338  // Int. J. Thermophysics, v. 22, n 4 2001
339 
340  // inputs in T [K], and p [kPa] or rho [kg/m^3]
341  // output in W/m-K
342 
343  //Set constants required
344  double a_0=-8.872e0,a_1=7.410e-2,b_1=3.576e-2,b_2=-9.045e-6,b_3=4.343e-8,b_4=-3.705e-12;
345 
346  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
347 }
std::vector< phi_BC * > phirlist
Definition: FluidClass.h:178
virtual double viscosity_Trho(double, double)
Definition: R410A.cpp:313
double psatL(double)
Definition: R410A.cpp:206
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
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
struct CriticalStruct reduce
A pointer to the point that is used to reduce the T and rho for EOS.
Definition: FluidClass.h:222
double Tmax
Definition: FluidClass.h:54
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 psatV(double)
Definition: R410A.cpp:236
double pmax
Definition: FluidClass.h:54
params
struct CriticalStruct crit
Definition: FluidClass.h:218
BibTeXKeysStruct BibTeXKeys
Definition: FluidClass.h:175
virtual double conductivity_Trho(double, double)
Definition: R410A.cpp:333
std::vector< phi_BC * > phi0list
A vector of instances of the phi_BC classes for the residual Helmholtz energy contribution.
Definition: FluidClass.h:179
R410AClass()
Definition: R410A.cpp:37
double Tmin
Definition: FluidClass.h:54
double rhosatV(double)
Definition: R410A.cpp:267
double rhomax
Definition: FluidClass.h:54
std::string CONDUCTIVITY
Definition: FluidClass.h:123
double rhosatL(double)
Definition: R410A.cpp:292