from CoolProp.Plots.Plots import hs
import CoolProp
from CoolProp.CoolProp import Props
import matplotlib.pyplot as plt
import numpy as np

Fluid = 'Nitrogen'

fig = plt.figure()
ax = fig.add_subplot(111)

for Fluid in CoolProp.__fluids__:
    
    if Fluid == 'SES36':
        continue
        
    ax.cla()
    
    h_crit = Props('H','T',Props(Fluid,"Tcrit"),'D',Props(Fluid,"rhocrit"),Fluid)
    s_crit = Props('S','T',Props(Fluid,"Tcrit"),'D',Props(Fluid,"rhocrit"),Fluid)
   
    hL_Tmin = Props('H','T',Props(Fluid,"Tmin"),'Q',0,Fluid)
    hV_Tmin = Props('H','T',Props(Fluid,"Tmin"),'Q',1,Fluid)
    sL_Tmin = Props('S','T',Props(Fluid,"Tmin"),'Q',0,Fluid)
    sV_Tmin = Props('S','T',Props(Fluid,"Tmin"),'Q',1,Fluid)
    
    hs(Fluid, axis = ax)
    plt.plot(s_crit,h_crit,'rd')
    plt.plot([sL_Tmin,sV_Tmin],[hL_Tmin,hV_Tmin],'--')
    plt.gca().axhline(h_crit)
    plt.gca().axhline(hV_Tmin)
    
    # Two-Phase
    for T in np.linspace(Props(Fluid,"Tmin")+0.1,Props(Fluid,"Tcrit")-1e-3,30):
        for Q in np.linspace(0, 1, 30):
            try:
                h = Props("H",'Q',Q,'T',T,Fluid)
                s = Props("S",'Q',Q,'T',T,Fluid)
                T = Props("T",'S',s,'H',h,Fluid)
                #ax.plot(s,h,'o',mfc='none')
            except ValueError as VE:
                print T, Q , '|||', '"T","S",',s,',"H",',h,',"'+Fluid+'"', '|||', VE
                ax.plot(s,h,'o',mfc='none')
                
        
    for h in np.linspace(hL_Tmin, hV_Tmin + 1500,100):
        for s in np.linspace(sL_Tmin+0.01,sV_Tmin,100):
            try:
                h_pmax = Props('H','S',s,'P',6*Props(Fluid,'pcrit'),Fluid)
            except ValueError:
                h_pmax = 0
            htriple_s = (hV_Tmin-hL_Tmin)/(sV_Tmin-sL_Tmin)*(s-sL_Tmin)+hL_Tmin
            if h < htriple_s or h > h_pmax: continue
            try:
                T = Props("T",'S',s,'H',h,Fluid)
                #ax.plot(s,h,'o',mfc='none',ms=6)
            except ValueError:
                ax.plot(s,h,'s',mfc='none')
   

##     if Fluid =='Propane':
##         ps = Props("P",'T',300,'Q',0,Fluid);
##         hL = Props("H",'Q',0,'T',300,Fluid);
##         sL = Props("S",'Q',0,'T',300,Fluid);
##         h = Props("H",'P',ps,'T',299.5,Fluid);
##         s = Props("S",'P',ps,'T',299.5,Fluid);
##         print s,h,sL,hL
##         plt.plot(s,h,'o')
##         plt.plot(sL,hL,'d')
##         plt.gca().axvline(s)
##         plt.gca().axhline(268.75968916316691)
    
    fig.savefig('figs/'+Fluid+'.png',dpi=200)
    fig.savefig('figs/'+Fluid+'.pdf')
