(2017.11.10) python-Meep + ubuntu 16.04
python-Meep1.3がエラーになっていたが動かしている人がいたので参考にして、1.2から入れ直した。
https://github.com/FilipDominec/python-meep-install
mpbをーfPICオプションでコンパイルしたほうがよいとかいてあったので、それもやっておく。

1. apt-getでいれたmpbは消しておく

sudo apt-get remove mpb mpb-dev

apt-getでソースファイルをとってくるようにするには/etc/apt/source.listを編集。 3行をコピペして、ペーストした方をdev-srcに書き直すだけ。apt-get updateで変更を反映。

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は消しておく。

flagなどを初期状態にするため、新しいシェルを立ち上げて作業する。 libctlのバージョンが1.14に限定されていてエラーになるので、sedで1.15に書き直す。

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

3. python-meepのインストール(とりあえず非mpi版のみ)古いものは消しておかないと誤動作の元!

基本的な考え方は
・python-meep.tgzを拾ってきてREADMEにしたがって作業する
・エラーになる部分は原因を探して手直しする

swigが必要。関係するプログラムのヘッダファイルも必要。apt-getでいれられるものはいれてしまう。

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の場合必要らしい)

python-meep 最新版のダウンロード。launchpad にいって自分でさがす。2017.11.10現在ではver 1.4.2

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

mpb、meepの標準ディレクトリは/usr/local/libなので、setup.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

失敗したときは、インストール先のファイルを消して,最初からやり直す(上書きしてくれることは期待しない)

4. 動作確認。 \python-meep\tests の中身を順に実行

cd tests
for f in *.py; do python $f; done
警告メッセージの”meep: thermo_energy_in_box no longer supported”はmeep1.2以降削除されたので無視する

BOMBO / Hirokazu Kubota

BACK