Рассмотрим гидравлическую сеть, состоящую из насоса, подающего трубопровода, нескольких параллельно подключённых потребителей и обратного трубопровода:
$H$, м - напор насоса, $\Delta H_{i,j}$, м - падение давления на участке $(i,j)$ сети, $R_{i,j}$ - гидравлическое сопротивление участка $(i,j)$ сети (подробнее про гидравлическое сопротивление см. в статье Моделирование характеристики гидравлической сети), $Q_{i,j}$, $м^3/ч$ - объёмный расход через участок $(i,j)$ сети, причём $Q_{0,j} = Q_{2,j}$.
Индекс $i=0$ соответствует участкам подающего трубопровода, $i=1$ - потребители, $i=2$ - участки обратного трубопровода. Индекс $j$ - номер потребителя (от 0 до $N-1$). Все значения $R_{i,j}$ известны, так же известны значения расхода через каждый потребитель $Q_{1,j}$, $j = 0\ldots N-1$.
В качестве примера рассмотрим сеть из трёх потребителей. На первом этапе найдём значение напора насоса, величина которого будет достаточной для обеспечения через каждый потребитель расхода не менее требуемого.
import numpy as np #работа с массивами
N = 3 # количество потребителей
Qs = np.zeros((3, N), dtype = float) #массив расходов
#Зададим значения расходов через каждый из трёх потребителей
Qs[1,:] = [50, 20, 100]
#Зададим значения гидравлических сопротивлений всех участков сети
Rs = np.array([[0.0002, 0.0002, 0.0002],
[0.0004, 0.0004, 0.0004],
[0.0005, 0.0005, 0.0005]], dtype = float)
#Найдём значения расходов через остальные участкки сети
tmp = 0
for j in range(N-1, -1, -1):
tmp += Qs[1, j]
Qs[0, j] = Qs[2, j] = tmp
Qs
array([[170., 120., 100.], [ 50., 20., 100.], [170., 120., 100.]])
dHs = np.zeros((2,N), dtype = float)
#dHs[0,j] - потери давления в подводящем и отводящем трубопроводах потребителя j
#dHs[1,j] - потери давления в контуре потребителя j (dHs[0,j] + потери давления в линии потребителя)
tmp = 0
for j in range(N):
tmp += (Rs[0,j] + Rs[2,j]) * Qs[0,j] ** 2
dHs[0,j] = tmp
dHs[1,j] = dHs[0,j] + Rs[1,j] * Qs[1,j] ** 2
dHs
array([[20.23, 30.31, 37.31], [21.23, 30.47, 41.31]])
#Напор насоса равен максимальному значению в массиве потерь давления в контурах потребителей
H = dHs[1,:].max()
H
41.31
Если мы установим насос с выбранными парарметрами, то расходы в линиях потребителей будут отличаться от требуемых значений (см. [1]). Для балансировки системы необходимо увеличить сопротивления в линиях потребителей таким образом, чтобы падение давления на потребителе при требуемом расходе равнялось $\Delta H_{1,j} = H - \Delta H^{тр}_j$, где $H^{тр}_j$ - потери давления в подводящем и отводящем трубопроводе потребителя $j$.
#Сопротивления при которых через потребители будет проходить требуемый расход
Rs_b = (H - dHs[0,:]) / Qs[1,:] ** 2
Rs_b
array([0.008432, 0.0275 , 0.0004 ])
#Найдём значения дополнительных (балансировочных) спротивлений для каждой ветви
dRs = Rs_b - Rs[1,:]
dRs
array([0.008032, 0.0271 , 0. ])
Ответом всех трёх выражений должно быть значение напора насоса
(Rs[0,0] + Rs[2,0]) * Qs[0,0] ** 2 + Rs_b[0] * Qs[1,0] ** 2
41.31
(Rs[0,0] + Rs[2,0]) * Qs[0,0] ** 2 + (Rs[0,1] + Rs[2,1]) * Qs[0,1] ** 2 + Rs_b[1] * Qs[1,1] ** 2
41.31
(Rs[0,0] + Rs[2,0]) * Qs[0,0] ** 2 + (Rs[0,1] + Rs[2,1]) * Qs[0,1] ** 2 + \
(Rs[0,2] + Rs[2,2]) * Qs[0,2] ** 2 + Rs_b[2] * Qs[1,2] ** 2
41.31
Инженерные расчёты на Python, С.В. Медведев, 2020
Использование Python и Jupyter Notebook для инженерных расчётов, С.В. Медведев, 2020