プログラミングの記事を書きます。前回の記事で示したアニメーションはこんな感じhttps://takun-physics.net/wp-content/uploads/2019/04/20190429_185046.mp4カマキリ1次元の熱伝導方程式のアニメーションを作ったのです1次元グラフのアニメーションができるのならば、gnuplotの「splot」を使って3次元アニメーションも作れるなと思ったので、記事にします(^^)/本記事の内容はこちら2次元の熱伝導方程式をFortranで解いて、gnuplotで3次元アニメーションを作る(^^)/※Fortranのコードとスクリプトは本記事にアップされています。※FortranのコードはFortran90/95の書き方にしているつもりですが正確に書けているかは不明です。※FortranはWSLを使ってインストールしています。※gnuplotはこのサイトを参考にすれば良いかと思います。Linux(WSL)を使って、UbuntuからFortranやgnuplotをインストールして使用しています。こちらの記事もどうぞ2次元熱伝導方程式をFortranで解くまずは解くべき方程式を明らかにしておきましょう。y^2}\bigg)\tag{1}\end{align*}熱伝導方程式は、初期状態を与えれば(1)式に従って時間発展をする方程式です。今回は初期状態を以下のようにしておきます。中央だけ中央だけ温度が高く、\(x\)方向の両端は温度0(K)の条件となっています。\(x\),\(y\)の端は初期状態から変化させないような境界条件にしているので、時間発展させると中央の高い温度の部分から低い温度へ熱移動が生じて、下記のような変化を示します。今回は、これをgnuplotを使ってアニメーションを作ろうということになります。全体の流れアニメーション作成までの全体の流れを押さえておくと少し気持ちのハードルは下がるかもしれないので、先に全体の流れを示しておきます。2次元熱伝達方程式は偏微分方程式であるため、それを数値的に解くためには離散化してあげる必要があります。今回は、「時間に対しては陽解法」「空間に対しては2次精度」で解くことを考えています。次にForranを使って離散化した方程式を数値的に解くことを考えます。(※コードは後ほど)Fortranで出力したデータをgnuplotで順番に読み込んでいくためのスクリプトをFortranを使って作成します。これらのことができれば、あとはgnuplotで「3.」で作成されたスクリプトを実行するだけアニメーションを作成することができます。※1次元熱伝導方程式を題材にしたのは、簡単な方程式の方がアニメーション作成の方法を理解しやすいと思ったからです。ゆえに、離散化も特にこだわってはいません。空間微分の項(右辺)は2次精度で離散化で進めていきましょう。離散かされた式が↓こちらです。y^2}\end{align*}では、これをFortranで解きましょう(^^)/Fortranで解く離散化された方程式をFortranで解くためのプログラムを書いていきましょう。以下がプログラムです。thermal_explicit↓前回の記事の次元を1次元から2次元に拡張しただけです。↑今回はgnuplotの3次元表示のsplotでの表示の仕方をpm3d(カラーマップ表示)でしたかったのですが、上記のようにプロットするデータは同じ数字が続いている場合には改行をいれないといけないようでして、改行を入れるようにプログラムを書いています。↑ちなみに「data」という名前のディレクトリを自分で作っておく必要があります。以上がプログラムの中身です。ここまでできたら、以下のコマンドで計算を実行させます。2D_Thermal_Eq.f90./a.out実行ができれば「data」という名前のディレクトリの中に、以下のように大量のデータが保存されていることが確認できます。これらのデータが指定したタイムステップで出力された温度の空間分布のデータです。あとは、これらのデータを順番にgnuplotで読み込めばアニメーションが完成ということになります。そのためには、gnuplotのスクリプトが必要になります。スクリプトは書くのが少々面倒なので、スクリプト自体をFortranで書くことにします。アニメーション用のgnuplotのスクリプトをFortranで作成gnuplotのスクリプトを作成するためのFortranのプログラムがこちらです。animation_script↑簡単に説明すると「do文」のところで先ほどの「data」という名前のディレクトリ内の大量のデータを順番に読み込む作業を行っています。以下のコマンドを実行してみます。>movie」とするとmovieというファイルが出来上がり、その中にFortranの「print文」の内容を全て書き出してくれます。この「movie」というファイルがgnuplotのスクリプトとなります。以上のことが終えれば、あとはgnuplotで「movie」という名前のスクリプトを走らせるだけです。アニメーションを作成してみよう(^^)/「movie」というスクリプトは2通りの方法で実行できます。“movie”」とスクリプトファイルをloadしても良いです。アニメーションはこんな感じhttps://takun-physics.net/wp-content/uploads/2019/04/20190429_192249.mp4カマキリできたまとめごちゃごちゃ説明してしまいましたが、下記のzipファイルを解凍して下記のコマンドを打ってお試しください。-1次元熱伝導方程式の陽解法で解いた時の数値的安定性Pythonで2次元の熱伝導方程式をアニメーションが簡単にできた【1階微分!中心差分の4次精度】テーラー展開から真面目に導出してみた。-【CAE解析の目的とは?】CAEは実機の代替えなのか?精度を無視してパラメータスタディすることは意味がないのか?【Udemyがお勧め理由5つ】プログラミングを勉強するなら動画学習おすすめ【まとめ】比熱の温度依存性について。古典論と量子論から理解する。【理想気体の比熱の温度依存性(7)】シュレディンガー方程式の極座標表記(2原子分子)から動径方向だけを抽出しようコメントを残すコメントをキャンセルプロフィールカマキリ(^^)大学以上の物理を勉強してブログに書いていきます。大学の専攻は物性理論で、Fortranを使って数値計算をしていました。CAE解析(流体解析)・毎日note更新しています。内容は、「現在勉強中の内容」「日々思ったこと」を書いています。1DCAEの操作方法などを動画にしています。youtube・Qiitaではプログラミング言語の基本的な内容をまとめています。(10)ブログをメールで購読メールアドレスを記入して購読すれば、更新をメールで受信できます。