Головна Приклади Знімки екрана Інструкція користувача Логотип Bluesky. YouTube ☰
OghmaNano Мультифізична платформа для моделювання оптоелектронних пристроїв і фотонних систем. ЗАВАНТАЖИТИ Короткий посібник зі швидкого старту

Використання мови Lua для створення скриптів для моделювання напівпровідникових пристроїв.

OghmaNano підтримує використання Lua для створення скриптів матеріалів як альтернативу введенню фіксованих параметрів матеріалів окремо через графічний редактор електричних параметрів. Для більшості симуляцій достатньо фіксованих значень, які вводяться через графічний інтерфейс; використання Lua-скриптів передбачено для випадків, коли електричні, оптичні або теплові властивості матеріалів необхідно визначати програмно або коли вони змінюються залежно від температури, положення (x, y, z), складу або щільності фотонів. Таким чином, такі параметри, як ширина забороненої зони, спорідненість електронів, рухливість носіїв заряду, коефіцієнти рекомбінації та теплопровідність, можуть бути виражені у вигляді функцій, а не окремих констант. На цій сторінці пояснюється, як структуровані Lua-скрипти матеріалів, як OghmaNano їх знаходить і вибирає, як вони пов’язані з матеріалами та оптичними наборами даних n/k, і як використовуються параметри, визначені в скриптах, у процесі симуляції.

You do not need a script for most work. As explained in Part A, fixed material parameters can be typed straight into the standard editors. A Lua script is only needed when you want a property to vary with temperature, position, composition, or photon density, or when you want a single well-defined, self-documenting source for a material's electrical parameters.

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

Будь-який файл .lua у базі даних матеріалів OghmaNano розглядається як скрипт матеріалу, якщо оголошення таблиці local material = {} міститься в перших 1000 байтах файлу. Це означає, що заголовок ліцензії або блок пояснювальних коментарів можуть з’являтися перед оголошенням, за умови, що маркер залишається у верхній частині файлу. Ви можете переглядати та редагувати скрипт матеріалу безпосередньо з вкладки редактора коду в редакторі матеріалів ??.

Матеріальний скрипт може визначати будь-яку кількість параметрів, або лише необхідну їх частину. Він може визначати лише ширину забороненої зони та спорідненість електронів, або повний набір параметрів, що описують зонну структуру, транспортні властивості, рекомбінацію та теплові характеристики. Функції, які вам не потрібні, можна просто виключити або повернути значення enabled = false, щоб модель використовувала значення, збережене в стандартних редакторах.

OghmaNano Material editor showing the Code editor tab with a Lua material script defining mue_x, mue_y, mue_z and mu_h functions for the material m-MTDATA:TPBi
Вкладка «Редактор коду» в редакторі матеріалів, яка відображає скрипт Lua для матеріалу. Кожна властивість є невеликою функцією, що повертає значення та enabled прапорець.
OghmaNano Open file dialog inside the material folder MAPI-CH3NH3PbI3, showing four optical n/k datasets (Ball, Leguy, Leguy-hydrated, Phillips) shown as atom icons alongside a single electrical Lua script CH3NH3PbI3.lua shown as a code-file icon
Одна папка містить чотири набори оптичних даних (n/k) і один файл зі скриптом для електричного моделювання (CH3NH3PbI3.lua). OghmaNano обирає найбільш відповідний файл для проведення моделювання.

2. Де на диску зберігаються файли зі сценаріями.

Матеріальний скрипт може зберігатися в одному з двох місць, і від цього залежить те, як він відображатиметься в OghmaNano:

На рисунку ?? показано скрипт, який зберігається в папці з матеріалами. Папка MAPI-CH3NH3PbI3, що містить дані про перовськит, містить декілька оптичних наборів даних (n/k) — Ball, Leguy, Leguy-hydrated і Phillips, які представлені у вигляді іконок атомів, а також один електричний скрипт CH3NH3PbI3.lua, представлений у вигляді іконки файлу коду.

3. Один електричний сигнал, декілька наборів оптичних даних.

Зазвичай для одного матеріалу існує кілька наборів оптичних констант, але лише один набір відповідних електричних параметрів. Різні дослідницькі групи вимірюють показники заломлення (n) і коефіцієнти поглинання (k) в різних діапазонах довжин хвиль, використовуючи різні зразки та різні методи, тому корисно зберігати кожен із цих наборів оптичних даних окремо та вибирати між ними під час моделювання. На відміну від цього, електричні параметри (ширина забороненої зони, спорідненість, рухливість тощо) зазвичай найкраще визначати як єдиний, узгоджений набір для даного матеріалу. Саме таку структуру показано в ??: чотири набори даних n/k і один набір електричних параметрів.

Під час використання матеріалу OghmaNano намагається автоматично вибрати найбільш відповідний файл. Якщо для конкретного матеріалу, який моделюється, не передбачено окремого скрипта, модель здійснює пошук у структурі папок матеріалу, щоб знайти придатний скрипт для використання. Це означає, що ви можете додати один електричний скрипт на відповідному рівні, і він застосовуватиметься до наборів даних, згрупованих під ним, без необхідності повторювати ті самі електричні параметри для кожної оптичної версії.

Навіщо їх розділяти? Оптичні дані часто є тим, що змінюється між вимірюваннями: плівку, виміряну однією групою на довжині хвилі 800 нм, а іншою – на 1100 нм, дає два абсолютно різні набори даних n/k. Електричні властивості матеріалу не пов’язані з діапазоном довжин хвиль оптичного вимірювання, тому єдиний набір електричних параметрів забезпечує узгодженість фізичних характеристик незалежно від того, з яким набором оптичних даних його поєднано.

4. Структура матеріального сценарію

Наведений нижче приклад являє собою повний набір інструкцій для створення електричного матеріалу AlGaInAs — чотирикомпонентного матеріалу на основі InP, який використовується для виготовлення лазерів і детекторів для телекомунікацій. Він наведено повністю, щоб ви могли побачити, як створюється реальний, повністю документований набір інструкцій; кожна функція потім детально розглядається та пояснюється в розділі Розділ 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++ у вигляді невеликого класу/об’єкта, члени якого містять поточний локальний стан. Доступні поля:

Оскільки 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 повертає ширину забороненої зони (в електрон-вольтах), а Xi – спорідненість електронів (в електрон-вольтах). Разом ці дві величини визначають положення країв зони провідності та валентної зони, і вони використовуються в усій моделі (див. Розділ 7). Ширина забороненої зони AlGaInAs є найважливішою функцією у файлі: вона обчислює ширину забороненої зони при 300 K на основі частки Al (x), а потім застосовує температурний зсув типу Варшні, тому отримане значення залежить від 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)2 ≈ 0,925 еВ (приблизно 1,34 мкм). Оскільки Eg визначає state.T, підвищення температури пристрою автоматично зменшує ширину забороненої зони завдяки члену Варшні — що неможливо було б досягти за допомогою фіксованого значення.

5.4 Щільність станів: Nc і Nv

Nc і Nv визначають ефективну щільність станів провідної та валентної зон (м⁻³). У цьому прикладі обидва значення наведено для температури 300 К і масштабовано відповідно до температури за формулою (T/300)¹․⁵, що відповідає стандартному результату для параболічної зони. Ця температурна залежність є специфічною для використовуваної тут моделі матеріалу; для інших матеріалів можна використовувати інші температурні залежності, якщо це доцільно.

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 повертають значення рухливості електронів і дірок при низьких значеннях магнітного поля (м²/В·с). У цьому прикладі рухливість змінюється пропорційно температурі за формулою (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 повертає коефіцієнт рекомбінації між валентною зоною та зоною провідності (радіативної рекомбінації) (м³/с), тоді як auger_Cn і auger_Cp повертають коефіцієнти аугерівської рекомбінації для електронів і дірок (м⁶/с). Аугерівська рекомбінація є основним каналом втрат в напівпровідникових пристроях 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 Пастки для відлову самців плодових мушок.

Чотири функції Шоклі–Ріда–Холла описують єдиний рівень рівноважної пастки: ss_srh_trap_energy (енергія пастки відносно середини забороненої зони, еВ; додатне значення вказує на напрямок до зони провідності), ss_srh_Nt (щільність пасток, м-3) і ss_srh_sigma_n / ss_srh_sigma_p (ефективні перерізи захоплення електронів і дірок, м2). Ці параметри значною мірою залежать від дефектів і конкретного зразка, тому наведені в прикладі значення є лише умовними, які слід замінити на власні виміряні дані.

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 (теплопровідність кристалічної решітки, В м⁻¹ К⁻¹), heat_capacity (Дж кг⁻¹ К⁻¹), density (кг м⁻³), lattice_constant (м, при лінійному тепловому розширенні при температурі близько 300 К) і час релаксації енергії носіїв thermal_tau_e / thermal_tau_h (с). Зверніть увагу, як 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 К, в початковій точці, нульова щільність фотонів) і виводить усі значення, які обчислює скрипт. Це корисно для перевірки скрипта через командний рядок або в окремому інтерпретаторі Lua перед використанням у симуляції – це швидкий спосіб переконатися, що отримані значення відповідають очікуваним.

6. Використання сценарію в симуляції.

Наразі обговорення зосереджено на скриптах Lua, які зберігаються в базі даних «Матеріали». Щоб використати один із цих скриптів у реальній симуляції пристрою, відкрийте редактор електричних параметрів для потрібного шару. Редактор може працювати двома різними способами: він може використовувати звичайні фіксовані значення параметрів, що зберігаються в sim.json, або отримувати вибрані значення параметрів безпосередньо зі скрипта Lua.

За замовчуванням, виконання скриптів вимкнено, і редактор працює у звичайному режимі ??. Кожен параметр представлений у вигляді числового значення, яке можна редагувати, і зберігається в sim.json. У цьому режимі скрипт матеріалу Lua не використовується.

Натиснувши кнопку «Сценарій», можна активувати редагування матеріалів за допомогою сценарію ??. Параметри, задані в сценарії, потім замінюються в редакторі на «Див. значення в сценарії». Параметри, для яких відповідні функції Lua вимкнено, продовжують використовувати фіксовані значення, що зберігаються в sim.json. Це дозволяє сценарію контролювати лише ті властивості, які потребують редагування за допомогою сценарію, залишаючи всі інші параметри без змін.

OghmaNano Electrical parameter editor with the Script button off, showing ordinary fixed numeric values typed into each box (electron mobility 0.85, hole mobility 0.04, Xi 4.05, Eg 1.42, and so on) stored in sim.json
Режим скриптів вимкнено: фіксовані значення зберігаються безпосередньо в sim.json, і скрипт не використовується.
OghmaNano Electrical parameter editor with the Script button depressed, showing Parameters and Code editor tabs and every parameter box greyed out reading See script for value
У налаштуваннях сценарію: для ввімкнених параметрів тепер відображається напис «Див. значення в сценарії», і їхні значення обчислюються за допомогою сценарію Lua.
OghmaNano Electrical parameter editor Code editor tab showing the GaAs.lua material script source, with material.name, material.description and material.formula functions visible
Вкладка «Редактор коду» в редакторі електричних параметрів, що відображає активний скрипт матеріалу (GaAs.lua).
OghmaNano Electrical parameter editor showing the Script dropdown menu with two options: Import material script and Populate json from script
Меню «Сценарій»: пункт «Імпорт сценарію» дозволяє вибрати файл Lua; пункт «Заповнити JSON зі сценарію» записує значення сценарію в sim.json.
OghmaNano confirmation dialog listing the values that would be updated when populating the JSON from GaAs.lua, showing each parameter changing from its old to its new value
Перед заповненням поля sim.json з’являється діалогове вікно підтвердження, в якому перелічуються всі значення, які будуть змінені.

Коли ввімкнено редагування скриптів, поруч із вкладкою «Параметри» ?? з’являється вкладка «Редактор коду». Це дає змогу переглядати та редагувати скрипт матеріалу Lua безпосередньо в середовищі моделювання, не повертаючись до бази даних матеріалів.

6.1 Вибір сценарію або копіювання його значень у модель симуляції.

Невелике меню поруч із кнопкою «Сценарій» пропонує два різні способи використання матеріалу сценарію ??:

Ці два підходи слугують різним цілям. Якщо сценарій використовується безпосередньо, його функції залишаються активними під час моделювання. Це доцільний режим, коли параметр має змінюватися залежно від таких величин, як температура, положення, склад або щільність фотонів.

OghmaNano Optical simulation editor showing the generation rate profile overlaid on a band-energy diagram for an ITO / PEDOT:PSS / P3HT:PCBM / Al device, with the labelled energy levels (-4.7, -5.1, -3.8, -4.9, -3.5, -8.3 eV) taken from the material scripts
Інструмент для відображення діаграм зон / швидкості генерації. Позначені рівні енергії беруться з файлів матеріалів, тому зміни в параметрах Eg і Xi автоматично відображаються тут.

Як альтернатива, можна використати функцію «Заповнення JSON зі скрипту», коли потрібно, щоб скрипт надавав чітко визначений набір початкових значень, але не потрібно, щоб скрипт залишався активним. OghmaNano обробляє скрипт, записує отримані значення у звичайні поля параметрів, і ці значення потім можна редагувати вручну звичайним способом.

Оскільки заповнення sim.json може перезаписувати значення, які вже є в моделюванні, OghmaNano спочатку відображає діалогове вікно підтвердження ??. У цьому вікні відображається назва використовуваного скрипта та кожен параметр, який буде змінено, разом із його поточним і запропонованим значенням. Жодні значення не змінюються, доки операцію не буде підтверджено.

Існує два способи використання одного й того ж скрипта: зберігайте скрипт активним, коли параметри потрібно змінювати під час моделювання, або використовуйте функцію «Заповнити JSON зі скрипта», щоб отримати набір фіксованих початкових значень, які згодом можна буде редагувати за допомогою звичайного графічного інтерфейсу.

7. Де використовуються значення, визначені у скрипті.

Значення, отримані за допомогою матеріального скрипта, використовуються в усій моделі, а не лише в електричному розв’язувачі. Такі величини, як Eg і Xi, визначають положення країв зони провідності в усіх необхідних місцях. Наприклад, рівні енергії, відображені на діаграмі зон / графіку швидкості генерації, беруться з цих значень ??. Отже, редагування ширини забороненої зони або спорідненості в скрипті автоматично поширюється на діаграму зон, оптичну модель і електричний розв’язувач.

Найпоширеніші помилки

Підсумок і наступні кроки

Далі: Перейдіть до розділу Частина C, де описано, як зберігаються дані в базі, або перегляньте розділи Оптична база даних та Завантаження додаткових матеріалів.