CFD访谈(一):看OpenFOAM创始人Henry Weller论CFD!

2017-03-30  by:CAE仿真在线  来源:互联网



CFD界:编程技巧和CFD基本理论,哪一个更加重要?


Henry:了解流体机理和计算流体力学更加重要。大多数CFD工程师并不需要经常编程,因为CFD代码已经非常成熟了,并且包含了非常多的功能。但是对于一个CFD工程师而言,很有必要了解到底什么是“物理”,什么是“边界条件”。这些都和流体动力学有关,而和编程关系不大。


很好地了解CFD的概念在选择合适的数值方法、离散格式、时间步、松弛因子的时候非常有必要。这通常可以通过培训来达到目的,因为本质上其主要通过积累的经验来获得。


使用CFD就像玩乐器,你不能捡起一把小提琴就弹“维尔瓦底”的曲子(CFD界注:著名小提琴演奏家),这需要很长的练习。


然而,相对于GUI的点击型操作,OpenFOAM中CFD算例的自动运行VERY有用,因此如果会写脚本的话就更好了。脚本语言不重要,大家可以使用随便一个脚本语言,只要你熟悉就好。


CFD界:网格对FVM计算重要性如何?


Henry:当然网格大小对流体结构的求解是一个关键的因素。网格对LES/DES更加重要,因为在LES/DES中,网格和湍流尺度有关。网格大小、密度、分布应该小心处理。


并且FVM对网格类型非常敏感,因为FVM使用体心或者面心作为高斯积分点。在做局部插值的时候,例如,面心只从相邻网格获取的时候,如果网格比较有序,FVM只是2阶精度。我在算法中提供了高阶多项式插值方法,这种方法在不规则以及混乱的网格也可以提供2阶精度。但是这些方法很耗费计算资源并且不是很稳定。能避免就避免。总之,网格质量和分布是非常重要的。


另外,有关精度的问题,在对立的面中,存在一种误差对消。例如规则的六面体网格要比规则的四面体网格更加精准(CFD界注:六面体存在3个对立的面,四面体没有),虽然俩种网格在使用中心差分的时候都具有2阶精度。但对于混乱的网格,FVM中,多面体网格要比四面体网格更加精准。


所以基本上说,六面体网格是最好的,并且应该尽量避免不规则和混乱的网格。对于复杂几何,OpenFOAM对网格生成有严格的限制。其求解器对大部分网格也可运行收敛。但是网格这个东西,还是尽可能的做成最好吧!


foamyHexMesh的理念很好,它会生成规则的六面体网格,对于一些复杂的几何区域,它会生成多面体而不是四面体(CFD界:不同于snappyHexMesh生成的夹杂楔形的网格)。然而,foamyHexMesh并不是一个资助的项目并且目前也没有人资助。目前这个程序是VERY脆弱的,因此只是一个演示。


CFD界:从个人经验来讲,如何学习CFD?


Henry:运行算例,从错误中吸取教训,运行更多算例,吸取更多的教训。Live and breath CFD!这是我学CFD的经验。


我从上个世纪80年代开始学习CFD,现在掌握CFD经验的人要比80年代的时候多得多。有更多的培训课,更多的书,因此直接的吸取经验会更加容易。但是当然了,还是从自身经验来学习最好!


CFD界:相对于商业代码,OpenFOAM的特性是什么?


Henry:OpenFOAM是完全免费并且开源的(CFD界注:开源的意思即为使用者可以随意更改软件的内核)!这提供了HUGE的方便,不仅仅在费用上,也表现在灵活性、以及从软件本身来学习CFD上。OpenFOAM不仅仅让CFD工程师可以模拟算例,它也允许CFD工程师来学习CFD方法、开发CFD算法并完善,甚至某一天创造一个可以替代OpenFOAM的软件。


并且,许多CFD问题需要一些特别的功能、算法、方程、边界条件等。在商业软件中植入这些功能可能令人沮丧并且很可能失败。有些情况下可能有必要完全的重新写一个求解器、边界条件等。OpenFOAM提供了最大的灵活以及扩展性。这些对使用CFD做研究的人非常重要,因此我觉得OpenFOAM可能在某一天会替代闭源软件。


CFD界:您为什么选择C++开发CFD代码而不是FORTRAN?


Henry:在1984年本科之前,我最开始的时候从Basic语言学起,然后转移到Pascal和C。在我的论文里我使用FORTRAN-77,不得不说,这实在AWFUL!!!太差劲了!C和Pascal比FORTRAN-77会好一点,实际上在1960年ALGOL-60问世之后,FORTRAN就差不多废弃了。


当我开始我的CFD研究的时候,我拿到的代码是一堆不能编译的令人费解的FORTRAN-77代码。在我学习了几个月之后,我认为我可以玩的更好。在1989年,我接触到了C++,并立即看到了对象起源编程的优势。从那时起,我就开始用C++设计FOAM。然而,在那个年代,C++刚刚问世,并且编译器VERY脆弱甚至不能工作。慢慢的我认识到泛型编程(Generic Programming)对操作场、矩阵、方程等是非常有必要的,在C++模板问世之前,我就使用C方法、宏和脚本得方法来实现。在C++模板问世之后,以及gcc编译器的发布,我把我之前写的代码用C++模板重写,这就是OpenFOAM的前身。


当然了,FORTRAN不能做这些。不过FORTRAN-90有一些面向对象的能力,但是它完全没有泛型编程的功能,据我所知,FORTRAN以后亦不会添加泛型编程的概念。基本上,我个人认为FORTRAN语言快要废了,在1960年那时候就应该埋在土里了。目前使用FORTRAN的人大部分是由于历史原因,只为了新代码能和非常久远的代码兼容。


FORTRAN和C++都因为“向下兼容”而有一些致命的缺点。FORTRAN为了和FORTRAN-77兼容,C++为了和ANSI C兼容。然而最大的区别是,ANSI C本身就是一个非常好的语言,FORTRAN可不是。


在未来,我希望C++被一个更干净、简单、有力的语言代替,这个语言需要支持泛型编程,这对OpenFOAM以及其他相类似的代码非常重要。我一直关注编程语言的发展,我认为C++的可能的代替品有Nim,Rust以及Chapel,然而目前这些语言缺少一些我需要的必要功能,添加这些功能,比如C++中的高度的泛型编程概念,可能需要很多年。我希望他们在若干年后添加这些特性。同时,C++的缺陷需要妥善处理。在C++17中,我希望“概念”(concept)和“模块”(module)特性会被加入,所有的C++编程人员都会受益。


额,这个问题我想说的太多了,尤其是关于C++的缺陷以及我对未来编程语言的期望。这越说越远了,就这么遭!



Henry Weller简介:

CFD Direct联合创始人兼任技术总监,OpenFOAM基金会共同创始人,OpenFOAM架构师,27年OpenFOAM开发经验。


开放分享:优质有限元技术文章,助你自学成才

相关标签搜索:CFD访谈(一):看OpenFOAM创始人Henry Weller论CFD! Fluent培训 Fluent流体培训 Fluent软件培训 fluent技术教程 fluent在线视频教程 fluent资料下载 fluent分析理论 fluent化学反应 fluent软件下载 UDF编程代做 Fluent、CFX流体分析 HFSS电磁分析 

编辑
在线报名:
  • 客服在线请直接联系我们的客服,您也可以通过下面的方式进行在线报名,我们会及时给您回复电话,谢谢!
验证码

全国服务热线

1358-032-9919

广州公司:
广州市环市中路306号金鹰大厦3800
电话:13580329919
          135-8032-9919
培训QQ咨询:点击咨询 点击咨询
项目QQ咨询:点击咨询
email:kf@1cae.com