pymatgen专题

pymatgen NMR屏蔽张量转换实操

读取水分子的真实CSA张量,转换主值和三种表示,区分G=0参照与skew符号。

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

下载EOS、介电光学与NMR实操包,在解压目录执行:

bash run.sh
ls analysis
ls figures

该包使用现有pymatgen 2026.9.24环境,单次1个CPU核心,直接读取已有的真实VASP输出,不启动新的VASP任务。分步执行也可以:

module load pymatgen/2026.9.24
python response.py
python plot.py

1. 先分清绝对屏蔽和化学位移#

本例是3原子水分子的真实VASP 6.6.1 NMR输出。先优化结构,再按LCHIMAG线性响应计算,流程见VASP NMR入门。附件保留本次完整输入:

INCAR:水NMR的完整原始输入
SYSTEM = water-nmr
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 = .FALSE.
LCHARG = .FALSE.
NELM = 150
ALGO = Normal
ISYM = 0
LCHIMAG = .TRUE.
LNMRSHIELD = .TRUE.
POSCAR:水NMR的完整原始输入
H  O 
 1.0000000000000000
    14.0000000000000000    0.0000000000000000    0.0000000000000000
     0.0000000000000000   15.5264780000000009    0.0000000000000000
     0.0000000000000000    0.0000000000000000   14.5963089999999998
 H   O  
   2   1
Direct
  0.5000000008650107  0.5494280959188510  0.4795763630523225
  0.5000000008711729  0.4505719043605292  0.4795763636714860
  0.4999999982638164  0.4999999997206199  0.5204205681413534
Cartesian
  0.0000000000000000  0.0000000000000000  0.0000000000000000
  0.0000000000000000  0.0000000000000000  0.0000000000000000
  0.0000000000000000  0.0000000000000000  0.0000000000000000
KPOINTS:水NMR的完整原始输入
Gamma mesh
0
Gamma
1 1 1
0 0 0

本页读取绝对化学屏蔽,并保留各向同性芯层贡献。与实验化学位移比较时,还需要选取并计算相同方法、相应核种的参照物;不能把参照屏蔽直接默认为0。

2. 读取两个G=0约定#

head analysis/water-NMR.csv
cat analysis/RESULTS.json
原子 不含G=0的绝对屏蔽 / ppm 含G=0的绝对屏蔽 / ppm
H1 30.6804 30.7335
H2 30.6804 30.7335
O3 318.7559 318.8090

孤立水分子的主要比较采用不含G=0的列;含G=0列作为宏观项约定的对照保留,静态晶体的读取口径另有对应选择。CSV有6行是因为3个原子各保留两种约定,不是6个原子。VASP官方NMR说明。

水结构、屏蔽主值与G=0差异

3. 从完整矩阵转换表示#

本例新版CSA块打印完整3×3矩阵和iso_shield、span、skew摘要。脚本先读取该完整矩阵,再用ChemicalShielding得到对称化张量主值、Mehring、Haeberlen和Maryland表示。

tensor = ChemicalShielding(matrix)
mehring = tensor.mehring_values
haeberlen = tensor.haeberlen_values
maryland = tensor.maryland_values

原始BDIR行方向、主值和各表示都保存在RESULTS.json中。图上的主值属于对称化张量;本例没有进一步分析主轴方向或模拟完整NMR谱线。

4. 不要直接照搬skew三元组#

这份VASP输出与当前pymatgen安装版使用相反的符号:

VASP skew = 3*(sigma_iso - sigma22)/span
pymatgen Maryland kappa = 3*(sigma22 - sigma_iso)/span

因此H原子的VASP skew约+0.7697,而本例pymatgen Maryland κ约−0.7697;O约为+0.3913和−0.3913。直接把VASP的三元组不加转换地传给from_maryland_notation,会得到不匹配的主值。优先从原始完整矩阵转换,并保留自己采用的定义。pymatgen ChemicalShielding接口。

5. 版本与输入格式#

附件读取程序匹配本例VASP 6.6.1的新版CSA格式;当前pymatgen通用Outcar构造器的旧标题匹配不能直接读入这份NMR输出,所以这里使用附件脚本读取,再调用张量转换接口。无需修改集群安装环境,也不需要为此重算数据。

换自己的输出时,先确认CSA标题、芯层、G=0及屏蔽/位移符号。不要仅为适配读取程序随意切换LNMRLEG;旧格式还有相应符号约定需要核对。输入文件和单位明确后再做不同结构或实验参照之间的比较。

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

查看配图

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

100%查看原图 ↗