Падение давления и массовый расход в трубопроводе теплопроводящей жидкости
В этом примере мы изучим, как трение и перепад высот влияют на перепад давления в трубе, а также как учёт динамической сжимаемости жидкости повлияет на массовый расход через трубу. Эти эффекты особенно важны в длинных и узких трубах, поскольку в таких системах для компенсации потерь приходится задавать повышенное давление потока.
Рассмотрим трубопровод длиной 10 метров с круглым поперечным сечением диаметром 0.1 м. Массовый расход в трубе постоянен и составляет 0.4 кг/с. Вода поступает из резервуара при температуре 293.15 К и под атмосферным давлением. Эффекты динамической сжимаемости жидкости изначально не учтены.

Зададим массовый расход, длину и диаметр трубы.
mdot = 0.4; # [кг/с] Массовый расход
pipe_length = 10; # [м] Длина трубы
D = 0.1; # [м] Диаметр трубы
Падение давления из-за перепада высот
Как будет вести себя модель этой трубы если перепад высоты между ее входом и выходом будет равен 3 метра? Пренебрежем влиянием трения и рассчитаем падение давления аналитически, а потом используем модель чтобы проверить результат.

Перепад давления в трубе — сумма потерь давления из-за трения о стенки трубы и из-за перепада высот.
где - падение давления из-за изменения высоты по трубе, — падение давления из-за трения о стенки трубы. Поскольку мы пренебрегаем трением, можно считать равным нулю и использовать определить через уравнение Бернулли.
Уравнение Бергулли связывает скорость, давление и высоту жидкости в разных точках гидродинамической системы, и мы используем его чтобы рассчитать свойства жидкости в точках A и B модели трубы:
где — давление в точке A или B, — плотность жидкости, — скорость потока в точке A или B, — ускорение свободного падения, — высота жидкости в точке A или B.
При моделировании несжимаемой жидкости масса сохраняется и , где - расход в точке A, — расход в точке B.
Расход — произведение плотности, скорости и площади поперечного сечения трубы. Если предположить, что плотность жидкости и площадь поперечного сечения трубы постоянны по всей ее длине, то в силу сохранения расхода и сохранения импульса можно использовать равенство , благодаря чему термины с этой переменной по обеим сторонам уравнения Бернулли можно исключить и выражение можно сократить до:
где — перепад высоты между точками A и B.
Выполним аналитический расчет ожидаемой потери давления из-за перепада высоты. Поменять перепад высот в модели можно через изменение переменной delta_z
:
delta_z = 3; # [м] Перепад высоты
g = 9.81; # [м/с^2] Ускорение свободного падения
rho = 998; # [кг/м^3] Плотность воды при 293.15 К и 101325 Па
deltaP_h = rho*g*delta_z # [Па] Аналитический асчет падения давления из-за перепада высот
Теперь запустим модель PressureLossAndFlowRateInTLPipe_Insulated
, которая позволяет рассчитать истечение постоянного потока через трубу между двумя резервуарами, перекачиваемые насосом, обеспечивающим постоянный расход 0.4 кг/с.

# engee.close_all()
model = engee.open("$(@__DIR__)/PressureLossAndFlowRateInTLPipe_Insulated.engee")
delta_z = 3;
engee.run(model);
Построим график и изучим результаты расчета:
t = pressure_drop.time;
delta_P = pressure_drop.value;
plot( t, delta_P, ylimits = (2.93e4,2.94e4),
xlabel="Время, с", ylabel="Перепад давления, 10⁴ Па",
yformatter = x->"$(x/10000)", legend=false, lw=2 )
Полностью отклюить трение в блоке "Труба" невозможно, поэтому результаты включают потери на трение, но они существенно меньше чем потеря из-за перепада высоты. Результаты показывают постоянную потерю давления, составляющую около Па, что согласуется с аналитическими результатами (ошибка в три сотых от процента).
Потери давления из-за трения
Потери на трение, как правило, гораздо меньше, чем потери из-за перепада высоты. Однако, если перепад высоты равен нулю, потери на трение станут основной причиной потери давления в трубе.
Рассмотрим латунную трубу,у которой шероховатость поверхности внутренней стенки равна м. Проведем аналитический расчет потерь давления из-за трения в трубе, а затем проверим модель Engee на согласованность с результатами.

Потери давления из-за трения прежде всего зависят от числа Рейнольдса жидкости. Число Рейнольдса — безразмерная величина, используемая в гидродинамике для прогнозирования характера течения. Оно представляет собой отношение инерционности жидкости к ее вязкости. При низких числах Рейнольдса жидкость, как правило, имеет скорее ламинарный поток (инерционность намного превосходит вязкость), с увеличением числа Рейнольдса поток становится более турбулентным.
Число Рейнольдса обычно выражается следующим образом:
где:
-
— скорость потока,
-
— динамическая вязкость жидкости,
-
— диаметр трубы.
Используя выражение для расхода можно переписать выражение:
где — площадь поперечного сечения трубы.
Рассчитаем число Рейнольдса для воды в трубе:
S = pi/4 * D^2; # [м^2] Площадь поперечного сечения трубы
mu = 0.00102; # [Па*с] Динамическая вязкость воды при 293 К и 0,101325 МПа
Re = mdot*D/(S*mu) # число Рейнольдса
Поток, имеющий число Рейнольдса более 4000 обычно считается турбулентным, то есть течением, в котором существенную роль играют хаотические изменения давления и скорости. Потеря давления из-за трения в турбулентном режиме выражается следующим уравнением:
где — длина трубы, — коэффициент трения Дарси.
Коэффициент трения Дарси — безразмерная величина, описывающая сопротивление трения в трубе. Сопротивление трению — сила, препятствующая движению жидкости относительно внутренней поверхности трубы. Трение замедляет поток, что приводит к падению давления, которое можно выразить следующей формулой:
где — мера абсолютной шероховатости внутренней поверхности.
epsilon = 1.52e-6; # [м] Абсолютная шероховатость внутренней поверхности для коммерческих латунных, свинцовых, медных или пластиковых труб
f = 1 / (-1.8 * log10(6.9/Re + (epsilon/3.7)^1.11))^2; # Коэффициент трения Дарси
deltaP_f = f * pipe_length * mdot * abs(mdot) / (2*rho*D*S^2) # [Па] Потеря давления из-за трения
Запустим модель PressureLossAndFlowRateInTLPipe_Insulated
модель и проверим величину потери давления из-за трения.
model = engee.open("$(@__DIR__)/PressureLossAndFlowRateInTLPipe_Insulated.engee")
delta_z = 0; # [м] Высота трубы
engee.run(model);
Построим график результатов и изучим их.
t = pressure_drop.time;
delta_P = pressure_drop.value;
plot( t, delta_P, ylimits = (4.85,4.95),
xlabel="Время, с", ylabel="Перепад давления, 10⁴ Па",
legend=false, lw=2 )
Модель показывает постоянное падение давления 4.878 Па, что соотносится с аналитическим результатом 4.905 Па (ошибка около половины процента).
Мы можем оценить влияние материала стенок трубы с разными коэффициентами потерь на трение на потерю давления:
Material = ["Латунь/Свинец/медь/Пластик", "Сталь или железо (кованое)", "Чугун", "Чугун и ржавчина"];
Roughness = [1.52e-6, 4.6e-5, 2.59e-4, 1.5e-3]; # [м] Абсолютная шероховатость внутренней поверхности
f = 1 ./ (-1.8 .* log10.(6.9/Re .+ (Roughness./3.7).^1.11)).^2; # Коэффициент трения Дарси
Pressure_Loss = f .* pipe_length .* mdot .* abs(mdot) ./ (2*rho*D*S^2); # [Па] Перепад давления из-за трения
using DataFrames
T = DataFrame("Материал" => Material, "Шероховатость" => Roughness, "Перепад давления" => Pressure_Loss)
Таблица показывает, как перепад давления от материала и состояния трубы. Различия небольшие, но в чувствительных системах приводят к сравнительно большим потерям энергии.
Сохранение массы и сжимаемость жидкости
Теперь исследуем, как на расход в трубе скажутся учёт эффекта динамической сжимаемости и добавление источника тепла в модель.
Если отключить параметр "Динамическая сжимаемость" (Fluid dynamic compressibility), то модель трубопровода не будет учитывать динамические эффекты в массе жидкости внутри трубы и расход на выходе всегда будет равен расходу на входе:
где - расход через сечение A, - расход через сечение B.
Поскольку рассматриваемая до сих пор модель устроена именно так, расход на обоих концах трубы будет одинаковым.
model = engee.open("$(@__DIR__)/PressureLossAndFlowRateInTLPipe_Insulated.engee")
delta_z = 0; # [м] Высота трубы
engee.run(model);
Вот результаты расчета для модели без учета сжимаемости.
t = pressure_drop.time;
mdot_a_incompressible = mdot_a.value;
mdot_b_incompressible = mdot_b.value;
plot( t, [mdot_a_incompressible -mdot_b_incompressible],
xlabel="Время, с", ylabel="Массовый расход, (кг/с)", lw=2,
ls=[:solid :dash], label=["mdot_a" "- mdot_b"], ylimits=(-0.5,0.5) )
Массовый расход в портах А и В равен по величине и противоположен по знаку.
Это поведение может измениться, если включить динамическую сжимаемость жидкости. Поскольку масса сжимаемой жидкости неравномерно распределена по всей длине трубы, уравнение баланса массы включает дополнительные члены:
где:
-
— объем жидкости в трубе,
-
— плотность,
-
— давление,
-
— температура,
-
— изотермический модуль объемной упругости,
-
— изобарический коэффициент теплового расширения.
Поскольку труба идеально изолирована, а потеря давления из-за трения незначительна, и . Оба значения можно пренебречь. В этом случае, поскольку правая часть уравнения баланса массы по-прежнему приблизительно равна нулю, труба ведёт себя так же, как и в случае несжимаемой среды, и массовый расход между портом A и портом B не меняется.
Включим динамическую сжимаемость жидкости в блоке "Трубопровод":
engee.set_param!( "PressureLossAndFlowRateInTLPipe_Insulated/Pipe (Advanced) (TL)",
"dynamic_compressibility" => true )
Запустим модель и построим графики:
engee.run(model);
t = pressure_drop.time;
mdot_a_compressible = mdot_a.value;
mdot_b_compressible = mdot_b.value;
plot( t, [mdot_a_compressible -mdot_b_compressible],
xlabel="Время, с", ylabel="Массовый расход, (кг/с)", lw=2,
ls=[:solid :dash], label=["mdot_a" "- mdot_b"], ylimits=(-0.5,0.5) )
Массовые расходы в портах А и В по-прежнему равны по величине и противоположны по знаку.
Чтобы пронаблюдать существенное различие в расходе, добавим учет теплоотдачи, подключив к модели источник тепла. Тогда компонент уравнения, содержащий термин достигнет заметного размера. Рассмотрим модель, в которой температура источника тепла, подключённого к трубе, изменяется линейно во времени.


Построим график температуры при наличии источника тепла в модели.
t = 0:0.1:120
temperature = 200 .+ 1.5t;
plot( t, temperature, xlabel="Время (с)", ylabel="Температура (К)")
Включение в модель эффекта теплопередачи приводит к тому, что правая часть уравнения баланса массы становится вполне заметной, и массовый расход на выходе из трубы начинает увеличиваться. Откроем и запустимPressureLossAndFlowRateInTLPipe_HeatSource
.
model = engee.open("$(@__DIR__)/PressureLossAndFlowRateInTLPipe_HeatSource.engee");
engee.set_param!( "PressureLossAndFlowRateInTLPipe_HeatSource/Pipe (Advanced) (TL)",
"dynamic_compressibility" => true )
engee.run(model);
И построим график с результатами
t = pressure_drop.time;
mdot_a_compressible = mdot_a.value;
mdot_b_compressible = mdot_b.value;
plot( t, [mdot_a_compressible -mdot_b_compressible],
xlabel="Время, с", ylabel="Массовый расход, (кг/с)", lw=2,
ls=[:solid :dash], label=["mdot_a" "- mdot_b"], ylimits=(0.39,0.41) )
Заключение
В начале моделирования температура источника равнялась 200 К, что меньше чем температура воды в трубе, которая составляет 293.15 К. После истечения 55 секунд, температура источника тепла превысила температуру воды, втекающей в трубу. В первой половине эксперимента скорость изменения температуры в трубе была отрицательной, то есть выполнялось . После того, как температура источника тепла превысила температуру воды, поступающей в трубу, тепло начинает передаваться в трубу. В этом случае скорость изменения температуры стала положительной, что приводит к .