ASE紧束缚模型电子输运实操
给定Hamiltonian矩阵,计算透射、DOS与小偏压电流,并用解析模型检查数值。
阅读本篇目录
下载全部输入、可运行脚本、实际数据和四张高清图。在已分配CPU资源内,使用新解压目录执行 bash run.sh;ASE3.29.0、单进程单线程,生成 work/。本包不调用GPU或外部DFT程序。
1 输入是矩阵,不是一个POSCAR#
ASE TransportCalculator处理中心区域及两侧半无限引线的Hamiltonian与重叠矩阵。本例用明确给定的一维单轨道紧束缚模型学习接口,没有把这些矩阵当作某个材料的DFT结果。
近邻跃迁为−1eV,引线在位能0;中心在位能分别取0、0.5、1eV,使用正交基:
import numpy as np
h1 = np.array([[0.0, -1.0], [-1.0, 0.0]])
h = np.array([[0.5]])
h1包含相邻两个主层的信息,中心矩阵 h只有一个轨道。不指定重叠矩阵时采用单位阵。真实材料需要从一致基组和能量参考的电子结构结果取得相应矩阵,不能直接把能带本征值排成对角阵来代替完整模型。
2 计算透射、DOS和通道#
bash run.sh
head work/transport-phase-output/transport-0.5.csv
cat work/transport-phase-output/ETA-CONVERGENCE.json
实际代码:
from ase.transport.calculators import TransportCalculator
energy = np.linspace(-3.01, 3.01, 1205)
calc = TransportCalculator(h=h, h1=h1, energies=energy,
eta=1e-5, eta1=1e-5, eta2=1e-5,
dos=True, pdos=[0], eigenchannels=1)
T = calc.get_transmission()
DOS = calc.get_dos()
PDOS = calc.get_pdos()
channels = calc.get_eigenchannels()
透射率无量纲,能量为eV;DOS按1/eV计。单轨道模型里PDOS等于中心总DOS,唯一通道的透射等于总透射;多轨道模型不能沿用这一结论。
3 与解析结果对照#
引线带内 |E|<2eV,中心在位能U的解析透射为:
T(E) = (4 − E²) / (4 − E² + U²)
| U/eV | E=0数值透射 | 解析值 |
|---|---|---|
| 0 | 0.999990 | 1 |
| 0.5 | 0.941167 | 0.941176 |
| 1 | 0.799992 | 0.8 |

在本例 |E|<1.8eV的带内区间,数值与解析结果差小于5×10⁻⁵。接近带边、束缚态或极窄共振时,需要额外检查网格与展宽。
4 η不是越小越好#
对U=0.5eV、E=0,本例从η=10⁻³、10⁻⁴减到10⁻⁵eV,绝对误差约从9.41×10⁻⁴降到9.40×10⁻⁶。继续盲目减到10⁻⁸,在精确带中心会放大本例引线表面Green函数的数值误差。
有限η也会在带外束缚态附近产生很小的数值泄漏,本例带外最大透射约2.7×10⁻⁵,不解释为真实的新导电通道。实际计算应同时检查解析极限、η、能量网格与概率范围,保留原始透射,不人为把小值全部截为零。
5 电流换算为安培#
from ase import units
bias = np.array([-0.1, 0.0, 0.1])
I_native = calc.get_current(bias, T=300)
I_ampere = I_native * 2 * units._e**2 / units._hplanck
print(I_ampere)
原生返回值需要按上述因子换算为A,不可直接标为A。默认是自旋简并模型;显式自旋极化时需要匹配所用通道和自旋选项。
理想链在0.1V、300K下电流约 7.748μA,对应小偏压电导2e²/h;零偏压电流为零,正负偏压响应反号。三个偏压点用于演示小偏压接口,不代表已经算完真实器件的非线性I–V曲线。参考:ASE电子输运。