GaussianUpwind2D.gif(800 × 600 пікселів, розмір файлу: 972 КБ, MIME-тип: image/gif, кільцеве, 24 кадри)

Wikimedia Commons logo Відомості про цей файл містяться на Вікісховищі — централізованому сховищі вільних файлів мультимедіа для використання у проектах Фонду Вікімедіа.

Опис файлу

Опис
English: Upwind scheme for advection equation with solenoidal u = (sin(t), cos(t)) and boundary condition Z(x, y, t) = exp(- (x - (1 - cos(t)))2 - (y - sin(t))2).
Час створення
Джерело Власна робота
Автор Shiyu Ji

Python/Matplotlib Code

# A numerical solution of 2D Gaussian advection equation by Upwind Scheme.
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as pl
import numpy as np

t0 = 0.0
dt = 0.045
t_final = 1
x0 = -2.0
dx = 0.04
x_max = 4.0
y0 = -2.0
dy = 0.04
y_max = 4.0
T = 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.0 for _ in Y] for _ in X]
fig = pl.figure()
ax = fig.add_subplot(111, projection='3d')
nframe = 0

for t in T:
    if t == t0:
        for i in range(len(X)):
            for j in range(len(Y)):
                U[i][j] = np.exp(-X[i]**2-Y[j]**2)
    else:
        U_prime = [[0.0 for _ in Y] for _ in X]
        for i in range(len(X)):
            for j in range(len(Y)):
                if i == 0 or j == 0 or i == len(X)-1 or j == 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)
                    if ux > 0 and uy > 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])
                    elif ux > 0 and uy <= 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])
                    elif ux <= 0 and uy > 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_prime
        
    ax.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

Ліцензування

Я, власник авторських прав на цей твір, добровільно публікую його на умовах такої ліцензії:
w:uk:Creative Commons
зазначення авторства поширення на тих же умовах
Ви можете вільно:
  • ділитися – копіювати, поширювати і передавати твір
  • модифікувати – переробляти твір
При дотриманні таких умов:
  • зазначення авторства – Ви повинні вказати авторство, надати посилання на ліцензію і вказати, чи якісь зміни було внесено до оригінального твору. Ви можете зробити це в будь-який розсудливий спосіб, але так, щоб він жодним чином не натякав на те, наче ліцензіар підтримує Вас чи Ваш спосіб використання твору.
  • поширення на тих же умовах – Якщо ви змінюєте, перетворюєте або створюєте іншу похідну роботу на основі цього твору, ви можете поширювати отриманий у результаті твір тільки на умовах такої ж або сумісної ліцензії.

Підписи

Додайте однорядкове пояснення, що саме репрезентує цей файл

Об'єкти, показані на цьому файлі

зображує

Історія файлу

Клацніть на дату/час, щоб переглянути, як тоді виглядав файл.

Дата/часМініатюраРозмір об'єктаКористувачКоментар
поточний06:20, 27 листопада 2016Мініатюра для версії від 06:20, 27 листопада 2016800 × 600 (972 КБ)Shiyu JiUser created page with UploadWizard

Така сторінка використовує цей файл:

Глобальне використання файлу

Цей файл використовують такі інші вікі: