Engee 文档
Notebook

确定不同罐体高度的液体压力

在本例中,我们将演示导热液体的一个特性,即当液体在罐中时,在不同高度上温度会略有不同。

模型描述

创建一个系统,该系统由一个水箱、一个从蓄水池向水箱泵入液体的泵和几个传感器组成。

image.png

在状态方程描述的实际流体中,由于流体柱中压力的变化(流体静力学效应)和介质的热力学性质,不同高度的温度会略有不同。让我们严格考虑这个问题。

对于服从状态方程的流体,温度和压力分布是由流体静力学定律$\frac{dP}{dh} = \rho(h) \cdot g$ 、状态方程$\rho = \rho(P,T)$ 和$u = u(P,T)$ 以及一些附加效应(热平衡、压缩/膨胀)决定的。$P$ 是压力,$T$ 是温度,$h$ 是高度,$\rho$ 是密度,$g$ 是自由落体加速度,$u$ 是比内能。

下层液体的压力略高,因此罐底液体的温度略高于表面。

实际上,在这里介绍的装置中,不太可能观察到一系列其他热效应。搅拌、泵的热效应以及通过罐壁的热传导都会对液体温度产生影响。

运行模型并分析结果

在我们的模型中,水箱直径为 1$м^2$ ,由泵以 1 公斤/秒的速度注入液体,计算时间为 0 至 1000 秒。液体温度传感器分别位于 1 米、2 米和 3 米高处。

In [ ]:
model_name = "tank_temperature_at_different_heights";
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
res = engee.run( model_name );

在观测期间,罐内液面上升了 1 米。让我们看看不同高度的温度读数有何变化。

In [ ]:
gr()
using Plots.PlotMeasures

plot(
    plot( res["Уровень воды"].time, res["Уровень воды"].value, label=false, title="Уровень воды, м",
      xlabel="Время, с", ylabel="Высота, м" ),
    plot( res["Сенсор 2м.1"].time,
      [res["Сенсор 1м.1"].value res["Сенсор 2м.1"].value res["Сенсор 3м.1"].value],
      label=["1м" "2м" "3м"], title="Датчики температуры", xlabel="Время, с", ylabel="Температура, К"),
    size=(1000,400), titlefont=font(11), guidefont=font(10), left_margin = [10mm 0mm], bottom_margin = 30px
)
Out[0]:

在 1 米和 2 米之间,传感器显示出不同的温度值,但实际上几乎无法改变差异的大小 - 1 米处的温度下降了1.41e-4 К (万分之一度)。但我们可以看到,水箱底部的温度略高于表面温度。

In [ ]:
res["Сенсор 2м.1"].value[1] - res["Сенсор 1м.1"].value[1]
Out[0]:
-0.0001416177920532391

如果我们从温度传感器中提取一张图表,并减去线性趋势,我们甚至可以看到一个非常小的非线性:

In [ ]:
t = res["Сенсор 1м.1"].time
v = res["Сенсор 1м.1"].value
a = [t.^0 t.^1] \ v

разница = v .- (a[1] .+ a[2].*t)

plot( t, разница, label=false )
plot!( [t[1],t[end]], [разница[1],разница[end]], ls=:dash, c=:red, label=false )
plot!(title = "Нелинейный компонент измерения Т", xlabel="Время, с", ylabel="Температура, К\n(нелинейное слагаемое)",
    titlefont=font(11), guidefont=font(10), left_margin = [10mm 0mm], bottom_margin = 30px)
Out[0]:

结论

我们通过一个简单的例子说明了如何利用导热流体库中的模块进行虚拟实验,从而展示一些在教学实验环境中很难观察到的理论效应。但是,它们会在更复杂的情况下显现出来,而这些效应很容易被忽视。