LAMMPS薄层静电与slab修正
在x/y周期、z非周期的中性双电荷层上实际比较Ewald、PPPM和slab 3/4/auto。
阅读本篇目录
薄层体系常在x/y周期、z方向留出空间。使用长程静电时,需要把边界与相应的slab处理一起设置。本篇固定一个带z向偶极的中性双电荷层,实际比较Ewald与PPPM、扩展因子3/4及自动选择。
下载12组长程静电完整输入、原始能量与力、CSV及绘图工具,解压进入run.sh目录。
1 提交并读取结果#
sbatch submit.slurm
模板为核时P100分区1GPU1CPU,顺序完成12个固定结构单点;使用P100构建中的CPU执行路径,没有GPU后缀,不作GPU性能结论。LAMMPS30Sep2026、GNU C++13.3.0/C++17、Open MPI5.0.10、双精度MKL FFT;分析ASE3.29.0。
套餐用户用yskit生成所属分区脚本,在分配资源中执行bash run.sh;不要在登录节点模拟。inputs为新输入,reference为本文实算输出,work为新结果,已有work请重新解压。脚本完成后自动提取和画图。
2 模型与完整输入#
8×8×20Å盒中放置4个+1e与4个−1e电荷,两层分别位于z=8Å和10Å;整个盒电中性。boundary p p f表示x/y周期、z非周期;本例只做固定结构单点,不移动原子。
units real
atom_style charge
atom_modify map array
boundary p p f
region box block 0 8 0 8 0 20 units box
create_box 2 box
mass 1 23.0
mass 2 35.45
create_atoms 1 single 1 1 8 units box
create_atoms 2 single 3 3 10 units box
create_atoms 1 single 1 5 8 units box
create_atoms 2 single 3 7 10 units box
create_atoms 1 single 5 1 8 units box
create_atoms 2 single 7 3 10 units box
create_atoms 1 single 5 5 8 units box
create_atoms 2 single 7 7 10 units box
set type 1 charge 1.0
set type 2 charge -1.0
pair_style coul/long 3.8
pair_coeff * *
pair_modify table 0
kspace_style pppm 1e-8
kspace_modify slab 3.0
neighbor 0.3 bin
thermo_style custom step atoms pe ecoul elong press
thermo_modify norm no format float %.16g
run 0
write_data structure.data
write_dump all custom atoms.dump id type q x y z fx fy fz modify sort id format float %.16g
kspace_modify slab 3.0将长程算法内部使用的扩展体积按相应因子处理,并应用slab修正。它不是把实际原子坐标或数据文件中的盒长直接乘3,也不替代后续动力学中的边界约束。
对这类设置,不要只把三维周期输入的z改为f后继续照算;核对所选kspace方法是否支持相应边界、slab方案和体系净电荷条件。slab与wire、nozforce用途不同,不能互相当作同一种边界修正。
3 四个实际条件#
| 目录 | 长程方法 | slab设置 |
|---|---|---|
| slab-ewald3 | Ewald 1E-8 | 3.0,数值参照 |
| slab-pppm3 | PPPM 1E-8 | 3.0 |
| slab-pppm4 | PPPM 1E-8 | 4.0 |
| slab-pppmauto | PPPM 1E-8 | auto,由当前算法选择 |
其他设置和坐标一致。auto示例在本次30Sep2026构建中实际运行,读原生日志查看本次选择值:
grep -E 'auto slab|grid =|estimated relative force accuracy' work/cases/slab-pppmauto/log.lammps
grep -A 1 'Step.*Atoms.*PotEng' work/cases/slab-ewald3/log.lammps
grep -A 1 'Step.*Atoms.*PotEng' work/cases/slab-pppm3/log.lammps
本次auto实际扩展因子约2.1726970,内部扩展z约43.453940Å。它由当前几何和精度选择,不是给所有体系固定套用的常数。
| 目录 | 整盒能量/kcal·mol⁻¹ | 相对Ewald能量差/kcal·mol⁻¹ | 力分量RMS差/kcal·mol⁻¹·Å⁻¹ |
|---|---|---|---|
| slab-ewald3 | -205.820563875 | 0.000E+00 | 0.000E+00 |
| slab-pppm3 | -205.820419322 | 1.446E-04 | 8.480E-07 |
| slab-pppm4 | -205.820264204 | 2.997E-04 | 7.216E-07 |
| slab-pppmauto | -205.820532649 | 3.123E-05 | 3.770E-07 |

本例三个PPPM条件的力RMS差均小于1E-5 kcal/mol/Å;能量差并不随扩展因子从3到4而单调降低。accuracy针对力的误差估计,能量、网格和扩展距离要按实际目标一起检查,不能把某个因子较大直接等同于结果更准确。

4 用于自己的表面或界面模型#
先检查总电荷、真空或非周期方向、原子与边界的距离,再选择相容的pair/kspace方法和slab设置;检查实际网格、原生精度估计、能量与逐原子力。若做动力学,还要根据物理模型设置边界或壁面,防止粒子离开允许区域。
压力输出依赖所用盒体积与边界定义,本例不把薄层三维压力直接解释为平衡液体压力。这里没有可极化电极、恒电势算法、溶剂采样或自由能,只说明中性固定点电荷层的静电边界操作。
提取与重画#
module load ase/3.29.0
python analyze.py work
python plot_results.py work
python check_results.py work
cat work/analysis/kspace-comparison.csv
ls work/figures
CSV列出方法、目标容差、显式修正、整盒总能、相对同几何Ewald参照的能量差、全部3N个笛卡尔力分量的RMS差、原生估计精度及总力残余。查看本文参考数据时将work改为reference。
完整参数与限制见kspace_modify slab。周期精度与MSM设置见长程静电与精度选择。