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

[问题讨论]使用Python学习CFD初级理论系列一二维扩散(9/10)

阅读数 11
点赞 0
article_banner

二维扩散问题控制方程可写成下面形式:

[问题讨论]使用Python学习CFD初级理论系列一二维扩散(9/10)的图1

这里时间项采用向前差分,空间项均采用中心差分,很容易写出离散方程:

[问题讨论]使用Python学习CFD初级理论系列一二维扩散(9/10)的图2

同样写出待求项:

[问题讨论]使用Python学习CFD初级理论系列一二维扩散(9/10)的图3

初始条件及边界条件见代码。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

nx = 31  # 定义x方向节点数
ny = 31  # 定义y方向节点数
nt = 17  # 定义时间步长
nu  = 0.05  # 定义扩散系数
dx = 2/(nx-1)  # 定义x方向网格尺寸
dy = 2/(ny-1)  # 定义y方向网格尺寸
sigma = 0.25   # 定义库朗数
dt = sigma * dx * dy /nu

x = np.linspace(0,2,nx)   # x取值范围
y = np.linspace(0,2,ny)   # y取值范围
# 定义边界条件
u = np.ones((ny,nx))
un = np.ones((ny,nx))
# 定义初始条件
u[int(.5 / dy):int(1 / dy + 1),int(.5 / dx):int(1 / dx + 1)] = 2

# 绘制初始条件
fig = plt.figure()
ax = fig.gca(projection='3d')
X, Y = np.meshgrid(x, y)
surf = ax.plot_surface(X, Y, u, rstride=1, cstride=1, cmap=cm.viridis,
       linewidth=0, antialiased=False)
ax.set_xlim(0, 2)
ax.set_ylim(0, 2)
ax.set_zlim(1, 2.5)
ax.set_xlabel('$x$')
ax.set_ylabel('$y$')
plt.show()

(屏幕左右滑动可查看完整代码)

初始条件如下图所示。

[问题讨论]使用Python学习CFD初级理论系列一二维扩散(9/10)的图4

# 定义函数进行求解
def diffuse(nt):
   u[int(.5 / dy):int(1 / dy + 1),int(.5 / dx):int(1 / dx + 1)] = 2

   for n in range(nt + 1):
       un = u.copy()
       u[1:-1, 1:-1] = (un[1:-1,1:-1] +
                       nu * dt / dx**2 *
                       (un[1:-1, 2:] - 2 * un[1:-1, 1:-1] + un[1:-1, 0:-2]) +
                       nu * dt / dy**2 *
                       (un[2:,1: -1] - 2 * un[1:-1, 1:-1] + un[0:-2, 1:-1]))
       u[0, :] = 1
       u[-1, :] = 1
       u[:, 0] = 1
       u[:, -1] = 1


   fig = plt.figure()
   ax = fig.gca(projection='3d')
   surf = ax.plot_surface(x, y, u[:], rstride=1, cstride=1, cmap=cm.viridis,
       linewidth=0, antialiased=True)
   ax.set_zlim(1, 2.5)
   ax.set_xlabel('$x$')
   ax.set_ylabel('$y$')
   plt.show()

下面进行计算。

diffuse(10)

图形如下图所示。

[问题讨论]使用Python学习CFD初级理论系列一二维扩散(9/10)的图5

diffuse(14)

计算结果如下图所示。

[问题讨论]使用Python学习CFD初级理论系列一二维扩散(9/10)的图6

diffuse(50)

如下图所示。

[问题讨论]使用Python学习CFD初级理论系列一二维扩散(9/10)的图7

以上代码在jupyter lab中运行通过。

注:本系列教程来自国外一个使用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
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空