【Lammps】从零构建二维Ar原子体系:核心建模命令详解与脚本拆解
1. 二维Ar原子体系建模基础刚接触Lammps时我经常被各种建模命令搞得晕头转向。直到用二维Ar原子体系练手后才发现建模原来可以这么直观。二维模拟不仅计算量小还能清晰观察原子运动轨迹特别适合新手入门。下面我就用最直白的语言带你一步步搭建这个微观沙盘。units lj这个命令决定了我们的游戏规则。就像玩积木前要约定好用厘米还是英寸lj单位制下所有参数都变成无纲量。比如Ar原子的质量默认为1距离单位σ3.4Å能量单位ε0.0104eV。这种简化让计算更快也避免了单位换算的麻烦。dimension 2就像给模拟世界降维——从立体空间压成一张纸。这里有个坑要注意虽然说是二维z轴方向还是要给个微小厚度比如-0.1到0.1不然Lammps会报错。我当初就卡在这后来发现就像给纸张一个厚度虽然理论上无限薄但程序需要这个维度存在。boundary p p p设置了三个方向的边界条件。p代表周期性边界想象把模拟盒子无限复制成瓷砖图案原子从右边出去会从左边回来。这种设定特别适合模拟宏观体系中的局部现象我常用它来研究液体表面行为。2. 原子排布的艺术2.1 晶格设计与区域划分lattice hex 1.0就像选择原子排列的模板。这里用六方密堆积(hex)1.0表示晶格常数。实际建模时我更喜欢先用lattice none清空模板再自定义排列方式。比如模拟石墨烯时就需要精确控制碳原子间距。创建空间区域就像在纸上画框region mybox block 0 20 0 10 -0.1 0.1 region subbox block 0 10 0 10 -0.1 0.1 units lattice第一个区域mybox是20×10的矩形第二个subbox是其左半部分。注意units lattice表示尺寸以晶格常数为单位去掉则用绝对长度。有次我忘了加units结果区域大小差了几十倍原子全挤在角落。2.2 原子的诞生与安置create_box 1 mybox在mybox区域创建能容纳1种原子的模拟盒子。这个数字要匹配后续的原子类型数如果设小了会导致原子无处安放。填充原子有多种姿势create_atoms 1 box # 整个盒子按晶格填充 create_atoms 1 region subbox # 仅在subbox区域填充 create_atoms 1 single 5 5 0 # 在(5,5,0)放单个原子 create_atoms 1 random 30 12345 subbox # 随机撒30个原子我最常用的是region方式配合多个region可以构建复杂图案。比如先创建圆形region再用它生成纳米颗粒。3. 让原子动起来3.1 质量与初速度设置mass 1 1.0给类型1原子设置质量为1.0。在lj单位制下Ar原子质量通常设为1。如果改用real单位制就要填实际质量39.948。给原子注入活力的秘诀是velocity all create 2.5 87287这行代码让所有原子获得总动能对应温度2.5的随机速度。最后的87287是随机种子不同种子会产生不同初始状态。我习惯用手机尾号当种子这样容易复现结果。3.2 相互作用势能设置pair_style lj/cut 2.5选择Lennard-Jones势函数截断半径2.5σ。这个距离之外原子互不理睬。对于Ar气体2.5σ≈8.5Å已经足够。pair_coeff 1 1 1.0 1.0 2.5设置类型1原子间的相互作用参数。前两个1.0对应ε和σ最后的2.5可以覆盖全局截断半径。曾经我把2.5写成25结果原子全部相敬如宾不动弹排查半天才发现问题。邻居列表是计算效率的关键neighbor 0.3 bin neigh_modify every 20 delay 0 check no第一行设置skin距离为0.3σ建议取截断半径的10%-20%。第二行控制列表更新频率every 20表示每20步更新一次。对于平衡态模拟可以适当增大这个值提速。4. 模拟运行与观测4.1 系综选择与约束让系统按我们设定的规则演化fix 1 all nvt temp 0.5 0.5 0.01 fix 2 all enforce2d第一个fix使用NVT系综恒粒子数、体积、温度将系统温度维持在0.5。最后的0.01是温度阻尼系数相当于 thermostat的灵敏度。第二个fix强制所有原子严格在二维平面运动防止数值误差导致z方向漂移。4.2 结果记录与输出dump命令是我们的摄像机dump 1 all custom 100 traj.xyz id type x y z vx vy vz每100步记录一次所有原子的位置和速度保存为xyz格式。这种格式可以用VMD等软件直接可视化。我常用Ovito做实时渲染看着原子从无序逐渐形成规则图案特别解压。监控模拟状态的仪表盘thermo 500 thermo_style custom step temp pe ke etotal每500步输出一次温度、势能、动能等信息。有次我发现能量突然飙升检查发现是初始速度设置过大导致原子撞飞。最后用run 10000让模拟跑10000步。刚开始建议先跑1000步看趋势没问题再延长。记得用write_restart保存中间状态避免崩溃重头再来。