[問題討論]使用Python學(xué)習(xí)CFD初級(jí)理論系列一一維擴(kuò)散方程 (5/10)

本文描述利用Python求解計(jì)算一維擴(kuò)散方程。 

一維擴(kuò)散方程為:

[問題討論]使用Python學(xué)習(xí)CFD初級(jí)理論系列一一維擴(kuò)散方程 (5/10)的圖1

與前面方程不同的地方在于此方程包含二階導(dǎo)數(shù),因此首先對(duì)二階導(dǎo)數(shù)進(jìn)行離散。

采用中心差分格式對(duì)二階導(dǎo)數(shù)進(jìn)行離散。

考慮泰勒展開式:

[問題討論]使用Python學(xué)習(xí)CFD初級(jí)理論系列一一維擴(kuò)散方程 (5/10)的圖2

兩式相加,可得到二階導(dǎo)數(shù)項(xiàng):

[問題討論]使用Python學(xué)習(xí)CFD初級(jí)理論系列一一維擴(kuò)散方程 (5/10)的圖3

改變排列順序,可得到:

[問題討論]使用Python學(xué)習(xí)CFD初級(jí)理論系列一一維擴(kuò)散方程 (5/10)的圖4

將二階導(dǎo)數(shù)項(xiàng)代入到原方程中,可得到離散方程:

[問題討論]使用Python學(xué)習(xí)CFD初級(jí)理論系列一一維擴(kuò)散方程 (5/10)的圖5

改變方程形式,可得到:

[問題討論]使用Python學(xué)習(xí)CFD初級(jí)理論系列一一維擴(kuò)散方程 (5/10)的圖6

假設(shè)初始條件:

[問題討論]使用Python學(xué)習(xí)CFD初級(jí)理論系列一一維擴(kuò)散方程 (5/10)的圖7

注:這里定義一個(gè)sigma的目的是為了控制時(shí)間步長(zhǎng)dt,以使其滿足CFL條件。 
令:

[問題討論]使用Python學(xué)習(xí)CFD初級(jí)理論系列一一維擴(kuò)散方程 (5/10)的圖8

得到:

[問題討論]使用Python學(xué)習(xí)CFD初級(jí)理論系列一一維擴(kuò)散方程 (5/10)的圖9

這里的 σ就是Courant數(shù)。

可寫代碼如下:

import numpy as np
import matplotlib.pyplot as plt
nx = 41 # 網(wǎng)格節(jié)點(diǎn)數(shù)
dx = 2/(nx - 1) # 網(wǎng)格尺寸
nt = 40       # 時(shí)間步數(shù)
nu = 0.3 # 擴(kuò)散系數(shù)
sigma = 0.2  #定義一個(gè)中間變量,用于確定時(shí)間步長(zhǎng)dt
dt = sigma * dx**2 / nu #時(shí)間步長(zhǎng)
# 定義初始條件
u = np.ones(nx)
u[int(0.5 / dx):int(1 / dx + 1)] = 2
un = np.ones(nx) # 定義一個(gè)定義數(shù)組
plt.ion()
plt.show()
for n in range(nt): #時(shí)間循環(huán),計(jì)算每一個(gè)時(shí)間點(diǎn)上網(wǎng)格點(diǎn)上的數(shù)據(jù)
   plt.cla()
   un = u.copy()
   for i in range(1,nx-1): #空間循環(huán),計(jì)算u[i]
       u[i] = un[i]+ nu *dt /dx**2 * (un[i+1] -2 * un[i] + un[i-1])
   # 下面為圖形繪制代碼
   plt.plot(np.linspace(0,2,nx) , u , 'm' , lw =3 )  #繪制速度隨時(shí)間變化曲線
   plt.ylim(0.9,2.1)          # 確定y軸上下限
   plt.title("times: %.4f s"% (n*dt)) # 將時(shí)間打印到圖形上
   plt.pause(0.1) #控制圖形顯示時(shí)間
plt.ioff()
plt.show()

代碼運(yùn)行如圖所示。

[問題討論]使用Python學(xué)習(xí)CFD初級(jí)理論系列一一維擴(kuò)散方程 (5/10)的圖10

注:本系列教程來自國外一個(gè)使用Python進(jìn)行CFD初級(jí)理論學(xué)習(xí)的項(xiàng)目,源項(xiàng)目網(wǎng)址為:http://lorenabarba.com/blog/cfd-python-12-steps-to-navier-stokes/。感興趣的同學(xué)可以去官方主頁了解更多信息。

本文轉(zhuǎn)載自微信公眾號(hào)“CFD之道”,有刪減,感謝源作者。

登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺(tái)客服

TOP

1