反应力场的生成物、反应路径分析方法

ops/2025/1/1 6:44:29/

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 多 \color{blue}{多} 精 \color{orange}{精} 彩 \color{green}{彩}


主要专栏内容包括:
†《LAMMPS小技巧》: ‾ \textbf{ \underline{\dag《LAMMPS小技巧》:}}  LAMMPS小技巧》: 主要介绍采用分子动力学( L a m m p s Lammps Lammps)模拟相关安装教程、原理以及模拟小技巧(难度: ★ \bigstar
††《LAMMPS实例教程—In文件详解》: ‾ \textbf{ \underline{\dag\dag《LAMMPS实例教程—In文件详解》:}}  ††LAMMPS实例教程—In文件详解》: 主要介绍采用分子动力学( L a m m p s Lammps Lammps)模拟相关物理过程模拟。(包含:热导率计算、定压比热容计算,难度: ★ \bigstar ★ \bigstar ★ \bigstar
†††《Lammps编程技巧及后处理程序技巧》: ‾ \textbf{ \underline{\dag\dag\dag《Lammps编程技巧及后处理程序技巧》:}}  †††Lammps编程技巧及后处理程序技巧》: 主要介绍针对分子模拟的动力学过程(轨迹文件)进行后相关的处理分析(需要一定编程能力。难度: ★ \bigstar ★ \bigstar ★ \bigstar ★ \bigstar ★ \bigstar )。
††††《分子动力学后处理集成函数—Matlab》: ‾ \textbf{ \underline{\dag\dag\dag\dag《分子动力学后处理集成函数—Matlab》:}}  ††††《分子动力学后处理集成函数—Matlab》: 主要介绍针对后处理过程中指定函数,进行包装,方便使用者直接调用(需要一定编程能力,难度: ★ \bigstar ★ \bigstar ★ \bigstar ★ \bigstar )。
†††††《SCI论文绘图—Python绘图常用模板及技巧》: ‾ \textbf{ \underline{\dag\dag\dag\dag\dag《SCI论文绘图—Python绘图常用模板及技巧》:}}  †††††SCI论文绘图—Python绘图常用模板及技巧》: 主要介绍针对处理后的数据可视化,并提供对应的绘图模板(需要一定编程能力,难度: ★ \bigstar ★ \bigstar ★ \bigstar ★ \bigstar )。
††††††《分子模拟—Ovito渲染案例教程》: ‾ \textbf{ \underline{\dag\dag\dag\dag\dag\dag《分子模拟—Ovito渲染案例教程》:}}  ††††††《分子模拟—Ovito渲染案例教程》: 主要采用 O v i t o \rm Ovito Ovito软件,对 L a m m p s \rm Lammps Lammps 生成的轨迹文件进行渲染(难度: ★ \bigstar ★ \bigstar )。

专栏说明(订阅后可浏览对应专栏全部博文): ‾ \color{red}{\textbf{ \underline{专栏说明(订阅后可浏览对应专栏全部博文):}}}  专栏说明(订阅后可浏览对应专栏全部博文):
注意: \color{red} 注意: 注意:如需只订阅某个单独博文,请联系博主邮箱咨询。 l a m m p s _ m a t e r i a l s @ 163. c o m \rm lammps\_materials@163.com lammps_materials@163.com

♠ \spadesuit † \dag 开源后处理集成程序:请关注专栏《LAMMPS后处理——MATLAB子函数合集整理》
♠ \spadesuit † \dag † \dag 需要付费定制后处理程序请邮件联系: l a m m p s _ m a t e r i a l s @ 163. c o m \rm lammps\_materials@163.com lammps_materials@163.com

建模篇:分子动力学模型快速构建 \rm 建模篇:分子动力学模型快速构建 建模篇:分子动力学模型快速构建

M a t e r i a l S t u d i o + M o l t e m p l a t e + P a c k m o l \rm \color{red} Material\ Studio+Moltemplate+Packmol Material Studio+Moltemplate+Packmol

1、 建模篇(上):OPLSAA力场参数之快速建模—MS+Moltemplate

2 、建模篇(下):力场快速设置-AuToFF+Moltemplate

在这里插入图片描述


反应力场的生成物、反应路径分析方法

针对 《 M a t l a b 实现反应力场物产统计》 \rm 《Matlab实现反应力场物产统计》 Matlab实现反应力场物产统计》 中的案例( E x a m p l e / r e a x / C H O \rm Example/reax/CHO Example/reax/CHO)。

一、LAMMPS in文件(出自Example/reax/CHO)

根据Lammps以下的命令可以获得化学键的断裂情况以及反应生成物,那么如何统计反应路径呢?

在这里插入图片描述

# REAX potential for CHO system
# .....units		realatom_style	charge
read_data	data.CHOpair_style	reax/c NULL
pair_coeff	* * ffield.reax.cho H C Oneighbor	2 bin
neigh_modify	every 10 delay 0 check nofix		        1 all nve
fix             2 all qeq/reax 1 0.0 10.0 1e-6 param.qeq
fix             3 all temp/berendsen 500.0 5000.0 100.0
fix             4 all reax/c/species 1 1 100 species.out timestep	0.25dump		1 all atom 1000 dump.reax.chorun		100000

二、化学键生成可视化

请添加图片描述

1. Python脚本

这里用到了鲍老师(公众号: LAMMPS与AI材料设计)早起开源的代码计算,结合Ovito可以实现化学键断裂、生成的可视化。
根据Lammps的命令 f i x 1 a l l r e a x f f / b o n d s 100 b o n d s . r e a x f f \rm fix\ 1\ all\ reaxff/bonds\ 100\ bonds.reaxff fix 1 all reaxff/bonds 100 bonds.reaxff

在这里插入图片描述

#结合LAMMPS中fix bond/reaxff和dump命令的输出文件,将fix bond/reaxff中的键结信息和dump中的坐标信息转换组合写入一系列data文件中。由此就可利用ovito进行可视化。ovito可以读入系列文件,这样就可以看到分子如何断键分解,或反应物如何成键生成产物
#要求使用atom_style full,以保留分子id信息在ovito中分析
#fix bond/reaxff和dump的输出频率要一致。当模拟时间很长时输出频率不能太快。
#对于原子数很多的体系代码速度会较慢
#dump命令必须使用以下格式
#dump 1 all custom 1000 dump.lammpstrj id mol type q x y z
#work_path = "F:\\官能团\\out-12-16\\group-120-150\\新建文件夹\\New Folder\\"bonds = open(work_path + "bonds.reaxff","r")
dump = open(work_path + "dump.out","r")N_Frame = 49n_atom = 105
n_bond = 0
atom_sec = []
bond_sec = []for i in range(N_Frame):for j in range(5):line_dump = dump.readline()line_dump = dump.readline()xlo = line_dump.split()[0]xhi = line_dump.split()[1]line_dump = dump.readline()ylo = line_dump.split()[0]yhi = line_dump.split()[1]line_dump = dump.readline()zlo = line_dump.split()[0]zhi = line_dump.split()[1]line_dump = dump.readline()for k in range(n_atom):line_dump = dump.readline()atom_sec.append(line_dump)if i == 0:pre_line = 7else:pre_line = 8for j in range(pre_line):line_bond = bonds.readline()for k in range(n_atom):line_bond = bonds.readline()nb = int(line_bond.split()[2])for l in range(nb):n_bond += 1tmp = str(n_bond) + " " + "1" + " " + line_bond.split()[0] + " " + line_bond.split()[3+l] + "\n"bond_sec.append(tmp)data = open(work_path + "data" + str(i),"w")data.write("LAMMPS data from bonds\n")data.write("\n")data.write(str(n_atom) + " " + "atoms\n")data.write("3 atom types\n")data.write(str(n_bond) + " " + "bonds\n")data.write("1 bond types\n")data.write("\n")data.write(str(xlo) + " " + str(xhi) + " " + "xlo xhi\n")data.write(str(ylo) + " " + str(yhi) + " " + "ylo yhi\n")data.write(str(zlo) + " " + str(zhi) + " " + "zlo zhi\n")data.write("\n")data.write("Atoms\n")data.write("\n")data.writelines(atom_sec)data.write("\n")data.write("Bonds\n")data.write("\n")data.writelines(bond_sec)data.close()n_bond = 0atom_sec = []bond_sec = []

2. Matlab 脚本

work_path = "F:\官能团\out-12-16\group-120-150\新建文件夹\New Folder\";% 使用 fullfile 拼接路径
bonds_file_path = fullfile(work_path, "bonds.reaxff");
dump_file_path = fullfile(work_path, "dump.out");% 检查文件是否存在
if ~isfile(bonds_file_path)error("File not found: %s", bonds_file_path);
end
if ~isfile(dump_file_path)error("File not found: %s", dump_file_path);
end% 打开文件
bonds_file = fopen(bonds_file_path, 'r');
dump_file = fopen(dump_file_path, 'r');N_Frame = 49;  % 总帧数
n_atom = 105;  % 原子数% 初始化
atom_sec = {};
bond_sec = {};
n_bond = 0;for i = 1:N_Frame% 跳过前5行for j = 1:5fgetl(dump_file);end% 读取盒子尺寸line_dump = fgetl(dump_file);line_dump_split = strsplit(line_dump);xlo = str2double(line_dump_split{1});xhi = str2double(line_dump_split{2});line_dump = fgetl(dump_file);line_dump_split = strsplit(line_dump);ylo = str2double(line_dump_split{1});yhi = str2double(line_dump_split{2});line_dump = fgetl(dump_file);line_dump_split = strsplit(line_dump);zlo = str2double(line_dump_split{1});zhi = str2double(line_dump_split{2});fgetl(dump_file); % 跳过一行% 读取原子部分for k = 1:n_atomatom_sec{k} = fgetl(dump_file);end% bonds.reaxff 文件处理if i == 1pre_line = 7;elsepre_line = 8;endfor j = 1:pre_linefgetl(bonds_file);end% 读取键信息bond_idx = 1;for k = 1:n_atomline_bond = fgetl(bonds_file);bond_data = strsplit(line_bond);nb = str2double(bond_data{3});for l = 1:nbn_bond = n_bond + 1;bond_sec{bond_idx} = sprintf('%d 1 %s %s\n', n_bond, bond_data{1}, bond_data{3+l});bond_idx = bond_idx + 1;endend% 写入 data 文件data_filename = fullfile(work_path, sprintf("data%d", i));data_file = fopen(data_filename, 'w');if data_file == -1error("Failed to open file: %s", data_filename);endfprintf(data_file, "LAMMPS data from bonds\n\n");fprintf(data_file, "%d atoms\n", n_atom);fprintf(data_file, "3 atom types\n");fprintf(data_file, "%d bonds\n", n_bond);fprintf(data_file, "1 bond types\n\n");fprintf(data_file, "%f %f xlo xhi\n", xlo, xhi);fprintf(data_file, "%f %f ylo yhi\n", ylo, yhi);fprintf(data_file, "%f %f zlo zhi\n\n", zlo, zhi);fprintf(data_file, "Atoms\n\n");fprintf(data_file, "%s\n", atom_sec{:});fprintf(data_file, "\nBonds\n\n");fprintf(data_file, "%s\n", bond_sec{:});fclose(data_file);% 重置变量n_bond = 0;atom_sec = {};bond_sec = {};
end% 关闭文件
fclose(bonds_file);
fclose(dump_file);

三、反应路径分析

这里需要用到,曾晋哲等开发的《Reaxff力场反应网络分析reacnetgenerator》。

Jinzhe Zeng, Liqun Cao, Chih-Hao Chin, Haisheng Ren, John Z. H. Zhang, and Tong Zhu. ReacNetGenerator: an automatic reaction network generator for reactive molecular dynamics simulations. Phys. Chem. Chem. Phys., 22(2):683–691, 2020. doi:10.1039/C9CP05091D.

1. 安装

# upgrade pip as old pip may not be supported
pip install -U pip
pip install reacnetgenerator

在这里插入图片描述

在这里插入图片描述

2. 分析

注意 : \color{red} 注意: 注意: $\rm 轨迹文件格式: id type x y z $

针对Lammps生成的轨迹文件

reacnetgenerator --type bond -i bonds.reaxc -a C H O --nohmm

在这里插入图片描述
会在目录下生成一下文件:
在这里插入图片描述

2.1 反应网络

在这里插入图片描述

2.2 生成物

在这里插入图片描述

2.3 路径

在这里插入图片描述

四 详细案例及教程

(请点击)

在这里插入图片描述


http://www.ppmy.cn/ops/146034.html

相关文章

centos系统如何安装kubectl和部署kube-apiserver

1.使用 yum 安装&#xff08;推荐&#xff09; 添加 Kubernetes 软件源&#xff1a; 首先&#xff0c;你需要添加 Kubernetes 的官方 YUM 软件源。这可以通过下载并安装 kubernetes.repo 文件来实现。 shell cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [k…

2024年12月CCF-GESP编程能力等级认证Python编程六级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 关于哈夫曼树,下面说法正确的是( )。 A. 不可能是满二叉树 B. 哈夫曼树是一种用于数据压缩的二叉树 C. 权值较大的结点…

pytorch 张量的unfold方法介绍

在 PyTorch 中&#xff0c;unfold 是张量的一种操作方法&#xff0c;用于将张量的一个维度展开为多个重叠的窗口。这在处理滑动窗口操作&#xff08;如卷积、时间序列分片等&#xff09;时非常有用。 方法签名 Tensor.unfold(dimension, size, step)参数说明 dimension: 要展…

Kotlin 语言基础语法及标准库

基础 Kotlin 变量和数据类型 不可变变量 val关键字 类似java中final关键字&#xff0c;必须有初始值&#xff0c;且不更改变量的值Error:(13, 5) Kotlin: Val cannot be reassigned可变变量var 关键字 var myName "china"类型推断 // 没有指定变量类型&#xf…

路由(Route)为什么叫路由?

路由&#xff08;Route&#xff09;为什么叫路由&#xff1f; 路由初印象&#xff1a;生活中的 “网络向导” 在如今这个数字化时代&#xff0c;网络已然成为我们生活中不可或缺的一部分。 不管是宅在家里刷剧、打游戏&#xff0c;还是出门在外用手机处理工作、查询信息&…

Pandas01

文章目录 内容简介1 常用数据分析三方库2 Jupyter notebook3 Series的创建3.1 通过Numpy的Ndarray 创建一个Series3.2 通过列表创建Series 4 Series的属性和方法4.1 常用属性4.2 常用方法4.3 布尔值列表筛选部分数据4.4 Series 的运算 5 DataFrame的创建通过字典创建通过列表[元…

Ubuntu系统部署Mysql8.0后设置不区分大小写

部署MySQL # 更新系统软件包列表 sudo apt update# 安装MySQL Server sudo apt install mysql-server# 在安装时&#xff0c;系统会自动进行初始化&#xff0c;安装完成后MySQL已经处于运行状态# MySQL常见命令 #启动MySQL sudo systemctl start mysql#停止MySQL sudo systemc…

Windows Server 安装 MySQL 8.0 详细指南

文章目录 Windows Server 安装 MySQL 8.0 详细指南准备工作安装步骤1. 解压安装包2. 初始化数据目录3. 安装 MySQL 服务4. 启动 MySQL 服务 MySQL 配置文件 (my.ini)5. 设置 root 密码6. 配置远程访问 安全建议常见问题排查性能优化提示结语 &#x1f449;洛秋资源小站 Windows…