# 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
Ліцензування
Я, власник авторських прав на цей твір, добровільно публікую його на умовах такої ліцензії:
ділитися – копіювати, поширювати і передавати твір
модифікувати – переробляти твір
При дотриманні таких умов:
зазначення авторства – Ви повинні вказати авторство, надати посилання на ліцензію і вказати, чи якісь зміни було внесено до оригінального твору. Ви можете зробити це в будь-який розсудливий спосіб, але так, щоб він жодним чином не натякав на те, наче ліцензіар підтримує Вас чи Ваш спосіб використання твору.
поширення на тих же умовах – Якщо ви змінюєте, перетворюєте або створюєте іншу похідну роботу на основі цього твору, ви можете поширювати отриманий у результаті твір тільки на умовах такої ж або сумісної ліцензії.