QEをインテルコンパイラを使ってMacへインストール(2014 3/21)      

  • Quantum-Espresso(QE)は、擬ポテンシャルと平面波を使う第一原理電子状態計算プログラムである。
  • 使用するMacはMacbook AirでOSはOS X10.9.2. インテルのFortran, C++(ComposerXE2013)をインストール済み。QEは5.0.2をダウンロード。PHonon, XSpecdtra、ge-gipawもダウンロード。5.0.3のdiff(QEとPHononへの5.0.2からの更新が含まれる)があったので、これもダウンロードして、更新したので5.0.3となる。diffを使った更新は、カレントディレクトリに解凍したespresso-5.0.2とespresso-5.0.2-5.0.3.diffがあるとして、
    > patch -p0 -d < espresso-5.0.2-5.0.3.diff
    また、.bashrcに以下を追加しておく。なお、composerXEの場所はバージョンにより変えてください。
    source /opt/intel/composer_xe_2013_sp1.2.139/mkl/bin/mklvars.sh intel64
  • このままでQEのディレクトリで./configureすると、コンパイラとしてインテルを選んでくれるが、MKLを見つけられないようだ。並列化もされないのでopenmpiをインストールする必要があるので、以下の作業を行う。

openmpiのインストール

  • www.open-mpi.orgからソース(最新は1.6.5)をダウンロード、解凍。prefixでインストールするディレクトリを指定。コンパイラはインテルのものを指定。configure, makeは時間がかかる。
    >./configure --prefix=/opt/openmpi CC=icc CXX=icpc F77=ifort FC=ifort
    >make
    >sudo make install
    /opt/openmpi/binを.bash_profileにパスとして追加しておく。

MKL(Intelのmath library)のfftw3ライブラリの作成

  • fftwのライブラリはQEにも用意されているが、MKLの方を使った方が速いようである。ライブラリは予め用意されていないようなので、コンパイルする必要がある。/opt/intel/composer_xe_2013_sp1.2.139/mkl/interfaces/fftw3xfにソースがあるので、ここでmakeする。オプションはよく分からないが、Linuxでやったのと同じようにしてみる。
    >make libintel64 compiler=intel
    特にエラーなし。できたライブラリlibfftw3xf_intel.aをmkl/libに移しておく。

コンパイル

  • MKLのLAPACK, BLASライブラリを見つけてくれない問題は、ライブラリのディレクトリを直接configureで指定することで解決できる。
    > ./configure LIBDIRS="/opt/intel/composer_xe_2013_sp1.2.139/mkl/lib"
    これでBLAS, LAPACKがライブラリとして使われるようになった。しかしfftw3は無視される。仕方ないのでconfigure時にfftw3ライブラリを直接指定する。以下、長いのでわざと改行を入れている。
    > ./configure LIBDIRS="/opt/intel/composer_xe_2013_sp1.2.139/mkl/lib  
    /opt/openmpi/lib" FFT_LIBS="/opt/intel/composer_xe_2013_sp1.2.139/mkl/lib 
    /libfftw3xf_intel.a -lmkl_intel -lmkl_sequential -lmkl_core -lpthread"  
  • -lmkl_intel等はBLAS, LAPACKで使われている指定をそのまま付けてみた。make.sysをチェック。DFLAGS行を見つけて、その中の-D_FFTWを-D_FFTW3と変更する。最初そうなっていなかったが、何度もやるうちに3が自動的につくようになった。理由は不明。さてmakeする。
    > make all
    最初、FFT_LIBSのオプションで-lfftw3を付けていたらエラーが出た。それを取り除いてconfigureして、makeしたらエラーなく終了。
  • 最初に述べたmklvars.shを.bashrcでログイン時に実行されるように設定しておかないと、pw.xなど実行した時にライブラリが見つからないとのエラーが出るので注意。また、.bash_profileで~/espresso-5.0.3/bin, /opt/mpirun/binをパスに追加する。

チェック

  • 基本のpwscf計算をしてみる。pw.xが実行ファイルとなる。以前4.3.2で使った入力ファイルを実行させてみる。もし必要な擬ポテンシャルが/pseudoにないなら、擬ポテンシャルをQEのサイトや擬ポテンシャルを配布しているサイトからダウンロードしておく。個々の原子のポテンシャルも置いてある。デフォルトのインストールではあまり種類が入ってない。
    > pw.x < test.in > test.out &
    問題なく終了。次にopenmpiを試す。使っているMacのCPUはCore i7でcore数が2なので、以下のようにする。-npでコア数を設定する。&はバックグラウンドで計算させるために必要。なお、経験上ハイパースレッディングを使う効果はほぼないので、-np 4としても速くはならない。
    > mpirun -np 2 pw.x < test.in > test.out &
    1coreよりも速くなった。以前のMacbook Air(Core2Duo)の結果と比べたところ、約5倍速くなっていた。しかし重い計算をするとファンがフル稼働する。あまり重い計算はMacbook Airではできない。
  • 計算の進行状況をモニターしたい場合は、tail -f test.outとする。-fはファイルに更新があった場合に表示を更新するオプションで非常に便利。
  • よく使う変換
    • 長さ: 1 au = 0.5291772 Ang.
    • PV項の計算のため:1 GPa = 0.0004587425 Ry/Ang^3

scf計算の入力ファイル例

  • SiO2 stishoviteで1点のscf計算をする例。この入力ファイルのある場所によって、少なくともpseudo_dirを正しいものに変える必要がある。また、実際の計算では擬ポテンシャルを変えたり、精度を変える必要がある。
     &control
        calculation='scf',
        restart_mode='from_scratch',
        prefix='sio2_st',
        outdir = './' ,
        wfcdir = './' ,
        pseudo_dir='../pseudo'
        disk_io='default'
        verbosity = 'default' ,
        nstep = 80 ,
     /
     &system    
        ibrav=  6,
        A = 4.1772 ,
        C = 2.6651 ,
        nat=  6, ntyp= 2,
        ecutwfc = 50.0, 
     /
     &electrons
        electron_maxstep = 100,
        mixing_beta = 0.7,
        conv_thr = 1.0d-8,
     /
    ATOMIC_SPECIES
       Si  28.086    Si.pbe-n-van.UPF
       O   15.9994   O.pbe-van_ak.UPF
    ATOMIC_POSITIONS crystal
     O  0.30620   0.30620   0.00000
     O  0.69380   0.69380   0.00000
     O  0.19380   0.80620   0.50000
     O  0.80620   0.19380   0.50000
    Si  0.00000   0.00000   0.00000 
    Si  0.50000   0.50000   0.50000
    K_POINTS automatic
     4 4 8 0 0 0

構造部分の作り方

  • QEは空間群を直接使わないので、構造部分を作るのがやっかいである。低対称の場合、全部の原子位置が必要である。以下、私の使っている方法を示す。まず、Vestaで結晶構造を読み込む。表示をBall-and-stickに変える。また、bondを定義していると単位格子以外の原子も含まれてしまうので、bondの定義をクリアする。また原点や格子面上にある原子等は重複して表示されるので、boundaryで、x(max) = 0.999, y(max) = 0.999, z(max) = 0.999とする。構造を見て、余分な原子が含まれていないことを確認。この状態で、FileのExport data...から、File typeをFractional Coordinate (.xtl)で出力する。これをJeditなどのテキストエディタで読む。単位格子外の原子が含まれていないことをチェックして、不要なものを削除。原子位置をコピーして、QEの入力データの原子位置部分にペーストする。なお、Vesta終了時にこのデータ(表示やbondがクリアされている)がセーブされると後で困るので、オリジナルのVestaデータを上書きしないこと。
  • スーパーセルを作る場合は、Vesta上のEdit DataのUnit Cell...でOptionをクリックして、rotation matrixを変えることで実現できる。例えば2x2x2のスーパーセルを作りたい場合は、rotation matrixの対角部分を2 2 2とする。warningが出るが、OKボタンを押すとスーパーセルが表示される。後は上記と同じくxtlファイルを出力する。
  • 構造最適化した後の構造を見たい場合は、さっき作った.xtlファイルにQEの結果の原子座標をコピー&ペーストして(格子常数も変えて)、この.xtlファイルをVestaで表示させればよい。

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-01-15 (月) 10:56:03 (399d)