首页/文章/ 详情

基于Python的CFD编程入门(4)伯格斯方程(Burgers’ Equation)

1年前浏览1693

伯格斯方程(Burgers’ Equation)或称为贝特曼-伯格斯方程(Bateman–Burgers )是一个对流-扩散方程,出现在应用数学的各个领域,如流体力学、非线性声学、空气动力学等。


01  

理论基础



一维伯格斯方程:


可以看到伯格斯方程由之前介绍过的一维非线性对流和扩散项所组成。

因此一维非线性对流方程也可称为无粘伯格斯方程。

因此可以使用前文同样的离散方法,对时间导数使用前向差分,对空间导数使用后向差分,对二阶导数使用中心差分。

调整格式:

令初始条件为:


在周期性边界条件:


伯格斯方程存在解析解:





02  

代码实现



首先使用sympy库符号运算求解方程的解析解


  得到解析解的图像:

接着我们求解数值解:

plt.ion() 
for n in range(nt):
    plt.cla()
    un = u.copy()
    for i in range(1, nx - 1):
        u[i] = un[i] - un[i] * dt / dx * (un[i] - un[i - 1]) + nu * dt / dx ** 2 * (un[i + 1] - 2 * un[i] + un[i - 1])
    u[0] = un[0] - un[0] * dt / dx * (un[0] - un[-2]) + nu * dt / dx ** 2 * (un[1] - 2 * un[0] + un[-2]) # 计算第一个点
    u[-1] = u[0]
    plt.plot(x, u_analytical,label='Analytical')
    plt.plot(x, u,label='Computational')
    plt.legend()
    plt.title("time: %.4f s" % (n * dt))
    plt.pause(0.01)

plt.ioff()
plt.show()

结果为:

迭代求解过程:



03  

误差来源



伯格斯方程数值解与解析解的差异来源主要有以下几点:


  • 两种情况下的粘度是一样的,但数值解显示出比解析解更多的时间和空间耗散(主要在时间尺度上,空间尺度相对较小)。

  • 数值耗散是造成解析解和数值解之间差异的主要原因。当物理粘度降低,使物理耗散减小时,数值耗散的影响就会更加明显。

     
  • 方程离散化过程中存在截断误差。


  • 瞬态和对流项的一阶近似分别包含时间和空间上的数值扩散,因此需要对瞬态项使用高于一阶的方法。  







来源:易木木响叮当
非线性声学理论
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-07-06
最近编辑:1年前
易木木响叮当
硕士 有限元爱好者
获赞 208粉丝 227文章 327课程 2
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈