Здесь приведена расчётная часть статьи о способе быстрой оценки кавитационного запаса насоса. Кавитационный запас измеряется в метрах водяного столба. Пересчёт давления из Паскалей в метры производится по формуле $H = p / \rho g$, где $p$ - давление, Па; $\rho$ - плотность жидкости,$кг/м^3$; $g \approx 9.81$ - ускорение свободного падения, $м/с^2$.
Т.к. плотность воды зависит от её температуры, атмосферное давление, выраженное в метрах водяного столба, будет меняться при изменении температуры воды, хотя в Па значение давления будет оставаться неизменным.
p_внеш = 101325 # внешнее давдленин (нормальное атмосферное давление), Па
g = 9.80665 # ускорение свободного падения, м/с2
from wsprops import SaturationCurve, Region1
sc = SaturationCurve() # кривая насыщения (см [1])
r1 = Region1() # расчёт теплофизических свойств воды (см [2])
import numpy as np
ts = np.linspace(0., 120., 121) # заданный диапазон температур, С
ps_к = [] # давление кипения при заданной температуре, Па
Hs_к = [] # давление кипения при заданной температуре, м
Hs_внеш = [] # атмосферное давление, м
dens = [] # плотность воды, кг/м3
for t in ts:
p_к = sc.p_t(t)
ps_к.append(p_к)
den = 1 / r1.props_tp(t, p_к)['v'] # плотность воды, кг/м3
dens.append(den)
Hs_к.append(p_к / den / g)
Hs_внеш.append(p_внеш / den / g)
Hs_к = np.array(Hs_к)
Hs_внеш = np.array(Hs_внеш)
$\mathrm{NPSHA}_t = H_{внеш}-H_{кип}$ - располагаемый температурный надкавитационным напор, разность между внешним давлением и давлением, при котором закипает жидкость температурой $t$.
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize = (8, 4))
plt.rcParams['font.size'] = 10
ax.set_title("""Располагаемый температурный надкавитационный напор $\mathrm{NPSHA}_t$
для $p_{внеш}=p_{атм}=101325\ Па$""")
#ax.set_ylabel('$H_{внеш} - H_{кип},\ м$');
ax.set_ylabel('$\mathrm{NPSHA}_t=H_{атм} - H_{кип},\ м$');
ax.set_xlabel('$t, \degree C$'); ax.plot(ts, Hs_внеш - Hs_к); ax.grid();
ax.set_xlim(0., 120); ax.set_ylim(-11, 11);
#Cформируем таблицу с помощью пакета pandas
import pandas as pd
dens = np.array(dens)
inds = np.int8(ts) # индексом (первым столбцом) назначаем температуру
data = pd.DataFrame({'p_к, Па': pd.Series(np.int_(np.round(ps_к, 0)), inds),
'H_к, м': pd.Series(np.round(Hs_к, 2), inds),
'Плотность, кг/м3': pd.Series(np.round(dens, 1), inds),
'H_внеш=H_атм, м': pd.Series(np.round(Hs_внеш, 2), inds),
'H_внеш-H_к, м': pd.Series(np.round(Hs_внеш - Hs_к, 2), inds)})
table = pd.DataFrame(data)
table
p_к, Па | H_к, м | Плотность, кг/м3 | H_внеш=H_атм, м | H_внеш-H_к, м | |
---|---|---|---|---|---|
0 | 611 | 0.06 | 999.8 | 10.33 | 10.27 |
1 | 657 | 0.07 | 999.9 | 10.33 | 10.27 |
2 | 706 | 0.07 | 999.9 | 10.33 | 10.26 |
3 | 758 | 0.08 | 999.9 | 10.33 | 10.26 |
4 | 814 | 0.08 | 999.9 | 10.33 | 10.25 |
... | ... | ... | ... | ... | ... |
116 | 174768 | 18.83 | 946.3 | 10.92 | -7.91 |
117 | 180509 | 19.47 | 945.5 | 10.93 | -8.54 |
118 | 186404 | 20.12 | 944.7 | 10.94 | -9.18 |
119 | 192455 | 20.79 | 943.9 | 10.95 | -9.84 |
120 | 198665 | 21.48 | 943.1 | 10.96 | -10.52 |
121 rows × 5 columns
# Сохраним таблицу в файл html
#table.to_html('Кавитационный_запас_данные.html')
# Проверим полученный результат с помощью функции calc_NPSH из модуля npsh (см. [4])
import sys
sys.path.append("../0027_Кавитационный_запас")
from npsh import calc_NPSH
help(calc_NPSH)
Help on function calc_NPSH in module npsh: calc_NPSH(z_s, z_p, t, p=101325, Q=0, D=0, dH=0) Расчёт имеющегося надкавитационного напора NPSHA (кавитационного запаса) z_s: высотная отметка поверхности воды, м z_p: высотная отметка оси входного патрубка насоса, м t: температура воды, С p: давление над поверхностью воды, Па. По умолчанию 101325 Па. Q: объёмный расход, м3/ч. По умолчанию 0 (при расчёте NPSH скорость потока не учитывается) D: внутренний диаметр входного патрубка насоса, м. По умолчанию 0 (при расчёте NPSH скорость потока не учитывается) dH: потери давления во входном трубопроводе насоса, м. По умолчанию 0 (при расчёте NPSH потери давления не учитывается) return: значение NPSH, м
NPSHs = []
for t in ts:
NPSHs.append(calc_NPSH(0.,0.,t))
NPSHs = np.array(NPSHs)
max(np.abs(NPSHs - (Hs_внеш-Hs_к))) # максимальное значение ошибки
0.0005437024158858605
Посмотрим в какой степени плотность воды зависит от давления
# При изменении давления воды температурой 30 C от 5 кПа до 1 МПа
1/r1.props_tp(30, 5e3)['v'], 1/r1.props_tp(30, 100e4)['v']
(995.6092182508337, 996.0513032217335)
# При давлении кипения воды температурой 120 С и при давлении в 10 раз больше
1/r1.props_tp(120, sc.p_t(120))['v'], 1/r1.props_tp(120, sc.p_t(120)*10)['v']
(943.105677458354, 943.997797983895)
Инженерные расчёты на Python, С.В. Медведев, 2020-2024
Использование Python и Jupyter Notebook для инженерных расчётов, С.В. Медведев, 2020-2024