LAMMPS `bond_style bpm/rotational` 完全指南:带旋转自由度与断键机制的结合粒子模型
发布时间:2026/10/16 6:14:14 锦皓数字建站

科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载导读bond_style bpm/rotational是 LAMMPS BPMBonded Particle Model结合粒子模型包中功能最完整的键样式。它在弹簧式中心力之外额外解析剪切、弯曲、扭转方向的弹性力与力矩并内置基于临界载荷的断裂判据、可选的平滑衰减与速度阻尼适合模拟梁式连续体、细线、脆性断裂与颗粒固体的介观力学行为。读完本文你将掌握该键样式的全部关键字、12 个bond_coeff参数的物理含义与量纲、两种参考系frame average/particle与两种阻尼构造damping derivative/dem的差异并能通过store/local输出断键事件、正确处理special_bonds与newton约束在真实示例上复现冲击碎裂、细线拉伸等算例。一、BPM 包与 bpm/rotational 的定位BPM 包用于模拟介观尺度的固体固体被粗粒化为大量颗粒每个颗粒代表远超原子尺度的一块区域颗粒之间由键网络连接以模拟弹性。这类方法在文献中还有多种别名内聚梁模型cohesive beam model、键合离散元bonded DEM、晶格弹簧模型lattice spring model等。与传统分子动力学键不同BPM 键的平衡长度可以逐键变化——键在第一次被计算时存储初始参考状态包括平衡长度对旋转模型还包括键取向从而产生无应力的初始构型并在大应变下允许断键以产生断裂。更全面的背景见 Howto_bpm。BPM 包共包含五种键样式bpm/spring仅中心力、bpm/spring/plastic增加塑性屈服应变、bpm/rotational本文主题解析剪切/弯曲/扭转力与力矩、bpm/peri近场动力学、bpm/zero仅存储参考状态、可断键但不产生力。其中bpm/rotational要求颗粒与 atom_style bpm/sphere 一样存储半径、四元数姿态与角速度并使用专属积分器 fix nve/bpm/sphere 更新转动自由度。从源码看该样式注册为BondStyle(bpm/rotational,BondBPMRotational)bond_bpm_rotational.h继承自基类BondBPM核心力/力矩计算集中在average_frame_forces()、particle_frame_forces()与dem_damping_forces()三个成员函数bond_bpm_rotational.cpp。二、语法与关键字bond_style bpm/rotational keyword value attribute1 attribute2 ...可选关键字keyword与取值如下关键字取值含义store/localfix_ID N attributes ...将断键数据存入内部 fix供dump local输出overlay/pairyes/no键合颗粒之间是否仍计算 pair 力默认nosmoothyes/no断键附近是否平滑将力/力矩衰减到零默认yesnormalizeyes/no是否用参考长度归一化法向/剪切刚度默认nobreakyes/no运行中键是否允许断裂默认yesframeaverage/particle计算相对位移与旋转所用的参考系默认average自 4Jul2026 引入dampingderivative/dem阻尼构造方式默认derivative自 4Jul2026 引入其中store/local的 attributes 可以是以下零个或多个id1,id2键中两个原子的 IDtime键断裂时的时间步x,y,z断键时两原子质心位置距离单位x/ref,y/ref,z/ref两原子初始质心位置距离单位。源码中的参数解析位于 bond_bpm.cpp 的 BondBPM::settings() 与 bond_bpm_rotational.cpp 的 settings()store/local、overlay/pair、break由基类处理smooth、normalize、frame、damping由子类处理其余参数则通过leftover_iarg传递给子类。典型用法示例bond_style bpm/rotational bond_coeff 1 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 # 显式指定参考系与阻尼方式 bond_style bpm/rotational frame particle damping derivative bond_coeff 1 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.02 0.002 0.002 # 记录断键事件并输出 bond_style bpm/rotational store/local myfix 1000 time id1 id2 dump 1 all local 1000 dump.broken f_myfix[1] f_myfix[2] f_myfix[3] dump_modify 1 write_header no三、力与力矩的力学模型bpm/rotational基于两原子相对初始参考状态的偏离计算力与力矩。参考状态在每次 run 的 setup 阶段由每个键首次计算时保存跨 run 命令保持并写入二进制重启文件见 restart因此重启系统不会重置键的参考状态。3.1 径向力法向基础法向力为线性胡克形式f_radial k_radial * (r - r0)其中k_radial为刚度r为当前两颗粒间距r0为初始间距。3.2 剪切力与扭矩切向力与切向剪切位移成正比刚度k_shear方向垂直于法向。该切向力同时诱导一个扭矩T_st 0.5 * r * F_s的构造可在 average_frame_forces() 中看到。弯曲扭矩与角弯曲位移成正比刚度k_bend。扭转扭矩与角扭转位移成正比刚度k_twist。剪切与角位移的具体计算方法取决于frame设置见第六节分别对应 Wang (2009)、Wang Mora (2009)、Alkuino et al. (2026) 的描述。3.3 断裂判据在足够应力下键会断裂。断裂判据为B max{ 0, f_r/f_r,c |f_s|/f_s,c |tau_t|/tau_t,c |tau_b|/tau_b,c }其中|f_s|是剪切力大小|tau_t|、|tau_b|分别是扭转与弯曲扭矩大小f_r,c、f_s,c、tau_t,c、tau_b,c是各力/力矩的临界极限。当B 1时键断裂做法是将键类型设为 0从而不再计算力与力矩。源码中compute()对breaking 1.0 break_flag的键调用process_broken()并将其从 bondlist 中剔除bond_bpm_rotational.cpp。注意断裂判据在frame average下使用未阻尼的力与力矩在frame particle下使用含阻尼的力与力矩以保持与此前版本的向后兼容。3.4 平滑因子在基础力/力矩幅度计算完成后可乘上一个额外因子w (1.0 - B^4)在键断裂过程中将力与力矩平滑插值到零。smooth关键字设为yes/no可开启/关闭。源码中平滑实现为smooth breaking^2; smooth 1.0 - smooth*smooth;即1 - B^4并作用在力与两个扭矩上bond_bpm_rotational.cpp。限制break no与smooth yes不能同时使用因为平滑机制本身依赖断裂判据 B。源码会直接报错must turn off smoothing with break no optionbond_bpm_rotational.cpp。3.5 阻尼力与力矩除弹性项外还会施加额外的阻尼力与力矩。径向阻尼力与两颗粒法向速度差成正比构造类似耗散粒子动力学DPDGroot Warren 1997F_D -gamma_radial * w * (r_hat · v)其中gamma_radial是阻尼强度r_hat是径向单位向量v是两颗粒速度差。其他模态的阻尼细节取决于damping设置见第五节。四、bond_coeff参数表12 个系数每个键类型必须通过 bond_coeff 命令或 read_data / read_restart 读入的 data / restart 文件定义以下 12 个系数顺序固定#参数量纲1k_radial力/距离2k_shear力/距离3k_twist力×距离/弧度4k_bend力×距离/弧度5f_radial,c力6f_shear,c力7tau_twist,c力×距离8tau_bend,c力×距离9gamma_radial力/速度10gamma_shear/slide力/速度11gamma_twist力×距离/速度12gamma_bend/roll力×距离/速度源码coeff()严格检查参数个数必须为 13类型号 12 个系数解析顺序与上表一一对应bond_bpm_rotational.cpp。关于normalize yes若开启径向与剪切力将除以r0此时k_radial、k_shear必须以力为单位给出不再是力/距离。关于第 10、12 个系数gamma_shear/slide与gamma_bend/roll其语义取决于damping构造——derivative阻尼使用剪切/弯曲角度变化率dem阻尼使用滑动/滚动速度差见第五节。五、两种阻尼构造derivative与dem5.1damping derivative默认在剪切、扭转、弯曲模态上分别施加与角度变化率成正比的附加力/力矩剪切gamma_shear * r * d(gamma)/dt扭转gamma_twist * d(psi)/dt弯曲gamma_bend * d(theta)/dt。源码中dgamma、dpsi、dtheta用当前步与上一步存储的角度bondstore[4..6]差除以dt得到角度差通过wrap_2pi()包络到[-pi, pi]bond_bpm_rotational.cpp。该构造由 Alkuino et al. (2026) 描述。使用该阻尼时键历史记录数为 7r0、r_hat三分量、gamma、theta、psi。5.2damping dem离散元风格对每个原子施加与相对滑动速度差成正比的力常数前因子gamma_slide见 Wang et al. 2015同时施加相应力矩两原子相对角速度的扭转与滚动分量也通过前因子gamma_twist与gamma_roll的力矩被阻尼。这些模态常见于离散元方法DEM与 pair granular 类似。实现位于dem_damping_forces()bond_bpm_rotational.cpp其中径向、切向滑动、滚动、扭转四个模态分别对应 Wang 2015 文中的式 (12)、(13)、(31)、(38)。使用该阻尼时键历史记录数为 4。兼容性提示LAMMPS 30Mar2026 之前版本的实现可通过设置frame particledamping dem、并交换第 3 与第 4 个阻尼系数gamma_twist与gamma_bend/roll恢复。六、参考系选择frame average与frame particleframe设置决定计算相对位移与旋转所用的参考系4Jul2026 引入particle使用其中一个颗粒的参考系判定依据是 LAMMPS 中的颗粒 ID 大小由 Wang 2009 与 Wang Mora 2009 描述。力的大小依赖颗粒 ID 的排序。average默认在两颗粒之间定义一个中央参考系由 Alkuino et al. 2026 描述。该选项意味着力不依赖颗粒 ID在细薄或高度扭曲的结构中更稳定例如examples/bpm/wires中的细线示例。源码层面average参考系使用四元数最短路径 SLERP 平均quat_average()构造中央参考系qcf再将径向/剪切力与弯曲/扭转扭矩在中央参考系中分别计算后旋回全局系bond_bpm_rotational.cpp、L269-L493particle参考系则按照 Wang/Mora 的 XYZ 旋转表示在颗粒 1 的局部系中计算particle_frame_forces()。注意两种参考系的断裂判据取值不同见 3.3 节注意项切换frame会同时改变断裂行为。七、断键事件输出store/local详解使用store/local关键字后一个内部 fix 会跟踪模拟中断裂的键。每当键断裂数据被处理并转交给标记为fix_ID的内部 fix供其他 LAMMPS 命令访问。数据在N 个时间步的区间内持续累积区间结束时所有已存数据被清空以腾出空间因此单条数据可存活 1 到 N 个时间步不等。访问方式通过fix_ID配合 dump local 命令输出。为保证全部数据被输出dump 频率应对应相同的 N 步区间dump 频率取 N 的整数倍则可以定期输出累积数据的样本。断键的原子 ID、断裂时间步、断键时与初始的质心位置分别由pack_id1/pack_id2/pack_time/pack_x/y/z/pack_x_ref/y_ref/z_ref打包bond_bpm.cpp。注意通过 dump local 输出未断裂键时类型为 0已断裂的键不会被包含。也可用 delete_bonds 查询断键状态或永久删除delete_bonds all stats delete_bonds all bond 0 remove输出断键时间与原子 ID 的典型组合配合dump_modify write_header no避免重复打印文件头bond_style bpm/rotational store/local brkbond 100 time id1 id2 dump 2 all local 100 brokenDump f_brkbond[1] f_brkbond[2] f_brkbond[3] dump_modify 2 header no八、重启与single()函数信息该键样式将每个键的参考状态写入二进制重启文件见 restart。加载重启文件可正确恢复键但参考状态不会写入 data 文件因此读取 data 文件不会恢复键其参考状态会被重新定义。store/local设置不会保存到重启文件需要重新定义。依据输入值的个数内部 fix 产生局部向量或局部数组单个输入 → 局部向量两个及以上输入 → 局部数组列数 输入数。长度/行数等于已记录的断键数。任何使用 compute 局部值的命令都可访问该向量或数组输出概览见 Howto_output。向量/数组为对应属性的浮点值。single()函数返回键能 0.0此类耗散势中能量不守恒并只返回键合力的法向分量。但它同时计算7 个额外的键量b1..b7可通过 compute bond/local 访问b1初始颗粒间距r0b2-b4初始单位向量从颗粒 J 指向颗粒 I的 x、y、z 分量b5-b7作用在颗粒 I 上的总力含法向与切向贡献的 x、y、z 分量。九、限制条件special_bonds、newton与原子样式包依赖该键样式属于 BPM 包仅当 LAMMPS 以该包构建时可用见 Build package。原子样式必须使用 atom_style bpm/sphere该样式要求颗粒存储半径、四元数与角速度。init_style()会检查quat_flag、radius_flag、omega_flag并要求 ghost 原子存储速度comm_modify vel yes同时会警告该样式不适合 2d 使用bond_bpm_rotational.cpp。special_bonds 约束涉及可断键时若键不会断裂break no可用任意 special bond 权重若键会断裂且叠加 pair 力overlay/pair yes所有权重必须为 1special_bonds lj/coul 1 1 1若键会断裂且禁用 pair 力overlay/pair no默认必须满足special_bonds lj 0 1 1 coul 1 1 1并且 newton 必须设为bond off。这些约束的意义BPM 键网络密集生成/更新 1-3 与 1-4 special bond 列表代价高lj 0 1 1关闭键合对之间的 pair 力而coul 1 1 1确保所有键合邻居仍被包含在邻居列表中防止两次邻居列表重建之间断键时遗漏。newton bond off保证所有拥有原子的处理器都能感知键断裂以便动态更新 1-2 special bond 列表。源码在 BondBPM::init_style() 中对这些约束逐一校验并报错。更多细节见 Howto_bpm 与 Howto_broken_bonds。十、完整示例冲击碎裂与细线拉伸10.1 冲击碎裂examples/bpm/impactexamples/bpm/impact/in.bpm.impact.rotational 演示了弹丸撞击板的碎裂过程包含store/local断键输出与多键类型units lj dimension 3 boundary f f f atom_style bpm/sphere special_bonds lj 0.0 1.0 1.0 coul 0.0 1.0 1.0 newton on off comm_modify vel yes cutoff 2.6 lattice fcc 1.0 region box block -25 15 -22 22 -22 22 create_box 1 box bond/types 2 extra/bond/per/atom 20 region disk cylinder x 0.0 0.0 20.0 -0.5 0.5 create_atoms 1 region disk group plate region disk region ball sphere 8.0 0.0 0.0 6.0 create_atoms 1 region ball group projectile region ball displace_atoms all random 0.1 0.1 0.1 134598738 neighbor 1.0 bin pair_style gran/hooke/history 1.0 NULL 0.5 NULL 0.1 1 pair_coeff 1 1 fix 1 all nve/bpm/sphere create_bonds many plate plate 1 0.0 1.5 create_bonds many projectile projectile 2 0.0 1.5 neighbor 0.3 bin special_bonds lj 0.0 1.0 1.0 coul 1.0 1.0 1.0 bond_style bpm/rotational store/local brkbond 100 time id1 id2 bond_coeff 1 1.0 0.2 0.02 0.02 0.05 0.01 0.01 0.01 0.1 0.2 0.002 0.002 bond_coeff 2 1.0 0.2 0.02 0.02 0.20 0.04 0.04 0.04 0.1 0.2 0.002 0.002 velocity projectile set -0.05 0.0 0.0 compute nbond all nbond/atom compute tbond all reduce sum c_nbond timestep 0.05 thermo_style custom step ke pe pxx pyy pzz c_tbond thermo 100 thermo_modify lost ignore lost/bond ignore run 2500要点解读newton on off牛顿键关闭以满足 BPM 断键要求comm_modify vel yesghost 原子携带速度供阻尼力计算键创建阶段使用special_bonds lj 0.0 1.0 1.0 coul 0.0 1.0 1.0建键完成后切换为coul 1.0 1.0 1.0create_bonds对 special_bonds 有要求见 Howto_bpm两种键类型分别对应板临界力较低Fcr0.05易碎与弹丸Fcr0.20较韧thermo_modify lost ignore lost/bond ignore用于容忍断键/丢失原子。10.2 细线拉伸examples/bpm/wiresexamples/bpm/wires/in.bpm.wires 展示了frame average在细线straight wire coiled wire上的稳定性优势同时是break no的用法示范units lj dimension 3 boundary m m m atom_style hybrid bpm/sphere dipole special_bonds lj 0.0 1.0 1.0 coul 0.0 1.0 1.0 newton on off comm_modify vel yes cutoff 2.6 region box block -10 60 -10 30 -10 10 create_box 1 box bond/types 1 extra/bond/per/atom 2 # Build a straight wire / coiled wire (随机撒点后 set 成线形) variable Na1 equal 200 variable Na2 equal 480 create_atoms 1 random $(v_Na1) 54435234 box group wire1 variable x1 atom id*0.25 set group wire1 x v_x1 y 0.0 z 0.0 ... pair_style granular pair_coeff 1 1 hooke 10.0 0.5 tangential linear_history 5.0 0.5 0.1 neighbor 0.3 bin create_bonds many wire1 wire1 1 0.0 0.3 create_bonds many wire2 wire2 1 0.0 0.9 special_bonds lj 0.0 0.0 0.0 coul 1.0 1.0 1.0 bond_style bpm/rotational smooth no break no bond_coeff 1 1.0 0.1 0.1 0.1 -1 -1 -1 -1 0.5 0.5 0.05 0.05 fix 1 all nve/bpm/sphere update dipole ... run 20000 unfix 4 unfix 5 unfix 6 unfix 7 run 30000要点解读bond_style bpm/rotational smooth no break no键不参与断裂此时 4 个临界系数第 5-8 个参数被忽略可填任意值示例用-1且不再需要overlay/pair约束可用任意 special_bonds 权重这里把 lj 1-2 权重设为 0 以从邻居列表中排除键合对见 Howto_bpmatom_style hybrid bpm/sphere dipole偶极子仅用于跟踪/可视化颗粒取向fix nve/bpm/sphere update dipole积分位置/角速度/四元数并同步更新偶极子方向见 fix_nve_bpm_sphereset group all quat 1 0 0 0显式初始化四元数。10.3 测试验证仓库 unittest/bpm/ 提供了 BPM 各键样式的单元与解析closed-form验证。其中 unittest/bpm/test_analytic_models.cpp 实现了bpm/spring、bpm/spring/plastic、bpm/peripmb/lps/eps、bpm/zero的解析参考解例如spring_force校验胡克力|f| k*|r - r0|测试用例位于 unittest/bpm/tests/由 YAML 驱动并与运行段run segments联动校验力、膨胀量、塑性乘子等量。这套解析校验框架同样可用于验证bpm/rotational的力/力矩构造。十一、常用相关命令速查系数设置bond_coeff12 个系数见第四节转动积分fix nve/bpm/sphere支持update dipole/update dipole/dlm/disc关键字DLM 为辛积分方案能量守恒更好且允许略大的时间步键状态管理delete_bonds、create_bonds注意其 special_bonds 要求颗粒接触 pairpair granular与 DEM 阻尼模态对应输出相关compute bond/local、compute nbond/atom、dump local、Howto_output更多背景Howto_bpm、Howto_broken_bonds。默认值速查关键字默认overlay/pairnosmoothyesnormalizenobreakyesframeaveragedampingderivative参考论文(Wang2) Wang, Acta Geotechnica, 4, p 117-127 (2009) ——frame particle的剪切/角位移计算基础。(Wang and Mora) Wang and Mora, Advances in Geocomputing, 119, p 183-228 (2009) —— 颗粒参考系下的旋转力/力矩表示。(Alkuino et al) Alkuino, Clemmer, Santangelo, and Zhang, arXiv:2603.27279 (2026) —— 中央参考系frame average与damping derivative的构造依据。(Groot) Groot and Warren, J Chem Phys, 107, 4423-35 (1997) —— 径向阻尼的 DPD 类比来源。(Wang et al, 2015) Wang, Alonso-Marroquin, Guo, Particuology, 23, 49-55 (2015) ——damping dem的滑动/滚动/扭转阻尼模态来源。以上引用条目均记录在 bond_bpm_rotational.rst 文末参考文献部分。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐LAMMPS bond_style bpm/spring 完全指南键合粒子模型的弹性键、断裂机制与破坏输出LAMMPS bond_style bpm/spring 完全指南键合粒子模型的弹性键、断裂机制与破坏输出 bond_style bpm/spring 是 L科研科学计算高性能计算LAMMPS BPM 粘接粒子模型Bonded Particle Model完全指南从键风格、断裂机制到示例实操LAMMPS BPM 粘接粒子模型Bonded Particle Model完全指南从键风格、断裂机制到示例实操 导读 本文围绕 LAMMPS 的 BPM科研科学计算高性能计算LAMMPS 弹性—塑性可断键模型bond_style bpm/spring/plastic 使用指南与源码解析LAMMPS 弹性—塑性可断键模型bond_style bpm/spring/plastic 使用指南与源码解析 bond_style bpm/spring/科研科学计算高性能计算上一篇md2pptx 使用指南一个 Markdown 文件一条命令生成 PPT下一篇douyin-downloader 实战手册零门槛批量下载创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。