(しばらく工事中。一応 Intel Mac 向けにも M1 Mac 向けにもコンパイルできて、 make check も通ったけれど。まだ良く分かっていないところがある。)
日本応用数理学会の講演で、FreeFem++ の plot() に、 PDF/SVG 出力機能を追加するというパッチの話を聞いた (「FreeFEMにおける2次元数値計算結果のPDFファイル出力の機能拡張」 藤原 宏志(京都大学))。 PDF出力はぜひ欲しかった機能なので早速試してみることにした。
PDF/SVG output by the built-in plot() command
パッチは、 「FreeFEM Programs」 に公開されている。 これはソースプログラムへのパッチなので、 利用するには、FreeFem++ のソースプログラムを入手して、 それにパッチを当ててから make する必要がある。
1. 事前準備 まず必要なコマンドを ”確認&なければインストール” する。
sudo port install gcc12 sudo port select --set gcc mp-gcc12あるいは sudo port install gcc-devel sudo port select --set gcc mp-gcc-devel(gcc-devel と gcc12 のどちらを選択すべきか良く分からない。 M1 については gcc-devel の方が良いこともある印象があったけれど、 最近は gcc12 で十分で、総合的に見てそちらを選択するのが良いのか? と考えている。) それから sudo port install autoconf sudo port install automake sudo port install gmake |
ライブラリィについても色々注意が必要そうである。 私は hdf5 関係でハマった。 hdf5 については、Python 関係でインストールしてあるものが configure に発見され、 そちらを使ってコンパイルするような Makefile が生成され、 Intel Mac では大丈夫だったが、M1 Mac ではCPU 関係の不適合があってエラーになった (これは Intel 用のコードの入っているライブラリィがあったためらしく、 私の環境整備が不十分ということかもしれない)。 (2022/9/11追記 他に gsl も入れておくべきらしい。) こういうのはなかなか悩ましい。 configure に見つからないようにしてから configure を実行するものか。
sudo port install hdf5 sudo port install gsl mv ~/opt ~/opt2(/opt をどけるのは安直な対策だ…後で元に戻す。 そのうちもっとスマートな方法を探すつもり。) |
2. FreeFem++ のソースプログラムの準備 最近 FreeFem++ のWWWサイトを見ると、GitHub から入手せよ、となっているようだけど… パッチは FreeFem-sources-4.11.tar.gz をターゲットにしているようだ。 入手する場合は
curl -OL https://github.com/FreeFem/FreeFem-sources/archive/refs/tags/v4.11.tar.gz mv v4.11.tar.gz FreeFem-sources-4.11.tar.gz tar xzf FreeFem-sources-4.11.tar.gz cd FreeFem-sources-4.11 |
git clone https://github.com/FreeFem/FreeFem-sources.git cd FreeFem-sources |
3. 小さな準備 後で実行する make petsc-slepc はシステムの領域に書き込もうとするので、 管理者権限が必要になる。 作業全体を管理者権限で実行するのはオススメできないので、 あらかじめディレクトリィを用意して、 コンパイル作業を実行するユーザーをオーナーにしておく。
#sudo rm -rf /usr/local/ff-petsc sudo mkdir -p /usr/local/ff-petsc/{r,c} sudo chown -R $USER /usr/local/ff-petsc |
4. コンパイル作業 コンパイル作業の大まかな流れは GitHub の README.md に書いてある。 以下はそれに沿っての作業。
/Users/mk/.tex-inputs/knowhow-2022-fig/compile.sh |
(2022/11/20追記) 入手できるようにしておく。 https://m-katsurada.sakura.ne.jp/misc/20221120/compile.sh
ログを残すようにしている。進展状況をみるには、別にターミナルを開いて、 例えば make.log の場合
tail -f make.log |
make check の結果、全て PASS したことを確認する。
grep '^# ' make-check.log grep '^# ' make-check.log | grep ERROR grep '^# ' make-check.log | grep -v PASS | grep -v TOTAL|grep -v 0 |
5. インストール作業
sudo make install |
plotPDF : Save Numerical Solutions/Mesh/Indices to PDF file
plotPDF() という新規関数をダイナミック・モジュールとして実現したものが (上と同じ) http://www-an.acs.i.kyoto-u.ac.jp/~fujiwara/ff++-programs/ で公開されている。色々な情報を PDF として出力してくれる。
(2022/10/16追記)
plotPDF はダイナミック・モジュールなので、
FreeFem++ のコンパイルし直しは必要がないかと思っていたが、
試しにやってみたらうまく行かなかった。忙しかったので追求していないけれど、
そのうちまたやってみる。
ソースプログラム入手、コンパイル、インストール |
curl -O http://www-an.acs.i.kyoto-u.ac.jp/~fujiwara/ff++-programs/plotPDF-20220907.cpp ff-c++ -std=c++11 plotPDF-20220907.cpp -lz sudo cp -p plotPDF-20220907.dylib /usr/local/lib/ff++/4.11/lib/plotPDF.dylib |
(2022/10/16追記) ファイルが更新されていた。 http://www-an.acs.i.kyoto-u.ac.jp/~fujiwara/ff++-programs/plotPDF-20221011.cppこちらでも無事動作した。
サンプル・プログラムの実行 |
curl -O http://www-an.acs.i.kyoto-u.ac.jp/~fujiwara/ff++-programs/plotPDF-sample.edp FreeFem++ plotPDF-sample.edp終了後に LshapeP1.ps, LshapeP1.pdf, LshapeP1contour.pdf, LshapeWithMesh.pdf, LshapeP1op1.pdf, LshapeP1op2.pdf, LshapeP0.pdf, LshapeP1nc.pdf, LshapeP2.pdf, LshapeP2asP1.pdf, vector.pdf というファイルが出力される。 open Lshape*.pdf でプレビューできる。 |
plotPDF() の使い方 |
bool plotPDF( mesh Th, PDFFilename [, options] ); bool plotPDF( Vh u, mesh Th, PDFFilename [, options] ); bool plotPDF( Vh<complex> u, mesh Th, PDFfilename [, options] ); bool plotPDF( [Vh u, Vh v], mesh Th, PDFFilename [, options] ); |
これらの機能が本家に統合されると良いですね。
それにしても、ff-c++ のドキュメントってないのかな。 シェル・スクリプトだから、中身を読んで理解しろ、と言うことか?
(2022/12/23追記) 2週間ほど前に version 4.12 がリリースされたが、PDF/SVG 出力機能が取り込まれた。 大変めでたいことだけれど、Mac 用のバイナリーが提供されていない。 うーん。Hecht 先生いないと大変だ。
桂田 祐史