ATOMKIT:复制薄层并调节界面间距
构建共格C/BN双层,实测复制后的间距,通过原生移动和居中菜单设置3.3 Å层间距。
阅读本篇目录
用一个4原子的简单双层演示“准备两层→复制→读回测量→调节间距→居中”的流程。使用ATOMKIT 0.9.0,ASE 3.29.0辅助读取。C与BN都使用a=2.46 Å共格演示晶格,不是优化后的hBN晶格,也没有计算界面稳定性。
1. 生成两份独立薄层#
module load atomkit/0.9.0
mkdir bilayer
cd bilayer
export atomkit_python=/public/toolkit/miniconda3/envs/ase-3.29.0/bin/python
"$atomkit_python" - <<'PY'
from ase import Atoms
from ase.io import write
from math import sqrt
a=2.46
cell=[[a,0,0],[-a/2,sqrt(3)*a/2,0],[0,0,20]]
frac=[[0,0,.5],[2/3,1/3,.5]]
for name,symbols in [('C2','C2'),('BN2','BN')]:
write(name+'.vasp',Atoms(symbols,cell=cell,scaled_positions=frac,pbc=True),format='vasp',direct=True,vasp5=True)
PY
cp C2.vasp POSCAR
2. 复制BN薄层#
atomkit <<'EOF'
411
175 POSCAR
175 BN2.vasp
1
all
175
EOF
cp POSCAR_REV.vasp COPIED.vasp
411把所选BN原子复制进C层晶胞。本版会自动调整放置位置和面内对齐;本例复制后实际层间距约 2.850000 Å。不要假定复制后两层必然在同一高度,也不要直接再移动3.3 Å。
3. 测量当前间距,生成移动输入#
"$atomkit_python" - <<'PY'
from ase.io import read
import numpy as np
a=read('COPIED.vasp');symbols=np.array(a.get_chemical_symbols())
gap=a.positions[symbols!='C',2].mean()-a.positions[symbols=='C',2].mean()
delta=3.3-gap
print('当前间距:',gap,'需要移动:',delta)
open('move.in','w').write('403\n175 COPIED.vasp\n1\nB N\n2\n0 0 '+format(delta,'.16g')+'\n175\n')
PY
atomkit < move.in
cp POSCAR_REV.vasp GAP33.vasp
403中B N只选BN层,2选择笛卡尔坐标,移动单位为Å。本例应上移约0.450000 Å,C层不动,最终间距为3.3 Å;相对面内堆垛保留为411生成的方式。多个相同元素层不能仅靠元素符号选层,应改为核对后的编号或层选择。
4. 在晶胞中居中并检查#
atomkit <<'EOF'
602
175 GAP33.vasp
175
EOF
cp POSCAR_REV.vasp FINAL.vasp
"$atomkit_python" - <<'PY'
from ase.io import read
import numpy as np
a=read('FINAL.vasp')
print('组成:',a.get_chemical_formula())
print('各原子z:',a.positions[:,2])
print('真空间隙:',a.cell[2,2]-np.ptp(a.positions[:,2]))
PY
实际最终为C2BN,C/BN两层高度分别约8.35/11.65 Å,层间距3.3 Å,晶胞c=20 Å、周期真空间隙16.7 Å。602可能把面内坐标折回晶胞,这不意味着原子发生了额外物理位移;按周期坐标比较。

真实异质界面还需决定晶格匹配、应变分配、旋转与堆垛,之后扫描距离并优化。这里采用已共格输入和直接复制路线,不等同于自动枚举所有共格界面,也不预设3.3 Å就是体系平衡间距。
下载可复跑资料包。在新的个人工作目录解压,短结构处理可直接运行 bash run.sh。每个菜单的逐行输入在 cases/*/commands.txt,模型在同目录,数据和图片在 analysis/、figures/。本包只含本站脚本和自建结构,不包含 ATOMKIT 程序或上游晶体库;软件许可以 $ATOMKIT_ROOT/license 为准。
需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。