# A numerical solution of 2D Gaussian advection equation by Upwind Scheme.frommpl_toolkits.mplot3dimportaxes3dimportmatplotlib.pyplotasplimportnumpyasnpt0=0.0dt=0.045t_final=1x0=-2.0dx=0.04x_max=4.0y0=-2.0dy=0.04y_max=4.0T=np.arange(t0,t_final+dt,dt)X=np.arange(x0,x_max+dx,dx)Y=np.arange(y0,y_max+dy,dy)U=[[0.0for_inY]for_inX]fig=pl.figure()ax=fig.add_subplot(111,projection='3d')nframe=0fortinT:ift==t0:foriinrange(len(X)):forjinrange(len(Y)):U[i][j]=np.exp(-X[i]**2-Y[j]**2)else:U_prime=[[0.0for_inY]for_inX]foriinrange(len(X)):forjinrange(len(Y)):ifi==0orj==0ori==len(X)-1orj==len(Y)-1:U_prime[i][j]=np.exp(-(X[i]-(1-np.cos(t)))**2-(Y[j]-np.sin(t))**2)else:ux=np.sin(t)uy=np.cos(t)ifux>0anduy>0:U_prime[i][j]=U[i][j]-ux*dt/dx*(U[i][j]-U[i-1][j])-uy*dt/dy*(U[i][j]-U[i][j-1])elifux>0anduy<=0:U_prime[i][j]=U[i][j]-ux*dt/dx*(U[i][j]-U[i-1][j])-uy*dt/dy*(U[i][j+1]-U[i][j])elifux<=0anduy>0:U_prime[i][j]=U[i][j]-ux*dt/dx*(U[i+1][j]-U[i][j])-uy*dt/dy*(U[i][j]-U[i][j-1])else:U_prime[i][j]=U[i][j]-ux*dt/dx*(U[i+1][j]-U[i][j])-uy*dt/dy*(U[i][j+1]-U[i][j])U=U_primeax.clear()gridX,gridY=np.meshgrid(X,Y)ax.plot_surface(gridX,gridY,U,cmap='summer',lw=0.0)ax.set_xlabel('x')ax.set_ylabel('y')ax.set_zlabel('phi')ax.set_xlim([x0,x_max])ax.set_ylim([y0,y_max])ax.set_zlim([0,1])fig.savefig('upwind2d/frame_'+"%03d"%nframe+'.png')nframe+=1# To generate GIF: convert frame_* GaussianUpwind2D.gif
Lisanslama
Ben, bu işin telif sahibi, burada işi aşağıdaki lisans altında yayımlıyorum:
atıf – Esere yazar veya lisans sahibi tarafından belirtilen (ancak sizi ya da eseri kullanımınızı desteklediklerini ileri sürmeyecek bir) şekilde atıfta bulunmalısınız.
benzer paylaşım – Maddeyi yeniden karıştırır, dönüştürür veya inşa ederseniz, katkılarınızı orijinal olarak aynı veya uyumlu lisans altında dağıtmanız gerekir.