C言語+GLSC
macOSでシミュレーション
準備
macOS下準備に従って、MacPorts および、共通的に必要となるパッケージをインストールしてから以下に進みます。
C言語入門
C言語入門のPart.1からPart.13までは、macOS下準備でインストールした Xcode および gnuplot で学ぶ事ができる。まずはこちらでC言語を学ぼう。数値計算法を使ったC言語入門だ。
GLSCのインストール
macOS下準備に、GLSCのバイナリインストールの仕方を書いた。ソースからのインストール方法はいずれ載せたいとは思っている。
偏微分方程式の時間発展問題のシミュレーションを行う時には、その時間発展をアニメーションとしてみたい。できれば、シミュレーションをしつつリアルタイムでアニメーションとして可視化できれば、研究の効率は大変高くなる。どうしてGLSCかと言われることも多いが、シミュレーション結果を見つつ、パラメーターサーチをするといった研究の過程において、当面GLSCを用いたC言語による自作数値シミュレーションコードを使った研究よりも効率的なものは思いつかない。
先のC言語入門のPart.14から、GLSCの使い方と、それを用いたシミュレーションの手法が書いてある。
GLSCでアニメーション(anmated GIF, mp4形式)の作り方
ここを実行するには、MacPorts を用いて、 imagemagick と ffmpeg がインストールされている必要があります。具体的には、
sudo port install imagemagick ffmpeg
が実行されている必要があります。
macOS下準備に、GLSCのバイナリインストールの仕方を書いたが、
~/glsc_mac_bin/sample/heat2d
フォルダ内にサンプルがある。このフォルダ内に anim というフォルダがあるが、そこに静止画が番号順にできあがる仕組みになっている。
g_dump.c
がその仕組みを実現している関数が含まれているファイルだが、それを邪道ではあるが、heat-g.c 内にて #include 文で導入している。使い方は、 heat-g.c を見て欲しいが、画面を保存したい所に、
g_dump("フォルダ名");
を挟むだけで良い。anim フォルダ内に連番で png 形式の画像ができあがる。g_dump.c を見るとわかるが、外部コマンドとして ImageMagick の import コマンドを使う。であるから、MacPorts を使う事になったのである。次の様にコンパイルして、実行する。
~/glsc_mac_bin/bin/cglsc heat-g.c
./heat-g
これによって、anim フォルダ内に 000.png, 001.png ....... ができあがる。
その連番の画像を例えば、animated GIF にする場合には、
ffmpeg -i anim/%03d.png anim.gif
次ができあがったもの。このように、ウェブページに貼ったりするには適した形式だ。
mp4 にする場合には、次の様にする。特に mac での再生をする場合にはオプションが大事になる。
ffmpeg -i anim/%03d.png -pix_fmt yuv420p anim.mp4
オプションの、
-pix_fmt yuv420p
を付けないと、mac の QuickTime で再生できないので注意。
静止画の形式は、g_dump.c 内の
sprintf(fname, "%s/%03d.png", _dir, _n++);
において、 png を例えば、jpg にすれば jpeg 形式となる。また、999枚で済まない場合には、適宜 %03d を %09d 等に変更する。その場合、先の ffmpeg でのファイル名の指定も %09d とすることになる。