lammps 报错总结

本文源于自己在学习过程中的问题及解决办法记录,仅供大家参考,可能表述并不准确,欢迎批评交流!

ERROR on proc 0: Neighbor list overflow, boost neigh_modify one or page

出现这个错误的直接原因是体系中某些原子的近邻数超过了2000个(除非你使用neigh_modify命令增加了允许的近邻数),而导致这个错误的可能因素有:

  1. 初始结构有问题,比如原子分布过于密集。这种情况在一开始就会出错。
  2. 截断半径设置的太大了,比如大于10A。可以通过命令neighbor,减小截断半径来解决。
  3. neigh_modify 添加 one 参数
  4. 势参数设置有问题,这种情况一般是在运行一些步后才会出错。
    本文直接翻译自网页:http://lammps.sandia.gov/threads/msg36842.html

ERROR on proc 12: Angle atoms 69338 69339 69340 missing on proc 12 at step 38110 (…/ntopo_angle_all.cpp:68)

相似报错还有键bond缺失,解决办法如下:

  1. 初始模型是否正确,确定建模方法及参数。这里重点仔细检查,由于无法可视化,或者无法直观的观察,这里错误的可能性比较大。
  2. 参数设置错误
    a. 势函数是否正确,如果能从文献中确定比较好。
    b. neighbor
    在前期优化结构的过程中,由于结构极度不合理,可临时调大bin值,同时仔细查看neigh_modify的参数,进行合理的修改,如
neighbor        
<think>我们正在讨论LAMMPS中的neighbor指令。neighbor指令用于设置构建邻近列表(邻居列表)的参数,这对计算原子间相互作用至关重要。邻近列表存储了每个原子一定范围内的相邻原子,从而在分子动力学模拟中减少计算量。 指令基本语法:neighbor style args 其中style可以是bin或nsq,args包括构建邻近列表的截断距离(skin distance)和更新频率(every, delay, check等参数)。 常见用法: 1. neighbor skin style 其中skin是额外的截断距离(单位:距离单位),用于决定何时重建邻近列表。通常,skin设置为相互作用截断半径的增量,这样当原子移动不超过skin距离时,邻近列表仍然有效。 style可以是bin(使用网格划分加速)或nsq(使用N平方算法,适用于小体系)。 2. 更详细的设置:neighbor skin style every delay check every: 每隔多少步尝试重建邻近列表(但实际是否重建取决于原子位移) delay: 从第几步开始检查是否需要重建邻近列表(通常设为0,表示一开始就检查) check: 是否在每一步检查原子位移是否超过skin的一半(yes/no)。如果设置为yes,则当任何原子位移超过skin的一半时,重建邻近列表;如果为no,则仅根据every和delay的设置进行重建。 示例: neighbor 0.3 bin 表示使用bin风格,skin=0.3(单位取决于模拟的单位制,如Å) neighbor 2.0 bin every 5 delay 0 check yes 表示skin=2.0,使用bin风格,每5步检查一次,从第0步开始,并且每一步都会检查位移(如果位移超过skin的一半则立即重建) 注意:邻近列表的构建对模拟性能影响很大。较大的skin可以减少重建频率,但会增加邻近列表的大小,从而增加计算短程相互作用的时间;较小的skin则需要更频繁地重建邻近列表,但每次计算相互作用时计算的原子对较少。 另外,还可以通过neighbor命令设置额外的选项,如: neighbor ... special 用于处理特殊键(special bonds)的邻近列表。 在LAMMPS中,还可以使用neigh_modify命令调整邻近列表的行为,例如: neigh_modify every 1 delay 0 check yes page 100000 one 20000 其中page和one用于控制邻近列表的内存分配。 下面是一个简单的LAMMPS输入脚本中使用neighbor命令的例子: ``` # 模拟盒子 dimension 3 boundary p p p atom_style atomic # 创建原子 read_data data.lammps # 势函数 pair_style lj/cut 2.5 pair_coeff * * 1.0 1.0 # 邻近列表设置 neighbor 0.3 bin neigh_modify every 1 delay 0 check yes # 其他设置 ... ``` 在这个例子中,我们设置了邻近列表的skin为0.3,使用bin风格,并且每一步都检查位移(因为every=1, delay=0, check=yes)。这样设置可以确保邻近列表总是最新的,但可能会增加计算开销。 为了优化性能,通常需要根据体系的特点调整这些参数。例如,对于原子运动较慢的体系,可以增大every的值,减少检查次数。 引用说明:LAMMPS官方手册中详细描述了neighbor命令[^1]。 §§相关问题§§ 1. neighbor命令中的skin参数如何影响模拟性能? 2. 如何选择neighbor命令中的style(bin或nsq)? 3. neigh_modify命令有哪些常用选项,它们的作用是什么? 4. 在LAMMPS模拟中,如何诊断邻近列表构建带来的性能问题?</think>### LAMMPS中`neighbor`指令详解 `neighbor`指令在LAMMPS中用于控制邻近列表(neighbor list)的构建方式,这对分子动力学模拟的性能和准确性至关重要。邻近列表存储了每个原子周围一定距离内的其他原子信息,用于高效计算短程相互作用力。 #### 基本语法 ```lammps neighbor skin style neighbor skin style every delay check keyword ... ``` - **`skin`**:额外搜索距离(单位:距离单位),当原子位移超过`0.5*skin`时触发邻近列表重建 - **`style`**:构建算法 - `bin`:基于网格的快速算法(默认) - `nsq`:直接$O(N^2)$搜索(适用于小体系) - **`every`**:检查位移的频率(时间步数) - **`delay`**:首次检查的延迟步数 - **`check`**:是否检查位移阈值(`yes`/`no`) #### 关键参数详解 1. **`skin`选择原则**: - 典型值 = $r_{\text{cut}} \times 0.1$($r_{\text{cut}}$是相互作用截断半径) - 较大值减少重建频率但增加计算量 - 较小值增加重建频率但减少内存占用 2. **性能优化参数**: ```lammps neighbor 0.3 bin every 5 delay 0 check yes ``` - `every 5`:每5步检查位移 - `delay 0`:从第0步开始检查 - `check yes`:启用位移阈值检查 3. **内存控制参数**: ```lammps neigh_modify page 50000 one 10000 ``` - `page`:邻近列表内存块大小 - `one`:每个原子的最大邻居数 #### 典型应用场景 1. **平衡性能与精度**: ```lammps # 高精度模拟(频繁重建) neighbor 0.2 bin every 1 check yes # 高性能模拟(减少重建) neighbor 0.4 bin every 10 delay 5 check no ``` 2. **特殊体系处理**: ```lammps # 长程静电体系 neighbor 2.0 bin kspace_style pppm 1e-5 # 高密度体系(增加邻居数上限) neigh_modify one 20000 ``` 3. **GPU加速配置**: ```lammps neighbor bin neigh_modify check no package gpu neigh yes ``` #### 问题诊断技巧 1. 查看重建频率: ```lammps thermo_style custom step temp press neigh ``` 输出中的`neigh`列显示邻近列表重建次数 2. 内存不足错误: ```bash Too many neighbors - boost neigh_modify one ``` 需增加`neigh_modify one`的值 3. 性能分析: 使用`timer`命令查看`Pair`和`Neigh`时间占比,优化目标是平衡两者[^1]。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值