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 とすることになる。