目录

机器学习势 M3GNet(或 DFT)预测锂电池材料中锂嵌入势

M3GNet机器学习势,支持GPU加速,安装该势函数的时候,就需要选择相应的版本(当然前提是机器本身有用于GPU计算的显卡)。安装过程参考:机器学习力场的安装

本文实现功能简介

因为 M3GNET 是针对这类锂电池材料结构的能量而训练得到的力场,因此能够很好地、符合预期地再现这些材料中的 Li 嵌入势。下图是 M3GNET 与 DFT 或实验结果的对比:

因此 M3GNET 可以用于筛选未知材料,或快速评估给定成分的 Li 嵌入势。不过 M3GNET 无法很好地描述脱锂前后体积的变化,因为它是基于 PBE(+U) 训练的,并且一些相关材料的结构没有用该理论水平很好地描述(理想情况下,结构应使用 BAND 和SCAN泛函进行计算)。

本文提供了一个基于 PLAMS 的 Python 脚本,可以调用 M3GNET 力场或者基于DFT的 BAND 模块进行计算,对不同材料的Li嵌入势进行筛选。其中 Li 嵌入势的定义,例如对 Li$_n$O$_6$Ti$_3$:

V$_{Li}$ = [E(Li$_n$O$_6$Ti$_3$) -E(O$_6$Ti$_3$)-E(Li)*n]/n

脚本还计算了晶胞体积变化:V(O$_6$Ti$_3$) - V(Li$_n$O$_6$Ti$_3$)

脚本的使用

下载压缩文件并解压,得到一个 cif 文件夹以及一个 Python 脚本名为 Li_potential.py。其中 cif 文件夹存放的是样本结构,可以存放多个。筛选时,用户可以基于这些样本结构,分别替换其中的过渡金属和氧元素,然后计算上述两种数据。

用户可以通过如下2行修改过渡元素和替换氧元素的元素列表:

tm_list = ['Ti','V','Cr','Co','Mn','Fe','Ni']
anion_list = ['O','S']

其中

运行作业:AMSJobs 进入该脚本所在文件夹(注意该文件夹所在路径不能包含中文、空格),菜单栏 Help → Command-line 打开命令行,输入 sh 回车,输入 amspython Li_potential.py 回车,屏幕上将输出需要信息:

Microsoft Windows [版本 10.0.22621.1702]
(c) Microsoft Corporation。保留所有权利。

D:\ADF_DATA\Task\Li_potential>sh
sh-4.4$ amspython
Li_potential.py    cif/               plams_workdir.002/ plams_workdir.004/
Li_potential.rar   plams_workdir/     plams_workdir.003/ plams_workdir.005/
sh-4.4$ amspython Li_potential.py
PLAMS working folder: D:\ADF_DATA\Task\Li_potential\plams_workdir.006
[16.05|11:30:22] JOB Li3O6Ti3 STARTED
[16.05|11:30:22] JOB Li3O6Ti3 RUNNING
[16.05|11:30:35] JOB Li3O6Ti3 FINISHED
[16.05|11:30:36] JOB Li3O6Ti3 SUCCESSFUL
Li3O6Ti3 was done, with 3 Li atoms in lattice, Volume of Cell: 103.70216 Angstrom^3
[16.05|11:30:36] JOB O6Ti3 STARTED
[16.05|11:30:36] JOB O6Ti3 RUNNING
[16.05|11:30:51] JOB O6Ti3 FINISHED
[16.05|11:30:51] JOB O6Ti3 SUCCESSFUL
O6Ti3 was done, with 0 Li atoms in lattice, Volume of Cell: 102.69002 Angstrom^3
Li3O6Ti3 → O6Ti3 Cell Volume Change: -0.33738000000000073  Angstrom^3
Li intercallation potential of Li3O6Ti3 : 2.3401228462519685 Volts
>>> Li3O6Ti3 -0.337 2.340
以下省略

即:

使用 DFT 进行上述计算

脚本中如下一行

model = 'm3gnet' # m3gnet, band

改为

model = 'band' # m3gnet, band

即调用 AMS 中的 BAND 模块进行计算,默认使用 TZP 基组、SCAN-D3 泛函,当然用户可以改为小一些的基组例如 DZP:

        s.input.band.Basis.Type = 'TZP'

改为

        s.input.band.Basis.Type = 'DZP'

即可。