반도체 소자 시뮬레이션을 위한 Lua 재료 스크립팅
OghmaNano는 그래픽 기반의 전기적 파라미터 편집기를 통한 고정값 입력 방식 외에도 Lua 재료 스크립트 기능을 제공합니다. 대부분의 시뮬레이션에서는 GUI를 통해 입력한 고정값만으로도 충분하지만, 전기적·광학적·열적 재료 특성을 프로그래밍 방식으로 정의하거나 온도, 위치(x, y, z), 조성비, 광자 밀도에 따라 변화시키고자 할 때는 Lua 스크립트가 활용됩니다. 이를 통해 밴드갭, 전자 친화도, 전하 캐리어 이동도, 재결합 계수, 열전도도와 같은 파라미터들을 단일 상수가 아닌 함수 형태로 표현할 수 있습니다. 본 페이지에서는 Lua 재료 스크립트의 구조, OghmaNano가 이를 탐색 및 선택하는 방식, 재료 및 광학 데이터셋(n/k)과의 연동 방법, 그리고 시뮬레이션 내에서 스크립트로 정의된 파라미터들이 어떻게 활용되는지에 대해 설명합니다.
1. Lua 재료 스크립트란 무엇인가?
Lua 재료 스크립트란 재료의 물성값을 고정된 수치가 아닌 소형 함수들을 이용해 정의하는 일반 텍스트 형식의 .lua 파일입니다. 각 함수는 밴드갭, 전자 친화도, 전하 캐리어 이동도, 재결합 계수, 열전도도와 같은 특정 재료 파라미터의 값을 반환합니다. 이러한 값들은 일정하게 유지될 수도 있고 온도 T 및 위치 (x, y, z)의 함수로서 변화할 수도 있습니다. 각 함수는 개별적으로 활성화 또는 비활성화가 가능하므로, 사용자는 원하는 파라미터만 재정의하고 나머지 값들은 기본 시뮬레이션 설정을 그대로 따르도록 지정할 수 있습니다. 일반적인 함수의 형태는 다음과 같습니다:
function material.Eg(state)
-- Band gap, units: eV
local enabled = true
local T = state.T
local value = 1.42 - 4.5e-4*(T - 300.0)
return value, enabled
end
OghmaNano 재료 데이터베이스에 포함된 모든 .lua 파일은, 파일의 처음 1000바이트 이내에 테이블 선언 local material = {}가 존재할 경우 재료 스크립트로 간주됩니다. 이에 따라 라이선스 헤더나 설명용 주석 블록이 선언문 앞에 위치할 수 있으나, 해당 마커는 파일 상단 근처에 존재해야 합니다. 사용자는 재료 편집기의 코드 편집기 탭 ??을 통해 특정 재료에 대한 스크립트를 직접 확인 및 수정할 수 있습니다.
재료 스크립트에서는 원하는 만큼의 항목을 정의할 수 있습니다. 밴드갭과 전자 친화도만을 정의할 수도 있고, 밴드 구조, 전하 캐리어 이동도, 재결합 계수 및 열전도도와 같은 모든 전기적·열적 파라미터를 정의할 수도 있습니다. 필요하지 않은 함수들은 단순히 생략하거나 enabled = false 값을 반환하도록 설정하면 모델이 표준 편집기에서 지정된 값을 사용하게 됩니다.
enabled 플래그를 반환하는 작은 함수 형태로 구현됩니다.
CH3NH3PbI3.lua)가 존재합니다. OghmaNano는 시뮬레이션에 가장 적합한 파일을 자동으로 선택합니다.2. 스크립트가 디스크상에 위치하는 장소
재료 스크립트는 두 위치 중 한 곳에 배치될 수 있으며, 이에 따라 OghmaNano 내에서의 표시 방식이 결정됩니다:
- 재료 폴더 내부 — 예를 들어 갈륨비소나 MAPI-CH3NH3PbI3 폴더 안에 위치합니다. 이곳에 배치된 스크립트는 해당 재료에 속하게 되며, 사용자가 재료를 열면 n/k 데이터 및 기타 파일들과 함께 표시됩니다.
- 재료 폴더 외부에 위치한 독립적인
.lua파일로, 데이터베이스 내 다른 위치에 저장됩니다. 이 경우 해당 파일은 특정 재료에 연결되지 않은 채 재료 데이터베이스 브라우저 내에서 별개의.lua파일로 표시됩니다.
그림 ??은 재료 폴더 내에 위치한 스크립트를 보여준다. MAPI-CH3NH3PbI3 페로브스카이트 폴더에는 Ball, Leguy, Leguy-hydrated, Phillips라는 여러 광학 데이터셋(n/k)이 원자 아이콘으로 표시되어 있으며, 이와 함께 CH3NH3PbI3.lua이라는 전기 스크립트가 코드 파일 아이콘으로 표시되어 있다.
3. 하나의 전기 스크립트와 여러 광학 데이터셋
하나의 재료에 대해 여러 세트의 광학 상수가 존재하지만 전기적 파라미터는 단 하나만 적절하게 정의되는 경우가 흔합니다. 각 연구 그룹은 서로 다른 시료와 측정 방법을 사용하여 서로 다른 파장 범위에서 n 및 k 값을 측정하므로, 각 광학 데이터셋을 개별적으로 보관한 뒤 시뮬레이션마다 적절한 데이터를 선택하는 것이 유용합니다. 반면 전기적 파라미터인 밴드갭, 전자 친화도, 전하 캐리어 이동도 등은 일반적으로 해당 재료에 대해 단일하고 일관된 정의를 유지하는 것이 바람직합니다. 바로 이러한 구조가 ??에 제시된 예시와 같습니다: 네 개의 n/k 데이터셋과 하나의 전기 스크립트가 존재하는 형태입니다.
재료가 사용될 때 OghmaNano는 가장 적합한 파일을 자동으로 선택하려고 시도합니다. 만약 시뮬레이션 대상인 특정 재료 수준에 전기 스크립트가 존재하지 않는다면, 모델은 재료 폴더 구조를 역순으로 탐색하여 적절한 스크립트를 찾아냅니다. 이를 통해 사용자는 적절한 위치에 하나의 전기 스크립트만 지정해두면 그 아래에 그룹화된 모든 광학 데이터셋에 동일한 전기적 특성이 적용되도록 할 수 있으며, 각 광학 데이터 변형마다 동일한 전기적 파라미터를 반복해서 입력할 필요가 없습니다.
왜 두 가지를 분리하는가? 광학 데이터는 측정 조건에 따라 자주 변동하는데, 한 연구팀이 800 nm에서 측정한 필름 데이터와 다른 연구팀이 1100 nm에서 측정한 데이터는 모두 타당한 n/k 데이터셋이다. 반면 재료의 전기적 특성은 광학 측정의 파장 범위와 무관하므로 단일 전기 스크립트를 사용하면 어떤 광학 데이터셋과 결합하더라도 물리적 일관성을 유지할 수 있다.
4. 재료 스크립트의 구조
아래 예시는 통신용 레이저 및 검출기에 사용되는 격자 정합형 InP 기반 4성분계 물질인 AlGaInAs에 대한 전기적 재료 스크립트 전체 내용입니다. 실제로 작성되고 상세히 문서화된 스크립트가 어떻게 구성되는지 확인할 수 있도록 전체를 제시하였으며, 이후 각 함수별 설명은 섹션 5에서 다룹니다. 클릭하여 펼쳐보세요.
전체 예제 재료 스크립트 — AlGaInAs.lua
-- See end of file for copyright, licensing and documentation links.
local material = {}
-- ---------------------------------------------------------------------------
-- NOTES ON AlGaInAs (read before using):
--
-- (Al_x Ga_{1-x})_{0.47} In_{0.53} As, LATTICE-MATCHED to InP (a = 5.869 A). The
-- workhorse quaternary for 1.3-1.55 um telecom lasers, modulators and
-- photodetectors. In is fixed at 0.53 for the InP match, so the single design
-- knob is the Al fraction x on the group-III sublattice.
--
-- DIRECT gap for all x (no crossover in the useful range): ~0.75 eV at x=0
-- (Ga0.47In0.53As, "InGaAs", ~1.65 um) rising to ~1.46 eV at x=1
-- (Al0.48In0.52As, ~0.85 um).
더 보기
-- Compared with the older InGaAsP telecom
-- quaternary, AlGaInAs offers a larger conduction-band offset (better electron
-- confinement), which is why it is favoured for high-temperature laser
-- operation - a device advantage, captured here only via Xi/Eg.
--
-- The lattice constant is FIXED by the InP match (independent of x). Eg is
-- computed from x; the remaining parameters are given at a representative
-- x = 0.30 (Eg ~ 0.92 eV, ~1.34 um) with InGaAs/AlInAs end points noted.
--
-- REFERENCES
--
-- [1] I. Vurgaftman, J. R. Meyer, L. R. Ram-Mohan, J. Appl. Phys. 89, 5815
-- (2001). [constituent band parameters, bowing]
-- [2] S. Adachi, "Properties of Semiconductor Alloys", Wiley (2009); and
-- S. Adachi, "Physical Properties of III-V Semiconductor Compounds"
-- (1992). [Eg(x), transport, dielectric, thermal]
-- [3] O. Madelung, "Semiconductors: Data Handbook", Springer (2004).
-- ---------------------------------------------------------------------------
function material.name()
local enabled = true
return "AlGaInAs", enabled
end
function material.description()
local enabled = true
return "(AlxGa1-x)0.47In0.53As on InP, x = Al ~ 0.30 (direct gap)", enabled
end
function material.formula()
local enabled = true
return "AlGaInAs", enabled
end
function material.Eg(state)
-- Units: eV
-- Refs: [1],[2]
--
-- Direct gap, lattice-matched to InP, in Al fraction x. 300 K relation
-- [2]: Eg(x) = 0.76 + 0.49*x + 0.20*x^2
-- (0.76 eV at x=0 -> 1.45 eV at x=1). Temperature handled by a
-- Varshni-type shift about 300 K (alpha = 4.0e-4 eV/K, beta = 200 K).
-- x = 0.30 -> ~0.925 eV (~1.34 um) at 300 K. Change al_fraction here
-- and in the functions noted in the header.
local enabled = true
local al_fraction = 0.30
local x = al_fraction
local T = state.T
local eg_300 = 0.76 + 0.49*x + 0.20*x*x
local tshift = 4.0e-4*(90000.0/500.0 - T*T/(T + 200.0))
local value = eg_300 + tshift
return value, enabled
end
function material.Xi(state)
-- Electron affinity
-- Units: eV
-- Refs: [2],[3]
--
-- ~4.45 eV at x = 0.30. Falls with Al (InGaAs ~4.6 -> AlInAs ~4.1 eV);
-- the resulting large conduction-band offset to InP / across the alloy
-- is the key confinement advantage over InGaAsP.
local enabled = true
local value = 4.45
return value, enabled
end
function material.Nc(state)
-- Effective conduction-band density of states
-- Units: m^-3
-- Refs: [2],[3]
--
-- ~4e23 m^-3 at 300 K for x = 0.30 (small direct-valley mass, m_e* ~
-- 0.05-0.07 m0). Endpoints: InGaAs ~2.1e23, AlInAs ~5.4e23 m^-3.
local enabled = true
local T = state.T
local value = 4.0e23*(T/300.0)^1.5
return value, enabled
end
function material.Nv(state)
-- Effective valence-band density of states
-- Units: m^-3
-- Refs: [2],[3]
--
-- ~8e24 m^-3 at 300 K for x = 0.30 (InGaAs ~7.7e24, AlInAs ~9e24 m^-3).
local enabled = true
local T = state.T
local value = 8.0e24*(T/300.0)^1.5
return value, enabled
end
function material.mu_e(state)
-- Low-field electron mobility
-- Units: m^2 V^-1 s^-1
-- Refs: [2]
--
-- ~0.3 m^2/V/s (3000 cm^2/V/s) at x = 0.30 - high (small mass) but
-- alloy-scattering-reduced from InGaAs (~10000-13000 cm^2/V/s) toward
-- AlInAs (~1000-4000 cm^2/V/s). (300/T)^1.5 approximate.
local enabled = true
local T = state.T
local value = 0.30*(300.0/T)^1.5
return value, enabled
end
function material.mue_x(state)
return material.mu_e(state)
end
function material.mue_y(state)
return material.mu_e(state)
end
function material.mue_z(state)
return material.mu_e(state)
end
function material.mu_h(state)
-- Low-field hole mobility
-- Units: m^2 V^-1 s^-1
-- Refs: [2]
--
-- ~0.02 m^2/V/s (200 cm^2/V/s) at x = 0.30 (InGaAs ~300, AlInAs ~100
-- cm^2/V/s). (300/T)^1.5 approximate.
local enabled = true
local T = state.T
local value = 0.02*(300.0/T)^1.5
return value, enabled
end
function material.muh_x(state)
return material.mu_h(state)
end
function material.muh_y(state)
return material.mu_h(state)
end
function material.muh_z(state)
return material.mu_h(state)
end
function material.epsilonr(state)
-- Relative static permittivity
-- Dimensionless
-- Refs: [2],[3]
--
-- ~13.4 at x = 0.30 (InGaAs ~13.9 -> AlInAs ~12.5).
local enabled = true
local value = 13.4
return value, enabled
end
function material.free_to_free_recombination(state)
-- Radiative recombination coefficient
-- Units: m^3 s^-1
-- Refs: representative (see note)
--
-- Direct-gap value ~1e-10 cm^3/s = 1e-16 m^3/s. Representative; refine
-- against measured lifetimes.
local enabled = true
local value = 1.0e-16
return value, enabled
end
function material.auger_Cn(state)
-- Electron Auger recombination coefficient
-- Units: m^6 s^-1
-- Refs: representative (see note)
--
-- ~2e-28 cm^6/s = 2e-40 m^6/s at the InGaAs-rich (narrow-gap) end.
-- Auger is a major loss mechanism in 1.55 um AlGaInAs/InGaAsP lasers
-- and grows sharply as x decreases (gap narrows) - scale accordingly.
local enabled = true
local value = 2.0e-40
return value, enabled
end
function material.auger_Cp(state)
-- Hole Auger recombination coefficient
-- Units: m^6 s^-1
-- Refs: representative (see note)
--
-- As auger_Cn: representative 2e-28 cm^6/s = 2e-40 m^6/s.
local enabled = true
local value = 2.0e-40
return value, enabled
end
function material.ss_srh_trap_energy(state)
-- SRH trap energy relative to the middle of the band gap.
-- Units: eV
--
-- Positive values are above mid-gap (towards the conduction band).
-- Negative values are below mid-gap (towards the valence band).
--
-- Defect-dependent. Lattice-matched InP-based material can be very high
-- quality; set level and density from your own data. Mid-gap default.
local enabled = true
local value = 0.0
return value, enabled
end
function material.ss_srh_Nt(state)
-- SRH trap density
-- Units: m^-3
--
-- Defect-dependent placeholder; set from the intended material
-- quality.
local enabled = true
local value = 1.0e21
return value, enabled
end
function material.ss_srh_sigma_n(state)
-- Electron capture cross section
-- Units: m^2
--
-- Defect-dependent placeholder; set from measurement.
local enabled = true
local value = 1.0e-19
return value, enabled
end
function material.ss_srh_sigma_p(state)
-- Hole capture cross section
-- Units: m^2
--
-- Defect-dependent placeholder; set from measurement.
local enabled = true
local value = 1.0e-19
return value, enabled
end
function material.thermal_kl(state)
-- Thermal conductivity
-- Units: W m^-1 K^-1
-- Refs: [2]
--
-- ~4.5 W/m/K at x = 0.30 - LOW, from strong mass-disorder phonon
-- scattering in this quaternary (well below InP's ~68 or InAs's ~27
-- W/m/K). Weakly dependent in the alloy regime; (300/T)^0.4 approximate.
-- This low kappa contributes to self-heating in InP-based lasers.
local enabled = true
local T = state.T
local value = 4.5*(300.0/T)^0.4
return value, enabled
end
function material.heat_capacity(state)
-- Specific heat capacity
-- Units: J kg^-1 K^-1
-- Refs: [3]
--
-- ~320 J/kg/K near 300 K (interpolated across the constituents).
local enabled = true
local value = 320.0
return value, enabled
end
function material.density(state)
-- Mass density
-- Units: kg m^-3
-- Refs: [3]
--
-- ~5300 kg/m^3 at x = 0.30 (InGaAs ~5500 -> AlInAs ~4650 kg/m^3).
local enabled = true
local value = 5300.0
return value, enabled
end
function material.lattice_constant(state)
-- Cubic lattice constant
-- Units: m
-- Refs: [1],[3]
--
-- FIXED at the InP match, a = 5.8697 A, INDEPENDENT of x (Al substitutes
-- for Ga at constant lattice constant along the InP-matched line).
-- Linear thermal expansion ~4.6e-6 /K (InP-like).
local enabled = true
local T = state.T
local a300 = 5.8697e-10
local expansion = 4.6e-6
local value = a300*(1.0 + expansion*(T - 300.0))
return value, enabled
end
function material.thermal_tau_e(state)
-- Electron energy relaxation time towards the lattice temperature
-- Units: s
--
-- Value basis: III-V family estimate
-- Confidence: Medium
--
-- Reference:
-- https://www.mdpi.com/2673-3978/3/2/16
--
-- Comments:
-- Representative III-V carrier-to-lattice relaxation time. GaAs-like values
-- are typically sub-ps to ps and field dependent.
local enabled = true
local value = 5.000000e-13
return value, enabled
end
function material.thermal_tau_h(state)
-- Hole energy relaxation time towards the lattice temperature
-- Units: s
--
-- Value basis: III-V family estimate
-- Confidence: Medium
--
-- Reference:
-- https://www.mdpi.com/2673-3978/3/2/16
--
-- Comments:
-- Representative III-V carrier-to-lattice relaxation time. GaAs-like values
-- are typically sub-ps to ps and field dependent.
local enabled = true
local value = 5.000000e-13
return value, enabled
end
function material.print()
local state = {
T = 300.0,
x = 0.0,
y = 0.0,
z = 0.0,
photon_density = 0.0,
}
print(string.format("Material: %s", material.name()))
print(string.format("Description: %s", material.description()))
print(string.format("Formula: %s", material.formula()))
print(string.format("Temperature: %.2f K", state.T))
print(string.format("Position: %.6e, %.6e, %.6e m", state.x, state.y, state.z))
print(string.format("Photon density: %.6e m^-3", state.photon_density))
print(string.format("Band gap: %.6f eV", material.Eg(state)))
print(string.format("Electron affinity: %.6f eV", material.Xi(state)))
print(string.format("Electron mobility: %.6e m^2/V/s", material.mu_e(state)))
print(string.format("Hole mobility: %.6e m^2/V/s", material.mu_h(state)))
print(string.format("Nc: %.6e m^-3", material.Nc(state)))
print(string.format("Nv: %.6e m^-3", material.Nv(state)))
print(string.format("Relative permittivity: %.6f", material.epsilonr(state)))
print(string.format("Radiative coeff.: %.6e m^3/s", material.free_to_free_recombination(state)))
print(string.format("Electron Auger coeff.: %.6e m^6/s", material.auger_Cn(state)))
print(string.format("Hole Auger coeff.: %.6e m^6/s", material.auger_Cp(state)))
print(string.format("SRH trap energy: %.6f eV", material.ss_srh_trap_energy(state)))
print(string.format("SRH trap density: %.6e m^-3", material.ss_srh_Nt(state)))
print(string.format("SRH sigma n: %.6e m^2", material.ss_srh_sigma_n(state)))
print(string.format("SRH sigma p: %.6e m^2", material.ss_srh_sigma_p(state)))
print(string.format("Electron energy relax.: %.6e s", material.thermal_tau_e(state)))
print(string.format("Hole energy relax.: %.6e s", material.thermal_tau_h(state)))
print(string.format("Thermal conductivity: %.6e W/m/K", material.thermal_kl(state)))
print(string.format("Heat capacity: %.6e J/kg/K", material.heat_capacity(state)))
print(string.format("Mass density: %.6e kg/m^3", material.density(state)))
end
return material
5. 함수들에 대한 상세 설명
재료 스크립트에 포함된 모든 함수는 동일한 패턴을 따릅니다. 즉, state 테이블을 입력값으로 받아 value 값과 enabled 플래그를 반환합니다. 아래의 각 소절에서는 AlGaInAs 예제에 사용된 함수 그룹들을 상세히 설명합니다.
5.1 state 구조체와 enabled 플래그
각 함수에는 해당 값이 요청되는 소자 내 지점의 국부적 시뮬레이션 조건을 담고 있는 state 객체가 전달됩니다. Lua에서는 이 객체가 테이블 형태로 구현되며, C 언어에 익숙한 사용자라면 이를 struct로 간주하는 것이 적절합니다. C++ 환경에서는 현재 국부 상태 정보를 포함하는 멤버들을 지닌 작은 클래스나 객체로 생각할 수 있습니다. 사용 가능한 필드들은 다음과 같습니다:
state.T— 국부 온도(K).state.x,state.y,state.z— 소자 내 위치 (m).state.photon_density— 국부 광자 밀도 (m-3).
OghmaNano가 함수에 이 로컬 state 데이터를 제공하므로, 재료 파라미터는 단일 고정값에 국한되지 않고 온도, 위치 또는 광자 밀도에 따라 계산될 수 있습니다. 두 번째 반환값인 enabled는 모델이 스크립트에서 반환된 값을 사용할지 여부를 결정합니다. enabled 값이 true일 경우 스크립트 값이 적용되며, false일 경우 표준 편집기에서 설정된 값이 대신 사용됩니다. 이를 통해 스크립트는 변동이 필요한 파라미터만 정의하고 나머지 파라미터들은 일반적인 고정값으로 유지할 수 있습니다.
5.2 식별 정보: name, description, formula
이 세 함수는 물리적 값이 아닌 설명용 문자열을 반환합니다. 이 함수들은 재료를 식별하고 간략한 설명 및 화학식을 제공합니다.
function material.name()
local enabled = true
return "AlGaInAs", enabled
end
function material.description()
local enabled = true
return "(AlxGa1-x)0.47In0.53As on InP, x = Al ~ 0.30 (direct gap)", enabled
end
function material.formula()
local enabled = true
return "AlGaInAs", enabled
end
5.3 밴드 구조: Eg 및 Xi
Eg은 밴드갭(eV) 값을 반환하며 Xi는 전자 친화도(eV) 값을 반환한다. 이 두 값은 각각 전도대와 가전자대의 위치를 결정하며 모델 전반에서 활용된다(섹션 7 참조). 해당 파일에서 가장 중요한 함수는 AlGaInAs의 밴드갭 계산 기능으로, Al 조성비 x를 기반으로 300 K에서의 밴드갭을 산출한 뒤 Varshni형 온도 보정을 적용하므로 최종 결과값은 state.T에 따라 달라진다.
function material.Eg(state)
-- Units: eV. Direct gap, lattice-matched to InP, in Al fraction x.
local enabled = true
local al_fraction = 0.30
local x = al_fraction
local T = state.T
local eg_300 = 0.76 + 0.49*x + 0.20*x*x -- 300 K value from composition
local tshift = 4.0e-4*(90000.0/500.0 - T*T/(T + 200.0)) -- Varshni-type shift
local value = eg_300 + tshift
return value, enabled
end
function material.Xi(state)
-- Electron affinity, units: eV
local enabled = true
local value = 4.45
return value, enabled
end
예제: x = 0.30일 때 300 K에서의 조성 항에 따라 Eg(300 K) ≈ 0.76 + 0.49(0.30) + 0.20(0.30)² ≈ 0.925 eV (약 1.34 μm)가 산출됩니다. Eg에서는 state.T 값을 읽어들이므로, 소자 온도가 상승하면 바르슈니 항에 의해 밴드갭이 자동적으로 좁아지는데 이는 고정된 값으로는 결코 구현할 수 없는 현상입니다.
5.4 상태밀도: Nc 및 Nv
Nc 및 Nv는 각각 유효한 전도대 및 가전자대의 상태밀도(m⁻³)를 반환합니다. 본 예시에서는 두 값 모두 300 K에서 측정된 값이며, (T/300)^1.5 식에 따라 온도에 따라 스케일링됩니다. 이는 표준적인 포물선형 밴드 모델의 결과와 일치합니다. 이러한 온도 의존성은 현재 사용 중인 재료 모델에 특화된 것이며, 다른 재료의 경우 상황에 맞게 상이한 온도 의존성을 적용할 수 있습니다.
function material.Nc(state)
local enabled = true
local T = state.T
local value = 4.0e23*(T/300.0)^1.5
return value, enabled
end
function material.Nv(state)
local enabled = true
local T = state.T
local value = 8.0e24*(T/300.0)^1.5
return value, enabled
end
5.5 이동도: mu_e, mu_h 및 방향별 별칭
mu_e 및 mu_h는 저전계 조건에서의 전자 및 정공 전하 캐리어 이동도(m2 V-1 s-1)를 반환합니다. 본 예시에서는 이동도가 (300/T)1.5 식에 따라 온도에 따라 변화하지만, 이러한 온도 의존성은 특정 재료 모델에 따른 것이며 필요에 따라 다른 수식으로 대체될 수 있습니다. 예를 들어 유기 반도체의 경우 이동도는 활성화형 또는 호핑형 온도 의존성을 따르도록 정의될 수 있습니다. OghmaNano는 방향 의존적 이동도도 지원하므로 해당 파일에는 mue_x, mue_y, mue_z 및 muh_x, muh_y, muh_z가 포함되어 있습니다. 등방성 재료를 다루는 본 예시에서는 이들 모두 동일한 스칼라 값을 반환하지만, 비등방성 재료의 경우 각 방향별로 별도의 수식을 지정할 수 있습니다.
function material.mu_e(state)
-- Low-field electron mobility, units: m^2 V^-1 s^-1
local enabled = true
local T = state.T
local value = 0.30*(300.0/T)^1.5
return value, enabled
end
function material.mue_x(state) return material.mu_e(state) end
function material.mue_y(state) return material.mu_e(state) end
function material.mue_z(state) return material.mu_e(state) end
function material.mu_h(state)
-- Low-field hole mobility, units: m^2 V^-1 s^-1
local enabled = true
local T = state.T
local value = 0.02*(300.0/T)^1.5
return value, enabled
end
function material.muh_x(state) return material.mu_h(state) end
function material.muh_y(state) return material.mu_h(state) end
function material.muh_z(state) return material.mu_h(state) end
5.6 유전율: epsilonr
epsilonr은 드리프트-확산 해석기에서 전기적 특성을 결정하는 무차원 값인 상대 정적 유전율을 반환합니다.
function material.epsilonr(state)
-- Relative static permittivity, dimensionless
local enabled = true
local value = 13.4
return value, enabled
end
5.7 재결합: 방사성 재결합 및 오제 재결합
free_to_free_recombination은 밴드간(복사성) 재결합 계수(m3 s-1)를 반환하며, auger_Cn와 auger_Cp는 각각 전자 및 정공의 오제 재결합 계수(m6 s-1)를 반환합니다. 오제 재결합은 밴드갭이 좁은 III-V족 반도체 소자에서 주요한 손실 경로이며, 밴드갭이 좁아질수록 그 영향력이 급격히 증가하므로 이러한 계수들은 보다 고급형 스크립트에서 조성이나 온도에 따라 변화하는 수식의 구성 요소로 활용될 수 있습니다.
function material.free_to_free_recombination(state)
-- Radiative recombination coefficient, units: m^3 s^-1
local enabled = true
local value = 1.0e-16
return value, enabled
end
function material.auger_Cn(state)
-- Electron Auger coefficient, units: m^6 s^-1
local enabled = true
local value = 2.0e-40
return value, enabled
end
function material.auger_Cp(state)
-- Hole Auger coefficient, units: m^6 s^-1
local enabled = true
local value = 2.0e-40
return value, enabled
end
5.8 SRH 트랩
네 개의 SRH 트랩 함수는 단일 평형 트랩 준위를 기술합니다: ss_srh_trap_energy (밴드갭 중앙에 대비한 트랩 에너지, 단위: eV; 양수일 경우 전도대 쪽을 의미함), ss_srh_Nt (트랩 밀도, 단위: m-3), 그리고 ss_srh_sigma_n 및 ss_srh_sigma_p (전자와 정공의 포획 단면적, 단위: m2). 이 값들은 결함 상태 및 시료 특성에 크게 의존하므로 예시에 제시된 수치들은 사용자가 직접 측정한 데이터로 대체해야 하는 참고용 값일 뿐입니다.
function material.ss_srh_trap_energy(state)
-- Trap energy relative to mid-gap, units: eV
local enabled = true
local value = 0.0
return value, enabled
end
function material.ss_srh_Nt(state)
-- SRH trap density, units: m^-3
local enabled = true
local value = 1.0e21
return value, enabled
end
function material.ss_srh_sigma_n(state)
-- Electron capture cross section, units: m^2
local enabled = true
local value = 1.0e-19
return value, enabled
end
function material.ss_srh_sigma_p(state)
-- Hole capture cross section, units: m^2
local enabled = true
local value = 1.0e-19
return value, enabled
end
5.9 열적 및 구조적 매개변수
나머지 물리 함수들은 재료의 열적 및 구조적 특성을 기술합니다: thermal_kl (격자 열전도도, 단위: W m-1 K-1), heat_capacity (단위: J kg-1 K-1), density (단위: kg m-3), lattice_constant (단위: m이며 300 K 기준으로 선형 열팽창이 적용됨), 그리고 전하 캐리어 에너지 완화 시간인 thermal_tau_e 및 thermal_tau_h (단위: s)입니다. thermal_kl와 lattice_constant 함수는 온도에 따른 값을 반환하기 위해 state.T를 호출한다는 점에 유의하시기 바랍니다.
function material.thermal_kl(state)
-- Thermal conductivity, units: W m^-1 K^-1
local enabled = true
local T = state.T
local value = 4.5*(300.0/T)^0.4
return value, enabled
end
function material.heat_capacity(state)
-- Specific heat capacity, units: J kg^-1 K^-1
local enabled = true
local value = 320.0
return value, enabled
end
function material.density(state)
-- Mass density, units: kg m^-3
local enabled = true
local value = 5300.0
return value, enabled
end
function material.lattice_constant(state)
-- Cubic lattice constant, units: m (with thermal expansion)
local enabled = true
local T = state.T
local a300 = 5.8697e-10
local expansion = 4.6e-6
local value = a300*(1.0 + expansion*(T - 300.0))
return value, enabled
end
function material.thermal_tau_e(state)
-- Electron energy relaxation time, units: s
local enabled = true
local value = 5.000000e-13
return value, enabled
end
function material.thermal_tau_h(state)
-- Hole energy relaxation time, units: s
local enabled = true
local value = 5.000000e-13
return value, enabled
end
5.10 print() — 자체 테스트 보조 도구
마지막으로 print()은 재료의 물성값이 아니라 편의를 위한 함수입니다. 이 함수는 대표적인 state 테이블(온도 300 K, 좌표 원점, 광자 밀도 0)을 생성한 뒤 스크립트가 계산한 모든 값을 출력합니다. 이 기능은 시뮬레이션에 사용하기 전에 명령줄이나 독립형 Lua 인터프리터에서 스크립트를 검증할 때 유용하며, 산출된 수치가 예상 범위 내에 있는지 신속히 확인할 수 있게 해줍니다.
6. 시뮬레이션에서 스크립트 사용하기
지금까지의 설명은 Materials 데이터베이스에 저장된 Lua 스크립트들에 초점을 맞추었습니다. 실제 소자 시뮬레이션에서 이러한 스크립트들을 활용하려면 대상 층에 대한 전기적 파라미터 편집기를 열어야 합니다. 이 편집기는 두 가지 방식으로 작동할 수 있습니다. 즉, sim.json에 저장된 일반적인 고정 파라미터 값을 사용하거나, Lua 재료 스크립트로부터 필요한 파라미터 값들을 직접 가져올 수 있습니다.
기본적으로 스크립팅 기능은 비활성화되어 있으며 편집기는 일반적인 방식으로 작동합니다 ??. 각 매개변수는 sim.json에 저장된 수정 가능한 수치값으로 표시됩니다. 이 모드에서는 Lua 재료 스크립트가 사용되지 않습니다.
Script 버튼을 클릭하면 재료 스크립팅 기능이 활성화됩니다 ??. 이때 스크립트에 의해 지정된 매개변수들은 에디터 내에서 “값은 스크립트 참조” 형태로 표시됩니다. 반면 해당 Lua 함수가 비활성화된 매개변수들은 sim.json에 저장된 고정값을 그대로 사용합니다. 이러한 방식을 통해 스크립트는 필요한 속성들만 제어하고 나머지 매개변수들은 변경 없이 유지할 수 있습니다.
sim.json에 직접 저장되며 스크립트는 사용되지 않습니다.
GaAs.lua)가 표시됩니다.
sim.json에 기록됩니다.
sim.json에 데이터를 입력하기 전에 표시되는 확인 대화상자로, 변경될 모든 값들을 나열합니다.스크립팅 기능이 활성화되면 매개변수 탭 옆에 코드 편집기 탭이 나타납니다 ??. 이를 통해 사용자는 재료 데이터베이스로 돌아갈 필요 없이 시뮬레이션 중에 Lua 재료 스크립트를 직접 검토 및 수정할 수 있습니다.
6.1 스크립트 선택 또는 그 값을 시뮬레이션에 복사하기
스크립트 버튼 옆에 위치한 소형 메뉴에서는 재료 스크립트를 활용하는 두 가지 방식을 제공합니다 ??:
- 재료 스크립트 가져오기 — 재료 데이터베이스를 열어 시뮬레이션에 사용할 Lua 재료 스크립트를 선택할 수 있게 해줍니다.
- JSON 데이터 생성 — 선택된 스크립트를 실행하여 산출된 파라미터 값들을
sim.json에 지정된 고정값들로 복사합니다.
이 두 방식은 각각 다른 목적을 갖는다. 스크립트를 직접 사용할 경우 시뮬레이션 중에도 해당 함수들이 계속 작동한다. 온도, 위치, 조성비 또는 광자 밀도와 같은 변수에 따라 매개변수가 변화해야 하는 경우 이 방식이 적합하다.
Eg 및 Xi의 변경 사항이 자동으로 이곳에 반영됩니다.또한, 스크립트가 명확하게 정의된 초기값들을 제공해주길 원하지만 스크립트가 계속 실행될 필요는 없는 경우에는 ‘스크립트로부터 JSON 채우기’ 기능을 활용할 수 있습니다. OghmaNano는 해당 스크립트를 평가한 뒤 산출된 수치들을 일반적인 매개변수 필드에 기록하며, 사용자는 이후 해당 값들을 일반적인 방식으로 수동으로 수정할 수 있습니다.
sim.json에 데이터를 입력하는 과정에서 시뮬레이션에 이미 존재하는 값들이 덮어쓰여질 수 있으므로, OghmaNano는 먼저 확인 대화상자 ??를 표시합니다. 이 대화상자에는 사용 중인 스크립트 정보와 함께 변경될 각 매개변수의 기존 값 및 제안된 값이 나열됩니다. 사용자가 작업을 확인하기 전까지는 어떠한 값도 변경되지 않습니다.
동일한 재료 스크립트를 활용하는 방법은 두 가지가 있다. 시뮬레이션 중에 파라미터를 변경해야 할 경우 스크립트를 활성 상태로 유지하는 방법과, Populate json from script 기능을 이용해 이후 그래픽 인터페이스에서 편집 가능한 고정된 초기값들을 생성하는 방법이다.
7. 스크립트에서 생성된 값들이 사용되는 곳
재료 스크립트에서 생성된 값들은 전기 해석기에서만 사용되는 것이 아니라 모델 전반에서 활용됩니다. Eg 및 Xi와 같은 값들은 필요한 모든 위치에서 밴드 가장자리 위치를 결정합니다. 예를 들어, 밴드 다이어그램 및 생성률 뷰어에 표시되는 에너지 준위 역시 이러한 값들로부터 도출됩니다 ??. 따라서 스크립트 내에서 밴드갭이나 전자 친화도를 수정하면 이 값들이 밴드 다이어그램, 광학 모델 및 전기 해석기 전반에 자동으로 반영됩니다.
흔히 발생하는 오류들
local material = {}선언문은 파일의 처음 1000바이트 이내에 위치해야 하며, 그렇지 않으면 OghmaNano가 이를 재료 스크립트로 인식하지 못합니다.- 각 함수는 두 개의 값, 즉 해당 물리량과
enabled플래그를 반환해야 합니다. 특정 박스에는 해당 함수가enabled상태일 때에만 “값은 스크립트를 참조하십시오”라는 문구가 표시됩니다. - 모든 계산은 SI 단위를 사용하십시오 (m, m⁻³, m²·V⁻¹·s⁻¹, 필요 시 eV 단위도 사용). 산출된 값들의 크기 순서를 대략적으로 검토해 보세요 — 합리적인 수준인지 확인하시기 바랍니다.
- 스크립트를 통해 JSON 데이터를 생성하면
sim.json에 저장된 고정값들이 덮어쓰여집니다. 수락하기 전에 확인 대화상자를 꼭 확인하시기 바랍니다.
요약 및 다음 단계
- Lua 기반 재료 스크립트는 온도, 위치, 조성비 또는 광자 밀도의 함수로서 물성값을 정의합니다. 이 스크립트는 선택 사항이며 오직 물성값이 변화하거나 외부 소스에 의해 결정되는 경우에만 필요합니다.
- 파일은 처음 1000바이트 내에서
local material = {}을 통해 인식되며, 재료 폴더 내에 위치할 수도 있고(해당 재료와 함께 표시됨) 독립적으로 존재할 수도 있습니다(이 경우.lua파일로 표시됨). - 하나의 전기 스크립트가 여러 개의 광학 데이터셋(n/k)에 공통적으로 사용되는 경우가 많습니다. 모델은 이때 가장 적합한 파일을 선택하며, 재료 수준에서 스크립트가 존재하지 않을 경우 역순으로 탐색을 수행합니다.
- 시뮬레이션 과정에서 전기적 파라미터 편집기는 고정된
sim.json값 또는 스크립트를 활용할 수 있습니다. ‘스크립트에서 JSON 생성’ 기능을 이용하면 스크립트로부터 산출된 값들을 고정 입력란에 불러올 수 있습니다. Eg및Xi와 같은 값들은 밴드 다이어그램을 포함한 모델 전반에서 사용됩니다.
다음으로: 데이터베이스 저장 방식에 관한 Part C로 돌아가거나 광학 데이터베이스 및 추가 재료 다운로드를 참조하십시오.