pymatgen介电光学数据实操
从真实Si介电响应导出折射率、反射率、吸收系数与能量损失函数,明确单位和接口边界。
阅读本篇目录
下载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. 保留完整介电数据,先确认响应类型#
本例读取calculations/si-optics/vasprun.xml中的density-density响应,共2001个能量点。完整INCAR、POSCAR和KPOINTS随包提供;VASP计算本身见介电与光学教程。
cat calculations/si-optics/INCAR
cat calculations/si-optics/KPOINTS
head analysis/si-optical.csv
Si本例采用各向同性/对角分量处理。CSV依次包含光子能量、平均介电函数实部和虚部、n、k、反射率、能量损失函数及吸收系数。非对角张量元素不能直接当作六种独立折射率;各向异性材料需要相应的偏振和传播分析。
2. 从ε到n、k与反射率#
脚本用DielectricAnalysis读取和处理本例,同时与复数平方根、Fresnel表达式对照:
n + i*k = sqrt(epsilon1 + i*epsilon2)
R = ((n-1)^2 + k^2) / ((n+1)^2 + k^2)
这里R是理想半无限介质、法向入射条件下的Fresnel反射率;没有描述真实薄膜厚度、基底或多重反射。

图只展示0–10eV,CSV保留全部2001点。输入是PBE独立粒子响应,不包括完整电子—空穴激子效应;不要把峰位直接当成已经校正的实验光谱。
3. 吸收系数必须带正确单位#
omega = E_eV / hbar_eV_s
alpha_m_inverse = 2 * omega * k / c
alpha_cm_inverse = alpha_m_inverse / 100
程序另用pymatgen.analysis.solar.slme.absorption_coefficient核对吸收系数口径。当前导出的单位是cm⁻¹,图中以10⁵cm⁻¹显示;它不是无量纲吸收率。
head analysis/si-positive-wavelength.csv
波长CSV只含正能量。E=0对应无限长波极限,不能人为填入一个有限波长。
4. 区分损失函数、吸收率与透射率#
当前DielectricAnalysis接口中的L按epsilon2/(epsilon1²+epsilon2²)计算,实际是能量损失函数−Im(1/ε)。它可以在共振处大于1,不能当作样品吸收率,也不是单位cm⁻¹的吸收系数。
接口的便捷数组T=1−R−L没有厚度、界面或传播模型,本例不把它用作真实样品透射率。若目标是薄膜透射,应先明确厚度、基底、入射角和偏振,再采用相应光学模型。pymatgen光学接口、吸收系数接口。