确定气缸内稳态温度的有限体积法

计算科学 有限体积
2021-12-19 09:33:47

我试图在 Matlab 中使用有限体积法 (FVM) 对圆柱体的稳态行为进行建模,该方法在 Matlab 中受到各种边界条件的影响。首先,我将圆柱体视为轴对称的,因此我只确定 rZ 平面中的温度分布。我设置了一个 2D 网格,使 r 坐标位于“x”轴上,Z 坐标位于“y”轴上。由于圆柱体是轴对称的,因此 r = 0 处的热通量为 0(绝缘)。我还在 Z=0 的底面上应用绝缘边界条件。侧面有对流,对流系数恒定,空气温度为 310 K。圆柱顶部,z=Z,有 1000 W/m^2 的热通量,来自 310K 空气的对流,还有表面对环境辐射,周围环境为 298 K。气缸的初始温度为 298 K(初始猜测值)。我遇到的问题是温度分布与 Comsol 的结果相匹配,网格为 40x40,热导率为 1。当我将电池数量增加到 50x50、60x60 等时,或者如果我将热导率更改为其他值大于 1 则温度曲线仍然是应有的温度,但所有温度都明显低于预期。我在 Matlab 中的控制循环如下:或者,如果我将热导率更改为 1 以外的值,那么温度曲线仍然是应该的,但所有温度都明显低于预期。我在 Matlab 中的控制循环如下:或者,如果我将热导率更改为 1 以外的值,那么温度曲线仍然是应该的,但所有温度都明显低于预期。我在 Matlab 中的控制循环如下:

  1. 使用初始值和问题常数求解顶部和侧面的初始表面温度。
  2. 使用表面温度和问题几何来确定网格中每个单元的 aE、aN、aS、aW、aP 和 b。
  3. 在两个方向上逐行使用 TDMA 来确定温度曲线。
  4. 计算新温度曲线与前一个温度曲线之间的误差。
  5. 由于使用先前迭代值的非线性辐射项,更新表面温度和 aP 和 b。
  6. 再次逐行执行 TDMA 并检查收敛。如果误差不小于 0.001,则重复该过程。

对于边界条件,我对顶面和侧面使用了能量平衡。顶面包括表面对环境的辐射,我计算出的表面温度为

Tb=αG+hTf+kTpδz+ϵσ(Tsur4+3Tb4)h+4ϵσTb3+kδz

我也对通过对流加热的一侧的表面温度做同样的事情。由于顶面温度取决于其先前的迭代值,因此我对顶面使用初始猜测值 298。然后我根据它和我为第一次迭代提供的方程计​​算初始表面温度,

问题在于表面温度取决于热导率和网格间距。当我使用许多像 80x80 这样的电池时,第一次 TDMA 迭代的顶部表面温度几乎是 298,这很难相信,因为它被 1000 W/m^2 热通量加热,并且它也被 310 K 空气温度加热. 这导致第一次迭代的误差非常小,因此收敛只会产生 325 的最大温度,而它应该是 450。但是如果我使用像 40x40 的网格,那么第一次迭代的表面温度要高得多,并且收敛导致最终的温度曲线看起来几乎与预期的完全一样。

同样的事情发生在热导率上,如果我改变这个值,那么初始表面温度会发生巨大变化,这会导致收敛值远低于预期。

似乎这一切都与初始表面温度有关,但我不确定如何处理它。任何帮助都会令人惊叹,因为我花了很多个晚上直到凌晨 5 点试图弄清楚如何解决这个问题。我的联系电子邮件在我的个人资料中,如果您想查看我的 matlab 代码,或者您想更多地与我讨论我的问题。

1个回答

验证是任何新代码的第一步。我喜欢使用制造解决方案(MMS)的方法,因为它允许使用丰富的解决方案,但也有类似问题的封闭式分析解决方案。在添加辐射项之前,我将首先验证扩散求解器。

这个想法是选择任何平滑函数u(r,z)(不需要是“物理的”)并将其提供给您的微分算子以“制造”您选择的强制项u(r,z)是一个解决方案。然后运行您的数字代码并执行网格收敛研究,评估uhu在每个网格上。确认已达到方法的设计顺序(例如,二次)。如果没有,请进一步简化,直到您看到设计顺序。h

您的症状表明可能存在缩放错误,但无论是什么,MMS 都应该诊断问题。