示例#1
0
文件: C_p_vector.py 项目: karpob/lrtm
def C_p_vector(delta,tau,component_params):
        from helmholtz_functions.d_alpha_d_delta_vector import d_alpha_d_delta_vector
        from helmholtz_functions.d_alpha_d_delta_d_tau_vector import d_alpha_d_delta_d_tau_vector
        from helmholtz_functions.d_alpha_d_tau_d_tau_vector import d_alpha_d_tau_d_tau_vector
        from helmholtz_functions.ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R_vector import ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R_vector
        from helmholtz_functions.d_alpha_d_delta_d_delta_vector import d_alpha_d_delta_d_delta_vector
        from helmholtz_functions.ideal_helmholtz_from_coef_dtau_dtau_vector import ideal_helmholtz_from_coef_dtau_dtau_vector
        from numpy import power
        
        R_specific=component_params['R']/component_params['M_amu']
        if(component_params['ideal_eqn_type']=='Cp'):
                
                dalpha_o_tau_tau=ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R_vector(component_params['ni'],component_params['ti'],component_params['vi'],component_params['ui'],component_params['R'],component_params['ho'],component_params['so'],component_params['rho_c']/component_params['M_amu'],component_params['Tc'],tau,delta,component_params['n_ideal_gas_terms_pow'],component_params['n_ideal_gas_terms_exp'],component_params['To'],component_params['rho_o'])
        else:
                dalpha_o_tau_tau=ideal_helmholtz_from_coef_dtau_dtau_vector(delta,tau,component_params['ideal_n'],component_params['ideal_gamma'])
        
        dalpha_tau_tau=d_alpha_d_tau_d_tau_vector(tau,delta,component_params)
        dalpha_delta=d_alpha_d_delta_vector(tau,delta,component_params)
        dalpha_delta_tau=d_alpha_d_delta_d_tau_vector(tau,delta,component_params)      
        dalpha_delta_delta=d_alpha_d_delta_d_delta_vector(tau,delta,component_params)        
        cv=-1.0*R_specific*(tau*tau*(dalpha_o_tau_tau+dalpha_tau_tau))
        cp=cv+R_specific*power((1.0+delta*dalpha_delta-delta*tau*dalpha_delta_tau),2)/(1.0+2.0*delta*dalpha_delta+delta*delta*dalpha_delta_delta)
        
        #default is in kJ/kg-K convert to erg/K/mol for DeBoer's TCM
	#  kJ    1000J    1e7 ergs    1 kg    M_amu g      erg
	#----- * ----- * --------- * ------ * --------  = ------- 
	# kg*K    kJ      1J         1000 g    mol         K mol
	
	#cp*M_amu*1e7
        return cp
示例#2
0
def enthalpy_normal_h2(T,density):
	from helmholtz_functions.ideal_helmholtz_energy_from_Cp_o_over_R import ideal_helmholtz_energy_from_Cp_o_over_R
	from helmholtz_functions.ideal_helmholtz_energy_dtau_from_Cp_o_over_R import ideal_helmholtz_energy_dtau_from_Cp_o_over_R
	from helmholtz_functions.ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R import ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R
	from helmholtz_functions.d_alpha_d_tau import d_alpha_d_tau 
	from helmholtz_functions.d_alpha_d_delta import d_alpha_d_delta
        from helmholtz_functions.helmholtz_energy_residual import helmholtz_energy_residual
        from helmholtz_functions.d_alpha_d_tau_d_tau import d_alpha_d_tau_d_tau
        from helmholtz_functions.d_alpha_d_delta_d_delta import d_alpha_d_delta_d_delta
        from helmholtz_functions.d_alpha_d_delta_d_tau import d_alpha_d_delta_d_tau
        from helmholtz_functions.ideal_helmholtz_energy_from_Cp_o_over_R_vector import ideal_helmholtz_energy_from_Cp_o_over_R_vector
        from helmholtz_functions.ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R_vector import ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R_vector
        from thermodynamic_functions.Virial_B_vector import Virial_B_vector
        from math import sqrt
        from pylab import zeros
        from numpy import asarray
	N_i=[-6.93643,0.01,2.1101,4.52059,0.732564,-1.34086,0.130985,-0.777414,0.351944,-0.0211716,0.0226312,0.032187,-0.0231752,0.0557346];
	t_i=[0.6844,1,0.989,0.489,0.803,1.1444,1.409,1.754,1.311,4.187,5.646,0.791,7.249,2.986]
	d_i=[1,4,1,1,2,2,3,1,3,2,1,3,1,1]
	p_i=[0,0,0,0,0,0,0,1,1,0/1,0/1,0/1,0/1,0/1]
	phi_i=[0,0,0,0,0,0,0,0,0,1.685,0.489,0.103,2.506,1.607]# Not, we need to use -sign here
	Beta_i=[0,0,0,0,0,0,0,0,0, 0.171,0.2245,0.1304,0.2785,0.3967] #Note, we need to use - sign here
	gamma_i=[0,0,0,0,0,0,0,0,0,0.7164,1.3444,1.4517,0.7204,1.5445] 
	D_i=[0,0,0,0,0,0,0,0,0,1.506,0.156,1.736,0.67,1.6620]
	Tc=33.145
        rho_c=15.508*2.01594 # mol/l -> kg/m^3 factors of 1000 liter converstion, and gram conversion cancel
        delta=density/rho_c
	tau=Tc/T
	R=8.314472
        R_hydrogen=R/2.01594
	
	ni=2.5   
	ti=0.0
        vi=[1.616,-0.4117,-0.792,0.758,1.217] 
        ui=[531,751,1989,2484,6859]
        
	R=8.314472           #J/mol/K
	ho = 7206.9069892047 #J/mol
	so = 143.4846187346  #J/mol/K
	n_power_terms=9
	n_gaussian_terms=5
	n_critical_terms=0
	
	n_ideal_gas_terms_pow=0
	n_ideal_gas_terms_exp=5
	

	RES_a     = zeros(len(ui))
        RES_b     = zeros(len(ui))
        RES_B     = zeros(len(ui))
        RES_C     = zeros(len(ui))
        RES_D     = zeros(len(ui))
        RES_A     = zeros(len(ui))

	To=273.15        
        rho_o=((0.001/(R*To))*1000)
        h2_component_params={'N_i':asarray([-6.93643,0.01,2.1101,4.52059,0.732564,-1.34086,0.130985,-0.777414,0.351944,-0.0211716,0.0226312,0.032187,-0.0231752,0.0557346]),
                             't_i':asarray([0.6844,1,0.989,0.489,0.803,1.1444,1.409,1.754,1.311,4.187,5.646,0.791,7.249,2.986]),
                             'd_i':asarray([1,4,1,1,2,2,3,1,3,2,1,3,1,1]),
                             'p_i':asarray([0,0,0,0,0,0,0,1,1,0/1,0/1,0/1,0/1,0/1]),
                             'phi_i':asarray([0,0,0,0,0,0,0,0,0,1.685,0.489,0.103,2.506,1.607]),
                             'Beta_i':asarray([0,0,0,0,0,0,0,0,0, 0.171,0.2245,0.1304,0.2785,0.3967]), 
                             'gamma_i':asarray([0,0,0,0,0,0,0,0,0,0.7164,1.3444,1.4517,0.7204,1.5445]), 
                             'D_i':asarray([0,0,0,0,0,0,0,0,0,1.506,0.156,1.736,0.67,1.6620]),
                             'Tc':float(33.145),
                             'rho_c':float(15.508*2.01594), # mol/l -> kg/m^3 factors of 1000 liter converstion, and gram conversion cancel
                             'R':float(8.314472),
                             'ni':float(2.5),   
                             'ti':float(0.0),
                             'vi':asarray([1.616,-0.4117,-0.792,0.758,1.217]), 
                             'ui':asarray([531,751,1989,2484,6859]),
                             #'R':float(8.314472)           #J/mol/K
                             'ho':float(7206.9069892047), #J/mol
                             'so':float(143.4846187346),  #J/mol/K
                             'n_power_terms':int(9),
                             'n_power_terms_wo_exp':int(7),
                             'n_power_terms_w_exp':int(2),
                             'n_gaussian_terms':int(5),
                             'n_critical_terms':int(0),
                             'n_ideal_gas_terms_pow':int(0),
                             'n_ideal_gas_terms_exp':int(5),
                             'RES_a':zeros(5),
                             'RES_b':zeros(5),
                             'RES_B':zeros(5),
                             'RES_C':zeros(5),
                             'RES_D':zeros(5),
                             'RES_A':zeros(5),
                             'To':float(273.15),        
                             'rho_o':float((0.001/(8.314472*273.15))*1000),
                             'M_amu':float(2.01594),
                             'ideal_eqn_type':'Cp'}
        tau_v=asarray([tau,tau])
        delta_v=asarray([delta,delta])
        
        Virial_b=Virial_B_vector(tau_v,h2_component_params,h2_component_params,h2_component_params,1.0,1.0,rho_c/2.01594,Tc,'pure')
        
	#Calculate Ideal Terms
	ideal=ideal_helmholtz_energy_from_Cp_o_over_R(ni,ti,vi,ui,R,ho,so,rho_c/2.01594,Tc,tau,delta,n_ideal_gas_terms_pow,n_ideal_gas_terms_exp,To,rho_o)
        ideal_v=ideal_helmholtz_energy_from_Cp_o_over_R_vector(ni,ti,vi,ui,R,ho,so,rho_c/2.01594,Tc,tau_v,delta_v,n_ideal_gas_terms_pow,n_ideal_gas_terms_exp,To,rho_o)
        #print ideal-ideal_v
        dalpha_o=ideal_helmholtz_energy_dtau_from_Cp_o_over_R(ni,ti,vi,ui,R,ho,so,rho_c/2.01594,Tc,tau,delta,n_ideal_gas_terms_pow,n_ideal_gas_terms_exp,To,rho_o)
	
	dalpha_o_tau_tau=ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R(ni,ti,vi,ui,R,ho,so,rho_c/2.01594,Tc,tau,delta,n_ideal_gas_terms_pow,n_ideal_gas_terms_exp,To,rho_o)
	dalpha_o_tau_tau_vector=ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R_vector(ni,ti,vi,ui,R,ho,so,rho_c/2.01594,Tc,tau_v,delta_v,n_ideal_gas_terms_pow,n_ideal_gas_terms_exp,To,rho_o)
	#print dalpha_o_tau_tau-dalpha_o_tau_tau_vector
	#Calculate Residual Terms
	residual=helmholtz_energy_residual(tau,delta,N_i,t_i,d_i,p_i,phi_i,Beta_i,gamma_i,D_i,n_power_terms,n_gaussian_terms,n_critical_terms,RES_a,RES_b,RES_B,RES_C,RES_D,RES_A)
	
	dalpha_tau=d_alpha_d_tau(tau,delta,N_i,t_i,d_i,p_i,phi_i,Beta_i,gamma_i,D_i,n_power_terms,n_gaussian_terms,n_critical_terms,RES_a,RES_b,RES_B,RES_C,RES_D,RES_A)
	
	dalpha_delta=d_alpha_d_delta(tau,delta,N_i,t_i,d_i,p_i,phi_i,Beta_i,gamma_i,D_i,n_power_terms,n_gaussian_terms,n_critical_terms,RES_a,RES_b,RES_B,RES_C,RES_D,RES_A)
	print T, Virial_b,dalpha_delta
	dalpha_tau_tau=d_alpha_d_tau_d_tau(tau,delta,N_i,t_i,d_i,p_i,phi_i,Beta_i,gamma_i,D_i,n_power_terms,n_gaussian_terms,n_critical_terms,RES_a,RES_b,RES_B,RES_C,RES_D,RES_A)
        
        dalpha_delta_delta=d_alpha_d_delta_d_delta(tau,delta,N_i,t_i,d_i,p_i,phi_i,Beta_i,gamma_i,D_i,n_power_terms,n_gaussian_terms,n_critical_terms,RES_a,RES_b,RES_B,RES_C,RES_D,RES_A)
        
        dalpha_delta_tau=d_alpha_d_delta_d_tau(tau,delta,N_i,t_i,d_i,p_i,phi_i,Beta_i,gamma_i,D_i,n_power_terms,n_gaussian_terms,n_critical_terms,RES_a,RES_b,RES_B,RES_C,RES_D,RES_A)
	
	
        #compressibility Density<-->Pressure
	Z=delta*dalpha_delta+float(1.0)
        #Enthalpy
	h1=R_hydrogen*T*1.0
	h2=R_hydrogen*T*tau*(dalpha_o+dalpha_tau)
	h3=R_hydrogen*T*delta*dalpha_delta
	h=h1+h2+h3
	#Entropy
	s=R_hydrogen*(tau*dalpha_o+tau*dalpha_tau-ideal-residual)
	#Absolute Helmholtz Energy
	absolute_helmholtz_energy=R_hydrogen*T*(ideal+residual)
	#Isochoric heat capacity
	cv=-1.0*R_hydrogen*(tau*tau*(dalpha_o_tau_tau+dalpha_tau_tau))
	#Isobaric heat capacity
	cp=cv+R_hydrogen*pow((1.0+delta*dalpha_delta-delta*tau*dalpha_delta_tau),2)/(1.0+2.0*delta*dalpha_delta+delta*delta*dalpha_delta_delta)
	
	# Speed of Sound?
	
	a1 = 1 + delta*dalpha_delta - delta*tau*dalpha_delta_tau;
        b1 = tau*tau*(dalpha_o_tau_tau + dalpha_tau_tau);
        w = 1 + 2*delta*dalpha_delta + delta*delta*dalpha_delta_delta - a1*a1/b1;
        speed_o_sound=sqrt(R_hydrogen*T*w*1000)
        
        return Z,h,s,absolute_helmholtz_energy,cv,cp,speed_o_sound,R_hydrogen*T*ideal,residual*R_hydrogen*T
示例#3
0
def C_p_vector_mix(density,T,delta,tau,component_params1,component_params2,component_params3,component_params4,component_params12,component_params14,x_1,x_2,x_3,x_4):
        from helmholtz_functions.d_alpha_d_delta_vector import d_alpha_d_delta_vector
        from helmholtz_functions.d_alpha_d_delta_d_tau_vector import d_alpha_d_delta_d_tau_vector
        from helmholtz_functions.d_alpha_d_tau_d_tau_vector import d_alpha_d_tau_d_tau_vector
        from helmholtz_functions.ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R_vector import ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R_vector
        from helmholtz_functions.d_alpha_d_delta_d_delta_vector import d_alpha_d_delta_d_delta_vector
        from helmholtz_functions.ideal_helmholtz_from_coef_dtau_dtau_vector import ideal_helmholtz_from_coef_dtau_dtau_vector
        from numpy import power
        
        
        if(component_params1['ideal_eqn_type']=='Cp'):
         
                dalpha_o_tau_tau1=ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R_vector(component_params1['ni'],component_params1['ti'],component_params1['vi'],component_params1['ui'],component_params1['R'],component_params1['ho'],component_params1['so'],component_params1['rho_c']/component_params1['M_amu'],component_params1['Tc'],component_params1['Tc']/T,density/component_params1['rho_c'],component_params1['n_ideal_gas_terms_pow'],component_params1['n_ideal_gas_terms_exp'],component_params1['To'],component_params1['rho_o'])
        else:
               
                dalpha_o_tau_tau1=ideal_helmholtz_from_coef_dtau_dtau_vector(density/component_params1['rho_c'],component_params1['Tc']/T,component_params1['ideal_n'],component_params1['ideal_gamma'])
        
        if(component_params2['ideal_eqn_type']=='Cp'):
               
                
                dalpha_o_tau_tau2=ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R_vector(component_params2['ni'],component_params2['ti'],component_params2['vi'],component_params2['ui'],component_params2['R'],component_params2['ho'],component_params2['so'],component_params2['rho_c'],component_params2['Tc'],component_params2['Tc']/T,density/component_params2['rho_c'],component_params2['n_ideal_gas_terms_pow'],component_params2['n_ideal_gas_terms_exp'],component_params2['To'],component_params2['rho_o'])
        else:
               
                dalpha_o_tau_tau2=ideal_helmholtz_from_coef_dtau_dtau_vector(density/component_params2['rho_c'],component_params2['Tc']/T,component_params2['ideal_n'],component_params2['ideal_gamma'])
        
        if(component_params3['ideal_eqn_type']=='Cp'):
               
                
                dalpha_o_tau_tau3=ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R_vector(component_params3['ni'],component_params3['ti'],component_params3['vi'],component_params3['ui'],component_params3['R'],component_params3['ho'],component_params3['so'],component_params3['rho_c'],component_params3['Tc'],component_params3['Tc']/T,density/component_params3['rho_c'],component_params3['n_ideal_gas_terms_pow'],component_params3['n_ideal_gas_terms_exp'],component_params3['To'],component_params3['rho_o'])
        else:
               
                dalpha_o_tau_tau3=ideal_helmholtz_from_coef_dtau_dtau_vector(density/component_params3['rho_c'],component_params3['Tc']/T,component_params3['ideal_n'],component_params3['ideal_gamma'])
        
        if(component_params4['ideal_eqn_type']=='Cp'):
               
                
                dalpha_o_tau_tau4=ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R_vector(component_params4['ni'],component_params4['ti'],component_params4['vi'],component_params4['ui'],component_params4['R'],component_params4['ho'],component_params4['so'],component_params4['rho_c'],component_params4['Tc'],component_params4['Tc']/T,density/component_params4['rho_c'],component_params4['n_ideal_gas_terms_pow'],component_params4['n_ideal_gas_terms_exp'],component_params4['To'],component_params4['rho_o'])
        else:
               
                dalpha_o_tau_tau4=ideal_helmholtz_from_coef_dtau_dtau_vector(density/component_params4['rho_c'],component_params['Tc']/T,component_params4['ideal_n'],component_params4['ideal_gamma'])
                
        
        dalpha_tau_tau1=d_alpha_d_tau_d_tau_vector(tau,delta,component_params1)
        dalpha_delta1=d_alpha_d_delta_vector(tau,delta,component_params1)
        dalpha_delta_tau1=d_alpha_d_delta_d_tau_vector(tau,delta,component_params1)      
        dalpha_delta_delta1=d_alpha_d_delta_d_delta_vector(tau,delta,component_params1)
        
        dalpha_tau_tau2=d_alpha_d_tau_d_tau_vector(tau,delta,component_params2)
        dalpha_delta2=d_alpha_d_delta_vector(tau,delta,component_params2)
        dalpha_delta_tau2=d_alpha_d_delta_d_tau_vector(tau,delta,component_params2)      
        dalpha_delta_delta2=d_alpha_d_delta_d_delta_vector(tau,delta,component_params2)
        
        dalpha_tau_tau3=d_alpha_d_tau_d_tau_vector(tau,delta,component_params3)
        dalpha_delta3=d_alpha_d_delta_vector(tau,delta,component_params3)
        dalpha_delta_tau3=d_alpha_d_delta_d_tau_vector(tau,delta,component_params3)      
        dalpha_delta_delta3=d_alpha_d_delta_d_delta_vector(tau,delta,component_params3)
        
        dalpha_tau_tau4=d_alpha_d_tau_d_tau_vector(tau,delta,component_params4)
        dalpha_delta4=d_alpha_d_delta_vector(tau,delta,component_params4)
        dalpha_delta_tau4=d_alpha_d_delta_d_tau_vector(tau,delta,component_params4)      
        dalpha_delta_delta4=d_alpha_d_delta_d_delta_vector(tau,delta,component_params4)
        
        
        dalpha_tau_tau12=d_alpha_d_tau_d_tau_vector(tau,delta,component_params12)
        dalpha_delta12=d_alpha_d_delta_vector(tau,delta,component_params12)
        dalpha_delta_tau12=d_alpha_d_delta_d_tau_vector(tau,delta,component_params12)      
        dalpha_delta_delta12=d_alpha_d_delta_d_delta_vector(tau,delta,component_params12)
        
        dalpha_tau_tau14=d_alpha_d_tau_d_tau_vector(tau,delta,component_params14)
        dalpha_delta14=d_alpha_d_delta_vector(tau,delta,component_params14)
        dalpha_delta_tau14=d_alpha_d_delta_d_tau_vector(tau,delta,component_params14)      
        dalpha_delta_delta14=d_alpha_d_delta_d_delta_vector(tau,delta,component_params14)
        
        
        
        dalpha_tau_tau=x_1*dalpha_tau_tau1+x_2*dalpha_tau_tau2 +x_3*dalpha_tau_tau3 +x_4*dalpha_tau_tau4 +x_1*x_2*dalpha_tau_tau12 + x_1*x_4*dalpha_tau_tau14
        dalpha_delta=x_1*dalpha_delta1+x_2*dalpha_delta2+x_3*dalpha_delta3+x_4*dalpha_delta4+x_1*x_2*dalpha_delta12+x_1*x_4*dalpha_delta14
        dalpha_delta_tau=x_1*dalpha_delta_tau1+x_2*dalpha_delta_tau2+x_3*dalpha_delta_tau3+x_4*dalpha_delta_tau4 +x_1*x_2*dalpha_delta_tau12+ x_1*x_4*dalpha_delta_tau14
        dalpha_delta_delta=x_1*dalpha_delta_delta1+x_2*dalpha_delta_delta2+ x_3*dalpha_delta_delta3 + x_4*dalpha_delta_delta4  +  x_1*x_2*dalpha_delta_delta12 +x_1*x_4*dalpha_delta_delta14
        
        tau1=component_params1['Tc']/T
        tau2=component_params2['Tc']/T
        tau3=component_params3['Tc']/T
        tau4=component_params4['Tc']/T
        #unlike the pure component, its just easier to do things in terms of moles,
        # then convert to per/kg, then ergs for DeBoers stuff...
        
        R_ideal12=component_params12['R']#/component_params12['M_amu']
        Ri1=component_params1['R']#/component_params1['M_amu']
        Ri2=component_params2['R']#/component_params2['M_amu']
        Ri3=component_params3['R']
        Ri4=component_params4['R']
        ave_R=(x_1*Ri1+x_2*Ri2 +x_3*Ri3+x_4*Ri4)/(x_1+x_2+x_3+x_4)      
        cv_r=-1.0*ave_R*(tau*tau*(dalpha_tau_tau))
        cv_o=x_1*(-1.0)*Ri1*(tau1*tau1*dalpha_o_tau_tau1)+x_2*(-1.0)*Ri2*(tau2*tau2*dalpha_o_tau_tau2)+x_3*(-1.0)*Ri3*(tau3*tau3*dalpha_o_tau_tau3)+x_4*(-1.0)*Ri4*(tau4*tau4*dalpha_o_tau_tau4)
       
        cp_mol=cv_r+cv_o+ave_R*power((1.0+delta*dalpha_delta-delta*tau*dalpha_delta_tau),2)/(1.0+2.0*delta*dalpha_delta+delta*delta*dalpha_delta_delta)
        #(the above gives J/(mol K)
        # now convert to kJ/(kg-K)
        M_ave=x_1*component_params1['M_amu']+x_2*component_params2['M_amu']+x_3*component_params3['M_amu']+x_4*component_params4['M_amu']
        cp=cp_mol/M_ave#component_params12['M_amu']
        #default is in kJ/kg-K convert to erg/K/mol for DeBoer's TCM
	#  kJ    1000J    1e7 ergs    1 kg    M_amu g      erg
	#----- * ----- * --------- * ------ * --------  = ------- 
	# kg*K    kJ      1J         1000 g    mol         K mol
	
	cp*M_ave*1e7
        return cp
示例#4
0
def enthalpy_methane(T,density):
	from helmholtz_functions.ideal_helmholtz_energy_from_Cp_o_over_R import ideal_helmholtz_energy_from_Cp_o_over_R
	from helmholtz_functions.ideal_helmholtz_energy_dtau_from_Cp_o_over_R import ideal_helmholtz_energy_dtau_from_Cp_o_over_R
	from helmholtz_functions.ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R import ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R
	from helmholtz_functions.d_alpha_d_tau import d_alpha_d_tau 
	from helmholtz_functions.d_alpha_d_delta import d_alpha_d_delta
        from helmholtz_functions.helmholtz_energy_residual import helmholtz_energy_residual
        from helmholtz_functions.d_alpha_d_tau_d_tau import d_alpha_d_tau_d_tau
        from helmholtz_functions.d_alpha_d_delta_d_delta import d_alpha_d_delta_d_delta
        from helmholtz_functions.d_alpha_d_delta_d_tau import d_alpha_d_delta_d_tau
        from helmholtz_functions.ideal_helmholtz_energy_from_Cp_o_over_R_vector import ideal_helmholtz_energy_from_Cp_o_over_R_vector
        from helmholtz_functions.ideal_helmholtz_energy_dtau_from_Cp_o_over_R_vector import ideal_helmholtz_energy_dtau_from_Cp_o_over_R_vector
        from helmholtz_functions.ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R_vector import ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R_vector
        from thermodynamic_functions.Virial_B_vector import Virial_B_vector
        from math import sqrt
        from pylab import zeros
        from numpy import asarray
        
        N_i=[0.43679010280e-01,
             0.67092361990, 
             -0.17655778590e01, 
             0.85823302410, 
             -0.12065130520e01,
             0.51204672200, 
             -0.40000107910e-03 ,
             -0.12478424230e-01,
             0.31002697010e-01,
             0.17547485220e-02,
             -0.31719216050e-05,
             -0.22403468400e-05,
             0.29470561560e-06,
             0.18304879090, 
             0.15118836790,
             -0.42893638770,
             0.68940024460e-01,
             -0.14083139960e-01,
             -0.30630548300e-01,
             -0.29699067080e-01,
             -0.19320408310e-01,
             -0.11057399590,
             0.99525489950e-01,
             0.85484378250e-02, 
             -0.61505556620e-01,
             -0.42917924230e-01,
             -0.18132072900e-01,
             0.34459047600e-01,
             -0.23859194500e-02,
             -0.11590949390e-01,
             0.66416936020e-01,
             -0.23715495900e-01, 
             -0.39616249050e-01, 
             -0.13872920440e-01,
             0.33894895990e-01,
             -0.29273787530e-02,
             0.93247999460e-04,
             -0.62871715180e01,
             0.12710694670e02,
             -0.64239534660e01]  
	t_i= [-0.5, 
	       0.5,
	       1.0,
	       0.5,
	       1.0,
	       1.5,
	       4.5,
	       0.0,
	       1.0,
	       3.0,
	       1.0,
	       3.0,
	       3.0,
	       0.0,
	       1.0,
	       2.0,
	       0.0,
	       0.0,
	       2.0,
	       2.0,
	       5.0,
	       5.0,
	       5.0,
	       2.0,
	       4.0,
	       12.0,
	       8.0,
	       10.0,
	       10.0,
	       10.0,
	       14.0,
	       12.0,
	       18.0,
	       22.0,
	       18.0,
	       14.0,
	       2.0,
	       0.0,
	       1.0,
	       2.0]
	d_i=[1.0,
	     1.0,
	     1.0,
	     2.0,
	     2.0,
	     2.0,
	     2.0,
	     3.0,
	     4.0,
	     4.0,
	     8.0,
	     9.0,
	     10.0,
	     1.0,
	     1.0,
	     1.0,
	     2.0,
	     4.0,
	     5.0,
	     6.0,
	     1.0,
	     2.0,
	     3.0,
	     4.0,
	     4.0,
	     3.0,
	     5.0,
	     5.0,
	     8.0,
	     2.0,
	     3.0,
	     4.0,
	     4.0,
	     4.0,
	     5.0,
	     6.0,
	     2.0,
	     0.0,
	     0.0,
	     0.0]    
	p_i=[0,
	     0,
	     0,
	     0,
	     0,
	     0,
	     0,
	     0,
	     0,
	     0,
	     0,
	     0,
	     0,
	     1,
	     1,
	     1,
	     1,
	     1,
	     1,
	     1,
	     2,
	     2,
	     2,
	     2,
	     2,
	     3,
	     3,
	     3,
	     3,
	     4,
	     4,
	     4,
	     4,
	     4,
	     4,
	     4,
	     0/1,
	     0/1,
	     0/1,
	     0/1]  
		
	phi_i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20.0,40.0,40.0,40.0]# Not, we need to use -sign here
	Beta_i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,250,250,250] #Note, we need to use - sign here
	gamma_i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.07,1.11,1.11,1.11] 
	D_i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.0,1.0,1.0,1.0]
	Tc=190.564
	
        rho_c=10.139128*16.0428 # mol/l -> kg/m^3 factors of 1000 liter converstion, and gram conversion cancel
        delta=density/rho_c
	tau=Tc/T
	R=8.31451
        R_methane=R/16.0428
	
	ni=4.0016  
	ti=0  
        vi=[0.84490000e-02,4.6942000,3.4865000,1.6572000,1.4115000] 
        ui=[648.0,1957.0,3895.0,5705.0,15080.0]

	R=8.31451          #J/mol/K
	ho = 8295.6883966242294	 #J/mol -       -
	so = 28.384819963016852  #J/mol/K
	rho_o=26.326811491312679 #mol/L
	To=111.66720547358069
	n_power_terms=36
	n_gaussian_terms=4
	n_critical_terms=0
	
	n_ideal_gas_terms_pow=0
	n_ideal_gas_terms_exp=5
	

	RES_a     = zeros(len(ui))
        RES_b     = zeros(len(ui))
        RES_B     = zeros(len(ui))
        RES_C     = zeros(len(ui))
        RES_D     = zeros(len(ui))
        RES_A     = zeros(len(ui))

	      
        
        ch4_component_params={'N_i':asarray([0.43679010280e-01,0.67092361990, -0.17655778590e01, 0.85823302410, -0.12065130520e01,0.51204672200, -0.40000107910e-03 ,-0.12478424230e-01,0.31002697010e-01,0.17547485220e-02,-0.31719216050e-05,-0.22403468400e-05,0.29470561560e-06,0.18304879090, 0.15118836790,-0.42893638770,0.68940024460e-01,-0.14083139960e-01,-0.30630548300e-01,-0.29699067080e-01,-0.19320408310e-01,-0.11057399590,0.99525489950e-01,0.85484378250e-02, -0.61505556620e-01,-0.42917924230e-01,-0.18132072900e-01,0.34459047600e-01,-0.23859194500e-02,-0.11590949390e-01,0.66416936020e-01,-0.23715495900e-01, -0.39616249050e-01, -0.13872920440e-01,0.33894895990e-01,-0.29273787530e-02,0.93247999460e-04,-0.62871715180e+01,0.12710694670e+02,-0.64239534660e+01]),
                             't_i':asarray([-0.5, 0.5,1.0,0.5,1.0,1.5,4.5,0.0,1.0,3.0,1.0,3.0,3.0,0.0,1.0,2.0,0.0,0.0,2.0,2.0,5.0,5.0,5.0,2.0,4.0,12.0,8.0,10.0,10.0,10.0,14.0,12.0,18.0,22.0,18.0,14.0,2.0,0.0,1.0,2.0]),
                             'd_i':asarray([1.0,1.0,1.0,2.0,2.0,2.0,2.0,3.0,4.0,4.0,8.0,9.0,10.0,1.0,1.0,1.0,2.0,4.0,5.0,6.0,1.0,2.0,3.0,4.0,4.0,3.0,5.0,5.0,8.0,2.0,3.0,4.0,4.0,4.0,5.0,6.0,2.0,0.0,0.0,0.0]),
                             'p_i':asarray([0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,2,2,2,2]),
                             'phi_i':asarray([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20.0,40.0,40.0,40.0]),
                             'Beta_i':asarray([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,250,250,250]), 
                             'gamma_i':asarray([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.07,1.11,1.11,1.11]), 
                             'D_i':asarray([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1]),
                             'Tc':float(190.564),
                             'rho_c':float(10.139128*16.0428), # mol/l -> kg/m^3 factors of 1000 liter converstion, and gram conversion cancel
                             'R':float(8.31451),
                             'ni':float(4.0016),   
                             'ti':float(0.0),
                             'vi':asarray([0.84490000e-02,4.6942000,3.4865000,1.6572000,1.4115000]), 
                             'ui':asarray([648.0,1957.0,3895.0,5705.0,15080.0]),
                             #'R':float(8.314472)           #J/mol/K
                             'ho':float(8295.6883966242294), #J/mol
                             'so':float(28.384819963016852),  #J/mol/K
                             'n_power_terms':int(36),
                             'n_power_terms_wo_exp':int(13),
                             'n_power_terms_w_exp':int(36-13),
                             'n_gaussian_terms':int(4),
                             'n_critical_terms':int(0),
                             'n_ideal_gas_terms_pow':int(0),
                             'n_ideal_gas_terms_exp':int(5),
                             'RES_a':zeros(4),
                             'RES_b':zeros(4),
                             'RES_B':zeros(4),
                             'RES_C':zeros(4),
                             'RES_D':zeros(4),
                             'RES_A':zeros(4),
                             'To':float(111.66720547358069),        
                             'rho_o':float(26.326811491312679),
                             'M_amu':float(16.0428),
                             'ideal_eqn_type':'Cp'}
        tau_v=asarray([tau,tau])
        delta_v=asarray([delta,delta])
        
        Virial_b=Virial_B_vector(tau_v,ch4_component_params,ch4_component_params,ch4_component_params,1.0,1.0,rho_c/16.0428,Tc,'pure')
        
	#Calculate Ideal Terms
	ideal=ideal_helmholtz_energy_from_Cp_o_over_R(ni,ti,vi,ui,R,ho,so,rho_c/16.0428,Tc,tau,delta,n_ideal_gas_terms_pow,n_ideal_gas_terms_exp,To,rho_o)
        ideal_v=ideal_helmholtz_energy_from_Cp_o_over_R_vector(ni,ti,vi,ui,R,ho,so,rho_c/16.0428,Tc,tau_v,delta_v,n_ideal_gas_terms_pow,n_ideal_gas_terms_exp,To,rho_o)
        #print ideal-ideal_v
        dalpha_o=ideal_helmholtz_energy_dtau_from_Cp_o_over_R(ni,ti,vi,ui,R,ho,so,rho_c/16.0428,Tc,tau,delta,n_ideal_gas_terms_pow,n_ideal_gas_terms_exp,To,rho_o)
	dalpha_o_v=ideal_helmholtz_energy_dtau_from_Cp_o_over_R_vector(ni,ti,vi,ui,R,ho,so,rho_c/16.0428,Tc,tau_v,delta_v,n_ideal_gas_terms_pow,n_ideal_gas_terms_exp,To,rho_o)
	print dalpha_o-dalpha_o_v
	dalpha_o_tau_tau=ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R(ni,ti,vi,ui,R,ho,so,rho_c/16.0428,Tc,tau,delta,n_ideal_gas_terms_pow,n_ideal_gas_terms_exp,To,rho_o)
	dalpha_o_tau_tau_vector=ideal_helmholtz_energy_dtau_dtau_from_Cp_o_over_R_vector(ni,ti,vi,ui,R,ho,so,rho_c/16.0428,Tc,tau_v,delta_v,n_ideal_gas_terms_pow,n_ideal_gas_terms_exp,To,rho_o)
	#print dalpha_o_tau_tau-dalpha_o_tau_tau_vector
	#Calculate Residual Terms
	residual=helmholtz_energy_residual(tau,delta,N_i,t_i,d_i,p_i,phi_i,Beta_i,gamma_i,D_i,n_power_terms,n_gaussian_terms,n_critical_terms,RES_a,RES_b,RES_B,RES_C,RES_D,RES_A)
	
	dalpha_tau=d_alpha_d_tau(tau,delta,N_i,t_i,d_i,p_i,phi_i,Beta_i,gamma_i,D_i,n_power_terms,n_gaussian_terms,n_critical_terms,RES_a,RES_b,RES_B,RES_C,RES_D,RES_A)
	
	dalpha_delta=d_alpha_d_delta(tau,delta,N_i,t_i,d_i,p_i,phi_i,Beta_i,gamma_i,D_i,n_power_terms,n_gaussian_terms,n_critical_terms,RES_a,RES_b,RES_B,RES_C,RES_D,RES_A)
	
	dalpha_tau_tau=d_alpha_d_tau_d_tau(tau,delta,N_i,t_i,d_i,p_i,phi_i,Beta_i,gamma_i,D_i,n_power_terms,n_gaussian_terms,n_critical_terms,RES_a,RES_b,RES_B,RES_C,RES_D,RES_A)
        
        dalpha_delta_delta=d_alpha_d_delta_d_delta(tau,delta,N_i,t_i,d_i,p_i,phi_i,Beta_i,gamma_i,D_i,n_power_terms,n_gaussian_terms,n_critical_terms,RES_a,RES_b,RES_B,RES_C,RES_D,RES_A)
        
        dalpha_delta_tau=d_alpha_d_delta_d_tau(tau,delta,N_i,t_i,d_i,p_i,phi_i,Beta_i,gamma_i,D_i,n_power_terms,n_gaussian_terms,n_critical_terms,RES_a,RES_b,RES_B,RES_C,RES_D,RES_A)
	
	
        #compressibility Density<-->Pressure
	Z=delta*dalpha_delta+float(1.0)
        #Enthalpy
	h1=R_methane*T*1.0
	h2=R_methane*T*tau*(dalpha_o+dalpha_tau)
	h3=R_methane*T*delta*dalpha_delta
	h=h1+h2+h3
	#Entropy
	s=R_methane*(tau*dalpha_o+tau*dalpha_tau-ideal-residual)
	#Absolute Helmholtz Energy
	absolute_helmholtz_energy=R_methane*T*(ideal+residual)
	#Isochoric heat capacity
	cv=-1.0*R_methane*(tau*tau*(dalpha_o_tau_tau+dalpha_tau_tau))
	#Isobaric heat capacity
	cp=cv+R_methane*pow((1.0+delta*dalpha_delta-delta*tau*dalpha_delta_tau),2)/(1.0+2.0*delta*dalpha_delta+delta*delta*dalpha_delta_delta)
	
	# Speed of Sound?
	
	a1 = 1 + delta*dalpha_delta - delta*tau*dalpha_delta_tau;
        b1 = tau*tau*(dalpha_o_tau_tau + dalpha_tau_tau);
        w = 1 + 2*delta*dalpha_delta + delta*delta*dalpha_delta_delta - a1*a1/b1;
        speed_o_sound=sqrt(R_methane*T*w*1000)
        
        return Z,h,s,absolute_helmholtz_energy,cv,cp,speed_o_sound,R_methane*T*ideal,residual*R_methane*T