В данной статье приведены примеры использования функций из модуля на Python wetairprops версии 2.0 (скачать).
Воздух при атмосферном давлении и комнатной температуре с достаточной для практических расчётов точностью хорошо описывается моделью идеального газа.
Уравнение состояния идеального газа: $$pV = \nu RT \Rightarrow pV = \frac{m}{\mu}RT \Rightarrow pv = \frac{RT}{\mu}\qquad (1)$$
$p$ — давление, Па; $V$ — занимаемый газом объём, $м^3$; $\nu$ — количество вещества, моль; $R$ ≈ 8,314 Дж/(моль⋅К) — универсальная газовая постоянная; $T$ — термодинамическая температура, К; $m$ - масса газа, кг; $v$ - удельный объём газа, $м^3/кг$, $\mu$ - молярная масса газа, $кг/моль$.
Давление влажного воздуха $p_{в.в.}$ равно атмосферному давлению и является суммой парциальных давлений сухого воздуха и водяного пара.
$$p_{в.в.} = p_{с.в.} + p_{в.п.}$$Количество водяного пара в воздухе, приходящегося на 1 кг сухой части влажного воздуха, называют влагосодержанием воздуха $d$, г/кг.
Количество водяного пара в воздухе обычно выражают через относительную влажность воздуха $RH$, %. $RH$ - Relative Humidity (относительная влажность).
Относительная влажность воздуха $RH$ - это отношение парциального давления водяного пара $p_{в.п.}$ к давлению насыщения водяного пара $p_{нас}$ при заданной температуре: $$RH = p_{в.п.} / p_{нас}$$
# Импортируем функцию, определяющую давление насыщения (упругость насыщенного водяного пара)
from wetairprops import calc_p_s
help(calc_p_s)
Help on function calc_p_s in module wetairprops: calc_p_s(t) Определение упругости насыщенного водяного пара (давления насыщения) t: температура водяного пара, С return: p_s - давление насыщения, Па Источник: https://files.stroyinf.ru/Data1/44/44694/
# Зададим параметры влажного воздуха
t_0 = 15 # температура влажного воздуха, С
p_0 = 101325 # давление влажного воздуха - нормальное атмосферное давление, Па
RH_0 = 0.6 # Relative Humidity - относительная влажность 60% (0,6 в долях)
# Давление насыщения водяного пара для заданной температуры
p_нас = calc_p_s(t_0)
p_нас # Па
1705.4477944415173
# Парциальное давление водяного пара
p_вп = RH_0 * p_нас
p_вп # Па
1023.2686766649103
# Парциальное давление сухого воздуха
p_св = p_0 - p_вп
p_св # Па
100301.73132333509
Из (1) следует, что масса газа давлением $p$ и температурой $T$ занимающего объём $V$ составляет $m = \mu pVRT$, отсюда отношение массы водяного пара к массе сухого воздуха:
$$\frac{m_{в.п.}}{m_{с.в.}} = \frac{\mu_{в.п.}p_{в.п.}}{\mu_{с.в.}p_{с.в.}}$$Т.к. $d$ измерется в г/кг, а не кг/кг, то: $$d = 1000\cdot \frac{\mu_{в.п.}p_{в.п.}}{\mu_{с.в.}p_{с.в.}}$$
mu_св = 29 # молярная масса сухого воздуха, г/моль
mu_вп = 18 # молярная масса водяного пара,г/моль
d_0 = 1000 * mu_вп * p_вп / (mu_св * p_св)
d_0 # грамм водяного пара на килограмм сухого воздуха
6.332216539916421
import numpy as np # библиотека для работы с массивами
ts = np.linspace(-40, 40, 501) # набор точек температур
RHs = np.array([1., 0.8, 0.6, 0.4, 0.2]) # набор значений относительной влажности
# Импортируем функцию, определяющую влагосодержание
from wetairprops import calc_d
help(calc_d)
Help on function calc_d in module wetairprops: calc_d(t, RH, p=101325) Определение влагосодержания, г/(кг с. в.) t: температура воздуха (сухой термометр), С RH: относительная влажность [0; 1] p: давление воздуха, Па (по умолчанию - нормальное атмосферное давление) return: d - влагосодержание, г/кг сух. возд.
# Двумерный массив значений влагосодержаний. Количество строк равно количеству
# элементов в массиве ts, количество столбцов - количеству элементов в массиве RHs
ds = np.array([[calc_d (t, RH) for RH in RHs] for t in ts])
import matplotlib.pyplot as plt
plt.rcParams['font.size'] = 12.0
fig, axes = plt.subplots(1,2, figsize = (16, 5))
for i, ax in enumerate(axes):
ax.set_xlabel('$t, \degree C$'); ax.set_ylabel('$d,\ г/кг$')
ax.plot(ts, ds); ax.grid()
ax.legend(np.int8(RHs*100), title = '$RH,\ \%$');
fig.suptitle("Зависимость влагосодержания воздуха от его температуры " +
"для различных значений относительной влажности")
axes[0].set_xlim(-40, 0); axes[0].set_ylim(0, 4);
axes[1].set_xlim(0, 40); axes[1].set_ylim(0, 50);
Определим как изменяется значение относительной влажности при изменении температуры влажного воздуха и неизменной величине влагосодержания.
ks_p = np.linspace(80, 120, 41) # проценты от нормального давления
# Импортируем функцию
from wetairprops import calc_RH_d
help(calc_RH_d)
Help on function calc_RH_d in module wetairprops: calc_RH_d(t, d, p=101325) Определение относительной влажности по влагосодержанию t: температура воздуха (сухой термометр), С d: влагосодержание, г на кг сухого воздуха p: давление влажного воздуха, Па (по умолчанию - нормальное атмосферное давление) return: относительная влажность воздуха, [0.; 1.]
ds = np.array([calc_d(t_0, RH, p_0) for RH in RHs]) # набор влагосодержания
RHts = np.array([[calc_RH_d (t, d, p_0) if d <= calc_d(t, 1.,p_0)
else float('NaN') for d in ds] for t in ts])
RHps = np.array([[calc_RH_d (t_0, d, p_0*k/100.) if d <= calc_d(t_0, 1.,p_0*k/100.)
else float('NaN') for d in ds]for k in ks_p])
fig, axes = plt.subplots(1,2, figsize = (16, 5))
axes[0].set_xlabel('$t, \degree C$')
axes[0].plot(ts, RHts * 100)
axes[1].set_xlabel('$p/p_0,\ \%$')
axes[1].plot(ks_p, RHps * 100)
fig.suptitle("Зависимость относительной влажности воздуха " +
"для различных значений влагосодержания")
axes[0].set_xlim(-10, 40); axes[0].set_ylim(0, 100);
axes[1].set_xlim(80, 120); axes[1].set_ylim(0, 100);
axes[0].set_title('Зависимость от температуры (при $p = p_0$)')
axes[1].set_title('Зависимость от давления (при $t = t_0$)')
for i, ax in enumerate(axes):
ax.legend(np.round(ds,1), title = '$d$, г/кг'); ax.grid(); ax.set_ylabel('$RH,\ \%$')
print("d для RH при p_0={0} Па и t_0={1} C\n".format(p_0, t_0))
print(" RH,%| d,г/кг\n-------------")
for RH, d in zip(RHs, ds):
print("{0: >4} | {1: >5.2f}".format(int(RH * 100), round(d,2)))
d для RH при p_0=101325 Па и t_0=15 C RH,%| d,г/кг ------------- 100 | 10.63 80 | 8.47 60 | 6.33 40 | 4.21 20 | 2.10
Относительная влажность воздуха $RH$ в большей мере показывает не количество влаги в воздухе, а степень близости водяного пара к состоянию насыщения при заданной температуре и давлении. При изменении температуры и (или) давления влажного воздуха его влагосодержание, в отличии от относительной влажности, не изменяется.
Температура точки росы воздуха — значение температуры воздуха, при которой водяной пар, содержащийся в воздухе, становится насыщенным. Температура точки росы равна температуре насыщения при давлении соответствующему парциальному давлению водяного пара.
При охлаждении воздуха с неизменным влагосодержанием $d$ его относительная влажность увеличивается и при достижении температуры точки росы относительная влажность воздуха принимает значение 100%.
from wetairprops import calc_t_dp
help(calc_t_dp)
Help on function calc_t_dp in module wetairprops: calc_t_dp(t, RH, p=101325) Определение температуры точки росы t: температура воздуха (сухой термометр), С RH: относительная влажность [0; 1] p: давление воздуха, Па (по умолчанию - нормальное атмосферное давление) return: t_dp - температура точки росы, С
ts_dp = np.array([[calc_t_dp (t, RH) for RH in RHs] for t in ts])
fig, axes = plt.subplots(1,2, figsize = (16, 5))
for i, ax in enumerate(axes):
ax.set_xlabel('$t, \degree C$');
ax.set_ylabel('$t_{т.р.}, \degree C$')
ax.plot(ts, ts_dp); ax.grid()
ax.legend(np.int8(RHs*100), title = '$RH,\ \%$');
fig.suptitle("Зависимость температуры точки росы влажного воздуха от его температуры\n" +
"для различных значений относительной влажности")
axes[0].set_xlim(-40, 0); axes[0].set_ylim( -55, 0);
axes[1].set_xlim(0, 40); axes[1].set_ylim(-20, 40);
Температура точки росы зависит только от парциального давления водяного пара. Чем выше парциальное давление водяного пара тем выше температура точки росы. Парциальное давление водяного пара увеличивается при увеличении давления влажного воздуха и (или) при увеличении влагосодержания.
from wetairprops import calc_t_dp_d
help(calc_t_dp_d)
Help on function calc_t_dp_d in module wetairprops: calc_t_dp_d(d, p=101325) Определение температуры точки росы по влагосодержанию d: влагосодержание, г на кг сухого воздуха p: давление воздуха, Па (по умолчанию - нормальное атмосферное давление) return: t_dp - температура точки росы, С
ts_dp_p = np.array([[calc_t_dp_d (d, p_0*k/100.) if d<= calc_d(t_0, 1.,p_0*k/100.)
else float('NaN') for d in ds] for k in ks_p])
fig, ax = plt.subplots(figsize = (10, 5))
ax.set_xlabel('$p/p_0,\ \%$');
ax.set_ylabel('$t_{т.р.}, \degree C$')
ax.plot(ks_p, ts_dp_p); ax.grid()
ax.set_title("Зависимость температуры точки росы влажного воздуха от давления\n" +
"для различных значений влагосодержания (при $t = t_0$)")
ax.legend(np.round(ds,1), title = '$d$, г/кг');
ax.set_xlim(80, 120); ax.set_ylim(-10, );
Температура мокрого термометра – это температура, которую принимает влажный воздух при достижении насыщенного состояния и энтальпии воздуха, равной начальной.
Для определения температуры мокрого термометра необходимо определять значение энтальпии влажного воздуха:
$$I_{в.в} = c_p^{с.в.}t+d(r+c_p^{в.п.}t)0.001$$где $I_{в.в}$ - энтальпия влажного воздуха, кДж/кг; $c_p^{с.в.}$ - удельная теплоёмкость сухого воздуха, кДж/(кг К); $t$ - температура влажного воздуха, C; $d$ - влагосодержание, г/кг (г в.п. на кг с.в.); r - скрытая теплота парообразования, кДж/(кг К); $c_p^{в.п.}$ - удельная теплоёмкость водяного пара, кДж/(кг К); множитель 0.001 - перевод $d$ из г/кг в кг/кг.
Приняв $c_p^{с.в.} = 1.005\ кДж/(кг \cdot К)$, $r = 2500\ кДж/кг$, $c_p^{в.п.} = 1.861\ кДж/(кг \cdot К)$ получим:
$$I_{в.в} = 1.005t+d(2500+1.861t)0.001$$from wetairprops import calc_t_wb
help(calc_t_wb)
Help on function calc_t_wb in module wetairprops: calc_t_wb(t, RH, p=101325) Определение температуры мокрого терммометра по влагосодержанию t: температура воздуха (сухой термометр), С RH: относительная влажность [0; 1] p: давление воздуха, Па (по умолчанию - нормальное атмосферное давление) return: t_wb - температура мокрого термометра, С
ts_wb = np.array([[calc_t_wb (t, RH) for RH in RHs] for t in ts])
fig, axes = plt.subplots(1,2, figsize = (16, 5))
for i, ax in enumerate(axes):
ax.set_xlabel('$t, \degree C$');
ax.set_ylabel('$t_{м.т.}, \degree C$')
ax.plot(ts, ts_wb); ax.grid()
ax.legend(np.int8(RHs*100), title = '$RH,\ \%$');
fig.suptitle("Зависимость температуры мокрого термометра влажного воздуха от его температуры\n" +
"для различных значений относительной влажности")
axes[0].set_xlim(-40, 0); axes[0].set_ylim( -40, 0);
axes[1].set_xlim(0, 40); axes[1].set_ylim(-5, 40);
from wetairprops import calc_t_wb_d
help(calc_t_wb_d)
Help on function calc_t_wb_d in module wetairprops: calc_t_wb_d(t, d, p=101325) Определение температуры мокрого терммометра t: температура воздуха (сухой термометр), С d: влагосодержание, г на кг сухого воздуха p: давление воздуха, Па (по умолчанию - нормальное атмосферное давление) return: t_wb - температура мокрого термометра, С
ts_wb_t = np.array([[calc_t_wb_d (t, d, p_0) if d<= calc_d(t, 1.,p_0)
else float('NaN') for d in ds] for t in ts])
ts_wb_p = np.array([[calc_t_wb_d (t_0, d, p_0*k/100.) if d<= calc_d(t_0, 1.,p_0*k/100.)
else float('NaN') for d in ds] for k in ks_p])
fig, axes = plt.subplots(1,2, figsize = (16, 5))
axes[0].set_xlabel('$t, \degree C$')
axes[0].plot(ts, ts_wb_t)
axes[1].set_xlabel('$p/p_0,\ \%$')
axes[1].plot(ks_p, ts_wb_p)
fig.suptitle("Зависимость температуры мокрого термометра " +
"для различных значений влагосодержания")
axes[0].set_xlim(-10, 40); axes[0].set_ylim(-10, 25);
axes[1].set_xlim(80, 120); axes[1].set_ylim(0, 16);
axes[0].set_title('Зависимость от температуры (при $p = p_0$)')
axes[1].set_title('Зависимость от давления (при $t = t_0$)')
for i, ax in enumerate(axes):
ax.legend(np.round(ds,1), title = '$d$, г/кг'); ax.grid(); ax.set_ylabel('$t_{м.т.}, \degree C$')
С уменьшением температуры влажного воздуха температура мокрого термометра уменьшается. На графике слева левая граница кривой - это точка, в которой температура влажного воздуха равна температуре точки росы и температуре мокрого термометра, а относительная влажность воздуха составляет 100%.
С увеличением давления влажного воздуха температура мокрого термометра увеличивается. На графике справа правая граница кривой - это точка в которой температура влажного воздуха $t_0$ равна температуре точки росы и температуре мокрого термометра, а относительная влажность воздуха составляет 100%.
Из (1) следует, что масса газа $m$, находящегося в объёме $V$ $$m = \frac{\mu pV}{RT}$$
где $p$ - парциальное давление газа, Па. Т.к. $\rho = m/V$, а масса влажного воздуха равна сумме масс сухого воздуха и водяного пара $m = m_{с.в.}+m_{в.п.}$, то плотность влажного воздуха находится по формуле:
$$\rho = \frac{\mu_{с.в.} p_{с.в.} + \mu_{в.п.} p_{в.п.}}{RT}$$from wetairprops import calc_dens
help(calc_dens)
Help on function calc_dens in module wetairprops: calc_dens(t, RH, p=101325) Определение плотности влажного воздуха t: температура, Па p: давление влажного воздуха, Па (по умолчанию - нормальное атмосферное давление) RH: относительная влажность [0; 1] return: плотность влажного воздуха, кг/м3
dens_RH = np.array([[calc_dens (t, RH) for RH in RHs] for t in ts])
fig, axes = plt.subplots(1,2, figsize = (16, 5))
for i, ax in enumerate(axes):
ax.set_xlabel('$t, \degree C$');
ax.set_ylabel(r"$\rho,\ кг/м^3$")
ax.plot(ts, dens_RH); ax.grid()
ax.legend(np.int8(RHs*100), title = '$RH,\ \%$');
fig.suptitle("Зависимость плотности влажного воздуха от его температуры\n" +
"для различных значений относительной влажности (при $p = p_0$)")
axes[0].set_xlim(-40, 0); axes[0].set_ylim(1.300, );
axes[1].set_xlim(0, 40); axes[1].set_ylim(1.100, 1.300);
from wetairprops import calc_dens_d
dens_d = np.array([[calc_dens_d (t, d) if d <= calc_d(t, 1.,p_0)
else float('NaN') for d in ds] for t in ts])
fig, ax = plt.subplots(figsize = (10, 5))
ax.set_xlabel('$t, \degree C$');
ax.set_ylabel(r"$\rho,\ кг/м^3$")
ax.plot(ts, dens_d); ax.grid()
ax.set_title("Зависимость плотности влажного воздуха от температуры\n" +
"для различных значений влагосодержания (при $p = p_0$)")
ax.legend(np.int8(RHs*100), title = '$RH,\ \%$');
ax.legend(np.round(ds,1), title = '$d$, г/кг')
ax.set_xlim(-10, 40); ax.set_ylim(1.100, 1.350);
Кривые "обрываются" слева в точке, где температура влажного воздуха становится равной температуре точки росы.
t_0, p_0, RH_0, d_0
(15, 101325, 0.6, 6.332216539916421)
# Вычисление отклонения, %
(calc_d(t_0, RH_0, p_0) - d_0) / d_0 * 100
1.4026343131213393e-14
t_dp_0 = calc_t_dp(t_0, RH_0, p_0); t_wb_0 = calc_t_wb(t_0, RH_0, p_0)
t_dp_0, t_wb_0
(7.307027243589768, 10.788187290594049)
from wetairprops import calc_RH_t_dp
help(calc_RH_t_dp)
Help on function calc_RH_t_dp in module wetairprops: calc_RH_t_dp(t, t_dp) Определение относительной влажности по температуре точки росы t: температура воздуха (сухой термометр), С t_dp: температура точки росы, С return: относительная влажность воздуха [0.; 1.]
# Вычисление отклонения, %
(calc_RH_t_dp(t_0, t_dp_0) - RH_0) / RH_0 * 100
2.0354088784794538e-13
from wetairprops import calc_RH_t_wb
help(calc_RH_t_wb)
Help on function calc_RH_t_wb in module wetairprops: calc_RH_t_wb(t, t_wb, p=101325) Определение относительной влажности по температуре мокрого термометра t: температура воздуха (сухой термометр), С t_wb: температура мокрого термометра, С p: давление влажного воздуха, Па (по умолчанию - нормальное атмосферное давление) return: относительная влажность воздуха, [0.; 1.]
# Вычисление отклонения, %
(calc_RH_t_wb(t_0, t_wb_0) - RH_0) / RH_0 * 100
1.3322676295501878e-12
from wetairprops import calc_RH_d
help(calc_RH_d)
Help on function calc_RH_d in module wetairprops: calc_RH_d(t, d, p=101325) Определение относительной влажности по влагосодержанию t: температура воздуха (сухой термометр), С d: влагосодержание, г на кг сухого воздуха p: давление влажного воздуха, Па (по умолчанию - нормальное атмосферное давление) return: относительная влажность воздуха, [0.; 1.]
# Вычисление отклонения, %
(calc_RH_d(t_0, d_0, p_0) - RH_0) / RH_0 * 100
0.0
from wetairprops import calc_t_dp_d
help(calc_t_dp_d)
Help on function calc_t_dp_d in module wetairprops: calc_t_dp_d(d, p=101325) Определение температуры точки росы по влагосодержанию d: влагосодержание, г на кг сухого воздуха p: давление воздуха, Па (по умолчанию - нормальное атмосферное давление) return: t_dp - температура точки росы, С
# Вычисление отклонения, %
(calc_t_dp_d(d_0, p_0) - t_dp_0) / t_dp_0 * 100
-1.0331857697771725e-12
from wetairprops import calc_t_wb_d
help(calc_t_wb_d)
Help on function calc_t_wb_d in module wetairprops: calc_t_wb_d(t, d, p=101325) Определение температуры мокрого терммометра t: температура воздуха (сухой термометр), С d: влагосодержание, г на кг сухого воздуха p: давление воздуха, Па (по умолчанию - нормальное атмосферное давление) return: t_wb - температура мокрого термометра, С
# Вычисление отклонения, %
(calc_t_wb_d(t_0, d_0, p_0) - t_wb_0) / t_wb_0 * 100
0.0
Инженерные расчёты на Python, С.В. Медведев, 2020-2023
Использование Python и Jupyter Notebook для инженерных расчётов, С.В. Медведев, 2020-2023