Professional Documents
Culture Documents
ZValue(Tc,Pc,Wc,T,P,R,eos)
{
var paramsab = new Array(3);
var coeffs = new Array(5);
var Z = new Array(4);
paramsab = calcab(Tc,Pc,Wc,T,P,R,eos);
coeffs = calccoeffs(paramsab[1],paramsab[2],T,P,R,eos);
Z = solvecubic(coeffs[0],coeffs[1],coeffs[2]);
return Z[0];
}
function calcab(Tc,Pc,Wc,T,P,R,eos)
{
var alpha, kappa;
var a, b;
var Tr = T/Tc;
var Pr = P/Pc;
switch (parseInt(eos))
{
case 1:
a = 27*R*R*Tc*Tc/(64*Pc*1E5);
b = R*Tc/(8*Pc*1E5);
kappa = 0;
break;
case 2:
a = 0.42748*R*R*Math.pow(Tc,2.5)/(Pc*1E5);
b = 0.08664*R*Tc/(Pc*1E5);
kappa = 0;
break;
case 3:
kappa = 0.480 + 1.574*Wc - 0.176*Wc*Wc;
alpha = Math.pow(1+kappa*(1-Math.sqrt(T/Tc)),2);
a = 0.42748*R*R*Tc*Tc*alpha/(Pc*1E5);
b = 0.08664*R*Tc/(Pc*1E5);
break;
case 4:
kappa = 0.37464 + 1.54226*Wc - 0.26992*Wc*Wc;
alpha = Math.pow(1+kappa*(1-Math.sqrt(Tr)),2);
a = 0.45724*R*R*Tc*Tc*alpha/(Pc*1E5);
b = 0.07780*R*Tc/(Pc*1E5);
break;
case 5:
kappa = 0.134 + 0.508*Wc - 0.0467*Wc*Wc;
alpha = Math.exp((2.00+0.836*Tr)*(1-Math.pow(Tr,kappa)));
a = 0.45724*R*R*Tc*Tc*alpha/(Pc*1E5);
b = 0.07780*R*Tc/(Pc*1E5);
break;
default:
kappa = 0; a = 0; b = 0;
}
return Array(kappa,a,b);
}
// calculate coefficients in the cubic equation of state
function calccoeffs(a,b,T,P,R,eos)
{
var A, B;
var C0, C1, C2;
switch (parseInt(eos))
{
case 1:
A = a*P*1E5/Math.pow(R*T,2);
B = b*P*1E5/(R*T);
C2 = -1 - B;
C1 = A;
C0 = -A*B;
break;
case 2:
A = a*P*1E5/(Math.sqrt(T)*Math.pow(R*T,2));
B = b*P*1E5/(R*T);
C2 = -1;
C1 = A - B - B*B;
C0 = -A*B;
break;
case 3:
A = a*P*1E5/Math.pow(R*T,2);
B = b*P*1E5/(R*T);
C2 = -1;
C1 = A - B - B*B;
C0 = -A*B;
break;
case 4:
A = a*P*1E5/Math.pow(R*T,2);
B = b*P*1E5/(R*T);
C2 = -1+B;
C1 = A - 3*B*B - 2*B;
C0 = -A*B + B*B + B*B*B;
break;
case 5:
A = a*P*1E5/Math.pow(R*T,2);
B = b*P*1E5/(R*T);
C2 = -1+B;
C1 = A - 3*B*B - 2*B;
C0 = -A*B + B*B + B*B*B;
break;
default:
C2 = 0; C1 = 0; C0 = 0;
}
return Array(C0,C1,C2,A,B);
}
// function for solving cubic equations
function solvecubic(C0,C1,C2)
{
var Q1 = C2*C1/6 - C0/2 - C2*C2*C2/27;
var P1 = C2*C2/9 - C1/3;
var D = Q1*Q1 - P1*P1*P1;
var temp, temp1, temp2;
var Z0, Z1, Z2;
if (D>=0)
{
temp1 = Math.pow(Math.abs(Q1+Math.sqrt(D)),0.3333333333);
temp1 = temp1 * (Q1 + Math.sqrt(D)) / Math.abs(Q1 + Math.sqrt(D));
temp2 = Math.pow(Math.abs(Q1-Math.sqrt(D)),0.3333333333);
temp2 = temp2 * (Q1 - Math.sqrt(D))/Math.abs(Q1 - Math.sqrt(D));
Z0 = temp1 + temp2 - C2/3;
Z1 = "";
Z2 = "";
}
else
{
temp1 = Q1*Q1/(P1*P1*P1);
temp2 = Math.sqrt(1-temp1)/Math.sqrt(temp1);
temp2 = temp2 * Q1/Math.abs(Q1);
var Phi = Math.atan(temp2);
if (Phi<0) {
Phi=Phi+Math.PI; }
Z0 = 2*Math.sqrt(P1)*Math.cos(Phi/3) - C2/3;
Z1 = 2*Math.sqrt(P1)*Math.cos((Phi+2*Math.PI)/3) - C2/3;
Z2 = 2*Math.sqrt(P1)*Math.cos((Phi+4*Math.PI)/3) - C2/3;
if (Z0<Z1) {
temp = Z0; Z0 = Z1; Z1 = temp; }
if (Z1<Z2) {
temp = Z1; Z1 = Z2; Z2 = temp; }
if (Z0<Z1) {
temp = Z0; Z0 = Z1; Z1 = temp; }
}
return Array(Z0,Z1,Z2,D);
}