mirror of
https://github.com/CoolProp/CoolProp.git
synced 2026-01-11 15:08:03 -05:00
152 lines
4.4 KiB
Python
152 lines
4.4 KiB
Python
import matplotlib
|
|
matplotlib.use('Agg') # use a non-interactive backend
|
|
import CoolProp
|
|
import os.path
|
|
|
|
web_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
|
|
tar_fil = os.path.join(web_dir, '_static', 'CoolPropLogo.png')
|
|
tar_fil_long = os.path.join(web_dir, '_static', 'CoolPropLogoLong.png')
|
|
tar_fil_long_large = os.path.join(web_dir, '_static', 'CoolPropLogoLongLarge.png')
|
|
|
|
import matplotlib
|
|
import numpy as np
|
|
import CoolProp as CP
|
|
import matplotlib.pyplot as plt
|
|
import scipy.interpolate
|
|
|
|
# Prepare the constants
|
|
Water = CP.AbstractState("HEOS", "Water")
|
|
pc = Water.keyed_output(CP.iP_critical)
|
|
Tc = Water.keyed_output(CP.iT_critical)
|
|
T_min = 200
|
|
T_max = 1000
|
|
p_max = Water.keyed_output(CP.iP_max)
|
|
p_triple = 611.657
|
|
T_triple = 273.16
|
|
|
|
# Prepare the data for the melting line
|
|
steps = 2000
|
|
|
|
TT = []
|
|
PP = list(np.logspace(np.log10(p_triple), np.log10(p_max), steps))
|
|
for p in PP:
|
|
TT.append(Water.melting_line(CP.iT, CP.iP, p))
|
|
|
|
# Zone VI
|
|
for T in np.linspace(max(TT), 355, int(steps / 10)):
|
|
TT.append(T)
|
|
theta = T / 273.31
|
|
pi = 1 - 1.07476 * (1 - theta**4.6)
|
|
p = pi * 632.4e6
|
|
PP.append(p)
|
|
|
|
# Zone VII
|
|
for T in np.linspace(355, 715, int(steps / 10)):
|
|
TT.append(T)
|
|
theta = T / 355
|
|
lnpi = 0.173683e1 * (1 - 1 / theta) - 0.544606e-1 * (1 - theta**5) + 0.806106e-7 * (1 - theta**22)
|
|
p = np.exp(lnpi) * 2216e6
|
|
PP.append(p)
|
|
|
|
# Changes number of points
|
|
steps = int(steps / 10.0)
|
|
|
|
p_melt = np.logspace(np.log10(np.min(PP)), np.log10(np.max(PP)), steps)
|
|
T_melt_f = scipy.interpolate.interp1d(np.log10(PP), TT)
|
|
#T_melt_f = scipy.interpolate.spline(np.log10(PP),TT,np.log10(p_melt))
|
|
T_melt = T_melt_f(np.log10(p_melt))
|
|
#T_melt = np.array(TT)
|
|
#p_melt = np.array(PP)
|
|
|
|
#
|
|
# Prepare the data for the saturation line
|
|
T_sat = np.linspace(T_triple, Tc, len(T_melt))
|
|
p_sat = CP.CoolProp.PropsSI('P', 'T', T_sat, 'Q', [0] * len(T_sat), 'Water')
|
|
|
|
#
|
|
# Prepare density data
|
|
TT, DD, PP = [], [], []
|
|
for T in np.linspace(T_min, T_max, steps):
|
|
for p in np.logspace(np.log10(np.min(p_melt)), np.log10(np.max(p_melt)), steps):
|
|
Tm = scipy.interpolate.interp1d(p_melt, T_melt)(p)
|
|
if T < Tm: continue
|
|
if p > p_max: pin = p_max
|
|
else: pin = p
|
|
D = CP.CoolProp.PropsSI('D', 'T', T, 'P', pin, 'Water')
|
|
TT.append(T)
|
|
DD.append(np.log10(D))
|
|
PP.append(p)
|
|
|
|
#tt = np.linspace(T_min, T_max, steps)
|
|
#pp = np.logspace(np.log10(p_triple), np.log10(p_max), steps)
|
|
#tt, pp = np.meshgrid(tt, pp)
|
|
#dd = np.empty(tt.shape)
|
|
#dd[:][:] = np.NAN
|
|
#nr,nc = tt.shape
|
|
# for i in range(nr):
|
|
# for j in range(nc):
|
|
#Tm = T_melt_f(np.log10(pp[i][j]))
|
|
# if tt[i][j] < Tm: continue
|
|
#D = CP.CoolProp.PropsSI('D','T',tt[i][j],'P',pp[i][j],'Water')
|
|
#dd[i][j] = np.log10(D)
|
|
|
|
#
|
|
# Define colours etc
|
|
lw = 3
|
|
melt_args = dict(color='orange', lw=lw, solid_capstyle='round')
|
|
sat_args = melt_args.copy()
|
|
|
|
nm = matplotlib.colors.Normalize(min(DD), max(DD))
|
|
rho_args = dict(cmap=plt.get_cmap('Blues'), norm=nm)
|
|
|
|
fig = plt.figure(figsize=(1.0, 1.0))
|
|
ax = fig.add_axes((0.0, 0.0, 1.0, 1.0))
|
|
|
|
plt.plot(T_melt, p_melt, **melt_args)
|
|
plt.plot(T_sat, p_sat, **sat_args)
|
|
plt.scatter(TT, PP, c=DD, edgecolor='none', s=6, **rho_args)
|
|
#plt.contourf(tt, pp, dd, steps, **rho_args )
|
|
delta_x = np.min(T_melt) * 0.01
|
|
x_lim = [np.min(T_melt) - delta_x, np.max(T_melt) + delta_x]
|
|
y_lim = [np.min(p_melt) * 0.875, np.max(p_melt) * 1.125]
|
|
# y_lim = [np.power(np.log10(np.min(p_melt))*1.01,10),
|
|
# np.power(np.log10(np.max(p_melt))*1.01,10)]
|
|
|
|
ax.set_xlim(x_lim)
|
|
ax.set_ylim(y_lim)
|
|
ax.set_yscale('log')
|
|
ax.axis('off')
|
|
|
|
plt.savefig(os.path.basename(__file__) + '.pdf')
|
|
plt.savefig(tar_fil, transparent=True, dpi=100)
|
|
plt.close()
|
|
|
|
fig = plt.figure(figsize=(9, 3))
|
|
ax = fig.add_axes((0.66, 0.01, 0.333, 0.98))
|
|
plt.plot(T_melt, p_melt, **melt_args)
|
|
plt.plot(T_sat, p_sat, **sat_args)
|
|
plt.scatter(TT, PP, c=DD, edgecolor='none', s=6, **rho_args)
|
|
|
|
#ax.text(0.4,800, "CoolProp", size = 12)
|
|
ax.annotate('CoolProp', xy=(-0.1, 0.5), xycoords='axes fraction', fontsize=88, ha='right', va='center') # va='baseline')
|
|
|
|
|
|
ax.set_xlim(x_lim)
|
|
ax.set_ylim(y_lim)
|
|
ax.set_yscale('log')
|
|
ax.axis('off')
|
|
|
|
plt.savefig(tar_fil_long_large, transparent=True)
|
|
plt.close()
|
|
|
|
# # Just a hack to resize the image
|
|
# import Image
|
|
# size = 288, 288
|
|
# try:
|
|
# im = Image.open(tar_fil_long_large)
|
|
# im.thumbnail(size, Image.ANTIALIAS)
|
|
# im.save(tar_fil_long)
|
|
# #im.resize(size, Image.ANTIALIAS).save(tar_fil_long)
|
|
# except IOError:
|
|
# print "Error resizing '%s'" % tar_fil_long_large
|