本书将分子动力学理论与应用相结合,以高质量的代码呈现分子动力学模拟的底层逻辑与实现形式。内容上,本书将在介绍分子动力学模拟的经典力学基础、热力学与经典统计力学基础之上,通过一个简单的分子动力学模拟程序引导读者从零构建模拟程序。此后,再逐步上升到模拟的高阶知识,如模拟盒子与近邻列表、经验势函数与机器学习势函数、控温与控压算法、平衡态性质、输运性质的计算、基于路径积分的量子分子动力学模拟等内容。
第1章 分子动力学模拟的物理基础 001
1.1 牛顿力学 001
1.1.1 质点力学 001
1.1.2 粒子系力学 004
1.1.3 牛顿运动方程的数值积分 005
1.1.4 Python编程范例:简谐振子运动的数值求解 007
1.2 分析力学 008
1.2.1 拉格朗日方程 008
1.2.2 哈密顿方程 008
1.2.3 相空间 010
1.2.4 哈密顿体系运动方程的数值积分 012
1.3 热力学 015
1.3.1 基本概念 015
1.3.2 热力学第一定律 016
1.3.3 热力学第二定律 018
1.3.4 热力学函数和关系 020
1.4 经典统计力学 024
1.4.1 统计系综和统计分布函数 024
1.4.2 微正则系综 025
1.4.3 正则系综 027
1.4.4 等温等压系综 034
第2章 简单的分子动力学模拟程序 035
2.1 简单分子动力学模拟的基本要素 035
2.1.1 分子动力学模拟的定义 035
2.1.2 初始条件 036
2.1.3 边界条件 037
2.1.4 相互作用 039
2.1.5 运动方程的数值积分 041
2.1.6 物理量的计算 042
2.2 C++编程范例:一个简单的分子动力学模拟程序 042
2.2.1 程序中使用的单位制 042
2.2.2 本章程序的源代码解析 043
2.3 程序的测试 051
2.3.1 输入的准备 051
2.3.2 能量守恒的测试 052
第3章 模拟盒子与近邻列表 055
3.1 三斜盒子 055
3.1.1 三斜盒子的定义 055
3.1.2 三斜盒子情况下的周期边界条件 057
3.2 近邻列表 058
3.2.1 为什么要用近邻列表? 058
3.2.2 自动判断何时更新近邻列表 059
3.2.3 构建近邻列表的平方标度算法 059
3.2.4 构建近邻列表的线性标度算法 060
3.3 C++编程范例:使用近邻列表的分子动力学模拟程序 061
3.3.1 处理三斜盒子的基本函数 061
3.3.2 近邻列表平方标度算法的C++实现 064
3.3.3 近邻列表线性标度算法的C++实现 065
3.3.4 程序速度测试 070
3.4 GPUMD程序简介 071
3.4.1 模型文件 072
3.4.2 控制文件 073
3.4.3 GPUMD使用范例:LJ势函数的使用 073
第4章 经验势函数 075
4.1 经典势函数的一般性质 075
4.1.1 经典势函数概览 075
4.1.2 两体势与多体势的定义 077
4.1.3 多体势中力的表达式 078
4.2 两个典型的经验多体势 080
4.2.1 EAM势 080
4.2.2 Tersoff势 081
4.3 C++编程范例:Tersoff势的编程实现 084
4.3.1 Tersoff势的C++编程实现 084
4.3.2 验证力的正确性的方法 088
4.4 GPUMD使用范例:Tersoff势的使用 089
第5章 机器学习势 091
5.1 NEP机器学习势 091
5.1.1 NEP机器学习势的人工神经网络模型 091
5.1.2 NEP机器学习势的描述符 093
5.1.3 NEP机器学习势的训练 101
5.2 NEP与经验势的结合 104
5.2.1 NEP与ZBL排斥势的结合 104
5.2.2 NEP与D3色散修正的结合 105
5.3 GPUMD中NEP机器学习势的使用 106
5.3.1 NEP机器学习势使用概览 106
5.3.2 NEP机器学习势训练范例:晶体硅 108
第6章 控温算法 111
6.1 Berendsen控温算法 111
6.2 BDP控温算法 112
6.3 Nose-Hoover控温算法 112
6.3.1 NH控温算法的理论推导 112
6.3.2 Python编程范例:用简谐振子展示NH控温算法的效果 115
6.4 NHC控温算法 120
6.4.1 NHC控温算法的理论推导 120
6.4.2 Python编程范例:用简谐振子展示NHC控温的效果 122
6.5 朗之万控温算法 127
6.5.1 理论 127
6.5.2 Python编程范例:用简谐振子展示朗之万控温的效果 128
6.6 GPUMD使用范例:几个控温算法的对比 131
第7章 控压算法 134
7.1 压强的微观计算与直观理解 134
7.1.1 多体势中位力和压强的表达式 134
7.1.2 压强的直观理解 136
7.2 Berendsen控压算法 137
7.3 SCR控压算法 140
7.4 Martyna- Tuckerman-Tobias-Klein控压算法 141
7.5 GPUMD中控压算法的使用范例 146
7.5.1 几个控压算法的对比 146
7.5.2 非各向同性控压 147
第8章 静态性质 150
8.1 统计误差 150
8.1.1 理论基础 150
8.1.2 GPUMD使用范例:计算温度和压强的平均值与统计误差 152
8.2 GPUMD使用范例:热膨胀模拟 155
8.3 径向分布函数 159
8.3.1 理论基础 159
8.3.2 Python编程范例:径向分布函数的编程实现 160
8.3.3 GPUMD使用范例:水的径向分布函数 162
8.4 自由能计算 164
8.4.1 自由能微扰理论 164
8.4.2 热力学积分方法 165
8.4.3 GPUMD使用范例:计算固体的自由能 169
8.4.4 自由能的温度积分 170
8.4.5 GPUMD使用范例:自由能计算的温度积分方法 172
第9章 输运性质 174
9.1 线性响应理论与时间关联函数 174
9.2 自扩散系数 177
9.2.1 C++编程范例:均方位移和速度自关联函数的编程实现 178
9.2.2 GPUMD使用范例:计算液态硅的自扩散系数 180
9.3 黏滞系数 184
9.3.1 GPUMD使用范例:计算液态硅的黏滞系数 185
9.4 热导率 187
9.4.1 热输运的平衡态分子动力学模拟 187
9.4.2 热输运的均匀非平衡分子动力学模拟方法 190
9.4.3 热输运的非均匀非平衡分子动力学模拟 191
9.5 GPUMD使用范例:晶体硅热导率计算 193
9.5.1 EMD模拟 193
9.5.2 HNEMD模拟 194
9.5.3 NEMD模拟 196
9.5.4 热流的谱分解 198
第10章 路径积分分子动力学 205
10.1 量子力学 205
10.1.1 量子力学的基本原理 205
10.1.2 坐标表象的量子力学 209
10.2 量子统计系综 211
10.3 路径积分量子统计力学 212
10.4 路径积分分子动力学的算法 215
10.4.1 珠子项链体系的哈密顿量 215
10.4.2 运动方程与数值积分 215
10.4.3 PIMD中的朗之万热浴 217
10.5 Python编程范例:路径积分分子动力学的积分算法 218
10.6 GPUMD使用范例:用PIMD计算水的径向分布函数 222
第11章 总结与展望 224
11.1 势函数 224
11.2 积分算法 225
11.3 物理量的测量 226
参考文献 228