#Fortranで数値解析
数値解析では、次のような手順を踏むことが多い。
- プログラムに入力するデータの準備
- 計算の実行
- データ出力と結果の可視化など
これらの各場面で便利なライブラリをメモしておく。Ubuntu18.04において以下ライブラリが使える。
##データ入出力
HDF5自体にFortranバインディングがあり、出力ファイルをスッキリひとつにまとめて保存できる。これを使う利点は次の通り。
- バイナリファイルで出力される。
- データの圧縮度合いを指定できるので、ディスク容量の節約になる。
- 読み書きが早い。
- データ自体に色々とメモ(Attribute)を保存できるので、適切にメモを保存していればあとでデータの内容を思い出しやすい。
- python,Rなどでもhdf5形式のファイルを読み込めるので、データの可視化が容易。なおかつ、読み込むときは欲しい部分だけ指定すれば良いのでメモリの少ないシステムでも使いやすい。
##データの可視化
最も簡単な方法は、解析結果をテキストファイルに書き出し、それをgnuplotなどで描画する方法ではないだろうか。上記のHDF5で書き出した場合は、テキストにダンプしてから描画しても良いし、pythonやRでhdf5そのものからデータをメモリ上に取り出して描画すれば良い。
fortranのプログラムからダイレクトにグラフを描画する場合は、PLplotなどが使える。PLplotライブラリだけで、画面上に表示したり、マウスを使ってグラフ上の座標を取得したりできる。
さらに、アニメーションを作る場合、fortranからOpenGLを呼び出すと良い。fortranバインディングとして、例えばF03GLを使えば良い。自分のプログラムで解析した結果が画面上でヌルヌル動く様はそれだけでも面白いし、バグがあれば画面上で異常な挙動としてすぐ分かるので重宝している。
##数値解析ライブラリ
初め2つは言わずもがな。BLASは、システムに最適化されたものがあればそれを使う。その他、fortranから自由に使えるものとして以下が挙げられる。netlibを参照すると、以下の大半が得られる。
- BLAS:線形代数基礎演算
- LAPACK:線形代数
- MINPACK:非線形方程式の求解または最小自乗解。
- ODEPACK:9種類の常微分方程式解法。
- DASKR:微分代数方程式
- RKSUITE:ルンゲクッタ法
- ORDERPACK:ランキング、ソート
- DIERCKX : スプラインによる曲線近似や補間(平面の近似も可能)
- FFTW:フーリエ変換
- QUADPACK:各種積分
- GSL(fgslがfortranバインディング):科学技術全般に関わる解法
商用ライブラリでは以下がある。
- MKL:intelのライブラリ。線形代数、高速フーリエ変換 (FFT)、ベクトル演算関数、統計関数などが使える。常微分方程式の解法はない。
- IMSL:科学技術全般。網羅的。
- NAG数値計算ライブラリ:科学技術全般。網羅的。
#GUIアプリをfortranで作る
gtk-fortranは、fortranからgtk+の関数をコールするためのライブラリである。
fortranユーザは科学技術計算の利用者が多いことを踏まえて、cなどで同じことを書くよりは少数のルーチンをコールするだけでグラフを描画する画面を作成できるハイレベル関数が独自に定義されている。