08. I–V 특성 — Landauer 적분과 대칭 bias window
챕터 07에서 C19N chain의 transmission 를 얻었다. 이 장에서는 그 를 Landauer 공식에 넣어 I–V 곡선을 계산한다. 계산 자체는 Python 적분이지만, bias window를 어디에 놓는가라는 규약 하나가 결과의 물리적 해석을 좌우한다. 대칭 window가 왜 표준인지, 비대칭 window가 어떤 인공적 정류 신호를 만드는지가 이 장의 핵심이다.
학습 목표
- zero-bias 근사의 의미 — 고정된 를 bias window로 적분하는 것 — 와 그 적용 한계를 이해한다.
- 대칭 bias window 의 근거를 설명한다.
- 비대칭 window가 대칭 접합에서 인공적 정류 신호를 만드는 메커니즘을 파악한다.
- sisl로
trans.TBT.nc에서 를 읽어 trapezoidal 적분으로 I–V를 산출한다. - finite-temperature 확장(Fermi–Dirac weighting)의 형태를 안다.
이론 — zero-bias 근사와 Landauer 적분
절대영도 Landauer 공식에서 Fermi 함수 차이 은 두 화학 퍼텐셜 사이에서 1, 밖에서 0인 계단이 된다. 따라서 전류는 를 bias window로 적분한 것이다.
여기서 로 0 V에서 수렴한 Hamiltonian의 transmission을 그대로 쓰는 것이 zero-bias 근사다. 이는 Landauer 그림 [1]의 저전압 근사이며, bias가 걸려도 가 변하지 않는다고 가정한다. 따라서 bias가 작고 screening이 좋은 계에서만 유효하다. bias에 따른 변형까지 포함하려면 bias마다 자기일관 계산을 다시 해야 한다 — 그것이 챕터 09의 finite-bias TranSIESTA다.
대칭 bias window
window의 두 끝은 대칭으로 놓는다.
이 선택은 "bias가 걸릴 때 정전 퍼텐셜 강하가 접합 양쪽에 반반씩 나뉘고, scattering region의 준위는 두 전극의 중간 전위에 머문다"는 가정과 동치다. 좌우가 동등한 대칭 접합에서는 이것이 유일하게 자기모순 없는 선택이다. 대칭 window의 즉각적인 귀결로, 고정된 가 어떤 모양이든
가 정확히 성립한다. 즉 zero-bias 근사 + 대칭 window에서 I–V는 항상 원점 반대칭이고, 정류는 원리적으로 나올 수 없다.

그림 1. 대칭 bias window(개념도) — 전류는 곡선 아래 구간(색칠)의 적분이고, 적분 창의 폭이 다.
레거시 스크립트 중에는 한쪽 전극을 접지에 고정하는 비대칭 규약 , 를 쓰는 것이 있다. 이 규약으로 zero-bias 근사 적분을 하면
가 되어, 양의 bias는 아래의 만, 음의 bias는 위의 만 적분한 다. 가 를 중심으로 비대칭이면(거의 모든 실제 계가 그렇다) 가 되고, 이것이 정류비처럼 보인다. 그러나 이는 물리가 아니라 적분 규약이 만든 artifact다. zero-bias 근사에서 는 bias에 불변이므로, 대칭 접합의 정류는 원리적으로 불가능하다.
- 대칭 접합의 I–V에서 비대칭이 보이면 결과보다 먼저 적분 스크립트의 window 규약을 의심하라.
- 정류나 NDC(negative differential conductance)를 논하려면 bias에 따라 가 실제로 변형되는 self-consistent finite-bias 계산(챕터 09)이 필요하다.
참고로 self-consistent finite-bias 계산에서는 와 가 전체 퍼텐셜 기준만 다른 gauge 선택이라 물리가 같다. 문제가 되는 것은 고정된 에 사후 적분하는 zero-bias 근사에서의 window 위치다.
Finite temperature
유한 온도에서는 계단이 Fermi–Dirac 분포로 부드러워진다.
window 가장자리가 (에서 약 ) 폭으로 퍼지는 효과다. window 끝이 의 날카로운 구조(공명, antiresonance)를 지날 때 두 결과의 차이가 가장 크다.
준비물
챕터 07의 TBtrans 계산이 끝난 0bias/trans.TBT.nc가 필요하다. 튜토리얼 표준대로 에너지 그리드는 , TBT.Contours.Eta 0.001 eV이며 그리드 간격은 와 같은 1 meV다. window 적분의 해상도가 이 그리드에 그대로 묶이므로, I–V가 목적이라면 그리드를 충분히 촘촘하게 잡는 것이 좋다.
는 항상 sisl로 trans.TBT.nc에서 읽는다. TBtrans가 함께 쓰는 AVTRANS 계열 텍스트 출력은 에너지 정렬과 k-평균 처리를 별도로 확인해야 하므로 파싱하지 않는다 — netCDF 경로가 에너지 원점()과 k-평균을 일관되게 처리한다.
적분 코드
"""zero-bias 근사 I-V: trans.TBT.nc의 T(E)를 대칭 bias window로 적분한다."""
import numpy as np
import sisl
from scipy.constants import e, h
tbt = sisl.get_sile("0bias/trans.TBT.nc")
E = np.asarray(tbt.E) # E - E_F (eV)
T = np.asarray(tbt.transmission()) # 첫 두 전극 (Left -> Right)
def current_zero_bias(E, T, V, Ef=0.0):
"""고정 T(E)를 대칭 window [Ef - |V|/2, Ef + |V|/2]로 적분한 전류 (A).
대칭 window에서 적분 구간은 |V|에만 의존하므로 부호는 마지막에 곱한다.
I(-V) = -I(V)가 규약에 의해 자동으로 성립한다.
"""
if V == 0.0:
return 0.0
mu_L = Ef + 0.5 * abs(V)
mu_R = Ef - 0.5 * abs(V)
mask = (E >= mu_R) & (E <= mu_L)
integral = np.trapz(T[mask], E[mask]) # eV 단위 적분
I = (2.0 * e / h) * integral * e # 마지막 e: eV -> J 환산
return np.sign(V) * I
bias = np.round(np.arange(-1.0, 1.001, 0.1), 3)
I = np.array([current_zero_bias(E, T, V) for V in bias])
np.savetxt("iv_zerobias.dat",
np.column_stack([bias, I * 1e6]),
header="V (V) I (uA)")
import matplotlib.pyplot as plt
plt.plot(bias, I * 1e6, "o-")
plt.axhline(0.0, color="gray", lw=0.5)
plt.axvline(0.0, color="gray", lw=0.5)
plt.xlabel("V (V)")
plt.ylabel(r"I ($\mu$A)")
plt.savefig("iv_zerobias.png", dpi=200, bbox_inches="tight")
라인 해설:
tbt.E— netCDF에 저장된 에너지 그리드. TBtrans 출력 기준으로 (eV)이므로Ef=0.0이 Fermi 준위다.tbt.transmission()— 인자를 생략하면 첫 두 전극(Left, Right) 사이 transmission을 k-평균해서 반환한다.mask— window 안 그리드 점만 골라np.trapz로 사다리꼴 적분한다. window 끝이 그리드 점 사이에 떨어지면 끝 조각이 잘리므로, 그리드가 촘촘할수록 오차가 작다 (연습문제 3). NumPy 2.0부터는np.trapz대신np.trapezoid를 쓴다.- 단위 — 에서 적분을 eV로 계산했으므로 J로 바꾸는 를 한 번 더 곱하면 결과가 A다. A는
1e6, nA는1e9를 곱한다.
실행
cd 03_transport
python iv_zerobias.py
head iv_zerobias.dat
출력 분석

그림 2. TB 모델 를 대칭 window로 적분한 I–V — 반대칭이고, 낮은 bias 기울기가 점선과 일치한다. (TB 모델 실계산, _scripts/fig_examples_batch.py)
C19N chain(가운데 원자 1개가 N인 대칭 접합)에서 기대되는 곡선의 형태는 다음과 같다.
- 원점 반대칭. 가 수치 오차 범위에서 정확히 성립해야 한다. 깨져 있다면 window 규약이나 적분 코드부터 확인한다.
- 낮은 bias 선형 구간. 에서 기울기는 다. pristine cumulene chain이라면 근처 채널 2개로 ()가 나오지만, N 치환이 두 채널을 산란시켜 는 그보다 작다. 챕터 07에서 얻은 값과 기울기가 일치하는지 대조하라. 크기 감각: 인 채널은 에서 약 를 흘린다.
- 기울기 변화. window 끝 가 의 봉우리·골(N impurity가 만든 공명 구조)을 지날 때마다 미분 conductance 가 변한다. I–V의 굴곡을 그림 위에 window를 그려가며 대응시켜 보면 zero-bias 근사의 구조가 명확해진다.
- zero-bias 근사의 한계. 이 곡선에는 정류도 NDC도 없다 — 고정 의 단조 적분이기 때문이다. finite-bias 계산(챕터 09)과 낮은 bias 구간에서 일치하는지, 높은 bias에서 얼마나 갈라지 는지가 근사의 유효 범위를 알려준다.
Finite-T 확장
Fermi–Dirac weighting을 넣으면 window 함수가 부드러워질 뿐 구조는 같다.
def current_finite_T(E, T, V, kT=0.02585, Ef=0.0):
"""Fermi-Dirac weighting을 포함한 Landauer 전류 (A). kT 단위: eV."""
mu_L = Ef + 0.5 * V
mu_R = Ef - 0.5 * V
fL = 1.0 / (np.exp((E - mu_L) / kT) + 1.0)
fR = 1.0 / (np.exp((E - mu_R) / kT) + 1.0)
return (2.0 * e / h) * np.trapz(T * (fL - fR), E) * e
이 부호를 자동으로 처리하므로 sign/abs 처리가 필요 없고, 에서 계단 window로 수렴한다. 적분 범위가 window 밖으로 몇 더 필요하다는 점만 주의한다 — 튜토리얼 그리드 는 스캔(window 끝 )에 충분하다.
연습문제
-
인공적 정류 신호 확인.
current_zero_bias를 비대칭 window(, ) 버전으로 바꿔 같은 로 I–V를 다시 계산하라. 를 "정류비"로 계산해 보고, 이 값이 의 어떤 성질에서 오는지, 왜 물리적 정류가 아닌지 설명하라. -
온도 효과. 과 의 I–V를 같은 그림에 겹쳐 그려라. 두 곡선의 차이가 가장 큰 bias는 어디이고, 그 지점에서 window 끝이 의 어떤 구조를 지나고 있는가?
-
그리드 수렴. 에너지 그리드를 5점마다 1점씩 솎아낸(
E[::5], T[::5]) 데이터로 I–V를 다시 계산하고, 원본 대비 상대 오차를 bias의 함수로 그려라. 오차가 낮은 bias에서 특히 큰 이유를 window 안 그리드 점 개수로 설명하라.
Ref: S. Datta, Quantum Transport: Atom to Transistor (Cambridge UP, 2005); 챕터 07 (T(E) 산출), 챕터 09 (self-consistent finite bias).