0.前言
前面的一个系列我们主要从底层逻辑上来讲解各个湍流模型。为了不那么乏味,这次我们换个口味,再开一个系列,来详细说一下Fluent中的边界条件。
不用担心,湍流模型系列我们还会继续进行下去的
已经有很多讲解Fluent边界条件的文章了,基本就是将Fluent帮助手册翻译一遍,主要讲解参数的设置,这已经算是很好的文章了。
既然开这个系列,我们就肯定不会只简单的讲解边界条件参数设置。我们更想深入的理解各个边界条件的本质,把边界条件和数学方程放在一起来理解,同时还想研究一下不同边界条件之间的联系,比如速度入口边界和质量流量入口边界是如何转换的?
当然这个过程肯定也会涉及到Fluent边界条件参数的设置,但这并不是这个系列的重点内容。
首先我们就来看一下最简单的一个边界条件:Velocity inlet速度入口边界条件
1.Velocity inlet速度入口边界
Fluent软件中包含了非常多的边界条件,对于绝大多数 Fluent 用户来说,Velocity Inlet 是最熟悉不过的边界条件。
打开软件,选择入口,输入速度大小、湍流参数、温度,如果有组分再设置一下浓度,然后开始计算,当我们熟悉这个操作之后,会觉得这些是理所应当的。
但是,如果稍微深入思考几个问题,就会发现事情并没有那么简单。
我们学习的传热学告诉我们,偏微分方程有三类边界条件,而 Fluent 却有 Velocity Inlet、Pressure Inlet、Mass Flow Inlet、Pressure Far Field 等十几种边界条件?

Velocity Inlet属于哪一种边界条件?它与 Pressure Inlet 又有什么本质区别?
这些问题确实不影响参数的设置,但却影响到我们对计算过程的理解,这才是我们需要逐渐学习的东西。我们使用Fluent软件肯定不能只是动动鼠标,设置一些参数,更要能够从根本上理解Fluent求解的过程
2.三类边界条件
想要对偏微分方程求解,就离不开边界条件。我们都学习过传热学,都知道对于一个标量偏微分方程,通常将边界条件分为三类。

第一类边界条件(狄利克雷,Dirichlet ):直接给定边界上未知函数的值。比如热传导问题里壁面温度固定为100°C。
温度已知、速度已知、浓度已知,都属于这一类。
第二类边界条件(诺伊曼,Neumann):给定边界上未知函数的法向导数值。比如“壁面热流密度固定”,相当于温度的法向梯度已知。
绝热壁面就是最典型的 Neumann 边界条件。
第三类边界条件(罗宾,Robin):函数值与法向导数的线性组合给定。比如对流换热边界,固体表面温度与外界流体温度之差跟热流成正比。例如
工程中最常见的就是对流换热边界
这三个名字,任何一本偏微分方程教材的前三章里都有。边界上给什么、给多少,决定了方程有没有解、解是否唯一。
但麻烦在于这三类边界条件是针对单个未知变量而言的。而 Navier-Stokes方程并不是一个标量方程,而是一个包含多个未知量的耦合方程组,因此情况会更加复杂。
所以想要搞懂这个过程,我们还需要知道NS方程到底有几个未知量。这个我们在湍流模型系列说过很多次,这里应该比较容易理解
3.NS方程有哪些未知量?
为了简化问题,我们不考虑能量方程,同时以不可压缩流动为例,其控制方程包括连续方程和动量方程:
要注意,上面方程中的速度是三个方向的,NS方程可以拆成三个,所以实际上有四个方程,展开来写可以写成下面的形式
这样我们可以清晰的看出,未知变量包括三个速度分量u,v,w和压力p,四个未知量,而方程恰好有四个。这就是NS方程组能够被求解的数学前提:方程数与未知数相等,系统封闭。
正如第2节所述,既然有四个未知量u,v,w,p,那么理所应当的,无论是哪种边界条件,我们都应该对这四个未知量u,v,w,p进行设置。
了解了这些知识后,我们再来看Fluent中的速度入口边界条件。首先我们来看看速度入口边界条件的参数设置
4.Velocity inlet参数设置详解
我们还是不考虑能量方程、不可压缩流动。由于其他的方程都没有考虑,我们只关注Momentum中的参数设置。
下面的Turbulence是打开湍流模型才会出现的,这部分内容文章:三十三、Fluent边界条件湍流参数设置详解详细讲解过,这里不再说明。
4.1Velocity Specification Method
Velocity Specification Method:速度定义的方式,一共有三种
Magnitude, Normal to Boundary:设置速度大小,且方向垂直于边界,指向边界法向。理解起来很简单,就是需要设置速度大小,方向是垂直边界指向计算域内。
下面是其设置界面,由于其方向和几何边界相关,几何边界确定,方向就确定了。所以这里的速度方向不需要设置。
Magnitude and Direction:设置速度大小和方向。此时方向需要人为设置。
如何设置方向呢?通过下面的X-Component of Flow Direction和Y-Component of Flow Direction的组合来设置速度方向。如果是三维模型,则还需要Z-Component of Flow Direction
实际上,我们通过X-, Y-, Z-Component 定义了速度的单位方向向量。Fluent会用你输入的速度大小乘以这个向量,来计算最终的速度分量。
这个单位方向向量怎么计算呢?X-, Y-, Z-Component分别输入是(a,b,c),这里输入的并不是单位向量,我们需要将其进行转化。
Fluent首先计算这个向量的模长L=sqrt(a²+b²+c²),然后再用这个向量除以模长,变为(a/L,b/L,c/L),这时就变成了单位向量,再用速度大小乘以这个单位向量就是各个方向的速度分量了。
如果输入(1,0,0),就表示速度沿x方向,y和z方向速度都是0;
输入(1,1,0),表示速度在xy平面,呈45°角,z方向没有速度
Components:直接设置速度分量,这个更容易理解,就是Magnitude and Direction的简化过程,Magnitude and Direction中我们费了半天劲计算出来的就是各个方向的速度分量
注:如果是旋转坐标系,速度界面设置的是轴向和径向的速度分量
4.2Reference Frame
Reference Frame:这个选项是专门为存在旋转或平移运动的计算域。有两个选项Absolute和Relative to Adjacent Cell Zone
Absolute:输入的速度值是绝对速度。求解器会直接使用这个值,不做任何转换。
Relative to Adjacent Cell Zone:输入的速度值是相对于相邻流体区域运动的相对速度。求解器会自动加上该区域的旋转/平移速度,换算出绝对速度去求解
如果计算域没有任何旋转或平移,这两个选项完全等效,选哪个都一样
4.3Supersonic/Initial Gauge Pressure
Supersonic/Initial Gauge Pressure:这个设置也是有点难以理解的。需要从两个层面来理解
如果是超音速,也就是Supersonic,这个参数很关键的。此时,它设置的就是边界上的静压Static Pressure。在超音速流中,下游的压力扰动无法逆流传播到入口,因此入口处的静压无法由内部流场决定,必须作为边界条件直接给定。
如果是亚音速,这个参数并不是边界条件。它的作用就转变为一个纯粹的“初始猜测值”,用于初始化流场,变成了初始化的参数。
如果在初始化界面,Compute from选择了速度入口,Fluent会利用这个值,结合等熵关系式,来计算整个计算域的压力、温度、速度的初始值。
注:上面我们介绍了最简单的速度设置参数。实际上界面可能更加复杂。如果我们打开其他的模型,比如打开能量方程,就需要在Thermal栏设置温度,打开组分输运模型,就需要设置Species。相当于多打开一个模型,就需要单独设置一个参数
5.速度入口条件和NS方程的联系
5.1三个速度未知量
我们重点是根据第2节和第3节的内容,看看这里的边界条件是怎么和NS方程联系的。
根据第3节的内容,我们知道在这种情况下,有四个未知量u,v,w,p,所以我们需要对u,v,w,p设置边界条件。通过上面对速度参数的分析,我们设置了u,v,w,p四个参数了吗?
首先是速度,有些同学会觉得我们只设置了一个速度数值,就是下面的Velocity Magnitude,但实际上我们对u,v,w三个速度都进行了设置
因为速度本身就是矢量,我们设置速度大小和方向后,实际上就是设置了三个速度分量,所以u,v,w三个速度都进行了设置
5.2压力未知量
那么压力p设置了吗?有些同学会觉得Supersonic/Initial Gauge Pressure这个参数就是在设置压力边界条件,但并不是,对于不可压缩来说,这个参数最多只能算是初始条件。
那么速度入口边界条件中没有设置压力参数吗?是的,速度入口里没有压力边界输入,但咱们的偏微分方程里面又确实有四个未知量u,v,w,p,边界条件不够完整呀,那怎么求解的方程?
下面我们通过不太严谨的说法来帮助大家理解这个过程。可以从两个层面来理解:
第一层:相较于压力的绝对值,更关心压力梯度
观察NS方程可以发现,对于不可压流动,真正出现在方程中的不是压力本身,而是压力梯度∇p
也就是说真正推动流体运动的是压力梯度,而不是绝对压力值。绝对压力值设置成多少都可以,只要压力梯度正确就行。
所以我们经常说,对于不可压流动,操作压力可以随意设置(这里还涉及到精度问题,不再展开),只要给压力一个参考即可
那么速度入口处的压力梯度怎么确定呢?我们也没有在速度入口处设置压力梯度呀?
实际上,如果不太严谨的分析,既然我们在速度入口给定了速度矢量,意味着边界上每一个点的速度值都是已知的。
既然速度已知,那么:速度的时间导数∂u/∂t是已知的;速度的对流项u▽u可以由已知的速度场算出来;度的扩散项也可以由已知的速度场算出来。
把所有这些已知项统统挪到等号右边,我们就可以得到▽p=一堆完全已知的量
相当于我们设置好速度边界之后,边界的压力梯度值就已经被确定了,但是我们仍然不知道压力的具体数值
第二层:压力在入口处的具体数值,是算出来的,不是设出来的
当我们给了入口速度,求解器通过内部流场的动量方程,自然可以反算出维持这个速度所需要的入口压力。这个反算结果就是你最终在后处理里看到的入口静压值。
举个最简单的例子:一根直管,入口给速度V,出口通大气(静压为0)。求解器算完之后的入口压力,本质上就等价于:
这个入口压力数值是基于流场算出来的答案,为了把这么多流体以这个速度推进管道,系统需要提供多大的入口压力。有点类似从出口压力反推入口压力的过程。所以压力更像一个约束变量,主要作用是保证速度场满足连续方程。
5.3从压力-速度耦合看压力的求解过程
实际上,Fluent求解压力和速度的方式并不是像我们前面说的那么简单。而是另外一种方式,就是我们经常提到的压力-速度耦合算法。为了帮助大家理解速度边界条件,我们必须介绍一下压力-速度耦合算法。
以SIMPLE算法为例,速度和压力必须交替求解:
先假设一个压力场(这叫预估压力)。解动量方程,得到一个不满足连续性方程的初步速度场。检查这个速度场的散度(∇⋅u)。如果入口流多了,出口流少了,说明压力预估错了。据此修正压力场,再回到第2步,直到满足连续性方程
求解器在修正压力时,依据是什么?是速度场的偏差。 修正完压力后,再回过去更新速度。这就导致了在不可压缩NS方程的离散求解中,压力本质上是被速度约束的。 虽然初始时刻你给的是两个独立的场,但只要迭代几步,压力场就会迅速绑定到速度场上去,完全耦合在一起。
所以我们回到前面的问题:为何速度入口不设压力?
在不可压缩流中,压力绝对值由速度场的散度决定。既然是速度入口,那么入口速度就已经确定了,压力在入口处必须自动调整为那个刚好能让入口速度保持住的数值。
如果你在速度入口强行给了压力(比如设p=0),相当于你同时限制了压力和速度,在数学上叫过约束,方程组无解
6.速度入口属于哪类边界条件?
有了前面的铺垫,这个问题可以直接拆解成两部分来回答。
对于速度场:速度入口是第一类狄利克雷边界条件。我们直接给定了速度矢量在边界上的值,Fluent求解器无权修改,必须满足边界速度值,也可称为Essential BC本质边界条件
对于压力场:虽然我们前面说通过速度可以得出压力梯度,这类似第二类边界条件,但对于压力本质上没有施加显式边界条件,压力边界是通过压力修正方程和内部单元耦合形成的自然边界,也就是5.3的压力-速度耦合计算出来的,被称为自然边界Natural Boundary
因此,更准确地说,Velocity Inlet 是一种混合边界条件:速度采用 Dirichlet 边界,而压力则作为未知变量参与整个流场的求解。
7.可压缩流动速度入口边界条件
前面讨论的Velocity Inlet本质主要针对不可压缩流动,而对于可压缩流动,情况确实有所不同。
最大的区别在于:不可压缩流中,压力主要作为连续性约束变量出现;而可压缩流中,压力、密度、温度都是热力学状态变量,压力不再只是一个约束变量。
对于可压缩流动,密度不再是常数,而是和压力相关,此时连续性方程变为:
动量方程:
能量方程:
方程中的未知量变多了,为ρ, u, v, w, T,压力和温度通过理想气体状态方程联系:
那么对于速度入口边界条件,需要设置什么物理边界呢?三个方向的速度肯定需要,然后是温度。
可以看到入口边界条件面板没有密度,为什么呢?这是因为对于可压缩,压力、密度和温度三者只有两个是独立的,前面我们说的变量是ρ, u, v, w, T,也可以认为是p, u, v, w, T,既然边界条件上没有密度,那就需要输入压力!只有输入压力和温度,才能够根据状方程确定密度
所以关键还是压力参数,对于可压缩来说,可以分成两种情况,亚音速和超音速
7.1亚音速
亚音速入口:对于亚音速来说,下游的信息可以逆流传播到入口。 因此,入口处的静压可以由内部流场决定,也就是说给定速度,求解器会根据下游的背压反算出入口需要什么样的静压来维持这个速度,逻辑上跟不可压缩是类似的,给定速度,压力由求解器算。
所以这种情况下,速度入口里面的Supersonic/Initial Gauge Pressure参数,Fluent会直接忽略。它只是一个初始猜测值,用于流场初始化。这也是Fluent帮助文档强调超音速这个参数才可用的原因
注:
既然下游信息能往上传播,如果入口下游某个地方发生了流动阻塞,下游的压力信号就传不上来了。这时候速度入口会强行要求维持你给定的速度,但物理上已经不可能了,求解器会为了满足你的速度要求,把入口总压拉到一个非物理的高度,导致计算发散或给出完全离谱的结果,这就会产生收敛性问题
所以对于可压缩流体,需要谨慎使用速度入口,一般来说可压缩流动,我们都使用压力入口
7.2超音速
超音速入口:一旦入口流动是超音速,信息只能向下游传播,下游的任何扰动都无法逆流影响到入口。
因此入口处的所有流动参数,必须全部作为边界条件显式给定,求解器没有任何办法从内部流场反推出入口处应该是什么状态。
所以速度入口面板里,除了三个速度和温度外,还需要给静压值,怎么给呢?就是那个Supersonic/Initial Gauge Pressure 参数,此时它不再被忽略,而是作为边界上真实的物理静压被求解器使用。
Supersonic/Initial Gauge Pressure这个参数中的"/"实际上是”或“的意思
7.3密度基求解器Outflow Gauge Pressure
如果你用的是密度基求解器 ,速度入口面板里还会多出一个参数叫 Outflow Gauge Pressure(出口表压)
这个参数的用途很特殊,它只在流体从速度入口边界流出计算域时才起作用,什么意思呢?就是发生了回流,只不过是在入口处就发生回流现象了
如果在计算过程中,你原本设置的入口由于压力波动变成了出口,Fluent会把这个边界面临时当作一个压力出口来处理,而这个Outflow Gauge Pressure 就是它在那时候使用的背压值。
为什么密度基才需要这个参数,压力基不需要?而且入口速度是给定的,怎么可能会出现回流呢?这就涉及到压力基和密度基算法的不同,这里我们简单说明
压力基工作原理:是求解器为了保证了入口速度,调整入口处的总压,因此入口压力可能会上升到任何必要的值,以满足我们指定的速度分布。
所以求解器不会让流体从速度入口流出去。如果物理上出现回流趋势,求解器会通过调整压力,维持入口的流入状态。
密度基的工作原理:是压力是直接求解变量,求解出来多少就是多少,如果内部流场因为下游堵塞或其他原因,算出来的边界静压高于你入口能提供的总压对应的静压,流动就会反向。
当然发生这种情况说明出现了问题,一般只有在迭代初期或流动不稳定时,流体才有可能从你设定的速度入口流出去。一旦发生回流,这个边界在物理上就变成了一个压力出口。Outflow Gauge Pressure 这个参数就会起作用,设置一个压力值
8.Velocity Inlet 与 Pressure Inlet 有什么区别?
很多同学认为,Velocity Inlet 和 Pressure Inlet 只是两种不同的入口类型,实际上,这两种边界条件是互补的。
Velocity Inlet 的含义是:入口速度已知,由求解器计算压力分布。
Pressure Inlet 的含义则是:入口压力已知,由求解器计算速度分布。
从数学角度来看,它们实际上是一对互补的边界条件。关于压力进口边界条件,我们下一篇文章再详谈
9.后记
这篇文章并没有完整的讲解速度入口其他参数的设置,已经6300多字了。关于参数设置我认为也没有必要太详细讲解,很多参数都比较简单,可以直接看帮助文档。如果有比较复杂的参数设置,后面我们还是会补上的。
想要看更加详细的参数设置方法,最简单的方式就是看帮助手册