吾生有涯 学海无涯
析模有界 知识无界

Julia CFD|EX08 二维非线性对流

内容纲要


本文描述利用Julia计算二维非线性对流问题。

二维非线性对流控制方程为:

这里时间项采用向前差分,空间项采用向后差分,离散方程可写成以下格式:

式中,i为x方向角标,j为y方向角标,n为时间项角标。

可得待求项:

采用初始条件:

边界条件:

程序代码

using PyPlot
nx = 101
ny = 101
nt = 80
c = 1
dx = 2 / (nx - 1)
dy = 2 / (ny - 1)
sigma = 0.2
dt = sigma * dx

x = range(0, 2, length=nx)
y = range(0, 2, length=ny)

u = ones(ny, nx)
v = ones(ny, nx)
un = ones(ny, nx)
vn = ones(ny, nx)

s = floor(Int, 0.5 / dy)
e = floor(Int, 1 / dy)
u[s:e,s:e] .= 2
v[s:e,s:e] .= 2

显示初始化分布。

PyPlot.surf(x,y,u,cmap=ColorMap("coolwarm"))
PyPlot.show()

初始化分布如下图所示。

进行迭代计算。

for n in 1:nt
un = copy(u)
vn = copy(v)
u[2:end,2:end] = un[2:end,2:end] - (un[2:end,2:end] .* (c * dt / dx * (un[2:end,2:end] - un[2:end,1:end - 1]))) - (vn[2:end,2:end] .* (c * dt / dy * (un[2:end,2:end] - un[1:end - 1,2:end])))
v[2:end,2:end] = vn[2:end,2:end] - (un[2:end,2:end] .* (c * dt / dx * (vn[2:end,2:end] - vn[2:end,1:end - 1]))) - (vn[2:end,2:end] .* (c * dt / dy * (vn[2:end,2:end] - vn[1:end - 1,2:end])))

u[1,:] .= 1;
u[end,:] .= 1;
u[:,1] .= 1;
u[:,end] .= 1;

v[1,:] .= 1;
v[end,:] .= 1;
v[:,1] .= 1;
v[:,end] .= 1;
end

fig = figure(figsize=(11, 7), dpi=100)
PyPlot.surf(x,y,u,cmap=ColorMap("coolwarm"))
PyPlot.show()

计算结果显示。

  • x方向速度分布
  • y方向速度分布

完整代码如下所示。

using PyPlot
nx = 101
ny = 101
nt = 80
c = 1
dx = 2 / (nx - 1)
dy = 2 / (ny - 1)
sigma = 0.2
dt = sigma * dx

x = range(0, 2, length=nx)
y = range(0, 2, length=ny)

u = ones(ny, nx)
v = ones(ny, nx)
un = ones(ny, nx)
vn = ones(ny, nx)

s = floor(Int, 0.5 / dy)
e = floor(Int, 1 / dy)
u[s:e,s:e] .= 2
v[s:e,s:e] .= 2

# PyPlot.surf(x,y,u,cmap=ColorMap("coolwarm"))
# PyPlot.show()

for n in 1:nt
un = copy(u)
vn = copy(v)
u[2:end,2:end] = un[2:end,2:end] - (un[2:end,2:end] .* (c * dt / dx * (un[2:end,2:end] - un[2:end,1:end - 1]))) - (vn[2:end,2:end] .* (c * dt / dy * (un[2:end,2:end] - un[1:end - 1,2:end])))
v[2:end,2:end] = vn[2:end,2:end] - (un[2:end,2:end] .* (c * dt / dx * (vn[2:end,2:end] - vn[2:end,1:end - 1]))) - (vn[2:end,2:end] .* (c * dt / dy * (vn[2:end,2:end] - vn[1:end - 1,2:end])))

u[1,:] .= 1;
u[end,:] .= 1;
u[:,1] .= 1;
u[:,end] .= 1;

v[1,:] .= 1;
v[end,:] .= 1;
v[:,1] .= 1;
v[:,end] .= 1;
end

fig = figure(figsize=(11, 7), dpi=100)
PyPlot.surf(x,y,u,cmap=ColorMap("coolwarm"))
PyPlot.show()

本篇文章来源于微信公众号: CFD之道

赞(0) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《Julia CFD|EX08 二维非线性对流》
文章链接:https://www.topcfd.cn/12728/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册