Python

Pythonで2次元の熱伝導方程式をアニメーションが簡単にできた

こんにちは(@t_kun_kamakiri)(‘◇’)ゞ

↓前回の記事で2次元熱伝導方程式をFortranで解いて、アニメーションをgnuplotで作成するというのをしました。

前回の記事はこちら

アニメーションはこんな感じ

 

さらに、↓vtk形式としてparaviewでアニメーション作成するというのもしました。

前回の記事はこちら

paraviewによる基本的な操作は動画にしています。

カマキリ

「gnuplotのスクリプトを書く」のも「vtk形式でparaviewで読む」のも結構調べるの大変だった

 

上記のように色々試しましたが、結局アニメーション作成はPythonでさくっとやってしまおうと思いましたね・・・・(‘ω’)

本記事の内容

Pythonで2次元の熱伝導方程式を解いて、Pythonでアニメーションまで作成。

※Pythonの動作にはJupyter Notebookを使用しています。

スポンサーリンク

Pythonの使用環境

Pythonの使用環境は色々あると思います。

以下に代表的なものを紹介しておきます。

①Pythonの本家をインストール

②AnacondaをインストールしてJupyter notebookを使用

③PycharmをインストールしてPythonを使用

④visual studioをインストールしてPythonを使用

 

カマキリ

僕はAnacondaをインストールしてJupyter notebookを使用したいと思います。

2次元熱伝導方程式を離散化して解く

解きたい方程式は、下記の記事でも詳しく解説しています。

前回の記事はこちら

 

Pythonで解きたい方程式は↓こちらです。

2次元熱伝導方程式
\begin{align*}\frac{\partial T}{\partial t}=\kappa\bigg(\frac{\partial^2T}{\partial x^2}+\frac{\partial^2T}{\partial y^2}\bigg)\tag{1}\end{align*}
熱伝導方程式は、初期状態を与えれば(1)式に従って時間発展をする方程式です。
今回は初期状態を以下のようにしておきます。
中央だけ中央だけ温度が高く、\(x\)方向の両端は温度0(K)の条件となっています。
また、\(x\),\(y\)の端は初期状態から変化させないような境界条件にしているので、時間発展させると中央の高い温度の部分から低い温度へ熱移動が生じて、下記のような変化を示します。
立体的に見るとこんな感じですね(^^)/
(1)式の偏微分方程式を離散化するにあたって、
  • 時間微分の項(左辺)は陽解法
  • 空間微分の項(右辺)は2次精度

で離散化で進めていきましょう。

離散かされた式が↓こちらです。
\begin{align*}T^{n+1}(x_{i},y_{j})=T^{n}(x_{i},y_{j})+\kappa dt\frac{T^{n}(x_{i}+\Delta x,y_{j})-2T^{n}(x_{i},y_{j})-T^{n}(x_{i}-\Delta x,y_{j})}{\Delta x^2}\\
\kappa dt\frac{T^{n}(x_{i},y_{j}+\Delta y)-2T^{n}(x_{i},y_{j})-T^{n}(x_{i},y_{j}-\Delta y)}{\Delta y^2}\tag{2}\end{align*}
今回は、これをPythonで解いてアニメーション作成までしようということになります。

Pythonで解いて2次元のアニメーション

Pythonのコードを載せておきましょう。

アニメーション作成の結果

作成されたアニメーション作成はこんな感じです。

 

2次元配列だとPythonは結構時間かかるんですね・・・(‘_’)

参考書

Pythonで学ぶ流体力学の数値計算法

Pythonで学ぶ流体力学の数値計算法

藤井孝藏, 立川智章
4,180円(04/19 01:49時点)
Amazonの情報を掲載しています
スッキリわかるPython入門 (スッキリわかる入門シリーズ)

スッキリわかるPython入門 (スッキリわかる入門シリーズ)

国本大悟, 須藤秋良
2,640円(04/19 18:38時点)
Amazonの情報を掲載しています
関連記事もどうぞ

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です