simpop

普通会员

关于fluent和cfx(早期)的区别

作者:takisword

来源:https://zhuanlan.zhihu.com/p/22852481


我开始用fluent和ansys的时候他们还是两家人。200x年ansys先后并了cfx和fluent, 准备把它们合并成统一的cfd求解器(至少这是2008-2010年ansys给他们自己的cfd团队下的目标)。虽然现在有了workbench下统一的cfd求解环境,但是这个是不是统一的还有待商榷。我写这个帖子本来是想说说二者技术上的区别,但是想想过去几年fluent团队其实引入了不少cfxd的features,所以只能把范围限制在最早的版本上。从这些技术区别看cfd的还是很有意思的。

二者最大的区别,也是深深印在各自的code base的区别,是fluent用cell-based体积元,而cfx用vertex-based体积元。

先要说明,二者都是有限体积元法,有些人说cfx是有限元,这是不准确的。

像题图所示,fluent的cell-based体积元是经典的体积元法:以单元为体积控制单位,计算单元边界的流量差产生的平衡方程,这个大家多半都熟悉了。另一方面,cfx的体积元以单元节点为中心,分散到了实际的几个网格单元内。这种体积元选择的区别,对cfd控制方程离散效果本身没有多大影响。但是最直接地影响了求解器底层数据结构。对于fluent,负担离散信息的是体积-界面关系,而对于cfx,这是节点-界面-体积的关系。由于这种类似于有限元的基函数的形式的体积元形式,cfx的方法也被称为control-volume有限元。不过个人认为这是种误导,因为它本质上依然是体积法。这也是Gresho和Sani在他们那本讲不可压缩流有限元的砖头书里面的观点。(那本书有很多站在FEM阵营吐槽FVM界的话)。他们的观点大致是,control-volume有限元是FVM界强扭瓜的产物,类似于poor man's FEM。

使用cfx的vertex-based的体积元的最大好处,就是单元划分更灵活。所以最早cfx是支持混合单元的网格划分而fluent是做不到的。

第二个区别,是cfd方程的离散方式。fluent最早用的是经典的SIMPLE以及其改进,所以本质上基本的pressure-based算法:压力修正速度以满足质量守恒。后来fluent加入了density-based算法: 压力通过状态方程求得,速度和压力通过统一coupled的线性系统求解。而cfx基本上一直在用SIMPLE。

但是SIMPLE本身比PISO等改进版本慢,而早期cfx并不比fluent慢多少,其原因很大程度上是cfx的multigrid求解器。这实际上二者另一个重要的区别。但multigrid是个大题目,需要以后专门说,而且现在fluent也加入了multigrid加速。所以也就不在这里多写了。

总的说来因为fluent团队更大,所以更快速的推出新技能(很多是来自cfx)。笔者近几年没有怎么接触fluent和cfx,对于他们相互的融合的进展没跟进。