高校物理、大学受験、大学物理、プログラミングの記事を書きます。

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

2019/09/17
 
この記事を書いている人 - WRITER -

こんにちは(@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は結構時間かかるんですね・・・(‘_’)

 

この記事を書いている人 - WRITER -

コメントを残す

Copyright© 宇宙に入ったカマキリ , 2019 All Rights Reserved.