py4vasp Berry极化与位移响应
对NaCl中Na位移±0.02Å,读取真实有符号偶极并与DFPT Born有效电荷比较。
阅读本篇目录
对NaCl中Na位移±0.02Å,读取真实有符号偶极并与DFPT Born有效电荷比较。下面按准备、读取、核对与画图的顺序操作。
1. 下载数据,先提取再画图#
下载响应与激子终端实操包,解压后先看现成数据:
unzip py4vasp-response-practical-wave290-*.zip
cd py4vasp-response-practical-wave290
bash preview.sh
再完整运行读取、原生工具与绘图:
bash run.sh
ls results/data
ls plots/figures
run.sh依次执行prepare.sh、extract.sh、tools.sh、plot.sh。结果写入results/data/,原生数据报告和视图矢量在tools-output/,七张PNG在plots/figures/;输出目录受保护,重复运行请换一个新解压目录。随包的figures/可直接查看。
后处理用py4vasp/0.11.3的Python3.11环境,静态图用pymatgen/2026.9.24环境的NumPy2.3.5、Matplotlib3.11.2,只需已分配资源内1个CPU,不重新运行VASP。carriers/保存实际计算导出的自有数值与字段配方;运行时在work/重建最小HDF读取载体,不是原始完整VASP输出。这里全部选定数组保留完整分辨率,无插值、无抽样,不包含PAW、波函数或程序。
inputs/保留本例完整INCAR、POSCAR、KPOINTS。真实GPU计算使用VASP6.6.1/HDF5、NVHPC25.3、CUDA12.8、P100或V10016G;BSE使用VASP6.6.1 CPU/HDF5、Intel oneAPI2024.2、MPI、HDF51.14.6。提取工具不替代VASP求解。
2. 做一对小位移计算#
两原子NaCl原胞中,Na沿笛卡尔x分别移动−0.02、+0.02 Å,其余原子与晶胞不动。两次均用同一PAW、550 eV、Gamma4³、EDIFF=1E−6,关键参数:
LCALCPOL = .TRUE.
ISYM = 0
IBRION = -1
NSW = 0
无需再手工修改本包的两份POSCAR,位移已经写入:
mkdir NaCl-minus NaCl-plus
cp inputs/NaCl-polarization-minus/{INCAR,POSCAR,KPOINTS} NaCl-minus/
cp inputs/NaCl-polarization-plus/{INCAR,POSCAR,KPOINTS} NaCl-plus/
# 为两个目录提供相同POTCAR,分别通过Slurm提交
原胞的晶格a、b、c是斜坐标,沿笛卡尔x移动0.02Å,不等于分数坐标第一项加0.02。自己建位移时先转到笛卡尔坐标,再周期回包;两次保持原子顺序。
3. 电子和离子偶极直接相加#
module load py4vasp/0.11.3
python - <<'PYCODE'
import numpy as np
import py4vasp
out = []
for side in ['minus', 'plus']:
c = py4vasp.Calculation.from_path('work/NaCl-polarization-'+side)
d = c.polarization.read()
print(side, d)
out.append(d['electron_dipole'] + d['ion_dipole'])
cell = c.structure.read()['lattice_vectors']
delta = out[1]-out[0]
branch = np.rint(delta @ np.linalg.inv(cell))
delta -= branch @ cell
print('去除晶格量子:', branch)
print('偶极差/eÅ:', delta)
print('d偶极/dNa-x:', delta / 0.04)
PYCODE
接口名为polarization,但这两个数组的单位是**|e|Å偶极**,不是直接的C/m²。电子偶极已经含电子电荷符号,不要再人为乘负号。离子偶极可能因周期分支出现较大的常数,本例两个x值约−19.97、−19.93 eÅ;有意义的是同一分支的变化。
简单小位移的分支处理可以把偶极差转换到晶格基底,减去最近整数晶格量子。本例三个整数均为0。大位移、铁电翻转或多分支路径需要沿连续路径跟踪,不能只比较两个端点后机械取最近值。
4. 与Born有效电荷对照#
本例总偶极差x为 0.04378717944 eÅ,中央差分得∂px/∂uNa,x=1.09467949 e。相同结构与参数先前真实DFPT的Born有效电荷对应列为(1.10453402,0,0),两者相对差约 0.892%。这是有限位移响应的一次实用交叉检查,不是非线性极化或位移收敛研究。

图左为了看清小变化减去两个端点的平均常数,原始有符号数据完整保留在CSV;图右比较的都是同一个Na、同一笛卡尔位移方向。
head -3 results/data/NaCl-dipole-components.csv
cat results/data/SUMMARY.json
转极化变化时使用ΔP=Δp/V,体积46.29825 ų,e/Ų转C/m²再乘16.02176634。本例x方向约0.015153 C/m²;不要把DFPT Born张量当成绝对极化。
将自己的输入提交到Slurm#
前文解压重画不需要提交VASP。若要新计算,在自己的计算目录提供匹配PAW,将下面内容保存为submit.sh:
#!/bin/bash
#SBATCH --partition=gpu-8p100-hs
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --gres=gpu:p100-16g:1
#SBATCH --time=00:30:00
set -eo pipefail
source /etc/profile
module purge
module load vasp/6.6.1-p100-hdf5
ulimit -s unlimited
export OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1
mpirun --bind-to none -np 1 vasp_std > vasp.log
sbatch submit.sh
squeue -u "$USER"
完成后先确认OUTCAR有正常结束信息、电子步满足EDIFF,再从自己的目录调用本篇接口。两个位移目录需分别提交;输出的vaspout.h5保存对应本例真实数组后才可读取。
完整计算输入#
PAW和前置文件按正文自行提供;下列输入也在下载包中,不会由后处理脚本自动提交。
NaCl-polarization-minus#
INCAR(完整)
SYSTEM=NaCl-polarization-minus
ENCUT=550
PREC=Accurate
EDIFF=1E-6
EDIFFG=-0.02
IBRION=-1
NSW=0
ISIF=2
ISMEAR=0
SIGMA=0.05
LREAL=.FALSE.
LASPH=.TRUE.
LWAVE=.TRUE.
LCHARG=.TRUE.
NELM=160
ALGO=Normal
ISYM=0
LORBIT=11
NBANDS=24
LH5=.TRUE.
NPAR=1
LCALCPOL=.TRUE.
POSCAR(完整)
Cl Na
1.0000000000000000
0.0000000000000000 2.8500000000000001 2.8500000000000001
2.8500000000000001 0.0000000000000000 2.8500000000000001
2.8500000000000001 2.8500000000000001 0.0000000000000000
Cl Na
1 1
Direct
0.5000000000000001 0.5000000000000000 0.4999999999999998
0.0035087719298246 0.9964912280701755 0.9964912280701755
KPOINTS(完整)
Small response tutorial mesh; not a convergence study
0
Gamma
4 4 4
0 0 0
NaCl-polarization-plus#
INCAR(完整)
SYSTEM=NaCl-polarization-plus
ENCUT=550
PREC=Accurate
EDIFF=1E-6
EDIFFG=-0.02
IBRION=-1
NSW=0
ISIF=2
ISMEAR=0
SIGMA=0.05
LREAL=.FALSE.
LASPH=.TRUE.
LWAVE=.TRUE.
LCHARG=.TRUE.
NELM=160
ALGO=Normal
ISYM=0
LORBIT=11
NBANDS=24
LH5=.TRUE.
NPAR=1
LCALCPOL=.TRUE.
POSCAR(完整)
Cl Na
1.0000000000000000
0.0000000000000000 2.8500000000000001 2.8500000000000001
2.8500000000000001 0.0000000000000000 2.8500000000000001
2.8500000000000001 2.8500000000000001 0.0000000000000000
Cl Na
1 1
Direct
0.5000000000000001 0.5000000000000000 0.4999999999999998
0.9964912280701753 0.0035087719298246 0.0035087719298246
KPOINTS(完整)
Small response tutorial mesh; not a convergence study
0
Gamma
4 4 4
0 0 0