Files
CoolProp/Web/scripts/fluid_properties.Incompressibles.py
2019-01-12 20:45:25 -07:00

195 lines
6.3 KiB
Python

from __future__ import print_function, division
import os.path
import CoolProp
import CoolProp.CoolProp
import subprocess
import sys
import numpy as np
import matplotlib
matplotlib.use('Agg') # Force mpl to use a non-GUI backend
import matplotlib.pyplot as plt
web_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
#plots_path = os.path.join(web_dir,'fluid_properties','incompressibles_consistency')
plots_path = os.path.join(web_dir, 'scripts', 'incompressibles_consistency')
checked = ["TVP1869", "T66"]
N = 50
p = 100e5
Pr = np.empty(N)
la = np.empty(N)
mu = np.empty(N)
cp = np.empty(N)
fig = plt.figure(tight_layout=True)
Pr_axis = fig.add_subplot(221)
la_axis = fig.add_subplot(222)
mu_axis = fig.add_subplot(223)
cp_axis = fig.add_subplot(224)
#Pr_axis = plt.subplot2grid((3,2), (0,0), rowspan=3)
#la_axis = plt.subplot2grid((3,2), (0,1))
#mu_axis = plt.subplot2grid((3,2), (1,1))
#cp_axis = plt.subplot2grid((3,2), (2,1))
Pr_axis.set_xlabel("Temperature $T$ / deg C")
Pr_axis.set_ylabel("Prandtl Number $Pr$")
# Pr_axis.set_ylim([0,10000])
# Pr_axis.set_yscale("log")
la_axis.set_xlabel("Temperature $T$ / deg C")
la_axis.set_ylabel("Thermal Conductivity $\lambda$ / W/m/K")
# la_axis.set_ylim([0,1])
mu_axis.set_xlabel("Temperature $T$ / deg C")
mu_axis.set_ylabel("Dynamic Viscosity $\mu$ / Pa s")
# mu_axis.set_ylim([0,1])
# mu_axis.set_yscale("log")
cp_axis.set_xlabel("Temperature $T$ / deg C")
cp_axis.set_ylabel("Isobaric Heat Capacity $c_p$ / J/kg/K")
# cp_axis.set_ylim([0,5000])
for fluid in CoolProp.__incompressibles_pure__ + CoolProp.__incompressibles_solution__:
# for fluid in CoolProp.__incompressibles_solution__:
# for fluid in CoolProp.__incompressibles_pure__:
skip_fluid = False
for ignored in ["example", "iceea", "icena", "icepg"]:
if ignored in fluid.lower():
skip_fluid = True
if skip_fluid:
continue
state = CoolProp.AbstractState("INCOMP", fluid)
error = ""
for frac in [0.5, 0.2, 0.8, 0.1, 0.9]:
error = ""
try:
state.set_mass_fractions([frac])
state.update(CoolProp.PT_INPUTS, p, state.Tmax())
break
except Exception as e:
error = e.message
try:
state.set_volu_fractions([frac])
state.update(CoolProp.PT_INPUTS, p, state.Tmax())
break
except Exception as e:
error = e.message
try:
state.set_mole_fractions([frac])
state.update(CoolProp.PT_INPUTS, p, state.Tmax())
break
except Exception as e:
error = e.message
pass
Tmin = 0.0
try:
Tmin = state.keyed_output(CoolProp.iT_freeze)
except:
pass
Tmin = max(state.Tmin(), Tmin) + 1
Tmax = state.Tmax()
T = np.linspace(Tmin, Tmax, N)
for i, Ti in enumerate(T):
state.update(CoolProp.PT_INPUTS, p, Ti)
Pr[i] = state.Prandtl()
la[i] = state.conductivity()
mu[i] = state.viscosity()
cp[i] = state.cpmass()
#print(np.min(Pr), np.max(Pr))
Pr_axis.plot(T - 273.15, Pr)
la_axis.plot(T - 273.15, la)
mu_axis.plot(T - 273.15, mu)
cp_axis.plot(T - 273.15, cp)
if np.max(Pr) > 10000:
if fluid not in checked:
print("Very high Prandtl number for {0:s} of {1:f}".format(fluid, np.max(Pr)))
if np.min(Pr) < 0.0:
if fluid not in checked:
print("Very low Prandtl number for {0:s} of {1:f}".format(fluid, np.min(Pr)))
if np.max(la) > 0.8:
if fluid not in checked:
print("Very high thermal conductivity for {0:s} of {1:f}".format(fluid, np.max(la)))
if np.min(la) < 0.3:
if fluid not in checked:
print("Very low thermal conductivity for {0:s} of {1:f}".format(fluid, np.min(la)))
if np.max(mu) > 0.2:
if fluid not in checked:
print("Very high viscosity for {0:s} of {1:f}".format(fluid, np.max(mu)))
if np.min(mu) < 1e-8:
if fluid not in checked:
print("Very low viscosity for {0:s} of {1:f}".format(fluid, np.min(mu)))
if np.max(cp) > 5000:
if fluid not in checked:
print("Very high heat capacity for {0:s} of {1:f}".format(fluid, np.max(cp)))
if np.min(cp) < 1000:
if fluid not in checked:
print("Very low heat capacity for {0:s} of {1:f}".format(fluid, np.min(cp)))
# for fluid in CoolProp.__fluids__:
for fluid in ["Water"]:
state = CoolProp.AbstractState("HEOS", fluid)
Tmin = max(state.Tmin(), Pr_axis.get_xlim()[0] + 273.15)
Tmax = min(state.Tmax(), Pr_axis.get_xlim()[1] + 273.15)
T = np.linspace(Tmin, Tmax, N)
for i, Ti in enumerate(T):
try:
state.update(CoolProp.QT_INPUTS, 0, Ti)
p = state.p() + 1e5
except:
p = state.p_critical() + 1e5
Pr[i] = np.nan
la[i] = np.nan
mu[i] = np.nan
cp[i] = np.nan
try:
state.update(CoolProp.PT_INPUTS, p, Ti)
try:
Pr[i] = state.Prandtl()
except Exception as e:
print(e.message)
try:
la[i] = state.conductivity()
except Exception as e:
print(e.message)
try:
mu[i] = state.viscosity()
except Exception as e:
print(e.message)
try:
cp[i] = state.cpmass()
except Exception as e:
print(e.message)
except:
pass
#print(np.min(Pr), np.max(Pr))
if np.sum(np.isnan(Pr)) == 0:
Pr_axis.plot(T - 273.15, Pr, alpha=0.5, ls=":")
else:
#print("Error: Prandtl undefined for "+fluid)
pass
if np.sum(np.isnan(la)) == 0:
la_axis.plot(T - 273.15, la, alpha=0.5, ls=":")
else:
#print("Error: Conductivuty undefined for "+fluid)
pass
if np.sum(np.isnan(mu)) == 0:
mu_axis.plot(T - 273.15, mu, alpha=0.5, ls=":")
else:
#print("Error: Viscosity undefined for "+fluid)
pass
if np.sum(np.isnan(cp)) == 0:
cp_axis.plot(T - 273.15, cp, alpha=0.5, ls=":")
else:
#print("Error: Heat capacity undefined for "+fluid)
pass
fig.tight_layout()
fig.savefig(plots_path + '.pdf')
# fig.savefig(plots_path+'.png')
sys.exit(0)