Выведем формулу для времени опорожнения заполненного водой бака через отверстие, расположенное внизу бака.
Величина избыточного давления в месте отверстия составляет $p = \rho gh$, где $p$ - давление, Па; $\rho$ - плотность жидкости, $кг/м^3$; $g = 9.81$ $м/с^2$ - ускорение свободного падения; $h$ - высота столба жидкости над отметкой отверстия, м.
При истечении воды из бака потенциальная энергия столба жидкости преобразуется в кинетическую энергию движения потока $\rho v^2/2$ (где $v$ - скорость потока, м/с) за вычетом потерь давления на преодоление местных сопротивлений и сопротивления трения. Величина коэффициента местного сопротивления в случае истечения жидкости из отверстия составляет $\zeta = 0.5$, сопротивление трения отсутствует.
$$(1+\zeta)\frac{\rho v^2}{2} = \rho gh \Rightarrow v =\sqrt{\frac{2gh}{1+\zeta}}$$Расход жидкости пропорционален скорости потока
$$q =S_0v = S_0\sqrt{\frac{2gh}{1+\zeta}}$$где $q$ - расход, $м^3/с$; $S_0$ - площадь отверстия истечения, $м^2$.
Скорость падения уровня жидкости в баке зависит как от расхода вытекаемой жидкости так и от площади поверхности (зеркала) жидкости внутри бака (примем, что для любого $h$ площадь поверхности $S$ одна и та же).
$$dh = -\frac{q}{S}dt \Rightarrow -A\sqrt{h}dt,\ A = \frac{S_0}{S}\sqrt{\frac{2g}{1+\zeta}}$$где $dh$ - изменение уровня жидкости (м) за время $dt$ (с); $S$ - площадь поверхности жидкости, $м^2$.
Найдём решение полученного дифференциального уровнения.
$$\frac{dh}{\sqrt{h}}=-Adt$$$$\int h^{-1/2}dh = -\int Adt$$Из таблицы интегралов: $$\int x^ndx = \frac{x^{n+1}}{n+1}+C;\, \int adx = ax + C$$
отсюда
$$2h^{1/2} = - At + C \Rightarrow h = \left(\frac{- At + C}{2}\right)^2$$В начальный момент времени $t=0$ высота уровня воды в баке составляет $h = h_0$
где $T$ - время (секунды) за которое уровень жидкости в баке снизится с отметки $h_0$ до $0$ (где за нулевую отметку принята отметка центра отверстия в баке).
from math import sqrt, pi
rho = 998.2 # плотность воды, кг/м3
D0 = 150e-3; D = 2 # диаметр отверстия и бака соответственно, м
S0 = 3.1416 * D0 * D0 / 4 # площадь отверстия, м2
S = pi * D * D / 4 # площадь поверхности воды в баке, м2
zeta = 0.5 # местный коэффициент сопротивления при истечении жидкости из бака
h0 = 3 # высота столба жидкости над отверстием в начальный момент времени, м
g = 9.81 # ускорение свободного падения, м/с2
A = S0/S * sqrt(2 * g / (1 + zeta)) # к-нт из формул (1) и (2)
T = 2 * sqrt(h0)/A # время истечения воды из бака, с
T
170.2798302954458
def fh(t):
# Высота столба жидкости над отверстием в момент времени t
return (-A*t/2 + sqrt(h0)) ** 2
def fq(t):
# Расход жидкости через отверстие в момент времени t, м3/с
h = fh(t)
return S0 * sqrt((2 * g * h) / (1 + zeta))
# Данные для построения графиков
import numpy as np
ts = np.linspace(0, 180, 19)
ts[-1] = T
hs = np.zeros_like(ts)
qs = np.zeros_like(ts)
for i,t in enumerate(ts):
hs[i] = fh(t)
qs[i] = A * S * sqrt(hs[i])
# предпоследнее и последнее значение в массиве ts
ts[-2], ts[-1]
(170.0, 170.2798302954458)
import matplotlib.pyplot as plt
plt.rcParams['font.size'] = 12.0
fig, ax = plt.subplots(figsize = (10,5))
lns1 = ax.plot(ts, hs, label = 'Высота столба жидкости $h$')
ax2 = ax.twinx()
ax.set_xlim(0, T); ax.set_ylim(0, hs[0]); ax2.set_ylim(0, 0.12)
ax.set_xlabel('$t$, C'); ax.set_ylabel('$h,\ м$'); ax2.set_ylabel('$q,\ м^3/с$')
lns2 = ax2.plot(ts, qs, 'red', label = 'Расход через отверстие $q$')
lns = lns1+lns2
labs = [l.get_label() for l in lns]
ax.legend(lns, labs); ax.grid()
Сопротивление воздуха движению струи воды не учитывается.
При падении предмета вниз с высоты $H$ его скорость в момент времени $t$ (при условии $v(0) = 0$) определяется по формуле $v(t) = gt$, где $g = 9.81\ м/с^2$ - ускорение свободного падения. За время t предмет пролетит расстояние h
$$h(t) = \int\limits_0^t vdt = \int\limits_0^t gtdt = \frac{gt^2}{2}$$Время падения предмета с высоты $H$ составит $$T = \sqrt{\frac{2H}{g}}$$
Пусть отверстие в баке находится на высоте $H = 0.5$ м от дна бака. Тогда время $T$ за которое вода под действием силы тяжести преодолеет расстояние $H$ составит
H = 0.5 # отметка центра отверстия относительно поверхности земли, м
TT = sqrt(2 * H / g)
TT # время за которое вода в сечении отверстия достигает земли, с
0.3192754284070505
# Переменная T занята временем опорожнения бака
T
170.2798302954458
Ts = np.array([0, 40, 80, 120, 160]) # время с момента начала истечения воды из бака
ts = np.linspace(0., TT, 50)
xs = np.array([[t * fq(T) / S0 for T in Ts] for t in ts]) # координата x, м
ys = np.array([H - g * t * t / 2 for t in ts ]) # координата y, м
# Надписи к линиям (струям воды)
lbls = ['t=' + str(T) + ' c; q=' + str(round(float(fq(T)),3)) + ' $м^3/с$' for T in Ts]
fig, ax = plt.subplots(figsize = (10,6))
ax.plot(xs, ys)
ax.set_xlim(0, ); ax.set_ylim(0, H);
ax.set_xlabel('$x,\ м$'); ax.set_ylabel('$y,\ м$')
ax.grid(); ax.legend(lbls);
Инженерные расчёты на Python, С.В. Медведев, 2020-2022
Использование Python и Jupyter Notebook для инженерных расчётов, С.В. Медведев, 2020-2022