$Python$を使った数値流体解析#4


 

尊敬する「宇宙い入ったカマキリ」さんの

ブログをなぞり、Pythonを使い数値流体

解析を行います。


カマキリさんのURLはこちら↓↓↓ 

https://takun-physics.net/9538/ 


#4は引き続き「1次元の移流方程式をPythonで実装する」


①離散化した1次元の移流方程式

$u^{n+1}_i =   u^n_i  - c  \frac{\Delta t}{\Delta x} (u^n_i - u^n_{i-1})$


②Pythonで実装する

・ライブラリのインポート

---

>>> import numpy as np

>>> import matplotlib.pyplot as plt

---


・初期条件の設定

時間刻み($ = \Delta t$)は、0.25[s]

速度cは、1[m/s]

空間xは0~2mを41分割する。

---

>>> nx = 41

>>> dx = 2 / (nx -1)

>>> nt = 25

>>> dt = 0.25

>>> x = np.linspace(0, 2, nx)

>>> print('dx= ' ,dx)

dx=  0.05

>>> print('x= ' ,x)

x=  [0.   0.05 0.1  0.15 0.2  0.25 0.3  0.35 0.4  0.45 0.5  0.55 0.6  0.65

 0.7  0.75 0.8  0.85 0.9  0.95 1.   1.05 1.1  1.15 1.2  1.25 1.3  1.35

 1.4  1.45 1.5  1.55 1.6  1.65 1.7  1.75 1.8  1.85 1.9  1.95 2.  ]

>>> print(len(x))

41

>>> print(type(x))

<class 'numpy.ndarray'>

---


・uの初期状態

ある空間(位置)のみ2をとり、その他はすべて1をとるものとする。

そこでnp.onesを使用する。

---

>>> u = np.ones(nx)

>>> print(u)

[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.

 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

>>> print(len(u))

41

>>> print(type(u))

<class 'numpy.ndarray'>

---

nx=41の要素のうち「10~21」の要素の値を「2」とする。

---

>>> u[int(0.5/dx):int(1/dx + 1)] = 2

>>> print(u)

[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 1. 1. 1.

 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

---

matplotlibでuの形を見る。

---

>>> plt.plot(x, u)

[<matplotlib.lines.Line2D object at 0x0000016113A5D700>]

>>> plt.xlabel('x')

Text(0.5, 0, 'x')

>>> plt.ylabel('u')

Text(0, 0.5, 'u')

>>> plt.grid(alpha = 0.3)

>>>

>>> plt.show()








---

今日はここまでです。

引き続きを$Python$ で実装し、

手を動かしていきます。

コメント

人気の投稿