LAMMPSユーザーの場合は、古くからtoolsに含まれているのでi-PIをご存じの方は多いと思いますが、VASPのユーザーの場合、知らないという方も多いかと思います。
i-PI は、Python で書かれたab initio 経路積分分子動力学(PIMD)の Python インターフェイスです。原子間の相互作用の ab-initio、機械学習、または力場ベースの評価と併用するように設計されています。イオンの位置の問題と、原子間力を計算する問題を切り離すという目的の為に開発されました。i-PI がサーバーとして機能し、位置エネルギー、力、および圧力ビルアルの位置エネルギー部分の計算はi-PIが行ないます。
Pythonとしてはかなり重い計算を行なう事になるのですが、この部分はnumpyで実行します。このくらいの規模になるとnumpyで使用しているBLASの性能が大きく影響する為、開発陣もnumpyではMKLを使用する事を勧めています。
MKLを使用したnumpyに関しては、こちらの記事 で紹介しているので、ご参考にして下さい。
このi-PIですが、LAMMPSでの使用は有名ですが、ab-initioの部分をVASPで実行してしまう事が可能です。ただし、VASPそのままではi-PIサーバーとの通信が出来ない為、ソースにi-PI用のパッチを当てる必要があります。patch はこちらのページにVASP 5.4.4、6.2.1および6.3.0用があります。残念ながらVASP 6.4.1用はありませんでした。VASP 6.4.1のソースとi-PI VASP 6.3.0 patchを見比べてみたところ、patchがinsertされる部分は同じだったので、手動でpatchを当ててみました。
手動でpatchを当ててビルドしたバイナリを使用して、i-PIのVASP用のexampleを動かしてみました。
cd water-1-npt-md-vasp; i-pi input.xml & sleep 5; \
for i in `seq 1 1`; do mkdir -p run_$i; cp INCAR KPOINTS POTCAR POSCAR run_$i;
cd run_$i; vasp_std-ipi & cd ..; done; \
wait
cp: cannot stat 'KPOINTS': No such file or directory
running 1 mpi-ranks, on 1 nodes
distrk: each k-point on 1 cores, 1 groups
distr: one band on 1 cores, 1 groups
vasp.6.4.1 05Apr23 (build Apr 20 2023 16:08:20) complex
POSCAR found type information on POSCAR O H
POSCAR found : 2 types and 3 ions
Reading from existing POTCAR
scaLAPACK will be used
Reading from existing POTCAR
LDA part: xc-table for Pade appr. of Perdew
DRIVER - Connecting to host localhost
on port 23333 using an internet socket.
VASP ipi driver (written by Wei Fang) successfully starting
@ DRIVER MODE: Message from server: STATUS
@ DRIVER MODE: Message from server: STATUS
@ DRIVER MODE: Message from server: POSDATA
@ DRIVER MODE: Received initial lattice
@ DRIVER MODE: Received initial positions
-----------------------------------------------------------------------------
| |
| W W AA RRRRR N N II N N GGGG !!! |
| W W A A R R NN N II NN N G G !!! |
| W W A A R R N N N II N N N G !!! |
| W WW W AAAAAA RRRRR N N N II N N N G GGG ! |
| WW WW A A R R N NN II N NN G G |
| W W A A R R N N II N N GGGG !!! |
| |
| The requested file could not be found or opened for reading |
| k-point information. Automatic k-point generation is used as a |
| fallback, which may lead to unwanted results. |
| |
-----------------------------------------------------------------------------
INCAR ok, starting setup
POSCAR ok, starting setup
FFT: planning ... GRIDC
FFT: planning ... GRID_SOFT
FFT: planning ... GRID
WAVECAR not read
entering main loop
N E dE d eps ncg rms
rms(c)
DAV: 1 0.396267865901E+02 0.39627E+02 -0.23087E+03 192 0.467E+02
DAV: 2 -0.128657296769E+02 -0.52493E+02 -0.51962E+02 200 0.135E+02
DAV: 3 -0.162114941026E+02 -0.33458E+01 -0.33559E+01 128 0.408E+01
DAV: 4 -0.162437504688E+02 -0.32256E-01 -0.32203E-01 208 0.436E+00
DAV: 5 -0.162437999012E+02 -0.49432E-04 -0.49431E-04 168 0.126E-01 0.789E+00
DAV: 6 -0.143805787674E+02 0.18632E+01 -0.93029E+00 136 0.214E+01 0.326E+00
DAV: 7 -0.142757331033E+02 0.10485E+00 -0.95919E-02 200 0.260E+00 0.199E+00
DAV: 8 -0.141981664700E+02 0.77567E-01 -0.69247E-02 176 0.246E+00 0.200E-01
DAV: 9 -0.142023545980E+02 -0.41881E-02 -0.26790E-03 200 0.312E-01 0.131E-01
DAV: 10 -0.142097352605E+02 -0.73807E-02 -0.40226E-03 160 0.512E-01 0.654E-02
DAV: 11 -0.142162092838E+02 -0.64740E-02 -0.51823E-03 152 0.411E-01 0.103E-01
DAV: 12 -0.142175582968E+02 -0.13490E-02 -0.13316E-03 200 0.239E-01 0.306E-02
DAV: 13 -0.142189978608E+02 -0.14396E-02 -0.26874E-04 160 0.112E-01 0.111E-02
DAV: 14 -0.142192559635E+02 -0.25810E-03 -0.35299E-05 184 0.313E-02 0.109E-02
DAV: 15 -0.142193887888E+02 -0.13283E-03 -0.26567E-05 160 0.295E-02 0.104E-03
DAV: 16 -0.142194118473E+02 -0.23058E-04 -0.21435E-06 176 0.828E-03 0.144E-03
DAV: 17 -0.142194240937E+02 -0.12246E-04 -0.16195E-06 168 0.629E-03 0.349E-04
DAV: 18 -0.142194268530E+02 -0.27594E-05 -0.11865E-07 200 0.224E-03
1 F= -.14219427E+02 E0= -.14223292E+02 d E =0.115962E-01
@ DRIVER MODE: Message from server: STATUS
@ DRIVER MODE: Message from server: GETFORCE
@ DRIVER MODE: Returning v,forces,stress
~~~~~~~~~~~~~~~~~~
中略
~~~~~~~~~~~~~~~~~~
# Average timings at MD step 90. t/step: 2.89977e+00
@SOCKET: 23/05/17-18:03:47 Assigning [match] request id 0 to client with last-id 0 ( 0/ 1 : ('127.0.0.1', 39840))
# Average timings at MD step 91. t/step: 2.87474e+00
@SOCKET: 23/05/17-18:03:50 Assigning [match] request id 0 to client with last-id 0 ( 0/ 1 : ('127.0.0.1', 39840))
# Average timings at MD step 92. t/step: 2.86642e+00
@SOCKET: 23/05/17-18:03:53 Assigning [match] request id 0 to client with last-id 0 ( 0/ 1 : ('127.0.0.1', 39840))
# Average timings at MD step 93. t/step: 2.86649e+00
@SOCKET: 23/05/17-18:03:55 Assigning [match] request id 0 to client with last-id 0 ( 0/ 1 : ('127.0.0.1', 39840))
# Average timings at MD step 94. t/step: 2.92478e+00
@SOCKET: 23/05/17-18:03:58 Assigning [match] request id 0 to client with last-id 0 ( 0/ 1 : ('127.0.0.1', 39840))
# Average timings at MD step 95. t/step: 2.86643e+00
@SOCKET: 23/05/17-18:04:01 Assigning [match] request id 0 to client with last-id 0 ( 0/ 1 : ('127.0.0.1', 39840))
# Average timings at MD step 96. t/step: 2.86641e+00
@SOCKET: 23/05/17-18:04:04 Assigning [match] request id 0 to client with last-id 0 ( 0/ 1 : ('127.0.0.1', 39840))
# Average timings at MD step 97. t/step: 2.86643e+00
@SOCKET: 23/05/17-18:04:07 Assigning [match] request id 0 to client with last-id 0 ( 0/ 1 : ('127.0.0.1', 39840))
# Average timings at MD step 98. t/step: 2.86646e+00
@SOCKET: 23/05/17-18:04:10 Assigning [match] request id 0 to client with last-id 0 ( 0/ 1 : ('127.0.0.1', 39840))
# Average timings at MD step 99. t/step: 2.86648e+00
SOFTEXIT CALLED FROM THREAD @ SIMULATION: Exiting cleanly.
!W! Soft exit has been requested with message: ' @ SIMULATION: Exiting cleanly.'. Cleaning up.
@SOCKET: Shutting down the driver interface.
SOFTEXIT: Saving the latest status at the end of the step
Backup performed: RESTART -> #RESTART#0#
このように、i-PIとVASPとの間でソケット通信を行なって、PIMDが実行出来ました。
系に重い原子を使用している場合には、あまり関係は無いかもしれませんが、軽い原子を使用している場合、量子効果の影響が出て、実際の分子のふるまいとシミュレーションがズレてしまっているかもしれません。そういった場合、PIMDを使用して比較するなどが必要になる場合もあるかと思います。
PIMDの為にシミュレーションを行なうアプリを変えると、使い方や計算手法、解析方法などに関して、新しいアプリで経験を積んだり、ツールを新しく揃えたりする必要がありますが、i-PIを使えば、慣れ親しんだVASPをそのまま使用してPIMDをかなりお手軽に行なう事が可能となります。
もっとも、MKL版のnumpyでないと計算に時間が余計にかかったり、numpyのバージョンは1.23まででないとnumpy 1.24の仕様変更の問題が起きる場合があるなど、Python特有の面倒な部分が無い訳ではありませんが、まったく新しいアプリを導入するよりは敷居はかなり低いのではないでしょうか。
i-PI用のpatchを当てたVASP 6.4.1については弊社にお問い合わせ下さい。