$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$ で実装し、
手を動かしていきます。
コメント
コメントを投稿