一维不可压缩非定常 Couette 流显式有限差分 CFD

计算科学 有限差分 流体动力学 Python 数值建模
2021-12-10 08:12:01

我目前正在关注 J.Anderson Jr. 的 CFD 基本应用程序,在编写我的第一个 CFD 问题时遇到了一些麻烦。正如标题所示,我正在使用显式有限差分方法求解不可压缩的 Couette 流。如何在不爆炸的情况下增加步数?我试图更改 delta_t 但它不会比我在代码中规定的更大,而不会出现混乱,任何建议都将不胜感激。哦,上板的 Bc 是 2 单位/吨

这是控制方程。无量纲化后

并使用二阶中心差

像这样的抛物线方程的稳定性准则是:

所以这是我为中心差分方法编写的代码,参考 Lorena Barb 的 CFD 的 12 个步骤

import numpy as np
from matplotlib import pyplot as py
D=1
N=21
Rey=5000
dy=D/(N-1)
dt=Rey*(dy)**2

u= np.zeros(N)
un=np.zeros(N)
un[20]=2
u[20]=2
for n in range(N-1):
    un = u.copy()
    for i in range(1, N-1):
       u[i] = un[i] + dt/Rey/dy**2 * (un[i+1] - 2 * un[i] + un[i-1])


py.plot(u/2, np.linspace(0, 2, N)/2);

这是我得到的图表

在此处输入图像描述

解图是

在此处输入图像描述

我意识到我哪里出错了...我的矩阵都搞砸了

import numpy as np
from matplotlib import pyplot as plt

y_max=1
t_max=1
N=101
Rey=5
dy=y_max/(N-1)
dt=0.5*Rey*(dy)**2
u0=2

def Couette_Flow(dt,dy,y_max,t_max,u0,Rey):
    c=dt/Rey/dy**2
    y=np.arange(0, y_max+dy,dy)
    t=np.arange(0, t_max+dt,dt)
    r=len(y)
    s=len(t)
    u=np.zeros([s,r])
    u[:,0]=u0     
    for n in range(0,s-1):
         for j in range(1, r-1):
             u[n+1,j] = u[n,j] + c*(u[n,j+1]-2*u[n,j]+u[n,j-1])
    return y,u,r,s




y,u,r,s = Couette_Flow(dt,dy,y_max,t_max,u0,Rey)

这仍然不是完美的,尽管我认为我对方程进行无量纲化的事实扰乱了我的解决方案,但是对于雷诺数的小值,它似乎生成了我想要的图形。

在此处输入图像描述

1个回答

答案是你不能增加超过限制的时间步: 这是因为你使用的是显式方案。显式方案有一个稳定条件,要求整个方案的放大因子小于1,以保证方案的稳定性。在这种情况下,这会导致您对的标准。如果您希望使用更大的时间步长,则需要使用隐式方案。这将导致线性方程组的分辨率。

Δt<12ReΔy2
Δt