Расчёт теплофизических свойств воды и водяного пара.
Область 2 - перегретый пар.

In [1]:
from region2 import Region2
In [2]:
#Создаём объект Область 2
r2 = Region2()
In [3]:
T = 800; p = 10e6
#Рассчитываем теплофизические свойства пара по T и p
props_Tp = r2.props_Tp(T, p)
props_Tp #результат расчёта
Out[3]:
{'T': 800,
 'p': 10000000.0,
 'h': 3443695.8943774253,
 's': 6686.597114754263,
 'cp': 2532.3974305381903,
 'cv': 1838.462774935606,
 'v': 0.0343571922826309,
 'u': 3100123.9715511166,
 'w': 662.4669866277599,
 'x': 2}
In [4]:
#Рассчитываем теплофизические свойства пара по p и h
props_ph = r2.props_ph(p, props_Tp['h'])
props_ph #результат расчёта
Out[4]:
{'T': 800.0019564372309,
 'p': 10000000.0,
 'h': 3443695.8943774253,
 's': 6686.603307838697,
 'cp': 2532.3943513241225,
 'cv': 1838.462357829919,
 'v': 0.03435730319289105,
 'u': 3100127.8169221203,
 'w': 662.4680180720962,
 'x': 2}
In [5]:
#Рассчитываем теплофизические свойства пара по p и s
props_ps = r2.props_ps(p, props_Tp['s'])
props_ps #результат расчёта
Out[5]:
{'T': 799.9951973198691,
 'p': 10000000.0,
 'h': 3443683.73206445,
 's': 6686.597114754263,
 'cp': 2532.404989766049,
 'cv': 1838.4637989915382,
 'v': 0.0343569200181791,
 'u': 3100114.531882659,
 'w': 662.4644546108511,
 'x': 2}
In [6]:
#Определение температуры по p и h
r2.T_ph(p, props_Tp['h']) #результат расчёта - температура, К
Out[6]:
800.0019564372309
In [7]:
#Определение температуры по p и s
r2.T_ps(p, props_Tp['s']) #результат расчёта - температура, К
Out[7]:
799.9951973198691

Проверка на корректность результатов расчёта метода props_Tp(T, p)

см. в [1] табл. 15 на стр. 17

In [8]:
#Тестовые исходные данные
inputs = [{'T': 300, 'p':  0.0035e6},
         {'T': 700, 'p':  0.0035e6},
         {'T': 700, 'p': 30e6}]
In [9]:
#Точные значения результата расчёта
true_answers = [{'v': 0.394913866e2, 'h': 0.254991145e7, 'u': 0.241169160e7, 's': 0.852238967e4,
               'cp': 0.191300162e4, 'w': 0.427920172e3},
               {'v': 0.923015898e2, 'h': 0.333568375e7, 'u': 0.301262819e7, 's': 0.101749996e5,
               'cp': 0.208141274e4, 'w': 0.644289068e3},
               {'v': 0.542946619e-2, 'h': 0.263149474e7, 'u': 0.246861076e7, 's': 0.517540298e4,
               'cp': 0.103505092e5, 'w': 0.480386523e3}]
In [10]:
errs = []
for i in range(len(true_answers)):
    props = r2.props_Tp(inputs[i]['T'], inputs[i]['p'])
    errs.append({})
    for key in true_answers[i].keys():
        #относительное отклонение результата расчёта от точного значения, %
        errs[i][key] = (props[key] / true_answers[i][key] - 1) * 100
In [11]:
import pandas as pd
table = pd.DataFrame(errs)
#относительные отклонения результата расчёта от точных значений, %
table
Out[11]:
v h u s cp w
0 9.562335e-08 3.294311e-08 -9.918971e-08 -3.126126e-08 5.140821e-08 6.148457e-08
1 1.887257e-08 1.118578e-07 -2.090351e-08 -2.103588e-07 1.778777e-07 -6.727675e-08
2 8.504935e-08 1.841086e-07 -4.025438e-08 4.442302e-08 7.952787e-08 3.533285e-08

Проверка на корректность результатов расчёта метода T_ph(p, h)

см. в [1] табл. 24 на стр. 25

In [12]:
#Тестовые исходные данные
inputs_ph = [{'p': 0.001e6, 'h': 3000e3},{'p': 3e6, 'h': 3000e3},{'p': 3e6, 'h': 4000e3},
            {'p': 5e6, 'h': 3500e3},{'p': 5e6, 'h': 4000e3},{'p': 25e6, 'h': 3500e3},
            {'p': 40e6, 'h': 2700e3},{'p': 60e6, 'h': 2700e3},{'p': 60e6, 'h': 3200e3}]
In [13]:
#Точные значения результата расчёта
true_answers_ph = [0.534433241e3, 0.575373370e3, 0.101077577e4,
                  0.801299102e3, 0.101531583e4, 0.875279054e3,
                  0.743056411e3, 0.791137067e3, 0.882756860e3]
In [14]:
errs_ph = []
for i in range(len(true_answers_ph)):
    T = r2.T_ph(inputs_ph[i]['p'], inputs_ph[i]['h'])
    errs_ph.append((T / true_answers_ph[i] - 1) * 100)
In [15]:
#Относительные отклонения результата расчёта от точных значений, %
errs_ph
Out[15]:
[7.142739733012604e-08,
 4.1448799947829684e-08,
 -4.2927036369988514e-07,
 -1.7945356312054628e-08,
 -4.603379344381153e-07,
 -3.1818170320718764e-08,
 -5.099287658794083e-09,
 -5.911972023042722e-08,
 -3.9733338841330124e-08]

Проверка на корректность результатов расчёта метода T_ph(p, s)

см. в [1] табл. 29 на стр. 29

In [16]:
#Тестовые исходные данные
inputs_ps = [{'p': 0.1e6, 's': 7.5e3},{'p': 0.1e6, 's': 8e3},{'p': 2.5e6, 's': 8e3},
            {'p': 8e6, 's': 6e3},{'p': 8e6, 's': 7.5e3},{'p': 90e6, 's': 6e3},
            {'p': 20e6, 's': 5.75e3},{'p': 80e6, 's': 5.25e3},{'p': 80e6, 's': 5.75e3}]
In [17]:
#Точные значения результата расчёта
true_answers_ps = [0.399517097e3, 0.514127081e3, 0.103984917e4,
                  0.600484040e3, 0.106495556e4, 0.103801126e4,
                  0.697992849e3, 0.854011484e3, 0.949017998e3]
In [18]:
errs_ps = []
for i in range(len(true_answers_ps)):
    T = r2.T_ps(inputs_ps[i]['p'], inputs_ps[i]['s'])
    errs_ps.append((T / true_answers_ps[i] - 1) * 100)
In [19]:
#Относительные отклонения результата расчёта от точных значений, %
errs_ps
Out[19]:
[-8.625133940398655e-08,
 8.677205620699624e-08,
 3.1112505904928867e-07,
 -3.112881064026851e-08,
 4.0253400612755286e-07,
 -7.770917243021813e-08,
 6.645513028757932e-08,
 4.6981529777667674e-09,
 -4.5262982251159656e-08]

Проверка на корректность методов Tp_in, ph_in, ps_in

In [20]:
#Проверка Tp_in
#Точки на границе области (с левого нижнего угла по часовой стрелке)
Tp_edge = [{'T': 273.15, 'p': r2.sc.p_T(273.15)},
            {'T': 623.15, 'p': r2.sc.p_T(623.15)},
            {'T': r2.bound23.T_p(100e6), 'p': 100e6},
            {'T': 1073.15, 'p': 100e6},
            {'T': 1073.15, 'p': r2.sc.p_T(273.15)}]
Tp_in_edge = []
for point in Tp_edge:
    Tp_in_edge.append(r2.Tp_in(point['T'], point['p']))
Tp_in_edge
Out[20]:
[True, True, True, True, True]
In [21]:
#Проверка для границы областей 2-3
#Внути области
r2.Tp_in(r2.bound23.T_p(50e6)+1e-5, 50e6)
Out[21]:
True
In [22]:
#Вне области
r2.Tp_in(r2.bound23.T_p(50e6)-1e-5, 50e6)
Out[22]:
False
In [23]:
#Значения T и p вне области
Tp_edge_out = [{'T': 273.15 - 1, 'p': r2.sc.p_T(273.15)+1},
            {'T': 623.15 - 1, 'p': r2.sc.p_T(623.15) + 1},
            {'T': r2.bound23.T_p(100e6) - 1, 'p': 100e6 + 1},
            {'T': 1073.15 + 1, 'p': 100e6 + 1},
            {'T': 1073.15 + 1, 'p': r2.sc.p_T(273.15) - 1}]
Tp_in_edge_out = []
for point in Tp_edge_out:
    Tp_in_edge_out.append(r2.Tp_in(point['T'], point['p']))
Tp_in_edge_out
Out[23]:
[False, False, False, False, False]
In [24]:
#Значения T и p внутри области
Tp_edge_in = [{'T': 273.15 + 1, 'p': r2.sc.p_T(273.15)},
            {'T': 623.15 + 1, 'p': r2.sc.p_T(623.15) - 1},
            {'T': r2.bound23.T_p(100e6) + 1, 'p': 100e6 - 1},
            {'T': 1073.15 - 1, 'p': 100e6 - 1},
            {'T': 1073.15 - 1, 'p': r2.sc.p_T(273.15) + 1}]
Tp_in_edge_in = []
for point in Tp_edge_in:
    Tp_in_edge_in.append(r2.Tp_in(point['T'], point['p']))
Tp_in_edge_in
Out[24]:
[True, True, True, True, True]
In [25]:
#Проверка ph_in
ph_edge = []
for point in Tp_edge:
    ph_edge.append({'p': point['p'], 'h': r2.props_Tp(point['T'], point['p'])['h']})
ph_in_edge = []
for point in ph_edge:
    ph_in_edge.append(r2.ph_in(point['p'], point['h']))
ph_in_edge
Out[25]:
[True, True, True, True, True]
In [26]:
#Левая верхняя точка границы: p и h внутри области
r2.ph_in(ph_edge[1]['p'] - 1, ph_edge[1]['h'] + 1)
Out[26]:
True
In [27]:
#Правая верхняя точка границы: p внутри области, h вне области
r2.ph_in(ph_edge[3]['p'] - 1, ph_edge[3]['h'] + 1)
Out[27]:
False
In [28]:
#Проверка ps_in
#Точки на границе области
ps_edge = []
for point in Tp_edge:
    ps_edge.append({'p': point['p'], 's': r2.props_Tp(point['T'], point['p'])['s']})
ps_in_edge = []
for point in ps_edge:
    ps_in_edge.append(r2.ps_in(point['p'], point['s']))
ps_in_edge
Out[28]:
[True, True, True, True, True]
In [29]:
#Правая верхняя точка границы: p и s внутри области
r2.ps_in(ps_edge[3]['p'] - 1, ps_edge[3]['s'] - 1)
Out[29]:
True
In [30]:
#Правая нижняя точка границы: p внутри области, s вне области
r2.ps_in(ps_edge[4]['p'] + 1, ps_edge[4]['s'] + 1)
Out[30]:
False

Ссылки

  1. Revised Release on the IAPWS Industrial Formulation 1997 for the Thermodynamic Properties of Water and Steam (The revision only relates to the extension of region 5 to 50 MPa) http://www.iapws.org/relguide/IF97-Rev.pdf