mirror of
https://github.com/CoolProp/CoolProp.git
synced 2026-01-15 00:48:18 -05:00
118 lines
3.6 KiB
Python
118 lines
3.6 KiB
Python
from math import sqrt,exp
|
|
from CoolProp.CoolProp import Props
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
from scipy.odr import *
|
|
from math import log
|
|
E_K = {'REFPROP-Ammonia':386,
|
|
'REFPROP-Argon':143.2
|
|
}
|
|
SIGMA = {'REFPROP-Ammonia':0.2957,
|
|
'REFPROP-Argon':0.335
|
|
}
|
|
|
|
E_K['REFPROP-Propane']=263.88
|
|
SIGMA['REFPROP-Propane']=0.49748
|
|
E_K['REFPROP-R32']=289.65
|
|
SIGMA['REFPROP-R32']=0.4098
|
|
E_K['REFPROP-R245fa'] = 329.72
|
|
SIGMA['REFPROP-R245fa'] = 0.5529
|
|
|
|
|
|
def viscosity_dilute(fluid,T,e_k,sigma):
|
|
"""
|
|
T in [K], e_k in [K], sigma in [nm]
|
|
viscosity returned is in [Pa-s]
|
|
"""
|
|
|
|
Tstar = T/e_k
|
|
molemass = Props(fluid,'molemass')
|
|
if fluid == 'Propane' or fluid == 'REFPROP-Propane':
|
|
a = [0.25104574,-0.47271238,0,0.060836515,0]
|
|
theta_star = exp(a[0]*pow(log(Tstar),0)+a[1]*pow(log(Tstar),1)+a[3]*pow(log(Tstar),3));
|
|
eta_star = 0.021357*sqrt(molemass*T)/(pow(sigma,2)*theta_star)/1e6;
|
|
return eta_star
|
|
|
|
# From Neufeld, 1972, Journal of Chemical Physics - checked coefficients
|
|
OMEGA_2_2 = 1.16145*pow(Tstar,-0.14874)+ 0.52487*exp(-0.77320*Tstar)+2.16178*exp(-2.43787*Tstar)
|
|
# Using the leading constant from McLinden, 2000 since the leading term from Huber 2003 gives crazy values
|
|
eta_star = 26.692e-3*sqrt(molemass*T)/(pow(sigma,2)*OMEGA_2_2)/1e6
|
|
return eta_star
|
|
|
|
def viscosity_linear(fluid, T, rho, e_k, sigma):
|
|
"""
|
|
Implements the method of Vogel 1998 (Propane) for the linear part
|
|
"""
|
|
N_A=6.02214129e23
|
|
molemass = Props(fluid,'molemass')
|
|
Tstar = T/e_k
|
|
b= [-19.572881,219.73999,-1015.3226,2471.01251,-3375.1717,2491.6597,-787.26086,14.085455,-0.34664158]
|
|
s = sum([b[i]*pow(Tstar,-0.25*i) for i in range(7)])
|
|
|
|
B_eta_star = s+b[7]*pow(Tstar,-2.5)+b[8]*pow(Tstar,-5.5) #//[no units]
|
|
B_eta = N_A*pow(sigma/1e9,3)*B_eta_star #[m3/mol]
|
|
return viscosity_dilute(fluid,T,e_k,sigma)*B_eta*rho/molemass*1000
|
|
|
|
from PDSim.misc.datatypes import Collector
|
|
RHO = Collector()
|
|
TT = Collector()
|
|
DELTA = Collector()
|
|
TAU = Collector()
|
|
VV = Collector()
|
|
VV0 = Collector()
|
|
VV1 = Collector()
|
|
VVH = Collector()
|
|
|
|
fluid = 'REFPROP-R32'
|
|
Tc = Props(fluid,'Tcrit')
|
|
rhoc = Props(fluid,'rhocrit')
|
|
for T in np.linspace(290,Props(fluid,'Tcrit')-0.1,100):
|
|
rhoV = Props('D','T',T,'Q',1,fluid)
|
|
rhoL = Props('D','T',T,'Q',0,fluid)
|
|
rhomax = Props('D','T',Props(fluid,'Tmin'),'Q',0,fluid)
|
|
for rho in list(np.linspace(rhoL,rhomax,100)):#+list(np.linspace(rhoV,0.0001,100)):
|
|
#for rho in list(np.linspace(rhoV,0.0001,100)):
|
|
mu_0 = viscosity_dilute(fluid,T,E_K[fluid],SIGMA[fluid])
|
|
mu_1 = viscosity_linear(fluid,T,rho,E_K[fluid],SIGMA[fluid])
|
|
mu = Props('V','T',T,'D',rho,fluid)
|
|
VV << mu
|
|
VV0 << mu_0
|
|
VV1 << mu_1
|
|
VVH << mu-mu_0-mu_1
|
|
TT << T
|
|
RHO << rho
|
|
DELTA << rho/rhoc
|
|
TAU << Tc/T
|
|
|
|
def f_RHS(E, DELTA_TAU, VV):
|
|
k = 0
|
|
sum = 0
|
|
DELTA = DELTA_TAU[0,:]
|
|
TAU = DELTA_TAU[1,:]
|
|
for i in range(2,5):
|
|
for j in range(3):
|
|
sum += E[k]*DELTA**i/TAU**j
|
|
k += 1
|
|
# f1,f2,f3,g1,g2 = E[k],E[k+1],E[k+2],E[k+3],E[k+4]
|
|
# DELTA0 = g1*(1+g2*np.sqrt(TAU))
|
|
# sum += (f1+f2/TAU+f3/TAU/TAU)*(DELTA/(DELTA0-DELTA)-DELTA/DELTA0)
|
|
print np.mean(np.abs(((sum/VV-1)*100))),'%'
|
|
return sum
|
|
|
|
log_muH = np.log(VVH.v().T)
|
|
|
|
x = np.c_[DELTA.v().T, TAU.v().T].T
|
|
y = VVH.v()
|
|
|
|
linear = Model(f_RHS, extra_args = (y,) )
|
|
mydata = Data(x, y)
|
|
myodr = ODR(mydata, linear, beta0=np.array([0.1]*17),)
|
|
myoutput = myodr.run()
|
|
E = myoutput.beta
|
|
print E
|
|
|
|
#plt.plot(TT.vec, y,'b.',TT.vec, f_RHS(E, x, y),'r.')
|
|
#plt.show()
|
|
#plt.plot()
|
|
plt.plot(y.T,f_RHS(E, x, y))
|
|
plt.show() |