空氣動力學數(shù)值方法:有限差分法(FDM)在可壓流中的應用_第1頁
空氣動力學數(shù)值方法:有限差分法(FDM)在可壓流中的應用_第2頁
空氣動力學數(shù)值方法:有限差分法(FDM)在可壓流中的應用_第3頁
空氣動力學數(shù)值方法:有限差分法(FDM)在可壓流中的應用_第4頁
空氣動力學數(shù)值方法:有限差分法(FDM)在可壓流中的應用_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

空氣動力學數(shù)值方法:有限差分法(FDM)在可壓流中的應用1空氣動力學數(shù)值方法:有限差分法(FDM)在可壓流中的應用1.1緒論1.1.1有限差分法的基本概念有限差分法(FiniteDifferenceMethod,FDM)是一種廣泛應用于偏微分方程數(shù)值求解的方法,尤其在空氣動力學領域,用于模擬流體動力學問題。FDM的基本思想是將連續(xù)的偏微分方程在空間和時間上離散化,將連續(xù)域上的問題轉(zhuǎn)化為離散點上的問題,通過在這些離散點上建立差分方程來近似原方程的解。1.1.1.1空間離散化在空間離散化中,我們通常將流場劃分為一系列網(wǎng)格點。例如,考慮一維空間中的可壓流問題,流體的速度和壓力可以表示為函數(shù)ux和px。在有限差分法中,我們選擇一系列離散點xi,其中i=0,1,21.1.1.2時間離散化時間離散化則是將時間域劃分為一系列時間步長Δt1.1.1.3差分方程在有限差分法中,原偏微分方程被轉(zhuǎn)換為差分方程。例如,考慮一維可壓流的連續(xù)性方程和動量方程:連續(xù)性方程:?動量方程:?在離散點xi和時間t連續(xù)性方程:ρ動量方程:ρ其中,上標n和n+1分別表示當前和下一個時間步長,下標i和1.1.2可壓流的物理特性可壓流是指流體的密度隨壓力變化的流體流動,這種流動在高速或涉及大壓力變化的條件下尤為常見??蓧毫鞯奈锢硖匦园ǎ郝曀伲郝曀賑是壓力波在流體中傳播的速度,與流體的溫度和狀態(tài)方程有關。馬赫數(shù):馬赫數(shù)M是流體速度與聲速的比值,是衡量流體流動是否為可壓流的重要指標。狀態(tài)方程:狀態(tài)方程描述了流體的壓力、密度和溫度之間的關系。對于理想氣體,狀態(tài)方程通常表示為p=ρRT,其中1.1.2.1例子:一維可壓流的數(shù)值模擬假設我們有一個一維的可壓流問題,流體在管道中流動,初始條件為ρx,0=1,ux,0=0,邊界條件為importnumpyasnp

importmatplotlib.pyplotasplt

#參數(shù)設置

L=1.0#管道長度

N=100#網(wǎng)格點數(shù)

dx=L/(N-1)#空間步長

dt=0.01#時間步長

gamma=1.4#比熱比

R=287.0#氣體常數(shù)

T=300.0#溫度

#初始化網(wǎng)格和變量

x=np.linspace(0,L,N)

rho=np.ones(N)

u=np.zeros(N)

p=rho*R*T

#時間迭代

forninrange(1000):

rho_new=np.zeros(N)

u_new=np.zeros(N)

p_new=np.zeros(N)

#更新內(nèi)部網(wǎng)格點

foriinrange(1,N-1):

rho_new[i]=rho[i]-dt/dx*(rho[i]*u[i]-rho[i-1]*u[i-1])

u_new[i]=u[i]-dt/dx*(u[i]**2+p[i]/rho[i]-u[i-1]**2-p[i-1]/rho[i-1])

p_new[i]=rho_new[i]*R*T

#更新邊界條件

rho_new[0]=1

u_new[0]=0

p_new[0]=1*R*T

rho_new[-1]=1

u_new[-1]=0

p_new[-1]=1*R*T

#更新變量

rho=rho_new

u=u_new

p=p_new

#繪制結(jié)果

plt.figure(figsize=(10,5))

plt.plot(x,rho,label='Density')

plt.plot(x,u,label='Velocity')

plt.plot(x,p,label='Pressure')

plt.legend()

plt.show()在這個例子中,我們使用了有限差分法來求解一維可壓流的連續(xù)性方程和動量方程。通過迭代更新網(wǎng)格點上的密度、速度和壓力,我們得到了流體在管道中的動態(tài)變化。這個簡單的示例展示了有限差分法在空氣動力學數(shù)值模擬中的基本應用。通過上述介紹和示例,我們了解了有限差分法在可壓流中的應用原理和方法,以及如何通過Python代碼實現(xiàn)一維可壓流的數(shù)值模擬。這為更復雜、多維的空氣動力學問題的數(shù)值求解奠定了基礎。2有限差分法的數(shù)學基礎2.1偏微分方程的離散化在空氣動力學中,流體的運動通常由偏微分方程(PDEs)描述,如連續(xù)性方程、動量方程和能量方程。這些方程在空間和時間上是連續(xù)的,但在數(shù)值求解時,需要將連續(xù)的方程離散化,轉(zhuǎn)換為離散的代數(shù)方程組,以便于計算機處理。2.1.1離散化步驟網(wǎng)格劃分:將連續(xù)的空間域劃分為一系列離散的網(wǎng)格點。時間步長:對于時間依賴問題,選擇合適的時間步長。差分逼近:使用差商代替導數(shù),將PDEs轉(zhuǎn)換為差分方程。2.1.2示例:一維可壓縮流的連續(xù)性方程考慮一維可壓縮流的連續(xù)性方程:?其中,ρ是密度,u是速度,t是時間,x是空間坐標。2.1.2.1離散化假設我們有一個均勻網(wǎng)格,網(wǎng)格間距為Δx,時間步長為Δt。在網(wǎng)格點i和時間n,密度和速度分別表示為ρi使用中心差分逼近空間導數(shù),向前差分逼近時間導數(shù),我們得到:ρ2.1.3代碼示例#Python示例代碼:一維可壓縮流連續(xù)性方程的有限差分法

importnumpyasnp

#參數(shù)設置

rho=np.zeros(100)#密度數(shù)組

u=np.zeros(100)#速度數(shù)組

dt=0.01#時間步長

dx=0.1#空間步長

N=100#網(wǎng)格點數(shù)

#初始條件

rho[0]=1.2#初始密度

u[0]=0.5#初始速度

#邊界條件

rho[N-1]=1.0#最后一個網(wǎng)格點的密度

u[N-1]=0.0#最后一個網(wǎng)格點的速度

#主循環(huán):時間推進

forninrange(1000):#迭代次數(shù)

foriinrange(1,N-1):#空間網(wǎng)格點

rho[i]=rho[i]-dt/dx*(u[i]*rho[i]-u[i-1]*rho[i-1])

u[i]=u[i]-dt/dx*(u[i]**2-u[i-1]**2)

#輸出結(jié)果

print(rho)

print(u)2.2差分格式的構(gòu)造與分析差分格式的選擇直接影響到數(shù)值解的準確性和穩(wěn)定性。常見的差分格式包括中心差分、向前差分和向后差分。2.2.1中心差分格式中心差分格式在空間上提供二階精度,適用于內(nèi)部網(wǎng)格點。?2.2.2向前差分格式向前差分格式在空間上提供一階精度,適用于邊界條件的處理。?2.2.3向后差分格式向后差分格式同樣在空間上提供一階精度,也適用于邊界條件的處理。?2.2.4穩(wěn)定性分析差分格式的穩(wěn)定性可以通過馮·諾伊曼穩(wěn)定性分析來評估。對于線性問題,如果差分格式的放大因子的模小于或等于1,則該格式是穩(wěn)定的。2.2.5代碼示例:穩(wěn)定性分析#Python示例代碼:馮·諾伊曼穩(wěn)定性分析

importnumpyasnp

#參數(shù)設置

k=1.0#波數(shù)

dt=0.01#時間步長

dx=0.1#空間步長

c=1.0#波速

#計算放大因子

G=np.exp(-1j*k*c*dt/dx)

#穩(wěn)定性檢查

ifabs(G)<=1:

print("差分格式穩(wěn)定")

else:

print("差分格式不穩(wěn)定")2.2.6總結(jié)有限差分法通過將連續(xù)的偏微分方程離散化為代數(shù)方程組,為數(shù)值求解空氣動力學問題提供了一種有效的方法。選擇合適的差分格式和進行穩(wěn)定性分析是確保數(shù)值解準確性和可靠性的關鍵步驟。3可壓流的控制方程3.1連續(xù)性方程的有限差分形式在空氣動力學中,連續(xù)性方程描述了流體質(zhì)量的守恒。對于可壓流,連續(xù)性方程可以表示為:?其中,ρ是流體密度,u、v和w分別是流體在x、y和z方向的速度分量。將此方程轉(zhuǎn)換為有限差分形式,我們可以在網(wǎng)格點上離散化方程,從而得到數(shù)值解。3.1.1例子假設我們有一個二維網(wǎng)格,我們使用中心差分格式來離散化連續(xù)性方程。在網(wǎng)格點i,ρ其中,Δt、Δx和Δy分別是時間步長和空間步長。上標n表示當前時間步,而3.1.2代碼示例#定義網(wǎng)格參數(shù)

dx=1.0#空間步長x方向

dy=1.0#空間步長y方向

dt=0.01#時間步長

rho=np.zeros((nx,ny))#密度矩陣

u=np.zeros((nx+1,ny))#x方向速度矩陣

v=np.zeros((nx,ny+1))#y方向速度矩陣

#定義邊界條件

#假設所有邊界上的速度為0

#迭代求解

forninrange(nt):

foriinrange(1,nx):

forjinrange(1,ny):

rho[i,j]+=(1/dt)*(u[i,j]-u[i-1,j])*dy+(v[i,j]-v[i,j-1])*dx

#更新密度矩陣

rho+=-rho/dt3.2動量方程的有限差分形式動量方程描述了流體動量的守恒,對于可壓流,動量方程可以表示為:?其中,p是流體壓力,μ是流體的動力粘度。同樣,我們可以通過有限差分法在網(wǎng)格點上離散化動量方程。3.2.1例子在二維網(wǎng)格上,使用中心差分格式離散化x方向的動量方程:ρ3.2.2代碼示例#定義壓力矩陣

p=np.zeros((nx,ny))

#定義動力粘度

mu=0.01

#迭代求解動量方程

forninrange(nt):

foriinrange(1,nx-1):

forjinrange(1,ny-1):

u[i,j]+=(dt/(rho[i,j]*dx))*(p[i+1,j]-p[i-1,j])-(dt/dx)*(rho[i,j]*(u[i,j]-u[i-1,j]))-(dt/dy)*(rho[i,j]*(v[i,j]-v[i,j-1]))+(dt/dx**2)*mu*(u[i+1,j]-2*u[i,j]+u[i-1,j])+(dt/dy**2)*mu*(u[i,j+1]-2*u[i,j]+u[i,j-1])3.3能量方程的有限差分形式能量方程描述了流體能量的守恒,對于可壓流,能量方程可以表示為:?其中,E是總能量,包括內(nèi)能和動能。我們同樣可以使用有限差分法在網(wǎng)格點上離散化能量方程。3.3.1例子在二維網(wǎng)格上,使用中心差分格式離散化能量方程:ρ3.3.2代碼示例#定義總能量矩陣

E=np.zeros((nx,ny))

#迭代求解能量方程

forninrange(nt):

foriinrange(1,nx-1):

forjinrange(1,ny-1):

E[i,j]+=(dt/(rho[i,j]*dx))*(rho[i,j]*u[i,j]*(E[i,j]-E[i-1,j]))-(dt/dy)*(rho[i,j]*v[i,j]*(E[i,j]-E[i,j-1]))-(dt/dx)*(p[i+1,j]*u[i+1,j]-p[i-1,j]*u[i-1,j])-(dt/dy)*(p[i,j+1]*v[i,j+1]-p[i,j-1]*v[i,j-1])+(dt/dx**2)*mu*(u[i+1,j]-2*u[i,j]+u[i-1,j])*u[i,j]+(dt/dy**2)*mu*(v[i,j+1]-2*v[i,j]+v[i,j-1])*v[i,j]+(dt/dx**2)*mu*(u[i,j]-u[i-1,j])**2+(dt/dy**2)*mu*(v[i,j]-v[i,j-1])**2通過上述有限差分法的離散化,我們可以求解可壓流的連續(xù)性方程、動量方程和能量方程,從而得到流場的數(shù)值解。這些解可以用于分析空氣動力學中的各種現(xiàn)象,如激波、渦流和邊界層分離等。4數(shù)值求解方法4.1顯式與隱式求解技術4.1.1顯式求解技術顯式求解技術在有限差分法中是一種直接計算方法,其中當前時間步的解可以直接從上一時間步的解計算得出,無需求解線性方程組。這種方法簡單直觀,但可能受到穩(wěn)定性條件的嚴格限制,尤其是在處理可壓縮流問題時。4.1.1.1原理考慮一維可壓縮流的連續(xù)性方程和動量方程,顯式方法可以表示為:??其中,ρ是密度,u是速度,p是壓力。在顯式方法中,我們使用差分近似來代替這些導數(shù):ρρ這里,上標n和n+1分別表示當前和下一時間步,下標4.1.1.2代碼示例importnumpyasnp

#參數(shù)設置

rho=np.zeros(100)#密度

u=np.zeros(100)#速度

p=np.zeros(100)#壓力

dt=0.01#時間步長

dx=0.1#空間步長

rho[0]=1.2#初始密度

u[0]=10#初始速度

#顯式求解

forninrange(100):

foriinrange(1,len(rho)-1):

rho[i]=rho[i]-dt/dx*(0.5*(rho[i+1]*u[i+1]-rho[i-1]*u[i-1]))

u[i]=u[i]-dt/dx*(0.5*(rho[i+1]*u[i+1]**2+p[i+1]-rho[i-1]*u[i-1]**2-p[i-1]))4.1.2隱式求解技術隱式求解技術在有限差分法中需要在每一時間步求解一個線性方程組,以獲得下一時間步的解。這種方法可以提供更好的穩(wěn)定性,允許使用較大的時間步長,但計算成本較高。4.1.2.1原理隱式方法中,方程的差分形式包含下一時間步的未知數(shù):ρρ這些方程組通常需要使用迭代方法或直接求解器來求解。4.1.2.2代碼示例importnumpyasnp

fromscipy.sparseimportdiags

fromscipy.sparse.linalgimportspsolve

#參數(shù)設置

rho=np.zeros(100)#密度

u=np.zeros(100)#速度

p=np.zeros(100)#壓力

dt=0.1#時間步長

dx=0.1#空間步長

rho[0]=1.2#初始密度

u[0]=10#初始速度

#構(gòu)建差分矩陣

A=diags([1,-2,1],[-1,0,1],shape=(len(rho)-2,len(rho)-2))

A=A/(2*dx)*dt+np.eye(len(rho)-2)

#隱式求解

forninrange(100):

b_rho=rho[1:-1]-dt/dx*(0.5*(rho[2:]*u[2:]-rho[:-2]*u[:-2]))

b_u=u[1:-1]-dt/dx*(0.5*(rho[2:]*u[2:]**2+p[2:]-rho[:-2]*u[:-2]**2-p[:-2]))

#求解線性方程組

rho[1:-1]=spsolve(A,b_rho)

u[1:-1]=spsolve(A,b_u)4.2迭代求解方法迭代求解方法是求解非線性方程組或大型線性方程組的常用技術。在空氣動力學數(shù)值模擬中,迭代方法可以用于隱式求解技術中的線性方程組求解。4.2.1原理迭代方法通過一系列逐步逼近的解來求解方程組,直到滿足收斂標準。常見的迭代方法包括Jacobi迭代、Gauss-Seidel迭代和SOR(SuccessiveOver-Relaxation)迭代。4.2.1.1代碼示例importnumpyasnp

#參數(shù)設置

rho=np.zeros(100)#密度

u=np.zeros(100)#速度

p=np.zeros(100)#壓力

dt=0.1#時間步長

dx=0.1#空間步長

rho[0]=1.2#初始密度

u[0]=10#初始速度

#Gauss-Seidel迭代求解

defgauss_seidel(A,b,x,iterations):

for_inrange(iterations):

foriinrange(len(x)):

x[i]=(b[i]-np.dot(A[i,:i],x[:i])-np.dot(A[i,i+1:],x[i+1:]))/A[i,i]

returnx

#構(gòu)建差分矩陣

A=diags([1,-2,1],[-1,0,1],shape=(len(rho)-2,len(rho)-2))

A=A/(2*dx)*dt+np.eye(len(rho)-2)

#隱式求解

forninrange(100):

b_rho=rho[1:-1]-dt/dx*(0.5*(rho[2:]*u[2:]-rho[:-2]*u[:-2]))

b_u=u[1:-1]-dt/dx*(0.5*(rho[2:]*u[2:]**2+p[2:]-rho[:-2]*u[:-2]**2-p[:-2]))

#使用Gauss-Seidel迭代求解

rho[1:-1]=gauss_seidel(A,b_rho,rho[1:-1].copy(),100)

u[1:-1]=gauss_seidel(A,b_u,u[1:-1].copy(),100)4.3時間步長與穩(wěn)定性條件在有限差分法中,時間步長的選擇對數(shù)值解的穩(wěn)定性至關重要。穩(wěn)定性條件通常由CFL(Courant-Friedrichs-Lewy)條件給出,它限制了時間步長與空間步長之間的關系。4.3.1原理CFL條件基于波在流體中傳播的速度,確保數(shù)值解不會出現(xiàn)非物理的振蕩或發(fā)散。對于可壓縮流,CFL條件可以表示為:C其中,c是聲速。4.3.2數(shù)據(jù)樣例假設我們有以下參數(shù):u=c=Δx為了滿足CFL條件,我們可以計算出允許的最大時間步長Δtimportnumpyasnp

#參數(shù)設置

u=10#速度

c=340#聲速

dx=0.1#空間步長

#計算CFL條件下的最大時間步長

dt_max=dx/(u+c)

print(f"最大允許時間步長:{dt_max:.6f}s")輸出結(jié)果:最大允許時間步長:0.000294s因此,在這個例子中,為了保持數(shù)值解的穩(wěn)定性,時間步長Δt應該小于或等于0.0002945邊界條件處理5.1壁面邊界條件的實施在空氣動力學數(shù)值模擬中,壁面邊界條件的處理至關重要,它直接影響到流場的準確性和穩(wěn)定性。壁面邊界條件通常包括無滑移條件(即壁面上的速度為零)和絕熱條件(即壁面上的熱流為零)。在有限差分法中,這些條件的實施可以通過在網(wǎng)格邊界上應用特定的差分公式來實現(xiàn)。5.1.1無滑移條件假設我們有一個二維流場,其中x和y方向的速度分別為u和v。在壁面邊界上,無滑移條件要求u=0和v=0。在有限差分網(wǎng)格中,如果壁面位于y=0,我們可以使用中心差分公式來更新y方向的速度例如,如果壁面位于網(wǎng)格的左側(cè)(x=0),我們可以使用向后差分公式來更新x方向的速度u其中,u0n+1是下一個時間步的x方向速度,u0n是當前時間步的x方向速度,Δt是時間步長,Δx是空間步長,5.1.2絕熱條件絕熱條件意味著壁面上沒有熱量交換,即熱流為零。在數(shù)值模擬中,這通常意味著溫度梯度在壁面上為零。例如,如果壁面位于y=0,我們可以使用中心差分公式來更新溫度T這意味著:T5.1.3代碼示例假設我們有一個二維網(wǎng)格,其中包含速度u、v和溫度T。以下是一個Python代碼示例,展示了如何在壁面邊界上實施無滑移和絕熱條件:importnumpyasnp

#假設網(wǎng)格大小為10x10

grid_size=10

u=np.zeros((grid_size,grid_size))

v=np.zeros((grid_size,grid_size))

T=np.zeros((grid_size,grid_size))

#時間步長和空間步長

dt=0.1

dx=0.1

dy=0.1

#更新速度和溫度

forninrange(100):#假設模擬100個時間步

#更新內(nèi)部網(wǎng)格點的速度和溫度

#...(此處省略內(nèi)部網(wǎng)格點的更新代碼)

#實施壁面邊界條件

#無滑移條件

u[:,0]=0#假設壁面位于y=0

v[:,0]=0

#絕熱條件

T[:,0]=T[:,1]#假設壁面位于y=0

#輸出最終狀態(tài)

print("最終速度場u:")

print(u)

print("最終速度場v:")

print(v)

print("最終溫度場T:")

print(T)5.2遠場邊界條件的處理遠場邊界條件通常用于模擬無限遠的邊界,即流體在邊界處的性質(zhì)不受內(nèi)部流場的影響。在有限差分法中,遠場邊界條件的處理可以通過在邊界上應用特定的差分公式,以保持邊界處的流體性質(zhì)不變。5.2.1遠場邊界條件的實施在遠場邊界上,我們通常設定流體的速度、壓力和溫度等于自由流的值。例如,如果遠場邊界位于x=uvpT其中,ufree、vf5.2.2代碼示例以下是一個Python代碼示例,展示了如何在遠場邊界上實施邊界條件:#假設自由流的速度、壓力和溫度

u_free=1.0

v_free=0.0

p_free=101325.0#帕斯卡

T_free=300.0#開爾文

#更新速度和溫度

forninrange(100):#假設模擬100個時間步

#更新內(nèi)部網(wǎng)格點的速度和溫度

#...(此處省略內(nèi)部網(wǎng)格點的更新代碼)

#實施遠場邊界條件

u[:,-1]=u_free#假設遠場邊界位于x=grid_size

v[:,-1]=v_free

p[:,-1]=p_free

T[:,-1]=T_free

#輸出最終狀態(tài)

print("最終速度場u:")

print(u)

print("最終速度場v:")

print(v)

print("最終壓力場p:")

print(p)

print("最終溫度場T:")

print(T)5.3特殊邊界條件的考慮在某些情況下,流體邊界可能具有特殊的性質(zhì),例如進氣口、排氣口或旋轉(zhuǎn)壁面。這些特殊邊界條件的處理需要更復雜的差分公式和算法。5.3.1進氣口邊界條件進氣口邊界條件通常需要設定速度、壓力和溫度的特定值,這些值可能隨時間變化。例如,如果進氣口位于x=uvpT5.3.2排氣口邊界條件排氣口邊界條件通常需要設定壓力,而速度和溫度則由內(nèi)部流場決定。例如,如果排氣口位于x=p5.3.3旋轉(zhuǎn)壁面邊界條件旋轉(zhuǎn)壁面邊界條件需要考慮壁面的旋轉(zhuǎn)速度,這將影響壁面上的速度分布。例如,如果壁面位于y=0,并且以速度uv5.3.4代碼示例以下是一個Python代碼示例,展示了如何在進氣口、排氣口和旋轉(zhuǎn)壁面上實施特殊邊界條件:#假設進氣口和排氣口的邊界條件

defu_inlet(t):

return1.0+0.1*np.sin(2*np.pi*t/10)

defv_inlet(t):

return0.0

defp_inlet(t):

return101325.0

defT_inlet(t):

return300.0+10.0*np.sin(2*np.pi*t/10)

defp_outlet(t):

return101325.0

#假設旋轉(zhuǎn)壁面的旋轉(zhuǎn)速度

omega=0.1

#更新速度和溫度

forninrange(100):#假設模擬100個時間步

t=n*dt#當前時間

#更新內(nèi)部網(wǎng)格點的速度和溫度

#...(此處省略內(nèi)部網(wǎng)格點的更新代碼)

#實施特殊邊界條件

u[0,:]=u_inlet(t)#進氣口位于x=0

v[0,:]=v_inlet(t)

p[0,:]=p_inlet(t)

T[0,:]=T_inlet(t)

p[:,-1]=p_outlet(t)#排氣口位于x=grid_size

#旋轉(zhuǎn)壁面位于y=0

foriinrange(grid_size):

u[i,0]=-omega*i*dy

v[i,0]=omega*i*dx

#輸出最終狀態(tài)

print("最終速度場u:")

print(u)

print("最終速度場v:")

print(v)

print("最終壓力場p:")

print(p)

print("最終溫度場T:")

print(T)以上代碼示例展示了如何在不同的邊界上實施特定的邊界條件,包括壁面、遠場、進氣口、排氣口和旋轉(zhuǎn)壁面。這些邊界條件的正確實施對于空氣動力學數(shù)值模擬的準確性和穩(wěn)定性至關重要。6有限差分法在可壓流中的應用案例6.1維超音速流的數(shù)值模擬6.1.1原理在二維超音速流的數(shù)值模擬中,有限差分法(FDM)被廣泛應用于求解流體動力學的基本方程組,即歐拉方程或納維-斯托克斯方程。對于超音速流,這些方程通常是非線性的,且包含激波等復雜現(xiàn)象。FDM通過將連續(xù)的偏微分方程離散化為差分方程,將流場劃分為網(wǎng)格,然后在每個網(wǎng)格點上計算流體的物理量,如速度、壓力和密度。6.1.2內(nèi)容6.1.2.1歐拉方程二維超音速流的歐拉方程可以表示為:?其中,U是狀態(tài)向量,F(xiàn)和G是沿x和y方向的通量向量。6.1.2.2差分格式常見的差分格式包括中心差分、上風差分和Lax-Wendroff格式。在超音速流中,上風差分格式因其穩(wěn)定性而被優(yōu)先選擇。6.1.2.3邊界條件邊界條件的正確設置對于模擬的準確性至關重要。在二維超音速流中,通常需要處理入口、出口、壁面和遠場邊界條件。6.1.2.4激波捕捉激波捕捉技術,如通量限制器和人工粘性,用于準確模擬激波和激波與流體的相互作用。6.1.3示例下面是一個使用Python和NumPy庫進行二維超音速流數(shù)值模擬的簡化示例。此示例使用上風差分格式求解歐拉方程。importnumpyasnp

#定義網(wǎng)格大小和時間步長

nx,ny=100,100

dx,dy=1.0,1.0

dt=0.01

#初始化狀態(tài)向量

U=np.zeros((3,nx,ny))

U[0,:,:]=1.0#密度

U[1,:,:]=0.5#x方向速度

U[2,:,:]=0.0#y方向速度

#定義通量函數(shù)

defflux(U):

rho=U[0,:,:]

u=U[1,:,:]/rho

v=U[2,:,:]/rho

p=(gamma-1.0)*(U[0,:,:]-0.5*rho*(u**2+v**2))

F=np.array([U[1,:,:],U[1,:,:]*u+p,U[1,:,:]*v])

G=np.array([U[2,:,:],U[2,:,:]*u,U[2,:,:]*v+p])

returnF,G

#上風差分格式

defupwind(U,F,G):

U_new=np.zeros_like(U)

U_new[0,1:,:]=U[0,1:,:]-dt/dx*(F[0,1:,:]-F[0,:-1,:])

U_new[1,1:,:]=U[1,1:,:]-dt/dx*(F[1,1:,:]-F[1,:-1,:])

U_new[2,:,1:]=U[2,:,1:]-dt/dy*(G[2,:,1:]-G[2,:,:-1])

returnU_new

#主循環(huán)

gamma=1.4

fortinrange(1000):

F,G=flux(U)

U=upwind(U,F,G)

#輸出最終狀態(tài)

print(U)6.1.3.1解釋此代碼示例首先定義了網(wǎng)格大小、空間步長和時間步長。然后初始化狀態(tài)向量,其中包含密度、x方向速度和y方向速度。flux函數(shù)計算通量向量,而upwind函數(shù)應用上風差分格式更新狀態(tài)向量。通過主循環(huán)迭代求解,最終輸出流場的狀態(tài)。6.2維可壓湍流的分析6.2.1原理三維可壓湍流的分析涉及更復雜的流體動力學方程組,包括納維-斯托克斯方程和湍流模型方程。有限差分法在三維空間中需要處理更多的方向和通量,同時湍流模型的引入增加了計算的復雜性。6.2.2內(nèi)容6.2.2.1納維-斯托克斯方程三維可壓流的納維-斯托克斯方程包括連續(xù)性方程、動量方程和能量方程。6.2.2.2湍流模型常用的湍流模型有k??模型、6.2.2.3差分格式三維空間中,差分格式的選擇需要考慮更多的方向,如中心差分、上風差分和Lax-Wendroff格式的三維擴展。6.2.2.4邊界條件三維可壓湍流的邊界條件處理更為復雜,需要考慮流體在三個方向上的行為。6.2.3示例下面是一個使用Python和NumPy庫進行三維可壓湍流數(shù)值模擬的簡化示例。此示例使用上風差分格式求解納維-斯托克斯方程和k?importnumpyasnp

#定義網(wǎng)格大小和時間步長

nx,ny,nz=100,100,100

dx,dy,dz=1.0,1.0,1.0

dt=0.01

#初始化狀態(tài)向量

U=np.zeros((4,nx,ny,nz))

U[0,:,:,:]=1.0#密度

U[1,:,:,:]=0.5#x方向速度

U[2,:,:,:]=0.0#y方向速度

U[3,:,:,:]=0.0#z方向速度

#初始化湍流模型變量

k=np.zeros((nx,ny,nz))

epsilon=np.zeros((nx,ny,nz))

#定義通量函數(shù)

defflux(U,k,epsilon):

rho=U[0,:,:,:]

u=U[1,:,:,:]/rho

v=U[2,:,:,:]/rho

w=U[3,:,:,:]/rho

p=(gamma-1.0)*(U[0,:,:,:]-0.5*rho*(u**2+v**2+w**2))

F=np.array([U[1,:,:,:],U[1,:,:,:]*u+p,U[1,:,:,:]*v,U[1,:,:,:]*w])

G=np.array([U[2,:,:,:],U[2,:,:,:]*u,U[2,:,:,:]*v+p,U[2,:,:,:]*w])

H=np.array([U[3,:,:,:],U[3,:,:,:]*u,U[3,:,:,:]*v,U[3,:,:,:]*w+p])

returnF,G,H

#上風差分格式

defupwind(U,F,G,H,k,epsilon):

U_new=np.zeros_like(U)

U_new[0,1:,:,:]=U[0,1:,:,:]-dt/dx*(F[0,1:,:,:]-F[0,:-1,:,:])

U_new[1,:,1:,:]=U[1,:,1:,:]-dt/dy*(G[1,:,1:,:]-G[1,:,:-1,:])

U_new[2,:,:,1:]=U[2,:,:,1:]-dt/dz*(H[2,:,:,1:]-H[2,:,:,:-1])

returnU_new

#主循環(huán)

gamma=1.4

fortinrange(1000):

F,G,H=flux(U,k,epsilon)

U=upwind(U,F,G,H,k,epsilon)

#輸出最終狀態(tài)

print(U)6.2.3.1解釋此代碼示例首先定義了三維網(wǎng)格的大小、空間步長和時間步長。然后初始化狀態(tài)向量和湍流模型變量。flux函數(shù)計算通量向量,而upwind函數(shù)應用上風差分格式更新狀態(tài)向量。通過主循環(huán)迭代求解,最終輸出流場的狀態(tài)。6.3激波與邊界層相互作用的模擬6.3.1原理激波與邊界層相互作用是空氣動力學中一個復雜的現(xiàn)象,涉及到激波的形成、邊界層的分離和再附著等過程。有限差分法通過高精度的差分格式和激波捕捉技術,能夠有效地模擬這些現(xiàn)象。6.3.2內(nèi)容6.3.2.1高精度差分格式為了準確捕捉激波,可以使用WENO(WeightedEssentiallyNon-Oscillatory)格式或ENO(EssentiallyNon-Oscillatory)格式。6.3.2.2激波捕捉技術激波捕捉技術,如通量限制器和人工粘性,用于減少數(shù)值振蕩和提高激波的分辨率。6.3.2.3邊界層處理邊界層的處理需要考慮流體的粘性效應,通常使用Navier-Stokes方程的邊界層近似。6.3.3示例下面是一個使用Python和NumPy庫進行激波與邊界層相互作用數(shù)值模擬的簡化示例。此示例使用WENO格式求解歐拉方程。importnumpyasnp

#定義網(wǎng)格大小和時間步長

nx,ny=200,200

dx,dy=1.0,1.0

dt=0.001

#初始化狀態(tài)向量

U=np.zeros((3,nx,ny))

U[0,:,:]=1.0#密度

U[1,:,:]=0.5#x方向速度

U[2,:,:]=0.0#y方向速度

#定義WENO格式

defweno(U):

#WENO格式的實現(xiàn)通常較為復雜,這里僅給出框架

#需要計算左、右狀態(tài),然后根據(jù)非振蕩性條件加權(quán)

U_left=np.zeros_like(U)

U_right=np.zeros_like(U)

U_weno=np.zeros_like(U)

#實現(xiàn)WENO格式的細節(jié)

#...

returnU_weno

#主循環(huán)

gamma=1.4

fortinrange(10000):

U=weno(U)

#輸出最終狀態(tài)

print(U)6.3.3.1解釋此代碼示例首先定義了網(wǎng)格大小、空間步長和時間步長。然后初始化狀態(tài)向量。weno函數(shù)應用WENO格式更新狀態(tài)向量,但具體的實現(xiàn)細節(jié)較為復雜,需要根據(jù)非振蕩性條件計算左、右狀態(tài)并進行加權(quán)。通過主循環(huán)迭代求解,最終輸出流場的狀態(tài)。以上示例代碼僅為簡化版,實際應用中需要更復雜的邊界條件處理、激波捕捉技術和湍流模型。此外,為了提高計算效率和穩(wěn)定性,通常會使用更高級的數(shù)值方法和并行計算技術。7結(jié)果分析與驗證7.1網(wǎng)格獨立性研究網(wǎng)格獨立性研究是確保數(shù)值模擬結(jié)果可靠性的關鍵步驟。在有限差分法中,網(wǎng)格的大小和分布直接影響計算的精度和效率。為了驗證結(jié)果不受網(wǎng)格尺寸的影響,通常會進行一系列計算,使用不同密度的網(wǎng)格,比較結(jié)果的差異。7.1.1示例假設我們正在研究一個二維可壓流問題,目標是計算繞過一個圓柱的流場。我們使用三種不同網(wǎng)格密度進行計算:粗網(wǎng)格:每邊100個網(wǎng)格點。中網(wǎng)格:每邊200個網(wǎng)格點。細網(wǎng)格:每邊400個網(wǎng)格點。計算完成后,我們比較每個網(wǎng)格下圓柱后方的分離點位置,以確定結(jié)果是否網(wǎng)格獨立。#假設分離點位置的計算結(jié)果存儲在列表中

coarse_grid_separation_point=0.75

medium_grid_separation_point=0.76

fine_grid_separation_point=0.76

#比較結(jié)果

ifabs(coarse_grid_separation_point-medium_grid_separation_point)<0.01and\

abs(medium_grid_separation_point-fine_grid_separation_point)<0.01:

print("網(wǎng)格獨立性研究顯示結(jié)果穩(wěn)定,可接受中網(wǎng)格結(jié)果。")

else:

print("需要進一步細化網(wǎng)格以達到網(wǎng)格獨立性。")7.1.2解釋上述代碼檢查了不同網(wǎng)格密度下計算的分離點位置。如果中網(wǎng)格和細網(wǎng)格的結(jié)果差異小于0.01,這通常表明結(jié)果已經(jīng)達到了網(wǎng)格獨立性,可以接受中網(wǎng)格的結(jié)果作為最終計算值。7.2數(shù)值結(jié)果的物理意義解釋數(shù)值結(jié)果的物理意義解釋是將計算數(shù)據(jù)轉(zhuǎn)化為可理解的物理現(xiàn)象的過程。在可壓流中,這可能包括壓力分布、速度場、馬赫數(shù)分布等。7.2.1示例考慮一個超音速流過一個二維楔形體的問題。我們計算了楔形體表面的壓力分布,并需要解釋這些結(jié)果。#假設壓力分布數(shù)據(jù)存儲在列表中

pressure_distribution=[1.0,1.2,1.5,1.8,2.0,2.2,2.5,2.8,3.0]

#解釋壓力分布

max_pressure=max(pressure_distribution)

min_pressure=min(pressure_distribution)

pressure_range=max_pressure-min_pressure

print(f"最大壓力為:{max_pressure}")

print(f"最小壓力為:{min_pressure}")

print(f"壓力范圍為:{pressure_range}")

#如果壓力分布顯示在楔形體的前緣有顯著的峰值,這可能表明存在激波。

ifmax_pressure>2.5:

print("楔形體前緣的壓力峰值表明存在激波。")7.2.2解釋上述代碼分析了楔形體表面的壓力分布,計算了最大和最小壓力值以及壓力范圍。如果最大壓力值顯著高于周圍壓力,這可能表明在楔形體前緣形成了激波,這是超音速流中常見的物理現(xiàn)象。7.3與實驗數(shù)據(jù)的對比分析與實驗數(shù)據(jù)的對比分析是驗證數(shù)值模擬準確性的常用方法。通過比較數(shù)值結(jié)果與實驗測量值,可以評估模擬方法的有效性。7.3.1示例假設我們有一組實驗測量的圓柱繞流速度數(shù)據(jù),以及使用有限差分法計算的數(shù)值結(jié)果。我們將比較兩者以驗證模擬的準確性。#實驗數(shù)據(jù)和數(shù)值結(jié)果

experimental_data=[0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3]

numerical_results=[0.52,0.61,0.71,0.81,0.91,1.01,1.11,1.21,1.31]

#計算平均相對誤差

relative_error=[abs((numerical-experimental)/experimental)fornumerical,experimentalinzip(numerical_results,experimental_data)]

average_relative_error=sum(relative_error)/len(relative_error)

print(f"平均相對誤差為:{average_relative_error*100}%")

#如果平均相對誤差小于5%,則認為數(shù)值結(jié)果與實驗數(shù)據(jù)吻合良好

ifaverage_relative_error<0.05:

print("數(shù)值結(jié)果與實驗數(shù)據(jù)吻合良好,驗證了模擬的準確性。")

else:

print("數(shù)值結(jié)果與實驗數(shù)據(jù)存在較大差異,需要進一步調(diào)整模擬參數(shù)。")7.3.2解釋代碼中,我們首先計算了數(shù)值結(jié)果與實驗數(shù)據(jù)之間的相對誤差,然后計算了這些誤差的平均值。如果平均相對誤差小于5%,這通常表明數(shù)值模擬與實驗結(jié)果吻合良好,驗證了模擬方法的準確性。如果誤差較大,則可能需要調(diào)整模擬參數(shù)或檢查模型的假設是否正確。通過以上三個方面的詳細分析,我們可以確保有限差分法在可壓流中的應用結(jié)果是可靠和準確的,這為后續(xù)的空氣動力學研究提供了堅實的基礎。8高級主題8.1非結(jié)構(gòu)化網(wǎng)格上的有限差分法在空氣動力學中,非結(jié)構(gòu)化網(wǎng)格的使用允許對復雜幾何形狀進行更精確的模擬。與結(jié)構(gòu)化網(wǎng)格相比,非結(jié)構(gòu)化網(wǎng)格可以更靈活地適應物體的形狀,特別是在物體表面附近,可以更密集地分布網(wǎng)格點以提高局部精度。然而,非結(jié)構(gòu)化網(wǎng)格上的有限差分法(FDM)實現(xiàn)起來更為復雜,因為網(wǎng)格點之間的距離不再是均勻的,這要求我們使用更復雜的差分公式來近似導數(shù)。8.1.1實現(xiàn)示例考慮二維可壓縮流動的Navier-Stokes方程在非結(jié)構(gòu)化網(wǎng)格上的離散化。假設我們有一個非結(jié)構(gòu)化網(wǎng)格,其中每個網(wǎng)格點都有一個連接列表,表示與該點相鄰的其他點。我們可以使用Green-Gauss公式來計算網(wǎng)格點上的梯度,該公式基于網(wǎng)格點周圍的面積和速度的平均值。importnumpyasnp

defgreen_gauss_gradient(u,v,area,neighbors):

"""

使用Green-Gauss公式計算網(wǎng)格點上的速度梯度。

參數(shù):

u,v:速度分量數(shù)組

area:每個網(wǎng)格點的面積

neighbors:一個字典,鍵是網(wǎng)格點索引,值是與該點相鄰的點索引列表

返回:

gradient:速度梯度數(shù)組

"""

gradient=np.zeros((len(u),2))

foriinrange(len(u)):

sum_u=0

sum_v=0

sum_area=0

forjinneighbors[i]:

sum_u+=u[j]*area[j]

sum_v+=v[j]*area[j]

sum_area+=area[j]

gradient[i,0]=sum_u/sum_area

gradient[i,1]=sum_v/sum_area

returngradient

#示例數(shù)據(jù)

u=np.array([1.0,2.0,3.0,4.0,5.0])

v=np.array([0.5,1.5,2.5,3.5,4.5])

area=np.array([0.1,0.2,0.3,0.4,0.5])

neighbors={0:[1,2],1:[0,2,3],2:[0,1,3,4],3:[1,2,4],4:[2,3]}

#計算梯度

gradient=green_gauss_gradient(u,v,area,neighbors)

print("速度梯度:",gradient)8.1.2解釋上述代碼示例展示了如何使用Green-Gauss公式在非結(jié)構(gòu)化網(wǎng)格上計算速度梯度。green_gauss_gradient函數(shù)接收速度分量u和v、每個網(wǎng)格點的面積area以及一個neighbors字典,該字典存儲了每個網(wǎng)格點的相鄰點索引。通過遍歷每個網(wǎng)格點及其鄰居,函數(shù)計算了速度的加權(quán)平均值,權(quán)重為鄰居點的面積,從而得到該點的梯度。8.2高精度差分格式在空氣動力學數(shù)值模擬中,高精度差分格式對于提高解的準確性和穩(wěn)定性至關重要。傳統(tǒng)的二階中心差分格式雖然簡單,但在處理激波和復雜流動時可能會產(chǎn)生較大的數(shù)值擴散和振蕩。因此,高精度格式如WENO(WeightedEssentiallyNon-Oscillatory)和ENO(EssentiallyNon-Oscillatory)被廣泛采用,它們通過在局部區(qū)域內(nèi)選擇最優(yōu)的差分公式來減少振蕩和提高精度。8.2.1實現(xiàn)示例下面是一個使用WENO格式離散一維Burgers方程的示例。Burgers方程是一個非線性偏微分方程,常用于測試數(shù)值方法的穩(wěn)定性和精度。importnumpyasnp

defweno_reconstruction(q,dx):

"

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論