GPUMDkit专题

GPUMDkit局域位移与极化实操

BaTiO3真实结构、邻居表、Born电荷、八面体偏角与空间矢量图。

更新于 2026-10-28约 6 分钟阅读按任务与环境选择适用配置
阅读本篇目录

本篇把BaTiO₃结构依次变成邻居表 → 局域位移 → 八面体偏角 → 近似局域极化 → 空间矢量图。输入来自鸢算科技VASP实际计算,Born电荷由同一参考结构的DFPT获得。9帧文件是静态软模路径,不能据此计算有限温度涨落或介电常数。

下载输入、结果与绘图脚本。解压后在附件根目录操作;不需要安装额外依赖:集群gpumdkit/1.5.8已配套ferrodispcalc0.1.0。

1. 准备工作目录和结构#

module load gpumdkit/1.5.8
gpumdkit.sh -doctor
python new-case.py ferro
cd work/ferro
head -2 model.xyz

model.xyz为3×3×3复制的135原子参考结构;movie.xyz含9帧,每帧27个Ti中心。原始5原子晶胞如下,晶格常数4.02Å,顺序Ba、Ti、O:

BaTiO3 cubic reference
1.0
4.02 0 0
0 4.02 0
0 0 4.02
Ba Ti O
1 1 3
Direct
0.0 0.0 0.0
0.5 0.5 0.5
0.5 0.5 0.0
0.5 0.0 0.5
0.0 0.5 0.5

这条路径按软模方向共同移动原子,u=0.06Å是路径振幅,不是单独将Ti平移0.06Å。其Ti相对氧笼中心的实际位移为0.07566059Å。各原子精确坐标见附件polar-path/frame-0至frame-8的POSCAR。

BaTiO3实际TiO6局部结构与9帧局域位移

2. 建立两份邻居表#

gpumdkit.sh -calc nlist -i model.xyz -c 2.7 -n 6 -C Ti -E O
gpumdkit.sh -calc nlist -i model.xyz -c 3.7 -n 8 -C Ti -E Ba
head -3 nl-Ti-O.dat
head -3 nl-Ti-Ba.dat

-C指定中心Ti,-E指定邻居元素,-c为Å单位搜索半径,-n为每个中心的邻居数。本例第一份27行×7列,第二份27行×9列;首列为Ti编号,其余是邻居编号,编号从1开始。

这组半径只用于本例。自己的结构应检查每个Ti确实连接6个O和8个Ba;不能用加大半径强凑配位数。后续所有帧必须保持相同原子顺序,重排原子后应重建邻居表。

3. 提取位移和八面体偏角#

gpumdkit.sh -calc disp -i movie.xyz -n nl-Ti-O.dat -o displacements.dat
gpumdkit.sh -calc oct-tilt -i movie.xyz -n nl-Ti-O.dat -o tilt.dat
head -3 displacements.dat
head -3 tilt.dat

位移输出单位Å,每行x、y、z三个分量。243行按“9帧×每帧27个Ti”排列。它表示Ti坐标减去六个O的周期最小镜像平均坐标,不能直接当极化。

这条软模路径只发生极性位移,O–O轴不倾斜,因此tilt.dat为0°。该工具输出O–O轴相对于笛卡尔轴的无符号夹角,不等同于带正负号的Glazer转角或Euler角。作为几何对照,绕z整体转10°的刚性八面体得到(10,10,0)°,而非(0,0,10)°。跨周期边界的原子按最小镜像处理。

4. Born电荷从哪里来#

本次使用VASP6.6.1普通CPU构建与oneAPI2024.2,在5原子参考晶胞执行DFPT。附件born-dfpt保留输入和OUTCAR。主要INCAR如下:

ENCUT = 550
PREC = Accurate
EDIFF = 1E-6
EDIFFG = -0.02
IBRION = 8
NSW = 1
ISIF = 3
ISMEAR = 0
SIGMA = 0.05
LREAL = .FALSE.
LASPH = .TRUE.
NELM = 150
ALGO = Normal
ISYM = 2
LCALCEPS = .FALSE.
LEPSILON = .TRUE.
LWAVE = .FALSE.
LCHARG = .FALSE.
Gamma mesh
0
Gamma
7 7 7
0 0 0

这里IBRION=8是响应计算,不是结构优化;EDIFFG不是本次停止准则。自己的体系先完成结构优化,再进行响应计算。使用个人有授权的POTCAR;程序不会由几何文件自动生成Born电荷。

查看实际张量块:

cd ../../born-dfpt
sed -n '/BORN EFFECTIVE CHARGES/,+24p' OUTCAR
cd ../work/ferro

本例Ba对角元2.73777,Ti对角元7.52747;沿Ti–O键的O对角元−5.98674,垂直方向−2.13925。pol-abo3当前每元素只接收一个标量,因此本例用O张量迹的平均−3.421746666666667,并满足Ba+Ti+3O=0。标量平均丢失O电荷的方向差异;形式价态Ba²⁺、Ti⁴⁺、O²⁻不能替代这些动态有效电荷。

5. 算近似局域极化并作对照#

gpumdkit.sh -calc pol-abo3 -i movie.xyz \
  --nl-ba nl-Ti-Ba.dat --nl-bo nl-Ti-O.dat \
  --bec Ba=2.73777 Ti=7.52747 O=-3.421746666666667 \
  -o polarization.dat
head -3 polarization.dat

每行x、y、z,单位C/m²;每个Ti局域单元分配1个Ti、八个Ba各1/8、六个O各1/2。本例各单元等价,以下列出z方向平均值:

路径振幅u/Å Ti相对O位移/Å 标量Born近似Pz/C·m⁻² 完整张量线性ΔPz Berry相ΔPz
-0.24 -0.302642 -0.665374 -0.748471 -0.606844
-0.18 -0.226982 -0.499031 -0.561353 -0.480886
-0.12 -0.151321 -0.332687 -0.374235 -0.340711
-0.06 -0.075661 -0.166344 -0.187118 -0.180261
+0.00 0.000000 0.000000 0.000000 0.000000
+0.06 0.075661 0.166344 0.187118 0.180261
+0.12 0.151321 0.332687 0.374235 0.340716
+0.18 0.226982 0.499031 0.561353 0.480896
+0.24 0.302642 0.665374 0.748471 0.606851

标量Born、完整张量线性响应与实际Berry相极化的对比

所有结果以中间非极性参考帧为零。完整张量线性估计采用ΔPα=e/Ω Σκβ Z*καβ Δuκβ;附件polar_compare.py可从OUTCAR和各POSCAR重算。Berry结果来自这些静态结构的实际VASP计算,并沿连续路径处理极化分支。振幅增大时,参考构型的线性Born响应与非线性Berry结果逐渐偏离;不能挑选其中更接近预期的一列作为“正确极化”。研究畴结构、非等价氧或大畸变时,应保留完整张量并核对参考态与分支。

6. 输出空间矢量图#

gpumdkit.sh -get_frame movie.xyz 8
gpumdkit.sh -plt plane-grid -i frame_8.xyz -d displacements.dat \
  -e Ti -g 3 3 3 -f 7 \
  --select-xy 0 --select-xz 0 --select-yz 0 -o plot
ls plot

先用从1计数的get_frame提取第8帧,再用从0计数的-f 7选同一帧位移(本例u=+0.18Å)。当前绘图脚本的-f只选择位移数据,直接传多帧结构会默认读取末帧;显式提取单帧可避免坐标与位移错配。选择该帧和各方向第0层,输出XY_0.png、XZ_0.png、YZ_0.png。这是一组沿z的位移,所以XY平面内箭头接近零,XZ/YZ更直观。-g必须匹配Ti网格;任意无序结构不能强行设成3×3×3。

回到附件根目录,重绘本篇两幅比较图及离子电导图:

cd ../..
python plot_results.py

进一步阅读:GPUMDkit极性分析入口、ferrodispcalc上游。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗