Quantum ESPRESSOのpw.xで水の第一原理MDを実行し、それをDeePMD-kitで学習させ、そのDeep Potentialを使用してLAMMPSでMD計算をやってみます。
前回のPartではpw.xの第一原理MDとDeePMD-kitでの機械学習を実行しました。
今回はその機械学習ポテンシャルを使ってLAMMPSでのMD計算を行います。
LAMMPSの計算モデル
こんな感じで水のユニットセルを作ります。
from ase import Atoms
from ase.visualize import view
from ase.build import molecule
from ase.units import mol
import numpy as np
water = molecule("H2O")
print(water.get_chemical_symbols())
unitcell_size = 3.11
unitcell = Atoms(symbols=water.get_chemical_symbols(), positions=water.get_positions(),
cell=np.eye(3) * unitcell_size, pbc=True)
mdcell = unitcell * [6, 6, 6]
mdcell.write("water.data", format='lammps-data')
density = (np.sum(unitcell.get_masses())/mol) / (unitcell.get_volume()*1e-24)
print(density, "[g/cm3]")
view(mdcell)
密度が1 g/cm3で、分子数が216個です。これがwater.dataとして保存されます。
そして以下のinファイルを用意します。
units metal
boundary p p p
atom_style atomic
neighbor 1.0 bin
neigh_modify every 10 delay 0 check no
read_data water.data
mass 1 1.008
mass 2 15.999
pair_style deepmd graph-compress.pb
pair_coeff * *
velocity all create 300.0 23456789
fix 1 all npt temp 300.0 300.0 0.1 iso 1.0 1.0 1.0
timestep 0.0005
thermo_style custom step pe ke etotal temp press vol density
thermo 1000
dump 1 all custom 1000 water.dump id type x y z
run 200000
常温常圧の計算です。
結果
まず平衡状態になるまでしばらく計算します。そしてその続きから結果の一部を1step毎に書き出して再計算し、アニメーションにしたものがこちらです。
分子の形は大丈夫そうです。
また平均密度は0.9612 g/cm3です。いい感じです。
これだけでは物足りないので、二体相関関数、自己拡散係数、動粘度、振動スペクトルなどをあとで計算して追記したいと思います。
まとめ
前回のPartでQEの第一原理MDを2回計算し、それをDeePMD-kitで学習させてLAMMPSの計算に使用できました。結果がまだ出そろっていませんが、とりあえずそこまでおかしい結果にはなっていないと思います。
コメント
とても参考になります。
続編楽しみにしています。
2種類の無機材料のスラブ界面モデルの摩擦計算などに興味があります
DP-GENについても無機材料の例が知りたいです