-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathISO-12213-2.hpp
298 lines (259 loc) · 26.5 KB
/
ISO-12213-2.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
#ifndef __ISO_12213_2__H
#define __ISO_12213_2__H
#include <math.h>
#include <string>
#include <map>
#include "MathUtil.h"
// ********** This code is preliminary, and will be updated. **********
// ********** Use only for beta testing. **********
// ISO 12213-2: Pipeline gas compressibility computation according to the method AGA8-92DC
class ISO122132{
private:
enum {naga = 21, nc = 58};
typedef double aga [naga];
typedef double arc [nc];
typedef long aic [nc];
//std::string gas[naga] = {"Methane", "Nitrogen", "Carbon_dioxide", "Ethane", "Propane", "Water",
//"Hydrogen_sulfide", "Hydrogen", "Carbon_monoxide", "Oxygen",
//"iso-Butane", "n-Butane", "iso-Pentane", "n-Pentane", "n-Hexane",
//"n-Heptane", "n-Octane", "n-Nonane", "n-Decane", "Helium", "Argon"};
std::vector<std::string> gas = {"74-82-8" , "7727-37-9", "124-38-9", "74-84-0", "74-98-6", "7732-18-5",
"7783-06-4", "1333-74-0", "630-08-0", "7782-44-7",
"75-28-5", "106-97-8", "78-78-4", "109-66-0", "110-54-3",
"142-82-5", "111-65-9", "111-84-2", "124-18-5", "7440-59-7", "7440-37-1"};
arc A = { 0.153832600, 1.341953000, -2.998583000, -0.048312280, 0.375796500, -1.589575000, -0.053588470, 0.886594630, -0.710237040, -1.471722000,
1.321850350, -0.786659250, 0.2291290e-8, 0.157672400, -0.436386400, -0.044081590, -0.003433888, 0.032059050, 0.024873550, 0.073322790,
-0.001600573, 0.642470600, -0.416260100, -0.066899570, 0.279179500, -0.696605100, -0.002860589, -0.008098836, 3.150547000, 0.007224479,
-0.705752900, 0.534979200, -0.079314910, -1.418465000, -0.599905e-16, 0.105840200, 0.034317290, -0.007022847, 0.024955870, 0.042968180,
0.746545300, -0.291961300, 7.294616000, -9.936757000, -0.005399808, -0.243256700, 0.049870160, 0.003733797, 1.874951000, 0.002168144,
-0.658716400, 0.000205518, 0.009776195, -0.020487080, 0.015573220, 0.006862415, -0.001226752, 0.002850908};
aic B = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,7,7,8,8,8,9,9};
aic C = {0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1};
aic K = {0,0,0,0,0,0,0,0,0,0,0,0,3,2,2,2,4,4,0,0,2,2,2,4,4,4,4,0,1,1,2,2,3,3,4,4,4,0,0,2,2,2,4,4,0,2,2,4,4,0,2,0,2,1,2,2,2,2};
aic G = {0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0};
aic Q = {0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1};
aic F = {0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
aic S = {0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
aic W = {0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
arc U = {0.0,0.5,1.0,3.5,-0.5,4.5,0.5,7.5,9.5,6.0,12.0,12.5,-6.0,2.0,3.0,2.0,2.0,11.0,-0.5,0.5,0.0,4.0,6.0,21.0,23.0,22.0,-1.0,-0.5,7.0,
-1.0,6.0,4.0,1.0,9.0,-13.0,21.0,8.0,-0.5,0.0,2.0,7.0,9.0,22.0,23.0,1.0,9.0,3.0,8.0,23.0,1.5,5.0,-0.5,4.0,7.0,3.0,0.0,1.0,0.0};
aga MW = {16.0430,28.0135,44.0100,30.0700,44.0970,18.0153,34.0820,2.0159,28.0100,31.9988,58.1230,58.1230,72.1500,72.1500,86.1770,100.2040,114.2310,128.2580,142.2850,4.0026,39.9480};
aga EI = {151.318300, 99.737780,241.960600,244.166700,298.118300,514.015600,296.355000, 26.957940,105.534800,122.766700,324.068900,
337.638900,365.599900,370.682300,402.636293,427.722630,450.325022,470.840891,489.558373, 2.610111,119.629900};
aga KI = {0.4619255,0.4479153,0.4557489,0.5279209,0.5837490,0.3825868,0.4618263,0.3514916,0.4533894,0.4186954,0.6406937,
0.6341423,0.6738577,0.6798307,0.7175118,0.7525189,0.7849550,0.8152731,0.8437826,0.3589888,0.4216551};
aga GI = {0.000000,0.027815,0.189065,0.079300,0.141239,0.332500,0.088500,0.034369,0.038953,0.021000,0.256692,
0.281835,0.332267,0.366911,0.289731,0.337542,0.383381,0.427354,0.469659,0.000000,0.000000};
aga QI = {0.0,0.0,0.69,0.0,0.0,1.06775,0.633276,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
aga FI = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
aga SI = {0.0,0.0,0.0,0.0,0.0,1.5822,0.390,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
aga WI = {0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
aga EIJ[naga] = {
{ 1.000000,0.971640,0.960644,1.000000,0.994635,0.708218,0.931484,1.170520,0.990126,1.000000,1.019530,0.989844,1.002350,0.999268,1.107274,0.880880,0.880973,0.881067,0.881161,1.000000,1.000000},
{ 1.000000,1.000000,1.022740,0.970120,0.945939,0.746954,0.902271,1.086320,1.005710,1.021000,0.946914,0.973384,0.959340,0.945520,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,0.925053,0.960237,0.849408,0.955052,1.281790,1.500000,1.000000,0.906849,0.897362,0.726255,0.859764,0.855134,0.831229,0.808310,0.786323,0.765171,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.022560,0.693168,0.946871,1.164460,1.000000,1.000000,1.000000,1.013060,1.000000,1.005320,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.034787,1.000000,1.000000,1.000000,1.004900,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.008692,1.010126,1.011501,1.012821,1.014089,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.100000,1.000000,1.300000,1.300000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{ 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000}};
aga UIJ[naga] = {
{1.000000,0.886106,0.963827,1.000000,0.990877,1.000000,0.736833,1.156390,1.000000,1.000000,1.000000,0.992291,1.000000,1.003670,1.302576,1.191904,1.205769,1.219634,1.233498,1.000000,1.000000},
{1.000000,1.000000,0.835058,0.816431,0.915502,1.000000,0.993476,0.408838,1.000000,1.000000,1.000000,0.993556,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,0.969870,1.000000,1.000000,1.045290,1.000000,0.900000,1.000000,1.000000,1.000000,1.000000,1.000000,1.066638,1.077634,1.088178,1.098291,1.108021,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.065173,1.000000,0.971926,1.616660,1.000000,1.000000,1.250000,1.250000,1.250000,1.250000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.028973,1.033754,1.038338,1.042735,1.046966,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000}};
aga KIJ[naga] = {
{1.000000,1.003630,0.995933,1.000000,1.007619,1.000000,1.000080,1.023260,1.000000,1.000000,1.000000,0.997596,1.000000,1.002529,0.982962,0.983565,0.982707,0.981849,0.980991,1.000000,1.000000},
{1.000000,1.000000,0.982361,1.007960,1.000000,1.000000,0.942596,1.032270,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.008510,1.000000,1.000000,1.007790,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,0.910183,0.895362,0.881152,0.867520,0.854406,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,0.986893,1.000000,0.999969,1.020340,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,0.968130,0.962870,0.957828,0.952441,0.948338,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000}};
aga GIJ[naga] = {
{1.000000,1.000000,0.807653,1.000000,1.000000,1.000000,1.000000,1.957310,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,0.982746,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,0.370296,1.000000,1.673090,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000},
{1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000}};
double RGAS = 8.31451e-3;
double BI[18];
double CNS[58];
double K1;
aga XI;
double Mm;
public:
ISO122132(){}
~ISO122132(){}
double GetMW(){return Mm;}
double GetMi(int i){if(i>=0 && i<=naga) return MW[i]; return 0.0;}
double GetXi(int i){if(i>=0 && i<naga) return XI[i]; return 0.0;}
std::string GetName(int i){if(i>=0 && i<naga) return gas[i];return "";}
//===============================================================================================================
void MolarMass(std::map<std::string, double>& mix, bool normalize = false)
{ long I, J, N;
double SUM = 0.0, U1 = 0.0, G1 = 0.0, Q1 = 0.0, F1 = 0.0, E1 = 0.0;
double XIJ, EIJ0, GIJ0, BN;
for (J=0; J<=20; J++) XI[J] = 0.0;
for (J=0; J<=20; J++) XI[J] = mix[gas[J]];
/*.....Normalize mole fractions */
for (I=0; I<=20; I++) SUM += XI[I];
if (normalize && abs(SUM)>=epsD) for (I=0; I<=20; I++) XI[I] /= SUM;
Mm = 0;
for(I=0; I<=20; I++) Mm += XI[I]*MW[I];
/*.....Calculate molecular weight */
for (N=0; N<=17; N++) BI[N] = 0.0;
K1 = 0.0;
for (I=0; I<21; I++)
{K1 += XI[I]*pow(KI[I],2.5); // B.11
U1 += XI[I]*pow(EI[I],2.5); // B.6
G1 += XI[I]*GI[I]; // B.7
Q1 += XI[I]*QI[I]; // B.8
F1 += XI[I]*XI[I] * FI[I]; // B.9
E1 += XI[I]*EI[I];}
K1 *= K1; // B.11
U1 *= U1; // B.6
/* for I := 1 to 8 do begin */
/* for J := I+1 to 19 do begin */
for (I=0; I<20; I++)
{for (J=I+1; J<21; J++)
{XIJ = XI[I] * XI[J];
if (XIJ != 0)
{K1 += 2.0*XIJ*(pow(KIJ[I][J],5.0)-1.0)*pow(KI[I]*KI[J],2.5); // B.11
U1 += 2.0*XIJ*(pow(UIJ[I][J],5.0)-1.0)*pow(EI[I]*EI[J],2.5); // B.6 ??? 2*
G1 += XIJ*(GIJ[I][J]-1.0)*(GI[I]+GI[J]);}}} // B.7
for (I=0; I<21; I++)
{for (J=I; J<21; J++)
{XIJ = XI[I]*XI[J];
if (XIJ != 0)
{if (I != J) XIJ=2*XIJ;
EIJ0 = EIJ[I][J]*sqrt(EI[I]*EI[J]); // B.3
GIJ0 = GIJ[I][J]*(GI[I]+GI[J])/2.0; // B.4
for (N=0; N<=17; N++)
{BN = pow(GIJ0+1.0-G[N],(double)G[N])* // B.2
pow(QI[I]*QI[J]+1.0-Q[N],(double)Q[N])*
pow(sqrt(FI[I]*FI[J])+1.0-F[N],(double)F[N])*
pow(SI[I]*SI[J]+1.0-S[N],(double)S[N])*
pow(WI[I]*WI[J]+1.0-W[N],(double)W[N]);
BI[N] += A[N]*XIJ*pow(EIJ0,U[N])*pow(KI[I]*KI[J],1.5)*BN;}}}} // B.1
K1 = pow(K1,0.2); // B.11
U1 = pow(U1,0.2); // B.6
for (N=12; N<58; N++)
CNS[N] = pow(G1+1.0-G[N],(double)G[N])* // B.5
pow(Q1*Q1+1.0-Q[N],(double)Q[N])*
pow(F1+1.0-F[N],(double)F[N])*A[N]*pow(U1,U[N]);
}
private:
void PZOFDT(double *D, double *T, double *P, double *Z, double *BMIX)
{ long N;
double DR;
DR = *D*K1*K1*K1; // (2)
*BMIX = 0.0;
for (N=0; N<18; N++) *BMIX += BI[N]/pow(*T,U[N]); // B.1
*Z = 1.0 + *BMIX * *D; // (1) B.10
for (N=12; N<18; N++) *Z -= DR*CNS[N]/pow(*T,U[N]); // (1) B.10
for (N=12; N<58; N++)
*Z += CNS[N]/pow(*T,U[N])*(B[N]-C[N]*K[N]*pow(DR,(double)K[N]))*
pow(DR,(double)B[N])*exp(-C[N]*pow(DR,(double)K[N]));
*P = *D * RGAS * *T * *Z;
}
public:
void DZOFPT(double *P, double *T, double *D, double *Z, double *BMIX)
{ long I;
double X1 = 0.000001, X2 = 40.0;
double X3, F, F1, F2, F3;
double TOL = 0.5e-9;
*D = 0.0;
PZOFDT(&X1, T, &F1, Z, BMIX);
PZOFDT(&X2, T, &F2, Z, BMIX);
F1 -= *P;
F2 -= *P;
if (F1*F2>=0) return;
//------------------
// BEGIN ITERATING
//------------------
for (I=1; I<=50; I++)
// Use False Position to get point 3.*/
{X3 = X1-F1*(X2-X1)/(F2-F1);
PZOFDT(&X3, T, &F3, Z, BMIX);
F3 -= *P;
// Use points 1, 2, and 3 to estimate the root using Chamber's method (quadratic solution).
*D = X1*F2*F3/((F1-F2)*(F1-F3))+X2*F1*F3/((F2-F1)*(F2-F3))+X3*F1*F2/((F3-F1)*(F3-F2));
if ((*D-X1)*(*D-X2)>=0) *D=(X1+X2)/2;
PZOFDT(D, T, &F, Z, BMIX);
F -= *P;
if (fabs(F)<=TOL) return;
// Discard quadratic solution if false position root is closer.
if (fabs(F3) < fabs(F) && F*F3 > 0)
{if (F3*F1>0) {X1=X3; F1=F3;}
else {X2=X3; F2=F3;}}
else
// Swap in new value from quadratic solution
{if (F*F3 < 0) {X1=*D; F1=F; X2=X3; F2=F3;}
else if (F3*F1 > 0) {X1=*D; F1=F;}
else {X2=*D; F2=F;}}
}
*D = 0.0;
}
};
#endif