SIESTA专题

SIESTA与TBtrans:偏压扫描和I–V曲线

从电极、零偏压到七个偏压的自洽计算,再提取实际透射和电流。

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

本篇接着TranSIESTA自洽输运入门,把三个偏压扩展为七个点,说明一条可照着执行的I–V工作流。每个偏压分别求解自洽器件哈密顿量,再由TBtrans提取对应透射;输入、数据和图都来自实际运行。

下载完整输入、实际NC/HSX数据和绘图脚本。解压进入资料包目录,先画鸢算科技集群的实际参考结果:

bash view.sh

figures下得到结构与电极k点、七个偏压的透射/I–V,以及两种能量网格的电流比较三张图;analysis/cases.csv和各偏压透射CSV保存数值。参考数据位于 reference/cases,无需先重新计算。

环境为SIESTA/TranSIESTA/TBtrans5.4.2,Intel oneAPI2024.2、Intel MPI2021.13、MKL顺序LP64;后处理使用sisl0.16.4、NumPy、SciPy和Matplotlib。SIESTA/TBtrans在本例采用CPU路径。新计算先确认CPU队列可用,再提交:

sinfo -p cpu-8173m
sbatch job.slurm
squeue -u "$USER"

模板按CPU队列整节点规则申请56核,工作流最多同时运行4个条件、每个条件2个MPI进程、每进程1线程,实际最多使用8个物理核心。模块名称说明构建目标,本文数据不用于特定CPU节点的性能比较。请在分配的计算资源内运行完整DFT流程。

1 看清模型和电压定义#

采用固定均匀碳链:电极原胞8个C、器件32个C,C–C间距1.27 Å,横向晶胞12 Å。器件包括两端各8个电极缓冲原子和中间16个C。PBE、DZP基组、150 Ry网格、PAO能量位移200 meV,电子温度300 K;电极比较32和64个纵向k点,器件使用64k电极。

实际碳链器件与电极k点对照

偏压取−0.20、−0.10、−0.05、0、+0.05、+0.10、+0.20 V。输入中high电极化学势设为V、low电极设为0;分析时从NC文件读取实际化学势,不再手动猜测能量零点。

这是固定结构、理想同质接触的教学模型,没有优化碳链,也不代表真实碳链的稳定结构或实验器件。

2 工作流先后顺序#

sbatch job.slurm依次完成以下步骤:

  1. 计算C8电极的32k、64k两个对照,得到 electrode.HSX。
  2. 用64k电极计算零偏压C32器件,生成 device.DM、device.TSDE、device.TS.HSX。
  3. 对零偏压器件运行两种TBtrans实轴能量网格。
  4. 将零偏压DM与TSDE分别复制到六个非零偏压目录,作为初始状态。
  5. 各偏压重新进行TranSIESTA自洽,随后分别运行两种TBtrans网格。
  6. sisl读取NC,输出透射、每个偏压的电流、CSV和三张图。

非零偏压目录需要前面的零偏压状态,不能从空目录跳过这一步。输入中的关键项为:

SolutionMethod transiesta
TS.Voltage 0.2 eV
DM.UseSaveDM true
TS.HS.Save true
TS.DE.Save true
TBT.HS device.TS.HSX

这里的 TS.Voltage以eV指定电子化学势差,对应本例0.2 V外加偏压。零偏压目录的 DM.UseSaveDM为false;后续目录为true。每个条件都读取本目录自洽后的 device.TS.HSX,电极HSX路径则共同指向64k电极目录。

展开查看+0.20 V器件的完整FDF输入
SystemLabel device
SystemName Own uniform carbon chain NEGF tutorial
NumberOfAtoms 32
NumberOfSpecies 1
LatticeConstant 1.0 Ang
%block ChemicalSpeciesLabel
1 6 C
%endblock ChemicalSpeciesLabel
%block LatticeVectors
40.6400000000 0.0 0.0
0.0 12.0 0.0
0.0 0.0 12.0
%endblock LatticeVectors
AtomicCoordinatesFormat Ang
%block AtomicCoordinatesAndAtomicSpecies
0.0000000000 6.0000000000 6.0000000000 1
1.2700000000 6.0000000000 6.0000000000 1
2.5400000000 6.0000000000 6.0000000000 1
3.8100000000 6.0000000000 6.0000000000 1
5.0800000000 6.0000000000 6.0000000000 1
6.3500000000 6.0000000000 6.0000000000 1
7.6200000000 6.0000000000 6.0000000000 1
8.8900000000 6.0000000000 6.0000000000 1
10.1600000000 6.0000000000 6.0000000000 1
11.4300000000 6.0000000000 6.0000000000 1
12.7000000000 6.0000000000 6.0000000000 1
13.9700000000 6.0000000000 6.0000000000 1
15.2400000000 6.0000000000 6.0000000000 1
16.5100000000 6.0000000000 6.0000000000 1
17.7800000000 6.0000000000 6.0000000000 1
19.0500000000 6.0000000000 6.0000000000 1
20.3200000000 6.0000000000 6.0000000000 1
21.5900000000 6.0000000000 6.0000000000 1
22.8600000000 6.0000000000 6.0000000000 1
24.1300000000 6.0000000000 6.0000000000 1
25.4000000000 6.0000000000 6.0000000000 1
26.6700000000 6.0000000000 6.0000000000 1
27.9400000000 6.0000000000 6.0000000000 1
29.2100000000 6.0000000000 6.0000000000 1
30.4800000000 6.0000000000 6.0000000000 1
31.7500000000 6.0000000000 6.0000000000 1
33.0200000000 6.0000000000 6.0000000000 1
34.2900000000 6.0000000000 6.0000000000 1
35.5600000000 6.0000000000 6.0000000000 1
36.8300000000 6.0000000000 6.0000000000 1
38.1000000000 6.0000000000 6.0000000000 1
39.3700000000 6.0000000000 6.0000000000 1
%endblock AtomicCoordinatesAndAtomicSpecies
PAO.BasisSize DZP
PAO.EnergyShift 200 meV
MeshCutoff 150 Ry
XC.functional GGA
XC.authors PBE
ElectronicTemperature 300 K
MaxSCFIterations 500
MinSCFIterations 3
SCF.DM.Converge true
SCF.DM.Tolerance 1.e-7
SCF.FreeE.Converge true
SCF.FreeE.Tolerance 1.e-6 eV
DM.MixingWeight 0.05
DM.NumberPulay 6
DM.UseSaveDM true
WriteDM true
Save.HS true
TS.HS.Save true
TS.DE.Save true
SolutionMethod transiesta
TS.Voltage 0.2 eV
%block TS.ChemPots
high
low
%endblock TS.ChemPots
%block TS.ChemPot.high
mu V
contour.eq
begin
C-high
T-high
end
%endblock TS.ChemPot.high
%block TS.ChemPot.low
mu 0.0 eV
contour.eq
begin
C-low
T-low
end
%endblock TS.ChemPot.low
%block TS.Contour.C-high
part circle
from -40.0 eV + V to -10 kT + V
points 34
method g-legendre
%endblock TS.Contour.C-high
%block TS.Contour.T-high
part tail
from prev to inf
points 12
method g-fermi
%endblock TS.Contour.T-high
%block TS.Contour.C-low
part circle
from -40.0 eV to -10 kT
points 34
method g-legendre
%endblock TS.Contour.C-low
%block TS.Contour.T-low
part tail
from prev to inf
points 12
method g-fermi
%endblock TS.Contour.T-low
%block TS.Contours.nEq
neq
%endblock TS.Contours.nEq
%block TS.Contour.nEq.neq
part line
from -|V| - 5 kT to |V| + 5 kT
delta 0.01 eV
method mid-rule
%endblock TS.Contour.nEq.neq
%block TS.Elecs
high
low
%endblock TS.Elecs
%block TS.Elec.high
HS ../lead-k64/electrode.HSX
chemical-potential high
semi-inf-direction -a1
electrode-position 1
%endblock TS.Elec.high
%block TS.Elec.low
HS ../lead-k64/electrode.HSX
chemical-potential low
semi-inf-direction +a1
electrode-position end -1
%endblock TS.Elec.low
TBT.HS device.TS.HSX
TBT.T.All true
TBT.DOS.A true
TBT.DOS.Gf true
TBT.T.Eig 12
%block TBT.Contours
line
%endblock TBT.Contours
%block TBT.Contour.line
part line
from -1.5 eV to 1.5 eV
delta 0.01 eV
method mid-rule
%endblock TBT.Contour.line

集群已有PseudoDojo0.4 PBE SR的C.psml,prepare.py从安装目录读取;下载包不重新分发赝势。

3 检查任务与文件#

在工作流根目录查看:

grep 'Job completed' cases/bias-plus-0p20/siesta.out
grep 'SCF cycle converged' cases/bias-plus-0p20/siesta.out
grep 'End of run:' cases/bias-plus-0p20/tbtrans-fine.out
ls cases/bias-plus-0p20/device*.nc

同时保留 device-coarse.TBT.nc和 device.TBT.nc,分别对应0.010 eV与0.005 eV网格。它们来自相同的自洽器件哈密顿量。还应检查各SCF块的收敛情况,任务退出并不自动说明所有物理输入都合理。

4 用sisl读出自己的透射和电流#

下面以下载包里的+0.20 V参考结果为例;处理自己新算的数据时,把 reference/cases换成 cases:

module load sisl/0.16.4
cd reference/cases/bias-plus-0p20
python - <<'PY'
import sisl
import numpy as np
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
f=sisl.get_sile("device.TBT.nc")
E=f.E
T=f.transmission("high","low")
I=f.current("high","low")
print("Electrodes:",f.elecs)
print("Chemical potentials / eV:",f.mu("high"),f.mu("low"))
print("One-spin-block current / A:",I)
print("Nonmagnetic total current / microA:",2*I*1e6)
np.savetxt("my-transmission.csv",np.column_stack((E,T)),delimiter=",",header="E_eV,T_per_spin_block",comments="")
plt.plot(E,T)
plt.xlabel("Energy relative to electrode reference (eV)")
plt.ylabel("Transmission per spin block")
plt.tight_layout();plt.savefig("my-transmission.png",dpi=180)
PY

得到 my-transmission.csv、my-transmission.png及终端电流。high、low与输入电极名称一致,调换读取方向会改变电流符号。这里API返回单自旋块电流;本例是非磁体系,两个相同自旋块相加,因此总电流乘2。自旋极化或自旋器件应分别处理相应通道,不能一律乘2。

七个自洽偏压的实际透射与I–V曲线

5 本组实际电流#

下表采用0.005 eV能量步长,已按非磁体系两个自旋块相加:

偏压 / V 非磁性总电流 / μA
-0.20 -30.97762649
-0.10 -15.48888952
-0.05 -7.74445422
+0.00 +0.00000000
+0.05 +7.74445396
+0.10 +15.48888829
+0.20 +30.97762227

正负偏压原始值均保留。本例I–V接近线性,但仍需检查基组、网格、电极k点、器件缓冲长度和SCF积分轮廓。两种TBtrans能量步长的比较只涉及实轴后处理积分,详见能量网格与电流核对。

参考:SIESTA官方碳链教程、TBtrans官方手册。

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

查看配图

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

100%查看原图 ↗