当前位置:服务支持 >  软件文章 >  [问题讨论]使用Python学习CFD初级理论系列一CFL条件(3/10)

[问题讨论]使用Python学习CFD初级理论系列一CFL条件(3/10)

阅读数 13
点赞 0
article_banner

上节测试中所采用的计算参数是固定的(具有固定的时间步长和网格尺寸),下面尝试着更改这些参数,看看对于计算结果是否存在影响。

还是用上次的代码做测试,为了方便测试,对代码进行简单封装,代码如下(相同的代码,这里就不注释了):

import numpy as np
import matplotlib.pyplot as plt

def linearconv(nx):
   dx = 2/(nx -1)
   nt = 20
   dt = 0.025
   c = 1
   u = np.ones(nx)
   u[int(0.5/dx):int(1/dx+1)] = 2
   un = np.ones(nx)
   plt.plot(np.linspace(0,2,nx),u,'b',lw=3,label='origin')
   for n in range(nt):
       un = u.copy()
       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,'r',lw=3,label='current')
   plt.legend()
   plt.show()

下面通过改变网格尺寸(即dx的数量),来观察计算结果。

linearconv(41) #网格数为41

[问题讨论]使用Python学习CFD初级理论系列一CFL条件(3/10)的图1

这里用step1的参数计算结果作为参考,这里可以看到,波形存在较大的扩散,随时间推移,波形与初始形状偏离严重。

linearconv(61)

[问题讨论]使用Python学习CFD初级理论系列一CFL条件(3/10)的图2

可以看出,随着网格数量增加,波形失真在减小。

linearconv(71)

[问题讨论]使用Python学习CFD初级理论系列一CFL条件(3/10)的图3

波形与初始形状越来越接近。 

linearconv(81)

[问题讨论]使用Python学习CFD初级理论系列一CFL条件(3/10)的图4

随着网格数量增加,波形失真越来越小,可以认为是计算越来越精确。

linearconv(91)

[问题讨论]使用Python学习CFD初级理论系列一CFL条件(3/10)的图5

发生了什么情况,计算已经完全偏离了初始波形,出现了错误。这其中发生了什么呢?要回答这个问题,我们必须考虑一下代码中实际发生了什么。

在时间循环的每一次迭代中,我们使用当前时刻的波的数据来估计下一个时刻中的波的速度。最初,网格点数的增加返回了更准确的答案。数值扩散较少,波形看起来比第一个例子更像方波。 

在每个时间步长内,波的传播距离大于网格尺寸dx。网格尺寸dx与总网格数量nx有关。因此,稳定计算条件需要满足下式: 

[问题讨论]使用Python学习CFD初级理论系列一CFL条件(3/10)的图6

这里u为波速,σ常称之为Courant数,其值决定了计算是否稳定。在在新版本的代码中,我们采用CFL数来根据dx来计算合适的dt。

下面改写代码:

#新代码
import numpy as np
import matplotlib.pyplot as plt
def linearconv_m(nx):
   dx = 2 / ( nx - 1 )
   nt = 20
   c = 1
   sigma = 0.5
   dt = sigma * dx
   u = np.ones(nx)
   u[int(0.5 / dx):int(1 / dx + 1)] = 2
   plt.plot(np.linspace(0,2,nx),u,'b',lw=3,label='origin')
   un = np.ones(nx)
   for n in range(nt):
       un = u.copy()
       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,'r',lw=3,label='current')
   plt.legend()

测试一下新的程序代码: 

linearconv_m(90)

[问题讨论]使用Python学习CFD初级理论系列一CFL条件(3/10)的图7 

linearconv_m(180)

[问题讨论]使用Python学习CFD初级理论系列一CFL条件(3/10)的图8

嗯,满足了CFL条件后,不管网格怎么加密,计算结果依然不会崩溃。

注:本系列教程来自国外一个使用Python进行CFD初级理论学习的项目,源项目网址为:http://lorenabarba.com/blog/cfd-python-12-steps-to-navier-stokes/。感兴趣的同学可以去官方主页了解更多信息。

本文转载自微信公众号“CFD之道”,有删减,感谢源作者。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空