所以我有一个 PDE,我用它来描述材料如何流过一个体积(2D 或 3D)。 现在使用有限差分我得到以下结果: 其中 D 是扩散系数,上标是时间,下标是空间。(想象一个网格)。通过一些已经验证的代码,我们得到了和现在,我们使用
在边缘。我知道这是一个愚蠢的边界条件,但这无关紧要,因为即使我们使用少量时间,我要向您展示的问题仍然存在。(浓度没有达到边缘)
[查看评论...它告诉我我不能发布 2 个链接...我在哪里有第二个?]
这是代码。它相对简单。
import numpy as np import matplotlib.pyplot as plt import time %matplotlib inline from scipy import ndimage import scipy.io as sio a =sio.loadmat('C:\\Users\\Tsila elbag\\Documents\\IPythonNotes\\New folder\\Cavity10k_1.mat') b = a['VelField'] N =50 M =300 ux = b[0][0][0] uy = b[0][0][1] #ux = np.zeros((50,50)) #uy = np.ones((50,50)) dx = 2/N dy =2/N D= .001 Dprime =0 dt = .0001 C = np.zeros((N,N)) #C[np.floor((.25+1)/dx):np.floor((.75+1)/dx),np.floor((.25+1)/dy)\ # :np.floor((.75+1)/dy)]=1 C[np.floor((.25+1)/dy)\ :np.floor((.75+1)/dy),.1/dx:np.floor((.25)/dx)]=1 f, axarr = plt.subplots(2, sharex=True) axarr[0].contourf(C) Chist= C Ctemp = C for T in range(M): for j in range(N): for k in range(N): if k==49 or j ==49 or k ==0 or j ==0: Ctemp[j,k]=0 else: Ctemp[j,k]= C[j,k]+dt*((D+Dprime)*(((C[j+1,k]-2*C[j,k]+\ C[j-1,k])/(dx**2))+((C[j,k+1]-2*C[j,k]+C[j,k-1])/(dy**2)))-\ ux[j,k]*(C[j,k]-C[j-1,k])/(dx)-uy[j,k]*(C[j,k]-C[j,k-1])/dy) #Chist.append(list(C)) C = Ctemp axarr[0].set_title('Original') axarr[2].contourf(C) axarr[2].set_title('{} seconds later'.format(dt*M))
所以问题是我为什么会有这些波,如果有人知道有效的边界条件,我将不胜感激。提前致谢。
