乐于分享
好东西不私藏

[书籍阅读,21,Lammps源码解析和修改]Extending and Modifying LAMMPS

[书籍阅读,21,Lammps源码解析和修改]Extending and Modifying LAMMPS

字数 2005,阅读大约需 11 分钟

《Extending and Modifying LAMMPS》前八章总结

这本书是Lammps的核心开发者之一写的源码级阅读和修改,对于学习Lammps的使用和修改大有裨益。

本书核心目标:零基础教会读者修改/编写LAMMPS源码,实现自定义分子动力学模拟功能,面向有LAMMPS使用基础、无/少源码修改经验的研究者与学生。

第1章 MD理论与模拟实践

核心内容

  1. 1. 分子动力学(MD)基础理论
    • • 基于牛顿经典力学,模拟原子/粒子轨迹演化,核心公式:(力为势能负梯度)。
    • • 粒子运动:平动+刚体转动,转动通过力矩→角动量→角速度迭代更新。
    • • 温度与麦克斯韦-玻尔兹曼分布:粒子速度服从高斯分布,温度决定分布形态。
  2. 2. 核心迭代算法
    • • Velocity Verlet算法:分两步更新位置与速度,小时间步(飞秒级)保证能量守恒,是LAMMPS默认积分器。
  3. 3. MD模拟关键技术
    • • 势能截断:超过截断半径的原子相互作用设为0,减少计算量。
    • • 周期性边界条件:模拟盒无限复制,消除边界效应,需满足最小镜像约定
    • • 邻域列表:仅计算截断半径内原子,皮肤宽度优化列表重建频率。
    • • 并行通信:空间分解+幽灵原子(ghost atoms),实现多核并行计算。

本章价值

建立MD物理基础,理解LAMMPS源码实现的底层物理逻辑。

第2章 LAMMPS语法与源码层级

核心内容

  1. 1. LAMMPS输入脚本结构
    • • 四大模块:初始化设置→系统定义→模拟设置→模拟执行,逐行解析执行。
    • • 核心命令:units/boundary(初始化)、create_box/create_atoms(建模)、pair_style/fix(相互作用/控场)、run(执行)。
  2. 2. 源码仓库与文件结构
    • • 源码存于src文件夹,以.cpp/.h成对文件实现功能,大写文件夹为可选包。
    • • 编译后可执行文件,调用源码解析脚本、执行模拟。
  3. 3. 源码层级与顶级类
    • • 顶层类:lammps.cpp(启动LAMMPS)、main.cpp(主入口)。
    • • 核心功能类:
      • • memory.cpp:内存管理;error.cpp:报错/警告;
      • • input.cpp:解析输入命令;atom.cpp:存储原子属性;
      • • neighbor.cpp:构建邻域列表;force.cpp:计算相互作用力。
  4. 4. 三大核心Style(父类)
    • • Pair(对势)、Compute(计算量)、Fix(控场/修正),子类继承实现具体功能。

本章价值

理清LAMMPS“脚本→源码”的调用关系,掌握源码核心目录与顶级类作用。

第3章 源码结构与执行阶段

核心内容

  1. 1. 父类与子类继承
    • • fix.cpp/h:所有Fix的父类,解析fix ID/组/类型,子类继承实现自定义修正。
    • • pair.cpp/h:所有对势的父类,处理系数混合、截断、邻域列表请求。
    • • compute.cpp/h:所有Compute的父类,解析compute ID/组/类型。
  2. 2. 模拟执行阶段(单时间步)
    • • 以Verlet积分器为核心,按固定顺序执行方法:
      initial_integratepre_exchangeneighbor buildcomputepost_forcefinal_integrateend_of_step
    • • 最小化(min.cpp):非时间步迭代,调用专属方法。
  3. 3. 关键工具类
    • • pointers.h:指针类,实现全代码数据共享(原子、力、邻域列表等)。
    • • input.cpp:解析输入命令首词,匹配源码方法,无匹配则报错。

本章价值

掌握LAMMPS源码执行流程继承机制,明确自定义功能的代码插入位置。

第4章 变量、数组与方法的信息访问

核心内容

  1. 1. 原子属性访问
    • • 通过atom->x/v/f访问原子位置、速度、力(二维数组);atom->type/mass访问原子类型/质量。
    • • 全局索引vs局部索引:并行计算中,局部索引为当前核心的原子编号,需通过atom->map()转换。
  2. 2. 邻域列表调用
    • • 用neighbor->request()请求列表,通过list->inum/ilist/firstneigh遍历邻居原子。
  3. 3. 物理常数与输入参数读取
    • • 物理常数(玻尔兹曼常数、单位转换):force->boltz/mvv2e自动匹配单位。
    • • 输入参数解析:force->numeric()(浮点数)、force->inumeric()(整数)、force->bounds()(原子类型范围)。
  4. 4. 自定义数据类型
    • • lmptype.h定义tagint/bigint,适配超大模拟体系的原子数/时间步。

本章价值

学会直接读取/修改LAMMPS核心数据,是自定义源码的基础操作。

第5章 理解对势(Pair Styles)

核心内容

  1. 1. 对势通用结构
    • • 核心方法:
      • • allocate():分配数组内存;
      • • settings():读取全局参数(pair_style后参数);
      • • coeff():读取原子对参数(pair_coeff后参数);
      • • init_one():初始化势参数;
      • • compute():计算原子对作用力与势能;
      • • single():返回单对原子势能。
  2. 2. 典型对势解析
    • • Morse势:共价键作用,实现势能公式、力梯度计算,支持偏移修正。
    • • 表格势:从文件读取势/力数据,插值计算,适配复杂自定义势。
    • • DPD势:耗散粒子动力学,包含保守力+耗散力+随机力,兼容热浴。

本章价值

掌握自定义对势的完整流程,可修改/编写专属原子相互作用势。

第6章 理解计算量(Computes)

核心内容

  1. 1. Compute通用结构
    • • 核心方法:init()初始化、compute_scalar()(标量输出)、compute_vector()(矢量输出)、compute_array()(数组输出)。
    • • 功能:计算模拟中无法直接获取的物理量,不修改原子状态。
  2. 2. 典型Compute解析
    • • compute ke:计算原子组动能,遍历原子速度求和,MPI多核心汇总。
    • • compute group/group:计算两组原子间相互作用能/力。
    • • compute rdf:计算径向分布函数,分箱统计原子分布、归一化处理。
    • • compute heat/flux:计算热流,调用其他compute获取动能/势能/应力。

本章价值

学会自定义物理量计算,满足科研中特殊物理量的输出需求。

第7章 理解修正(Fixes)

核心内容

  1. 1. Fix通用结构
    • • 核心:setmask()指定执行阶段(决定Fix在时间步中何时运行),是自定义Fix的关键。
    • • 功能:修改原子状态、控温/控压、施加外力、输出信息等。
  2. 2. 典型Fix解析
    • • fix addforce:施加自定义外力,支持常量/变量力,执行于post_force阶段。
    • • fix nve:NVE系综,实现Velocity Verlet积分,分两步更新位置/速度。
    • • fix nh:Nose-Hoover热浴/压浴,控温/控压,继承NVE实现NVT/NPT。
    • • fix print:定时输出信息,执行于end_of_step阶段。
    • • fix wall:壁面作用,实现LJ/ Morse壁面,垂直壁面施加作用力。
    • • fix rigid:刚体模拟,计算质心运动+转动,更新刚体内部原子位置/速度。

本章价值

掌握自定义Fix的核心方法,实现控场、外力、刚体等自定义模拟控制。

第8章 探索辅助类

核心内容

  1. 1. Group类(group.cpp)
    • • 按类型/区域/逻辑(并集/交集)分组原子,位运算标记原子,支持计数、边界计算。
  2. 2. Variable类(variable.cpp)
    • • 定义变量:常量、公式、组/原子属性调用,分equal(标量)、atom(原子级)样式。
  3. 3. Error类(error.cpp)
    • • 报错:all()(全局终止)、one()(单核心报错)、warning()(警告)。
  4. 4. Memory类(memory.cpp)
    • • 内存管理:创建/销毁多维数组,避免内存泄漏。
  5. 5. Angle/angle/harmonic类
    • • 键角势父类与谐波子类,计算键角相互作用力,与对势逻辑一致。

本章价值

理解LAMMPS辅助功能类,完善自定义源码的配套功能(分组、变量、报错、内存)。


前八章整体总结

前八章完成从MD理论→LAMMPS语法→源码结构→三大核心Style(Pair/Compute/Fix)→辅助类的全覆盖,形成完整知识链:

  1. 1. 底层:MD物理原理+并行计算逻辑;
  2. 2. 中层:LAMMPS源码架构、数据访问、执行流程;
  3. 3. 上层:自定义对势、计算量、修正的实操方法+辅助类支持。

最终目标:读者可独立编写/修改LAMMPS源码,实现完全自定义的分子动力学模拟