!!!{{category 研究}}[Meep|http://ab-initio.mit.edu/wiki/index.php/Meep] MITで開発されたフリーのFDTDシミュレーション・ソフトウェア. フロントエンドとしてスクリプト言語Scheme (libctl) を利用できるが, libctlのベースとなっているguileライブラリが動的リンクを要求する ので,大学のScoreクラスタで動作しないようだ. そこで,C++からライブラリとしてMeepを読み込んで利用する事にする. !!インストール方法 大学のクラスタではIntelのコンパイラが標準になっているが,gnuのコンパイラでビルドした方が何故か高速に実行されるようだ.(blas等にMKLを使用出来なかったのが原因か?MKLは静的リンクが上手く行かなかった.) 必要なライブラリ等も含めて以下の様にビルドした. !hdf5-1.8.3 parallel hdf5は大学のnfsのマウントの仕方が仕様条件を満たしていないため,serialバージョンをビルドする.(mpicc等でビルドしない.) cd hdf5-1.8.3 ./configure \ CC=gcc CXX=g++ FC=g77 \ CFLAGS="-static -O3 -march=pentium4" \ CXXFLAGS="-static -O3 -march=pentium4" \ FCFLAGS="-static -O3 -march=pentium4" \ LDFLAGS="-static -O3 -march=pentium4" \ --prefix=$HOME/usr \ --enable-production \ --enable-static \ --with-default-api-version=v16 make make install !harminv-1.3.1 cd harminv-1.3.1 ./configure \ CC="mpicc -compiler gnu" CXX="mpic++ -compiler gnu" \ F77="mpif77 -compiler gnu" \ CFLAGS="-static -O3 -march=pentium4" \ CXXFLAGS="-static -O3 -march=pentium4" \ FFLAGS="-static -O3 -march=pentium4" \ LDFLAGS="-static -O3 -march=pentium4" \ --prefix=$HOME/usr \ --with-blas='-lblas -lg2c' \ --with-lapack='-llapack -lg2c' make make install !meep-1.0.3 cd meep-1.0.3 ./configure \ CC="mpicc -compiler gnu" CXX="mpic++ -compiler gnu" \ F77="mpif77 -compiler gnu" \ CFLAGS="-static -O3 -march=pentium4" \ CXXFLAGS="-static -O3 -march=pentium4" \ FFLAGS="-static -O3 -march=pentium4" \ MPICXX="mpic++ -compiler gnu" \ CPPFLAGS="-I$HOME/usr/include" \ LDFLAGS="-static -O3 -march=pentium4 -L$HOME/usr/lib" \ --prefix=$HOME/usr \ --with-mpi \ --with-libctl=no \ --with-blas='-lblas -lg2c' \ --with-lapack='-llapack -lg2c' make make install !h5utils-1.11.1 cd h5utils-1.11.1 ./configure \ CPPFLAGS="-I$HOME/usr/include" \ LDFLAGS="-L$HOME/usr/lib" \ --prefix=$HOME/usr \ --without-octave make make install !!自作プログラムのコンパイルと実行 .profileに以下を追記して,ログインし直す. export PATH=$HOME/usr/bin:$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:. export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$HOME/usr/lib/pkgconfig 自作プログラム (hoge.cpp) のコンパイルは以下の様に行う. mpic++ -compiler gnu `pkg-config --cflags meep_mpi` hoge.cpp -o hoge \ `pkg-config --libs meep_mpi` 実際に実行するクラスタのワーキングディレクトリ(/work1_scmgr2等) にアカウント名のフォルダを作成し,そこに実行可能ファイルをコピーしておく. 実行スクリプト (go.sh等) は以下の様な内容になる. #!/bin/sh -f #@$-q cluster2 #@$-eo cd /work1_scmgr2/アカウント名 scrun -scored=cluster2,nodes=16x1 ./hoge > ./hoge.out ジョブの投入は, $ qsub go.sh 作成したワーキングディレクトリーにデータ(hoge.out, *.h5等)が保存される.計算が終了したら,忘れずにデータをホームディレクトリに移動しておく.詳しくは [並列型ジョブの実行方法|https://staffweb.media.hiroshima-u.ac.jp/hpc/HPC_wiki/wiki.cgi?%ca%c2%ce%f3%b7%bf%a5%b8%a5%e7%a5%d6%a4%ce%bc%c2%b9%d4%ca%fd%cb%a1]を参照. !!チュートリアル ![Meep Tutorial|http://ab-initio.mit.edu/wiki/index.php/Meep_Tutorial]のC++版 *[[A straight waveguide]] *[[A 90° bend]] *[[Transmission spectrum around a waveguide bend]] *[[Modes of a ring resonator]] *[[Material dispersion]] {{todayslink 10,v}}