(2017.11.10) python-Meep + ubuntu 16.04
1. apt-getでいれたmpbは消しておく
apt-getでソースファイルをとってくるようにするには/etc/apt/source.listを編集。
3行をコピペして、ペーストした方をdev-srcに書き直すだけ。apt-get updateで変更を反映。
flagなどを初期状態にするため、新しいシェルを立ち上げて作業する。
libctlのバージョンが1.14に限定されていてエラーになるので、sedで1.15に書き直す。
3. python-meepのインストール(とりあえず非mpi版のみ)古いものは消しておかないと誤動作の元!
基本的な考え方は
swigが必要。関係するプログラムのヘッダファイルも必要。apt-getでいれられるものはいれてしまう。
python-meep 最新版のダウンロード。launchpad にいって自分でさがす。2017.11.10現在ではver 1.4.2
こまかいエラーを修正する。
mpb、meepの標準ディレクトリは/usr/local/libなので、setup.pyを直しておく。実行パスの設定
起動するか確認
失敗したときは、インストール先のファイルを消して,最初からやり直す(上書きしてくれることは期待しない)
4. 動作確認。 \python-meep\tests の中身を順に実行
BOMBO / Hirokazu Kubota
python-Meep1.3がエラーになっていたが動かしている人がいたので参考にして、1.2から入れ直した。
mpbをーfPICオプションでコンパイルしたほうがよいとかいてあったので、それもやっておく。
sudo apt-get remove mpb mpb-dev
sudo vi /etc/apt/source.list
sudo apt-get update
apt-get source mpb
export LDFLAGS="-L/usr/local/lib"
export CPPFLAGS="-I/usr/local/include"
export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"
export CFLAGS=" -fPIC"; export CXXFLAGS=" -fPIC"; export FFLAGS=" -fPIC"
./configure --enable-shared
make
sudo mkdir /usr/local/share/mpb
sudo cp mpb/mpb.scm /usr/local/share/mpb/mpb.scm
time make check
sudo make install
2. meep も-fPICでコンパイル。apt-getで入れたlibctlは消しておく。
export CPPFLAGS="-I/usr/include/hdf5/serial/ -I/usr/local/include"
export LDFLAGS="-L/usr/lib/x86_64-linux-gnu/hdf5/serial/ -L/usr/local/lib"
export LD_LIBRARY_PATH="L/usr/local/lib:L/usr/lib/x86_64-linux-gnu/hdf5/serial:$LD_LIBRARY_PATH"
export CFLAGS=" -fPIC"; export CXXFLAGS=" -fPIC"; export FFLAGS=" -fPIC"
./configure --enable-maintainer-mode --enable-shared
sed -i -e 's:1.14:1.15:g' Makefile
make
time make check
sudo make install
・python-meep.tgzを拾ってきてREADMEにしたがって作業する
・エラーになる部分は原因を探して手直しする
sudo apt-get install swig
sudo apt-get install build-essential
sudo apt-get install python-scipy <==pipで別バージョンのscipyをいれないこと
sudo apt-get install python-matplotlib
sudo apt-get install python-dev (ubuntuの場合必要らしい)
wget https://launchpad.net/python-meep/1.4/1.4/+download/python-meep-1.4.2.tar
meep-site-init.pyの1行めはコメントアウトではなく削除する。+文字の修正(動作に影響しない)+警告をださないようにする?+インデント修正(これをやらないとmeep.pyがエラーになる)
sed -i -e '/initialisations/d' meep-site-init.py
sed -i -e 's:MPI:non-MPI:g' meep.i
sed -i -e 's/#global/global/g' -e 's/#DISABLE/DISABLE/g' -e 's/\t/ /g' meep-site-init.py
sed -i -e 's:/usr/lib:/usr/local/lib:g' -e 's:/usr/include:/usr/local/include:g' ./setup.py
export LD_RUN_PATH=/usr/local/lib
sudo ./make -I/usr/include/x86_64-linux-gnu/ -L/usr/lib/x86_64-linux-gnu/
$ python
>>> import meep
cd tests
for f in *.py; do python $f; done
警告メッセージの”meep: thermo_energy_in_box no longer supported”はmeep1.2以降削除されたので無視する