AGA8 WebAssembly  1.0
bindings for AGA8 gas properties calculations
Loading...
Searching...
No Matches
GERG2008.cpp
Go to the documentation of this file.
1
53
54/*
55This software was developed by employees of the National Institute of Standards and Technology (NIST),
56an agency of the Federal Government and is being made available as a public service. Pursuant to title 17
57United States Code Section 105, works of NIST employees are not subject to copyright protection in the
58United States. This software may be subject to foreign copyright. Permission in the United States and in
59foreign countries, to the extent that NIST may hold copyright, to use, copy, modify, create derivative works,
60and distribute this software and its documentation without fee is hereby granted on a non-exclusive basis,
61provided that this notice and disclaimer of warranty appears in all copies.
62
63THE SOFTWARE IS PROVIDED 'AS IS' WITHOUT ANY WARRANTY OF ANY KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY,
64INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY THAT THE SOFTWARE WILL CONFORM TO SPECIFICATIONS, ANY IMPLIED
65WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND FREEDOM FROM INFRINGEMENT, AND ANY
66WARRANTY THAT THE DOCUMENTATION WILL CONFORM TO THE SOFTWARE, OR ANY WARRANTY THAT THE SOFTWARE WILL BE
67ERROR FREE. IN NO EVENT SHALL NIST BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, DIRECT, INDIRECT,
68SPECIAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF, RESULTING FROM, OR IN ANY WAY CONNECTED WITH THIS SOFTWARE,
69WHETHER OR NOT BASED UPON WARRANTY, CONTRACT, TORT, OR OTHERWISE, WHETHER OR NOT INJURY WAS SUSTAINED BY
70PERSONS OR PROPERTY OR OTHERWISE, AND WHETHER OR NOT LOSS WAS SUSTAINED FROM, OR AROSE OUT OF THE RESULTS OF,
71OR USE OF, THE SOFTWARE OR SERVICES PROVIDED HEREUNDER.
72*/
73#include "GERG2008.h"
74// We add both math headers to placate some non-standards-compliant compilers
75#include <math.h>
76#include <cmath>
77#include <iostream>
78
79// Version 2.01 of routines for the calculation of thermodynamic
80// properties from the AGA 8 Part 2 GERG-2008 equation of state.
81// April, 2017
82
83// Written by Eric W. Lemmon
84// Applied Chemicals and Materials Division
85// National Institute of Standards and Technology (NIST)
86// Boulder, Colorado, USA
87// Eric.Lemmon@nist.gov
88// 303-497-7939
89
90// C++ translation by Ian H. Bell
91// Applied Chemicals and Materials Division
92// National Institute of Standards and Technology (NIST)
93// Boulder, Colorado, USA
94// ian.bell@nist.gov
95
96// Other contributors:
97// Volker Heinemann, RMG Messtechnik GmbH
98// Jason Lu, Thermo Fisher Scientific
99// Ian Bell, NIST
100
101// The publication for the AGA 8 equation of state is available from AGA
102// and the Transmission Measurement Committee.
103
104// The GERG-2008 equation of state was developed by Oliver Kunz and Wolfgang Wagner;
105
106// Kunz, O. and Wagner, W.
107// The GERG-2008 Wide-Range Equation of State for Natural Gases and Other Mixtures;
108// An Expansion of GERG-2004
109// J. Chem. Eng. Data, 57(11):3032-3091, 2012.
110
111// Kunz, O., Klimeck, R., Wagner, W., and Jaeschke, M.
112// The GERG-2004 Wide-Range Equation of State for Natural Gases and Other Mixtures
113// GERG Technical Monograph 15
114// Fortschr.-Ber. VDI, Reihe 6, Nr. 557, VDI Verlag, D�sseldorf, 2007.
115// http://www.gerg.eu/public/uploads/files/publications/technical_monographs/tm15_04.pdf
116
117// Subroutines contained here for property calculations:
118// ***** Subroutine SetupGERG must be called once before calling other routines. ******
119// Sub MolarMassGERG(x, Mm)
120// Sub PressureGERG(T, D, x, P, Z)
121// Sub DensityGERG(iFlag, T, P, x, D, ierr, herr)
122// Sub PropertiesGERG(T, D, x, P, Z, dPdD, d2PdD2, d2PdTD, dPdT, U, H, S, Cv, Cp, W, G, JT, Kappa)
123// Sub SetupGERG()
124
125// The compositions in the x() array use the following order and must be sent as mole fractions:
126// 0 - PLACEHOLDER
127// 1 - Methane
128// 2 - Nitrogen
129// 3 - Carbon dioxide
130// 4 - Ethane
131// 5 - Propane
132// 6 - Isobutane
133// 7 - n-Butane
134// 8 - Isopentane
135// 9 - n-Pentane
136// 10 - n-Hexane
137// 11 - n-Heptane
138// 12 - n-Octane
139// 13 - n-Nonane
140// 14 - n-Decane
141// 15 - Hydrogen
142// 16 - Oxygen
143// 17 - Carbon monoxide
144// 18 - Water
145// 19 - Hydrogen sulfide
146// 20 - Helium
147// 21 - Argon
148
149// For example, a mixture (in moles) of 94% methane, 5% CO2, and 1% helium would be (in mole fractions):
150// x(1)=0.94, x(3)=0.05, x(20)=0.01
151
152// Function prototypes (not exported)
153static void Alpha0GERG(const double T, const double D, const std::vector<double> &x, double a0[3]);
154static void AlpharGERG(const int itau, const int idelta, const double T, const double D, const std::vector<double> &x, double ar[4][4]);
155static void PseudoCriticalPointGERG(const std::vector<double> &x, double &Tcx, double &Dcx);
156static void tTermsGERG(const double lntau, const std::vector<double> &x);
157
158// Variables containing the common parameters in the GERG-2008 equations
159static double RGERG;
160static const int NcGERG = 21, MaxFlds = 21, MaxMdl = 10, MaxTrmM = 12, MaxTrmP = 24;
161static const double epsilon = 1e-15;
162static int coik[MaxFlds+1][MaxTrmP+1], doik[MaxFlds+1][MaxTrmP+1], dijk[MaxMdl+1][MaxTrmM+1];
163static double Drold, Trold, Told, Trold2, xold[MaxFlds+1];
165static double Dc[MaxFlds+1], Tc[MaxFlds+1], MMiGERG[MaxFlds+1], Vc3[MaxFlds+1], Tc2[MaxFlds+1];
166static double noik[MaxFlds+1][MaxTrmP+1], toik[MaxFlds+1][MaxTrmP+1];
167static double cijk[MaxMdl+1][MaxTrmM+1];
168static double eijk[MaxMdl+1][MaxTrmM+1], gijk[MaxMdl+1][MaxTrmM+1], nijk[MaxMdl+1][MaxTrmM+1], tijk[MaxMdl+1][MaxTrmM+1];
169static double btij[MaxFlds+1][MaxFlds+1], bvij[MaxFlds+1][MaxFlds+1], gtij[MaxFlds+1][MaxFlds+1], gvij[MaxFlds+1][MaxFlds+1];
170static double fij[MaxFlds+1][MaxFlds+1], th0i[MaxFlds+1][7+1], n0i[MaxFlds+1][7+1];
171static double taup[MaxFlds+1][MaxTrmP+1], taupijk[MaxFlds+1][MaxTrmM+1];
172static double dPdDsave; //Calculated in the PressureGERG subroutine, but not included as an argument since it is only used internally in the density algorithm.
173
174inline double Tanh(double xx){ return (exp(xx) - exp(-xx)) / (exp(xx) + exp(-xx)); }
175inline double Sinh(double xx){ return (exp(xx) - exp(-xx)) / 2; }
176inline double Cosh(double xx){ return (exp(xx) + exp(-xx)) / 2; }
177
191void MolarMassGERG(const std::vector<double> &x, double &Mm)
192{
193 Mm = 0;
194 for (int i = 1; i <= NcGERG; ++i){
195 Mm += x[i] * MMiGERG[i];
196 }
197}
198
216void PressureGERG(const double T, const double D, const std::vector<double> &x, double &P, double &Z)
217{
218 double ar[4][4];
219 AlpharGERG(0, 0, T, D,x,ar);
220
221 Z = 1 + ar[0][1];
222 P = D * RGERG * T * Z;
223 dPdDsave = RGERG * T * (1 + 2 * ar[0][1] + ar[0][2]);
224}
225
247void DensityGERG(const int iFlag, const double T, const double P, const std::vector<double> &x, double &D, int &ierr, std::string &herr)
248{
249 int nFail, iFail;
250 double plog, vlog, P2, Z, dpdlv, vdiff, tolr, vinc;
251 double Tcx, Dcx;
252
253 double dPdD, d2PdD2, d2PdTD, dPdT, U, H, S, A;
254 double Cv, Cp, W, G, JT, Kappa, PP, Cf;
255
256 ierr = 0;
257 herr = "";
258 nFail = 0;
259 iFail = 0;
260 if (P < epsilon) { D = 0; return; }
261 tolr = 0.0000001;
262 PseudoCriticalPointGERG(x, Tcx, Dcx);
263
264 if (D > -epsilon){
265 D = P / RGERG / T; // Ideal gas estimate for vapor phase
266 if (iFlag == 2){ D = Dcx*3; } // Initial estimate for liquid phase
267 }
268 else{
269 D = std::abs(D); // If D<0, then use as initial estimate
270 }
271
272 plog = log(P);
273 vlog = -log(D);
274 for (int it = 1; it <= 50; ++it){
275 if (vlog < -7 || vlog > 100 || it == 20 || it == 30 || it == 40 || iFail == 1){
276 //Current state is bad or iteration is taking too long. Restart with completely different initial state
277 iFail = 0;
278 if (nFail > 2) {
279 // Iteration failed (above loop did not find a solution or checks made below indicate possible 2-phase state)
280 ierr = 1;
281 herr = "Calculation failed to converge in GERG method, ideal gas density returned.";
282 D = P / RGERG / T;
283 }
284 nFail++;
285 if (nFail == 1){
286 D = Dcx * 3; // If vapor phase search fails, look for root in liquid region
287 }
288 else if (nFail == 2) {
289 D = Dcx * 2.5; // If liquid phase search fails, look for root between liquid and critical regions
290 }
291 else if (nFail == 3) {
292 D = Dcx * 2; // If search fails, look for root in critical region
293 }
294 vlog = -log(D);
295 }
296 D = exp(-vlog);
297 PressureGERG(T, D, x, P2, Z);
298 if (dPdDsave < epsilon || P2 < epsilon){
299 // Current state is 2-phase, try locating a different state that is single phase
300 vinc = 0.1;
301 if (D > Dcx) { vinc = -0.1; }
302 if (it > 5) { vinc = vinc / 2; }
303 if (it > 10 && it < 20) { vinc = vinc / 5; }
304 vlog += vinc;
305 }
306 else{
307 // Find the next density with a first order Newton's type iterative scheme, with
308 // log(P) as the known variable and log(v) as the unknown property.
309 // See AGA 8 publication for further information.
310 dpdlv = -D * dPdDsave; // d(p)/d[log(v)]
311 vdiff = (log(P2) - plog) * P2 / dpdlv;
312 vlog += - vdiff;
313 if (std::abs(vdiff) < tolr) {
314 // Check to see if state is possibly 2-phase, and if so restart
315 if (dPdDsave < 0){
316 iFail = 1;
317 }
318 else{
319 D = exp(-vlog);
320
321 // If requested, check to see if point is possibly 2-phase
322 if (iFlag > 0){
323 PropertiesGERG(T, D, x, PP, Z, dPdD, d2PdD2, d2PdTD, dPdT, U, H, S, Cv, Cp, W, G, JT, Kappa, A, Cf);
324 if ((PP <= 0 || dPdD <= 0 || d2PdTD <= 0) || (Cv <= 0 || Cp <= 0 || W <= 0)) {
325 // Iteration failed (above loop did find a solution or checks made below indicate possible 2-phase state)
326 ierr = 1;
327 herr = "Calculation failed to converge in GERG method, ideal gas density returned.";
328 D = P / RGERG / T;
329 }
330 return;
331 }
332 return; // Iteration converged
333 }
334 }
335 }
336 }
337 // Iteration failed (above loop did not find a solution or checks made below indicate possible 2-phase state)
338 ierr = 1;
339 herr = "Calculation failed to converge in GERG method, ideal gas density returned.";
340 D = P / RGERG / T;
341}
342
371void PropertiesGERG(const double T, const double D, const std::vector<double> &x, double &P, double &Z, double &dPdD, double &d2PdD2, double &d2PdTD, double &dPdT, double &U, double &H, double &S, double &Cv, double &Cp, double &W, double &G, double &JT, double &Kappa, double &A, double &Cf)
372{
373 double a0[2+1], ar[3+1][3+1], Mm, R, RT;
374
375 // Calculate molar mass
376 MolarMassGERG(x, Mm);
377
378 // Calculate the ideal gas Helmholtz energy, and its first and second derivatives with respect to temperature.
379 Alpha0GERG(T, D, x, a0);
380
381 // Calculate the real gas Helmholtz energy, and its derivatives with respect to temperature and/or density.
382 AlpharGERG(1, 0, T, D, x, ar);
383
384 R = RGERG;
385 RT = R * T;
386 Z = 1 + ar[0][1];
387 P = D * RT * Z;
388 dPdD = RT * (1 + 2 * ar[0][1] + ar[0][2]);
389 dPdT = D * R * (1 + ar[0][1] - ar[1][1]);
390 d2PdTD = R * (1 + 2 * ar[0][1] + ar[0][2] - 2 * ar[1][1] - ar[1][2]);
391 A = RT * (a0[0] + ar[0][0]);
392 G = RT * (1 + ar[0][1] + a0[0] + ar[0][0]);
393 U = RT * (a0[1] + ar[1][0]);
394 H = RT * (1 + ar[0][1] + a0[1] + ar[1][0]);
395 S = R * (a0[1] + ar[1][0] - a0[0] - ar[0][0]);
396 Cv = -R * (a0[2] + ar[2][0]);
397 if (D > epsilon){
398 Cp = Cv + T * (dPdT / D) * (dPdT / D) / dPdD;
399 d2PdD2 = RT * (2 * ar[0][1] + 4 * ar[0][2] + ar[0][3]) / D;
400 JT = (T / D * dPdT / dPdD - 1) / Cp / D; // '=(dB/dT*T-B)/Cp for an ideal gas, but dB/dT is not known
401 }
402 else{
403 Cp = Cv + R;
404 d2PdD2 = 0;
405 JT = 1E+20;
406 }
407 W = 1000 * Cp / Cv * dPdD / Mm;
408 if (W < 0) { W = 0; }
409 W = sqrt(W);
410 Kappa = pow(W, 2) * Mm / (RT * 1000 * Z);
411 Cf = sqrt(Kappa * pow( (2 / (Kappa + 1)), ((Kappa + 1) / (Kappa - 1))));
412}
413
414
415// The following routines are low-level routines that should not be called outside of this code.
436static void ReducingParametersGERG(const std::vector<double> &x, double &Tr, double &Dr)
437{
438 double Vr, xij, F;
439 int icheck;
440
441 // Check to see if a component fraction has changed. If x is the same as the previous call, then exit.
442 icheck = 0;
443 for (int i = 1; i <= NcGERG; ++i){
444 if (std::abs(x[i] - xold[i]) > 0.0000001){ icheck = 1; }
445 xold[i] = x[i];
446 }
447 if (icheck == 0){
448 Dr = Drold;
449 Tr = Trold;
450 return;
451 }
452 Told = 0;
453 Trold2 = 0;
454
455 // Calculate reducing variables for T and D
456 Dr = 0;
457 Vr = 0;
458 Tr = 0;
459 for (int i = 1; i <= NcGERG; ++i){
460 if (x[i] > epsilon){
461 F = 1;
462 for (int j = i; j <= NcGERG; ++j){
463 if (x[j] > epsilon){
464 xij = F * (x[i] * x[j]) * (x[i] + x[j]);
465 Vr = Vr + xij * gvij[i][j] / (bvij[i][j] * x[i] + x[j]);
466 Tr = Tr + xij * gtij[i][j] / (btij[i][j] * x[i] + x[j]);
467 F = 2;
468 }
469 }
470 }
471 }
472 if (Vr > epsilon){ Dr = 1 / Vr; }
473 Drold = Dr;
474 Trold = Tr;
475}
476
488static void Alpha0GERG(const double T, const double D, const std::vector<double> &x, double a0[3])
489{
490 double LogT, LogD, LogHyp, th0T, LogxD;
491 double SumHyp0, SumHyp1, SumHyp2;
492 double em, ep, hcn, hsn;
493
494 a0[0] = 0; a0[1] = 0; a0[2] = 0;
495 if (D > epsilon) {LogD = log(D);} else {LogD = log(epsilon);}
496 LogT = log(T);
497 for (int i = 1; i <= NcGERG; ++i){
498 if (x[i] > epsilon){
499 LogxD = LogD + log(x[i]);
500 SumHyp0 = 0;
501 SumHyp1 = 0;
502 SumHyp2 = 0;
503 for (int j = 4; j <= 7; ++j){
504 if (th0i[i][j] > epsilon){
505 th0T = th0i[i][j] / T;
506 ep = exp(th0T);
507 em = 1 / ep;
508 hsn = (ep - em) / 2;
509 hcn = (ep + em) / 2;
510 if (j == 4 || j == 6){
511 LogHyp = log(std::abs(hsn));
512 SumHyp0 = SumHyp0 + n0i[i][j] * LogHyp;
513 SumHyp1 = SumHyp1 + n0i[i][j] * th0T * hcn / hsn;
514 SumHyp2 = SumHyp2 + n0i[i][j] * (th0T / hsn)* (th0T / hsn);
515 }
516 else{
517 LogHyp = log(std::abs(hcn));
518 SumHyp0 = SumHyp0 - n0i[i][j] * LogHyp;
519 SumHyp1 = SumHyp1 - n0i[i][j] * th0T * hsn / hcn;
520 SumHyp2 = SumHyp2 + n0i[i][j] * (th0T / hcn) * (th0T / hcn);
521 }
522 }
523 }
524 a0[0] += +x[i] * (LogxD + n0i[i][1] + n0i[i][2] / T - n0i[i][3] * LogT + SumHyp0);
525 a0[1] += +x[i] * (n0i[i][3] + n0i[i][2] / T + SumHyp1);
526 a0[2] += -x[i] * (n0i[i][3] + SumHyp2);
527 }
528 }
529}
530
548static void AlpharGERG(const int itau, const int idelta, const double T, const double D, const std::vector<double> &x, double ar[4][4])
549{
550 int mn;
551 double Tr, Dr, del, tau;
552 double lntau, ex, ex2, ex3, cij0, eij0;
553 double delp[7+1], Expd[7+1], ndt, ndtd, ndtt, xijf;
554
555 for (int i = 0; i <= 3; ++i){ for (int j = 0; j <= 3; ++j){ ar[i][j] = 0; } }
556
557 //Set up del, tau, log(tau), and the first 7 calculations for del^i
558 ReducingParametersGERG(x, Tr, Dr);
559 del = D / Dr;
560 tau = Tr / T;
561 lntau = log(tau);
562 delp[1] = del;
563 Expd[1] = exp(-delp[1]);
564 for (int i = 2; i <= 7; ++i){
565 delp[i] = delp[i - 1] * del;
566 Expd[i] = exp(-delp[i]);
567 }
568
569 // If temperature has changed, calculate temperature dependent parts
570 if (std::abs(T - Told) > 0.0000001 || std::abs(Tr - Trold2) > 0.0000001) {
571 tTermsGERG(lntau, x);
572 }
573 Told = T;
574 Trold2 = Tr;
575
576 // Calculate pure fluid contributions
577 for (int i = 1; i <= NcGERG; ++i){
578 if (x[i] > epsilon){
579 for (int k = 1; k <= kpol[i]; ++k){
580 ndt = x[i] * delp[doik[i][k]] * taup[i][k];
581 ndtd = ndt * doik[i][k];
582 ar[0][1] += ndtd;
583 ar[0][2] += ndtd * (doik[i][k] - 1);
584 if (itau > 0){
585 ndtt = ndt * toik[i][k];
586 ar[0][0] += ndt;
587 ar[1][0] += ndtt;
588 ar[2][0] += ndtt * (toik[i][k] - 1);
589 ar[1][1] += ndtt * doik[i][k];
590 ar[1][2] += ndtt * doik[i][k] * (doik[i][k] - 1);
591 ar[0][3] += ndtd * (doik[i][k] - 1) * (doik[i][k] - 2);
592 }
593 }
594 for (int k = 1 + kpol[i]; k <= kpol[i] + kexp[i]; ++k){
595 ndt = x[i] * delp[doik[i][k]] * taup[i][k]*Expd[coik[i][k]];
596 ex = coik[i][k] * delp[coik[i][k]];
597 ex2 = doik[i][k] - ex;
598 ex3 = ex2 * (ex2 - 1);
599 ar[0][1] += ndt * ex2;
600 ar[0][2] += ndt * (ex3 - coik[i][k] * ex);
601 if (itau > 0){
602 ndtt = ndt * toik[i][k];
603 ar[0][0] += ndt;
604 ar[1][0] += ndtt;
605 ar[2][0] += ndtt * (toik[i][k] - 1);
606 ar[1][1] += ndtt * ex2;
607 ar[1][2] += ndtt * (ex3 - coik[i][k] * ex);
608 ar[0][3] += ndt * (ex3 * (ex2 - 2) - ex * (3 * ex2 - 3 + coik[i][k]) * coik[i][k]);
609 }
610 }
611 }
612 }
613
614 // Calculate mixture contributions
615 for (int i = 1; i <= NcGERG - 1; ++i){
616 if (x[i] > epsilon){
617 for (int j = i + 1; j <= NcGERG; ++j){
618 if (x[j] > epsilon){
619 mn = mNumb[i][j];
620 if (mn >= 0){
621 xijf = x[i] * x[j] * fij[i][j];
622 for (int k = 1; k <= kpolij[mn]; ++k){
623 ndt = xijf * delp[dijk[mn][k]] * taupijk[mn][k];
624 ndtd = ndt * dijk[mn][k];
625 ar[0][1] += ndtd;
626 ar[0][2] += ndtd * (dijk[mn][k] - 1);
627 if (itau > 0){
628 ndtt = ndt * tijk[mn][k];
629 ar[0][0] += ndt;
630 ar[1][0] += ndtt;
631 ar[2][0] += ndtt * (tijk[mn][k] - 1);
632 ar[1][1] += ndtt * dijk[mn][k];
633 ar[1][2] += ndtt * dijk[mn][k] * (dijk[mn][k] - 1);
634 ar[0][3] += ndtd * (dijk[mn][k] - 1) * (dijk[mn][k] - 2);
635 }
636 }
637 for (int k = 1 + kpolij[mn]; k <= kpolij[mn] + kexpij[mn]; ++k){
638 cij0 = cijk[mn][k] * delp[2];
639 eij0 = eijk[mn][k] * del;
640 ndt = xijf * nijk[mn][k] * delp[dijk[mn][k]] * exp(cij0 + eij0 + gijk[mn][k] + tijk[mn][k] * lntau);
641 ex = dijk[mn][k] + 2 * cij0 + eij0;
642 ex2 = (ex * ex - dijk[mn][k] + 2 * cij0);
643 ar[0][1] += ndt * ex;
644 ar[0][2] += ndt * ex2;
645 if(itau > 0){
646 ndtt = ndt * tijk[mn][k];
647 ar[0][0] += ndt;
648 ar[1][0] += ndtt;
649 ar[2][0] += ndtt * (tijk[mn][k] - 1);
650 ar[1][1] += ndtt * ex;
651 ar[1][2] += ndtt * ex2;
652 ar[0][3] += ndt * (ex * (ex2 - 2 * (dijk[mn][k] - 2 * cij0)) + 2 * dijk[mn][k]);
653 }
654 }
655 }
656 }
657 }
658 }
659 }
660}
661
685static void tTermsGERG(const double lntau, const std::vector<double> &x)
686{
687 int i, mn;
688 double taup0[12+1];
689
690 i = 5; // Use propane to get exponents for short form of EOS
691 for (int k = 1; k <= kpol[i] + kexp[i]; ++k){
692 taup0[k] = exp(toik[i][k] * lntau);
693 }
694 for (int i = 1; i <= NcGERG; ++i){
695 if (x[i] > epsilon){
696 if (i > 4 && i != 15 && i != 18 && i != 20 ) {
697 for (int k = 1; k <= kpol[i] + kexp[i]; ++k){
698 taup[i][k] = noik[i][k] * taup0[k];
699 }
700 }
701 else{
702 for (int k = 1; k <= kpol[i] + kexp[i]; ++k){
703 taup[i][k] = noik[i][k] * exp(toik[i][k] * lntau);
704 }
705 }
706 }
707 }
708
709 for (int i = 1; i <= NcGERG - 1; ++i) {
710 if (x[i] > epsilon){
711 for (int j = i + 1; j <= NcGERG; ++j) {
712 if (x[j] > epsilon) {
713 mn = mNumb[i][j];
714 if (mn >= 0) {
715 for (int k = 1; k <= kpolij[mn]; ++k) {
716 taupijk[mn][k] = nijk[mn][k] * exp(tijk[mn][k] * lntau);
717 }
718 }
719 }
720 }
721 }
722 }
723}
724
734static void PseudoCriticalPointGERG(const std::vector<double> &x, double &Tcx, double &Dcx)
735{
736 // PseudoCriticalPointGERG(x, Tcx, Dcx)
737
738 // Calculate a pseudo critical point as the mole fraction average of the critical temperatures and critical volumes
739
740 double Vcx;
741 Tcx = 0;
742 Vcx = 0;
743 Dcx = 0;
744 for (int i = 1; i <= NcGERG; ++i){
745 Tcx = Tcx + x[i] * Tc[i];
746 Vcx = Vcx + x[i] / Dc[i];
747 }
748 if (Vcx > epsilon){ Dcx = 1 / Vcx; }
749}
750
776{
777 // Initialize all the constants and parameters in the GERG-2008 model.
778 // Some values are modified for calculations that do not depend on T, D, and x in order to speed up the program.
779
780 double o13, bijk[MaxMdl+1][MaxTrmM+1], Rs, Rsr;
781 double T0, d0;
782
783 RGERG = 8.314472;
784 Rs = 8.31451;
785 Rsr = Rs / RGERG;
786 o13 = 1.0 / 3.0;
787
788 for (int i = 1; i <= MaxFlds; ++i){
789 xold[i] = 0;
790 }
791 Told = 0;
792
793 // Molar masses [g/mol]
794 MMiGERG[1] = 16.04246; // Methane
795 MMiGERG[2] = 28.0134; // Nitrogen
796 MMiGERG[3] = 44.0095; // Carbon dioxide
797 MMiGERG[4] = 30.06904; // Ethane
798 MMiGERG[5] = 44.09562; // Propane
799 MMiGERG[6] = 58.1222; // Isobutane
800 MMiGERG[7] = 58.1222; // n-Butane
801 MMiGERG[8] = 72.14878; // Isopentane
802 MMiGERG[9] = 72.14878; // n-Pentane
803 MMiGERG[10] = 86.17536; // Hexane
804 MMiGERG[11] = 100.20194; // Heptane
805 MMiGERG[12] = 114.22852; // Octane
806 MMiGERG[13] = 128.2551; // Nonane
807 MMiGERG[14] = 142.28168; // Decane
808 MMiGERG[15] = 2.01588; // Hydrogen
809 MMiGERG[16] = 31.9988; // Oxygen
810 MMiGERG[17] = 28.0101; // Carbon monoxide
811 MMiGERG[18] = 18.01528; // Water
812 MMiGERG[19] = 34.08088; // Hydrogen sulfide
813 MMiGERG[20] = 4.002602; // Helium
814 MMiGERG[21] = 39.948; // Argon
815
816 // Number of polynomial and exponential terms
817 for(int i = 1; i <= MaxFlds; ++i){
818 kpol[i] = 6;
819 kexp[i] = 6;
820 }
821 kexp[1] = 18;
822 kexp[2] = 18;
823 kexp[4] = 18;
824 kpol[3] = 4; kexp[3] = 18;
825 kpol[15] = 5; kexp[15] = 9;
826 kpol[18] = 7; kexp[18] = 9;
827 kpol[20] = 4; kexp[20] = 8;
828 kpolij[1] = 2; kexpij[1] = 10;
829 kpolij[2] = 5; kexpij[2] = 4;
830 kpolij[3] = 2; kexpij[3] = 7;
831 kpolij[4] = 3; kexpij[4] = 3;
832 kpolij[5] = 2; kexpij[5] = 4;
833 kpolij[6] = 3; kexpij[6] = 3;
834 kpolij[7] = 4; kexpij[7] = 0;
835 kpolij[10] = 10; kexpij[10] = 0;
836
837 // Critical densities [mol/l]
838 Dc[1] = 10.139342719;
839 Dc[2] = 11.1839;
840 Dc[3] = 10.624978698;
841 Dc[4] = 6.87085454;
842 Dc[5] = 5.000043088;
843 Dc[6] = 3.86014294;
844 Dc[7] = 3.920016792;
845 Dc[8] = 3.271;
846 Dc[9] = 3.215577588;
847 Dc[10] = 2.705877875;
848 Dc[11] = 2.315324434;
849 Dc[12] = 2.056404127;
850 Dc[13] = 1.81;
851 Dc[14] = 1.64;
852 Dc[15] = 14.94;
853 Dc[16] = 13.63;
854 Dc[17] = 10.85;
855 Dc[18] = 17.87371609;
856 Dc[19] = 10.19;
857 Dc[20] = 17.399;
858 Dc[21] = 13.407429659;
859
860 // Critical temperatures [K]
861 Tc[1] = 190.564;
862 Tc[2] = 126.192;
863 Tc[3] = 304.1282;
864 Tc[4] = 305.322;
865 Tc[5] = 369.825;
866 Tc[6] = 407.817;
867 Tc[7] = 425.125;
868 Tc[8] = 460.35;
869 Tc[9] = 469.7;
870 Tc[10] = 507.82;
871 Tc[11] = 540.13;
872 Tc[12] = 569.32;
873 Tc[13] = 594.55;
874 Tc[14] = 617.7;
875 Tc[15] = 33.19;
876 Tc[16] = 154.595;
877 Tc[17] = 132.86;
878 Tc[18] = 647.096;
879 Tc[19] = 373.1;
880 Tc[20] = 5.1953;
881 Tc[21] = 150.687;
882
883 // Exponents in pure fluid equations
884 for(int i = 1; i <= MaxFlds; ++i){
885 Vc3[i] = 1 / pow(Dc[i], o13) / 2;
886 Tc2[i] = sqrt(Tc[i]);
887 coik[i][1] = 0; doik[i][1] = 1; toik[i][1] = 0.25;
888 coik[i][2] = 0; doik[i][2] = 1; toik[i][2] = 1.125;
889 coik[i][3] = 0; doik[i][3] = 1; toik[i][3] = 1.5;
890 coik[i][4] = 0; doik[i][4] = 2; toik[i][4] = 1.375;
891 coik[i][5] = 0; doik[i][5] = 3; toik[i][5] = 0.25;
892 coik[i][6] = 0; doik[i][6] = 7; toik[i][6] = 0.875;
893 coik[i][7] = 1; doik[i][7] = 2; toik[i][7] = 0.625;
894 coik[i][8] = 1; doik[i][8] = 5; toik[i][8] = 1.75;
895 coik[i][9] = 2; doik[i][9] = 1; toik[i][9] = 3.625;
896 coik[i][10] = 2; doik[i][10] = 4; toik[i][10] = 3.625;
897 coik[i][11] = 3; doik[i][11] = 3; toik[i][11] = 14.5;
898 coik[i][12] = 3; doik[i][12] = 4; toik[i][12] = 12;
899 }
900 for (int i = 1; i <= 4; ++i){
901 if (i != 3){
902 coik[i][1] = 0; doik[i][1] = 1; toik[i][1] = 0.125;
903 coik[i][2] = 0; doik[i][2] = 1; toik[i][2] = 1.125;
904 coik[i][3] = 0; doik[i][3] = 2; toik[i][3] = 0.375;
905 coik[i][4] = 0; doik[i][4] = 2; toik[i][4] = 1.125;
906 coik[i][5] = 0; doik[i][5] = 4; toik[i][5] = 0.625;
907 coik[i][6] = 0; doik[i][6] = 4; toik[i][6] = 1.5;
908 coik[i][7] = 1; doik[i][7] = 1; toik[i][7] = 0.625;
909 coik[i][8] = 1; doik[i][8] = 1; toik[i][8] = 2.625;
910 coik[i][9] = 1; doik[i][9] = 1; toik[i][9] = 2.75;
911 coik[i][10] = 1; doik[i][10] = 2; toik[i][10] = 2.125;
912 coik[i][11] = 1; doik[i][11] = 3; toik[i][11] = 2;
913 coik[i][12] = 1; doik[i][12] = 6; toik[i][12] = 1.75;
914 coik[i][13] = 2; doik[i][13] = 2; toik[i][13] = 4.5;
915 coik[i][14] = 2; doik[i][14] = 3; toik[i][14] = 4.75;
916 coik[i][15] = 2; doik[i][15] = 3; toik[i][15] = 5;
917 coik[i][16] = 2; doik[i][16] = 4; toik[i][16] = 4;
918 coik[i][17] = 2; doik[i][17] = 4; toik[i][17] = 4.5;
919 coik[i][18] = 3; doik[i][18] = 2; toik[i][18] = 7.5;
920 coik[i][19] = 3; doik[i][19] = 3; toik[i][19] = 14;
921 coik[i][20] = 3; doik[i][20] = 4; toik[i][20] = 11.5;
922 coik[i][21] = 6; doik[i][21] = 5; toik[i][21] = 26;
923 coik[i][22] = 6; doik[i][22] = 6; toik[i][22] = 28;
924 coik[i][23] = 6; doik[i][23] = 6; toik[i][23] = 30;
925 coik[i][24] = 6; doik[i][24] = 7; toik[i][24] = 16;
926 }
927 }
928
929 // Coefficients of pure fluid equations
930 // Methane
931 noik[1][1] = 0.57335704239162;
932 noik[1][2] = -1.676068752373;
933 noik[1][3] = 0.23405291834916;
934 noik[1][4] = -0.21947376343441;
935 noik[1][5] = 0.016369201404128;
936 noik[1][6] = 0.01500440638928;
937 noik[1][7] = 0.098990489492918;
938 noik[1][8] = 0.58382770929055;
939 noik[1][9] = -0.7478686756039;
940 noik[1][10] = 0.30033302857974;
941 noik[1][11] = 0.20985543806568;
942 noik[1][12] = -0.018590151133061;
943 noik[1][13] = -0.15782558339049;
944 noik[1][14] = 0.12716735220791;
945 noik[1][15] = -0.032019743894346;
946 noik[1][16] = -0.068049729364536;
947 noik[1][17] = 0.024291412853736;
948 noik[1][18] = 5.1440451639444E-03;
949 noik[1][19] = -0.019084949733532;
950 noik[1][20] = 5.5229677241291E-03;
951 noik[1][21] = -4.4197392976085E-03;
952 noik[1][22] = 0.040061416708429;
953 noik[1][23] = -0.033752085907575;
954 noik[1][24] = -2.5127658213357E-03;
955 // Nitrogen
956 noik[2][1] = 0.59889711801201;
957 noik[2][2] = -1.6941557480731;
958 noik[2][3] = 0.24579736191718;
959 noik[2][4] = -0.23722456755175;
960 noik[2][5] = 0.017954918715141;
961 noik[2][6] = 0.014592875720215;
962 noik[2][7] = 0.10008065936206;
963 noik[2][8] = 0.73157115385532;
964 noik[2][9] = -0.88372272336366;
965 noik[2][10] = 0.31887660246708;
966 noik[2][11] = 0.20766491728799;
967 noik[2][12] = -0.019379315454158;
968 noik[2][13] = -0.16936641554983;
969 noik[2][14] = 0.13546846041701;
970 noik[2][15] = -0.033066712095307;
971 noik[2][16] = -0.060690817018557;
972 noik[2][17] = 0.012797548292871;
973 noik[2][18] = 5.8743664107299E-03;
974 noik[2][19] = -0.018451951971969;
975 noik[2][20] = 4.7226622042472E-03;
976 noik[2][21] = -5.2024079680599E-03;
977 noik[2][22] = 0.043563505956635;
978 noik[2][23] = -0.036251690750939;
979 noik[2][24] = -2.8974026866543E-03;
980 // Ethane
981 noik[4][1] = 0.63596780450714;
982 noik[4][2] = -1.7377981785459;
983 noik[4][3] = 0.28914060926272;
984 noik[4][4] = -0.33714276845694;
985 noik[4][5] = 0.022405964699561;
986 noik[4][6] = 0.015715424886913;
987 noik[4][7] = 0.11450634253745;
988 noik[4][8] = 1.0612049379745;
989 noik[4][9] = -1.2855224439423;
990 noik[4][10] = 0.39414630777652;
991 noik[4][11] = 0.31390924682041;
992 noik[4][12] = -0.021592277117247;
993 noik[4][13] = -0.21723666564905;
994 noik[4][14] = -0.28999574439489;
995 noik[4][15] = 0.42321173025732;
996 noik[4][16] = 0.04643410025926;
997 noik[4][17] = -0.13138398329741;
998 noik[4][18] = 0.011492850364368;
999 noik[4][19] = -0.033387688429909;
1000 noik[4][20] = 0.015183171583644;
1001 noik[4][21] = -4.7610805647657E-03;
1002 noik[4][22] = 0.046917166277885;
1003 noik[4][23] = -0.039401755804649;
1004 noik[4][24] = -3.2569956247611E-03;
1005 // Propane
1006 noik[5][1] = 1.0403973107358;
1007 noik[5][2] = -2.8318404081403;
1008 noik[5][3] = 0.84393809606294;
1009 noik[5][4] = -0.076559591850023;
1010 noik[5][5] = 0.09469737305728;
1011 noik[5][6] = 2.4796475497006E-04;
1012 noik[5][7] = 0.2774376042287;
1013 noik[5][8] = -0.043846000648377;
1014 noik[5][9] = -0.2699106478435;
1015 noik[5][10] = -0.06931341308986;
1016 noik[5][11] = -0.029632145981653;
1017 noik[5][12] = 0.01404012675138;
1018 // Isobutane
1019 noik[6][1] = 1.04293315891;
1020 noik[6][2] = -2.8184272548892;
1021 noik[6][3] = 0.8617623239785;
1022 noik[6][4] = -0.10613619452487;
1023 noik[6][5] = 0.098615749302134;
1024 noik[6][6] = 2.3948208682322E-04;
1025 noik[6][7] = 0.3033000485695;
1026 noik[6][8] = -0.041598156135099;
1027 noik[6][9] = -0.29991937470058;
1028 noik[6][10] = -0.080369342764109;
1029 noik[6][11] = -0.029761373251151;
1030 noik[6][12] = 0.01305963030314;
1031 // n-Butane
1032 noik[7][1] = 1.0626277411455;
1033 noik[7][2] = -2.862095182835;
1034 noik[7][3] = 0.88738233403777;
1035 noik[7][4] = -0.12570581155345;
1036 noik[7][5] = 0.10286308708106;
1037 noik[7][6] = 2.5358040602654E-04;
1038 noik[7][7] = 0.32325200233982;
1039 noik[7][8] = -0.037950761057432;
1040 noik[7][9] = -0.32534802014452;
1041 noik[7][10] = -0.079050969051011;
1042 noik[7][11] = -0.020636720547775;
1043 noik[7][12] = 0.005705380933475;
1044 // Isopentane
1045 noik[8][1] = 1.0963;
1046 noik[8][2] = -3.0402;
1047 noik[8][3] = 1.0317;
1048 noik[8][4] = -0.1541;
1049 noik[8][5] = 0.11535;
1050 noik[8][6] = 0.00029809;
1051 noik[8][7] = 0.39571;
1052 noik[8][8] = -0.045881;
1053 noik[8][9] = -0.35804;
1054 noik[8][10] = -0.10107;
1055 noik[8][11] = -0.035484;
1056 noik[8][12] = 0.018156;
1057 // n-Pentane
1058 noik[9][1] = 1.0968643098001;
1059 noik[9][2] = -2.9988888298061;
1060 noik[9][3] = 0.99516886799212;
1061 noik[9][4] = -0.16170708558539;
1062 noik[9][5] = 0.11334460072775;
1063 noik[9][6] = 2.6760595150748E-04;
1064 noik[9][7] = 0.40979881986931;
1065 noik[9][8] = -0.040876423083075;
1066 noik[9][9] = -0.38169482469447;
1067 noik[9][10] = -0.10931956843993;
1068 noik[9][11] = -0.03207322332799;
1069 noik[9][12] = 0.016877016216975;
1070 // Hexane
1071 noik[10][1] = 1.0553238013661;
1072 noik[10][2] = -2.6120615890629;
1073 noik[10][3] = 0.7661388296726;
1074 noik[10][4] = -0.29770320622459;
1075 noik[10][5] = 0.11879907733358;
1076 noik[10][6] = 2.7922861062617E-04;
1077 noik[10][7] = 0.46347589844105;
1078 noik[10][8] = 0.011433196980297;
1079 noik[10][9] = -0.48256968738131;
1080 noik[10][10] = -0.093750558924659;
1081 noik[10][11] = -6.7273247155994E-03;
1082 noik[10][12] = -5.1141583585428E-03;
1083 // Heptane
1084 noik[11][1] = 1.0543747645262;
1085 noik[11][2] = -2.6500681506144;
1086 noik[11][3] = 0.81730047827543;
1087 noik[11][4] = -0.30451391253428;
1088 noik[11][5] = 0.122538687108;
1089 noik[11][6] = 2.7266472743928E-04;
1090 noik[11][7] = 0.4986582568167;
1091 noik[11][8] = -7.1432815084176E-04;
1092 noik[11][9] = -0.5423689552545;
1093 noik[11][10] = -0.13801821610756;
1094 noik[11][11] = -6.1595287380011E-03;
1095 noik[11][12] = 4.8602510393022E-04;
1096 // Octane
1097 noik[12][1] = 1.0722544875633;
1098 noik[12][2] = -2.4632951172003;
1099 noik[12][3] = 0.65386674054928;
1100 noik[12][4] = -0.36324974085628;
1101 noik[12][5] = 0.12713269626764;
1102 noik[12][6] = 3.071357277793E-04;
1103 noik[12][7] = 0.5265685698754;
1104 noik[12][8] = 0.019362862857653;
1105 noik[12][9] = -0.58939426849155;
1106 noik[12][10] = -0.14069963991934;
1107 noik[12][11] = -7.8966330500036E-03;
1108 noik[12][12] = 3.3036597968109E-03;
1109 // Nonane
1110 noik[13][1] = 1.1151;
1111 noik[13][2] = -2.702;
1112 noik[13][3] = 0.83416;
1113 noik[13][4] = -0.38828;
1114 noik[13][5] = 0.1376;
1115 noik[13][6] = 0.00028185;
1116 noik[13][7] = 0.62037;
1117 noik[13][8] = 0.015847;
1118 noik[13][9] = -0.61726;
1119 noik[13][10] = -0.15043;
1120 noik[13][11] = -0.012982;
1121 noik[13][12] = 0.0044325;
1122 // Decane
1123 noik[14][1] = 1.0461;
1124 noik[14][2] = -2.4807;
1125 noik[14][3] = 0.74372;
1126 noik[14][4] = -0.52579;
1127 noik[14][5] = 0.15315;
1128 noik[14][6] = 0.00032865;
1129 noik[14][7] = 0.84178;
1130 noik[14][8] = 0.055424;
1131 noik[14][9] = -0.73555;
1132 noik[14][10] = -0.18507;
1133 noik[14][11] = -0.020775;
1134 noik[14][12] = 0.012335;
1135 // Oxygen
1136 noik[16][1] = 0.88878286369701;
1137 noik[16][2] = -2.4879433312148;
1138 noik[16][3] = 0.59750190775886;
1139 noik[16][4] = 9.6501817061881E-03;
1140 noik[16][5] = 0.07197042871277;
1141 noik[16][6] = 2.2337443000195E-04;
1142 noik[16][7] = 0.18558686391474;
1143 noik[16][8] = -0.03812936803576;
1144 noik[16][9] = -0.15352245383006;
1145 noik[16][10] = -0.026726814910919;
1146 noik[16][11] = -0.025675298677127;
1147 noik[16][12] = 9.5714302123668E-03;
1148 // Carbon monoxide
1149 noik[17][1] = 0.90554;
1150 noik[17][2] = -2.4515;
1151 noik[17][3] = 0.53149;
1152 noik[17][4] = 0.024173;
1153 noik[17][5] = 0.072156;
1154 noik[17][6] = 0.00018818;
1155 noik[17][7] = 0.19405;
1156 noik[17][8] = -0.043268;
1157 noik[17][9] = -0.12778;
1158 noik[17][10] = -0.027896;
1159 noik[17][11] = -0.034154;
1160 noik[17][12] = 0.016329;
1161 // Hydrogen sulfide
1162 noik[19][1] = 0.87641;
1163 noik[19][2] = -2.0367;
1164 noik[19][3] = 0.21634;
1165 noik[19][4] = -0.050199;
1166 noik[19][5] = 0.066994;
1167 noik[19][6] = 0.00019076;
1168 noik[19][7] = 0.20227;
1169 noik[19][8] = -0.0045348;
1170 noik[19][9] = -0.2223;
1171 noik[19][10] = -0.034714;
1172 noik[19][11] = -0.014885;
1173 noik[19][12] = 0.0074154;
1174 // Argon
1175 noik[21][1] = 0.85095714803969;
1176 noik[21][2] = -2.400322294348;
1177 noik[21][3] = 0.54127841476466;
1178 noik[21][4] = 0.016919770692538;
1179 noik[21][5] = 0.068825965019035;
1180 noik[21][6] = 2.1428032815338E-04;
1181 noik[21][7] = 0.17429895321992;
1182 noik[21][8] = -0.033654495604194;
1183 noik[21][9] = -0.13526799857691;
1184 noik[21][10] = -0.016387350791552;
1185 noik[21][11] = -0.024987666851475;
1186 noik[21][12] = 8.8769204815709E-03;
1187 // Carbon dioxide
1188 coik[3][1] = 0; doik[3][1] = 1; toik[3][1] = 0; noik[3][1] = 0.52646564804653;
1189 coik[3][2] = 0; doik[3][2] = 1; toik[3][2] = 1.25; noik[3][2] = -1.4995725042592;
1190 coik[3][3] = 0; doik[3][3] = 2; toik[3][3] = 1.625; noik[3][3] = 0.27329786733782;
1191 coik[3][4] = 0; doik[3][4] = 3; toik[3][4] = 0.375; noik[3][4] = 0.12949500022786;
1192 coik[3][5] = 1; doik[3][5] = 3; toik[3][5] = 0.375; noik[3][5] = 0.15404088341841;
1193 coik[3][6] = 1; doik[3][6] = 3; toik[3][6] = 1.375; noik[3][6] = -0.58186950946814;
1194 coik[3][7] = 1; doik[3][7] = 4; toik[3][7] = 1.125; noik[3][7] = -0.18022494838296;
1195 coik[3][8] = 1; doik[3][8] = 5; toik[3][8] = 1.375; noik[3][8] = -0.095389904072812;
1196 coik[3][9] = 1; doik[3][9] = 6; toik[3][9] = 0.125; noik[3][9] = -8.0486819317679E-03;
1197 coik[3][10] = 1; doik[3][10] = 6; toik[3][10] = 1.625; noik[3][10] = -0.03554775127309;
1198 coik[3][11] = 2; doik[3][11] = 1; toik[3][11] = 3.75; noik[3][11] = -0.28079014882405;
1199 coik[3][12] = 2; doik[3][12] = 4; toik[3][12] = 3.5; noik[3][12] = -0.082435890081677;
1200 coik[3][13] = 3; doik[3][13] = 1; toik[3][13] = 7.5; noik[3][13] = 0.010832427979006;
1201 coik[3][14] = 3; doik[3][14] = 1; toik[3][14] = 8; noik[3][14] = -6.7073993161097E-03;
1202 coik[3][15] = 3; doik[3][15] = 3; toik[3][15] = 6; noik[3][15] = -4.6827907600524E-03;
1203 coik[3][16] = 3; doik[3][16] = 3; toik[3][16] = 16; noik[3][16] = -0.028359911832177;
1204 coik[3][17] = 3; doik[3][17] = 4; toik[3][17] = 11; noik[3][17] = 0.019500174744098;
1205 coik[3][18] = 5; doik[3][18] = 5; toik[3][18] = 24; noik[3][18] = -0.21609137507166;
1206 coik[3][19] = 5; doik[3][19] = 5; toik[3][19] = 26; noik[3][19] = 0.43772794926972;
1207 coik[3][20] = 5; doik[3][20] = 5; toik[3][20] = 28; noik[3][20] = -0.22130790113593;
1208 coik[3][21] = 6; doik[3][21] = 5; toik[3][21] = 24; noik[3][21] = 0.015190189957331;
1209 coik[3][22] = 6; doik[3][22] = 5; toik[3][22] = 26; noik[3][22] = -0.0153809489533;
1210 // Hydrogen
1211 coik[15][1] = 0; doik[15][1] = 1; toik[15][1] = 0.5; noik[15][1] = 5.3579928451252;
1212 coik[15][2] = 0; doik[15][2] = 1; toik[15][2] = 0.625; noik[15][2] = -6.2050252530595;
1213 coik[15][3] = 0; doik[15][3] = 2; toik[15][3] = 0.375; noik[15][3] = 0.13830241327086;
1214 coik[15][4] = 0; doik[15][4] = 2; toik[15][4] = 0.625; noik[15][4] = -0.071397954896129;
1215 coik[15][5] = 0; doik[15][5] = 4; toik[15][5] = 1.125; noik[15][5] = 0.015474053959733;
1216 coik[15][6] = 1; doik[15][6] = 1; toik[15][6] = 2.625; noik[15][6] = -0.14976806405771;
1217 coik[15][7] = 1; doik[15][7] = 5; toik[15][7] = 0; noik[15][7] = -0.026368723988451;
1218 coik[15][8] = 1; doik[15][8] = 5; toik[15][8] = 0.25; noik[15][8] = 0.056681303156066;
1219 coik[15][9] = 1; doik[15][9] = 5; toik[15][9] = 1.375; noik[15][9] = -0.060063958030436;
1220 coik[15][10] = 2; doik[15][10] = 1; toik[15][10] = 4; noik[15][10] = -0.45043942027132;
1221 coik[15][11] = 2; doik[15][11] = 1; toik[15][11] = 4.25; noik[15][11] = 0.424788402445;
1222 coik[15][12] = 3; doik[15][12] = 2; toik[15][12] = 5; noik[15][12] = -0.021997640827139;
1223 coik[15][13] = 3; doik[15][13] = 5; toik[15][13] = 8; noik[15][13] = -0.01049952137453;
1224 coik[15][14] = 5; doik[15][14] = 1; toik[15][14] = 8; noik[15][14] = -2.8955902866816E-03;
1225 // Water
1226 coik[18][1] = 0; doik[18][1] = 1; toik[18][1] = 0.5; noik[18][1] = 0.82728408749586;
1227 coik[18][2] = 0; doik[18][2] = 1; toik[18][2] = 1.25; noik[18][2] = -1.8602220416584;
1228 coik[18][3] = 0; doik[18][3] = 1; toik[18][3] = 1.875; noik[18][3] = -1.1199009613744;
1229 coik[18][4] = 0; doik[18][4] = 2; toik[18][4] = 0.125; noik[18][4] = 0.15635753976056;
1230 coik[18][5] = 0; doik[18][5] = 2; toik[18][5] = 1.5; noik[18][5] = 0.87375844859025;
1231 coik[18][6] = 0; doik[18][6] = 3; toik[18][6] = 1; noik[18][6] = -0.36674403715731;
1232 coik[18][7] = 0; doik[18][7] = 4; toik[18][7] = 0.75; noik[18][7] = 0.053987893432436;
1233 coik[18][8] = 1; doik[18][8] = 1; toik[18][8] = 1.5; noik[18][8] = 1.0957690214499;
1234 coik[18][9] = 1; doik[18][9] = 5; toik[18][9] = 0.625; noik[18][9] = 0.053213037828563;
1235 coik[18][10] = 1; doik[18][10] = 5; toik[18][10] = 2.625; noik[18][10] = 0.013050533930825;
1236 coik[18][11] = 2; doik[18][11] = 1; toik[18][11] = 5; noik[18][11] = -0.41079520434476;
1237 coik[18][12] = 2; doik[18][12] = 2; toik[18][12] = 4; noik[18][12] = 0.1463744334412;
1238 coik[18][13] = 2; doik[18][13] = 4; toik[18][13] = 4.5; noik[18][13] = -0.055726838623719;
1239 coik[18][14] = 3; doik[18][14] = 4; toik[18][14] = 3; noik[18][14] = -0.0112017741438;
1240 coik[18][15] = 5; doik[18][15] = 1; toik[18][15] = 4; noik[18][15] = -6.6062758068099E-03;
1241 coik[18][16] = 5; doik[18][16] = 1; toik[18][16] = 6; noik[18][16] = 4.6918522004538E-03;
1242 // Helium
1243 coik[20][1] = 0; doik[20][1] = 1; toik[20][1] = 0; noik[20][1] = -0.45579024006737;
1244 coik[20][2] = 0; doik[20][2] = 1; toik[20][2] = 0.125; noik[20][2] = 1.2516390754925;
1245 coik[20][3] = 0; doik[20][3] = 1; toik[20][3] = 0.75; noik[20][3] = -1.5438231650621;
1246 coik[20][4] = 0; doik[20][4] = 4; toik[20][4] = 1; noik[20][4] = 0.020467489707221;
1247 coik[20][5] = 1; doik[20][5] = 1; toik[20][5] = 0.75; noik[20][5] = -0.34476212380781;
1248 coik[20][6] = 1; doik[20][6] = 3; toik[20][6] = 2.625; noik[20][6] = -0.020858459512787;
1249 coik[20][7] = 1; doik[20][7] = 5; toik[20][7] = 0.125; noik[20][7] = 0.016227414711778;
1250 coik[20][8] = 1; doik[20][8] = 5; toik[20][8] = 1.25; noik[20][8] = -0.057471818200892;
1251 coik[20][9] = 1; doik[20][9] = 5; toik[20][9] = 2; noik[20][9] = 0.019462416430715;
1252 coik[20][10] = 2; doik[20][10] = 2; toik[20][10] = 1; noik[20][10] = -0.03329568012302;
1253 coik[20][11] = 3; doik[20][11] = 1; toik[20][11] = 4.5; noik[20][11] = -0.010863577372367;
1254 coik[20][12] = 3; doik[20][12] = 2; toik[20][12] = 5; noik[20][12] = -0.022173365245954;
1255
1256 // Exponents in mixture equations
1257 // Methane-Nitrogen
1258 dijk[3][1] = 1; tijk[3][1] = 0; cijk[3][1] = 0; eijk[3][1] = 0; bijk[3][1] = 0; gijk[3][1] = 0; nijk[3][1] = -9.8038985517335E-03;
1259 dijk[3][2] = 4; tijk[3][2] = 1.85; cijk[3][2] = 0; eijk[3][2] = 0; bijk[3][2] = 0; gijk[3][2] = 0; nijk[3][2] = 4.2487270143005E-04;
1260 dijk[3][3] = 1; tijk[3][3] = 7.85; cijk[3][3] = 1; eijk[3][3] = 0.5; bijk[3][3] = 1; gijk[3][3] = 0.5; nijk[3][3] = -0.034800214576142;
1261 dijk[3][4] = 2; tijk[3][4] = 5.4; cijk[3][4] = 1; eijk[3][4] = 0.5; bijk[3][4] = 1; gijk[3][4] = 0.5; nijk[3][4] = -0.13333813013896;
1262 dijk[3][5] = 2; tijk[3][5] = 0; cijk[3][5] = 0.25; eijk[3][5] = 0.5; bijk[3][5] = 2.5; gijk[3][5] = 0.5; nijk[3][5] = -0.011993694974627;
1263 dijk[3][6] = 2; tijk[3][6] = 0.75; cijk[3][6] = 0; eijk[3][6] = 0.5; bijk[3][6] = 3; gijk[3][6] = 0.5; nijk[3][6] = 0.069243379775168;
1264 dijk[3][7] = 2; tijk[3][7] = 2.8; cijk[3][7] = 0; eijk[3][7] = 0.5; bijk[3][7] = 3; gijk[3][7] = 0.5; nijk[3][7] = -0.31022508148249;
1265 dijk[3][8] = 2; tijk[3][8] = 4.45; cijk[3][8] = 0; eijk[3][8] = 0.5; bijk[3][8] = 3; gijk[3][8] = 0.5; nijk[3][8] = 0.24495491753226;
1266 dijk[3][9] = 3; tijk[3][9] = 4.25; cijk[3][9] = 0; eijk[3][9] = 0.5; bijk[3][9] = 3; gijk[3][9] = 0.5; nijk[3][9] = 0.22369816716981;
1267 // Methane-Carbon dioxide
1268 dijk[4][1] = 1; tijk[4][1] = 2.6; cijk[4][1] = 0; eijk[4][1] = 0; bijk[4][1] = 0; gijk[4][1] = 0; nijk[4][1] = -0.10859387354942;
1269 dijk[4][2] = 2; tijk[4][2] = 1.95; cijk[4][2] = 0; eijk[4][2] = 0; bijk[4][2] = 0; gijk[4][2] = 0; nijk[4][2] = 0.080228576727389;
1270 dijk[4][3] = 3; tijk[4][3] = 0; cijk[4][3] = 0; eijk[4][3] = 0; bijk[4][3] = 0; gijk[4][3] = 0; nijk[4][3] = -9.3303985115717E-03;
1271 dijk[4][4] = 1; tijk[4][4] = 3.95; cijk[4][4] = 1; eijk[4][4] = 0.5; bijk[4][4] = 1; gijk[4][4] = 0.5; nijk[4][4] = 0.040989274005848;
1272 dijk[4][5] = 2; tijk[4][5] = 7.95; cijk[4][5] = 0.5; eijk[4][5] = 0.5; bijk[4][5] = 2; gijk[4][5] = 0.5; nijk[4][5] = -0.24338019772494;
1273 dijk[4][6] = 3; tijk[4][6] = 8; cijk[4][6] = 0; eijk[4][6] = 0.5; bijk[4][6] = 3; gijk[4][6] = 0.5; nijk[4][6] = 0.23855347281124;
1274 // Methane-Ethane
1275 dijk[1][1] = 3; tijk[1][1] = 0.65; cijk[1][1] = 0; eijk[1][1] = 0; bijk[1][1] = 0; gijk[1][1] = 0; nijk[1][1] = -8.0926050298746E-04;
1276 dijk[1][2] = 4; tijk[1][2] = 1.55; cijk[1][2] = 0; eijk[1][2] = 0; bijk[1][2] = 0; gijk[1][2] = 0; nijk[1][2] = -7.5381925080059E-04;
1277 dijk[1][3] = 1; tijk[1][3] = 3.1; cijk[1][3] = 1; eijk[1][3] = 0.5; bijk[1][3] = 1; gijk[1][3] = 0.5; nijk[1][3] = -0.041618768891219;
1278 dijk[1][4] = 2; tijk[1][4] = 5.9; cijk[1][4] = 1; eijk[1][4] = 0.5; bijk[1][4] = 1; gijk[1][4] = 0.5; nijk[1][4] = -0.23452173681569;
1279 dijk[1][5] = 2; tijk[1][5] = 7.05; cijk[1][5] = 1; eijk[1][5] = 0.5; bijk[1][5] = 1; gijk[1][5] = 0.5; nijk[1][5] = 0.14003840584586;
1280 dijk[1][6] = 2; tijk[1][6] = 3.35; cijk[1][6] = 0.875; eijk[1][6] = 0.5; bijk[1][6] = 1.25; gijk[1][6] = 0.5; nijk[1][6] = 0.063281744807738;
1281 dijk[1][7] = 2; tijk[1][7] = 1.2; cijk[1][7] = 0.75; eijk[1][7] = 0.5; bijk[1][7] = 1.5; gijk[1][7] = 0.5; nijk[1][7] = -0.034660425848809;
1282 dijk[1][8] = 2; tijk[1][8] = 5.8; cijk[1][8] = 0.5; eijk[1][8] = 0.5; bijk[1][8] = 2; gijk[1][8] = 0.5; nijk[1][8] = -0.23918747334251;
1283 dijk[1][9] = 2; tijk[1][9] = 2.7; cijk[1][9] = 0; eijk[1][9] = 0.5; bijk[1][9] = 3; gijk[1][9] = 0.5; nijk[1][9] = 1.9855255066891E-03;
1284 dijk[1][10] = 3; tijk[1][10] = 0.45; cijk[1][10] = 0; eijk[1][10] = 0.5; bijk[1][10] = 3; gijk[1][10] = 0.5; nijk[1][10] = 6.1777746171555;
1285 dijk[1][11] = 3; tijk[1][11] = 0.55; cijk[1][11] = 0; eijk[1][11] = 0.5; bijk[1][11] = 3; gijk[1][11] = 0.5; nijk[1][11] = -6.9575358271105;
1286 dijk[1][12] = 3; tijk[1][12] = 1.95; cijk[1][12] = 0; eijk[1][12] = 0.5; bijk[1][12] = 3; gijk[1][12] = 0.5; nijk[1][12] = 1.0630185306388;
1287 // Methane-Propane
1288 dijk[2][1] = 3; tijk[2][1] = 1.85; cijk[2][1] = 0; eijk[2][1] = 0; bijk[2][1] = 0; gijk[2][1] = 0; nijk[2][1] = 0.013746429958576;
1289 dijk[2][2] = 3; tijk[2][2] = 3.95; cijk[2][2] = 0; eijk[2][2] = 0; bijk[2][2] = 0; gijk[2][2] = 0; nijk[2][2] = -7.4425012129552E-03;
1290 dijk[2][3] = 4; tijk[2][3] = 0; cijk[2][3] = 0; eijk[2][3] = 0; bijk[2][3] = 0; gijk[2][3] = 0; nijk[2][3] = -4.5516600213685E-03;
1291 dijk[2][4] = 4; tijk[2][4] = 1.85; cijk[2][4] = 0; eijk[2][4] = 0; bijk[2][4] = 0; gijk[2][4] = 0; nijk[2][4] = -5.4546603350237E-03;
1292 dijk[2][5] = 4; tijk[2][5] = 3.85; cijk[2][5] = 0; eijk[2][5] = 0; bijk[2][5] = 0; gijk[2][5] = 0; nijk[2][5] = 2.3682016824471E-03;
1293 dijk[2][6] = 1; tijk[2][6] = 5.25; cijk[2][6] = 0.25; eijk[2][6] = 0.5; bijk[2][6] = 0.75; gijk[2][6] = 0.5; nijk[2][6] = 0.18007763721438;
1294 dijk[2][7] = 1; tijk[2][7] = 3.85; cijk[2][7] = 0.25; eijk[2][7] = 0.5; bijk[2][7] = 1; gijk[2][7] = 0.5; nijk[2][7] = -0.44773942932486;
1295 dijk[2][8] = 1; tijk[2][8] = 0.2; cijk[2][8] = 0; eijk[2][8] = 0.5; bijk[2][8] = 2; gijk[2][8] = 0.5; nijk[2][8] = 0.0193273748882;
1296 dijk[2][9] = 2; tijk[2][9] = 6.5; cijk[2][9] = 0; eijk[2][9] = 0.5; bijk[2][9] = 3; gijk[2][9] = 0.5; nijk[2][9] = -0.30632197804624;
1297 // Nitrogen-Carbon dioxide
1298 dijk[5][1] = 2; tijk[5][1] = 1.85; cijk[5][1] = 0; eijk[5][1] = 0; bijk[5][1] = 0; gijk[5][1] = 0; nijk[5][1] = 0.28661625028399;
1299 dijk[5][2] = 3; tijk[5][2] = 1.4; cijk[5][2] = 0; eijk[5][2] = 0; bijk[5][2] = 0; gijk[5][2] = 0; nijk[5][2] = -0.10919833861247;
1300 dijk[5][3] = 1; tijk[5][3] = 3.2; cijk[5][3] = 0.25; eijk[5][3] = 0.5; bijk[5][3] = 0.75; gijk[5][3] = 0.5; nijk[5][3] = -1.137403208227;
1301 dijk[5][4] = 1; tijk[5][4] = 2.5; cijk[5][4] = 0.25; eijk[5][4] = 0.5; bijk[5][4] = 1; gijk[5][4] = 0.5; nijk[5][4] = 0.76580544237358;
1302 dijk[5][5] = 1; tijk[5][5] = 8; cijk[5][5] = 0; eijk[5][5] = 0.5; bijk[5][5] = 2; gijk[5][5] = 0.5; nijk[5][5] = 4.2638000926819E-03;
1303 dijk[5][6] = 2; tijk[5][6] = 3.75; cijk[5][6] = 0; eijk[5][6] = 0.5; bijk[5][6] = 3; gijk[5][6] = 0.5; nijk[5][6] = 0.17673538204534;
1304 // Nitrogen-Ethane
1305 dijk[6][1] = 2; tijk[6][1] = 0; cijk[6][1] = 0; eijk[6][1] = 0; bijk[6][1] = 0; gijk[6][1] = 0; nijk[6][1] = -0.47376518126608;
1306 dijk[6][2] = 2; tijk[6][2] = 0.05; cijk[6][2] = 0; eijk[6][2] = 0; bijk[6][2] = 0; gijk[6][2] = 0; nijk[6][2] = 0.48961193461001;
1307 dijk[6][3] = 3; tijk[6][3] = 0; cijk[6][3] = 0; eijk[6][3] = 0; bijk[6][3] = 0; gijk[6][3] = 0; nijk[6][3] = -5.7011062090535E-03;
1308 dijk[6][4] = 1; tijk[6][4] = 3.65; cijk[6][4] = 1; eijk[6][4] = 0.5; bijk[6][4] = 1; gijk[6][4] = 0.5; nijk[6][4] = -0.1996682004132;
1309 dijk[6][5] = 2; tijk[6][5] = 4.9; cijk[6][5] = 1; eijk[6][5] = 0.5; bijk[6][5] = 1; gijk[6][5] = 0.5; nijk[6][5] = -0.69411103101723;
1310 dijk[6][6] = 2; tijk[6][6] = 4.45; cijk[6][6] = 0.875; eijk[6][6] = 0.5; bijk[6][6] = 1.25; gijk[6][6] = 0.5; nijk[6][6] = 0.69226192739021;
1311 // Methane-Hydrogen
1312 dijk[7][1] = 1; tijk[7][1] = 2; cijk[7][1] = 0; eijk[7][1] = 0; bijk[7][1] = 0; gijk[7][1] = 0; nijk[7][1] = -0.25157134971934;
1313 dijk[7][2] = 3; tijk[7][2] = -1; cijk[7][2] = 0; eijk[7][2] = 0; bijk[7][2] = 0; gijk[7][2] = 0; nijk[7][2] = -6.2203841111983E-03;
1314 dijk[7][3] = 3; tijk[7][3] = 1.75; cijk[7][3] = 0; eijk[7][3] = 0; bijk[7][3] = 0; gijk[7][3] = 0; nijk[7][3] = 0.088850315184396;
1315 dijk[7][4] = 4; tijk[7][4] = 1.4; cijk[7][4] = 0; eijk[7][4] = 0; bijk[7][4] = 0; gijk[7][4] = 0; nijk[7][4] = -0.035592212573239;
1316 // Methane-n-Butane, Methane-Isobutane, Ethane-Propane, Ethane-n-Butane,
1317 // Ethane-Isobutane, Propane-n-Butane, Propane-Isobutane, and n-Butane-Isobutane
1318 dijk[10][1] = 1; tijk[10][1] = 1; cijk[10][1] = 0; eijk[10][1] = 0; bijk[10][1] = 0; gijk[10][1] = 0; nijk[10][1] = 2.5574776844118;
1319 dijk[10][2] = 1; tijk[10][2] = 1.55; cijk[10][2] = 0; eijk[10][2] = 0; bijk[10][2] = 0; gijk[10][2] = 0; nijk[10][2] = -7.9846357136353;
1320 dijk[10][3] = 1; tijk[10][3] = 1.7; cijk[10][3] = 0; eijk[10][3] = 0; bijk[10][3] = 0; gijk[10][3] = 0; nijk[10][3] = 4.7859131465806;
1321 dijk[10][4] = 2; tijk[10][4] = 0.25; cijk[10][4] = 0; eijk[10][4] = 0; bijk[10][4] = 0; gijk[10][4] = 0; nijk[10][4] = -0.73265392369587;
1322 dijk[10][5] = 2; tijk[10][5] = 1.35; cijk[10][5] = 0; eijk[10][5] = 0; bijk[10][5] = 0; gijk[10][5] = 0; nijk[10][5] = 1.3805471345312;
1323 dijk[10][6] = 3; tijk[10][6] = 0; cijk[10][6] = 0; eijk[10][6] = 0; bijk[10][6] = 0; gijk[10][6] = 0; nijk[10][6] = 0.28349603476365;
1324 dijk[10][7] = 3; tijk[10][7] = 1.25; cijk[10][7] = 0; eijk[10][7] = 0; bijk[10][7] = 0; gijk[10][7] = 0; nijk[10][7] = -0.49087385940425;
1325 dijk[10][8] = 4; tijk[10][8] = 0; cijk[10][8] = 0; eijk[10][8] = 0; bijk[10][8] = 0; gijk[10][8] = 0; nijk[10][8] = -0.10291888921447;
1326 dijk[10][9] = 4; tijk[10][9] = 0.7; cijk[10][9] = 0; eijk[10][9] = 0; bijk[10][9] = 0; gijk[10][9] = 0; nijk[10][9] = 0.11836314681968;
1327 dijk[10][10] = 4; tijk[10][10] = 5.4; cijk[10][10] = 0; eijk[10][10] = 0; bijk[10][10] = 0; gijk[10][10] = 0; nijk[10][10] = 5.5527385721943E-05;
1328
1329 // Generalized parameters
1330 fij[1][2] = 1; // Methane-Nitrogen
1331 fij[1][3] = 1; // Methane-CO2
1332 fij[1][4] = 1; // Methane-Ethane
1333 fij[1][5] = 1; // Methane-Propane
1334 fij[2][3] = 1; // Nitrogen-CO2
1335 fij[2][4] = 1; // Nitrogen-Ethane
1336 fij[1][15] = 1; // Methane-Hydrogen
1337 fij[1][6] = 0.771035405688; // Methane-Isobutane
1338 fij[1][7] = 1; // Methane-n-Butane
1339 fij[4][5] = 0.13042476515; // Ethane-Propane
1340 fij[4][6] = 0.260632376098; // Ethane-Isobutane
1341 fij[4][7] = 0.281570073085; // Ethane-n-Butane
1342 fij[5][6] = -0.0551609771024; // Propane-Isobutane
1343 fij[5][7] = 0.0312572600489; // Propane-n-Butane
1344 fij[6][7] = -0.0551240293009; // Isobutane-n-Butane
1345
1346 // Model numbers for binary mixtures with no excess functions (mn=-1)
1347 for(int i = 1; i <= MaxFlds; ++i){
1348 mNumb[i][i] = -1;
1349 for (int j = i + 1; j <= MaxFlds; ++j){
1350 fij[j][i] = fij[i][j];
1351 mNumb[i][j] = -1;
1352 mNumb[j][i] = -1;
1353 }
1354 }
1355
1356 // Model numbers for excess functions, 10 is for generalized equation
1357 mNumb[1][2] = 3;
1358 mNumb[1][3] = 4;
1359 mNumb[1][4] = 1;
1360 mNumb[1][5] = 2;
1361 mNumb[1][6] = 10;
1362 mNumb[1][7] = 10;
1363 mNumb[1][15] = 7;
1364 mNumb[2][3] = 5;
1365 mNumb[2][4] = 6;
1366 mNumb[4][5] = 10;
1367 mNumb[4][6] = 10;
1368 mNumb[4][7] = 10;
1369 mNumb[5][6] = 10;
1370 mNumb[5][7] = 10;
1371 mNumb[6][7] = 10;
1372
1373 // Ideal gas parameters
1374 n0i[1][3] = 4.00088; n0i[1][4] = 0.76315; n0i[1][5] = 0.0046; n0i[1][6] = 8.74432; n0i[1][7] = -4.46921; n0i[1][1] = 29.83843397; n0i[1][2] = -15999.69151;
1375 n0i[2][3] = 3.50031; n0i[2][4] = 0.13732; n0i[2][5] = -0.1466; n0i[2][6] = 0.90066; n0i[2][7] = 0; n0i[2][1] = 17.56770785; n0i[2][2] = -2801.729072;
1376 n0i[3][3] = 3.50002; n0i[3][4] = 2.04452; n0i[3][5] = -1.06044; n0i[3][6] = 2.03366; n0i[3][7] = 0.01393; n0i[3][1] = 20.65844696; n0i[3][2] = -4902.171516;
1377 n0i[4][3] = 4.00263; n0i[4][4] = 4.33939; n0i[4][5] = 1.23722; n0i[4][6] = 13.1974; n0i[4][7] = -6.01989; n0i[4][1] = 36.73005938; n0i[4][2] = -23639.65301;
1378 n0i[5][3] = 4.02939; n0i[5][4] = 6.60569; n0i[5][5] = 3.197; n0i[5][6] = 19.1921; n0i[5][7] = -8.37267; n0i[5][1] = 44.70909619; n0i[5][2] = -31236.63551;
1379 n0i[6][3] = 4.06714; n0i[6][4] = 8.97575; n0i[6][5] = 5.25156; n0i[6][6] = 25.1423; n0i[6][7] = 16.1388; n0i[6][1] = 34.30180349; n0i[6][2] = -38525.50276;
1380 n0i[7][3] = 4.33944; n0i[7][4] = 9.44893; n0i[7][5] = 6.89406; n0i[7][6] = 24.4618; n0i[7][7] = 14.7824; n0i[7][1] = 36.53237783; n0i[7][2] = -38957.80933;
1381 n0i[8][3] = 4; n0i[8][4] = 11.7618; n0i[8][5] = 20.1101; n0i[8][6] = 33.1688; n0i[8][7] = 0; n0i[8][1] = 43.17218626; n0i[8][2] = -51198.30946;
1382 n0i[9][3] = 4; n0i[9][4] = 8.95043; n0i[9][5] = 21.836; n0i[9][6] = 33.4032; n0i[9][7] = 0; n0i[9][1] = 42.67837089; n0i[9][2] = -45215.83;
1383 n0i[10][3] = 4; n0i[10][4] = 11.6977; n0i[10][5] = 26.8142; n0i[10][6] = 38.6164; n0i[10][7] = 0; n0i[10][1] = 46.99717188; n0i[10][2] = -52746.83318;
1384 n0i[11][3] = 4; n0i[11][4] = 13.7266; n0i[11][5] = 30.4707; n0i[11][6] = 43.5561; n0i[11][7] = 0; n0i[11][1] = 52.07631631; n0i[11][2] = -57104.81056;
1385 n0i[12][3] = 4; n0i[12][4] = 15.6865; n0i[12][5] = 33.8029; n0i[12][6] = 48.1731; n0i[12][7] = 0; n0i[12][1] = 57.25830934; n0i[12][2] = -60546.76385;
1386 n0i[13][3] = 4; n0i[13][4] = 18.0241; n0i[13][5] = 38.1235; n0i[13][6] = 53.3415; n0i[13][7] = 0; n0i[13][1] = 62.09646901; n0i[13][2] = -66600.12837;
1387 n0i[14][3] = 4; n0i[14][4] = 21.0069; n0i[14][5] = 43.4931; n0i[14][6] = 58.3657; n0i[14][7] = 0; n0i[14][1] = 65.93909154; n0i[14][2] = -74131.45483;
1388 n0i[15][3] = 2.47906; n0i[15][4] = 0.95806; n0i[15][5] = 0.45444; n0i[15][6] = 1.56039; n0i[15][7] = -1.3756; n0i[15][1] = 13.07520288; n0i[15][2] = -5836.943696;
1389 n0i[16][3] = 3.50146; n0i[16][4] = 1.07558; n0i[16][5] = 1.01334; n0i[16][6] = 0; n0i[16][7] = 0; n0i[16][1] = 16.8017173; n0i[16][2] = -2318.32269;
1390 n0i[17][3] = 3.50055; n0i[17][4] = 1.02865; n0i[17][5] = 0.00493; n0i[17][6] = 0; n0i[17][7] = 0; n0i[17][1] = 17.45786899; n0i[17][2] = -2635.244116;
1391 n0i[18][3] = 4.00392; n0i[18][4] = 0.01059; n0i[18][5] = 0.98763; n0i[18][6] = 3.06904; n0i[18][7] = 0; n0i[18][1] = 21.57882705; n0i[18][2] = -7766.733078;
1392 n0i[19][3] = 4; n0i[19][4] = 3.11942; n0i[19][5] = 1.00243; n0i[19][6] = 0; n0i[19][7] = 0; n0i[19][1] = 21.5830944; n0i[19][2] = -6069.035869;
1393 n0i[20][3] = 2.5; n0i[20][4] = 0; n0i[20][5] = 0; n0i[20][6] = 0; n0i[20][7] = 0; n0i[20][1] = 10.04639507; n0i[20][2] = -745.375;
1394 n0i[21][3] = 2.5; n0i[21][4] = 0; n0i[21][5] = 0; n0i[21][6] = 0; n0i[21][7] = 0; n0i[21][1] = 10.04639507; n0i[21][2] = -745.375;
1395 th0i[1][4] = 820.659; th0i[1][5] = 178.41; th0i[1][6] = 1062.82; th0i[1][7] = 1090.53;
1396 th0i[2][4] = 662.738; th0i[2][5] = 680.562; th0i[2][6] = 1740.06; th0i[2][7] = 0;
1397 th0i[3][4] = 919.306; th0i[3][5] = 865.07; th0i[3][6] = 483.553; th0i[3][7] = 341.109;
1398 th0i[4][4] = 559.314; th0i[4][5] = 223.284; th0i[4][6] = 1031.38; th0i[4][7] = 1071.29;
1399 th0i[5][4] = 479.856; th0i[5][5] = 200.893; th0i[5][6] = 955.312; th0i[5][7] = 1027.29;
1400 th0i[6][4] = 438.27; th0i[6][5] = 198.018; th0i[6][6] = 1905.02; th0i[6][7] = 893.765;
1401 th0i[7][4] = 468.27; th0i[7][5] = 183.636; th0i[7][6] = 1914.1; th0i[7][7] = 903.185;
1402 th0i[8][4] = 292.503; th0i[8][5] = 910.237; th0i[8][6] = 1919.37; th0i[8][7] = 0;
1403 th0i[9][4] = 178.67; th0i[9][5] = 840.538; th0i[9][6] = 1774.25; th0i[9][7] = 0;
1404 th0i[10][4] = 182.326; th0i[10][5] = 859.207; th0i[10][6] = 1826.59; th0i[10][7] = 0;
1405 th0i[11][4] = 169.789; th0i[11][5] = 836.195; th0i[11][6] = 1760.46; th0i[11][7] = 0;
1406 th0i[12][4] = 158.922; th0i[12][5] = 815.064; th0i[12][6] = 1693.07; th0i[12][7] = 0;
1407 th0i[13][4] = 156.854; th0i[13][5] = 814.882; th0i[13][6] = 1693.79; th0i[13][7] = 0;
1408 th0i[14][4] = 164.947; th0i[14][5] = 836.264; th0i[14][6] = 1750.24; th0i[14][7] = 0;
1409 th0i[15][4] = 228.734; th0i[15][5] = 326.843; th0i[15][6] = 1651.71; th0i[15][7] = 1671.69;
1410 th0i[16][4] = 2235.71; th0i[16][5] = 1116.69; th0i[16][6] = 0; th0i[16][7] = 0;
1411 th0i[17][4] = 1550.45; th0i[17][5] = 704.525; th0i[17][6] = 0; th0i[17][7] = 0;
1412 th0i[18][4] = 268.795; th0i[18][5] = 1141.41; th0i[18][6] = 2507.37; th0i[18][7] = 0;
1413 th0i[19][4] = 1833.63; th0i[19][5] = 847.181; th0i[19][6] = 0; th0i[19][7] = 0;
1414 th0i[20][4] = 0; th0i[20][5] = 0; th0i[20][6] = 0; th0i[20][7] = 0;
1415 th0i[21][4] = 0; th0i[21][5] = 0; th0i[21][6] = 0; th0i[21][7] = 0;
1416
1417 // Mixture parameters for reducing variables
1418 bvij[1][2] = 0.998721377; gvij[1][2] = 1.013950311; btij[1][2] = 0.99809883; gtij[1][2] = 0.979273013; // CH4-N2
1419 bvij[1][3] = 0.999518072; gvij[1][3] = 1.002806594; btij[1][3] = 1.02262449; gtij[1][3] = 0.975665369; // CH4-CO2
1420 bvij[1][4] = 0.997547866; gvij[1][4] = 1.006617867; btij[1][4] = 0.996336508; gtij[1][4] = 1.049707697; // CH4-C2H6
1421 bvij[1][5] = 1.00482707; gvij[1][5] = 1.038470657; btij[1][5] = 0.989680305; gtij[1][5] = 1.098655531; // CH4-C3H8
1422 bvij[1][6] = 1.011240388; gvij[1][6] = 1.054319053; btij[1][6] = 0.980315756; gtij[1][6] = 1.161117729; // CH4-i-C4H10
1423 bvij[1][7] = 0.979105972; gvij[1][7] = 1.045375122; btij[1][7] = 0.99417491; gtij[1][7] = 1.171607691; // CH4-C4H10
1424 bvij[1][8] = 1; gvij[1][8] = 1.343685343; btij[1][8] = 1; gtij[1][8] = 1.188899743; // CH4-i-C5H12
1425 bvij[1][9] = 0.94833012; gvij[1][9] = 1.124508039; btij[1][9] = 0.992127525; gtij[1][9] = 1.249173968; // CH4-C5H12
1426 bvij[1][10] = 0.958015294; gvij[1][10] = 1.052643846; btij[1][10] = 0.981844797; gtij[1][10] = 1.330570181; // CH4-C6H14
1427 bvij[1][11] = 0.962050831; gvij[1][11] = 1.156655935; btij[1][11] = 0.977431529; gtij[1][11] = 1.379850328; // CH4-C7H16
1428 bvij[1][12] = 0.994740603; gvij[1][12] = 1.116549372; btij[1][12] = 0.957473785; gtij[1][12] = 1.449245409; // CH4-C8H18
1429 bvij[1][13] = 1.002852287; gvij[1][13] = 1.141895355; btij[1][13] = 0.947716769; gtij[1][13] = 1.528532478; // CH4-C9H20
1430 bvij[1][14] = 1.033086292; gvij[1][14] = 1.146089637; btij[1][14] = 0.937777823; gtij[1][14] = 1.568231489; // CH4-C10H22
1431 bvij[1][15] = 1; gvij[1][15] = 1.018702573; btij[1][15] = 1; gtij[1][15] = 1.352643115; // CH4-H2
1432 bvij[1][16] = 1; gvij[1][16] = 1; btij[1][16] = 1; gtij[1][16] = 0.95; // CH4-O2
1433 bvij[1][17] = 0.997340772; gvij[1][17] = 1.006102927; btij[1][17] = 0.987411732; gtij[1][17] = 0.987473033; // CH4-CO
1434 bvij[1][18] = 1.012783169; gvij[1][18] = 1.585018334; btij[1][18] = 1.063333913; gtij[1][18] = 0.775810513; // CH4-H2O
1435 bvij[1][19] = 1.012599087; gvij[1][19] = 1.040161207; btij[1][19] = 1.011090031; gtij[1][19] = 0.961155729; // CH4-H2S
1436 bvij[1][20] = 1; gvij[1][20] = 0.881405683; btij[1][20] = 1; gtij[1][20] = 3.159776855; // CH4-He
1437 bvij[1][21] = 1.034630259; gvij[1][21] = 1.014678542; btij[1][21] = 0.990954281; gtij[1][21] = 0.989843388; // CH4-Ar
1438 bvij[2][3] = 0.977794634; gvij[2][3] = 1.047578256; btij[2][3] = 1.005894529; gtij[2][3] = 1.107654104; // N2-CO2
1439 bvij[2][4] = 0.978880168; gvij[2][4] = 1.042352891; btij[2][4] = 1.007671428; gtij[2][4] = 1.098650964; // N2-C2H6
1440 bvij[2][5] = 0.974424681; gvij[2][5] = 1.081025408; btij[2][5] = 1.002677329; gtij[2][5] = 1.201264026; // N2-C3H8
1441 bvij[2][6] = 0.98641583; gvij[2][6] = 1.100576129; btij[2][6] = 0.99286813; gtij[2][6] = 1.284462634; // N2-i-C4H10
1442 bvij[2][7] = 0.99608261; gvij[2][7] = 1.146949309; btij[2][7] = 0.994515234; gtij[2][7] = 1.304886838; // N2-C4H10
1443 bvij[2][8] = 1; gvij[2][8] = 1.154135439; btij[2][8] = 1; gtij[2][8] = 1.38177077; // N2-i-C5H12
1444 bvij[2][9] = 1; gvij[2][9] = 1.078877166; btij[2][9] = 1; gtij[2][9] = 1.419029041; // N2-C5H12
1445 bvij[2][10] = 1; gvij[2][10] = 1.195952177; btij[2][10] = 1; gtij[2][10] = 1.472607971; // N2-C6H14
1446 bvij[2][11] = 1; gvij[2][11] = 1.40455409; btij[2][11] = 1; gtij[2][11] = 1.520975334; // N2-C7H16
1447 bvij[2][12] = 1; gvij[2][12] = 1.186067025; btij[2][12] = 1; gtij[2][12] = 1.733280051; // N2-C8H18
1448 bvij[2][13] = 1; gvij[2][13] = 1.100405929; btij[2][13] = 0.95637945; gtij[2][13] = 1.749119996; // N2-C9H20
1449 bvij[2][14] = 1; gvij[2][14] = 1; btij[2][14] = 0.957934447; gtij[2][14] = 1.822157123; // N2-C10H22
1450 bvij[2][15] = 0.972532065; gvij[2][15] = 0.970115357; btij[2][15] = 0.946134337; gtij[2][15] = 1.175696583; // N2-H2
1451 bvij[2][16] = 0.99952177; gvij[2][16] = 0.997082328; btij[2][16] = 0.997190589; gtij[2][16] = 0.995157044; // N2-O2
1452 bvij[2][17] = 1; gvij[2][17] = 1.008690943; btij[2][17] = 1; gtij[2][17] = 0.993425388; // N2-CO
1453 bvij[2][18] = 1; gvij[2][18] = 1.094749685; btij[2][18] = 1; gtij[2][18] = 0.968808467; // N2-H2O
1454 bvij[2][19] = 0.910394249; gvij[2][19] = 1.256844157; btij[2][19] = 1.004692366; gtij[2][19] = 0.9601742; // N2-H2S
1455 bvij[2][20] = 0.969501055; gvij[2][20] = 0.932629867; btij[2][20] = 0.692868765; gtij[2][20] = 1.47183158; // N2-He
1456 bvij[2][21] = 1.004166412; gvij[2][21] = 1.002212182; btij[2][21] = 0.999069843; gtij[2][21] = 0.990034831; // N2-Ar
1457 bvij[3][4] = 1.002525718; gvij[3][4] = 1.032876701; btij[3][4] = 1.013871147; gtij[3][4] = 0.90094953; // CO2-C2H6
1458 bvij[3][5] = 0.996898004; gvij[3][5] = 1.047596298; btij[3][5] = 1.033620538; gtij[3][5] = 0.908772477; // CO2-C3H8
1459 bvij[3][6] = 1.076551882; gvij[3][6] = 1.081909003; btij[3][6] = 1.023339824; gtij[3][6] = 0.929982936; // CO2-i-C4H10
1460 bvij[3][7] = 1.174760923; gvij[3][7] = 1.222437324; btij[3][7] = 1.018171004; gtij[3][7] = 0.911498231; // CO2-C4H10
1461 bvij[3][8] = 1.060793104; gvij[3][8] = 1.116793198; btij[3][8] = 1.019180957; gtij[3][8] = 0.961218039; // CO2-i-C5H12
1462 bvij[3][9] = 1.024311498; gvij[3][9] = 1.068406078; btij[3][9] = 1.027000795; gtij[3][9] = 0.979217302; // CO2-C5H12
1463 bvij[3][10] = 1; gvij[3][10] = 0.851343711; btij[3][10] = 1; gtij[3][10] = 1.038675574; // CO2-C6H14
1464 bvij[3][11] = 1.205469976; gvij[3][11] = 1.164585914; btij[3][11] = 1.011806317; gtij[3][11] = 1.046169823; // CO2-C7H16
1465 bvij[3][12] = 1.026169373; gvij[3][12] = 1.104043935; btij[3][12] = 1.02969078; gtij[3][12] = 1.074455386; // CO2-C8H18
1466 bvij[3][13] = 1; gvij[3][13] = 0.973386152; btij[3][13] = 1.00768862; gtij[3][13] = 1.140671202; // CO2-C9H20
1467 bvij[3][14] = 1.000151132; gvij[3][14] = 1.183394668; btij[3][14] = 1.02002879; gtij[3][14] = 1.145512213; // CO2-C10H22
1468 bvij[3][15] = 0.904142159; gvij[3][15] = 1.15279255; btij[3][15] = 0.942320195; gtij[3][15] = 1.782924792; // CO2-H2
1469 bvij[3][16] = 1; gvij[3][16] = 1; btij[3][16] = 1; gtij[3][16] = 1; // CO2-O2
1470 bvij[3][17] = 1; gvij[3][17] = 1; btij[3][17] = 1; gtij[3][17] = 1; // CO2-CO
1471 bvij[3][18] = 0.949055959; gvij[3][18] = 1.542328793; btij[3][18] = 0.997372205; gtij[3][18] = 0.775453996; // CO2-H2O
1472 bvij[3][19] = 0.906630564; gvij[3][19] = 1.024085837; btij[3][19] = 1.016034583; gtij[3][19] = 0.92601888; // CO2-H2S
1473 bvij[3][20] = 0.846647561; gvij[3][20] = 0.864141549; btij[3][20] = 0.76837763; gtij[3][20] = 3.207456948; // CO2-He
1474 bvij[3][21] = 1.008392428; gvij[3][21] = 1.029205465; btij[3][21] = 0.996512863; gtij[3][21] = 1.050971635; // CO2-Ar
1475 bvij[4][5] = 0.997607277; gvij[4][5] = 1.00303472; btij[4][5] = 0.996199694; gtij[4][5] = 1.01473019; // C2H6-C3H8
1476 bvij[4][6] = 1; gvij[4][6] = 1.006616886; btij[4][6] = 1; gtij[4][6] = 1.033283811; // C2H6-i-C4H10
1477 bvij[4][7] = 0.999157205; gvij[4][7] = 1.006179146; btij[4][7] = 0.999130554; gtij[4][7] = 1.034832749; // C2H6-C4H10
1478 bvij[4][8] = 1; gvij[4][8] = 1.045439935; btij[4][8] = 1; gtij[4][8] = 1.021150247; // C2H6-i-C5H12
1479 bvij[4][9] = 0.993851009; gvij[4][9] = 1.026085655; btij[4][9] = 0.998688946; gtij[4][9] = 1.066665676; // C2H6-C5H12
1480 bvij[4][10] = 1; gvij[4][10] = 1.169701102; btij[4][10] = 1; gtij[4][10] = 1.092177796; // C2H6-C6H14
1481 bvij[4][11] = 1; gvij[4][11] = 1.057666085; btij[4][11] = 1; gtij[4][11] = 1.134532014; // C2H6-C7H16
1482 bvij[4][12] = 1.007469726; gvij[4][12] = 1.071917985; btij[4][12] = 0.984068272; gtij[4][12] = 1.168636194; // C2H6-C8H18
1483 bvij[4][13] = 1; gvij[4][13] = 1.14353473; btij[4][13] = 1; gtij[4][13] = 1.05603303; // C2H6-C9H20
1484 bvij[4][14] = 0.995676258; gvij[4][14] = 1.098361281; btij[4][14] = 0.970918061; gtij[4][14] = 1.237191558; // C2H6-C10H22
1485 bvij[4][15] = 0.925367171; gvij[4][15] = 1.10607204; btij[4][15] = 0.932969831; gtij[4][15] = 1.902008495; // C2H6-H2
1486 bvij[4][16] = 1; gvij[4][16] = 1; btij[4][16] = 1; gtij[4][16] = 1; // C2H6-O2
1487 bvij[4][17] = 1; gvij[4][17] = 1.201417898; btij[4][17] = 1; gtij[4][17] = 1.069224728; // C2H6-CO
1488 bvij[4][18] = 1; gvij[4][18] = 1; btij[4][18] = 1; gtij[4][18] = 1; // C2H6-H2O
1489 bvij[4][19] = 1.010817909; gvij[4][19] = 1.030988277; btij[4][19] = 0.990197354; gtij[4][19] = 0.90273666; // C2H6-H2S
1490 bvij[4][20] = 1; gvij[4][20] = 1; btij[4][20] = 1; gtij[4][20] = 1; // C2H6-He
1491 bvij[4][21] = 1; gvij[4][21] = 1; btij[4][21] = 1; gtij[4][21] = 1; // C2H6-Ar
1492 bvij[5][6] = 0.999243146; gvij[5][6] = 1.001156119; btij[5][6] = 0.998012298; gtij[5][6] = 1.005250774; // C3H8-i-C4H10
1493 bvij[5][7] = 0.999795868; gvij[5][7] = 1.003264179; btij[5][7] = 1.000310289; gtij[5][7] = 1.007392782; // C3H8-C4H10
1494 bvij[5][8] = 1.040459289; gvij[5][8] = 0.999432118; btij[5][8] = 0.994364425; gtij[5][8] = 1.0032695; // C3H8-i-C5H12
1495 bvij[5][9] = 1.044919431; gvij[5][9] = 1.019921513; btij[5][9] = 0.996484021; gtij[5][9] = 1.008344412; // C3H8-C5H12
1496 bvij[5][10] = 1; gvij[5][10] = 1.057872566; btij[5][10] = 1; gtij[5][10] = 1.025657518; // C3H8-C6H14
1497 bvij[5][11] = 1; gvij[5][11] = 1.079648053; btij[5][11] = 1; gtij[5][11] = 1.050044169; // C3H8-C7H16
1498 bvij[5][12] = 1; gvij[5][12] = 1.102764612; btij[5][12] = 1; gtij[5][12] = 1.063694129; // C3H8-C8H18
1499 bvij[5][13] = 1; gvij[5][13] = 1.199769134; btij[5][13] = 1; gtij[5][13] = 1.109973833; // C3H8-C9H20
1500 bvij[5][14] = 0.984104227; gvij[5][14] = 1.053040574; btij[5][14] = 0.985331233; gtij[5][14] = 1.140905252; // C3H8-C10H22
1501 bvij[5][15] = 1; gvij[5][15] = 1.07400611; btij[5][15] = 1; gtij[5][15] = 2.308215191; // C3H8-H2
1502 bvij[5][16] = 1; gvij[5][16] = 1; btij[5][16] = 1; gtij[5][16] = 1; // C3H8-O2
1503 bvij[5][17] = 1; gvij[5][17] = 1.108143673; btij[5][17] = 1; gtij[5][17] = 1.197564208; // C3H8-CO
1504 bvij[5][18] = 1; gvij[5][18] = 1.011759763; btij[5][18] = 1; gtij[5][18] = 0.600340961; // C3H8-H2O
1505 bvij[5][19] = 0.936811219; gvij[5][19] = 1.010593999; btij[5][19] = 0.992573556; gtij[5][19] = 0.905829247; // C3H8-H2S
1506 bvij[5][20] = 1; gvij[5][20] = 1; btij[5][20] = 1; gtij[5][20] = 1; // C3H8-He
1507 bvij[5][21] = 1; gvij[5][21] = 1; btij[5][21] = 1; gtij[5][21] = 1; // C3H8-Ar
1508
1509 // The beta values for isobutane+butane are the reciprocal values of those in the GERG-2008 publication because the order was reversed in this work.
1510 bvij[6][7] = 0.999120311; gvij[6][7] = 1.00041444; btij[6][7] = 0.999922459; gtij[6][7] = 1.001432824; // C4H10-i-C4H10
1511
1512 bvij[6][8] = 1; gvij[6][8] = 1.002284353; btij[6][8] = 1; gtij[6][8] = 1.001835788; // i-C4H10-i-C5H1
1513 bvij[6][9] = 1; gvij[6][9] = 1.002779804; btij[6][9] = 1; gtij[6][9] = 1.002495889; // i-C4H10-C5H12
1514 bvij[6][10] = 1; gvij[6][10] = 1.010493989; btij[6][10] = 1; gtij[6][10] = 1.006018054; // i-C4H10-C6H14
1515 bvij[6][11] = 1; gvij[6][11] = 1.021668316; btij[6][11] = 1; gtij[6][11] = 1.00988576; // i-C4H10-C7H16
1516 bvij[6][12] = 1; gvij[6][12] = 1.032807063; btij[6][12] = 1; gtij[6][12] = 1.013945424; // i-C4H10-C8H18
1517 bvij[6][13] = 1; gvij[6][13] = 1.047298475; btij[6][13] = 1; gtij[6][13] = 1.017817492; // i-C4H10-C9H20
1518 bvij[6][14] = 1; gvij[6][14] = 1.060243344; btij[6][14] = 1; gtij[6][14] = 1.021624748; // i-C4H10-C10H22
1519 bvij[6][15] = 1; gvij[6][15] = 1.147595688; btij[6][15] = 1; gtij[6][15] = 1.895305393; // i-C4H10-H2
1520 bvij[6][16] = 1; gvij[6][16] = 1; btij[6][16] = 1; gtij[6][16] = 1; // i-C4H10-O2
1521 bvij[6][17] = 1; gvij[6][17] = 1.087272232; btij[6][17] = 1; gtij[6][17] = 1.161390082; // i-C4H10-CO
1522 bvij[6][18] = 1; gvij[6][18] = 1; btij[6][18] = 1; gtij[6][18] = 1; // i-C4H10-H2O
1523 bvij[6][19] = 1.012994431; gvij[6][19] = 0.988591117; btij[6][19] = 0.974550548; gtij[6][19] = 0.937130844; // i-C4H10-H2S
1524 bvij[6][20] = 1; gvij[6][20] = 1; btij[6][20] = 1; gtij[6][20] = 1; // i-C4H10-He
1525 bvij[6][21] = 1; gvij[6][21] = 1; btij[6][21] = 1; gtij[6][21] = 1; // i-C4H10-Ar
1526 bvij[7][8] = 1; gvij[7][8] = 1.002728434; btij[7][8] = 1; gtij[7][8] = 1.000792201; // C4H10-i-C5H12
1527 bvij[7][9] = 1; gvij[7][9] = 1.01815965; btij[7][9] = 1; gtij[7][9] = 1.00214364; // C4H10-C5H12
1528 bvij[7][10] = 1; gvij[7][10] = 1.034995284; btij[7][10] = 1; gtij[7][10] = 1.00915706; // C4H10-C6H14
1529 bvij[7][11] = 1; gvij[7][11] = 1.019174227; btij[7][11] = 1; gtij[7][11] = 1.021283378; // C4H10-C7H16
1530 bvij[7][12] = 1; gvij[7][12] = 1.046905515; btij[7][12] = 1; gtij[7][12] = 1.033180106; // C4H10-C8H18
1531 bvij[7][13] = 1; gvij[7][13] = 1.049219137; btij[7][13] = 1; gtij[7][13] = 1.014096448; // C4H10-C9H20
1532 bvij[7][14] = 0.976951968; gvij[7][14] = 1.027845529; btij[7][14] = 0.993688386; gtij[7][14] = 1.076466918; // C4H10-C10H22
1533 bvij[7][15] = 1; gvij[7][15] = 1.232939523; btij[7][15] = 1; gtij[7][15] = 2.509259945; // C4H10-H2
1534 bvij[7][16] = 1; gvij[7][16] = 1; btij[7][16] = 1; gtij[7][16] = 1; // C4H10-O2
1535 bvij[7][17] = 1; gvij[7][17] = 1.084740904; btij[7][17] = 1; gtij[7][17] = 1.173916162; // C4H10-CO
1536 bvij[7][18] = 1; gvij[7][18] = 1.223638763; btij[7][18] = 1; gtij[7][18] = 0.615512682; // C4H10-H2O
1537 bvij[7][19] = 0.908113163; gvij[7][19] = 1.033366041; btij[7][19] = 0.985962886; gtij[7][19] = 0.926156602; // C4H10-H2S
1538 bvij[7][20] = 1; gvij[7][20] = 1; btij[7][20] = 1; gtij[7][20] = 1; // C4H10-He
1539 bvij[7][21] = 1; gvij[7][21] = 1.214638734; btij[7][21] = 1; gtij[7][21] = 1.245039498; // C4H10-Ar
1540 bvij[8][9] = 1; gvij[8][9] = 1.000024335; btij[8][9] = 1; gtij[8][9] = 1.000050537; // C5H12-i-C5H12
1541 bvij[8][10] = 1; gvij[8][10] = 1.002995876; btij[8][10] = 1; gtij[8][10] = 1.001204174; // i-C5H12-C6H14
1542 bvij[8][11] = 1; gvij[8][11] = 1.009928206; btij[8][11] = 1; gtij[8][11] = 1.003194615; // i-C5H12-C7H16
1543 bvij[8][12] = 1; gvij[8][12] = 1.017880545; btij[8][12] = 1; gtij[8][12] = 1.00564748; // i-C5H12-C8H18
1544 bvij[8][13] = 1; gvij[8][13] = 1.028994325; btij[8][13] = 1; gtij[8][13] = 1.008191499; // i-C5H12-C9H20
1545 bvij[8][14] = 1; gvij[8][14] = 1.039372957; btij[8][14] = 1; gtij[8][14] = 1.010825138; // i-C5H12-C10H22
1546 bvij[8][15] = 1; gvij[8][15] = 1.184340443; btij[8][15] = 1; gtij[8][15] = 1.996386669; // i-C5H12-H2
1547 bvij[8][16] = 1; gvij[8][16] = 1; btij[8][16] = 1; gtij[8][16] = 1; // i-C5H12-O2
1548 bvij[8][17] = 1; gvij[8][17] = 1.116694577; btij[8][17] = 1; gtij[8][17] = 1.199326059; // i-C5H12-CO
1549 bvij[8][18] = 1; gvij[8][18] = 1; btij[8][18] = 1; gtij[8][18] = 1; // i-C5H12-H2O
1550 bvij[8][19] = 1; gvij[8][19] = 0.835763343; btij[8][19] = 1; gtij[8][19] = 0.982651529; // i-C5H12-H2S
1551 bvij[8][20] = 1; gvij[8][20] = 1; btij[8][20] = 1; gtij[8][20] = 1; // i-C5H12-He
1552 bvij[8][21] = 1; gvij[8][21] = 1; btij[8][21] = 1; gtij[8][21] = 1; // i-C5H12-Ar
1553 bvij[9][10] = 1; gvij[9][10] = 1.002480637; btij[9][10] = 1; gtij[9][10] = 1.000761237; // C5H12-C6H14
1554 bvij[9][11] = 1; gvij[9][11] = 1.008972412; btij[9][11] = 1; gtij[9][11] = 1.002441051; // C5H12-C7H16
1555 bvij[9][12] = 1; gvij[9][12] = 1.069223964; btij[9][12] = 1; gtij[9][12] = 1.016422347; // C5H12-C8H18
1556 bvij[9][13] = 1; gvij[9][13] = 1.034910633; btij[9][13] = 1; gtij[9][13] = 1.103421755; // C5H12-C9H20
1557 bvij[9][14] = 1; gvij[9][14] = 1.016370338; btij[9][14] = 1; gtij[9][14] = 1.049035838; // C5H12-C10H22
1558 bvij[9][15] = 1; gvij[9][15] = 1.188334783; btij[9][15] = 1; gtij[9][15] = 2.013859174; // C5H12-H2
1559 bvij[9][16] = 1; gvij[9][16] = 1; btij[9][16] = 1; gtij[9][16] = 1; // C5H12-O2
1560 bvij[9][17] = 1; gvij[9][17] = 1.119954454; btij[9][17] = 1; gtij[9][17] = 1.206043295; // C5H12-CO
1561 bvij[9][18] = 1; gvij[9][18] = 0.95667731; btij[9][18] = 1; gtij[9][18] = 0.447666011; // C5H12-H2O
1562 bvij[9][19] = 0.984613203; gvij[9][19] = 1.076539234; btij[9][19] = 0.962006651; gtij[9][19] = 0.959065662; // C5H12-H2S
1563 bvij[9][20] = 1; gvij[9][20] = 1; btij[9][20] = 1; gtij[9][20] = 1; // C5H12-He
1564 bvij[9][21] = 1; gvij[9][21] = 1; btij[9][21] = 1; gtij[9][21] = 1; // C5H12-Ar
1565 bvij[10][11] = 1; gvij[10][11] = 1.001508227; btij[10][11] = 1; gtij[10][11] = 0.999762786; // C6H14-C7H16
1566 bvij[10][12] = 1; gvij[10][12] = 1.006268954; btij[10][12] = 1; gtij[10][12] = 1.001633952; // C6H14-C8H18
1567 bvij[10][13] = 1; gvij[10][13] = 1.02076168; btij[10][13] = 1; gtij[10][13] = 1.055369591; // C6H14-C9H20
1568 bvij[10][14] = 1.001516371; gvij[10][14] = 1.013511439; btij[10][14] = 0.99764101; gtij[10][14] = 1.028939539; // C6H14-C10H22
1569 bvij[10][15] = 1; gvij[10][15] = 1.243461678; btij[10][15] = 1; gtij[10][15] = 3.021197546; // C6H14-H2
1570 bvij[10][16] = 1; gvij[10][16] = 1; btij[10][16] = 1; gtij[10][16] = 1; // C6H14-O2
1571 bvij[10][17] = 1; gvij[10][17] = 1.155145836; btij[10][17] = 1; gtij[10][17] = 1.233272781; // C6H14-CO
1572 bvij[10][18] = 1; gvij[10][18] = 1.170217596; btij[10][18] = 1; gtij[10][18] = 0.569681333; // C6H14-H2O
1573 bvij[10][19] = 0.754473958; gvij[10][19] = 1.339283552; btij[10][19] = 0.985891113; gtij[10][19] = 0.956075596; // C6H14-H2S
1574 bvij[10][20] = 1; gvij[10][20] = 1; btij[10][20] = 1; gtij[10][20] = 1; // C6H14-He
1575 bvij[10][21] = 1; gvij[10][21] = 1; btij[10][21] = 1; gtij[10][21] = 1; // C6H14-Ar
1576 bvij[11][12] = 1; gvij[11][12] = 1.006767176; btij[11][12] = 1; gtij[11][12] = 0.998793111; // C7H16-C8H18
1577 bvij[11][13] = 1; gvij[11][13] = 1.001370076; btij[11][13] = 1; gtij[11][13] = 1.001150096; // C7H16-C9H20
1578 bvij[11][14] = 1; gvij[11][14] = 1.002972346; btij[11][14] = 1; gtij[11][14] = 1.002229938; // C7H16-C10H22
1579 bvij[11][15] = 1; gvij[11][15] = 1.159131722; btij[11][15] = 1; gtij[11][15] = 3.169143057; // C7H16-H2
1580 bvij[11][16] = 1; gvij[11][16] = 1; btij[11][16] = 1; gtij[11][16] = 1; // C7H16-O2
1581 bvij[11][17] = 1; gvij[11][17] = 1.190354273; btij[11][17] = 1; gtij[11][17] = 1.256123503; // C7H16-CO
1582 bvij[11][18] = 1; gvij[11][18] = 1; btij[11][18] = 1; gtij[11][18] = 1; // C7H16-H2O
1583 bvij[11][19] = 0.828967164; gvij[11][19] = 1.087956749; btij[11][19] = 0.988937417; gtij[11][19] = 1.013453092; // C7H16-H2S
1584 bvij[11][20] = 1; gvij[11][20] = 1; btij[11][20] = 1; gtij[11][20] = 1; // C7H16-He
1585 bvij[11][21] = 1; gvij[11][21] = 1; btij[11][21] = 1; gtij[11][21] = 1; // C7H16-Ar
1586 bvij[12][13] = 1; gvij[12][13] = 1.001357085; btij[12][13] = 1; gtij[12][13] = 1.000235044; // C8H18-C9H20
1587 bvij[12][14] = 1; gvij[12][14] = 1.002553544; btij[12][14] = 1; gtij[12][14] = 1.007186267; // C8H18-C10H22
1588 bvij[12][15] = 1; gvij[12][15] = 1.305249405; btij[12][15] = 1; gtij[12][15] = 2.191555216; // C8H18-H2
1589 bvij[12][16] = 1; gvij[12][16] = 1; btij[12][16] = 1; gtij[12][16] = 1; // C8H18-O2
1590 bvij[12][17] = 1; gvij[12][17] = 1.219206702; btij[12][17] = 1; gtij[12][17] = 1.276565536; // C8H18-CO
1591 bvij[12][18] = 1; gvij[12][18] = 0.599484191; btij[12][18] = 1; gtij[12][18] = 0.662072469; // C8H18-H2O
1592 bvij[12][19] = 1; gvij[12][19] = 1; btij[12][19] = 1; gtij[12][19] = 1; // C8H18-H2S
1593 bvij[12][20] = 1; gvij[12][20] = 1; btij[12][20] = 1; gtij[12][20] = 1; // C8H18-He
1594 bvij[12][21] = 1; gvij[12][21] = 1; btij[12][21] = 1; gtij[12][21] = 1; // C8H18-Ar
1595 bvij[13][14] = 1; gvij[13][14] = 1.00081052; btij[13][14] = 1; gtij[13][14] = 1.000182392; // C9H20-C10H22
1596 bvij[13][15] = 1; gvij[13][15] = 1.342647661; btij[13][15] = 1; gtij[13][15] = 2.23435404; // C9H20-H2
1597 bvij[13][16] = 1; gvij[13][16] = 1; btij[13][16] = 1; gtij[13][16] = 1; // C9H20-O2
1598 bvij[13][17] = 1; gvij[13][17] = 1.252151449; btij[13][17] = 1; gtij[13][17] = 1.294070556; // C9H20-CO
1599 bvij[13][18] = 1; gvij[13][18] = 1; btij[13][18] = 1; gtij[13][18] = 1; // C9H20-H2O
1600 bvij[13][19] = 1; gvij[13][19] = 1.082905109; btij[13][19] = 1; gtij[13][19] = 1.086557826; // C9H20-H2S
1601 bvij[13][20] = 1; gvij[13][20] = 1; btij[13][20] = 1; gtij[13][20] = 1; // C9H20-He
1602 bvij[13][21] = 1; gvij[13][21] = 1; btij[13][21] = 1; gtij[13][21] = 1; // C9H20-Ar
1603 bvij[14][15] = 1.695358382; gvij[14][15] = 1.120233729; btij[14][15] = 1.064818089; gtij[14][15] = 3.786003724; // C10H22-H2
1604 bvij[14][16] = 1; gvij[14][16] = 1; btij[14][16] = 1; gtij[14][16] = 1; // C10H22-O2
1605 bvij[14][17] = 1; gvij[14][17] = 0.87018496; btij[14][17] = 1.049594632; gtij[14][17] = 1.803567587; // C10H22-CO
1606 bvij[14][18] = 1; gvij[14][18] = 0.551405318; btij[14][18] = 0.897162268; gtij[14][18] = 0.740416402; // C10H22-H2O
1607 bvij[14][19] = 0.975187766; gvij[14][19] = 1.171714677; btij[14][19] = 0.973091413; gtij[14][19] = 1.103693489; // C10H22-H2S
1608 bvij[14][20] = 1; gvij[14][20] = 1; btij[14][20] = 1; gtij[14][20] = 1; // C10H22-He
1609 bvij[14][21] = 1; gvij[14][21] = 1; btij[14][21] = 1; gtij[14][21] = 1; // C10H22-Ar
1610 bvij[15][16] = 1; gvij[15][16] = 1; btij[15][16] = 1; gtij[15][16] = 1; // H2-O2
1611 bvij[15][17] = 1; gvij[15][17] = 1.121416201; btij[15][17] = 1; gtij[15][17] = 1.377504607; // H2-CO
1612 bvij[15][18] = 1; gvij[15][18] = 1; btij[15][18] = 1; gtij[15][18] = 1; // H2-H2O
1613 bvij[15][19] = 1; gvij[15][19] = 1; btij[15][19] = 1; gtij[15][19] = 1; // H2-H2S
1614 bvij[15][20] = 1; gvij[15][20] = 1; btij[15][20] = 1; gtij[15][20] = 1; // H2-He
1615 bvij[15][21] = 1; gvij[15][21] = 1; btij[15][21] = 1; gtij[15][21] = 1; // H2-Ar
1616 bvij[16][17] = 1; gvij[16][17] = 1; btij[16][17] = 1; gtij[16][17] = 1; // O2-CO
1617 bvij[16][18] = 1; gvij[16][18] = 1.143174289; btij[16][18] = 1; gtij[16][18] = 0.964767932; // O2-H2O
1618 bvij[16][19] = 1; gvij[16][19] = 1; btij[16][19] = 1; gtij[16][19] = 1; // O2-H2S
1619 bvij[16][20] = 1; gvij[16][20] = 1; btij[16][20] = 1; gtij[16][20] = 1; // O2-He
1620 bvij[16][21] = 0.999746847; gvij[16][21] = 0.993907223; btij[16][21] = 1.000023103; gtij[16][21] = 0.990430423; // O2-Ar
1621 bvij[17][18] = 1; gvij[17][18] = 1; btij[17][18] = 1; gtij[17][18] = 1; // CO-H2O
1622 bvij[17][19] = 0.795660392; gvij[17][19] = 1.101731308; btij[17][19] = 1.025536736; gtij[17][19] = 1.022749748; // CO-H2S
1623 bvij[17][20] = 1; gvij[17][20] = 1; btij[17][20] = 1; gtij[17][20] = 1; // CO-He
1624 bvij[17][21] = 1; gvij[17][21] = 1.159720623; btij[17][21] = 1; gtij[17][21] = 0.954215746; // CO-Ar
1625 bvij[18][19] = 1; gvij[18][19] = 1.014832832; btij[18][19] = 1; gtij[18][19] = 0.940587083; // H2O-H2S
1626 bvij[18][20] = 1; gvij[18][20] = 1; btij[18][20] = 1; gtij[18][20] = 1; // H2O-He
1627 bvij[18][21] = 1; gvij[18][21] = 1.038993495; btij[18][21] = 1; gtij[18][21] = 1.070941866; // H2O-Ar
1628 bvij[19][20] = 1; gvij[19][20] = 1; btij[19][20] = 1; gtij[19][20] = 1; // H2S-He
1629 bvij[19][21] = 1; gvij[19][21] = 1; btij[19][21] = 1; gtij[19][21] = 1; // H2S-Ar
1630 bvij[20][21] = 1; gvij[20][21] = 1; btij[20][21] = 1; gtij[20][21] = 1; // He-Ar
1631
1632 for(int i = 1; i <= MaxFlds; ++i){
1633 bvij[i][i] = 1;
1634 btij[i][i] = 1;
1635 gvij[i][i] = 1 / Dc[i];
1636 gtij[i][i] = Tc[i];
1637 for (int j = i + 1; j <= MaxFlds; ++j){
1638 gvij[i][j] = gvij[i][j] * bvij[i][j] * pow(Vc3[i] + Vc3[j], 3);
1639 gtij[i][j] = gtij[i][j] * btij[i][j] * Tc2[i] * Tc2[j];
1640 bvij[i][j] = pow(bvij[i][j], 2);
1641 btij[i][j] = pow(btij[i][j], 2);
1642 }
1643 }
1644
1645 for (int i = 1; i <= MaxMdl; ++i){
1646 for (int j = 1; j <= MaxTrmM; ++j){
1647 gijk[i][j] = -cijk[i][j] * pow(eijk[i][j], 2) + bijk[i][j] * gijk[i][j];
1648 eijk[i][j] = 2 * cijk[i][j] * eijk[i][j] - bijk[i][j];
1649 cijk[i][j] = -cijk[i][j];
1650 }
1651 }
1652
1653 // Ideal gas terms
1654 T0 = 298.15;
1655 d0 = 101.325 / RGERG / T0;
1656 for (int i = 1; i <= MaxFlds; ++i){
1657 n0i[i][3] = n0i[i][3] - 1;
1658 n0i[i][2] = n0i[i][2] + T0;
1659 for (int j = 1; j <= 7; ++j){
1660 n0i[i][j] = Rsr * n0i[i][j];
1661 }
1662 n0i[i][2] = n0i[i][2] - T0;
1663 n0i[i][1] = n0i[i][1] - log(d0);
1664 }
1665 return;
1666
1667 // Code to produce nearly exact values for n0(1) and n0(2)
1668 // This is not called in the current code, but included below to show how the values were calculated. The return above can be removed to call this code.
1669 // T0 = 298.15;
1670 // d0 = 101.325 / RGERG / T0;
1671 // for (int i = 1; i <= MaxFlds; ++i){
1672 // n1 = 0; n2 = 0;
1673 // if (th0i[i][4] > epsilon) { n2 += - n0i[i][4] * th0i[i][4] / Tanh(th0i[i][4] / T0); n1 += - n0i[i][4] * log(Sinh(th0i[i][4] / T0)); }
1674 // if (th0i[i][5] > epsilon) { n2 += + n0i[i][5] * th0i[i][5] * Tanh(th0i[i][5] / T0); n1 += + n0i[i][5] * log(Cosh(th0i[i][5] / T0)); }
1675 // if (th0i[i][6] > epsilon) { n2 += - n0i[i][6] * th0i[i][6] / Tanh(th0i[i][6] / T0); n1 += - n0i[i][6] * log(Sinh(th0i[i][6] / T0)); }
1676 // if (th0i[i][7] > epsilon) { n2 += + n0i[i][7] * th0i[i][7] * Tanh(th0i[i][7] / T0); n1 += + n0i[i][7] * log(Cosh(th0i[i][7] / T0)); }
1677 // n0i[i][3] = n0i[i][3] - 1;
1678 // n0i[i][1] = n1 - n2 / T0 + n0i[i][3] * (1 + log(T0));
1679 // n0i[i][2] = n2 - n0i[i][3] * T0;
1680 // for (int j = 1; j <= 7; ++j){
1681 // n0i[i][j] = Rsr * n0i[i][j];
1682 // }
1683 // n0i[i][2] = n0i[i][2] - T0;
1684 // n0i[i][1] = n0i[i][1] - log(d0);
1685 // }
1686}
1687
1688#ifdef TEST_GERG
1689int main()
1690{
1691 SetupGERG();
1692 double _x[] = {0.77824, 0.02, 0.06, 0.08, 0.03, 0.0015, 0.003, 0.0005, 0.00165, 0.00215, 0.00088, 0.00024, 0.00015, 0.00009, 0.004, 0.005, 0.002, 0.0001, 0.0025, 0.007, 0.001};
1693 std::vector<double> x(_x, _x+NcGERG), xGrs(4,0);
1694 x.insert(x.begin(), 0.0);
1695
1696 double mm = 0;
1697 MolarMassGERG(x, mm);
1698
1699 int ierr = 0;
1700 std::string herr;
1701
1702 double T = 400, P = 50000, D = 6.36570, Z = 0;
1703
1704 printf("Inputs-----\n");
1705 printf("Temperature [K]: 400.0000000000000 != %0.16g\n", T);
1706 printf("Pressure [kPa]: 50000.00000000000 != %0.16g\n", P);
1707
1708 double dPdD, dPdD2, d2PdTD, dPdT, U, H, S, Cv, Cp, W, G, JT, Kappa, A, Cf;
1709
1710 // void DensityGERG(const int iFlag, const double T, const double P, const std::vector<double> &x, double &D, int &ierr, std::string &herr)
1711 DensityGERG(0, T, P, x, D, ierr, herr);
1712
1713 // Sub PropertiesGERG(T, D, x, P, Z, dPdD, dPdD2, d2PdTD, dPdT, U, H, S, Cv, Cp, W, G, JT, Kappa)
1714 PropertiesGERG(T, D, x, P, Z, dPdD, dPdD2, d2PdTD, dPdT, U, H, S, Cv, Cp, W, G, JT, Kappa, A, Cf);
1715
1716 printf("Outputs-----\n");
1717 printf("Molar mass [g/mol]: 20.54274450160000 != %0.16g\n",mm);
1718 printf("Molar density [mol/l]: 12.79828626082062 != %0.16g\n",D);
1719 printf("Pressure [kPa]: 50000.00000000001 != %0.16g\n",P);
1720 printf("Compressibility factor: 1.174690666383717 != %0.16g\n",Z);
1721 printf("d(P)/d(rho) [kPa/(mol/l)]: 7000.694030193327 != %0.16g\n",dPdD);
1722 printf("d^2(P)/d(rho)^2 [kPa/(mol/l)^2]: 1130.481239114938 != %0.16g\n",dPdD2);
1723 printf("d(P)/d(T) [kPa/K]: 235.9832292593096 != %0.16g\n",dPdT);
1724 printf("Energy [J/mol]: -2746.492901212530 != %0.16g\n",U);
1725 printf("Enthalpy [J/mol]: 1160.280160510973 != %0.16g\n",H);
1726 printf("Entropy [J/mol-K]: -38.57590392409089 != %0.16g\n",S);
1727 printf("Isochoric heat capacity [J/mol-K]: 39.02948218156372 != %0.16g\n",Cv);
1728 printf("Isobaric heat capacity [J/mol-K]: 58.45522051000366 != %0.16g\n",Cp);
1729 printf("Speed of sound [m/s]: 714.4248840596024 != %0.16g\n",W);
1730 printf("Gibbs energy [J/mol]: 16590.64173014733 != %0.16g\n",G);
1731 printf("Joule-Thomson coefficient [K/kPa]: 7.155629581480913E-05 != %0.16g\n",JT);
1732 printf("Isentropic exponent: 2.683820255058032 != %0.16g\n",Kappa);
1733 printf("Critical Flow Factor: 0.83985218377 != %0.16g\n",Cf);
1734}
1735#endif
static const int MaxFlds
Definition Detail.cpp:128
static double th0i[MaxFlds+1][7+1]
Definition Detail.cpp:138
static double xold[MaxFlds+1]
Definition Detail.cpp:139
static double Told
Definition Detail.cpp:137
static const double epsilon
Definition Detail.cpp:129
static double dPdDsave
Definition Detail.cpp:140
static double n0i[MaxFlds+1][7+1]
Definition Detail.cpp:138
double Sinh(double xx)
Definition GERG2008.cpp:175
static double cijk[MaxMdl+1][MaxTrmM+1]
Definition GERG2008.cpp:167
static double Trold2
Definition GERG2008.cpp:163
static double RGERG
Definition GERG2008.cpp:159
static double Drold
Definition GERG2008.cpp:163
static double gtij[MaxFlds+1][MaxFlds+1]
Definition GERG2008.cpp:169
void MolarMassGERG(const std::vector< double > &x, double &Mm)
Calculate molar mass of a gas mixture.
Definition GERG2008.cpp:191
static double noik[MaxFlds+1][MaxTrmP+1]
Definition GERG2008.cpp:166
static int kpol[MaxFlds+1]
Definition GERG2008.cpp:164
static double gvij[MaxFlds+1][MaxFlds+1]
Definition GERG2008.cpp:169
static int coik[MaxFlds+1][MaxTrmP+1]
Definition GERG2008.cpp:162
static void tTermsGERG(const double lntau, const std::vector< double > &x)
Calculates temperature dependent parts of the GERG-2008 equation of state.
Definition GERG2008.cpp:685
static void AlpharGERG(const int itau, const int idelta, const double T, const double D, const std::vector< double > &x, double ar[4][4])
Calculate alphar - Residual Helmholtz energy and derivatives.
Definition GERG2008.cpp:548
static double Dc[MaxFlds+1]
Definition GERG2008.cpp:165
static int kpolij[MaxMdl+1]
Definition GERG2008.cpp:164
static const int MaxTrmM
Definition GERG2008.cpp:160
static double btij[MaxFlds+1][MaxFlds+1]
Definition GERG2008.cpp:169
static double taup[MaxFlds+1][MaxTrmP+1]
Definition GERG2008.cpp:171
void SetupGERG()
Initializes all the constants and parameters in the GERG-2008 model.
Definition GERG2008.cpp:775
static void ReducingParametersGERG(const std::vector< double > &x, double &Tr, double &Dr)
Calculates reducing variables for temperature and density in GERG-2008 EOS.
Definition GERG2008.cpp:436
static int kexpij[MaxMdl+1]
Definition GERG2008.cpp:164
static int doik[MaxFlds+1][MaxTrmP+1]
Definition GERG2008.cpp:162
double Cosh(double xx)
Definition GERG2008.cpp:176
static int mNumb[MaxFlds+1][MaxFlds+1]
Definition GERG2008.cpp:164
static const int MaxTrmP
Definition GERG2008.cpp:160
static const int NcGERG
Definition GERG2008.cpp:160
void PropertiesGERG(const double T, const double D, const std::vector< double > &x, double &P, double &Z, double &dPdD, double &d2PdD2, double &d2PdTD, double &dPdT, double &U, double &H, double &S, double &Cv, double &Cp, double &W, double &G, double &JT, double &Kappa, double &A, double &Cf)
Calculate thermodynamic properties as a function of temperature and density.
Definition GERG2008.cpp:371
static double nijk[MaxMdl+1][MaxTrmM+1]
Definition GERG2008.cpp:168
static double Tc2[MaxFlds+1]
Definition GERG2008.cpp:165
static double toik[MaxFlds+1][MaxTrmP+1]
Definition GERG2008.cpp:166
static const int MaxMdl
Definition GERG2008.cpp:160
static double MMiGERG[MaxFlds+1]
Definition GERG2008.cpp:165
static void Alpha0GERG(const double T, const double D, const std::vector< double > &x, double a0[3])
Calculate alpha0 - Ideal gas Helmholtz energy and derivatives.
Definition GERG2008.cpp:488
static double Trold
Definition GERG2008.cpp:163
static double bvij[MaxFlds+1][MaxFlds+1]
Definition GERG2008.cpp:169
static double eijk[MaxMdl+1][MaxTrmM+1]
Definition GERG2008.cpp:168
static void PseudoCriticalPointGERG(const std::vector< double > &x, double &Tcx, double &Dcx)
Calculate pseudo-critical point.
Definition GERG2008.cpp:734
static double tijk[MaxMdl+1][MaxTrmM+1]
Definition GERG2008.cpp:168
static int dijk[MaxMdl+1][MaxTrmM+1]
Definition GERG2008.cpp:162
void DensityGERG(const int iFlag, const double T, const double P, const std::vector< double > &x, double &D, int &ierr, std::string &herr)
Calculate density from temperature and pressure.
Definition GERG2008.cpp:247
static double fij[MaxFlds+1][MaxFlds+1]
Definition GERG2008.cpp:170
static int kexp[MaxFlds+1]
Definition GERG2008.cpp:164
double Tanh(double xx)
Definition GERG2008.cpp:174
void PressureGERG(const double T, const double D, const std::vector< double > &x, double &P, double &Z)
Calculate pressure and compressibility factor.
Definition GERG2008.cpp:216
static double Vc3[MaxFlds+1]
Definition GERG2008.cpp:165
static double Tc[MaxFlds+1]
Definition GERG2008.cpp:165
static double taupijk[MaxFlds+1][MaxTrmM+1]
Definition GERG2008.cpp:171
static double gijk[MaxMdl+1][MaxTrmM+1]
Definition GERG2008.cpp:168