伝熱問題 scipy

伝熱問題

伝熱問題を考えます。

具体的には、熱伝導方程式を解いて、熱伝導のプロセスを理解し、結果を温度分布の2Dグラフで表示します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import numpy as np
import matplotlib.pyplot as plt
from scipy import sparse, linalg

# ドメインの設定
length_x = 10.0 # x方向の長さ
length_y = 5.0 # y方向の長さ
nx = 50 # x方向のグリッド数
ny = 25 # y方向のグリッド数
dx = length_x / (nx - 1)
dy = length_y / (ny - 1)

# 初期条件の設定
initial_temperature = 100.0 # 初期温度
boundary_temperature = 0.0 # 境界温度

# タイムステップとシミュレーション時間の設定
nt = 100 # タイムステップ数
dt = 0.01 # タイムステップの間隔
sim_time = nt * dt

# メッシュグリッドの生成
x = np.linspace(0, length_x, nx)
y = np.linspace(0, length_y, ny)
X, Y = np.meshgrid(x, y)

# 初期温度分布の設定
temperature = np.full((ny, nx), initial_temperature)
temperature[0, :] = boundary_temperature
temperature[-1, :] = boundary_temperature
temperature[:, 0] = boundary_temperature
temperature[:, -1] = boundary_temperature

# 伝熱係数
thermal_conductivity = 0.01

# シミュレーションのメインループ
for t in range(nt):
# 熱伝導方程式の離散化
dTdx = (temperature[1:-1, 2:] - 2 * temperature[1:-1, 1:-1] + temperature[1:-1, :-2]) / dx**2
dTdy = (temperature[2:, 1:-1] - 2 * temperature[1:-1, 1:-1] + temperature[:-2, 1:-1]) / dy**2

temperature[1:-1, 1:-1] += thermal_conductivity * (dTdx + dTdy) * dt

# 結果の表示
plt.figure(figsize=(10, 5))
plt.contourf(X, Y, temperature, cmap='hot')
plt.colorbar(label='Temperature (°C)')
plt.title(f'Temperature Distribution after {sim_time} seconds')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

このコードは、熱伝導方程式を解き、2D温度分布を計算し、Matplotlibを使用して視覚化します。

この例では、2D領域内での温度分布の時間変化をシミュレートしています。

ソースコード解説

以下に、コードの詳細な説明を提供します:

1. import ステートメント:

  • numpynpとしてエイリアス): 数値計算を効率的に行うためのPythonライブラリ。
  • matplotlib.pyplotpltとしてエイリアス): グラフ描画のためのライブラリ。
  • scipy.sparsescipy.linalg: SciPyライブラリの一部で、疎行列や線形代数演算に使用されます。

2. ドメインの設定:

  • length_xlength_y: シミュレーション領域のx方向とy方向の長さを定義します。
  • nxny: x方向とy方向のグリッドの数を定義します。
  • dxdy: x方向とy方向のグリッドの間隔を計算します。

3. 初期条件の設定:

  • initial_temperature: シミュレーション領域内の初期温度を設定します。
  • boundary_temperature: 境界条件として、領域の境界の温度を設定します。

4. タイムステップとシミュレーション時間の設定:

  • nt: タイムステップ数を設定します。
  • dt: タイムステップの時間間隔を設定します。
  • sim_time: シミュレーションの総時間を計算します。

5. メッシュグリッドの生成:

  • numpy.linspace を使用して、x軸とy軸のメッシュグリッドを生成します。
    これにより、2D領域内の位置情報を取得できます。

6. 初期温度分布の設定:

  • numpy.full を使用して、初期温度で埋められた2D配列(temperature)を生成します。
    境界条件に従って、領域の境界に対応する部分を設定します。

7. 伝熱係数:

  • thermal_conductivity: 熱伝導係数を設定します。
    物質の伝熱性質を示します。

8. シミュレーションのメインループ:

  • 時間ステップごとに熱伝導方程式を離散化して解きます。
    これにより、温度分布が時間とともに変化します。
    temperature 配列が更新されます。

9. 結果の表示:

  • matplotlib を使用して、シミュレーション結果を可視化します。
    contourf 関数を使用して、2D温度分布をカラーマップで表示します。
    カラーバー、タイトル、軸ラベルなどが追加され、分布の可視化が行われます。

このコードは、熱伝導方程式を数値的に解いて、シミュレーション領域内の温度分布を時間とともに可視化します。
熱伝導のプロセスや温度変化を理解するのに役立ちます。

グラフ解析

下記グラフは、2次元の熱伝導問題のシミュレーション結果を表しています。

グラフの詳細を説明します:

1. カラーマップ:

グラフはカラーマップで表現されており、温度の値に応じて色が異なります。
このカラーマップでは、暖かい温度が明るい色で表され、寒い温度が暗い色で表されています。

2. カラーバー:

グラフの右側にはカラーバーが表示されています。
カラーバーは、色と温度の対応関係を示します。
カラーバーのラベルは「Temperature (°C)」で、グラフ上の各色が示す温度の範囲を示しています。

3. タイトル:

グラフの上部にはタイトルが表示されています。
タイトルにはシミュレーションが実行された時間が記載されており、「Temperature Distribution after [時間] seconds」という形式で表示されます。

4. 軸ラベル:

グラフのX軸とY軸には「X-axis」と「Y-axis」というラベルが表示されています。
これらの軸ラベルは、グラフの座標軸を示し、X軸は水平方向(通常は空間)、Y軸は垂直方向(通常は空間)を表します。

5. 温度分布:

グラフの中央部分には、2D空間内の温度分布が表示されています。
明るい色の領域は高温を示し、暗い色の領域は低温を示します。
この分布は時間経過に伴って変化し、熱伝導プロセスがどのように進行しているかを示しています。

このグラフは、熱伝導方程式に基づいて計算された温度分布を視覚化するものであり、時間経過に伴う温度の変化を把握するのに役立ちます。
暖房や冷却、材料の熱伝導特性の評価など、さまざまな応用分野で使用できる熱伝導のシミュレーションに関連しています。