Dosya:GaussianUpwind2D.gif

GaussianUpwind2D.gif((800 × 600 piksel, dosya boyutu: 972 KB, MIME tipi: image/gif), döngüye girdi, 24 kare)


Özet

Açıklama
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).
Tarih
Kaynak Yükleyenin kendi çalışması
Yazar 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

Lisanslama

Ben, bu işin telif sahibi, burada işi aşağıdaki lisans altında yayımlıyorum:
w:tr:Creative Commons
atıf benzer paylaşım
Bu dosya, Creative Commons Atıf-Benzer Paylaşım 4.0 Uluslararası lisansı ile lisanslanmıştır.
Şu seçeneklerde özgürsünüz:
  • paylaşım – eser paylaşımı, dağıtımı ve iletimi
  • içeriği değiştirip uyarlama – eser adaptasyonu
Aşağıdaki koşullar geçerli olacaktır:
  • 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.

Altyazılar

Bu dosyanın temsil ettiği şeyin tek satırlık açıklamasını ekleyin.

Bu dosyada gösterilen öğeler

betimlenen

26 Kasım 2016

Dosya geçmişi

Dosyanın herhangi bir zamandaki hâli için ilgili tarih/saat kısmına tıklayın.

Tarih/SaatKüçük resimBoyutlarKullanıcıYorum
güncel06.20, 27 Kasım 201606.20, 27 Kasım 2016 tarihindeki sürümün küçültülmüş hâli800 × 600 (972 KB)Shiyu JiUser created page with UploadWizard

Bu görüntü dosyasına bağlantısı olan sayfalar:

Küresel dosya kullanımı

Aşağıdaki diğer vikiler bu dosyayı kullanır: