计算水动力学报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算水动力学报告
一、计算水动力学概述
随着电子计算机的出现和现代计算机技术的飞速发展,计算流体力学作为新的流体力学分支,集合了数值模拟、数值计算和计算机实验等各方面的特性,主要针对我们日常水力学的数值求解问题。
目前,计算水动力学的发展,已经从一维、二维数值模拟进入三维数值模拟,从势流发展到漩涡运动,从层流发展到紊流模拟,从恒定流发展到非恒定流,从单相流发展到液、固两相流,再到液、固、气三相流,从大范围流动到水流内部机理等都有所研究。其中,对于非恒定流、渗流、自由面溢流、水利机械流动的水力计算、粘性流与紊流模拟的研究都有较大的进展。
二、计算水动力学原理和方法
在计算水动力学中,求解流体力学的方法一种是解析方法,一种是数值方法。对于解析方法,必须要面对基本方程的非线性性质和几何形状不规则这两个难题,这给解析求解带来了很大的困难。
随着电子计算机的发展,开始产生了适用于计算机求解的数值方法,如有限差分法、有限元法、边界积分方程法、快速变换、统计实验法等。它们主要的原理,就是将基本方程进行离散,然后通过各种优化算法,使得数值解尽量的逼近解析解的真值。
三、泊松方程的迭代求解
泊松方程为2222(x,y)u u
f x u
∂∂+=-∂∂,(x,y)∈Ω
其边界条件(x,y)1,(x,y)u =∈∂Ω,其中(){},0,1x y x y Ω=<<
3.1用菱形五点差分离散格式
如下图所示,用直角坐标系在Ω上打网格,令x y h ∆=∆=, xi=ih, yj=jh ,h=1/(N+1), i,j=1,2,……,N.
对泊松方程,在(),y i j x 上用五点差商格式进行二阶偏导离散,即
()()()()22
11221,y 2,y ,y i j i j i j u u x u x u x o h x h +-∂⎡⎤=-++⎣
⎦
∂ ()()()()2211221
,y 2,y ,y i j i j i j u u x u x u x o h y h +-∂⎡⎤=-++⎣
⎦∂ 将离散格式导入泊松方程,经过化简得到
2,1,1,,1,14i j i j i j i j i j ij u u u u u h f +-+-----=
即2,1,1,,1,11
4
i j i j i j i j i j ij u u u u u h f +-+-⎡⎤=++++⎣⎦,截断误差()2
o h 3.2、边界条件的处理
()()0,,01u j u i ==
3.3、代数方程组求解
各内节点菱形五点格式方程+各边界节点方程—代数方程 各方程统一形式:ij nb nb ij u a u b -=∑
其中:(i ,j )内部节点与边界节点的集合Ω; nb 代表与(i ,j )相邻的各结点,也属于集合Ω。 方程组的矩阵形式Au=b
迭代法求解设迭代初值()0ij u ,第一步迭代值()
1ij u ,第二步迭代值
()()()1*
1,0,1,2k k ij ij nb nb ij u w u w a u b k +=-++=∑……直至1max k k ij
ij u u ε+-< (1) J acobi 迭代法()()
1,0,1,2k k ij nb nb ij u a u b k +=+=∑ (2) G auss-Seidel 迭代法()1*,0,1,2k ij nb nb ij u a u b k +=+=∑
*
nb
u 为nb u 最新迭代值 (3) 松弛迭代法(SOR 法)
()()()1*1,0,1,2
k k ij ij nb nb ij u w u w a u b k +=-++=∑
松弛因子w>1,超松弛,加快收敛速度;w<1.欠松弛,放慢收敛速度,避免迭代的不稳定
四、结果分析
采用松弛迭代法
程序如下
!泊松方程菱形5点格式法迭代
program main
implicit none
integer ,parameter:: n=1000,m=100
real :: u(0:m,0:n) ,a(0:n),b(0:n),w,e
integer t,i,j
write (*,*) "输入松弛因子w"
read (*,*) w
write (*,*)"输入收敛精度e"
read(*,*) e
write(*,*)"初始值u(1,1),u(2,1)"
read (*,*) u(1,1),u(2,1)
a(0)=u(1,1)
b(0)=u(2,1)
t=0
!差分方程组
do i=0,n-1
a(i+1)=(1-w)*a(i)+w*0.25*(3+b(i))
b(i+1)=(1-w)*b(i)+w*0.25*(3+a(i+1))
end do
!记录迭代收敛次数
do while (abs(a(t+1)-a(t))>e)
t=t+1
end do
!输出结果
open(10,file="bosong.txt")
write(10,*)"输入松弛因子w" , w
write(10,*)"收敛精度e" , e
write(10,*)"初始值u(1,1),u(2,1)", u(1,1),u(2,1)
do i=0,t
write (10,*) i,a(i)
end do
stop
end
设置边界条件都为1,f(x,y)=0,两个待求解点u(1,1),u(2,1)的初始值都设为 2.1,收敛精度为0.00001,分别取松弛因子为0.8,1.2,1.5,1.7,1.9共5个不同的松弛因子。