偏微分方程式の汎用数値解法には、古くから 差分法 (finite difference method, FDM) と有限要素法 (finite element method, FEM) という二大手法があります (有限体積法 (finite volume method) も良く使われるので、「二大」は止めた方が良いでしょうか…)。
有限要素法は、 解析学の世界でスタンダードとなっている弱解の方法 を数値計算に応用したもので、 微分方程式の弱定式化の議論とほぼ並行した形で近似解の議論がなされ、 数学者になじみやすいものです。 また有限要素法は、 プログラムの自動生成がしやすいという特徴を持っています1。 このため、従来から、 プログラムを自動生成するシステムを開発する試みが色々なされてきました。
FreeFem は、 2次元, 3次元領域における偏微分方程式の問題を有限要素法で解くための、 一種の PSE (problem solving environment) です。 パリ第6大学 J. L. Lions 研究所の Frédéric Hecht, Oliver Pironneau, A. Le Hyaric, 広島国際学院大学の大塚厚二氏らによって開発されました。 ソースコードと マニュアル (幸い英文)、 主なプラットホーム (Windows, Mac, Linux) 向けの実行形式パッケージ等がフリーで公開されています。 メインの開発者である F. Hecht 氏による解説 [2] を紹介しておきます。
マニュアルPDF (700ページ超) が、 FreeFEM Documentation という URL で入手できます (この URL は固定されたでしょうか…)
現在は WWW 上のドキュメンテーション FreeFem++ Documentation を参照するのが普通になるのかもしれません。
FreeFem++ では、 ユーザーが境界曲線を指定することで定義した2次元領域に対して、 自動的に三角形要素分割を生成し、 弱形式により記述された問題に対して、 種々の有限要素(関数)空間を用いて弱解を求め、 可視化することが可能になっています (最近では3次元領域の問題も解けるようになっているようですが、 筆者はそれについてほとんど知らないので、 言及するのを止めておきます。)。
問題の領域や弱形式などは専用の言語で記述した短いプログラム (ものによっては 20〜30 行程度) として与え、 それを実行することでシミュレーションを行います。
すべての問題がこのソフトで扱えるわけではありませんが、 扱える問題は結構幅広く、それが出来るときは多くの場合、 C 言語のようなプログラミング言語で一からプログラムを書くのに比べて、 桁違いに短い時間でシミュレーション実行までたどり着けます。 (プログラムの行数自体は、2桁とは行きませんが、 桁くらい小さいように思います。)
大塚・高石「有限要素法で学ぶ現象と数理―FreeFem++」 共立出版 (2014) という解説書が出版され、 そのサポートサイト 「有限要素法で学ぶ現象と数理」 が出来ました。 有益な情報が日本語で得られるようになりました。
日本応用数理学会で、 FreeFem++ のセミナーが何回か開かれています。 私が参加できた直近2回の情報は
幸い、2回とも都合がついて参加でき、有益な情報が得られました。 関係者のご尽力に感謝いたします。
講師の鈴木厚先生には、 2007年の九州大学で行われたチュートリアルでもお世話になりました。 そのとき頂いた資料をネタにして、 自分の学生に FreeFem++ を教えて来ましたが、 今後は、上のセミナーの資料を咀嚼して、学生に教えていくことになると思います。