一維常系數(shù)對(duì)流方程是CFD中最簡(jiǎn)單最基本的方程。然而這個(gè)簡(jiǎn)單的方程能夠告訴我們很多關(guān)于CFD方面的東西。模型方程如下式:
下面在Python中實(shí)現(xiàn)該求解過程。
代碼如下所示:
import numpy as np
import matplotlib.pyplot as plt
nx = 41 #x方向網(wǎng)格節(jié)點(diǎn)數(shù)量
dx = 2/(nx-1) #空間網(wǎng)格步長(zhǎng),x方向總長(zhǎng)度2
nt = 25 # 時(shí)間步數(shù)
dt = 0.025 # 時(shí)間步長(zhǎng)
c = 1 #常數(shù)
# 指定初始條件
u = np.ones(nx)
u[int(0.5/dx):int(1/dx + 1)] = 2 #這一行實(shí)際上是制造了一個(gè)方波
# 下面將初始條件畫出來
plt.plot(np.linspace(0,2,nx),u, 'r',lw=3, label = 'init')
# 計(jì)算25個(gè)時(shí)間步后的波形
un = np.ones(nx)
for n in range(nt):
un = u.copy() #后面的計(jì)算會(huì)改變u,所以將u拷貝一份
for i in range(1,nx):
u[i] = un[i] - c * dt / dx * (un[i] - un[i-1])
plt.plot(np.linspace(0,2,nx), u , 'b',lw =3,label= 'current')
plt.legend()
計(jì)算結(jié)果如下圖所示:
從圖中可以看出,在經(jīng)過大約0.625s后,波形存在一定程度上的失真,說明數(shù)值算法存在擴(kuò)散。
注意:線性對(duì)流問題看似很簡(jiǎn)單,但實(shí)際上存在很多的問題,有興趣的童鞋可以嘗試著增大網(wǎng)格數(shù)量nx或增大時(shí)間步長(zhǎng)dt,看看會(huì)發(fā)生什么情況,后面我們會(huì)專門討論這個(gè)問題。
聯(lián)系客服