Fail:Navier Stokes Laminar.svg

Kandungan laman tidak disokong dalam bahasa lain.
Daripada Wikipedia, ensiklopedia bebas.

Fail asli(Fail SVG, ukuran dasar 900 × 720 piksel, saiz fail: 9.37 MB)

Fail ini dari Wikimedia Commons dan mungkin digunakan oleh projek lain. Penerangan pada laman penerangan failnya di sana ditunjukkan di bawah.

Ringkasan

Keterangan
English: SVG illustration of the classic Navier-Stokes obstructed duct problem, which is stated as follows. There is air flowing in the 2-dimensional rectangular duct. In the middle of the duct, there is a point obstructing the flow. We may leverage Navier-Stokes equation to simulate the air velocity at each point within the duct. This plot gives the air velocity component of the direction along the duct. One may refer to [1], in which Eq. (3) is a little simplified version compared with ours.
Tarikh
Sumber

Karya sendiri

Brief description of the numerical method

The following code leverages some numerical methods to simulate the solution of the 2-dimensional Navier-Stokes equation.

We choose the simplified incompressible flow Navier-Stokes Equation as follows:

The iterations here are based on the velocity change rate, which is given by

Or in X coordinates:

The above equation gives the code. The case of Y is similar.
Pengarang IkamusumeFan
Versi lain
SVG genesis
InfoField
 
The SVG code is valid.
 
This plot was created with Matplotlib.
Kod sumber
InfoField

Python code

from __future__ import division
from numpy import arange, meshgrid, sqrt, zeros, sum
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import ScalarFormatter
from matplotlib import rcParams
 
rcParams['font.family'] = 'serif'
rcParams['font.size'] = 16 

# the layout of the duct laminar
x_max = 5 # duct length
y_max = 1 # duct width

# draw the frames, including the angles and labels
ax = Axes3D(plt.figure(figsize=(10, 8)), azim=20, elev=20)
ax.set_xlabel(r"$x$", fontsize=20)
ax.set_ylabel(r"$y$", fontsize=20)
ax.zaxis.set_rotate_label(False)
ax.set_zlabel(r"$v_x$", fontsize=20, rotation='horizontal')
formatter = ScalarFormatter(useMathText=True)
formatter = ScalarFormatter()
formatter.set_scientific(True)
formatter.set_powerlimits((-2,2))
ax.w_zaxis.set_major_formatter(formatter)
ax.set_xlim([0, x_max])
ax.set_ylim([0, y_max])

# initial speed of the air
ini_v = 3e-3
mu = 1e-5
rho = 1.3

# the acceptable difference when termination
accept_diff = 1e-5
# time interval
time_delta = 1.0
# coordinate interval
delta = 1e-2;
X = arange(0, x_max + delta, delta)
Y = arange(0, y_max + delta, delta)
# number of coordinate points
x_size = len(X) - 1
y_size = len(Y) - 1
Vx = zeros((len(X), len(Y)))
Vy = zeros((len(X), len(Y)))
new_Vx = zeros((len(X), len(Y)))
new_Vy = zeros((len(X), len(Y)))

# initial conditions
Vx[1: x_size - 1, 2:y_size - 1] = ini_v


# start evolution and computation
res = 1 + accept_diff
rounds = 0
alpha = mu/(rho * delta**2)
while (res>accept_diff and rounds<100):
    """
    The iterations here are based on the velocity change rate, which
    is given by
    
    \frac{\partial v}{\partial t} = \alpha\nabla^2 v - v \cdot \nabla v
    
    with \alpha = \mu/\rho.
    """
    new_Vx[2:-2, 2:-2] = Vx[2:-2, 2:-2] +  time_delta*(alpha*(Vx[3:-1, 2:-2] +
        Vx[2:-2, 3:-1] - 4*Vx[2:-2, 2:-2] + Vx[2:-2, 1:-3] + Vx[1:-3, 2:-2]) -
        0.5/delta * (Vx[2:-2, 2:-2] * (Vx[3:-1, 2:-2] - Vx[1:-3, 2:-2]) +
        Vy[2:-2, 2:-2]*(Vx[2:-2, 3:-1] - Vx[2:-2, 1:-3])))

    new_Vy[2:-2, 2:-2] = Vy[2:-2, 2:-2] + time_delta*(alpha*(Vy[3:-1, 2:-2] +
        Vy[2:-2, 3:-1] - 4*Vy[2:-2, 2:-2] + Vy[2:-2, 1:-3] + Vy[1:-3, 2:-2]) -
        0.5/delta * (Vy[2:-2, 2:-2] * (Vy[2:-2, 3:-1] - Vy[2:-2, 3:-1]) +
        Vx[2:-2, 2:-2]*(Vy[3:-1, 2:-2] - Vy[1:-3, 2:-2])))
        
    rounds = rounds + 1
    
    # copy the new values
    Vx[2:-2, 2:-2] = new_Vx[2:-2, 2:-2]
    Vy[2:-2, 2:-2] = new_Vy[2:-2, 2:-2]


    # set free boundary conditions: dv_x/dx = dv_y/dx = 0.
    Vx[-1, 1:-1] = Vx[-3, 1:-1]
    Vx[-2, 1:-1] = Vx[-3, 1:-1]
    Vy[-1, 1:-1] = Vy[-3, 1:-1]
    Vy[-2, 1:-1] = Vy[-3, 1:-1]

    # there exists a still object in the plane
    Vx[x_size//3:x_size//1.5, y_size//2.0] = 0
    Vy[x_size//3:x_size//1.5, y_size//2.0] = 0

    # calculate the residual of Vx
    res = (Vx[3:-1, 2:-2] + Vx[2:-2, 3:-1] -
           Vx[1:-3, 2:-2] - Vx[2:-2, 1:-3])**2
    res = sum(res)/(4 * delta**2 * x_size * y_size)

# prepare the plot data
Z = sqrt(Vx**2)

# refine the region boundary
Z[0, 1:-2] = Z[1, 1:-2]
Z[-2, 1:-2] = Z[-3, 1:-2]
Z[-1, 1:-2] = Z[-3, 1:-2]

Y, X = meshgrid(Y, X);
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap="summer", lw=0.1,
                edgecolors="k")
plt.savefig("Navier_Stokes_Laminar.svg")

Perlesenan

Dengan ini, saya selaku pemegang hak cipta karya ini, menerbitkannya di bawah lesen yang berikut:
w:ms:Creative Commons
pengiktirafan perkongsian serupa
Anda bebas:
  • untuk berkongsi – untuk menyalin, mengedar dan memindah hasil kerja
  • untuk mencampur semula – untuk menyesuaikan karya
Di bawah syarat berikut:
  • pengiktirafan – Anda mesti memberi penghargaan yang berpatutan, bekalkan pautan ke lesen, dan tunjukkan jika perubahan telah dibuat. Anda boleh lakukannya dalam sebarang cara yang munasabah, tetapi bukan dalam sebarang cara yang mencadangkan pemberi lesen mengendors anda atau penggunaan anda.
  • perkongsian serupa – Jika anda mengubah, adun semula, atau menokok tambah bahan, anda mesti menyebarkan sumbangan anda di bawah lesen yang sama atau serasi dengan yang asal.
  1. Fan, Chien, and Bei-Tse Chao. "Unsteady, laminar, incompressible flow through rectangular ducts." Zeitschrift für angewandte Mathematik und Physik ZAMP 16, no. 3 (1965): 351-360.

Captions

Add a one-line explanation of what this file represents
project

Items portrayed in this file

menggambarkan

Sejarah fail

Klik pada tarikh/waktu untuk melihat rupa fail tersebut pada waktu itu.

Tarikh/WaktuGambar kenitUkuranPenggunaKomen
semasa01:06, 15 Mac 2016Gambar kenit bagi versi pada 01:06, 15 Mac 2016900 × 720 (9.37 MB)NicoguaroSmaller version
00:58, 15 Mac 2016Gambar kenit bagi versi pada 00:58, 15 Mac 2016900 × 720 (11.08 MB)NicoguaroChange the jet colormap, since it is recognized as a bad option, in general. Formatting, and pythonic code (and vectorized operations).
23:34, 6 November 2014Gambar kenit bagi versi pada 23:34, 6 November 2014720 × 540 (14.23 MB)IkamusumeFanUser created page with UploadWizard

Penggunaan fail sejagat

Fail ini digunakan oleh wiki-wiki lain yang berikut:

Lihat banyak lagi penggunaan sejagat bagi fail ini.

Metadata