본문으로 건너뛰기

08. I–V 특성 — Landauer 적분과 대칭 bias window

챕터 07에서 C19N chain의 transmission T(E)T(E)를 얻었다. 이 장에서는 그 T(E)T(E)를 Landauer 공식에 넣어 I–V 곡선을 계산한다. 계산 자체는 Python 적분이지만, bias window를 어디에 놓는가라는 규약 하나가 결과의 물리적 해석을 좌우한다. 대칭 window가 왜 표준인지, 비대칭 window가 어떤 인공적 정류 신호를 만드는지가 이 장의 핵심이다.

학습 목표

  • zero-bias 근사의 의미 — 고정된 T(E)T(E)를 bias window로 적분하는 것 — 와 그 적용 한계를 이해한다.
  • 대칭 bias window μL,R=EF±eV/2\mu_{L,R} = E_F \pm eV/2의 근거를 설명한다.
  • 비대칭 window가 대칭 접합에서 인공적 정류 신호를 만드는 메커니즘을 파악한다.
  • sisl로 trans.TBT.nc에서 T(E)T(E)를 읽어 trapezoidal 적분으로 I–V를 산출한다.
  • finite-temperature 확장(Fermi–Dirac weighting)의 형태를 안다.

이론 — zero-bias 근사와 Landauer 적분

절대영도 Landauer 공식에서 Fermi 함수 차이 fLfRf_L - f_R은 두 화학 퍼텐셜 사이에서 1, 밖에서 0인 계단이 된다. 따라서 전류는 T(E)T(E)를 bias window로 적분한 것이다.

I(V)=2ehμRμLT(E)dEI(V) = \frac{2e}{h}\int_{\mu_R}^{\mu_L} T(E)\,dE

여기서 T(E)T(E)0 V에서 수렴한 Hamiltonian의 transmission을 그대로 쓰는 것이 zero-bias 근사다. 이는 Landauer 그림 [1]의 저전압 근사이며, bias가 걸려도 T(E)T(E)가 변하지 않는다고 가정한다. 따라서 bias가 작고 screening이 좋은 계에서만 유효하다. bias에 따른 T(E)T(E) 변형까지 포함하려면 bias마다 자기일관 계산을 다시 해야 한다 — 그것이 챕터 09의 finite-bias TranSIESTA다.

대칭 bias window

window의 두 끝은 대칭으로 놓는다.

μL=EF+eV2,μR=EFeV2\mu_L = E_F + \frac{eV}{2}, \qquad \mu_R = E_F - \frac{eV}{2}

이 선택은 "bias가 걸릴 때 정전 퍼텐셜 강하가 접합 양쪽에 반반씩 나뉘고, scattering region의 준위는 두 전극의 중간 전위에 머문다"는 가정과 동치다. 좌우가 동등한 대칭 접합에서는 이것이 유일하게 자기모순 없는 선택이다. 대칭 window의 즉각적인 귀결로, 고정된 T(E)T(E)가 어떤 모양이든

I(V)=2eh+eV/2eV/2T(E)dE=I(V)I(-V) = \frac{2e}{h}\int_{+eV/2}^{-eV/2} T(E)\,dE = -I(V)

정확히 성립한다. 즉 zero-bias 근사 + 대칭 window에서 I–V는 항상 원점 반대칭이고, 정류는 원리적으로 나올 수 없다.

대칭 bias window의 Landauer 적분 개념도

그림 1. 대칭 bias window(개념도) — 전류는 T(E)T(E) 곡선 아래 [μR,μL]=[EFeV/2, EF+eV/2][\mu_R, \mu_L] = [E_F - eV/2,\ E_F + eV/2] 구간(색칠)의 적분이고, 적분 창의 폭이 eVeV다.

비대칭 window의 주의 사항 — 인공적 정류 신호

레거시 스크립트 중에는 한쪽 전극을 접지에 고정하는 비대칭 규약 μL=EF\mu_L = E_F, μR=EFeV\mu_R = E_F - eV를 쓰는 것이 있다. 이 규약으로 zero-bias 근사 적분을 하면

I(+V)EFeVEFTdE,I(V)EFEF+eVTdEI(+V) \propto \int_{E_F - eV}^{E_F} T\,dE, \qquad I(-V) \propto -\int_{E_F}^{E_F + eV} T\,dE

가 되어, 양의 bias는 EFE_F 아래T(E)T(E)만, 음의 bias는 EFE_F T(E)T(E)만 적분한다. T(E)T(E)EFE_F를 중심으로 비대칭이면(거의 모든 실제 계가 그렇다) I(+V)I(V)|I(+V)| \neq |I(-V)|가 되고, 이것이 정류비처럼 보인다. 그러나 이는 물리가 아니라 적분 규약이 만든 artifact다. zero-bias 근사에서 T(E)T(E)는 bias에 불변이므로, 대칭 접합의 정류는 원리적으로 불가능하다.

  • 대칭 접합의 I–V에서 비대칭이 보이면 결과보다 먼저 적분 스크립트의 window 규약을 의심하라.
  • 정류나 NDC(negative differential conductance)를 논하려면 bias에 따라 T(E)T(E)가 실제로 변형되는 self-consistent finite-bias 계산(챕터 09)이 필요하다.

참고로 self-consistent finite-bias 계산에서는 (0,eV)(0, -eV)(+eV/2,eV/2)(+eV/2, -eV/2)가 전체 퍼텐셜 기준만 다른 gauge 선택이라 물리가 같다. 문제가 되는 것은 고정된 T(E)T(E)에 사후 적분하는 zero-bias 근사에서의 window 위치다.

Finite temperature

유한 온도에서는 계단이 Fermi–Dirac 분포로 부드러워진다.

I(V)=2ehT(E)[f(EμL)f(EμR)]dEI(V) = \frac{2e}{h}\int T(E)\,\bigl[f(E-\mu_L) - f(E-\mu_R)\bigr]\,dE

window 가장자리가 kBTk_BT(300 K300\ \mathrm{K}에서 약 25.9 meV25.9\ \mathrm{meV}) 폭으로 퍼지는 효과다. window 끝이 T(E)T(E)의 날카로운 구조(공명, antiresonance)를 지날 때 두 결과의 차이가 가장 크다.

준비물

챕터 07의 TBtrans 계산이 끝난 0bias/trans.TBT.nc가 필요하다. 튜토리얼 표준대로 에너지 그리드는 [3,3] eV[-3, 3]\ \mathrm{eV}, TBT.Contours.Eta 0.001 eV이며 그리드 간격은 η\eta와 같은 1 meV다. window 적분의 해상도가 이 그리드에 그대로 묶이므로, I–V가 목적이라면 그리드를 충분히 촘촘하게 잡는 것이 좋다.

노트

T(E)T(E)는 항상 sisl로 trans.TBT.nc에서 읽는다. TBtrans가 함께 쓰는 AVTRANS 계열 텍스트 출력은 에너지 정렬과 k-평균 처리를 별도로 확인해야 하므로 파싱하지 않는다 — netCDF 경로가 에너지 원점(EEFE - E_F)과 k-평균을 일관되게 처리한다.

적분 코드

iv_zerobias.py
"""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 출력 기준으로 EEFE - E_F (eV)이므로 Ef=0.0이 Fermi 준위다.
  • tbt.transmission() — 인자를 생략하면 첫 두 전극(Left, Right) 사이 transmission을 k-평균해서 반환한다.
  • mask — window 안 그리드 점만 골라 np.trapz로 사다리꼴 적분한다. window 끝이 그리드 점 사이에 떨어지면 끝 조각이 잘리므로, 그리드가 촘촘할수록 오차가 작다 (연습문제 3). NumPy 2.0부터는 np.trapz 대신 np.trapezoid를 쓴다.
  • 단위 — 2ehTdE\frac{2e}{h}\int T\,dE에서 적분을 eV로 계산했으므로 J로 바꾸는 ee를 한 번 더 곱하면 결과가 A다. μ\muA는 1e6, nA는 1e9를 곱한다.

실행

cd 03_transport
python iv_zerobias.py
head iv_zerobias.dat

출력 분석

TB 모델 I-V 예시

그림 2. TB 모델 T(E)T(E)를 대칭 window로 적분한 I–V — I(V)=I(V)I(-V)=-I(V) 반대칭이고, 낮은 bias 기울기가 G0T(EF)G_0\,T(E_F) 점선과 일치한다. (TB 모델 실계산, _scripts/fig_examples_batch.py)

C19N chain(가운데 원자 1개가 N인 대칭 접합)에서 기대되는 곡선의 형태는 다음과 같다.

  • 원점 반대칭. I(V)=I(V)I(-V) = -I(V)가 수치 오차 범위에서 정확히 성립해야 한다. 깨져 있다면 window 규약이나 적분 코드부터 확인한다.
  • 낮은 bias 선형 구간. V0V \to 0에서 기울기는 G=G0T(EF)G = G_0\,T(E_F)다. pristine cumulene chain이라면 EFE_F 근처 π\pi 채널 2개로 T(EF)=2T(E_F) = 2(G=2G0G = 2G_0)가 나오지만, N 치환이 두 채널을 산란시켜 T(EF)T(E_F)는 그보다 작다. 챕터 07에서 얻은 T(EF)T(E_F) 값과 기울기가 일치하는지 대조하라. 크기 감각: T(EF)=1T(E_F) = 1인 채널은 V=0.1 VV = 0.1\ \mathrm{V}에서 약 7.7 μA7.7\ \mu\mathrm{A}를 흘린다.
  • 기울기 변화. window 끝 ±eV/2\pm eV/2T(E)T(E)의 봉우리·골(N impurity가 만든 공명 구조)을 지날 때마다 미분 conductance dI/dVdI/dV가 변한다. I–V의 굴곡을 T(E)T(E) 그림 위에 window를 그려가며 대응시켜 보면 zero-bias 근사의 구조가 명확해진다.
  • zero-bias 근사의 한계. 이 곡선에는 정류도 NDC도 없다 — 고정 T(E)T(E)의 단조 적분이기 때문이다. finite-bias 계산(챕터 09)과 낮은 bias 구간에서 일치하는지, 높은 bias에서 얼마나 갈라지는지가 근사의 유효 범위를 알려준다.

Finite-T 확장

Fermi–Dirac weighting을 넣으면 window 함수가 부드러워질 뿐 구조는 같다.

finite-T 버전
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

fLfRf_L - f_R이 부호를 자동으로 처리하므로 sign/abs 처리가 필요 없고, kT0kT \to 0에서 계단 window로 수렴한다. 적분 범위가 window 밖으로 몇 kBTk_BT 더 필요하다는 점만 주의한다 — 튜토리얼 그리드 [3,3] eV[-3, 3]\ \mathrm{eV}±1 V\pm 1\ \mathrm{V} 스캔(window 끝 ±0.5 eV\pm 0.5\ \mathrm{eV})에 충분하다.

연습문제

  1. 인공적 정류 신호 확인. current_zero_bias를 비대칭 window(μL=EF\mu_L = E_F, μR=EFeV\mu_R = E_F - eV) 버전으로 바꿔 같은 T(E)T(E)로 I–V를 다시 계산하라. I(+1V)/I(1V)|I(+1\,\mathrm{V})| / |I(-1\,\mathrm{V})|를 "정류비"로 계산해 보고, 이 값이 T(E)T(E)의 어떤 성질에서 오는지, 왜 물리적 정류가 아닌지 설명하라.

  2. 온도 효과. T=0T = 0T=300 KT = 300\ \mathrm{K}의 I–V를 같은 그림에 겹쳐 그려라. 두 곡선의 차이가 가장 큰 bias는 어디이고, 그 지점에서 window 끝이 T(E)T(E)의 어떤 구조를 지나고 있는가?

  3. 그리드 수렴. 에너지 그리드를 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).