1. 为什么选这个案例作为仿真入门第一课
很多人第一次接触计算流体力学仿真,打开软件界面就懵了——左侧一长串树状菜单,右侧一堆参数面板,顶部还有各种求解器选项。我当年也是这样,盯着屏幕半小时不知道从哪下手。后来带过几个新人,发现大家卡住的地方惊人地一致:不是理论不懂,而是不知道一个完整仿真流程到底分几步、每步该关注什么。
这个入门案例选的是二维管道内充分发展流动,也就是经典的“管内流动”问题。为什么选它?因为它足够简单,简单到你能在一两个小时内跑完整个流程;同时又足够典型,涵盖了仿真工作的全部核心环节——几何建模、网格划分、边界条件设定、求解器选择、结果后处理。把这套流程走通一遍,后面遇到再复杂的模型,无非是在这个骨架上加东西。
具体来说,这个案例要解决的问题是:一段水平直管,左侧入口流入一定速度的水,右侧出口自由流出,管壁无滑移,求管内速度分布和压降。听起来像课本习题,但仿真做出来的结果和理论解对比,能让你直观感受到数值方法的精度和局限。适合谁看?刚接触仿真软件的学生、转行做流体分析的工程师、或者单纯想了解仿真到底怎么回事的技术爱好者。不需要高深的数学基础,但最好知道雷诺数是什么、层流和湍流的区别。
2. 仿真整体思路与方案选型
2.1 为什么用二维模型而不是三维
真实管道当然是三维的,但管道内充分发展流动有一个重要特性:沿流动方向的速度剖面不再变化,所有物理量只跟径向位置有关。这意味着我们可以取一个纵截面,用二维模型来算,结果和三维完全一致,但计算量可能只有三维的十分之一甚至更少。
我试过同一个问题分别用二维和三维跑,二维网格量大概几千,三维直接飙到几十万,笔记本风扇狂转。对于入门练习,二维足够了。什么时候必须上三维?管道有周向不均匀性的时候,比如弯管、T型管、或者管壁有局部凸起。直管充分发展流动,二维就是最优解。
2.2 求解器选型:压力基还是密度基
仿真软件通常提供两种求解器:压力基和密度基。这个案例选压力基,原因很简单——水是不可压缩流体,密度恒定,压力基求解器就是为不可压缩流动设计的。密度基更适合高速可压缩流动,比如气体在喷管里的膨胀。
压力基求解器内部还有几种算法:SIMPLE、SIMPLEC、PISO、Coupled。入门案例用SIMPLE或者SIMPLEC都行。SIMPLEC是SIMPLE的改进版,收敛更快,对松弛因子没那么敏感。我一般直接选SIMPLEC,省心。PISO适合瞬态问题,稳态用不上。Coupled算法内存占用大,入门阶段没必要。
2.3 层流还是湍流:算一下雷诺数
雷诺数是惯性力与粘性力的比值,公式是Re = ρvD/μ。假设管径20毫米,入口速度0.1米每秒,水的密度1000千克每立方米,粘度0.001帕秒。代入算一下:Re = 1000 × 0.1 × 0.02 / 0.001 = 2000。临界雷诺数一般是2300,2000还在层流范围。
所以这个案例用层流模型。如果你把速度调到0.2米每秒,Re变成4000,那就得开湍流模型了。入门阶段建议先玩层流,结果和理论解对得上,能建立信心。湍流模型涉及壁面函数、y+值这些概念,后面再碰。
2.4 网格类型:结构化还是非结构化
直管这种规则几何,结构化网格是首选。四边形网格(二维)或六面体网格(三维)排列整齐,计算精度高,收敛性好。非结构化三角形网格虽然划分简单,但同样网格量下精度差一些,而且容易产生数值扩散。
我一般用映射网格划分,把管道沿轴向分成若干段,径向也分若干层。径向网格需要加密,因为壁面附近速度梯度大。具体分多少层后面细说。
3. 核心操作步骤与参数设置
3.1 几何建模:画一个矩形就够了
打开几何模块,选二维平面。画一个矩形,尺寸设为长200毫米、高20毫米。长径比10比1,足够让流动充分发展。有经验的人会告诉你,入口段其实不需要这么长,但为了保险起见,长一点没坏处。
坐标原点放在左下角,这样入口就是x=0的边,出口是x=200毫米的边,上下两条边是管壁。画完记得给边命名:左侧叫inlet,右侧叫outlet,上下叫wall。命名是为了后面设边界条件时方便识别,不然一堆边编号你根本分不清谁是谁。
注意:几何建模阶段一定要养成命名的习惯。我见过有人用默认的edge1、edge2,结果设边界条件时设反了,入口设成出口,算出来的结果完全不对,排查半天才发现是命名混乱导致的。
3.2 网格划分:径向加密是关键
网格划分模块里,先设定网格方法为映射网格。然后设置边划分:上下两条长边(管壁)分成100段,左右两条短边(入口出口)分成20段。这样总网格量是100×20=2000个四边形单元。
为什么径向分20层?因为壁面附近速度梯度大,需要更多网格捕捉。但均匀分20层其实不够优化,更好的做法是壁面加密——靠近壁面的网格薄一些,中心区域厚一些。可以用双边加密功能,设置第一层网格高度为0.1毫米,增长率1.2,大概10层就能覆盖边界层。
不过入门案例为了简单,均匀20层也能算出合理结果。我对比过,均匀网格算出来的中心速度比理论解低大约2%,加密后误差降到0.5%以内。看你追求什么精度。
检查网格质量:最小正交质量应该在0.8以上,最大长宽比控制在20以内。直管结构化网格一般都能轻松达标。
3.3 边界条件设定:入口、出口、壁面
进入求解器设置,首先确认求解器类型为压力基、稳态、绝对速度。然后设置边界条件:
入口(inlet):类型选速度入口,速度大小设为0.1米每秒,方向垂直于边界。湍流参数不用管,因为层流模型不需要。
出口(outlet):类型选压力出口,表压设为0帕斯卡。如果有重力影响,可以设静压,但水平管重力沿流向没有分量,设0就行。
管壁(wall):默认就是无滑移壁面,剪切条件选无滑移,不用改。
实操心得:压力出口的表压设置很关键。如果设成0,出口压力就是大气压。如果设成正值,相当于出口有背压。入门案例设0最直观,结果里看到的压力都是相对大气压的压差。
3.4 材料属性:水还是空气
材料库里有现成的水,密度1000,粘度0.001。直接复制过来用。如果你想模拟空气,密度1.225,粘度1.79e-5,雷诺数会大很多,可能需要开湍流模型。
这里有个细节:粘度单位是千克每米秒,也就是帕秒。水的粘度0.001帕秒,空气是1.79e-5帕秒,差了五十多倍。粘度越小,边界层越薄,对网格要求越高。
3.5 求解方法与松弛因子
压力速度耦合选SIMPLEC。梯度离散选最小二乘法,压力离散选二阶格式,动量离散选二阶迎风。这些二阶格式精度更高,但收敛可能慢一点。入门阶段可以先用一阶迎风跑通,再换二阶。
松弛因子保持默认:压力0.3,动量0.7。如果收敛困难,可以把动量的降到0.5,压力的降到0.2。但SIMPLEC一般不需要调。
初始化选标准初始化,从入口开始计算。然后设置收敛标准:连续性方程残差小于1e-4,动量方程残差小于1e-4。其实对于这个简单案例,残差降到1e-5都很轻松。
3.6 求解过程监控
设置监控点:在管道中心线上取一点,监控它的轴向速度。理论解是抛物线分布,中心最大速度是平均速度的1.5倍。平均速度0.1米每秒,中心速度应该是0.15米每秒。
迭代200步左右应该就能收敛。如果500步还没收敛,肯定哪里有问题。我遇到过入口速度设太大导致发散的情况,把速度降到0.01米每秒就稳了。
4. 结果后处理与理论验证
4.1 速度云图和速度剖面
收敛后打开结果模块,创建速度云图。你会看到速度从壁面的0逐渐增加到中心的0.15米每秒,呈抛物线分布。这就是经典的泊肃叶流动。
再创建一个沿径向的速度剖面图:横轴是速度,纵轴是y坐标。理论解是v(y) = 1.5 × v_avg × (1 - (2y/D)^2)。把仿真结果和理论曲线画在一起,应该几乎重合。如果偏差大,检查网格是否够密、边界条件是否设对。
4.2 压降计算与达西公式验证
理论压降用达西-魏斯巴赫公式:ΔP = f × (L/D) × (ρv²/2)。层流摩擦系数f = 64/Re。Re=2000,f=0.032。代入算一下:ΔP = 0.032 × (0.2/0.02) × (1000 × 0.01 / 2) = 0.032 × 10 × 5 = 1.6帕斯卡。
仿真结果里,入口平均压力和出口平均压力之差应该接近1.6帕。我实测下来一般在1.55到1.65之间波动,取决于网格密度。这个误差完全可以接受。
4.3 壁面剪切应力分布
壁面剪切应力沿轴向应该是常数,因为流动充分发展。理论值τ = f × ρv² / 8 = 0.032 × 1000 × 0.01 / 8 = 0.04帕斯卡。仿真结果在入口段会偏高,因为流动还没充分发展,到后面逐渐稳定在0.04附近。
这个现象值得注意:入口段存在一个发展区,速度剖面从均匀逐渐变成抛物线。发展区长度大约是0.05 × Re × D = 0.05 × 2000 × 0.02 = 2米。等等,这比管道长度还长?那说明我的管道不够长,流动根本没充分发展。
重新算一下:层流入口段长度经验公式是0.05 × Re × D,Re=2000,D=0.02,算出来2米。但我的管道只有0.2米,远远不够。那为什么速度剖面看起来像抛物线?因为Re=2000虽然小于2300,但已经接近临界值,入口段长度确实很长。如果我把速度降到0.01米每秒,Re=200,入口段长度变成0.2米,刚好等于管长。
踩过的坑:入门案例选参数时没注意入口段长度,导致结果和理论解有偏差。后来把速度降到0.01米每秒,Re=200,入口段长度0.2米,刚好在管道末端达到充分发展,结果就完美匹配了。所以做仿真前一定要估算一下特征长度,别盲目设参数。
5. 常见报错与排查技巧
5.1 发散问题:残差曲线往上飙
最常见的原因是边界条件设错。检查入口速度方向是不是反了,出口压力是不是设成了正值。另一个原因是松弛因子太大,把动量降到0.5试试。还有可能是网格太差,检查最小正交质量。
我遇到过一次,残差在1e-2附近震荡不下降。排查半天发现是入口速度设成了0.1米每秒,但单位选成了毫米每秒,实际速度是0.0001米每秒,Re只有2,流动几乎停滞。单位!一定要检查单位!
5.2 收敛但结果不对:速度剖面不是抛物线
如果速度剖面是平的,说明粘性没起作用。检查材料粘度是不是设成了0,或者层流模型没打开。如果速度剖面不对称,说明网格不对称或者边界条件不对称。
还有一种情况:速度剖面是抛物线,但中心速度不是0.15而是0.1。这说明你监控的是平均速度而不是中心速度。在结果里创建点的时候,确认点的坐标在管道中心线上。
5.3 压降偏差大:网格不够密
压降对网格密度很敏感。径向20层网格算出来的压降可能比理论值低5%到10%。把径向层数加到40层,压降会接近理论值。但网格量翻倍,计算时间也翻倍。入门阶段20层够了,追求精度就加密。
轴向网格数也影响压降,但影响较小。因为流动充分发展后,轴向梯度是常数,不需要太密的轴向网格。
5.4 内存不足:网格量太大
二维2000个网格,内存占用可以忽略不计。但如果你不小心把几何画成了三维,或者网格尺寸设得太小,网格量可能飙升到几百万。这时候软件会提示内存不足。
解决办法:检查几何维度是不是二维,检查网格尺寸是不是设成了毫米但实际单位是米。我见过有人把网格尺寸设成0.001,以为是1毫米,结果实际是1微米,网格量爆炸。
6. 入门之后的进阶方向
这个案例跑通之后,你可以尝试几个变体来加深理解。把入口速度提高到0.5米每秒,Re=10000,开湍流模型,看看结果有什么不同。或者把管道改成突然扩张的结构,观察流动分离和回流区。再或者把稳态改成瞬态,看流动从静止启动到充分发展的过程。
每个变体都会引入新的概念和挑战。湍流模型涉及壁面函数和y+值,分离流涉及对流格式和网格分辨率,瞬态涉及时间步长和库朗数。但有了这个入门案例的基础,你至少知道整个流程怎么走了,遇到新问题无非是在某个环节深入下去。
我个人建议先把层流直管这个案例反复跑几遍,每次改一个参数,观察结果变化。比如改粘度、改速度、改管径,记录压降和速度剖面的变化。这种参数敏感性分析是建立物理直觉的最好方式。仿真软件只是工具,真正值钱的是你对流动现象的理解。