一维常系数对流方程是CFD中最简单最基本的方程。然而这个简单的方程能够告诉我们很多关于CFD方面的东西。模型方程如下式:
![[问题讨论]使用Python学习CFD初级理论系列一线性对流方程(2/10)的图1](https://www.gofarlic.com\upload\jishulink\512\a5ef3ea4f414411986c53b7616eeca47.webp)
下面在Python中实现该求解过程。
代码如下所示:
import numpy as np
import matplotlib.pyplot as plt
nx = 41 #x方向网格节点数量
dx = 2/(nx-1) #空间网格步长,x方向总长度2
nt = 25 # 时间步数
dt = 0.025 # 时间步长
c = 1 #常数
# 指定初始条件
u = np.ones(nx)
u[int(0.5/dx):int(1/dx + 1)] = 2 #这一行实际上是制造了一个方波
# 下面将初始条件画出来
plt.plot(np.linspace(0,2,nx),u, 'r',lw=3, label = 'init')
# 计算25个时间步后的波形
un = np.ones(nx)
for n in range(nt):
un = u.copy() #后面的计算会改变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()
计算结果如下图所示:
![[问题讨论]使用Python学习CFD初级理论系列一线性对流方程(2/10)的图2](https://www.gofarlic.com\upload\jishulink\512\75d346a28e1c439d894811310680f4d3.webp)
从图中可以看出,在经过大约0.625s后,波形存在一定程度上的失真,说明数值算法存在扩散。
注:本系列教程来自国外一个使用Python进行CFD初级理论学习的项目,源项目网址为:http://lorenabarba.com/blog/cfd-python-12-steps-to-navier-stokes/。感兴趣的同学可以去官方主页了解更多信息。
本文转载自微信公众号“CFD之道”,有删减,感谢源作者。