from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib import pyplot import numpy %matplotlib inline nx = 41 ny = 41 nt = 500 nit=50 c = 1 dx = 2/(nx-1) dy = 2/(ny-1) x = numpy.linspace(0,2,nx) y = numpy.linspace(0,2,ny) X,Y = numpy.meshgrid(x,y) rho = 1 nu = .1 dt = .001 u = numpy.zeros((ny, nx)) v = numpy.zeros((ny, nx)) p = numpy.zeros((ny, nx)) b = numpy.zeros((ny, nx)) def buildUpB(b, rho, dt, u, v, dx, dy): b[1:-1,1:-1]=rho*(1/dt*((u[1:-1,2:]-u[1:-1,0:-2])/(2*dx)+(v[2:,1:-1]-v[0:-2,1:-1])/(2*dy))-\ ((u[1:-1,2:]-u[1:-1,0:-2])/(2*dx))**2-\ 2*((u[2:,1:-1]-u[0:-2,1:-1])/(2*dy)*(v[1:-1,2:]-v[1:-1,0:-2])/(2*dx))-\ ((v[2:,1:-1]-v[0:-2,1:-1])/(2*dy))**2) return b def presPoisson(p, dx, dy, b): pn = numpy.empty_like(p) pn = p.copy() for q in range(nit): pn = p.copy() p[1:-1,1:-1] = ((pn[1:-1,2:]+pn[1:-1,0:-2])*dy**2+(pn[2:,1:-1]+pn[0:-2,1:-1])*dx**2)/\ (2*(dx**2+dy**2)) -\ dx**2*dy**2/(2*(dx**2+dy**2))*b[1:-1,1:-1] p[:,-1] =p[:,-2] ##dp/dy = 0 at x = 2 p[0,:] = p[1,:] ##dp/dy = 0 at y = 0 p[:,0]=p[:,1] ##dp/dx = 0 at x = 0 p[-1,:]=0 ##p = 0 at y = 2 return p def cavityFlow(nt, u, v, dt, dx, dy, p, rho, nu): un = numpy.empty_like(u) vn = numpy.empty_like(v) b = numpy.zeros((ny, nx)) for n in range(nt): un = u.copy() vn = v.copy() b = buildUpB(b, rho, dt, u, v, dx, dy) p = presPoisson(p, dx, dy, b) u[1:-1,1:-1] = un[1:-1,1:-1]-\ un[1:-1,1:-1]*dt/dx*(un[1:-1,1:-1]-un[1:-1,0:-2])-\ vn[1:-1,1:-1]*dt/dy*(un[1:-1,1:-1]-un[0:-2,1:-1])-\ dt/(2*rho*dx)*(p[1:-1,2:]-p[1:-1,0:-2])+\ nu*(dt/dx**2*(un[1:-1,2:]-2*un[1:-1,1:-1]+un[1:-1,0:-2])+\ dt/dy**2*(un[2:,1:-1]-2*un[1:-1,1:-1]+un[0:-2,1:-1])) v[1:-1,1:-1] = vn[1:-1,1:-1]-\ un[1:-1,1:-1]*dt/dx*(vn[1:-1,1:-1]-vn[1:-1,0:-2])-\ vn[1:-1,1:-1]*dt/dy*(vn[1:-1,1:-1]-vn[0:-2,1:-1])-\ dt/(2*rho*dy)*(p[2:,1:-1]-p[0:-2,1:-1])+\ nu*(dt/dx**2*(vn[1:-1,2:]-2*vn[1:-1,1:-1]+vn[1:-1,0:-2])+\ (dt/dy**2*(vn[2:,1:-1]-2*vn[1:-1,1:-1]+vn[0:-2,1:-1]))) u[0,:] = 0 u[:,0] = 0 u[:,-1] = 0 u[-1,:] = 1 #set velocity on cavity lid equal to 1 v[0,:] = 0 v[-1,:]=0 v[:,0] = 0 v[:,-1] = 0 return u, v, p u = numpy.zeros((ny, nx)) v = numpy.zeros((ny, nx)) p = numpy.zeros((ny, nx)) b = numpy.zeros((ny, nx)) nt = 100 u, v, p = cavityFlow(nt, u, v, dt, dx, dy, p, rho, nu) fig = pyplot.figure(figsize=(11,7), dpi=100) pyplot.contourf(X,Y,p,alpha=0.5) ###plnttong the pressure field as a contour pyplot.colorbar() pyplot.contour(X,Y,p) ###plotting the pressure field outlines pyplot.quiver(X[::2,::2],Y[::2,::2],u[::2,::2],v[::2,::2]) ##plotting velocity pyplot.xlabel('X') pyplot.ylabel('Y');
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question