声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

声振论坛 展示 基础理论 流体力学 查看内容

[系列]Python计算CFD问题

2016-4-5 14:45| 发布者: aspen| 查看: 12628| 评论: 0|原作者: funi|来自: lorenabarba.com

摘要: Python计算CFD问题1:一维线性对流问题 #-*-coding=utf-8 -*- import numpy as np import matplotlib.pyplot as plt import time,sys nx=41 #空间节点数 dx=2.0/(nx-1) #网格间距 nt=25 #时间步数 dt ...
[系列]Python计算CFD问题<7>:2D对流问题


 在前面的例子中,我们处理了2D线性对流问题,虽然问题是二维的,但实际上还是一维的,因为只有计算域是2D,物理变量只有X方向速度是变量。在本例中,我们来处理真正的2D对流问题。
2D对流问题可以用此方程组进行表达:
[attach]69974[/attach]
时间项采用向前差分,空间项采用先后差分。离散后的方程为:
[attach]69973[/attach]
换成迭代格式为:
[attach]69972[/attach]
初始条件为:[attach]69975[/attach]
边界条件:
[attach]69977[/attach]
编制计算程序为:
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import matplotlib.cm as cm

  4. nx=101
  5. ny=101
  6. nt=80

  7. dx=2.0/(nx-1)
  8. dy=2.0/(ny-1)
  9. sigma=0.2
  10. dt=sigma*dx

  11. x=np.linspace(0,2,nx)
  12. y=np.linspace(0,2,ny)

  13. u=np.ones((nx,ny))
  14. v=np.ones((nx,ny))
  15. un=np.ones((nx,ny))
  16. vn=np.ones((nx,ny))

  17. u[.5/dx:1/dx+1,.5/dy:1/dy+1]=2
  18. v[.5/dx:1/dx+1,.5/dy:1/dy+1]=2

  19. for n in range(nt+1):
  20. un=u.copy()
  21. vn=v.copy()
  22. u[1:,1:]=un[1:,1:]-(un[1:,1:]*dt/dx*(un[1:,1:]-un[0:-1,1:]))-vn[1:,1:]*dt/dy*(un[1:,1:]-un[1:,0:-1])
  23. v[1:,1:]=vn[1:,1:]-(un[1:,1:]*dt/dx*(vn[1:,1:]-vn[0:-1,1:]))-vn[1:,1:]*dt/dy*(vn[1:,1:]-vn[1:,0:-1])

  24. u[0,:]=1
  25. u[-1,:]=1
  26. u[:,0]=1
  27. u[:,-1]=1

  28. v[0,:]=1
  29. v[-1,:]=1
  30. v[:,0]=1
  31. v[:,-1]=1

  32. X,Y=np.meshgrid(x,y)
  33. plt.figure()
  34. im=plt.imshow(u,interpolation='bilinear',origin='lower',cmap=cm.rainbow)
  35. plt.contour(X,Y,v)
  36. plt.colorbar(im,orientation='vertical')
复制代码

输出结果:
初始条件(u,v分布)
[attach]69978[/attach]
[attach]69979[/attach]
最终结果(u,v分布):
[attach]69976[/attach]
[attach]69980[/attach]
【来源:http://nbviewer.ipython.org/gith ... ons/07_Step_5.ipynb
1234567

最新评论

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-28 15:09 , Processed in 0.048076 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部