|
|
本帖最后由 masc 于 2020-12-22 10:22 编辑
应用python工具pymatgen,可以直接得到MSD,diffusion,donductivity,里面有几个点不是太清楚,请大家一起帮忙看看。
得到XDATCAR后,需要首先配置pymatgen。
需要用到conda命令,windows和linux我都尝试了。
windows:可以安装anaconda3,通过spyder启动。
进入anaconda prompt中启动中断,配置conda environment:
conda create –name my_pymatgen python
activate my_pymatgen
linux环境下一个比较好的选择是安装miniconda3
wget https://repo.anaconda.com/minico ... -Windows-x86_64.exe
bash Miniconda3-latest-linux-x86_64.sh
如果原来在bashrc中配置了anaconda,则注释掉,重启terminal。
与windows下相同,需要设置一个pymatgen环境。
conda create –name my_pymatgen
source activate my_pymatgen
在my_pymatgen环境下安装 pymatgen:
conda install --channel conda-forge pymatgen
安装好之后运行建立如下test.py脚本, 可以得到结果:
import os
from pymatgen.core.trajectory import Trajectory
from pymatgen.io.vasp.outputs import Xdatcar
from pymatgen import Structure
from pymatgen.analysis.diffusion_analyzer import DiffusionAnalyzer
import numpy as np
import pickle
# 这一步是读取 XDATCAR,得到一系列结构信息
traj = Trajectory.from_file('XDATCAR')
# 这一步是实例化 DiffusionAnalyzer 的类
# 并用 from_structures 方法初始化这个类; 300 是温度,1是POTIM 的time step,1000是间隔步数
# 间隔步数(step_skip)不太容易理解,但是根据官方教程(这里具体怎么回事我不太清楚,好像potim*step_skip需要小于1000,1000为NSW值,这是我没彻底弄清楚的地方):
# dt = timesteps * self.time_step * self.step_skip
diff = DiffusionAnalyzer.from_structures(traj,'Li',300,1,1000)
# 可以用内置的 plot_msd 方法画出 MSD 图像
# 有些终端不能显示图像,这时候可以调用 export_msdt() 方法,得到数据后再自己作图
diff.plot_msd()
diff.export_msdt("write_msd")
# 接下来直接得到 离子迁移率, 单位是 mS/cm,diffusity单位是 cm^2/S
C = diff.conductivity
D = diff.diffusivity
with open('result.dat','w') as f:
f.write('# AIMD result for Li-ion\n')
f.write('temp\conductivity\diffusivity\n')
f.write('%d\t%.2f %.10f' %(300,C,D))
在1.dat中是msd,conductivity和diffusivity会直接输出在result.dat中,模拟石墨烯表面Li的MD(excessive state)结果diffusivity为2*10-7 cm^2/S,我觉得算出diffusivity后自己求conductivity比较好,请问应该怎么求?与文件对比,基本吻合(J. Phys. Chem. Lett. 2010, 1, 1176–1180;https://pubs.acs.org/doi/10.1021/jp910134u)。
其它不对的地方,欢迎批评指正。
参考:
https://pymatgen.org/installation.html
https://www.bigbrosci.com/2020/09/08/A18/
|
|