CFD到底是什么?这个问题对于初学者来说非常重要。因为若是不能正确的理解,则有可能误入歧途,更有甚者,将CFD错误的应用于工程上,导致不可弥补的灾难。
CFD是一个缩写,全称是Computational fluid dynamic,中文翻译为“计算流体动力学”。我们从语法角度进行理解。中心词是“动力学”,由此可知CFD是一门学科,而且是运动力学。何谓“动力学”?学过力学的人都知道,动力学是关于运动和力之间的关系。“动力学”的前面有“流体”二字,表示CFD研究的是流体运动与力之间的关系。而最前面的“计算”一词,则表示CFD是一门关于如何利用计算的手段来研究流体运动与力之间的关系的科学。
与“有限元”不同。“有限元”是一门技术,或者说是一门关于偏微分方程求解的技术。但是CFD却不同,CFD的范围远比有限元宽泛,CFD至少包含了一下四个部分:物理模型的简化抽象、计算方法、计算结果评价以及工程应用技术。因此我们在学习CFD的过程中,不应当只是局限于计算求解上。CFD的应用过程通常也是遵循以上四个过程,首先从现实物理现象中抽象出数学模型(通常是二阶非线性偏微分方程),这一步非常的重要,影响到算法的选择以及结果评估。抽象出数学模型之后,需要寻求合适的计算方式以求解模型,求解方式可以是解析方式,也可以是数值方式。求解完模型后,通常需要辅以试验以对求解结果正确性进行评估验证。结果验证后,如何将计算结果应用到工程上,指导产品设计,则是CFD应用的最根本目的。这四部分内容,其中以第一部分最为重要,以最后一步最为困难。
CFD的核心是对NS方程的处理。然而,CFD计算软件的出现,却在一定程度上掩盖了处理细节,它以一种看似简单的方式对NS方程加以处理。对于CFD初学者来说,计算流体理论的缺乏,使得他们对于软件的一些使用感到无所适从,而且对于软件的计算结果解读也无能为力。就拿目前CFD行业使用最广泛的软件Fluent来举例吧。如果对流动现象的理解不够深刻,则对于软件的一些常见选项,比如稳态还是瞬态,湍流还是层流,是否考虑能量方程,采用何种算法进行离散等等问题,可能一知半解。他们此时的做法通常是找一些相类似的例子,按照例子中的设置方式进行设置,对于计算结果,有时候又缺乏现实试验数据的比对验证。因此,他们判断计算结果的手段常常是依靠直觉,这样进行的CFD计算结果可靠性可想而知,更不要说应用于实际工程中了。
在很多人的心目中,CFD意味着Fluent,意味着star-cd,意味着CFX等等,是这样的么?虽然这些软件功能强大,但是利用它们进行流体力学计算就是CFD么?在我看来,这充其量只是未经验证的CFD计算过程而已。软件工程告诉我们:软件的人机界面越友好,意味着软件封装得越好,也就意味着用户能够获知软件的工作细节的几率越小。然而,我们也受制于这些软件的功能限制,比如说现代软件都对源代码进行了封装,功能的扩充和扩展都必须遵循软件开发者的规定,像Fluent中的UDF与UDS,像CFX与star-cd中的fortran语言。这些二次开发需要遵循软件的规则,一般都是小范围的扩展,核心算法通常是没办法改动的。当然目前有一款称为OpenFoam的软件,它是开放源代码的,有需要研究流体软件开发流程及程序的,可以研究。
软件是计算机出现后的产物,其实在计算机出现之前,CFD就已经在工程上有了应用。工程上最早应用CFD是在天气预报行业,当时是利用了差分方法进行求解。虽然模型是经过了大量的简化,但是无可否认的是采用了CFD方法。计算机相对于人类的计算能力来说的确具有无可比拟的优势,在硬件条件允许的情况下,利用计算机可以完成以前人类难以想象的问题。但是在CFD应用过程中,只有计算的部分是由计算机完成的,其他的部分则和使用者的关系密切。
1、模型的抽象。虽然说NS方程的格式是几乎固定的。然而,NS方程的基础太过宽泛(利用三大守恒定律),因此,受计算机硬件条件限制,对于现实问题,我们往往需要进行大量的假设。这进行假设的能力是计算机无法提供的,因为当前的计算机还不具备识别现实物理现象的能力。如何进行合理假设,或者说如何假设才能将误差降至最小,这是CFD对于使用者提出的第一大难题。解决这一难题,需要用户具备深厚的流体力学功底,具有对物理现象的深刻认识才行。
2、模型的求解计算。虽然说这一部分的工作是有软件来完成,然而算法却是由人给定的。对于一定的数学模型,采用何种计算方法,是用有限体积法,有限元法,有限差分法,还是用其他什么方法,这一切的选择权都在于使用者。软件是将用户的选择进行解析,利用程序员规定的算法进行迭代计算,并最终给出计算结果。然而,算法的选取,控制参数的设定,输入参数的确定等等都是由用户给定的,而这些参数的设置正确与否则与用户的数值计算功底是有密切联系的。计算机是不会识别用户的数学模型而自动选取算法的。
3、计算结果验算。这一部分软件基本上是无能为力的。通常这一部分需要配合现实试验数据进行比对。其实这之间存在一个问题。通常我们认为试验数据是准确的,利用试验来调整计算模型与算法,但是如果对模型和算法的掌握不是很深的话,是没有办法进行正确的修正的。因为如果一开始的模型就是错误的话,就算对于某一算例调整正确了,但是对于修改了参数之后的模型是否还适用,那就有待商榷了。因此,验算部分并不是仅仅将计算结果与实验结果简单对比就了事,而是需要利用试验进行计算模型修正。
4、CFD的工程应用。这一部分看似和使用者的理论关系不大,其实恰恰相反,这部分对使用者要求更高。因为如何将计算结果应用到设计上,要求使用者对改进结构后的流动状态有正确的预测。比如说要降低U型管中流动对管壁的影响,如果用户对流动现象的了解不够深刻的话,那么再好的计算结果,对于如何改进结构都是毫无作用的。
总之,CFD绝不是一两款软件,软件只是CFD中的一个工具罢了。要想真正的将CFD应用于工程实际中,真正的利用CFD指导工程实际,其实对于使用者的理论功底要求是很高的。