今天看到CFD界推送的OpenFOAM与Fluent计算效率比较的文章(见OpenFOAM硬刚ANSYS Fluent!),有一些自己的看法觉得可以聊一聊。
1 关于软件比较
CFD软件计算效率的比较,事实上涉及的问题颇多,并不像擂台打擂谁躺下谁输那么容易分出高下,因为影响计算效率的因素实在是太多了,比如说计算机硬件(CPU、内存、硬盘等)、软件自身的求解算法、使用者对于软件的应用水平等,都会对计算效率产生影响。
先来聊聊软件对比必须满足的必要条件。
-
首先计算环境必须保持一致。OpenFOAM是运行于Linux环境下的,那么如果要比较的话,Fluent也应当在相同操作平台下运行才算数。据我个人使用经验,小规模(200万网格以下)计算,Linux计算效率要略高于Windows环境,但基本没太大区别。然而当网格数量过千万后,Linux下Fluent计算速度会明显高于Windows环境下,有时候甚至能够达到好几倍,比如在有频繁的文件读写操作时就感觉特别明显。另外,就算在Windows环境下,Fluent利用TUI界面计算与GUI界面计算,计算速度差距也极其明显。
-
计算网格必须中立。前些年尝试着比较STAR CCM+和Fluent,结果发现如果用ICEM CFD生成网格,计算结果(计算速度、收敛性等方面)明显地偏向Fluent,而使用STAR CCM+产生网格,则计算结果明显有利于STAR CCM+。在使用OpenFOAM的时候一样存在这种状况,用blockMesh和snappyHexMesh生成的网格最适配OpenFOAM,而使用导入Fluent的msh和cas方式,对OpenFOAM都没什么优势。
-
并行计算的问题。受并行算法的影响,并行计算对于小规模问题并无任何好处。曾经看到有人拿64核的电脑算几万个网格的问题,还到处问别人为啥没有笔记本算得快。现在OpenFOAM多使用OpenMPI作为并行库(也有用其他商业并行库的),而Fluent中除了OpenMPI(默认使用)外,还有Microsoft和intel的并行库,这里不好去评价不同并行库运行效率的差异,但既然是比较软件的计算效率,那至少应该采用相同的并行库进行比较。或者干脆全都用串行计算?然而Fluent已经不支持串行计算了。个人体验,OpenFOAM在CPU数量非常多的时候(>2000)并行加速比会变得非常差,需要在算法级别上改造,Fluent没有实际测试过不好说。不过看官方吹水数据还是很有竞争力的。
-
软件使用熟练程度的问题。软件参数设置会极大的影响到计算效率,这个不用多解释。
-
计算效率评价指标的问题。是以单步迭代时间作为评价指标还是以达到收敛需要的总时间作为评价指标?OpenFOAM中只有SIMPLE系算法,而Fluent中有耦合算法。用过的人都知道耦合算法的收敛能力秒杀SIMPLE系算法十条街,但是耦合算法单步计算时间可能是SIMPLE算法的好几倍,内存消耗大概在1.5倍左右,这怎么评价呢?单步计算速度评价Coupled算法毫无竞争力,但是收敛速度快,达到收敛所需要的时间反而更少。OpenFOAM的SIMPLE系算法算到收敛比较难调(可能是我使用不太熟练的原因),而Fluent的耦合算法几乎不需要调整什么计算参数。
其实个人觉得拿开源软件的默认求解器去与商业软件火拼求解效率,本身就是一件不太公平的事情。当然这里并不是说开源软件的效率就比商业软件差,但是要想想,商业软件的最大卖点是什么,无非就是计算效率和鲁棒性。这两点如果都火拼不过未经专门针对这两点经过强化的开源软件,那商业软件还能活的下去么?那还不如给开源软件开发外壳呢。
2 案例测试
1、OpenFOAM测试
OpenFOAM算例是直接从CFD中文网中下载的。
用的是OpenFOAM 2006中simpleFoam求解器。
采用的是16核计算。
注:不管是用OpenFOAM还是Fluent计算,最好将超线程关掉,计算的时候用硬核计算。
”
迭代了1500步。
本机测试电脑计算配置:
CPU:Intel Xeon Platinum 8179M 2.4GHz 内存:144 GB 硬盘:普通机械硬盘,关闭了超线程
”
忘了放固态硬盘上了,不过鉴于整个过程中并没有文件读写,因此对计算时间倒是没多大影响。
./Allrun
计算持续时间从16:40:57持续到17:10:12,合计时间1755 s。
最终的收敛状态看着还可以,但并未提前收敛终止,导致1500步全部跑完了。
2、Fluent测试
Fluent算例来自于这里。
现在手上没有Linux环境,只能在Windows环境下测试。
-
网格如下图所示。现在无从判断两个软件所使用的计算网格是否完全一样,不过从网格文件大小上来看应该差距不多。
鉴于前面OpenFOAM并未收敛到1e-4,这里将Fluent的残差设置到1e-4,分别试一下SIMPLE算法与Coupled算法。
SIMPLE算法每次迭代计算很快,但收敛性并不好。Fluent新版本是默认使用Coupled算法的,不太明白为何非要使用SIMPLE算法,难道仅仅是比较两个软件中谁的SIMPLE算法写得更好么?放着好用的Coupled算法不用,实属对Fluent不公平,OpenFOAM中如果也有更好的算法,当然也可以用最好的,这里是比较两个软件的综合能力。
Fluent的每一步计算显然耗时更多,但是收敛速度很快。这里没有做更多的收敛控制,仅仅只是将压力速度耦合算法调整为Coupled,并激活了选项Pseudo Transient以及下面的两个辅助选项。
Fluent收敛到1e-3用了77步,耗时304秒(时间持续17:43:40-17:48:44)。
迭代113步收敛到1e-4耗时448秒(时间持续17:43:40-17:51:08)。
收敛残差如下图所示,起始计算残差振荡比较厉害,不过后面稳定了下来。
懒得往下算了,这种三维问题,残差下降到1e-4基本就差不多了。
在本机上大致就这个样子,个人觉得就这个算例来讲,OpenFOAM基本上没有多大竞争力。但是OpenFOAM的优势并不是内置求解器,其最大的优势是开放的源代码以及高度可定制性。而且这仅仅只是一个算例而已,并不能完全作为软件性能优劣的证据。
每个软件都有自己的适用范围,非要去比谁优谁劣实际上并没有多大意义,而且也没办法真正地度量一款软件的全部性能。
注:受限于本人软件使用能力,以上比较结果仅代表个人观点。
”
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册