用户工具

站点工具


atk:li-s电池的开路电压_reaxff方法分子动力学

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
atk:li-s电池的开路电压_reaxff方法分子动力学 [2020/04/29 22:06] – [开路电压的理论定义] xie.congweiatk:li-s电池的开路电压_reaxff方法分子动力学 [2020/08/15 21:34] (当前版本) – [Li-S 电池的开路电压:ReaxFF 方法分子动力学] dong.dong
行 9: 行 9:
 **开路电压(OCV)**是该锂化过程中电化学驱动力。 **开路电压(OCV)**是该锂化过程中电化学驱动力。
  
-在本教程中,我们将利用分子动力学(MD)模拟来计算电池放电期间的 OCV 曲线。我们采用了 **ATK-ForceField** 计算器和在参考文献 <color #00a2e8>[IOB+15]</color> 中提到并由伊斯兰教开发的 **ReaxFF** 力场。**模拟退火**法可用于模拟一系列成分为 x 的无定形 Li<sub>x</sub>S 化合物,并将所得 OCV 曲线与参考文献 <color #00a2e8>[IOB+15]</color> 中的图 3 进行比较。+在本教程中,我们将利用分子动力学(MD)模拟来计算电池放电期间的 OCV 曲线。我们采用了 **ATK-ForceField** 计算器和在参考文献 <color #00a2e8>[IOB+15]</color> 中提到并由其他研究开发的 **ReaxFF** 力场。**模拟退火**法可用于模拟一系列成分为 x 的无定形 Li<sub>x</sub>S 化合物,并将所得 OCV 曲线与参考文献 <color #00a2e8>[IOB+15]</color> 中的图 3 进行比较。
  
 <WRAP center important 100%> <WRAP center important 100%>
行 25: 行 25:
 在这里,$n$($m$) 是 Li<sub>x</sub>S 中锂(硫)原子的数量(如$x=n/m$),$E_\textrm{Li}$ 和 $E_\textrm{S}$ 分别为每个纯锂和硫晶体的总能量。 在这里,$n$($m$) 是 Li<sub>x</sub>S 中锂(硫)原子的数量(如$x=n/m$),$E_\textrm{Li}$ 和 $E_\textrm{S}$ 分别为每个纯锂和硫晶体的总能量。
 ===== 概要 ===== ===== 概要 =====
 +
 +我们首先考虑 Li<sub>0.4</sub>S,并描述为计算纯 S 部分锂化到 Li<sub>0.4</sub>S 的开路电压的所需步骤:
 +
 +  * <color #00a2e8>无定形 Li<sub>0.4</sub>S 化合物</color>
 +  * <color #00a2e8>模拟退火</color>
 +  * <color #00a2e8>开路电压</color>
 +
 +然后利用 ATK 的 Python 脚本自动模拟更多范围的 Li<sub>x</sub>S 化合物。然后计算得到完整的 OCV 曲线,并研究不同成分的径向分布函数:
 +
 +  * <color #00a2e8>完整的开路电压图</color>
 +  * <color #00a2e8>径向分布函数</color>
 +
 +
 +<WRAP center tip 100%>
 +=== 提示 ===
 +本教程提供了所有可供下载的 QuantumATK Python 脚本。您也可以在此处下载压缩文件:[[https://docs.quantumatk.com/_downloads/scripts.zip|↓ scripts.zip]]。
 +</WRAP>
 +
 +<WRAP center important 100%>
 +=== 注意 ===
 +这是一个高级教程,因此不会详细地介绍如何操作 **ATK-ForceField** 计算器和 **QuantumATK** 分析工具的相关基础知识。如有需要,请参阅教程 [[https://docs.quantumatk.com/tutorials/md_basics/md_basics.html#basic-md-tutorial|Molecular Dynamics: Basics]]。
 +</WRAP>
 +
 +
 +{{ :atk:introbar-20190630.png |}}
 +
 +
 +
 +
 +
  
  
 ===== 无定形 Li0.4S 化合物 ===== ===== 无定形 Li0.4S 化合物 =====
  
 +在电池工作条件下,阴极材料不会如期待的保持完美的晶相;它最可能是无定形的。QuantumATK 提供了多种用于生成非晶结构的工具,例如 **Amorhpous Prebuilder** 和 **PackMol** 工具。本教程中我们使用后者。
  
 +打开 QuantumATK,创建一个新的项目,最好放在硬盘驱动的新目录中。然后打开 {{:atk:builder.png?direct&25|}} **Builder**。
  
 ==== PackMol ==== ==== PackMol ====
 +
 +
 +我们使用 **PackMol** 生成无定形 Li<sub>0.4</sub>S 化合物的初始结构,它可以将输入**分子**构型随机混合进一个合理的无定形**块体**构型。因此,您需要先向 Builder 的 Stash 添加硫原子和锂原子:
 +
 +  * 在 **Stash**,点击 Add {{:atk:arrow.png?direct&5|}} New Configuration,在分子构型中添加一个氢原子。
 +  * 选中氢原子,利用 {{:atk:modifyelement02.png?25|}} 工具将 H 原子转变为 S。
 +  * 重复上述两个步骤,创建锂原子。
 +  * 分别将 Stash 中的两项重命名为 “sulfur” 和 “lithium”。
 +
 +
 +{{ :atk:packmol1-20200429.png?800 |}}
 +
 +
 +转至 Builders {{:atk:arrow.png?direct&5|}} PackMol 插件并点击,然后将打开 **PackMol** 程序。然后按照以下步骤创建包含 2048 个硫原子的 Li<sub>0.4</sub>S 无定形晶体。
 +
 +  * 将 **Stash** 中的硫原子和锂原子拖放到 **PackMol** 程序。构型将会被添加到 “Molecule type” 的列表。
 +  * 将硫原子的数目增加到 2048,锂原子的数目输入为 819(由2048 × 0.4 = 819)。
 +  * 其他设置保持默认,点击 **Create**。
 +
 +
 +{{ :atk:packmol2-20200429.png?550 |}}
 +
 +
 +无定形 Li<sub>0.4</sub>S 结构已被自动添加到 Stash。重命名为 “Li04S”。
 +
 +{{ :atk:packmol3-20200429.png?400 |}}
 +
  
  
行 37: 行 96:
 ==== 结构优化 ==== ==== 结构优化 ====
  
 +**PackMol** 产生的无定形结构可确保在所有混合实体之间具有最小距离(默认为 2 Å),但该结构可能仍远未达到平衡。因此,在使用 MD 将系统加热到高温之前,最好对原*子坐标和晶格矢量进行优化。
 +
 +  * 将 “Li04S” 构型发送到 {{:atk:script_generator.png?direct&25|}} **Script Generator**,添加 {{:atk:calculator.png?direct&25|}} **New Calculator** 和 {{:atk:optimization.png?direct&25|}} **OptimizeGeometry** 脚本模块。
 +  * 打开 calculator 模块,选择 **ATK-ForceField** 计算器。自动选择的力场为 //ReaxFF_LiS_2005// —— 在参考 <color #00a2e8>[IOB+15]</color> 中生成。
 +  * 打开 geometry optimization 模块,设置 force tolerance 和最大优化步数分别为 0.5 eV/Å 和 1000。然后勾选 //Save trajectory// 选项,输入所保存弛豫轨迹文件名称为 ''Li04S''
 +
 +保存 QuantumATK Python 脚本为 ''Li04S.py'' 并使用 {{:atk:job_manager.png?direct&25|}} **Job Manager** 或在终端执行以下命令运行:
 +
 +<code python>  
 +atkpython Li04S.py 2>&1 | tee Li04S.log
 +</code>
 +
 +您也可以在此处下载脚本:[[https://docs.quantumatk.com/_downloads/Li04S.py|↓ Li04S.py]]。
 +
 +<WRAP center info 100%>
 +=== 重要 ===
 +相较于 MPI,使用 **OpenMP** 线程可以最有效地在多个物理内核上进行 ATK-ForceField 并行计算,请参阅教程中关于使用 Job Manager 仅通过线程进行[[|https://docs.quantumatk.com/tutorials/job_manager_local/job_manager_local.html#job-manager-local-mkl本地]]和[[https://docs.quantumatk.com/tutorials/job_manager_remote/job_manager_remote.html#job-manager-remote-threading|远程]] QuantumATK 计算的部分。
 +
 +如果从终端运行 QuantumATK,则应取消设置环境变量 ''OMP_NUM_THREADS'' 或将其设置为您打算使用的最大 OpenMP 线程数。我们建议将 ''MKL_DYNAMIC = TRUE'' 设置为允许 MKL 动态地更改线程数。
 +</WRAP>
 +
 +结构优化现在已经结束了,输出数据应在保存在 QuantumATK 的 **LabFloor**:
 +
 +
 +{{ :atk:packmol4-20200429.png?600 |}}
 +
 +
 +您可以利用 {{:co:viewer.png?direct&25|}} **Viewer** 将弛豫轨迹可视化,您会看到,在最小化原子力和应力的作用下,晶胞膨胀了一点。
  
 ===== 模拟退火 ===== ===== 模拟退火 =====
  
 +无定形 Li<sub>0.4</sub>S 化合物的室温结构(原子坐标和晶胞矢量)不是事先知道的,因此我们使用**模拟退火**的方法找到它。基本思想是将系统加热到 1600 K,然后使用分子动力学将其缓慢冷却至 300 K,所有这些过程都在固定压力下进行,但允许晶胞体积调整(NPT 动力学)。
 +
 +计算流程:
 +
 +  - 让系统在 1600 K 达到平衡。
 +  - 让系统缓慢地从 1600 K 冷却至 300 K。
 +  - 让系统在 300 K 达到平衡。
 ==== 在 1600K 达到平衡 ==== ==== 在 1600K 达到平衡 ====
 +
 +在 **LabFloor** (保存在 ''Li04S.hdf5'')标签为 //BulkConfiguration_1// 的块体结构即为优化后的。将其选中并拖放到 {{:atk:script_generator.png?direct&25|}} **Scripter**,会自动地添加适合的 ATK-ForceField 计算器模块,因此添加的是 {{:atk:optimization.png?direct&25|}} **MolecularDynamics**  脚本模块。
 +
 +首先,设置默认输出文件名称为 ''Li04S_eq-1600K.hdf5''
 +
 +{{ :atk:eq1600k_0-20200429.png?400 |}}
 +
 +打开 MD 脚本模块,调整一下设置:
 +
 +  * 设置 MD 类型为 NPT Berendsen。
 +  * 增加 MD 步数至 50000。
 +  * 增加 log interval 为 1000。
 +  * 将 Reservoir temperature 和 Final temperature 都设置为 1600 K。
 +  * 将初始粒子速度 Maxwell–Boltzmann 分布的温度也设置为 1600 K。
 +  * 选项:不勾选 //Save trajectory// 选项。
 +  * 点击 **OK**,保存设置。
 +
 +{{ :atk:eq1600k_1-20200429.png?800 |}}
 +
 +
 +保存脚本为 ''Li04S_eq-1600K.py'' 并运行。取决于计算资源(即 OpenMP 线程数),该作业可能需要一个小时才能完成。
 +
 +您也可以在此处下载 QuantumATK Python 脚本:[[https://docs.quantumatk.com/_downloads/Li04S_eq-1600K.py|↓ Li04S_eq-1600K.py]]。
 +
 +一旦计算完成,最终的 MD 轨迹应在 **LabFloor** 上弹出。可以使用 **Movie Tool** 将 MD 模拟进程可视化。如果需要,您可以使用鼠标右键单击启用 //Show bonds// 选项。请注意,在整个模拟过程中温度和能量如何大致保持恒定,且晶胞在开始时会明显膨胀,但随后原子在内部移动时保持相当稳定。因此构型在恒定温度下保持平衡。
 +
 +
 +{{ :atk:eq1600k_4-20200429.png?900 |}}
 +
 +
  
  
 ==== 从 1600K 冷却至 300K ==== ==== 从 1600K 冷却至 300K ====
 +
 +
 +Li<sub>下标</sub>S 构型现在已达到平衡,准备冷却至室温。在 **Movie Tool**,使用 {{:atk:sendto.png?direct&20|}} 按钮将 MD 轨迹中的**最后一个 MD 图像转移到** {{:atk:script_generator.png?direct&25|}} **Scripter**。
 +
 +添加 {{:atk:calculator.png?direct&25|}} **New Calculator** 和 {{:atk:optimization.png?direct&25|}} **MolecularDynamics** 脚本模块,再次选择具有合适力场的 ATK-ForceField 计算器。然后设置默认输出文件名称为 ''Li04S_cool-down.hdf5'',按照以下调整 MD 模块的设置:
 +
 +  *  设置 MD 类型为 NPT Berendsen。
 +  *  增加 MD 步数至 1000000。
 +  *  增加 log interval 为 1000。
 +  *  将 Reservoir temperature 和 Final temperature 分别设置为 1600 K 和 300 K。
 +  *  将初始粒子速度 Maxwell–Boltzmann 分布的温度也设置为 1600 K。
 +  *  选项:不勾选 //Save trajectory// 选项。
 +  *  点击 **OK**,保存设置。
 +
 +这将导致在 1 ns 的 MD 模拟时间内(10<sup>6</sup>步×1 fs /步= 1 ns)出现**线性的温度斜坡**,并且冷却速率为1.3 K / ps。
 +
 +
 +{{ :atk:cooldown1-20200429.png?700 |}}
 +
 +
 +保存脚本为 ''Li04S_cool-down.py'' 并运行。您也可以在此处下载 QuantumATK Python 脚本:[[https://docs.quantumatk.com/_downloads/Li04S_cool-down.py|↓ Li04S_cool-down.py]]。
 +
 +<WRAP center alert 100%>
 +=== 警告 ===
 +如果在单个内核上执行该计算可能需要一整天,所以建议在运行此作业时使用线程。
 +</WRAP>
 +
 +一旦完成计算,所得的 MD 轨迹应就显示在 **LabFloor**。再次使用 **Movie Tool** 将 MD 模拟进程可视化。请注意温度是如何从 1600 K 线性降低到 300 K,系统的能量也会随之降低。此外,如从头到尾运行轨迹影片,可以很明显的观察到 Li<sub>0.4</sub>S 晶胞在冷却时会完全符合预期的收缩。
 +
 +{{ :atk:代码高亮-20191228.png?800 |}}
 +
  
 ==== 在 300K 达到平衡 ==== ==== 在 300K 达到平衡 ====
 +
 +
 +最后一步是将无定形  Li<sub>0.4</sub>S 平衡到室温。在 **Movie Tool**,,利用 {{:atk:sendto.png?direct&20|}} 按钮将最后一个 MD 图像从冷却 MD 轨迹转移到 {{:atk:script_generator.png?direct&25|}} **Scripter**。
 +
 +添加 {{:atk:calculator.png?direct&25|}} **New Calculator** 和 {{:atk:optimization.png?direct&25|}} **MolecularDynamics** 脚本模块,再次选择具有合适力场的 ATK-ForceField 计算器。然后设置默认输出文件名称为 ''Li04S_eq-300K.hdf5'',按照以下调整 MD 模块的设置:
 +
 +  *  设置 MD 类型为 NPT Martyna-Tobias-Klein。
 +  *  增加 MD 步数至 100000。
 +  *  增加 log interval 为 100。
 +  *  将 Reservoir temperature设置为 300 K。
 +  *  将初始粒子速度 Maxwell–Boltzmann 分布的温度也设置为 300 K。
 +  *  选项:不勾选 //Save trajectory// 选项。
 +  *  点击 **OK**,保存设置。
 +
 +{{ :atk:eq300k_1-20200429.png?800 |}}
 +
 +保存脚本为 ''Li04S_eq-300K.py'' 并运行。您也可以在此处下载 QuantumATK Python 脚本:[[https://docs.quantumatk.com/_downloads/Li04S_eq-300K.py|↓ Li04S_eq-300K.py]]。
 +
 +计算结束后,您可以使用 **Movie Tool** 检查计算是否符合预期(恒温等)。
 +
 +下图显示了 MD 平衡过程中每个原子的总能量和体积的变化。能量和体积均达到稳定的平均值(黑色虚线),因此在经过 1000 MD 步长后已达到很好的平衡。脚本 [[https://docs.quantumatk.com/_downloads/evolution.py|↓ evolution.py]] 可用于生成图。
 +
 +{{ :atk:evolution-20200429.png?700 |}}
 +
 +图2 随着 MD 平衡的进行,每个原子的总能量(上图)和体积(下图)的变化。黑色虚线表示最近 100 张 MD 图像的平均值。
 +
  
 ===== 开路电压 ===== ===== 开路电压 =====
  
  
 +OCV 是根据引言中讨论的总能量差异计算得来的。每个总能量对应一个几何优化的结构。为检验计算出的 OCV 是否不显著地依赖于所选平衡的 MD 图像,您应该先对最后几个平衡图像做固定晶胞体积的几何优化,然后计算相应的 OCV 值。使用脚本 [[https://docs.quantumatk.com/_downloads/Li04S_relax.py|↓ Li04S_relax.py]] 可执行此操作。
  
 +您还需要纯 //BCC// Li 和 //ORTH// S<sub>8</sub> 晶体中每个原子总能量。脚本 [[https://docs.quantumatk.com/_downloads/Lithium.py|↓ Lithium.py]] 和 [[https://docs.quantumatk.com/_downloads/a-Sulfur.py|↓ a-Sulfur.py]] 可执行所需的几何优化并计算总能量。运行这两个脚本。
 +
 +然后使用脚本 [[https://docs.quantumatk.com/_downloads/ocv.py|↓ ocv.py]] 计算并绘制所有 10 个选定的 Li<sub>0.4</sub>S MD 图像的 OCV。如下图所示,黑线表示平均 OCV,很明显即使从平衡 MD 模拟中选择不同的 MD 图像也会导致 OCV 值略有不同,但它们非常相似。对于每种 Li<sub>x</sub>S 化合物,下面我们将使用 10 张 MD 图像的平均 OCV。
 +
 +{{ :atk:ocv-20200429.png?600 |}}
 ===== 完整的开路电压图 ===== ===== 完整的开路电压图 =====
 +
 +
 +到目前为止,我们已经获得了 Li<sub>0.4</sub>S 的 OCV。为绘制出完整锂化到硫阴极对应的 S<sub>8</sub> 到 Li<sub>x</sub>S 还原路径的 OCV 曲线,您应针对一系列 Li 的浓度重复上述步骤。但是,这可能有点麻烦,但一定程度的自动化会很有用。
 +
 +ATK Python 脚本非常适合将上面针对 Li<sub>0.4</sub>S 给出的不同 MD 脚本整合到**一个脚本**中,该脚本将针对给定的锂浓度运行所有计算。这个脚本 [[https://docs.quantumatk.com/_downloads/x0.40_full.py|↓ x0.40_full.py]] 对应的是 $x$ = 0.4。下载后将其作为一个模板使用,运行每个化合物需要的所有 MD 模拟。
 +
 +  * 采用 **PackMol** 生成所需化合物的结构,将每个结构保存在名为 ''x#.##.hdf5'' 的单独数据文件中,这里的 ''#.##'' 表示 Li 的 含量,例如 ''0.40''
 +  * 运行每个 Li<sub>x</sub>S 化合物的独立脚本(复制 [[https://docs.quantumatk.com/_downloads/x0.40_full.py|↓ x0.40_full.py]],编辑使其使用上文的生成的 ''hdf5'' 文件作为输入和输出的数据文件)。
 +
 +
 +<WRAP center important 100%>
 +=== 注意 ===
 +即使使用 OpenMP 线程在 16 个内核上执行作业,富 Li 化合物的计算也可能需要几天的时间。
 +
 +冷却的 MD 模拟花费了大部分的工作时间。您可以通过降低从 1600 K冷却到 300 K 的 MD 步数(从而提高了冷却速率)减少获得结果的时间,但您需要注意,因为冷却速率可能会影响您的结果。
 +
 +而且,事实证明,富锂结构的平衡收敛速度通常比低锂浓度的收敛速度快,因此对于这些模拟,也有可能减少 MD 步骤的数量。
 +</WRAP>
 +
 +最后,利用脚本 [[https://docs.quantumatk.com/_downloads/ocv_profile.py|↓ ocv_profile.py]] 绘制 Li<sub>x</sub>S 化合物的 OCV 曲线图。
 +
 +{{ :atk:ocv_profile-20200429.png?600 |}}
 +
 +
 +图3 硫阴极锂化过程中的开路电压曲线。
 +
 +该图显示了完整的 OCV 曲线,与 [IOB + 15] 中的图 3 几乎相同。通常,取决于电解质,用于 Li-S 电池的实验放电电压曲线可表现出两个或三个还原阶段。本例中,ReaxFF 分子动力学计算可以预测出初始的下降、平坦的区域和再次的电压下降,都与实验一致。
 +
 +最初的下降可能是由高阶多硫化物的形成引起的,即 S<sub>8</sub> 晶体中的富硫化合物。但它不够稳定,因此是一个快速的过程。至 2.1 V 的平稳阶段是一个缓慢的过程,包括进一步还原为低阶多硫化物,即富锂化合物。在这里我们仅考虑锂化的阴极,但实际上这些过程非常复杂,可能需要根据电解质组成进行更详细的了解。
 +
  
  
行 58: 行 275:
 ===== 径向分布函数 ===== ===== 径向分布函数 =====
  
 +分析不同 Li<sub>x</sub>S 成分中 S–S,Li–Li 和 S–Li 的径向分布函数(RDF)也很有用。您可以使用以下脚本获取下面给出的图:[[https://docs.quantumatk.com/_downloads/rdf_lili.py|↓ rdf_lili.py]], [[https://docs.quantumatk.com/_downloads/rdf_ss.py\↓ rdf_ss.py]] 和 [[https://docs.quantumatk.com/_downloads/rdf_sli.py|↓ rdf_sli.py]]。
 +
 +{{ :atk:rdf_lili-20200429.png?600 |}}
 +
 +
 +{{ :atk:rdf_ss-20200429.png?600 |}}
 +
 +
 +{{ :atk:rdf_sli-20200429.png?600 |}}
  
 +Li–Li、S–S 和 S–Li 距离的径向分布函数与 [IOB + 15] 中的图 5 吻合,并清楚地表明:1)在硫阴极的锂化过程中,锂的吸收会在距离为 3 Å 处形成 Li-Li 键。2)短的 S–S 键在吸收 Li 后消失,3)低 Li 含量时会同时存在短和长的 S–Li 距离,但短的 S–Li 键(2.5 Å)在大量 Li 吸收中占主导地位。
 ===== 参考 ===== ===== 参考 =====
  
  
 +  * [IOB+15] (1, 2, 3, 4, 5, 6) Md M. Islam, A. Ostadhossein, O. Borodin, A. T. Yeates, W. W. Tipton, R. G. Hennig, N. Kumar, and A. C. T. van Duin. ReaxFF molecular dynamics simulations on lithiated sulfur cathode materials. //Phys. Chem. Chem. Phys//., 17:3383–3393, 2015. [[http://dx.doi.org/10.1039/C4CP04532G|doi:10.1039/C4CP04532G]].
 +  * 英文原文:https://docs.quantumatk.com/tutorials/ocv_lis_battery/ocv_lis_battery.html
  
  
atk/li-s电池的开路电压_reaxff方法分子动力学.1588169209.txt.gz · 最后更改: 2020/04/29 22:06 由 xie.congwei

© 2014-2022 费米科技(京ICP备14023855号