def demo_generate_ph_Diagramm(path=None, precision=1.0): '''Generate a p(h) Diagramm showing the Saturation Line''' steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) p_krit = steamTable.criticalPressure( ) - 0.0001 # minus 0.0001 or else hL_V returns NaN h_krit = steamTable.hL_p(p_krit) p = np.arange(0.0, 1000, precision) p2 = np.arange(0.5, p_krit, precision) vaporFrac = np.arange(0.1, 1.0, 0.1) h = np.arange(200.0, 4500.0, 100.0) rho = np.arange(1, 15.0, precision * 2) nph_px = np.frompyfunc(steamTable.h_px, 2, 1) nph_pt = np.frompyfunc(steamTable.h_pt, 2, 1) nphL_p = np.frompyfunc(steamTable.hL_p, 1, 1) nphV_p = np.frompyfunc(steamTable.hV_p, 1, 1) npp_hrho = np.frompyfunc(steamTable.p_hrho, 2, 1) # Siede und Taulinie hL = nphL_p(p) hV = nphV_p(p) # Dampfgehalt for vf in vaporFrac: h_px = nph_px(p2, vf) line, = pyplot.plot(h_px, p2) pyplot.setp(line, linewidth=1, color='g') # Temperatur for temp in range(0, 900, 30): h_pt = nph_pt(p, temp) line, = pyplot.plot(h_pt, p) pyplot.setp(line, linewidth=1, color='r') # Dichte for r in rho: p_hrho = npp_hrho(h, r) line, = pyplot.plot(h, p_hrho) pyplot.setp(line, linewidth=1, color='y') # Kritischer Punkt pyplot.plot([h_krit], [p_krit], marker='s', mfc='k', ms=8) line1, = pyplot.plot(hL, p) line2, = pyplot.plot(hV, p) pyplot.xlabel("h in [kJ/kg]") pyplot.ylabel("p in [bar]") pyplot.setp(line1, linewidth=2, color='b') pyplot.setp(line2, linewidth=2, color='r') pyplot.yscale('log') pyplot.grid() if path == None: pyplot.show() else: pyplot.savefig(path, bbox_inches='tight')
def demo_generate_ph_diagramm(path=None, precision=1.0): """Generate a p(h) Diagram showing the Saturation Line""" steam_table = XSteam(XSteam.UNIT_SYSTEM_MKS) p_krit = (steam_table.criticalPressure() - 0.0001 ) # minus 0.0001 or else hL_V returns NaN h_krit = steam_table.hL_p(p_krit) p = np.arange(0.0, 1000, precision) p2 = np.arange(0.5, p_krit, precision) vapor_fraction = np.arange(0.1, 1.0, 0.1) h = np.arange(200.0, 4500.0, 100.0) rho = np.arange(1, 15.0, precision * 2) nph_px = np.frompyfunc(steam_table.h_px, 2, 1) nph_pt = np.frompyfunc(steam_table.h_pt, 2, 1) nphL_p = np.frompyfunc(steam_table.hL_p, 1, 1) nphV_p = np.frompyfunc(steam_table.hV_p, 1, 1) npp_hrho = np.frompyfunc(steam_table.p_hrho, 2, 1) # boiling and dew lines hL = nphL_p(p) hV = nphV_p(p) # vapor fraction for vf in vapor_fraction: h_px = nph_px(p2, vf) pyplot.plot(h_px, p2, linewidth=1, color="g") # temperature for temp in range(0, 900, 30): h_pt = nph_pt(p, temp) pyplot.plot(h_pt, p, linewidth=1, color="r") # density for r in rho: p_hrho = npp_hrho(h, r) pyplot.plot(h, p_hrho, linewidth=1, color="y") # critical point pyplot.plot([h_krit], [p_krit], marker="s", mfc="k", ms=8) (line1, ) = pyplot.plot(hL, p, linewidth=2, color="b") (line2, ) = pyplot.plot(hV, p, linewidth=2, color="r") pyplot.xlabel("h in [kJ/kg]") pyplot.ylabel("p in [bar]") pyplot.yscale("log") pyplot.grid() if path is None: pyplot.show() else: pyplot.savefig(path, bbox_inches="tight")
def demo_ice_diagramm(): """Generate a diagram showing the sublimation and melting preasure""" steam_table = XSteam(XSteam.UNIT_SYSTEM_BARE) t_subl = np.arange(50.0, 273.16, 2.0) t_melt_Ih = np.arange(251.165, 273.16, 2.0) t_melt_III = np.arange(251.165, 256.164, 2.0) t_melt_V = np.arange(256.164, 273.31, 2.0) t_melt_VI = np.arange(273.31, 355.0, 2.0) t_melt_VII = np.arange(355.0, 751.0, 2.0) psubl_func = np.frompyfunc(steam_table.psubl_t, 1, 1) pmelt_func = np.frompyfunc(steam_table.pmelt_t, 2, 1) pyplot.plot(t_subl, psubl_func(t_subl), linewidth=1, color="b", label="t_subl") pyplot.plot( t_melt_Ih, pmelt_func(t_melt_Ih, steam_table.TYPE_ICE_Ih), linewidth=2, color="g", label="t_melt_Ih", ) pyplot.plot( t_melt_III, pmelt_func(t_melt_III, steam_table.TYPE_ICE_III), linewidth=1, color="r", label="t_melt_III", ) pyplot.plot( t_melt_V, pmelt_func(t_melt_V, steam_table.TYPE_ICE_V), linewidth=2, color="y", label="t_melt_V", ) pyplot.plot( t_melt_VI, pmelt_func(t_melt_VI, steam_table.TYPE_ICE_VI), linewidth=1, color="g", label="t_melt_VI", ) pyplot.plot( t_melt_VII, pmelt_func(t_melt_VII, steam_table.TYPE_ICE_VII), linewidth=2, color="r", label="t_melt_VII", ) pyplot.legend(loc="upper left") pyplot.xlabel("T in [K]") pyplot.ylabel("p in [MPa]") pyplot.show()
def demo_generate_pvT_diagramm(): """Generate a Diagram showing the v(p,T) as a 3D survace""" steam_table = XSteam(XSteam.UNIT_SYSTEM_MKS) fig = pyplot.figure() ax = pyplot.axes(projection="3d") p = np.arange(0.0, 300.0, 5.0) t = np.arange(120, 400.0, 5.0) p, t = np.meshgrid(p, t) npv_pt = np.frompyfunc(steam_table.v_pt, 2, 1) v = npv_pt(p, t) colour_map = pyplot.get_cmap("hot") ax.plot_surface(p, t, v, cmap=colour_map, rstride=1, cstride=1, linewidth=0, shade=True) ax.set_xlabel("p") ax.set_ylabel("t") ax.set_zlabel("v") pyplot.show()
def demo_ice_diagramm(): """Generate a diagram showing the sublimation and melting preasure""" steam_table = XSteam(XSteam.UNIT_SYSTEM_BARE) t_subl = np.arange(50.0, 273.16, 2.0) t_melt_Ih = np.arange(251.165, 273.16, 2.0) t_melt_III = np.arange(251.165, 256.164, 2.0) t_melt_V = np.arange(256.164, 273.31, 2.0) t_melt_VI = np.arange(273.31, 355.0, 2.0) t_melt_VII = np.arange(355.0, 751.0, 2.0) psubl_func = np.frompyfunc(steam_table.psubl_t, 1, 1) pmelt_func = np.frompyfunc(steam_table.pmelt_t, 2, 1) line1, = pyplot.plot(t_subl, psubl_func(t_subl)) line2, = pyplot.plot(t_melt_Ih, pmelt_func(t_melt_Ih, steam_table.TYPE_ICE_Ih)) line3, = pyplot.plot(t_melt_III, pmelt_func(t_melt_III, steam_table.TYPE_ICE_III)) line4, = pyplot.plot(t_melt_V, pmelt_func(t_melt_V, steam_table.TYPE_ICE_V)) line5, = pyplot.plot(t_melt_VI, pmelt_func(t_melt_VI, steam_table.TYPE_ICE_VI)) line6, = pyplot.plot(t_melt_VII, pmelt_func(t_melt_VII, steam_table.TYPE_ICE_VII)) pyplot.xlabel("T in [K]") pyplot.ylabel("p in [MPa]") pyplot.setp(line1, linewidth=1, color='b') pyplot.setp(line2, linewidth=1, color='g') pyplot.setp(line3, linewidth=1, color='r') pyplot.setp(line4, linewidth=1, color='y') pyplot.setp(line5, linewidth=1, color='g') pyplot.setp(line6, linewidth=1, color='r') pyplot.show()
def demo_generate_ph_Diagramm(path=None, precision=1.0): '''Generate a p(h) Diagramm showing the Saturation Line''' steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) p_krit = steamTable.criticalPressure() - 0.0001 # minus 0.0001 or else hL_V returns NaN h_krit = steamTable.hL_p(p_krit) p = np.arange(0.0, 1000, precision) p2 = np.arange(0.5, p_krit, precision) vaporFrac = np.arange(0.1, 1.0, 0.1) h = np.arange(200.0, 4500.0, 100.0) rho = np.arange(1, 15.0, precision * 2) nph_px = np.frompyfunc(steamTable.h_px, 2, 1) nph_pt = np.frompyfunc(steamTable.h_pt, 2, 1) nphL_p = np.frompyfunc(steamTable.hL_p, 1, 1) nphV_p = np.frompyfunc(steamTable.hV_p, 1, 1) npp_hrho = np.frompyfunc(steamTable.p_hrho, 2, 1) # Siede und Taulinie hL = nphL_p(p) hV = nphV_p(p) # Dampfgehalt for vf in vaporFrac: h_px = nph_px(p2, vf) line, = pyplot.plot(h_px, p2) pyplot.setp(line, linewidth=1, color='g') # Temperatur for temp in range(0, 900, 30): h_pt = nph_pt(p, temp) line, = pyplot.plot(h_pt, p) pyplot.setp(line, linewidth=1, color='r') # Dichte for r in rho: p_hrho = npp_hrho(h, r) line, = pyplot.plot(h, p_hrho) pyplot.setp(line, linewidth=1, color='y') # Kritischer Punkt pyplot.plot([h_krit], [p_krit], marker='s', mfc='k', ms=8) line1, = pyplot.plot(hL, p) line2, = pyplot.plot(hV, p) pyplot.xlabel("h in [kJ/kg]") pyplot.ylabel("p in [bar]") pyplot.setp(line1, linewidth=2, color='b') pyplot.setp(line2, linewidth=2, color='r') pyplot.yscale('log') pyplot.grid() if path is None: pyplot.show() else: pyplot.savefig(path, bbox_inches='tight')
def get_trace_result(input_data): base_data = {} pipe_data = {} for i in input_data[0]: base_data[i['name']] = i['value'] steam_pressure = float(base_data['steam_pressure']) TT = float(base_data['steam_temp']) Tamb = float(base_data['amb_temp']) wv = float(base_data['wind_velocity']) for i in input_data[1]: if i['class'] in pipe_data: pipe_data[i['class']][next(iter(i))] = i[next(iter(i))] else: pipe_data[i['class']] = {next(iter(i)): i[next(iter(i))]} for i, j in pipe_data.items(): TP = float(j['maintain_temp']) NPS = float(j['pipe_dia']) INS = float(j['insulation_thickness']) ins_type = j['insulation_type'] pipe_length = float(j['pipe_length']) trace = get_trace_calc(TP, TT, Tamb, NPS, ins_type, INS, wv)[1] heat_loss = get_trace_calc(TP, TT, Tamb, NPS, ins_type, INS, wv)[0] pipe_data[i]['trace'] = trace pipe_data[i]['heat_loss'] = round(heat_loss, 3) steamTable = XSteam(XSteam.UNIT_SYSTEM_FLS) h = steamTable.hV_p(steam_pressure + 14.696) - steamTable.hL_p(steam_pressure + 14.696) #check pipe_data[i]['steam_require'] = round((pipe_length * heat_loss / h), 3) tracer_length = get_tracer_length(steam_pressure, trace) pipe_data[i]['tracer_length'] = tracer_length return pipe_data
def demo_generate_Tp_diagramm(): """Generate a T(p) Diagram showing the Saturation Curve""" steam_table = XSteam(XSteam.UNIT_SYSTEM_MKS) p = np.arange(-100.0, 250.0, 1.0) ntsat_p = np.frompyfunc(steam_table.tsat_p, 1, 1) tsat = ntsat_p(p) (line1, ) = pyplot.plot(tsat, p) pyplot.xlabel("t") pyplot.ylabel("p") pyplot.setp(line1, linewidth=1, color="b") pyplot.show()
def demo_Moillier_Diagramm(): steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) s = np.arange(2.0, 10.0, 0.01) pSteps = [0.006117, 0.01, 0.02, 1.0, 2.0, 3.0, 10, 100, 1000] nph_ps = np.frompyfunc(steamTable.h_ps, 2, 1) for pstep in pSteps: h = nph_ps(pstep, s) hline, = pyplot.plot(s, h) pyplot.setp(hline, linewidth=1, color='b') pyplot.xlabel("s in [kJ/(kg K)]") pyplot.ylabel("h in [kJ/kg]") pyplot.show()
def demo_generate_Tp_Diagramm(path=None): '''Generate a T(p) Diagramm showing the Saturation Curve''' steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) p = np.arange(-100.0, 250.0, 1.0) ntsat_p = np.frompyfunc(steamTable.tsat_p, 1, 1) tsat = ntsat_p(p) line1, = pyplot.plot(tsat, p) pyplot.xlabel("t") pyplot.ylabel("p") pyplot.setp(line1, linewidth=1, color='b') if path is None: pyplot.show() else: pyplot.savefig(path, bbox_inches='tight')
def demo_generate_pvT_Diagramm(): steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) fig = pyplot.figure() ax = Axes3D(fig) p = np.arange(-10.0, 300.0, 5.0) t = np.arange(-50.0, 400.0, 5.0) p, t = np.meshgrid(p, t) npv_pt = np.frompyfunc(steamTable.v_pt, 2, 1) v = npv_pt(p, t) ax.plot_surface(v, p, t, rstride=1, cstride=1, linewidth=0, shade=True) ax.set_xlabel("v") ax.set_ylabel("p") ax.set_zlabel("t") pyplot.show()
def demo_generate_Tp_Diagramm(): '''Generate a T(p) Diagramm showing the Saturation Curve''' steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) p = np.arange(-100.0, 250.0, 1.0) ntsat_p = np.frompyfunc(steamTable.tsat_p, 1, 1) tsat = ntsat_p(p) # p_tripel = steamTable.triplePointPreasure() # t_tripel = steamTable.triplePointTemperatur() # print p_tripel, t_tripel # pyplot.plot([t_tripel], [ p_tripel], marker = 's', mfc = 'k', ms = 8) line1, = pyplot.plot(tsat, p) pyplot.xlabel("t") pyplot.ylabel("p") pyplot.setp(line1, linewidth=1, color='b') pyplot.show()
def __init__(self, t_in, t_out, t_high, p_high, m_high, t_mid, p_mid, m_mid, t_low, p_low, m_low, t_recold, p_recold, m_cold, t_rehot, p_rehot, m_rehot, t_heater, p_heater=3.0): self.t_in = t_in #余热锅炉进口烟温度 self.t_out = t_out #余热锅炉排烟温度 self.t_high = t_high #高压蒸汽温度 self.p_high = p_high #高压气包出口蒸汽压力 self.m_high = m_high #高压蒸汽流量 self.t_mid = t_mid #中压蒸汽温度 self.p_mid = p_mid #中压蒸汽压力 self.m_mid = m_mid #中压蒸汽流量 self.t_low = t_low #低压蒸汽温度 self.p_low = p_low #低压蒸汽压力 self.m_low = m_low #低压蒸汽流量 self.t_recold = t_recold #冷再热蒸汽温度 self.p_recold = p_recold #冷再热蒸汽压力 self.m_recold = m_cold #冷再热蒸汽流量 self.t_rehot = t_rehot #热再热蒸汽温度 self.p_rehot = p_rehot #热再热蒸汽压力 self.m_rehot = m_rehot #热再热蒸汽流量 self.t_heater = t_heater #轴封加热器出口凝结水温度 self.p_heater = p_heater #轴封加热器出口凝结水压力 self.steamTable = XSteam()
class FixedBugs_Tester(unittest.TestCase): def setUp(self): self.maxError = 1e-6 self.steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) def tearDown(self): pass def test_inf_loop_h_pt(self): # Bug: calling XSteam('h_pt',800,554) creates an infinite loop. # reported by Miika Wallius on 3 Jul 2020 # https://www.mathworks.com/matlabcentral/fileexchange/9817-x-steam-thermodynamic-properties-of-water-and-steam error = self.steamTable.h_pt(800.0, 554.0) - 2733.6986817 self.assertLess( error, self.maxError, "h_pt not passed Error %(error)e allowed: %(max)e" % { "error": error, "max": self.maxError }, ) def test_inf_loop_rho_pt(self): # Bug: pyXSteam hangs # reported by @annhak as issue #10 # https://github.com/drunsinn/pyXSteam/issues/10 error = self.steamTable.rho_pt(167.11, 351.73) - 113.6761489 self.assertLess( error, self.maxError, "rho_pt not passed Error %(error)e allowed: %(max)e" % { "error": error, "max": self.maxError }, ) def test_missing_unit_conversion_h_xx(self): # Bug: missing unit conversion in h_px for FLS units # reported by Grayson Gall on 29 Jan 2022 # https://www.mathworks.com/matlabcentral/fileexchange/9817-x-steam-thermodynamic-properties-of-water-and-steam self.steamTable._unit_converter.set_unitSystem(XSteam.UNIT_SYSTEM_FLS) error = self.steamTable.h_px(160, 0.5) - 765.8069264 self.assertLess( error, self.maxError, " not passed Error %(error)e allowed: %(max)e" % { "error": error, "max": self.maxError }, ) error = self.steamTable.h_tx(160, 0.5) - 628.905695 self.assertLess( error, self.maxError, " not passed Error %(error)e allowed: %(max)e" % { "error": error, "max": self.maxError }, )
def calc_sat_temp(steam_pressure): # steam pressure in psig steamTable = XSteam(XSteam.UNIT_SYSTEM_FLS) return round(steamTable.tsat_p(float(steam_pressure) + 14.696), 2) # psia to psig
class Boiler(): """ Three pressure reheat waste heat boiler """ steamTable = XSteam(XSteam.UNIT_SYSTEM_BARE) #单位:m/kg/sec/K/MPa/W def __init__(self, t_in, t_out, t_high, p_high, m_high, t_mid, p_mid, m_mid, t_low, p_low, m_low, t_recold, p_recold, m_cold, t_rehot, p_rehot, m_rehot, t_heater, p_heater=3.0): self.t_in = t_in #余热锅炉进口烟温度 self.t_out = t_out #余热锅炉排烟温度 self.t_high = t_high #高压蒸汽温度 self.p_high = p_high #高压气包出口蒸汽压力 self.m_high = m_high #高压蒸汽流量 self.t_mid = t_mid #中压蒸汽温度 self.p_mid = p_mid #中压蒸汽压力 self.m_mid = m_mid #中压蒸汽流量 self.t_low = t_low #低压蒸汽温度 self.p_low = p_low #低压蒸汽压力 self.m_low = m_low #低压蒸汽流量 self.t_recold = t_recold #冷再热蒸汽温度 self.p_recold = p_recold #冷再热蒸汽压力 self.m_recold = m_cold #冷再热蒸汽流量 self.t_rehot = t_rehot #热再热蒸汽温度 self.p_rehot = p_rehot #热再热蒸汽压力 self.m_rehot = m_rehot #热再热蒸汽流量 self.t_heater = t_heater #轴封加热器出口凝结水温度 self.p_heater = p_heater #轴封加热器出口凝结水压力 self.steamTable = XSteam() #锅炉吸热量 def heat_absorption(self): h_high = Boiler.steamTable.h_pt(self.p_high, self.t_high) #高压汽包出口主蒸汽焓值 h_mid = Boiler.steamTable.h_pt(self.p_mid, self.t_mid) #中压汽包出口主蒸汽焓值 h_low = Boiler.steamTable.h_pt(self.p_low, self.t_low) #低压汽包出口主蒸汽焓值 h_recold = Boiler.steamTable.h_pt(self.p_recold, self.t_record) #冷再热蒸汽焓值 h_rehot = Boiler.steamTable.h_pt(self.p_rehot, self.t_rehot) #热再热蒸汽焓值 h_heater = Boiler.steamTable.h_pt(self.p_heater, self.t_heater) #轴封加热器出口凝结水焓值 Q = (self.m_high * (h_high - h_heater) + self.m_recold * (h_rehot - h_recold) + self.m_mid * (h_rehot - h_heater) + self.m_lowL * (h_low - h_heater)) return Q #锅炉效率 def b_efficiency(self, t_0): efficiency = (self.t_in - self.t_out) / (self.t_in - t_0) #t:环境温度 return efficiency
""" script to perform uncertainties analysis using RAVENH and RELAP5-3D """ import os import glob import numpy as np import pandas as pd import matplotlib.pylab as plt from pyXSteam.XSteam import XSteam from math import pi, sqrt from scipy.signal import savgol_filter xsteam = XSteam(XSteam.UNIT_SYSTEM_MKS) class UncertAnalysis: """ class to load the output .csv file from any run and perform the uncertainties analysis of data """ def __init__(self, mainDir): self.filenames = sorted( glob.glob(".\\UncertaintyAnalysisMC\\*\\*.csv")) self.varlist = sorted(pd.read_csv(self.filenames[0]).keys()) self.varlist.remove('time') print(self.varlist) print('\n') print("%i files have been read." % len(self.filenames))
def setUp(self): self.maxError = 1E-6 self.steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS)
class FLS_FunctionTester(unittest.TestCase): def setUp(self): self.maxError = 1E-6 self.steamTable = XSteam(XSteam.UNIT_SYSTEM_FLS) def tearDown(self): pass def test_tsat_p(self): error = self.steamTable.tsat_p(1.0) - 99.60591861 self.assertLess( error, self.maxError, 'tsat_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_t_ph(self): error = self.steamTable.t_ph(1.0, 100.0) - 23.84481908 self.assertLess( error, self.maxError, 't_ph not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_t_ps(self): error = self.steamTable.t_ps(1.0, 1.0) - 73.70859421 self.assertLess( error, self.maxError, 't_ps not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_t_hs(self): error = self.steamTable.t_hs(100.0, 0.2) - 13.84933511 self.assertLess( error, self.maxError, 't_hs not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_psat_t(self): error = self.steamTable.psat_t(100.0) - 1.014179779 self.assertLess( error, self.maxError, 'psat_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_p_hs(self): error = self.steamTable.p_hs(84.0, 0.296) - 2.295498269 self.assertLess( error, self.maxError, 'p_hs not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_hV_p(self): error = self.steamTable.hV_p(1.0) - 2674.949641 self.assertLess( error, self.maxError, 'hV_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_hL_p(self): error = self.steamTable.hL_p(1.0) - 417.4364858 self.assertLess( error, self.maxError, 'hL_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_hV_t(self): error = self.steamTable.hV_t(100.0) - 2675.572029 self.assertLess( error, self.maxError, 'hV_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_hL_t(self): error = self.steamTable.hL_t(100.0) - 419.099155 self.assertLess( error, self.maxError, 'hL_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_h_pt(self): error = self.steamTable.h_pt(1.0, 20.0) - 84.01181117 self.assertLess( error, self.maxError, 'h_pt not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_h_ps(self): error = self.steamTable.h_ps(1.0, 1.0) - 308.6107171 self.assertLess( error, self.maxError, 'h_ps not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_h_px(self): error = self.steamTable.h_px(1.0, 0.5) - 1546.193063 self.assertLess( error, self.maxError, 'h_px not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_h_prho(self): error = self.steamTable.h_prho(1.0, 2.0) - 1082.773391 self.assertLess( error, self.maxError, 'h_prho not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_h_tx(self): error = self.steamTable.h_tx(100.0, 0.5) - 1547.33559211 self.assertLess( error, self.maxError, 'h_tx not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_vV_p(self): error = self.steamTable.vV_p(1.0) - 1.694022523 self.assertLess( error, self.maxError, 'vV_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_vL_p(self): error = self.steamTable.vL_p(1.0) - 0.001043148 self.assertLess( error, self.maxError, 'vL_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_vV_t(self): error = self.steamTable.vV_t(100.0) - 1.671860601 self.assertLess( error, self.maxError, 'vV_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_vL_t(self): error = self.steamTable.vL_t(100.0) - 0.001043455 self.assertLess( error, self.maxError, 'vL_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_v_pt(self): error = self.steamTable.v_pt(1.0, 100.0) - 1.695959407 self.assertLess( error, self.maxError, 'v_pt not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_v_ph(self): error = self.steamTable.v_ph(1.0, 1000.0) - 0.437925658 self.assertLess( error, self.maxError, 'v_ph not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_v_ps(self): error = self.steamTable.v_ps(1.0, 5.0) - 1.03463539 self.assertLess( error, self.maxError, 'v_ps not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_rhoV_p(self): error = self.steamTable.rhoV_p(1.0) - 0.590310924 self.assertLess( error, self.maxError, 'rhoV_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_rhoL_p(self): error = self.steamTable.rhoL_p(1.0) - 958.6368897 self.assertLess( error, self.maxError, 'rhoL_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_rhoV_t(self): error = self.steamTable.rhoV_t(100.0) - 0.598135993 self.assertLess( error, self.maxError, 'rhoV_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_rhoL_t(self): error = self.steamTable.rhoL_t(100.0) - 958.3542773 self.assertLess( error, self.maxError, 'rhoL_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_rho_pt(self): error = self.steamTable.rho_pt(1.0, 100.0) - 0.589636754 self.assertLess( error, self.maxError, 'rho_pt not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_rho_ph(self): error = self.steamTable.rho_ph(1.0, 1000.0) - 2.283492601 self.assertLess( error, self.maxError, 'rho_ph not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_rho_ps(self): error = self.steamTable.rho_ps(1.0, 1.0) - 975.6236788 self.assertLess( error, self.maxError, 'rho_ps not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_sV_p(self): error = self.steamTable.sV_p(0.006117) - 9.155465556 self.assertLess( error, self.maxError, 'sV_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_sL_p(self): error = self.steamTable.sL_p(0.0061171) - 1.8359e-05 self.assertLess( error, self.maxError, 'sL_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_sV_t(self): error = self.steamTable.sV_t(0.0001) - 9.155756716 self.assertLess( error, self.maxError, 'sV_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_sL_t(self): error = self.steamTable.sL_t(100.0) - 1.307014328 self.assertLess( error, self.maxError, 'sL_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_s_pt(self): error = self.steamTable.s_pt(1.0, 20.0) - 0.296482921 self.assertLess( error, self.maxError, 's_pt not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_s_ph(self): error = self.steamTable.s_ph(1.0, 84.01181117) - 0.296813845 self.assertLess( error, self.maxError, 's_ph not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_uV_p(self): error = self.steamTable.uV_p(1.0) - 2505.547389 self.assertLess( error, self.maxError, 'uV_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_uL_p(self): error = self.steamTable.uL_p(1.0) - 417.332171 self.assertLess( error, self.maxError, 'uL_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_uV_t(self): error = self.steamTable.uV_t(100.0) - 2506.015308 self.assertLess( error, self.maxError, 'uV_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_uL_t(self): error = self.steamTable.uL_t(100.0) - 418.9933299 self.assertLess( error, self.maxError, 'uL_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_u_pt(self): error = self.steamTable.u_pt(1.0, 100.0) - 2506.171426 self.assertLess( error, self.maxError, 'u_pt not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_u_ph(self): error = self.steamTable.u_ph(1.0, 1000.0) - 956.2074342 self.assertLess( error, self.maxError, 'u_ph not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_u_ps(self): error = self.steamTable.u_ps(1.0, 1.0) - 308.5082185 self.assertLess( error, self.maxError, 'u_ps not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_CpV_p(self): error = self.steamTable.cpV_p(1.0) - 2.075938025 self.assertLess( error, self.maxError, 'cpV_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_CpL_p(self): error = self.steamTable.cpL_p(1.0) - 4.216149431 self.assertLess( error, self.maxError, 'cpL_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_CpV_t(self): error = self.steamTable.cpV_t(100.0) - 2.077491868 self.assertLess( error, self.maxError, 'cpV_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_CpL_t(self): error = self.steamTable.cpL_t(100.0) - 4.216645119 self.assertLess( error, self.maxError, 'cpL_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_Cp_pt(self): error = self.steamTable.cp_pt(1.0, 100.0) - 2.074108555 self.assertLess( error, self.maxError, 'cp_pt not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_Cp_ph(self): error = self.steamTable.Cp_ph(1.0, 200.0) - 4.17913573169 self.assertLess( error, self.maxError, 'Cp_ph not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_Cp_ps(self): error = self.steamTable.Cp_ps(1.0, 1.0) - 4.190607038 self.assertLess( error, self.maxError, 'Cp_ps not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_CvV_p(self): error = self.steamTable.CvV_p(1.0) - 1.552696979 self.assertLess( error, self.maxError, 'CvV_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_CvL_p(self): error = self.steamTable.CvL_p(1.0) - 3.769699683 self.assertLess( error, self.maxError, 'CvL_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_CvV_t(self): error = self.steamTable.CvV_t(100.0) - 1.553698696 self.assertLess( error, self.maxError, 'CvV_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_CvL_t(self): error = self.steamTable.CvL_t(100.0) - 3.76770022 self.assertLess( error, self.maxError, 'CvL_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_Cv_pt(self): error = self.steamTable.Cv_pt(1.0, 100.0) - 1.551397249 self.assertLess( error, self.maxError, 'Cv_pt not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_Cv_ph(self): error = self.steamTable.Cv_ph(1.0, 200.0) - 4.035176364 self.assertLess( error, self.maxError, 'Cv_ph not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_Cv_ps(self): error = self.steamTable.Cv_ps(1.0, 1.0) - 3.902919468 self.assertLess( error, self.maxError, 'Cv_ps not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_wV_p(self): error = self.steamTable.wV_p(1.0) - 472.0541571 self.assertLess( error, self.maxError, 'wV_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_wL_p(self): error = self.steamTable.wL_p(1.0) - 1545.451948 self.assertLess( error, self.maxError, 'wL_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_wV_t(self): error = self.steamTable.wV_t(100.0) - 472.2559492 self.assertLess( error, self.maxError, 'wV_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_wL_t(self): error = self.steamTable.wL_t(100.0) - 1545.092249 self.assertLess( error, self.maxError, 'wL_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_w_pt(self): error = self.steamTable.w_pt(1.0, 100.0) - 472.3375235 self.assertLess( error, self.maxError, 'w_pt not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_w_ph(self): error = self.steamTable.w_ph(1.0, 200.0) - 1542.682475 self.assertLess( error, self.maxError, 'w_ph not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_w_ps(self): error = self.steamTable.w_ps(1.0, 1.0) - 1557.8585 self.assertLess( error, self.maxError, 'w_ps not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_my_pt(self): error = self.steamTable.my_pt(1.0, 100.0) - 1.22704e-05 self.assertLess( error, self.maxError, 'my_pt not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_my_ph(self): error = self.steamTable.my_ph(1.0, 100.0) - 0.000914003770302 self.assertLess( error, self.maxError, 'my_ph not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_my_ps(self): error = self.steamTable.my_ps(1.0, 1.0) - 0.000384222 self.assertLess( error, self.maxError, 'my_ps not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_tcL_p(self): error = self.steamTable.tcL_p(1.0) - 0.677593822 self.assertLess( error, self.maxError, 'tcL_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_tcV_p(self): error = self.steamTable.tcV_p(1.0) - 0.024753668 self.assertLess( error, self.maxError, 'tcV_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_tcL_t(self): error = self.steamTable.tcL_t(25.0) - 0.607458162 self.assertLess( error, self.maxError, 'tcL_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_tcV_t(self): error = self.steamTable.tcV_t(25.0) - 0.018326723 self.assertLess( error, self.maxError, 'tcV_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_tc_pt(self): error = self.steamTable.tc_pt(1.0, 25.0) - 0.607509806 self.assertLess( error, self.maxError, 'tc_pt not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_tc_ph(self): error = self.steamTable.tc_ph(1.0, 100.0) - 0.605710062 self.assertLess( error, self.maxError, 'tc_ph not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_tc_hs(self): error = self.steamTable.tc_hs(100.0, 0.34) - 0.606283124 self.assertLess( error, self.maxError, 'tc_hs not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_st_t(self): error = self.steamTable.st_t(100.0) - 0.0589118685877 self.assertLess( error, self.maxError, 'st_t not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_st_p(self): error = self.steamTable.st_p(1.0) - 0.058987784 self.assertLess( error, self.maxError, 'st_p not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_x_ph(self): error = self.steamTable.x_ph(1.0, 1000.0) - 0.258055424 self.assertLess( error, self.maxError, 'x_ph not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_x_ps(self): error = self.steamTable.x_ps(1.0, 4.0) - 0.445397961 self.assertLess( error, self.maxError, 'x_ps not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_vx_ph(self): error = self.steamTable.vx_ph(1.0, 418.0) - 0.288493093 self.assertLess( error, self.maxError, 'vx_ph not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError }) def test_vx_ps(self): error = self.steamTable.vx_ps(1.0, 4.0) - 0.999233827 self.assertLess( error, self.maxError, 'vx_ps not passed Error %(error)e allowed: %(max)e' % { 'error': error, 'max': self.maxError })
""" ##################################################################### ######################## Bibliotheques ############################## ##################################################################### import numpy as np import matplotlib.pyplot as plt from pyXSteam.XSteam import XSteam import tensorflow as tf import pickle import DNNFunctions as DNN import correlations import experiences steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) ##################################################################### #################### Constantes du Problème ######################### ##################################################################### exp = '19' # '19' or '65BV' choix_corr = 'Inoue' #'Chexal' or 'Inoue' # Exp 19 if exp == '19': mpoint = 0.47 #kg/s D = 22.9e-3 #m P_th = 151.8 #kW --> hL et hV sont en kJ/kg; L_c = 1.8 #m T_e = 215.3 #°C
# -*- coding: utf-8 -*- # FILE='cc_calc/ideal/init_data.py' from constants import * # third party from pyXSteam.XSteam import XSteam steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) INIT_DATA = { "PIk": 13, # ступінь підвищення тиску в компресорі "T1": 15 + KELVIN_CONST, # температурі на вході в компресорі, К, "T4": 420 + KELVIN_CONST, # температура на виході з турбіни, К, "p1": 0.1, # тиск на вході в компресор, МПа, "p6": 15, # тиск на вході в парову турбіну, МПа, "T6": 300 + KELVIN_CONST, # температура на вході в парову турбіну, К, "T5": 150 + KELVIN_CONST, # температура газу на виході з КУ, К "Tcr": 17, # різниця температур в конденсаторі }
class Steamturbine(): """ steam turbine and condenser system """ steamTable = XSteam(XSteam.UNIT_SYSTEM_BARE) #单位:m/kg/sec/K/MPa/W def __init__(self, power, heat, p_highi, t_highi, m_high, p_higho, t_higho, p_midi, t_midi, m_mid, p_mido, t_mido, p_lowi, t_lowi, t_lowo, vacuum, t_wateri): self.power = power #蒸汽轮机发电量 self.heat = heat #蒸汽轮机热负荷 self.p_highi = p_highi #高压缸入口蒸汽压力 self.t_highi = t_highi #高压缸入口蒸汽温度 self.m_high = m_high #高压缸入口蒸汽流量 self.p_higho = p_higho #高压缸排气压力 self.t_higho = t_higho #高压缸排气温度 self.p_midi = p_midi #中压缸入口蒸汽压力 self.t_midi = t_midi #中压缸入口蒸汽温度 self.m_mid = m_mid #中压缸入口蒸汽流量 self.p_mido = p_mido #中压缸排气压力 self.t_mido = t_mido #中压缸排气温度 self.p_lowi = p_lowi #低压缸入口蒸汽压力 self.t_lowi = t_lowi #低压缸入口蒸汽温度 self.t_lowo = t_lowo #低压缸排气温度 self.vacuum = vacuum #凝汽器真空(低压缸排气压力) self.t_wateri = t_wateri #循环水入口温度 #高压缸效率 def cylinder_efficiency_h(self): h_i = Steamturbine.steamTable.h_pt(self.p_highi, self.t_highi) #高压缸进气汽焓 h_o = Steamturbine.steamTable.h_pt(self.p_higho, self.t_higho) #高压缸排汽焓 s_i = Steamturbine.steamTable.s_pt(self.p_highi, self.t_highi) #高压缸进汽熵 t_s = Steamturbine.steamTable.t_ps(self.p_higho, s_i) #高压缸等熵排汽温度 h_os = Steamturbine.steamTable.h_pt(self.p_higho, t_s) #高压缸等熵排汽焓 efficiency = (h_i - h_o) / (h_i - h_os) return efficiency #中压缸效率 def cylinder_efficiency_m(self): h_i = Steamturbine.steamTable.h_pt(self.p_midi, self.t_midi) #中压缸进气汽焓 h_o = Steamturbine.steamTable.h_pt(self.p_mido, self.t_mido) #中压缸排汽焓 s_i = Steamturbine.steamTable.s_pt(self.p_midi, self.t_midi) #中压缸进汽熵 t_s = Steamturbine.steamTable.t_ps(self.p_mido, s_i) #中压缸等熵排汽温度 h_os = Steamturbine.steamTable.h_pt(self.p_mido, t_s) #中压缸等熵排汽焓 efficiency = (h_i - h_o) / (h_i - h_os) return efficiency #低压缸效率 def cylinder_efficiency_l(self): h_i = Steamturbine.steamTable.h_pt(self.p_lowi, self.t_lowi) #低压缸进气汽焓 h_o = Steamturbine.steamTable.h_pt(self.vacuum, self.t_lowo) #低压缸排汽焓 s_i = Steamturbine.steamTable.s_pt(self.p_lowi, self.t_lowi) #低压缸进汽熵 t_s = Steamturbine.steamTable.t_ps(self.vacuum, s_i) #低压缸等熵排汽温度 h_os = Steamturbine.steamTable.h_pt(self.vacuum, t_s) #低压缸等熵排汽焓 efficiency = (h_i - h_o) / (h_i - h_os) return efficiency #蒸汽轮机热效率 def s_efficiency(self, Q): efficiency = (self.power * 3600 + self.heat * 10**3) / Q return efficiency #蒸汽轮机热耗率(KJ/KWh) def s_heat_rat(self, Q): rate = Q / self.power return rate
def demo_simpel_Values(): steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) # get saturated liquid enthalpy for a preasure of 220 bar print('hV_p(220.0) =', steamTable.hL_p(220.0)) # get saturated vapour enthalpy for a preasure of 220 bar print('hV_p(220.0) =', steamTable.hV_p(220.0)) print('tcL_p(1.0) =', steamTable.tcL_p(1.0)) print('tcL_t(25.0) =', steamTable.tcL_t(25.0)) print('tcV_p(1.0) =', steamTable.tcV_p(1.0)) print('tcL_t(25.0) =', steamTable.tcV_t(25.0)) print('tc_hs(100.0, 0.34) =', steamTable.tc_hs(100.0, 0.34)) print('tc_ph(1.0, 100.0) =', steamTable.tc_ph(1.0, 100.0)) print('tc_pt(1.0, 25.0) =', steamTable.tc_pt(1.0, 25.0)) print('w_ps(1.0, 1.0) =', steamTable.w_ps(1.0, 1.0))
# adding the second turbine does not have the anticipated # benefits, might be an error in this code import math as math import numpy as np from pyXSteam.XSteam import XSteam from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import logging import scipy.integrate as inte from tabulate import tabulate as tabu # steamTable = XSteam(XSteam.UNIT_SYSTEM_BARE) steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) # print(steamTable.hV_p(1.01325)) atm = 1.01325 # bar # atm = 3 # nT = 0.9 # turbine efficiency nT = 1 # nP = 0.9 # pump efficiency nP = 1 rho = 997 # kg/m3 # rho = 1000 T = 20 # celsius # max_press = 60 # 60 bar is close to the operating press of real nuke systems max_press = 100 # maybe we can cheat a bit cause mdot is gonna be lower h6 = steamTable.hV_p(max_press)
from fluid_properties import * import matplotlib.pyplot as plt import numpy as np import math import pyromat as pm from pyXSteam.XSteam import XSteam from CoolProp.HumidAirProp import HAPropsSI ## Configure Pyromat pm.config['unit_pressure'] = 'Pa' pm.config['unit_temperature'] = 'C' # Live example working_fluid = pm.get('ig.air') cp = working_fluid.cp(25, 101325) steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) # m/kg/sec/°C/bar/W ''' cp=steamTable.Cp_pt(25,1) '''
def setUp(self): self.maxError = 1E-6 self.steamTable = XSteam(XSteam.UNIT_SYSTEM_FLS)
class MKS_FunctionTester(unittest.TestCase): def setUp(self): self.maxError = 1E-6 self.steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) def tearDown(self): pass def test_tsat_p(self): error = self.steamTable.tsat_p(1.0) - 99.60591861 self.assertLess(error, self.maxError, 'tsat_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_t_ph(self): error = self.steamTable.t_ph(1.0, 100.0) - 23.84481908 self.assertLess(error, self.maxError, 't_ph not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_t_ps(self): error = self.steamTable.t_ps(1.0, 1.0) - 73.70859421 self.assertLess(error, self.maxError, 't_ps not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_t_hs(self): error = self.steamTable.t_hs(100.0, 0.2) - 13.84933511 self.assertLess(error, self.maxError, 't_hs not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_psat_t(self): error = self.steamTable.psat_t(100.0) - 1.014179779 self.assertLess(error, self.maxError, 'psat_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_p_hs(self): error = self.steamTable.p_hs(84.0, 0.296) - 2.295498269 self.assertLess(error, self.maxError, 'p_hs not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_hV_p(self): error = self.steamTable.hV_p(1.0) - 2674.949641 self.assertLess(error, self.maxError, 'hV_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_hL_p(self): error = self.steamTable.hL_p(1.0) - 417.4364858 self.assertLess(error, self.maxError, 'hL_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_hV_t(self): error = self.steamTable.hV_t(100.0) - 2675.572029 self.assertLess(error, self.maxError, 'hV_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_hL_t(self): error = self.steamTable.hL_t(100.0) - 419.099155 self.assertLess(error, self.maxError, 'hL_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_h_pt(self): error = self.steamTable.h_pt(1.0, 20.0) - 84.01181117 self.assertLess(error, self.maxError, 'h_pt not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_h_ps(self): error = self.steamTable.h_ps(1.0, 1.0) - 308.6107171 self.assertLess(error, self.maxError, 'h_ps not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_h_px(self): error = self.steamTable.h_px(1.0, 0.5) - 1546.193063 self.assertLess(error, self.maxError, 'h_px not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_h_prho(self): error = self.steamTable.h_prho(1.0, 2.0) - 1082.773391 self.assertLess(error, self.maxError, 'h_prho not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_h_tx(self): error = self.steamTable.h_tx(100.0, 0.5) - 1547.33559211 self.assertLess(error, self.maxError, 'h_tx not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_vV_p(self): error = self.steamTable.vV_p(1.0) - 1.694022523 self.assertLess(error, self.maxError, 'vV_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_vL_p(self): error = self.steamTable.vL_p(1.0) - 0.001043148 self.assertLess(error, self.maxError, 'vL_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_vV_t(self): error = self.steamTable.vV_t(100.0) - 1.671860601 self.assertLess(error, self.maxError, 'vV_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_vL_t(self): error = self.steamTable.vL_t(100.0) - 0.001043455 self.assertLess(error, self.maxError, 'vL_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_v_pt(self): error = self.steamTable.v_pt(1.0, 100.0) - 1.695959407 self.assertLess(error, self.maxError, 'v_pt not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_v_ph(self): error = self.steamTable.v_ph(1.0, 1000.0) - 0.437925658 self.assertLess(error, self.maxError, 'v_ph not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_v_ps(self): error = self.steamTable.v_ps(1.0, 5.0) - 1.03463539 self.assertLess(error, self.maxError, 'v_ps not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_rhoV_p(self): error = self.steamTable.rhoV_p(1.0) - 0.590310924 self.assertLess(error, self.maxError, 'rhoV_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_rhoL_p(self): error = self.steamTable.rhoL_p(1.0) - 958.6368897 self.assertLess(error, self.maxError, 'rhoL_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_rhoV_t(self): error = self.steamTable.rhoV_t(100.0) - 0.598135993 self.assertLess(error, self.maxError, 'rhoV_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_rhoL_t(self): error = self.steamTable.rhoL_t(100.0) - 958.3542773 self.assertLess(error, self.maxError, 'rhoL_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_rho_pt(self): error = self.steamTable.rho_pt(1.0, 100.0) - 0.589636754 self.assertLess(error, self.maxError, 'rho_pt not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_rho_ph(self): error = self.steamTable.rho_ph(1.0, 1000.0) - 2.283492601 self.assertLess(error, self.maxError, 'rho_ph not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_rho_ps(self): error = self.steamTable.rho_ps(1.0, 1.0) - 975.6236788 self.assertLess(error, self.maxError, 'rho_ps not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_sV_p(self): error = self.steamTable.sV_p(0.006117) - 9.155465556 self.assertLess(error, self.maxError, 'sV_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_sL_p(self): error = self.steamTable.sL_p(0.0061171) - 1.8359e-05 self.assertLess(error, self.maxError, 'sL_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_sV_t(self): error = self.steamTable.sV_t(0.0001) - 9.155756716 self.assertLess(error, self.maxError, 'sV_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_sL_t(self): error = self.steamTable.sL_t(100.0) - 1.307014328 self.assertLess(error, self.maxError, 'sL_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_s_pt(self): error = self.steamTable.s_pt(1.0, 20.0) - 0.296482921 self.assertLess(error, self.maxError, 's_pt not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_s_ph(self): error = self.steamTable.s_ph(1.0, 84.01181117) - 0.296813845 self.assertLess(error, self.maxError, 's_ph not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_uV_p(self): error = self.steamTable.uV_p(1.0) - 2505.547389 self.assertLess(error, self.maxError, 'uV_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_uL_p(self): error = self.steamTable.uL_p(1.0) - 417.332171 self.assertLess(error, self.maxError, 'uL_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_uV_t(self): error = self.steamTable.uV_t(100.0) - 2506.015308 self.assertLess(error, self.maxError, 'uV_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_uL_t(self): error = self.steamTable.uL_t(100.0) - 418.9933299 self.assertLess(error, self.maxError, 'uL_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_u_pt(self): error = self.steamTable.u_pt(1.0, 100.0) - 2506.171426 self.assertLess(error, self.maxError, 'u_pt not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_u_ph(self): error = self.steamTable.u_ph(1.0, 1000.0) - 956.2074342 self.assertLess(error, self.maxError, 'u_ph not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_u_ps(self): error = self.steamTable.u_ps(1.0, 1.0) - 308.5082185 self.assertLess(error, self.maxError, 'u_ps not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_CpV_p(self): error = self.steamTable.CpV_p(1.0) - 2.075938025 self.assertLess(error, self.maxError, 'cpV_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_CpL_p(self): error = self.steamTable.CpL_p(1.0) - 4.216149431 self.assertLess(error, self.maxError, 'cpL_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_CpV_t(self): error = self.steamTable.CpV_t(100.0) - 2.077491868 self.assertLess(error, self.maxError, 'cpV_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_CpL_t(self): error = self.steamTable.CpL_t(100.0) - 4.216645119 self.assertLess(error, self.maxError, 'cpL_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_Cp_pt(self): error = self.steamTable.Cp_pt(1.0, 100.0) - 2.074108555 self.assertLess(error, self.maxError, 'cp_pt not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_Cp_ph(self): error = self.steamTable.Cp_ph(1.0, 200.0) - 4.17913573169 self.assertLess(error, self.maxError, 'Cp_ph not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_Cp_ps(self): error = self.steamTable.Cp_ps(1.0, 1.0) - 4.190607038 self.assertLess(error, self.maxError, 'Cp_ps not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_CvV_p(self): error = self.steamTable.CvV_p(1.0) - 1.552696979 self.assertLess(error, self.maxError, 'CvV_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_CvL_p(self): error = self.steamTable.CvL_p(1.0) - 3.769699683 self.assertLess(error, self.maxError, 'CvL_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_CvV_t(self): error = self.steamTable.CvV_t(100.0) - 1.553698696 self.assertLess(error, self.maxError, 'CvV_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_CvL_t(self): error = self.steamTable.CvL_t(100.0) - 3.76770022 self.assertLess(error, self.maxError, 'CvL_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_Cv_pt(self): error = self.steamTable.Cv_pt(1.0, 100.0) - 1.551397249 self.assertLess(error, self.maxError, 'Cv_pt not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_Cv_ph(self): error = self.steamTable.Cv_ph(1.0, 200.0) - 4.035176364 self.assertLess(error, self.maxError, 'Cv_ph not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_Cv_ps(self): error = self.steamTable.Cv_ps(1.0, 1.0) - 3.902919468 self.assertLess(error, self.maxError, 'Cv_ps not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_wV_p(self): error = self.steamTable.wV_p(1.0) - 472.0541571 self.assertLess(error, self.maxError, 'wV_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_wL_p(self): error = self.steamTable.wL_p(1.0) - 1545.451948 self.assertLess(error, self.maxError, 'wL_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_wV_t(self): error = self.steamTable.wV_t(100.0) - 472.2559492 self.assertLess(error, self.maxError, 'wV_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_wL_t(self): error = self.steamTable.wL_t(100.0) - 1545.092249 self.assertLess(error, self.maxError, 'wL_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_w_pt(self): error = self.steamTable.w_pt(1.0, 100.0) - 472.3375235 self.assertLess(error, self.maxError, 'w_pt not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_w_ph(self): error = self.steamTable.w_ph(1.0, 200.0) - 1542.682475 self.assertLess(error, self.maxError, 'w_ph not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_w_ps(self): # TODO: Check values and calculation error = self.steamTable.w_ps(1.0, 1.0) - 1557.8585 self.assertLess(error, self.maxError, 'w_ps not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_my_pt(self): error = self.steamTable.my_pt(1.0, 100.0) - 1.22704e-05 self.assertLess(error, self.maxError, 'my_pt not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_my_ph(self): error = self.steamTable.my_ph(1.0, 100.0) - 0.000914003770302 self.assertLess(error, self.maxError, 'my_ph not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_my_ps(self): error = self.steamTable.my_ps(1.0, 1.0) - 0.000384222 self.assertLess(error, self.maxError, 'my_ps not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_tcL_p(self): error = self.steamTable.tcL_p(1.0) - 0.677593822 self.assertLess(error, self.maxError, 'tcL_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_tcV_p(self): error = self.steamTable.tcV_p(1.0) - 0.024753668 self.assertLess(error, self.maxError, 'tcV_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_tcL_t(self): error = self.steamTable.tcL_t(25.0) - 0.607458162 self.assertLess(error, self.maxError, 'tcL_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_tcV_t(self): error = self.steamTable.tcV_t(25.0) - 0.018326723 self.assertLess(error, self.maxError, 'tcV_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_tc_pt(self): error = self.steamTable.tc_pt(1.0, 25.0) - 0.607509806 self.assertLess(error, self.maxError, 'tc_pt not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_tc_ph(self): error = self.steamTable.tc_ph(1.0, 100.0) - 0.605710062 self.assertLess(error, self.maxError, 'tc_ph not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_tc_hs(self): error = self.steamTable.tc_hs(100.0, 0.34) - 0.606283124 self.assertLess(error, self.maxError, 'tc_hs not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_st_t(self): error = self.steamTable.st_t(100.0) - 0.0589118685877 self.assertLess(error, self.maxError, 'st_t not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_st_p(self): error = self.steamTable.st_p(1.0) - 0.058987784 self.assertLess(error, self.maxError, 'st_p not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_x_ph(self): error = self.steamTable.x_ph(1.0, 1000.0) - 0.258055424 self.assertLess(error, self.maxError, 'x_ph not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_x_ps(self): error = self.steamTable.x_ps(1.0, 4.0) - 0.445397961 self.assertLess(error, self.maxError, 'x_ps not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_vx_ph(self): error = self.steamTable.vx_ph(1.0, 418.0) - 0.288493093 self.assertLess(error, self.maxError, 'vx_ph not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError}) def test_vx_ps(self): error = self.steamTable.vx_ps(1.0, 4.0) - 0.999233827 self.assertLess(error, self.maxError, 'vx_ps not passed Error %(error)e allowed: %(max)e' % {'error': error, 'max': self.maxError})
# -*- coding: utf-8 -*- """ @date: 14 December 2020 (update) This source code is provided by Richard J Smith 'as is' and 'with all faults'. The provider makes no representations or warranties of any kind concerning the safety, suitability, inaccuracies, typographical errors, or other harmful components of this software. """ from pyXSteam.XSteam import XSteam steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) from fluprodia import FluidPropertyDiagram print('Rankine superheat cycle analysis (non ideal)') p1 = 0.06 s1 = steamTable.sL_p(p1) T1 = steamTable.t_ps(p1, s1) h1 = steamTable.hL_p(p1) print('\nPoint 1') print(f"p1: {round(float(p1),1)} bar") print(f"T1: {round(float(T1),1)} degC") print(f"H1: {round(float(h1),1)} kJ/kg") print(f"S1: {round(float(s1),3)} kJ/kg K") p2 = 150 s2 = s1 v = 1 / steamTable.rhoL_p(p1)
# -*- coding: utf-8 -*- """ Created on Fri Mar 20 12:11:00 2020 Pour installer XSteam, dans la console anaconda : pip install pyXSteam """ import numpy as np import matplotlib.pyplot as plt from pyXSteam.XSteam import XSteam steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) p = np.linspace(1, 50, 300) Tsat = np.asarray([steamTable.tsat_p(k) for k in p]) plt.figure() plt.plot(p, Tsat)
def demo_simpel_values(): """calculate values and print the results""" steam_table = XSteam(XSteam.UNIT_SYSTEM_MKS) # get saturated liquid enthalpy for a preasure of 220 bar print("hV_p(220.0) =", steam_table.hL_p(220.0)) # get saturated vapour enthalpy for a preasure of 220 bar print("hV_p(220.0) =", steam_table.hV_p(220.0)) print("tcL_p(1.0) =", steam_table.tcL_p(1.0)) print("tcL_t(25.0) =", steam_table.tcL_t(25.0)) print("tcV_p(1.0) =", steam_table.tcV_p(1.0)) print("tcL_t(25.0) =", steam_table.tcV_t(25.0)) print("tc_hs(100.0, 0.34) =", steam_table.tc_hs(100.0, 0.34)) print("tc_ph(1.0, 100.0) =", steam_table.tc_ph(1.0, 100.0)) print("tc_pt(1.0, 25.0) =", steam_table.tc_pt(1.0, 25.0)) print("w_ps(1.0, 1.0) =", steam_table.w_ps(1.0, 1.0))
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ @date: 14 December 2020 (update) This source code is provided by Richard J Smith 'as is' and 'with all faults'. The provider makes no representations or warranties of any kind concerning the safety, suitability, inaccuracies, typographical errors, or other harmful components of this software. """ import matplotlib.pyplot as plt import numpy as np from pyXSteam.XSteam import XSteam steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) print('Rankine cycle analysis') p1 = 0.1 s1 = steamTable.sL_p(p1) T1 = steamTable.t_ps(p1, s1) h1 = steamTable.hL_p(p1) print('\nPoint 1') print(f"p1: {round(float(p1),1)} bar") print(f"T1: {round(float(T1),1)} degC") print(f"H1: {round(float(h1),1)} kJ/kg") print(f"S1: {round(float(s1),3)} kJ/kg K") p2 = 150 s2 = s1
def demo_simpel_Values(): steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) # get saturated liquid enthalpy for a preasure of 220 bar print('hV_p(220.0) =', steamTable.hL_p(220.0)) # get saturated vapour enthalpy for a preasure of 220 bar print('hV_p(220.0) =', steamTable.hV_p(220.0)) print('tcL_p(1.0) =', steamTable.tcL_p(1.0)) print('tcL_t(25.0) =', steamTable.tcL_t(25.0)) print('tcV_p(1.0) =', steamTable.tcV_p(1.0)) print('tcL_t(25.0) =', steamTable.tcV_t(25.0)) print('tc_hs(100.0, 0.34) =', steamTable.tc_hs(100.0, 0.34)) print('tc_ph(1.0, 100.0) =', steamTable.tc_ph(1.0, 100.0)) print('tc_pt(1.0, 25.0) =', steamTable.tc_pt(1.0, 25.0)) print('w_ps(1.0, 1.0) =', steamTable.w_ps(1.0, 1.0))
import math as m from pyXSteam.XSteam import XSteam #Table of possible water properties steamTable = XSteam(XSteam.UNIT_SYSTEM_BARE) def DP(Tavg, Density, VIS, Pitch, FROD, massfr, Le): FA = (Pitch**2) - ((m.pi * (FROD**2)) / 4) De = 4 * FA / (m.pi * FROD) Re = massfr * De / VIS f = 0.184 * (Re**-0.2) DP = ((f * (massfr**2) / (2 * De * Density)) * (Le) + (Density * 9.81 * Le)) return DP
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ @date: 10 December 2020 This source code is provided by Richard J Smith 'as is' and 'with all faults'. The provider makes no representations or warranties of any kind concerning the safety, suitability, inaccuracies, typographical errors, or other harmful components of this software. """ import matplotlib.pyplot as plt import numpy as np from pyXSteam.XSteam import XSteam steamTable = XSteam(XSteam.UNIT_SYSTEM_MKS) print('Rankine reheat cycle analysis (non ideal)') p1 = 0.06 s1 = steamTable.sL_p(p1) T1 = steamTable.t_ps(p1, s1) h1 = steamTable.hL_p(p1) print('\nPoint 1') print(f"T1: {round(float(T1),1)} degC") print(f"P1: {round(float(p1),1)} bar") print(f"H1: {round(float(h1),1)} kJ/kg") print(f"S1: {round(float(s1),3)} kJ/kg K") p2 = 150 s2 = s1