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

【簡単にできた!】データをPythonで読み込んでアニメーション作成

2019/05/31
 
この記事を書いている人 - WRITER -

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

偏微分方程式を数値計算で解いて、結果をアニメーションしたいと思ったときにPythonを使うと楽でしたので記事に残しておこうと思います(^^)/

 

本記事の内容はこちら
Fortranで出した出力データをPythonでアニメーション作成する

 

前回の記事で、アニメーション作成にはgnuplotやparaviewを使ったりしました。

 

色々試してみて・・・・

Fortranで数値計算してデータを出力しておいて、Pythonでサクッっとアニメーション作成作れるようにもしておこうかなって思いました。

【本記事の内容】数値計算からアニメーション作成までのフローはこちら↓。

 

※Fortranのコードとスクリプトは本記事にアップされています。
※FortranのコードはFortran90/95の書き方にしているつもりですが正確に書けているかは不明です。
※FortranはWSLを使ってインストールしています。
※PythonはJupyter Notebookを使っています。

スポンサーリンク

解く方程式は1次元移流方程式

 

簡単な偏微分方程式を題材にしておきます(^^)

1次元の移流方程式
 
\begin{align*}\frac{\partial T(x,t)}{\partial t}+u\frac{\partial T(x,t)}{\partial x}=0\tag{1}\end{align*}
 
※\(u\):一定速度
 
1次元の移流方程式は、下記の絵のように何かの物理量を形を変えずに一定速度\(u\)で運ぶ方程式を意味しています。
 

1次元移流方程式を離散化する

 

(1)式を離散化する場合は注意する必要があったんですよね。

1次元移流方程式を陽解法で解くときには、数値的に安定な条件で離散化&条件設定をする必要がありました。

 
前回の記事はこちら
カマキリ
この記事は、なかなか教育的な記事が書けた気がする。

結論を書いておくと、

  • 陽解法で解くのあれば後退差分(風上差分)でないと数値的に安定には解いてくれないということがわかりました。

↑Fortranで解くのは赤枠の離散化した式です。
※\(\alpha=\frac{u\Delta t}{\Delta x}\)

さらに、

  • 空間と時間の刻みにも制限がありました。
    (記事の内容は1次元移流方程式ではありませんが・・・)

1次元熱伝導方程式の陽解法で解いた時の数値的安定性

 

話をまとめると・・・

  1. 離散化する際の差分に注意する
  2. 数値的に安定な「空間と時間」の刻みを考える

※陰解法で解く場合はまた状況が異なりますが・・・(‘_’)

 

Fortranで1次元移流方程式を解く

 

Fortranのコードを載せておきましょう(^^)/

ファイルの書き出し部分の解説↓

Fortranを実行すると・・・(僕はgfortranを使っています)

データがいっぱいできるので、これをPythonでアニメーション作成しようということになります。

 

Pythonでアニメーション作成

 

Pythonでのアニメーション作成用のコードはこちら↓

ファイル構成はこうなっています↓

20190519_1Danimetion_Fortran2Python_iryu2.zip

 

 

これをJypter Nootebookで実行すると・・・アニメーション作成ができます(^^)/

 

 

1次元移流方程式のアニメーション結果

 

 

カマキリ
やったー。

でも、「形を変えずに動く」という結果にはなっていませんね(笑)

これは数値計算の離散化に問題がありそうなので、改善しないといけないです・・・・

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

コメントを残す

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