sisl 递归自能与单通道透射
用半无限链演示RecursiveSI、展宽和Caroli公式,检查复数分支与自旋计数。
阅读本篇目录
使用集群 sisl/0.16.4,环境为 Python 3.11、NumPy、SciPy、netCDF4 和 Matplotlib,不需要加载 SIESTA 的 MPI 编译环境。本文是明确给定参数的教学模型,在集群实际运行并与独立公式比较;不是新的材料 DFT 或 TBtrans 自洽计算。
下载本组完整脚本、原生矩阵、CSV和配图。解压后进入 sisl-core-model-examples:
module load sisl/0.16.4
bash results.sh
bash plot.sh
参考数据在 reference-results、CSV在 reference-data。要运行全部短模型,用 bash run.sh,新结果写入 work/results,已完成小项自动跳过;图由参考数据重画到 figures。脚本限制数学库为1线程。
先准备电极模型#
位点能量0.4 eV、最近邻跃迁−1 eV,电极无限延伸方向是a。下面直接用sisl构造半无限自能:
cat > selfenergy.py <<'EOF'
import sisl
import numpy as np
g = sisl.Geometry([[0,0,0]], sisl.Atom(6,R=2.01),
lattice=sisl.Lattice([2,10,10], nsc=[3,1,1]))
H = sisl.Hamiltonian(g)
H.construct([[0.01,2.01],[0.4,-1.0]])
left = sisl.RecursiveSI(H,'-A',eta=1e-4)
right = sisl.RecursiveSI(H,'+A',eta=1e-4)
E = 0.4
SL = left.self_energy(E)
SR = right.self_energy(E)
GL = sisl.SelfEnergy.se2broadening(SL)
GR = sisl.SelfEnergy.se2broadening(SR)
G = np.linalg.inv((E+1e-4j)*np.eye(1) - np.array([[0.4]]) - SL - SR)
T = np.trace(GL @ G @ GR @ G.conj().T).real
print('Sigma_L / eV:',SL)
print('Gamma_L / eV:',GL)
print('Transmission:',T)
EOF
python selfenergy.py
这是一轨道器件连接相同理想电极。'-A'/'+A'是晶格方向,不是坐标字母x的任意写法;矩阵里必须真的包含沿该方向的胞间耦合。
四个量怎么理解#
- Σ是电极对器件的自能,单位eV;滞后自能的虚部应非正。
- Γ=i(Σ−Σ†)是展宽,理想稳定电极应半正定。
- G为器件的滞后Green函数;这里的器件位点能量也是0.4 eV。
- T=Tr[ΓL G ΓR G†]为透射。这里是每自旋通道的T,不能无解释地多乘2。
本例η=10⁻⁴ eV提供有限数值展宽,不是电子温度,也不是电极偏压。同一器件Green函数与电极自能使用相同的η,便于与独立解析式逐项比较。
实际结果与解析检查#
本例电极能带范围是 −1.6到2.4 eV。实际计算9个能量点,带内单通道T接近1,带外仅剩有限η导致的小尾部。

自能满足 Σ²−(E+iη−0.4)Σ+1=0。二次方程有两个根,要选虚部为负的滞后分支;直接取主平方根而不检查分支,可能在能带一侧选错。图中连续曲线由这个独立方程计算,原生9点用散点表示,没有把连续解析线说成额外密集数值计算。
head -n 12 reference-data/Sisl-recursive-selfenergy.csv
CSV包含原生/解析自能、Γ、T与η。需要查看矩阵时优先复用已算好的Σ求Γ,避免对同一个能量再次求递归自能。
接到自己的体系#
真实LCAO电极还需要匹配器件与电极的轨道顺序、耦合层、晶胞方向、能量参考及重叠矩阵。非正交器件Green函数应写为 [(E+iη)S−H−ΣL−ΣR]⁻¹,上面的单位矩阵仅适用于正交模型。
这里没有计算自洽电势、偏压下电荷重排或真实器件电流。已有TBtrans实际输出可直接参考原生透射与DOS、固定Hamiltonian电流;不要把这条固定势链的透射称为自洽I–V结果。