Packmol密度设定与周期边界实操
两个真实水和混合溶剂装箱例,明确密度、最短距离与力场拓扑的区别。
阅读本篇目录
下载本篇输入、完整脚本、数据与高清图。解压后在新目录运行,reference保存鸢算科技实际运行的参考结果。
1 先决定分子数和目标密度#
本例使用Packmol 21.2.3(GFortran 13.3串行构建),结合ASE 3.29.0生成分子和检查坐标。初始盒边长按总质量与目标密度计算:
L³ = Σ(Nᵢ Mᵢ) × 1.66053906660 / ρ
其中M以原子质量单位u计,ρ以g/cm³计,L以Å计。目标密度是用户给定的初始建模条件,不是Packmol预测的平衡密度。
2 一次运行两个小例子#
module purge
module load pymatgen/2026.9.24 packmol/21.2.3
mkdir work
cp packmol_density.py work/
cd work
python packmol_density.py
得到纯水60分子、180原子的water-density,以及40水加20甲醇、240原子的mixture-density。脚本先写单分子XYZ及Packmol输入,再执行装箱,最后检查周期边界最短距离、分子数量和分子内部几何。
3 看完整Packmol输入#
纯水输入为:
tolerance 2.0
filetype xyz
output packed.xyz
seed 27128
nloop 500
precision 0.000001
pbc 0. 0. 0. 12.1528518815 12.1528518815 12.1528518815
structure H2O.xyz
number 60
inside box 0. 0. 0. 12.1528518815 12.1528518815 12.1528518815
end structure
已有分子文件时,也可以直接执行:
cd water-density
packmol < packmol.inp > packmol.log
tail packmol.log
pbc后的前3个数为盒下界,后3个为上界,启用正交周期盒中的跨边界距离约束。只写inside box限制坐标区域,并不自动检查盒子对边的分子距离。tolerance 2.0主要限制不同分子原子之间的间距,不是分子键长。
4 查看本次结果#
| 体系 | 原子数 | 盒边长/Å | 初始密度/g·cm⁻³ | 周期分子间最短距离/Å |
|---|---|---|---|---|
| 60水 | 180 | 12.152852 | 1.00 | 2.195860 |
| 40水+20甲醇 | 240 | 13.855097 | 0.85 | 2.191235 |


最短距离使用ASE的最小镜像距离计算,并排除同一分子内部原子对;两个结果均满足2 Å下限。分子内部几何也与原始刚性分子一致。脚本以输入质量重新计算密度,并写入RESULT.json。
cat RESULT.json
head packed.xyz
head packed.extxyz
5 后续进入分子动力学#
packed.xyz不包含晶胞信息,packed.extxyz包含晶胞与周期标志;packed.gro可用于GROMACS坐标导入,但坐标文件不是可运行的力场拓扑。尤其甲醇,需要与所选力场一致的原子类型、电荷、键角及分子排序。
继续操作的顺序是:配套拓扑与坐标 → 最小化 → 温度/压力平衡 → 正式采样。ASE默认水几何也不自动等于你选用的刚性水模型;正式建模应先使用相应力场的分子几何。不要把初始密度等同于NPT后密度,也不要仅凭装箱成功跳过能量与压力检查。
参考:Packmol周期边界与输入说明。