声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

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

[系列]Python计算CFD问题

2016-4-5 14:45| 发布者: aspen| 查看: 12616| 评论: 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问题<5>:一维Burgers方程


 一维Burgers方程形式为:
[attach]69955[/attach]
从方程形式上来看,该方程是前面的非线性对流方程与扩散方程的混合体。采用前面提到的离散方法,可以将Burgers方程离散成:[attach]69956[/attach]
将其写成迭代的形式为:
[attach]69957[/attach]
除了迭代形式外,我们还必须知道初始条件和边界条件。
该方程有解析解:
[attach]69958[/attach]
因此本次计算设初始条件为:
[attach]69959[/attach]
设置边界条件为:
[attach]69960[/attach]
初始条件中含有偏导项,无法直接赋值,需要采用一些数学化简手段进行处理。
Python中提供了sympy库,该库是一个符号计算库,可以帮助进行化简。
完整的程序如下:
  1. # -*-coding:utf-8 -*-
  2. import numpy as np
  3. import sympy
  4. from sympy.utilities.lambdify import lambdify
  5. import matplotlib.pylab as plt

  6. x,nu,t = sympy.symbols("x,nu,t")
  7. phi = sympy.exp(-(x-4*t)**2/(4*nu*(t+1))) + sympy.exp(-(x-4*t-2*np.pi)**2/(4*nu*(t+1)))
  8. phiprime = phi.diff(x)
  9. u = -2*nu*(phiprime/phi)+4
  10. ufunc = lambdify((t,x,nu),u)

  11. nx = 101
  12. nt=100
  13. dx = 2*np.pi/(nx-1)
  14. nu=0.07
  15. dt=dx*nu

  16. x= np.linspace(0,2*np.pi,nx)
  17. un = np.empty(nx)
  18. t=0
  19. u=np.asarray([ufunc(t,x0,nu) for x0 in x]) #list 转化成 np.array

  20. plt.figure(figsize=(4,4),dpi=100)
  21. plt.plot(x,u,lw=2)
  22. plt.xlim([0,2*np.pi])
  23. plt.ylim([0,8])

  24. for n in range(nt):
  25. un = u.copy()
  26. for i in range(nx-1):
  27. 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])
  28. u[-1] = un[-1] - un[-1] * dt/dx * (un[-1] - un[-2]) + nu*dt/dx**2*(un[0]-2*un[-1]+un[-2])

  29. u_analytical = np.asarray([ufunc(nt*dt,xi,nu) for xi in x])

  30. plt.figure(figsize=(6,6),dpi=100)
  31. plt.plot(x,u,marker="o",color="blue",lw=2,label='Computational')
  32. plt.plot(x,u_analytical,color="yellow",label='analytical')
  33. plt.xlim([0,2*np.pi])
  34. plt.ylim([0,10])
  35. plt.legend()
  36. plt.show()
复制代码

初始条件如图:
[attach]69961[/attach]
计算结果如图:
[attach]69962[/attach]
【来源:http://nbviewer.ipython.org/gith ... ing-Time-with-SymPy


最新评论

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

GMT+8, 2024-11-24 21:56 , Processed in 0.044344 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部