# -*- coding: utf-8 -*-
"""
@author: Melzani M., www.mmelzani.fr

Trace la pression de saturation de l'eau : donnée (quasi)expérimentales, et divers modèles.
Utilise le module Coolprop. 
"""

"""
Toutes les fonctionnalités de ProposSI :
http://www.coolprop.org/coolprop/HighLevelAPI.html

Syntaxe :
CoolProp.CoolProp.PropsSI('ce que je veux','param 1',valeur 1,'param 2',valeur 2,'fluide')

Abréviations usuelles :
- T, P
- masse volumique notée 'D'
- titre en vapeur noté 'Q'
"""

import numpy as np
import CoolProp.CoolProp as CPCP
import matplotlib.pyplot as plt




# Fermer toutes les figures avant de relancer le script
plt.close("all")

fluide = 'water'

# Au point critique
Tc = CPCP.PropsSI('Tcrit',fluide)
Pc = CPCP.PropsSI('Pcrit',fluide)
Dc = CPCP.PropsSI('D','P',Pc,'T',Tc,fluide)
vc = 1./Dc
Sc = CPCP.PropsSI('Smass','P',Pc,'T',Tc,fluide)
Hc = CPCP.PropsSI('Hmass','P',Pc,'T',Tc,fluide)

Ttriple = CPCP.PropsSI('Ttriple',fluide)
Ptriple = CPCP.PropsSI('ptriple',fluide)

print "Pc = " + str(Pc*1.e-5) + " bar"
print "Tc = " + str(Tc) + " K, soit " + str(Tc-273.15) + " C"
print "vc = " + str(vc) + " m^3/kg"
print "Sc = " + str(Sc) + " J/K/kg"
print "Hc = " + str(Hc) + " J/kg"

print "Ttriple = " + str(Ttriple) + " K"
print "Ptriple = " + str(Ptriple) + " Pa"


# Tracé de psat(T)

x = np.linspace(Ttriple,Tc,num=300) # T en Kelvin 
psat = CPCP.PropsSI('P','T',x,'Q',0,fluide)
psat_modele2 = 1.e5 * ((x-273.15) / (100.))**4
psat_modele = 1.e5 * np.exp(13.7-5120./x)

fig = plt.figure('autre')
ax = fig.add_subplot(111)
plt.plot(x-273.15,psat/1.e5,'-',color='k',linewidth='2',label="p_sat(T)")
plt.plot(x-273.15,psat_modele/1.e5,'-',color='r',label=u"modèle 1 : 1.e5*exp(13.7-5120./T_K)")
plt.plot(x-273.15,psat_modele2/1.e5,'-',color='g',label=u"modèle 2 : 1.e5*((T_K-273.15)/100.)**4")
plt.plot(x-273.15,abs(psat_modele/psat-1),'--',color='r',label=u"abs(psat_modele1/psat-1)")
plt.plot(x-273.15,abs(psat_modele2/psat-1),'--',color='g',label=u"abs(psat_modele2/psat-1)")
ax.set_yscale('log')
plt.xlabel(u'T (°C)')
plt.ylabel(u'p_sat (bar)')
plt.grid()
plt.legend(prop={'size':'10'},loc='best')
plt.tight_layout()
plt.show()