关键词:CFD,有限元,对流项,圆柱绕流,收敛性
在《流体有限元求解器开发-二维斯托克斯方程》一文中,我们介绍了斯托克斯流动方程的有限元实现。
CFD一般讲的NS方程,即纳维-斯托克斯方程,多出来的“纳维”就是在斯托克斯方程基础上增加了对流项(惯性项)。
这个对流项的引入很不得了,一下把线性方程干成了非线性,让收敛性成为CFD模拟的一大难题,各种人工粘性、求解算法、湍流模型、网格技术等等应运而生,也塑造了CFD玄学的大名。
从90年代,到本世纪前十年,是国内航空大发展的阶段,各种先进型号立项,高速发展。很多空气动力学的课题组在铺天盖地航空研发项目中积累了独门算法,成为航空院校中先富起来的一波。学生们也在这个过程中,锻炼了复杂算法开发能力,因此前些年很多CFD专业的学生毕业后从事金融、软件开发,也完成了“先富”。
时间倏忽而过,就在新型号逐渐变少,科研圈疯狂卷项目卷基金的当下,低空经济、商业航天又给这个行业打了一剂强心剂。一时间,似乎又变的人人都有钱赚。
然而当下和20年前是不一样的,20年前我们的导师辈40岁左右,年富力强,并且项目多,教授少啊,研究生也少,一人一个方向,大家都吃的挺饱。现在我们也到了这个年纪,老一辈虽然到了退休年纪,但是一堆帽子在身,仍然掌握话语权。再环顾身边,一堆师兄弟或者远房师兄弟都在一个口子里面抢项目,大部人活成了科研难民的状态。
如今无论是混高校院所,还是市场上就业,再想像过去那样,学得两三招式就能库库挣大钱,已经不可能了。
控制方程如下:
(1) 连续方程:

(2) 动量方程:


动量方程的第一项就是对流项,这个项之所以麻烦是因为,速度和它的偏导数耦合在一起。我们在数值求解的时候就会面临先有鸡还是先有蛋的问题。
当然,数值方法可以假设先有一只鸡,即预先定义一个初始速度场作为已知量,然后逐渐迭代它以期待收敛。我们在数值方法课程学习中,很多简单方程用这个思路都可以很好地求解。
但是到了NS方程这,它就会忽左忽右,逐渐发散,教你做人。
采用有限元法进行求解。参考《流体有限元求解器开发-二维斯托克斯方程》方法,速度采用三角形二阶单元,压力采用线性单元。
采用伽辽金方法,权函数=插值函数,控制方程与权函数相乘,积分取0,得到单元方程:

不同于《流体有限元求解器开发-二维斯托克斯方程》,只要一次求解就行。左侧单元矩阵中,需要预设的速度结果掺入进去,然后得到新的速度场,然后根据两次迭代的速度结果差异判断是否收敛,当差异足够小的时候,才认为是收敛。
这个和之前开发瞬态热传导求解器思路有点类似,只不过瞬态热传导方程的求解是在时间尺度上迭代。而这个定常流动求解,就是针对速度变量的迭代。它是把非线性求解,转化为线性 交替求解。
其余的边界条件的处理与约束,包括整体求解器框架,基本可以采用之前斯托克斯方程的方法。
我期望开发的求解器可以用于绕流问题的计算,这也是当年开发飞机结冰软件的留下的执念。
为了提升通用性,随便换个翼型都可以用,借助meshpy库开发绕流流场网格生成工具,只要导入翼型壁面的节点,即可完成流场网格创建。

圆柱绕流网格

NACA 0012翼型流场网格
设定圆柱半径为0.05m,考虑流体介质参数:密度:900kg/m3,粘度1.01e-1Pa·s,来流速度0.1m/s。得到绕流结果如下:

圆柱绕流流场结果
之所以没有直接用水或者空气介质参数,是因为...它不收敛。即便是目前这个粘度很高的介质参数,如果来了速度增加到1m/s,它就立刻甩脸子发散了:

翼型绕流
设定NACA0012弦长为1m,考虑流体介质参数:密度:900kg/m3,粘度1Pa·s,来流速度1m/s。得到绕流结果如下:

同样地。增加粘度后才能收敛,否则也是不收敛。比如把速度增加到10m/s:
