CPMD

 ここではCPMDを用いて構造最適化及び振動構造の計算方法などを解説する。
------------------------------------------------------------------------------
□ CPMD setup
1) download CPMD : http://cpmd.org/
2) tar zxvf cpmd-v3_17_1.tgz
3) cd CPMD
4) CONFIGUREの中から適した環境のファイル名を探す
◇ gfortran + Netlib (Lapack + Blas) (success) (mpirun -np 4 cpmd.x h2o-dens-nopot.in, 14.70 s)
./mkconfig.sh LINUX-i686-FEDORA-MPI > Makefile
gedit Makefile
-----
SRC  = .
DEST = .
BIN  = .
FFLAGS = -c -O2 -fcray-pointer -fsecond-underscore
LFLAGS = -L/usr/lib64 -llapack -lblas
CFLAGS = -c -O2 -Wall
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -D__GNU -DFFT_DEFAULT -DPARALLEL -DPOINTER8
NOOPT_FLAG =
CC = gcc
FC = mpif90 -fbounds-check
LD = mpif90 -fbounds-check
AR = ar
-----

◇ gfortran + Netlib (Lapack + Blas) + FFTW3 (success) (mpirun -np 4 cpmd.x h2o-dens-nopot.in, 14.54 s)
./mkconfig.sh LINUX-i686-FEDORA-MPI > Makefile
gedit Makefile
-----
SRC  = .
DEST = .
BIN  = .
FFLAGS = -c -O2 -fcray-pointer -fsecond-underscore
LFLAGS = -L/usr/local/lib -llapack -lblas -lfftw3
CFLAGS = -c -O2 -Wall
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -D__GNU -DFFT_FFTW3 -DPARALLEL -DPOINTER8
NOOPT_FLAG =
CC = gcc
FC = mpif90 -fbounds-check
LD = mpif90 -fbounds-check
AR = ar
-----

◇ gfortran + Netlib (Lapack + Blas) + FFTW3 (success) (mpirun -np 4 cpmd.x h2o-dens-nopot.in, 13.84 s)
./mkconfig.sh LINUX-i686-FEDORA-MPI > Makefile
gedit Makefile
-----
SRC  = .
DEST = .
BIN  = .
FFLAGS = -c -O2 -fcray-pointer -fsecond-underscore
LFLAGS = -L/usr/local/lib -llapack -lblas -lfftw3
CFLAGS = -c -O2 -Wall
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -D__GNU -DFFT_FFTW3 -DPARALLEL -DPOINTER8
NOOPT_FLAG =
CC = gcc
FC = mpif90
LD = mpif90
AR = ar
-----

◇ gfortran + Netlib (Lapack + Blas) + FFTW3 (success) (mpirun -np 4 cpmd.x h2o-dens-nopot.in, 13.86 s)
./mkconfig.sh LINUX-i686-FEDORA-MPI > Makefile
gedit Makefile
-----
SRC  = .
DEST = .
BIN  = .
FFLAGS = -c -O2 -fcray-pointer -fsecond-underscore
LFLAGS = -L/usr/local/lib -lfftw3 -llapack -lblas -lmpi_f77 -lmpi_f90
CFLAGS = -c -O2 -Wall
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -D__GNU -DFFT_FFTW3 -DPARALLEL -DPOINTER8
NOOPT_FLAG =
CC = mpicc -O2 -ffast-math -mavx -fsignaling-nans -funroll-all-loops -m64 -I/usr/local/openmpi/lnclude
FC = mpif90 -O2 -ffast-math -mavx -fsignaling-nans -funroll-all-loops -m64 -I/usr/local/openmpi/lnclude
LD = mpif90 -O2 -ffast-math -mavx -fsignaling-nans -funroll-all-loops -m64 -I/usr/local/openmpi/lnclude
AR = ar
-----

◇ gfortran + ACML4.4.0 + FFTW3 (success) (mpirun -np 4 cpmd.x h2o-dens-nopot.in, 14.18 s)
./mkconfig.sh LINUX-i686-FEDORA-MPI > Makefile
gedit Makefile
-----
SRC  = .
DEST = .
BIN  = .
FFLAGS = -c -O2 -fcray-pointer -fsecond-underscore
LFLAGS = -L/opt/acml4.4.0/gfortran64/lib -lacml -L/usr/local/lib -lfftw3
CFLAGS = -c -O2 -Wall
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -D__GNU -DFFT_FFTW3 -DPARALLEL -DPOINTER8
NOOPT_FLAG =
CC = gcc
FC = mpif90
LD = mpif90
AR = ar
-----
gedit $HOME/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/acml4.4.0/gfortran64/lib:/usr/local/openmpi/lib
-----

◇ gfortran + ACML4.4.0 + FFTW3 (success) (mpirun -np 4 cpmd.x h2o-dens-nopot.in, 13.57 s)
./mkconfig.sh LINUX-i686-FEDORA-MPI > Makefile
gedit Makefile
-----
SRC  = .
DEST = .
BIN  = .
FFLAGS = -c -O2 -fcray-pointer -fsecond-underscore
LFLAGS = -L/usr/local/lib -lfftw3 -lgfortran -lmpi_f77 -lmpi_f90 -L/opt/acml4.4.0/gfortran64/lib -lacml -Wl,-rpath=/opt/acml4.4.0/gfortran64/lib -Wl,-rpath=/opt/acml4.4.0/gfortran64/lib
CFLAGS = -c -O2 -Wall
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -D__GNU -DFFT_FFTW3 -DPARALLEL -DPOINTER8
NOOPT_FLAG =
CC = mpicc -O2 -ffast-math -Dxt3 -mavx -fsignaling-nans -funroll-all-loops -m64 -I/usr/local/openmpi/lnclude -I/opt/acml4.4.0/gfortran64/include
FC = mpif90 -O2 -ffast-math -Dxt3 -mavx -fsignaling-nans -funroll-all-loops -m64 -I/usr/local/openmpi/lnclude -I/opt/acml4.4.0/gfortran64/include
LD = mpif90 -O2 -ffast-math -Dxt3 -mavx -fsignaling-nans -funroll-all-loops -m64 -I/usr/local/openmpi/lnclude -I/opt/acml4.4.0/gfortran64/include
AR = ar
-----
gedit $HOME/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/acml4.4.0/gfortran64/lib:/usr/local/openmpi/lib
-----

◇ ifort + MKL (Lapack + Blas) (success) (mpirun -np 4 cpmd.x h2o-dens-nopot.in, 11.11 s)
 ./mkconfig.sh IFORT-AMD64-MPI > Makefile
 gedit Makefile
 -----
SRC  = .
DEST = .
BIN  = .
FFLAGS = -pc64 -O2 -unroll
LFLAGS =  -L/opt/intel/composer_xe_2013/mkl/lib/intel64/em64t \
 -lmkl_lapack95_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core \
 -liomp5 -lpthread -lm
CFLAGS = -O2 -Wall -m64
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -DFFT_DEFAULT -DPOINTER8 -DLINUX_IFC \
 -DPARALLEL -DMYRINET -DINTEL_MKL
NOOPT_FLAG =
CC = mpicc
FC = mpif90 -c
LD = mpif90 -i-static
AR = ar
 -----

◇ ifort + MKL (Lapack + Blas) + FFTW3 (success) (mpirun -np 4 cpmd.x h2o-dens-nopot.in, 12.20 s)
 ./mkconfig.sh IFORT-AMD64-MPI > Makefile
 gedit Makefile
 -----
SRC  = .
DEST = .
BIN  = .
FFLAGS = -pc64 -O2 -unroll
LFLAGS =  -L/opt/intel/composer_xe_2013/mkl/lib/intel64/em64t \
 -lmkl_lapack95_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core \
 -liomp5 -lpthread -lm -L/usr/local/lib -lfftw3
CFLAGS = -O2 -Wall -m64
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -DFFT_FFTW3 -DPOINTER8 -DLINUX_IFC \
 -DPARALLEL -DMYRINET -DINTEL_MKL
NOOPT_FLAG =
CC = mpicc
FC = mpif90 -c
LD = mpif90 -i-static
AR = ar
 -----

◇ ifort + MKL (Lapack + Blas + FFTW3) (success) (mpirun -np 4 cpmd.x h2o-dens-nopot.in, 12.07 s)
 ./mkconfig.sh IFORT-AMD64-MPI > Makefile
 gedit Makefile
 -----
SRC  = .
DEST = .
BIN  = .
FFLAGS = -pc64 -O2 -unroll
LFLAGS =  -L/opt/intel/composer_xe_2013/mkl/lib/intel64/em64t \
 -lmkl_lapack95_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core \
 -liomp5 -lpthread -lm /opt/intel/composer_xe_2013/mkl/interfaces/fftw3xf/libfftw3xf_intel.a
CFLAGS = -O2 -Wall -m64
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -DFFT_FFTW3 -DPOINTER8 -DLINUX_IFC \
 -DPARALLEL -DMYRINET -DINTEL_MKL
NOOPT_FLAG =
CC = mpicc
FC = mpif90 -c
LD = mpif90 -i-static
AR = ar
 -----

◇ ifort + ACML5.3.1 (success) +FFTW3 (mpirun -np 4 cpmd.x h2o-dens-nopot.in, 11.46 s)
 ./mkconfig.sh IFORT-AMD64-MPI > Makefile
 gedit Makefile
 -----
SRC  = .
DEST = .
BIN  = .
FFLAGS = -pc64 -O2 -unroll
LFLAGS =  -L/opt/acml5.3.1/ifort64/lib -lacml -lifcoremt_pic -limf -lirc -lsvml
CFLAGS = -O2 -Wall -m64
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -DFFT_DEFAULT -DPOINTER8 -DLINUX_IFC \
 -DPARALLEL -DMYRINET
NOOPT_FLAG =
CC = mpicc
FC = mpif90 -c
LD = mpif90 -i-static
AR = ar
-----
gedit $HOME/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/acml4.4.0/gfortran64/lib:/usr/local/openmpi/lib
-----

◇ ifort + MKL (Lapack + Blas) (success) (mpirun -np 4 cpmd.x h2o-dens-nopot.in, 11.20 s)
 ./mkconfig.sh IFORT-AMD64-MPI > Makefile
 gedit Makefile
 -----
SRC  = .
DEST = .
BIN  = .
FFLAGS = -pc64 -O2 -unroll -ip -ftz -axAVX,SSE4.2,SSE4.1,SSE3,SSSE3,SSE2
LFLAGS =  -L/opt/intel/composer_xe_2013/mkl/lib/intel64/em64t \
 -lmkl_lapack95_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core \
 -liomp5 -lpthread -lm
CFLAGS = -O2 -Wall -m64
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -DFFT_DEFAULT -DPOINTER8 -DLINUX_IFC \
 -DPARALLEL -DMYRINET -DINTEL_MKL
NOOPT_FLAG =
CC = mpicc
FC = mpif90 -c
LD = mpif90 -i-static
AR = ar
 -----

◇ ifort + MKL (Lapack + Blas) (success) (mpirun -np 4 cpmd.x h2o-dens-nopot.in, 11.34 s)
 ./mkconfig.sh IFORT-AMD64-MPI-OMP-QMMM > Makefile
 gedit Makefile
 -----
SRC  = .
DEST = .
BIN  = .
FFLAGS = -c -pc64  -O2 -unroll -heap-arrays 64 -openmp
LFLAGS = -L/opt/intel/composer_xe_2013/mkl/lib/intel64/em64t \
 -lmkl_lapack95_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core \
 -liomp5 -lpthread -lm
CFLAGS = -O2 -Wall -m64
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -DLINUX_IFC -DFFT_DEFAULT -DPOINTER8 \
              -DMALLOC8 -DPARALLEL -D__WITH_OMP3 
NOOPT_FLAG =
CC = mpicc
FC = mpif90 -c
LD = mpif90 -static-intel
AR = ar
 -----

5) make

-----
cpmd2cube
1) download cpmd2cube.tar.gz
2) tar zxvf cpmd2cube.tar.gz
3) cd cpmd2cube
4) Configure -h
◇ gfortran
  Configure -m Linux-PC-GFORTRAN
◇ ifort
  Configure -m Linux-PC-IFORT
5) make
※ retry: make clean -> make

-----
test
1) download cpmd-test.tar.gz : http://cpmd.org/download
2) tar zxvf cpmd-test.tar.gz
3) cd CPMD-test
4) cd external-potential
5) cp $HOME/CPMD/cpmd.x $HOME/CPMD-test/external-potential/cpmd.x
6) mpirun -np 4 ./cpmd.x h2o-dens-nopot.in

References
[1] https://extras.csc.fi/chem/courses/cpmd/terminal-intro.pdf
[2] http://verahill.blogspot.jp/2012/07/not-solved-compiling-cpmd-on-debian.html
[3] http://www.hpcadvisorycouncil.com/pdf/CPMD_Best_Practices.pdf
[4] http://linuxtoolkit.blogspot.jp/2010/05/installing-cpmd-with-openmpi-intel.html 
[5] http://www.cpmd.org:81/pipermail/cpmd-list/2013-December/005883.html
[6] http://cheminsilico.blogspot.jp/2009/04/install-cpmd.html
[7] http://mdqmcp.jugem.jp/?eid=6 
------------------------------------------------------------------------------
□ CPMD setup (Parallel)
1) download CPMD : http://cpmd.org/
2) tar zxvf cpmd-v3_15_1.tgz
3) cd CPMD
4) CONFIGUREの中から適した環境のファイル名を探す
  a) gfortran(業者様向け)
    ./mkconfig.sh LINUX-i686-FEDORA-MPI > Makefile
    Makefile において
    LFLAGS='-L/usr/lib/ -llapack -lblas'
    CPPFLAGS = -D__Linux -D__PGI -D__GNU -DFFT_DEFAULT -DPARALLEL -DMYRINET
    mpif77 を mpif90 または mpif90.openmpi へ
  b) intel fortran compiler(学生様向け)(調査中)
    ./mkconfig.sh PC-IFC-MPI > Makefile
    Makefile において
    FFLAGS で -axM -tpp6 を削除
    LFLAGS = -L/opt/intel/Compiler/11.1/080/mkl/lib/32 -lmkl_blas95 -lmkl_lapack95 -lmkl_intel -lmkl_intel_thread -lmkl_core -lifcore -lguide -lpthread -lsvml -L/usr/local/lib -lfftw -lfftw_mpi
    mpif77 を mpif90 または /usr/local/mpich/bin/mpif90 へ
5) make
References
[1] https://extras.csc.fi/chem/courses/cpmd/terminal-intro.pdf 
------------------------------------------------------------------------------
□ 擬ポテンシャル
a) tar zxvf pseudo-extlib.tar.gz (Trouiller-Martines type,  normconserving PP)
b) tar zxvf pseudo_vdb.tar.gz (Vanderbilt type,  Ultrasoft PP)
c) tar zxvf pseudo_std.tar.gz
[1] Vanderbilt USPP: http://www.physics.rutgers.edu/~dhv/uspp/
[2] NNIN: http://www.nnin.org/research-support/computation/nnin-computation-nanotechnology-resources/virtual-vaults
[3] cpmd2upf.x: http://qe-forge.org/pipermail/pw_forum/2011-November/097127.html
------------------------------------------------------------------------------
□ CPMD 使用方法

◇ 基本的な手順
0) VESTA -> cif
1) cif2cell -p cpmd -f Fe2VAl.cif
2) 使用する擬ポテンシャルを 入力ファイル(.inp)に入れます
  Al_MT_PBE.psp
  V_MT_PBE_NLCC.psp
  Fe_MT_PBE_NLCC.psp
3) gedit Fe2VAl.inp
 [pseudopotential file for XX here]の部分を使用する擬ポテンシャルに書き換えます。
 次の行にLMAX=D を追加します。
 下記の◇で書かれているように、inpファイルの最後にコピー&ペーストします。
4) mpirun -np 4 $HOME/CPMD/cpmd.x Fe2VAl.inp > Fe2VAl.out &
5) tail -f Fe2VAl.out

※ k点を指定したい場合は下記のようにします。
-----
&SYSTEM から &END の中に
 KPOINTS MONKHORST-PACK fULL
 8  8  8 
を書き入れます。8 8 8 がメッシュ数です。
-----

cpmd2cube の利用
-----
&CPMDから &END の中に
    PRINT FORCES ON
    RHOOUT
とRHOの出力の指定を書き入れます(PRINT FORCES ON は必要ないけど入れておきました)。
&SYSTEM から &END の中に
  MESH
  108 108 108
とメッシュ数を書き入れます。108 108 108 がメッシュ数です。
下記のようにコマンドを実行します。
./cpmd.x case.in > case.out
./cpmd2cube.x -halfmesh -rho -o case DENSITY
case.cube -> VESTA
-----

◇ 前回のデータを利用する場合には、
&CPMD 内に下記を追加する。
RESTART WAVEFUNCTION COORDINATES LATEST


◇ SCF
Fe2VAl.inp +
-----
&CPMD
  OPTIMIZE WAVEFUNCTION
  MAXSTEP
     100000
  ODIIS
    15
  TIMESTEP
    15.0
  MAXCPUTIME
   3600
&END

&DFT
  FUNCTIONAL PBE
&END 
-----


◇ GEOMETRY
※ SCF calculation -> GEOMETRY
Fe2VAl.inp +
-----
&CPMD
    RESTART WAVEFUNCTION COORDINATES LATEST
    OPTIMIZE GEOMETRY
    UNIT HESSIAN
    BFGS
    FREE ENERGY FUNCTIONAL
    LANCZOS DIAGONALISATION
    LANCZOS PARAMETERS
      1   6 10   1.D-18
    TROTTER FACTOR
      0.001
    BOGOLIUBOV CORRECTION OFF
    GRAM-SCHMIDT ORTHOGONALISATION
    CONVERGENCE
      1.D-4  5.D-4
    MAXSTEP
      500
    BROYDEN MIXING
      0.5  200   0.01  0   5   0
    ALEXANDER MIXING
      1.1
    ELECTRON TEMPERATURE
      1000.
    COMPRESS WRITE32
    STRUCTURE BONDS
&END

&DFT
  FUNCTIONAL PBE
&END 
-----


◇ Car-Parrinello MD
※ SCF calculation (-> GEOMETRY)  -> Car-Parrinello MD
Fe2VAl.inp +
-----
&CPMD
 RESTART WAVEFUNCTION COORDINATES LATEST
 MOLECULAR DYNAMICS CP

 TRAJECTORY XYZ

 TEMPERATURE
  50.0D0

 MAXSTEP
  200
 TIMESTEP
  4.0
&END

&DFT
  FUNCTIONAL PBE
&END
-----


◇ VIBRATION
case.inp +
-----
&CPMD
    VIBRATIONAL ANALYSIS FD GAUSS
    RESTART COORDINATES WAVEFUNCTION HESSIAN LATEST

    CONVERGENCE ORBITALS
     1.0D-8

    MAXSTEP
     8000

    STRUCTURE BONDS ANGLES
&END

&DFT
  FUNCTIONAL PBE
&END
-----


◇ TDDFT
case.inp +
-----
 &CPMD
  COMPRESS WRITE32
  CONVERGENCE ORBITALS
    1.D-6
  ELECTRONIC SPECTRA
 &END

 &DFT
   FUNCTIONAL PBE
 &END

 &TDDFT
  STATES SINGLET
    3
  TAMM-DANCOFF
  DIAGONALIZER DAVIDSON
  DAVIDSON PARAMETER
    200 1.D-7 50
 &END
-----

References
[1] http://156.17.103.207/kwanty-nowa/sites/default/files/cpmd-tutor.pdf
------------------------------------------------------------------------------
□ CPMD GUI
・ UNICORE version 4
1) download : http://www2.fz-juelich.de/jsc/unicoreplus/download/
・CPMD plugin version 4
1) download : http://www2.fz-juelich.de/jsc/unicoreplus/download/cpmd/ 
2) c:\Program Files\UNICORE\UNICIRE Client 4.1\lib中にある
  cpmdPlugin.jarを起動させればある程度は利用可能となる。
3) 詳細な使い方や利用方法は調査中。
------------------------------------------------------------------------------
□ 理論的背景

・CP法(Car-Parrinello Method:カー・パリネロ法)[3,4]
 カー・バリネロ法の大きな特徴は、これまで絶対に守らねばならないと考えられてきた断熱近時を大胆にも破棄したことである。こうすることで、計算効率を飛躍的に発展させることができた。従来の解法では、原子を動かす前に波動関数をセルフコンシステントに解かなければいけない。すべてが一つ一つ逐次的に行われていた。CP法では、波動関数も原子位置もどちらが従属という関係ではなく、どちらも同等な扱いを受け、どちらに対しても時間発展を同時に計算する。いわば並列処理とでも呼べる。各時間ステップでは波動関数はセルフコンシステントになっていない。それゆえ計算時間は早くなる。
ハミルトニアンの波動関数への作用(波動関数の真の値からの誤差)にならない成分は、すべてその波動関数に対する「力」として作用する。この場合、重要な点は、波動関数に関する時間発展が、通常のニュートンの運動方程式のように2次であることである。その結果、波動関数の真の値からの誤差はその波動関数の時間発展に関して「復元力」として働く。波動関数の真の値からの誤差が大きい場合、その時間発展はそれを解消する方向に作用する。このおかげで、波動関数の真の値からの誤差は常に断熱線の周りを振動し、「系統的誤差」は時間平均するとキャンセルすることになる。このような巧妙なカラクリのため、カー・パリネロ法はうまく機能するのである。
 実際のところ、カー・パリネロ法では、波動関数の直交規格化条件の課し方など詳細で違いが生じて、上で述べたメリットはいつでも成り立つわけではない。カー・バリネロ法がうまく動作する条件として「断熱条件からあまり離れていない」ことが挙げられる。このとき波動関数は断熱条件になっていないが、その周りをふらつきながら平均的には断熱曲線を追従することになる。図5.5はその様子を模式的に示している(よく講演などで目にするので、文献[3]を見ておくと良いだろう)。図5.5における断熱曲線からのズレは、だいたい電子の仮想的運動エネルギー(Ke)くらいで与えられる。したがって、このエネルギーがイオンの実際の運動エネルギー(Ki)に比べて小さい Ke << Ki が条件になる。

[1] 笠井秀明ら著、計算機マテリアルデザイン入門、大阪大学出版会
------------------------------------------------------------------------------
QRコード
携帯用QRコード
アクセス数
ページビュー数
[無料でホームページを作成] [通報・削除依頼]