饭旦大学学投代码l 10246学号l 043053112硕士学位论文(专业学位)基于GPU的流体模拟基础张洁基于PU的流体模拟基础ABSTRACTABSTRACTWith the development of technology and the improvement of thecomputing capacity of hardware, computer graphic processors can simulatethe real world more and more realisticallyComputer-generated special effects give us many exciting spectaclesin movies and games. They can be so lifelike that sometimes we can't tellthe truth from the simulation If you like movies, you will never forgetseeing such special effects in such films as The Matrix, Waterworld, HarryPotter, Star Hars, and Chen Ka Ge's The Promise. These special effectsare also the soul of modern games. They make the virtual world morerealistic, helping games to attract and grip players. As the processingcapacity of game consoles, such as the PlayStation and the Xbox, has grownmore and more powerful, it has become increasingly possible to realizea lifelike visual world using softwarePhysics-based fluid flow simulation is commonplace in many scientificand mathematical computations. It also greatly improves the visualfidelity of computer graphics applications. Fluid effects areeverywhere, from rising smoke, clouds, and mist to the flow of rivers andoceansuld say that the potential applications of it are endlessThis report will describe a method for fast, stable fluid simulationIt will introduce fluid dynamics and associated mathematics, anddemonstrate how to implement them on a gPu. After finishing implementationaf the model fluid simulation we can further extend the simulation fordifferent applications.KeywordsSpecial effect, Fluid stimulate, Navier-Stokes第3页共42臾基于cPU的流体模拟基础基础概述第一章概述1.1研究的目的流体模拟,是工程学上最具挑战的问题之一,过去50年里有很多效果被写成很大的流体模拟器,运行于昂贵的超级计算机上。流体的模拟对于计算机图形图像也很重要,生活中,我们常能看见从炙热烟头冒出的塞寥上升的烟,天空中悠悠飘过的云或薄雾,两岸间潺潺流动的小溪,还有两滴颜料被滴入水中的混合……,所有这些现象,它们的本质都是流体的流动。计算机图形模拟的且的,就是为了使玩家能够沉浸到如梦似真的虚拟世界里,那么对流体的模拟自然就必不可少了。图1-1显示了一股升腾的烟的模拟结果图1-1升腾的烟已经有了很多方案来仿照流体的效果,比如说渲染贴图化的粒子,但是,让第4页共42页基jGPU的流体模拟基础基础概述它们运动得逼真不是件容易的事情。更好的办法是运用流体物理学,其理论从欧拉、納维和斯托克斯那个时代(1750’s至1850’s)就开始发展了,这些理论的研究最终产生了纳维-斯托克斯 Navier stokes公式,也就是以后章节中我们将要介绍的。流体动力学是很多更为复杂的模拟的重要组成部分,非常的有用,不应该把它看成一个黑匣子。不能够真正理解流体的基础物理和数学特性,而去拓展更多其他的算法会是非常困难的。致力于这个目的,我们将会讨论其数学模型,并且尽量把其和最后的实现之间的关系理清楚。1.2研究的方向理想流体是真实流体的一种近似模型,这种近似使流体动力学问题大为简化,到19世纪末,理想流体动力学已经形成了完整的体系。这里,我们对理想流体的研究,限定于连续体积的、在二维矩形域中流体,不研究流体间自由表面的边界,比如说水天之间摇晃的海面。但在最后,我们将会有一些对这些基础技巧的拓展,会给出对三维的扩展,以及对其他诸如自由表面的扩展提供进一步研究的重点和提小。虽然最初的的模拟方法是用 CPU(Central Processing Unit)来工作的,而这里我们会选择图形硬件GPU来实现,GPU是以流编程为基础的,适合高效计算,它也非常适合流体模拟所需要的计算方式。我们的模拟是使用一些网格来描述的,可编程的GPU是为像素运算优化过的,我们可以把这些像素认为是那些网格,从而把网格当做像素来处理。 GPU(Graphics Processing Unit)的并行处理使其可以达到很高的性能:它可以同时处理多个顶点和像素。它们也被优化来在每个周期里查找多张贴图。由于我们的模拟网格是以贴图的形式来存贮的,它的这种速度和并行处理正是我们所需要的。下面的文章中,我用解体字来表示标量变量,比如说压力,D我用黑体字来表示矢量,比如说速度,u。所有这些向量都假设为二维的。第5页共42页基于GPU的流体模拟基础数学框架第二章数学框架流体力学中,有两种方式来描述无穷多连续分布微团的运动的方法。第一种方法是最常用的场描述方法,这种方法的基本思想是:在任意制定的时间逐点描述当地的运动特征量(如速度)以及其他的物理量分布(如压力、密度等),这种方法称为欧拉( Euler)描述法。第二种方法是跟踪质点的描述法,这种方法的基本思想是:从某个时刻开始跟踪每一个质点,记录这些质点的位置、速度、邡速度和物理参数的变化,这种方法是离散质点运动描述方法在流体力学中的推广,称为拉格朗日( Lagrange)描述法。为了模拟流体,我们必须对在任何给定时间的流体的状态有一个数学描述。所要表示的最重要的特性是流体的速度场,因为速度决定了流体如何使自己以及其中的物体进行移动。流体的速度在时间和空间上都是有变化的,所以我们用矢量场来表示它。我们可以把速度域定义在一个标准的,N个体素的网格上,d代表了域的维度,每个体素的中心来分配速度,实际上,我们的算法可以在任意d维空间上工作。但是为了清晰起见,以下我们都是用二维来说明。这里我们使用一个二维的笛卡尔网格( Cartesian grid),大小为MxN。每个单元的中心分配速度,当然,其他一些空间参数也是可能存在的,于是,我们的流体的矢量场被定义为任意位置x=(x,y,相应的在时间t的速度u(x,t)=(u(x,t,v(x,t))(考虑三维的话,就是u(x,t)=(u(x,t),v(x,ty(x,t))如图2-1,22图2-1对需要计算的域离散化(维)[8第6页共42页基于GPU的流体模拟基础数学框架(0,M-)(1N-1)(2M1(M1N-1)(0.2)(12)(2.2)(M-12)(01)(2,1)(M-13)Dy00)(20)(M-1图2-2流体的速度格在MxN网格上模拟流体时候的状态如上所示,其中箭头代表速度。[2]2.1纳维-斯托克斯( Navier- Stokes)方程在物理研究上,把复杂的模型作简单的假设进行研究是非常普遍的做法。流体模拟也不例外,我们就假设其为不可压缩、均匀的流体由于压强变化而引起流体密度的变化称为压缩性。气体和液体的缩性有明显区别。气体的密度通常岁压强的增高而增大,随温度的升高而诚小,具有明显的可压缩性,它可用热力学状态方程表示:p(p, n其中7为绝对温度,常见的气体大多数服从完全气体状态方程p=RPl一般来说液体密度几乎不随压强变化,但当温度增加时,密度稍有减小:po[1-β(T-TD]β称为膨胀系数,他表示单位温升时液体密度的相对变化率,通常β在10(1/K)量级。流体力学中,按流体运动中流体密度的相对变化率的大小,把流体分为可第7页共42页基于GPU的流体模拟基础数学框架压缩流和不可压缩流两大类。不可压缩的流体就是说在流场中,任意时间下,流入流管的体积流量等于流出流管的体积流量,即体积是恒定的。流体如果其密度,p在其所在的任意空间中是一个常数的话:我们就称此流体均匀。不可压缩的均匀流体也就意味着p不是时间或空间的函数,是一个恒量。[1]我们假设在一个标准的笛卡尔网格上用空间坐标x=(x,y)和时间变量t来确定其瞬间的场。这个流体的状态用它的矢量速度场u(x,t,还有标量压力场p(x,t)来表示。如果速度和压力在初始时间t=0的时候是已知的,那么之后某个时间的流体状态可以通过不可压缩流体的 Navier-stokes公式来描述出来:uuF(1)这里是流体的密度,是常量,D是运动学上的粘质粘性,而F=(,f表示的是那些作用于流体的外力。注意公式1,它实际上是两个公式,因为u是一个天量(考虑三维的时候就是三个)au/et)u-1/0p+U2u+fv句t=-(u·)w-1/pvp+b至此,我们有三个未知量(u,V和p)和三个方程。Maer- stokes公式看上去有些复杂,让人生畏,但是就像许多复杂的概念一样,我们可以把它分成几部分来考虑,便于理解。在公式1右边的四项就是加速度。我们来一项一项的看。[2]2.2 Navier- Stokes方程中的各项2.2.1平流项想象一下我们在流动的流体中滴几滴颜料,这些颜料将会随着流动,随着速度场被传输,这种现象叫做平流。流体的流动可以将物质,密度,和其他的量进行传输。实际上,流体的速度场携带其自身就象它携带着这些颜料一样。公式1右边第一项表示其速度场的自身平流 seifradvection,即自身速度传递,叫做平流项第8臾共42臾基于GPU的流体模拟基础数学框架2.2.2压力项压力是作用在微团上单位质量流体的压强合力。由于流体的分子可以流向四面八方,它们之间会互相挤压,产生类似“溅”的现象。当力作用于流体,它不会立刻传播到整个体积,实际上,是接近力的分子受到作用,再推压到较远的分子,产生压力。由于压力的不均匀,而受到的力也称为压力梯度力,会导致加速度的产生(正如牛顿第二定律,F=m定义的那样,有力存在就会产生加速度)。第二项,我们叫儆压力项,就是代表了这种力产生的加速度。2.2.3扩散项根据对于真实流体的经验,我们知道有些流体要比其他的要“粘”。例如,蜂蜜流得很慢,而酒流得很快。我们说,那些粘稠的流体有髙的“粘性( vIscOSIty)。粘性是衡量流体抵抗流动的能力的一个标准。这种抵抗力导致了动力的扩散(也就是速度的分散),所以我们称的三项为扩散项。2.2.4外力项第四项产生的加速度是来自作用于流体的外力。这些外力可能是本地的力或者质量产生的力。本地的力是做用于流体的某块特定区域,例如,风吹空气的力量。质量产生的力,如重力,作用于整个流体。接下来,我们将简单复习一下公式里面所要涉及到的矢量的计算以及一些符号,然后再回到我们的 avier-stokes公式。2.3数学识准备公式1和2包括了三种对的不同使用。对它的三种应用是梯度,散度和拉普拉斯算子(二维中=(白x,y),三维中=(日點y日角z)如表2-1所示。第9页共42页基于GPU的流体模拟基础数学框架表2-1用于流体模拟的矢量计算操作符定义有限差形式梯度p126x(⊙DO8n(pm-Dh∥26y散度1,/26x+Qu/ex+ avy(v, Al-Vs J1 /28y拉普拉斯pn,,-2,+p,D)/(6x)23mx+(n1A-2,,+p:)6y其中下标i和j是表示在笛卡尔坐标中的不连续的位置,6x和δy表示的是在x和y方向上的间隔(参考图2-1)梯度是个矢量,它是对标量场求偏导数后形成的,正如前面所解释的,压力的不均匀,会产生压力梯度力;出现在公式2中的散度,它的物理意义是在某块给定区域,单位体积闭合面的通量(我们也可以理解成在单位时间内单位体积内产生的流体质量,如果为负,则表示此处流体在消失)。在 Navier- Stokes公式中,它被应用于流动的速度,用来衡量流体一小块区域表面上速度穿过的净变。公式2,又叫“连续性公式”,通过强制其散度为0来保证我们流体的不可压缩性的假设。在散度计算中的点积运算是求偏导数的和,这意味着散度只能应用于矢量,如用于速度场,u=(u,吵),最终得到的是标量注意,标量场的梯度是一个矢量,矢量场的散度是一个标量。如果再对梯度求散度的话,就得到了拉普拉斯算子Y·=√2。如果坐标单元是正方形的(也就是说δx=6y),拉普拉斯算子就可以简化为:2p-1,jp24,)/(6x)2(3)2.4 Navier- Stokes方程的数学实现№aver- Stokes公式看上去有些复杂,但是正和许多方程的求解一样,我们以把它拆分成几个步骤来完成。首先,我们要把公式拆分成为更适合数学解决的形式。回顾 Navierstokes公式,我们有三个方程求解三个量Uv和p。然而,没有很明显的方法可以求解他们,下面,我们将来进行一些变化,使得可以有直接的算法来求解第10预共42页