6.流函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.流函数求解方法 6.1方法简介
类似于势函数解法,对于理想流体的二维流动在流动区域内流函数也满足Laplace 方程,可以使用类似于势函数的方法进行离散和网格处理,通过递推收敛得到最终结果。也是一种可行的快速求解方法。同时,相较于势函数解法而言,流函数还有一大优势就是在物面满足第一类边界条件,相较于势函数的第二类边界条件而言更加容易描述。然而流函数在求解域边界(近似无穷远)上的边界条件的提法并不是显然的。在这里我们遇到了一些困难,目前估计是由于边界条件的处理并不十分合理导致流函数解发散。这一点在后面会更加详细地讨论。
6.2 程序实现
对于流函数的Laplace 函数
02
222=∂∂+∂∂y
x ψ
ψ 和势函数方法一样,我们需要将对物理平面的导数转化为计算平面的导数。 由于
x x x ηηψξξψψ∂∂+∂∂=∂∂ , y y y ηη
ψ
ξξψψ∂∂+∂∂=∂∂ 令ξηηξy x y x J -=
,得
)(1ξηηψξψψx x J y ∂∂+∂∂-=∂∂ , )(1ξηη
ψξψψy y J x ∂∂-∂∂=∂∂ 所以有
0)()2(1
2
=⋅∆+⋅∆++-=
∆ηξηηηηξξψηψξγψβψαψψJ
其中
22η
ηαy x += , ηξηξβy y x x += ,2
2ξξγy x += yy xx ξξξ+=∆ , yy xx ηηη+=∆
下面将方程离散化
2,1,,1)(2ξψψψψξξ
∆+-=-+j i j i j i , 2
1
,,1,)
(2ηψψψψηη∆+-=-+j i j i j i ξηψψψψψξη∆∆+--=---++-++41
,11,11,11,1j i j i j i j i
ξ
ψψψξ∆-=
-+2,1,1j i j i , ηψψψη∆-=-+21
,1,j i j i
对X,Y 的离散类似于对ψ的离散
另外对xx ξ、yy ξ、xx η、yy η、x ξ、y ξ、x η、y η的离散与势函数解法相同,在这里不再论述。
最后得到迭代式:
)]
()()()()[()(21
1,11,11,11,11,1
,,1,1253534141311,n n n n n n n n n j
i j i j i j i j i j i j i j i j i H H H H H H H H H H H ---++-++-+-++--+-+++-+++=+ψψψψψψψψψ
其中2
2
21ξ
η
η∆+=y x H ,ξηηξηξ∆∆+-=22y y x x H , 2223ηξξ∆+=y x H ξξξ∆+=
24yy xx H ,η
ηη∆+=25yy
xx H
6.3 结果及困难
由于时间仓促,流函数方法求解最终并没能得到一个合理解,目前仍然在debug 中。在这里主要讨论一下不考虑环量条件下的边界条件和物面条件提法的问题。
首先就是边界条件,边界条件的物理提法是无穷远来流条件,然而在对边界的ψ离散后会发现得到的只是一个边界上各点ψ值的相对关系,并不能得到ψ的准确值,然而可以想见,在流场中必然有一条流线从边界(模拟无穷远)出发终止于物面(驻点),那么这条流线对应的与边界的交点S 处的ψ值就应该等于物面的ψ值,然而S 点位置的确定并不是一件显然的事情。我们提出的思路是:
(1)先给出尽可能接近真实值的初始条件
(2)利用迭代关系式求解边界上的ψ值,并与(1)中的“可能”近似解进行比较,在可行的范围内增加一定的约束进行迭代,直至收敛。
具体的方法是(1)以物面的前缘点假设为驻点,沿无穷远来流逆向延伸至边界,设置该点ψ值与物面的ψ值相等,之后利用边界上各点ψ值的相对关系给出边界上的初始ψ值。(2)对于迭代求解的边界ψ值,找到其中与物面ψ值最相近的位置,如果这个位置在初始条件中给出的“可能”位置附近,则承认这组边界条件值中S 点的位置,然后根据新的S 点位置给出下一次迭代使用的边界ψ值。
对于流函数而言,物面显然是一条流线,因而在物面上const =ψ,然而注意到上述递推关系式为ψ的多项式,因而const 最好不要取值为0,这样可以加快收敛速度。另一方面,
ξ∆和η∆的取值最好也不要取的过小,因为这两个数的取值虽然不会影响最终结果,但是
如果取得过小的话会导致计算过程中一些参数变得过大,导致程序中出现NaN (Not A Number )致使程序崩溃。另外在编程过程中如果使用Fortran 语言,在编写subroutine 的过程中要注意变量声明的问题,要尽量使用全局变量而不是在subroutine 中声明大量变量,因为这些变量全部存储在一个栈中,大量变量的声明会导致程序堆栈溢出。同时Fortran 语言中实型、整型的转化也应该注意,否则就会导致一些很难察觉但是影响巨大的错误,这些都是我们在编程过程中遇到的问题。虽然这些都是编程的具体问题,但是在计算流体力学这样
一个集成性很强的学科中,任何一方面的问题都会导致进度受阻,因此程序语言方面的问题也不容忽视。
目前我们的程序已确认没有明显的语法错误,目前求解不收敛,计算域内 值达到NAN,估计可能的原因是边界条件不合理,下面将进行进一步的研究探讨。