CFD理论过渡到编程的傻瓜入门教程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CFD理论过渡到编程的傻瓜入门教程

(注:这是一篇不知道谁写的介绍一维无粘可压缩Euler方程,以及如何编程实现求解该方程的论文。作者从最基本的概念出发,深入浅出的讲解了控制方程,有限体积格式,MSUCL方法,限制器,Roe格式等相关知识。这篇论文我觉得有利于大家学习CFD编程的相关知识,所以推荐给大家。文章的后面附有我写的程序(C语言),

2011)

,写CFD

候我已经都掌握课堂上那些了。

回想自己入门艰辛,不免有一个想法——写点通俗易懂的CFD入门短文给师弟师妹们。本人不打算搞得很系统,而是希望能结合实际,阐明一些最基本的概念和手段,其中一些复杂的道理只是点到为止。目前也没有具体的计划,想到哪里写到哪里,因此可能会很零散。但是我争取让初学CFD的人能够了解一些基本的东西,看过之后,会知道一个CFD代码

怎么炼成的(这“炼”字好像很流行啊)。欢迎大家提出意见,这样我尽可能的可以追加一些修改和解释。

言归正传,第一部分,我打算介绍一个最基本的算例,一维激波管问题。说白了就是一根两端封闭的管子,中间有个隔板,隔板左边和右边的气体状态(密度、速度、压力)不一样,突然把隔板抽去,管子内面的气体怎么运动。这是个一维问题,被称作黎曼间断问题,

方程

这里

、动量和能量随时间的变化()与它们各自的流量(密度流量,动量流量,能量流量)随空间变化(

这里

进一步可以写成散度形式

FVM就是以这个积分关系式出发,把整个流场划分为许多小控制体,每个控制体和周围相邻的某个控制体共享一个界面,通过计算每个界面上的通量来得到相邻控制体之间的影响,一旦每个控制体的变化得到,整个流场的变化也就知道了。

所以,再强调一次,关键问题是计算控制体界面上的。

初学者会说,这个不难,把界面上的插值得到,然后就可以计算。有道理!

咱们画个图,有三个小控制体i-1到i+1,中间的“|”表示界面,控制体i右边的界面用

表示,左边的就是。

|i-1|i|i+1|

好下个问题:每个小控制体长度都是如何插值计算界面上的?

科学家

我眼下的目的是让你快速上手,而且该不刨根问底的时候就不要刨根问底,这也是初学阶段一种重要的学习方法。

好了,既然目的只是为了求,我在这里,只告诉你一种计算方法,也是非常重要、非

常流行的一种方法。简单的说,就是假设流动状态在界面是不连续的,先计算出界面

两边的值,和,再由它们用某种方法计算出。上述方法是非常重要

的,是由一个苏联人Godunov在50年代首创的,后来被发展成为通用Godunov方法,着名的ENO/WENO就是其中的一种。

好了,现在的问题是:

1怎么确定和

2

在他的论文中,是假设每个控制体中是均匀分布的,因此

来计算。什么是

只有

5种情

,怎么计算

Godunov假设的是每个小控制体内是均匀分布,也就是所谓分段常数(piecewiseconstant),所以后来有分段线性(picewiselinear)或者分段二次分布(picewiseparabolic),到后来ENO/WENO出来,那这个假设的多项式次数就继续往上走了。都是用多项式近似的,这是数值计算中的一个强大工具,你可以在很多地方看到这种近似。

Godunov用的是精确黎曼解,太复杂太慢,也不必要,所以后来就有各种近似黎曼解,最有名的是Roe求解器、HLL求解器和Osher求解器,都是对精确黎曼解做的简化。

这个多项式的阶数是和计算精度密切相关的,阶数越高,误差就越小。不过一般来说,分段线性就能得到不错的结果了,所以工程中都是用这个,Fluent、Fastran以及NASA的CFL3D、OverFlow都是用这个。而黎曼求解器对精度的影响不是那么大,但是对整个算

,比如

1和

2

假设控制体内原始变量(就是)的分布是一次或者二次多项式,如果得到了这

左右两个界面的一侧的值和

OK,开始

假设,这个假设不影响最终结论,因为你总可以把一个区间线性的变换到长度为1的区间。

假设压力p在控制体i内部的分布是一个二次多项式,控制体i的中

心处于处,左右两个界面就是和。

这里先强调一个问题,在FVM中,每个控制体内的求解出来的变量实际上是这个控制体

内的平均值。

所以,

和和处的导数可以近似表示为

那么

这样就可以得到f(x)的表达式了,由此可以算出和

通常MUSCL格式写成如下形式

对应我们的推导结果(二次多项式假设)。

但是这不是最终形式。如果直接用这个公式,就会导致流场在激波(间断)附近的振荡。

这里

是一个小数(),以防止分母为

基于特征变量的MUSCL,要复杂一点,但是被认为适合更高精度的格式。然而一般计算中,基于原始变量的MUSCL由于具有足够的精度、简单的形式和较低的代价而被广泛使用。

OK,搞定了。下面进入第二点,怎么求。关于这一点,我不打算做详细介绍了,直

接使用现有的近似黎曼解就可以了,都是通过和计算得到

想了一下,还是把Roe求解器稍微说说吧,力求比较完整。但是不要指望我把Roe求解器解释清楚,因为这个不是很容易三言两语说清的。

Roe求解器的数学形式是这样的

“耗散”。

这里和已经用的定义在第一讲中已经介绍了。只有是

,,和的具体表达式在许多书上都有,而且这里的矩阵表达有问题,所以就不

是由、和代入计算得到。而、和采用所谓Roe平均值

相关文档
最新文档