InGaN material model
1. Introduction
This page contains the OghmaNano material model for InGaN (In(x)Ga(1-x)N).
In(x)Ga(1-x)N ternary alloy (wurtzite)
The model is written in Lua and provides simulation-ready material parameterisations for use within OghmaNano. For documentation, licensing, references, and information about the scope and accuracy of these models, see the material scripting documentation.
2. Lua material model
Supporting definitions
-- See end of file for copyright, licensing and documentation links.
local material = {}
-- =====================================================================
-- In(x)Ga(1-x)N ternary alloy (wurtzite).
--
-- Composition convention:
-- x = In fraction (Ga fraction = 1 - x)
-- (This is a ternary: state.y is not used.)
--
-- Binary corners:
-- (x=0) -> GaN
-- (x=1) -> InN
--
-- Most properties are linear (Vegard-style) interpolation between the
-- GaN and InN corner values, each evaluated at state.T:
--
-- Q(x) = (1-x) Q_GaN + x Q_InN
--
-- Both corners are direct-gap, so there is NO Gamma-X crossover; the
-- band gap is a single direct gap with (large) bowing (see Eg). The
-- thermal conductivity uses an alloy-resistivity model.
--
-- InGaN is the active material of blue/green LEDs and laser diodes.
-- Low-In compositions (x ~ 0.15-0.20) emit blue (~450 nm); higher In
-- pushes toward green and beyond.
--
-- FIRST-PASS LIMITATIONS (important for this alloy):
-- * PIEZOELECTRIC / SPONTANEOUS POLARIZATION: strained InGaN quantum
-- wells on GaN carry very large internal fields (quantum-confined
-- Stark effect). These dominate real InGaN LED behaviour (redshift,
-- reduced electron-hole overlap, "green gap", droop) and are NOT
-- represented by any scalar in this file.
-- * The bowing parameter is uncertain (see Eg), and real InGaN
-- suffers composition inhomogeneity / phase separation at higher
-- In, so actual emission energies deviate from this smooth model.
-- * Electron MOBILITY is interpolated linearly and is OPTIMISTIC;
-- alloy scattering suppresses it strongly (see mu_e).
-- =====================================================================
-- Two-corner linear interpolation helper (v0 at x=0 = GaN).
Linear interpolation (lerp)
local function lerp(x, v_GaN, v_InN)
return (1.0 - x)*v_GaN + x*v_InN
end
-- Varshni helper (eV).
Temperature dependence of the band gap (Varshni equation) (varshni)
local function varshni(T, Eg0, a, b)
return Eg0 - a*T*T/(T + b)
end
Material name (material.name)
function material.name()
local enabled = true
return "InGaN", enabled
end
Material description (material.description)
function material.description()
local enabled = true
return "In(x)Ga(1-x)N ternary alloy (wurtzite)", enabled
end
Chemical formula (material.formula)
function material.formula()
local enabled = true
return "In(x)Ga(1-x)N", enabled
end
Band gap energy (material.Eg)
function material.Eg(state)
-- Units: eV
--
-- Direct band gap of wurtzite In(x)Ga(1-x)N.
--
-- Method:
-- 1. Evaluate the direct gap of each corner at state.T using
-- Varshni (Y. P. Varshni, Physica 34, 149, 1967).
-- 2. Linearly interpolate.
-- 3. Subtract bowing b*x(1-x).
--
-- Parameters:
-- GaN: Eg0=3.510, a=9.09e-4, b=830 (Vurgaftman/Meyer 2003)
-- InN: Eg0=0.69, a=4.14e-4, b=454 (post-2002 revised gap)
-- Bowing b = 1.4 eV (I. Vurgaftman and J. R. Meyer, J. Appl.
-- Phys. 94, 3675, 2003).
--
-- Gives Eg(300 K) = 3.44 eV (x=0, GaN), ~2.8 eV at x=0.15 (blue),
-- and 0.64 eV (x=1, InN).
--
-- IMPORTANT: the InGaN bowing is uncertain and has been reported
-- from ~1.4 eV up to ~3 eV, sometimes as composition dependent.
-- Combined with polarization (QCSE) and In inhomogeneity, real
-- InGaN emission energies can differ substantially from this smooth
-- bulk model. Adjust b (or the emission energy) to your material.
local enabled = true
local T = state.T
local x = state.x
local Eg_GaN = varshni(T, 3.510, 9.09e-4, 830.0)
local Eg_InN = varshni(T, 0.69, 4.14e-4, 454.0)
local value = lerp(x, Eg_GaN, Eg_InN) - 1.4*x*(1.0 - x)
return value, enabled
end
Deformation potential Xi (material.Xi)
function material.Xi(state)
-- Electron affinity
-- Units: eV
--
-- Linear interpolation of the binary corner affinities:
-- GaN 4.1, InN 5.8 eV.
--
-- Note: the InN corner affinity is exceptionally large and itself
-- uncertain; InGaN band offsets and the surface Fermi-level
-- behaviour are better set from measured alignments. The affinity
-- rises strongly with In content. Treat as approximate.
local enabled = true
local x = state.x
local value = lerp(x, 4.1, 5.8)
return value, enabled
end
Electron effective mass (material.me)
function material.me(state)
local enabled = true
local x = state.x -- In fraction, InxGa1-xN, c-plane
-- GaN 0.20 -> InN 0.07 (bowing exists; linear first-pass) (Vurgaftman 2003)
local value = 0.20 - 0.13*x
return value, enabled
end
Hole effective mass (material.mh)
function material.mh(state)
local enabled = true
local x = state.x
-- HH along c: GaN 1.9 -> InN 1.6. WARNING: multiband VB, approximate.
local value = 1.9 - 0.34*x
return value, enabled
end
Effective conduction-band density of states (material.Nc)
function material.Nc(state)
-- Effective conduction-band density of states
-- Units: m^-3
--
-- Linear interpolation of the binary corner values, each with the
-- (T/300)^1.5 parabolic-band temperature dependence.
-- Nc(300 K): GaN 2.3e24, InN 4.6e23 m^-3.
local enabled = true
local T = state.T
local x = state.x
local f = (T/300.0)^1.5
local value = lerp(x, 2.3e24, 4.6e23)*f
return value, enabled
end
Effective valence-band density of states (material.Nv)
function material.Nv(state)
-- Effective valence-band density of states
-- Units: m^-3
--
-- Linear interpolation of the binary corner values, each with the
-- (T/300)^1.5 temperature dependence.
-- Nv(300 K): GaN 4.6e25, InN 5.1e25 m^-3.
local enabled = true
local T = state.T
local x = state.x
local f = (T/300.0)^1.5
local value = lerp(x, 4.6e25, 5.1e25)*f
return value, enabled
end
Electron mobility (material.mu_e)
function material.mu_e(state)
-- Low-field electron mobility
-- Units: m^2 V^-1 s^-1
--
-- Linear interpolation of the binary corner mobilities, each with
-- its own phonon-limited temperature dependence:
-- GaN 0.1 * (300/T)^1.5
-- InN 0.32 * (300/T)^1.5
--
-- WARNING: this linear interpolation is OPTIMISTIC. Alloy-disorder
-- scattering (strong for InGaN) suppresses the real mobility far
-- below the interpolation: measured InGaN even at modest In content
-- is often only ~100-300 cm^2/V/s (0.01-0.03 m^2/V/s). Override
-- with a measured mobility for quantitative work.
local enabled = true
local T = state.T
local x = state.x
local m_GaN = 0.1 *(300.0/T)^1.5
local m_InN = 0.32*(300.0/T)^1.5
local value = lerp(x, m_GaN, m_InN)
return value, enabled
end
Electron mobility in the x direction (material.mue_x)
function material.mue_x(state)
return material.mu_e(state)
end
Electron mobility in the y direction (material.mue_y)
function material.mue_y(state)
return material.mu_e(state)
end
Electron mobility in the z direction (material.mue_z)
function material.mue_z(state)
return material.mu_e(state)
end
Hole mobility (material.mu_h)
function material.mu_h(state)
-- Low-field hole mobility
-- Units: m^2 V^-1 s^-1
--
-- Linear interpolation of the binary corner mobilities:
-- GaN 0.003 * (300/T)^2.0
-- InN 0.005 * (300/T)^2.0
--
-- Note: nitride hole mobilities are low and poorly constrained, and
-- alloy scattering reduces them further. As with GaN, effective
-- p-type conduction is also limited by the deep Mg acceptor.
local enabled = true
local T = state.T
local x = state.x
local m_GaN = 0.003*(300.0/T)^2.0
local m_InN = 0.005*(300.0/T)^2.0
local value = lerp(x, m_GaN, m_InN)
return value, enabled
end
Hole mobility in the x direction (material.muh_x)
function material.muh_x(state)
return material.mu_h(state)
end
Hole mobility in the y direction (material.muh_y)
function material.muh_y(state)
return material.mu_h(state)
end
Hole mobility in the z direction (material.muh_z)
function material.muh_z(state)
return material.mu_h(state)
end
Relative dielectric permittivity (material.epsilonr)
function material.epsilonr(state)
-- Relative static permittivity
-- Dimensionless
--
-- Linear interpolation of the binary corner values:
-- GaN 8.9, InN 15.3.
--
-- Note: wurtzite nitrides are anisotropic about the c-axis;
-- representative values are used.
local enabled = true
local x = state.x
local value = lerp(x, 8.9, 15.3)
return value, enabled
end
Free-carrier radiative recombination (material.free_to_free_recombination)
function material.free_to_free_recombination(state)
-- Radiative (band-to-band) recombination coefficient
-- Units: m^3 s^-1
--
-- Linear interpolation of the binary corner values:
-- GaN 2.0e-17, InN 2.0e-17.
--
-- InGaN is direct-gap, so B is significant (the "B" of the ABC
-- droop model). IMPORTANT: in real InGaN quantum wells the
-- effective radiative rate is strongly reduced by polarization
-- fields (reduced electron-hole overlap), an effect not captured by
-- a bulk coefficient. Adjust by hand.
local enabled = true
local x = state.x
local value = lerp(x, 2.0e-17, 2.0e-17)
return value, enabled
end
Electron Auger recombination coefficient (material.auger_Cn)
function material.auger_Cn(state)
-- Electron Auger recombination coefficient
-- Units: m^6 s^-1
--
-- Linear interpolation of the binary corner values:
-- GaN 1.0e-42, InN 1.0e-42.
--
-- IMPORTANT: this is the "C" of the ABC droop model for InGaN LEDs
-- and is highly contested (reported ~1e-31 to ~5e-30 cm^6/s,
-- i.e. ~1e-43 to ~5e-42 m^6/s). Auger is a leading candidate for
-- efficiency droop at high current density. Adjust by hand for your
-- device.
local enabled = true
local x = state.x
local value = lerp(x, 1.0e-42, 1.0e-42)
return value, enabled
end
Hole Auger recombination coefficient (material.auger_Cp)
function material.auger_Cp(state)
-- Hole Auger recombination coefficient
-- Units: m^6 s^-1
--
-- Linear interpolation of the binary corner values:
-- GaN 1.0e-42, InN 1.0e-42.
--
-- IMPORTANT: see auger_Cn. Highly contested; adjust by hand.
local enabled = true
local x = state.x
local value = lerp(x, 1.0e-42, 1.0e-42)
return value, enabled
end
Interface trap energy (material.ss_srh_trap_energy)
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).
local enabled = true
local value = 0.0
return value, enabled
end
Interface trap density (material.ss_srh_Nt)
function material.ss_srh_Nt(state)
-- SRH trap density
-- Units: m^-3
--
-- Material-quality dependent; set from the intended bulk lifetime.
-- Representative placeholder for device-grade material.
--
-- Note: this is the "A" (Shockley-Read-Hall) term of the ABC droop
-- model. Threading dislocations and point defects dominate the
-- non-radiative rate in real InGaN; set from your material.
local enabled = true
local value = 1.0e21
return value, enabled
end
Interface electron capture cross-section (material.ss_srh_sigma_n)
function material.ss_srh_sigma_n(state)
-- Electron capture cross section
-- Units: m^2
--
-- Representative value ~1e-15 cm^2 = 1e-19 m^2.
local enabled = true
local value = 1.0e-19
return value, enabled
end
Interface hole capture cross-section (material.ss_srh_sigma_p)
function material.ss_srh_sigma_p(state)
-- Hole capture cross section
-- Units: m^2
--
-- Representative value ~1e-15 cm^2 = 1e-19 m^2.
local enabled = true
local value = 1.0e-19
return value, enabled
end
Lattice thermal conductivity (material.thermal_kl)
function material.thermal_kl(state)
-- Thermal conductivity
-- Units: W m^-1 K^-1
--
-- Alloy thermal conductivity via a thermal-resistivity model
-- (after S. Adachi): the resistivity W = 1/kappa interpolates
-- linearly between the binaries PLUS a bimodal alloy-disorder term
-- that peaks mid-composition:
--
-- W(x,T) = (1-x) W_GaN(T) + x W_InN(T) + C_alloy * x(1-x)
-- kappa = 1 / W
--
-- with C_alloy = 0.45 m*K/W, and endpoint conductivities
-- kappa_GaN = 130*(300/T)^1.4 and kappa_InN = 45*(300/T)^1.4 W/m/K.
--
-- InGaN thermal conductivity collapses on alloying (the In/Ga mass
-- contrast makes disorder scattering severe): even modest In content
-- drops kappa from GaN's ~130 W/m/K to ~10-15 W/m/K. A linear
-- interpolation would badly overestimate it.
local enabled = true
local T = state.T
local x = state.x
local W_GaN = 1.0/(130.0*(300.0/T)^1.4)
local W_InN = 1.0/(45.0 *(300.0/T)^1.4)
local C_alloy = 0.45
local W = (1.0 - x)*W_GaN + x*W_InN + C_alloy*x*(1.0 - x)
local value = 1.0/W
return value, enabled
end
Specific heat capacity (material.heat_capacity)
function material.heat_capacity(state)
-- Specific heat capacity
-- Units: J kg^-1 K^-1
--
-- Linear interpolation (approximately Neumann-Kopp) of the binary
-- corner values: GaN 490, InN 320.
local enabled = true
local x = state.x
local value = lerp(x, 490.0, 320.0)
return value, enabled
end
Mass density (material.density)
function material.density(state)
-- Mass density
-- Units: kg m^-3
--
-- Linear interpolation of the binary corner values:
-- GaN 6150, InN 6810.
local enabled = true
local x = state.x
local value = lerp(x, 6150.0, 6810.0)
return value, enabled
end
Crystal lattice constant (material.lattice_constant)
function material.lattice_constant(state)
-- Lattice constant (hexagonal a-axis)
-- Units: m
--
-- Vegard's law between the binary corners, each with its own
-- linear thermal expansion:
-- GaN a=3.189 A, exp 5.6e-6 /K
-- InN a=3.545 A, exp 3.6e-6 /K
--
-- IMPORTANT: these are wurtzite HEXAGONAL a-axis constants. The
-- c-axis constants (GaN 5.185 A, InN 5.703 A) are not representable
-- in this single scalar field.
--
-- Note: InGaN is grown strained on GaN; the large a-axis mismatch
-- to GaN (up to ~11% at InN) both limits the practical In content /
-- layer thickness and, via the strain, generates the large
-- piezoelectric polarization fields in InGaN quantum wells.
local enabled = true
local T = state.T
local x = state.x
local a_GaN = 3.189e-10*(1.0 + 5.6e-6*(T - 300.0))
local a_InN = 3.545e-10*(1.0 + 3.6e-6*(T - 300.0))
local value = lerp(x, a_GaN, a_InN)
return value, enabled
end
Electron thermal relaxation time (material.thermal_tau_e)
function material.thermal_tau_e(state)
-- Electron energy relaxation time towards the lattice temperature
-- Units: s
--
-- Value basis: Hydrodynamic literature/family value
-- Confidence: Medium
--
-- Reference:
-- https://doi.org/10.1063/1.1383260
--
-- Comments:
-- 0.2 ps is a commonly used GaN/AlGaN hydrodynamic energy-relaxation value;
-- extended to related nitrides.
local enabled = true
local value = 2.000000e-13
return value, enabled
end
Hole thermal relaxation time (material.thermal_tau_h)
function material.thermal_tau_h(state)
-- Hole energy relaxation time towards the lattice temperature
-- Units: s
--
-- Value basis: Hydrodynamic literature/family value
-- Confidence: Medium
--
-- Reference:
-- https://doi.org/10.1063/1.1383260
--
-- Comments:
-- 0.2 ps is a commonly used GaN/AlGaN hydrodynamic energy-relaxation value;
-- extended to related nitrides.
local enabled = true
local value = 2.000000e-13
return value, enabled
end
-- In_x Ga_(1-x) N . x = state.x = In mole fraction (x=0 GaN, x=1 InN).
-- Linear (Vegard) k.p interpolation, no bowing (the well-known InGaN Eg
-- bowing ~1.4 eV is a band-gap effect, not requested here). S1/S2 are
-- recomputed from interpolated quantities. Deformation potentials are
-- DISABLED because the InN endpoint is not established (see InN.lua).
Wurtzite crystal-field splitting delta1 (material.qw_delta1)
function material.qw_delta1(state)
-- Crystal-field delta1 (Rinke 2008 Delta_CR). Units: eV. Linear.
--
-- GaN endpoint:
-- P. Rinke, M. Winkelnkemper, A. Qteish, D. Bimberg, J. Neugebauer,
-- and M. Scheffler, "Consistent set of band parameters for the
-- group-III nitrides AlN, GaN, and InN," Physical Review B 77,
-- 075202 (2008). DOI: 10.1103/PhysRevB.77.075202
--
-- InN endpoint:
-- P. Rinke, M. Winkelnkemper, A. Qteish, D. Bimberg, J. Neugebauer,
-- and M. Scheffler, "Consistent set of band parameters for the
-- group-III nitrides AlN, GaN, and InN," Physical Review B 77,
-- 075202 (2008). DOI: 10.1103/PhysRevB.77.075202
local x = state.x
local GaN = 0.034
local InN = 0.066
local enabled = true
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Wurtzite spin–orbit splitting delta2 (material.qw_delta2)
function material.qw_delta2(state)
-- Spin-orbit delta2 = Dso/3 (quasi-cubic). Units: eV. Dso linear.
--
-- GaN endpoint: Dso=0.017 eV
-- I. Vurgaftman and J. R. Meyer, "Band parameters for nitrogen-
-- containing semiconductors," Journal of Applied Physics 94,
-- 3675-3696 (2003). DOI: 10.1063/1.1600519
--
-- InN endpoint: Dso=0.005 eV
-- I. Vurgaftman and J. R. Meyer, "Band parameters for nitrogen-
-- containing semiconductors," Journal of Applied Physics 94,
-- 3675-3696 (2003). DOI: 10.1063/1.1600519
local x = state.x
local Dso_GaN = 0.017
local Dso_InN = 0.005
local Dso = (1.0-x)*Dso_GaN + x*Dso_InN
local enabled = true
local value = Dso/3.0
return value, enabled
end
Wurtzite spin–orbit splitting delta3 (material.qw_delta3)
function material.qw_delta3(state)
-- Spin-orbit delta3 = Dso/3 (quasi-cubic). Units: eV. Dso linear.
--
-- GaN endpoint: Dso=0.017 eV
-- I. Vurgaftman and J. R. Meyer, "Band parameters for nitrogen-
-- containing semiconductors," Journal of Applied Physics 94,
-- 3675-3696 (2003). DOI: 10.1063/1.1600519
--
-- InN endpoint: Dso=0.005 eV
-- I. Vurgaftman and J. R. Meyer, "Band parameters for nitrogen-
-- containing semiconductors," Journal of Applied Physics 94,
-- 3675-3696 (2003). DOI: 10.1063/1.1600519
local x = state.x
local Dso_GaN = 0.017
local Dso_InN = 0.005
local Dso = (1.0-x)*Dso_GaN + x*Dso_InN
local enabled = true
local value = Dso/3.0
return value, enabled
end
Wurtzite valence-band parameter A1 (material.qw_A1)
function material.qw_A1(state)
-- Wurtzite valence-band k.p parameter A1. Dimensionless. Linear.
--
-- GaN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
--
-- InN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
local x = state.x
local GaN = -5.947
local InN = -15.803
local enabled = true
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Wurtzite valence-band parameter A2 (material.qw_A2)
function material.qw_A2(state)
-- Wurtzite valence-band k.p parameter A2. Dimensionless. Linear.
--
-- GaN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
--
-- InN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
local x = state.x
local GaN = -0.528
local InN = -0.497
local enabled = true
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Wurtzite valence-band parameter A3 (material.qw_A3)
function material.qw_A3(state)
-- Wurtzite valence-band k.p parameter A3. Dimensionless. Linear.
--
-- GaN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
--
-- InN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
local x = state.x
local GaN = 5.414
local InN = 15.251
local enabled = true
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Wurtzite valence-band parameter A4 (material.qw_A4)
function material.qw_A4(state)
-- Wurtzite valence-band k.p parameter A4. Dimensionless. Linear.
--
-- GaN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
--
-- InN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
local x = state.x
local GaN = -2.512
local InN = -7.151
local enabled = true
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Wurtzite valence-band parameter A5 (material.qw_A5)
function material.qw_A5(state)
-- Wurtzite valence-band k.p parameter A5. Dimensionless. Linear.
--
-- GaN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
--
-- InN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
local x = state.x
local GaN = -2.51
local InN = -7.06
local enabled = true
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Wurtzite valence-band parameter A6 (material.qw_A6)
function material.qw_A6(state)
-- Wurtzite valence-band k.p parameter A6. Dimensionless. Linear.
--
-- GaN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
--
-- InN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
local x = state.x
local GaN = -3.202
local InN = -10.078
local enabled = true
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Wurtzite interband coupling energy Ep1 (material.qw_Ep1)
function material.qw_Ep1(state)
-- Kane energy || c. Units: eV. Linear.
--
-- GaN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
--
-- InN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
local x = state.x
local GaN = 17.292
local InN = 8.742
local enabled = true
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Wurtzite interband coupling energy Ep2 (material.qw_Ep2)
function material.qw_Ep2(state)
-- Kane energy perp c. Units: eV. Linear.
--
-- GaN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
--
-- InN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
local x = state.x
local GaN = 16.265
local InN = 8.809
local enabled = true
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Quantum-well band-structure parameter S1 (material.qw_S1)
function material.qw_S1(state)
-- Conduction remote+free-electron parameter || c (kz^2). Dimensionless.
-- Recomputed from interpolated m/Eg/delta1/Ep (see AlN.lua qw_S1
-- for the derivation); reproduces the binary S at x=0 and x=1.
-- Eg here is linear (no bowing); for strongly-bowed alloys feed
-- the physical Eg if high accuracy in S is needed.
--
-- GaN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
--
-- InN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
local x = state.x
-- interpolate the underlying Rinke quantities, then compute S:
local mpar = (1.0-x)*0.186 + x*0.065
local mperp = (1.0-x)*0.209 + x*0.068
local Eg = (1.0-x)*3.24 + x*0.69
local d1 = (1.0-x)*0.034 + x*0.066
local Ep1 = (1.0-x)*17.292 + x*8.742
local Ep2 = (1.0-x)*16.265 + x*8.809
local Egt = Eg
if d1 < 0.0 then Egt = Eg - d1 end -- Egtilde = Eg + |d1|
local enabled = true
local value = 1.0/mpar - Ep1/(Egt + d1)
return value, enabled
end
Quantum-well band-structure parameter S2 (material.qw_S2)
function material.qw_S2(state)
-- Conduction remote+free-electron parameter perp c (kx^2+ky^2). Dimensionless.
-- Recomputed from interpolated m/Eg/delta1/Ep (see AlN.lua qw_S1
-- for the derivation); reproduces the binary S at x=0 and x=1.
-- Eg here is linear (no bowing); for strongly-bowed alloys feed
-- the physical Eg if high accuracy in S is needed.
--
-- GaN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
--
-- InN endpoint:
-- P. Rinke et al., Physical Review B 77, 075202 (2008).
-- DOI: 10.1103/PhysRevB.77.075202
local x = state.x
-- interpolate the underlying Rinke quantities, then compute S:
local mpar = (1.0-x)*0.186 + x*0.065
local mperp = (1.0-x)*0.209 + x*0.068
local Eg = (1.0-x)*3.24 + x*0.69
local d1 = (1.0-x)*0.034 + x*0.066
local Ep1 = (1.0-x)*17.292 + x*8.742
local Ep2 = (1.0-x)*16.265 + x*8.809
local Egt = Eg
if d1 < 0.0 then Egt = Eg - d1 end -- Egtilde = Eg + |d1|
local enabled = true
local value = 1.0/mperp - Ep2/Egt
return value, enabled
end
Quantum-well parameter a1 (material.qw_a1)
function material.qw_a1(state)
-- Conduction-band deformation potential || c. Units: eV.
-- enabled=false: the InN endpoint deformation potentials are not
-- established (see InN.lua qw_D1), so the interpolation cannot be
-- trusted. Per the endpoint rule, the alloy value is disabled and
-- returns 0.0. (The GaN endpoint IS known - VM2003 - if you later
-- obtain a reliable InN set, enable this and interpolate linearly.)
--
-- GaN endpoint:
-- I. Vurgaftman and J. R. Meyer, "Band parameters for nitrogen-
-- containing semiconductors," Journal of Applied Physics 94,
-- 3675-3696 (2003). DOI: 10.1063/1.1600519
local enabled = false
local value = 0.0
return value, enabled
end
Quantum-well parameter a2 (material.qw_a2)
function material.qw_a2(state)
-- Conduction-band deformation potential perp c. Units: eV.
-- enabled=false: see qw_a1 (InGaN).
local enabled = false
local value = 0.0
return value, enabled
end
Wurtzite deformation potential D1 (material.qw_D1)
function material.qw_D1(state)
-- Valence-band deformation potential D1. Units: eV.
-- enabled=false: the InN endpoint deformation potentials are not
-- established (see InN.lua qw_D1), so the interpolation cannot be
-- trusted. Per the endpoint rule, the alloy value is disabled and
-- returns 0.0. (The GaN endpoint IS known - VM2003 - if you later
-- obtain a reliable InN set, enable this and interpolate linearly.)
--
-- GaN endpoint:
-- I. Vurgaftman and J. R. Meyer, "Band parameters for nitrogen-
-- containing semiconductors," Journal of Applied Physics 94,
-- 3675-3696 (2003). DOI: 10.1063/1.1600519
local enabled = false
local value = 0.0
return value, enabled
end
Wurtzite deformation potential D2 (material.qw_D2)
function material.qw_D2(state)
-- Valence-band deformation potential D2. Units: eV.
-- enabled=false: see qw_D1 (InGaN).
local enabled = false
local value = 0.0
return value, enabled
end
Wurtzite deformation potential D3 (material.qw_D3)
function material.qw_D3(state)
-- Valence-band deformation potential D3. Units: eV.
-- enabled=false: see qw_D1 (InGaN).
local enabled = false
local value = 0.0
return value, enabled
end
Wurtzite deformation potential D4 (material.qw_D4)
function material.qw_D4(state)
-- Valence-band deformation potential D4. Units: eV.
-- enabled=false: see qw_D1 (InGaN).
local enabled = false
local value = 0.0
return value, enabled
end
Wurtzite deformation potential D5 (material.qw_D5)
function material.qw_D5(state)
-- Valence-band deformation potential D5. Units: eV.
-- enabled=false: see qw_D1 (InGaN).
local enabled = false
local value = 0.0
return value, enabled
end
Wurtzite deformation potential D6 (material.qw_D6)
function material.qw_D6(state)
-- Valence-band deformation potential D6. Units: eV.
-- enabled=false: see qw_D1 (InGaN).
local enabled = false
local value = 0.0
return value, enabled
end
Quantum-well elastic stiffness constant C13 (material.qw_C13)
function material.qw_C13(state)
-- Elastic stiffness constant C13. Units: Pa. Linear.
--
-- GaN endpoint:
-- I. Vurgaftman and J. R. Meyer, Journal of Applied Physics 94,
-- 3675-3696 (2003). DOI: 10.1063/1.1600519
-- (original: A. Polian, M. Grimsditch, and I. Grzegory, Journal
-- of Applied Physics 79, 3343-3344 (1996)).
--
-- InN endpoint:
-- A. F. Wright, Journal of Applied Physics 82, 2833-2839 (1997).
-- DOI: 10.1063/1.366114 (adopted in Vurgaftman and Meyer 2003,
-- DOI: 10.1063/1.1600519).
local x = state.x
local GaN = 106.0e9
local InN = 92.0e9
local enabled = true
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Quantum-well elastic stiffness constant C33 (material.qw_C33)
function material.qw_C33(state)
-- Elastic stiffness constant C33. Units: Pa. Linear.
--
-- GaN endpoint:
-- I. Vurgaftman and J. R. Meyer, Journal of Applied Physics 94,
-- 3675-3696 (2003). DOI: 10.1063/1.1600519
-- (original: A. Polian, M. Grimsditch, and I. Grzegory, Journal
-- of Applied Physics 79, 3343-3344 (1996)).
--
-- InN endpoint:
-- A. F. Wright, Journal of Applied Physics 82, 2833-2839 (1997).
-- DOI: 10.1063/1.366114 (adopted in Vurgaftman and Meyer 2003,
-- DOI: 10.1063/1.1600519).
local x = state.x
local GaN = 398.0e9
local InN = 224.0e9
local enabled = true
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Spontaneous polarisation (material.qw_Psp)
function material.qw_Psp(state)
-- Spontaneous polarization Psp. Units: C/m^2. Linear.
--
-- NOTE: a well-established nonlinear (bowing) composition
-- dependence exists for this quantity but is NOT applied here;
-- see -- SKIPPED MATERIALS -- for the reasoning and reference.
--
-- GaN endpoint:
-- F. Bernardini, V. Fiorentini, and D. Vanderbilt, "Spontaneous
-- polarization and piezoelectric constants of III-V nitrides,"
-- Physical Review B 56, R10024-R10027 (1997).
-- DOI: 10.1103/PhysRevB.56.R10024
--
-- InN endpoint:
-- F. Bernardini, V. Fiorentini, and D. Vanderbilt, "Spontaneous
-- polarization and piezoelectric constants of III-V nitrides,"
-- Physical Review B 56, R10024-R10027 (1997).
-- DOI: 10.1103/PhysRevB.56.R10024
local x = state.x
local GaN = -0.029
local InN = -0.032
local enabled = true
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Piezoelectric coefficient e31 (material.e31)
function material.e31(state)
-- Piezoelectric coefficient e31. Units: C/m^2. Linear.
--
-- GaN endpoint:
-- F. Bernardini, V. Fiorentini, and D. Vanderbilt, "Spontaneous
-- polarization and piezoelectric constants of III-V nitrides,"
-- Physical Review B 56, R10024-R10027 (1997).
-- DOI: 10.1103/PhysRevB.56.R10024
--
-- InN endpoint:
-- F. Bernardini, V. Fiorentini, and D. Vanderbilt, "Spontaneous
-- polarization and piezoelectric constants of III-V nitrides,"
-- Physical Review B 56, R10024-R10027 (1997).
-- DOI: 10.1103/PhysRevB.56.R10024
local x = state.x
local GaN = -0.49
local InN = -0.57
local enabled = true
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Piezoelectric coefficient e33 (material.e33)
function material.e33(state)
-- Piezoelectric coefficient e33. Units: C/m^2. Linear.
--
-- GaN endpoint:
-- F. Bernardini, V. Fiorentini, and D. Vanderbilt, "Spontaneous
-- polarization and piezoelectric constants of III-V nitrides,"
-- Physical Review B 56, R10024-R10027 (1997).
-- DOI: 10.1103/PhysRevB.56.R10024
--
-- InN endpoint:
-- F. Bernardini, V. Fiorentini, and D. Vanderbilt, "Spontaneous
-- polarization and piezoelectric constants of III-V nitrides,"
-- Physical Review B 56, R10024-R10027 (1997).
-- DOI: 10.1103/PhysRevB.56.R10024
local x = state.x
local GaN = 0.73
local InN = 0.97
local enabled = true
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Lattice constant a (material.lattice_a)
function material.lattice_a(state)
-- Lattice constant, a-axis
-- Units: m
--
-- Reference:
-- I. Vurgaftman and J. R. Meyer,
-- "Band parameters for nitrogen-containing semiconductors,"
-- J. Appl. Phys. 94, 3675 (2003). DOI: 10.1063/1.1600519
-- (binary end-point a-axis constants; wurtzite).
--
-- Notes:
-- Wurtzite In(x)Ga(1-x)N a-axis by Vegard's law between the binary
-- end points:
-- a_GaN = 3.189 Angstrom, a_InN = 3.545 Angstrom (300 K).
-- a(x) = (1-x)*a_GaN + x*a_InN
-- Bowing of the a lattice parameter is negligible and is neglected
-- (linear Vegard). The c-axis is NOT returned here.
--
-- Composition variable:
-- x is the In mole fraction in In(x)Ga(1-x)N.
-- IMPORTANT: this assumes the model carries composition in state.x.
-- Confirm this matches the composition field your existing InGaN
-- model already uses. If state.x holds spatial position in your
-- build, change the marked line to the correct composition field.
local enabled = true
local x = state.x -- <-- In mole fraction; confirm/rename if needed
local a_GaN = 3.189e-10 -- m, wurtzite a-axis
local a_InN = 3.545e-10 -- m, wurtzite a-axis
local value = (1.0 - x)*a_GaN + x*a_InN
return value, enabled
end
Quantum-well elastic stiffness constant C11 (material.qw_C11)
function material.qw_C11(state)
-- Elastic stiffness constant C11
-- Units: Pa
--
-- Composition: In_x Ga_(1-x) N, x = state.x
--
-- Endpoint GaN: A. Polian, M. Grimsditch, I. Grzegory, ... J. Appl. Phys. 79, 3343 (1996): 390 GPa.
-- Endpoint InN: A. F. Wright, J. Appl. Phys. 82, 2833 (1997): 223 GPa
-- (InN set adopted by Vurgaftman & Meyer 2003, DOI: 10.1063/1.1600519).
--
-- Interpolation:
-- Linear in state.x. Ab initio alloy studies (e.g. Lopuszynski) report
-- modest sub-linear deviation for C11; no bowing applied (not verified).
local enabled = true
local x = state.x
local GaN = 390e9
local InN = 223e9
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Quantum-well elastic stiffness constant C12 (material.qw_C12)
function material.qw_C12(state)
-- Elastic stiffness constant C12
-- Units: Pa
--
-- Composition: In_x Ga_(1-x) N, x = state.x
--
-- Endpoint GaN: Polian et al., J. Appl. Phys. 79, 3343 (1996): 145 GPa.
-- Endpoint InN: Wright, J. Appl. Phys. 82, 2833 (1997): 115 GPa.
--
-- Interpolation:
-- Linear in state.x; no bowing applied.
local enabled = true
local x = state.x
local GaN = 145e9
local InN = 115e9
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Quantum-well elastic stiffness constant C44 (material.qw_C44)
function material.qw_C44(state)
-- Elastic stiffness constant C44
-- Units: Pa
--
-- Composition: In_x Ga_(1-x) N, x = state.x
--
-- Endpoint GaN: Polian et al., J. Appl. Phys. 79, 3343 (1996): 105 GPa.
-- Endpoint InN: Wright, J. Appl. Phys. 82, 2833 (1997): 48 GPa.
--
-- Interpolation:
-- Linear in state.x; no bowing applied.
local enabled = true
local x = state.x
local GaN = 105e9
local InN = 48e9
local value = (1.0-x)*GaN + x*InN
return value, enabled
end
Longitudinal optical phonon energy (material.phonon_lo_energy)
function material.phonon_lo_energy(state)
-- Representative LO phonon energy for polar optical (Frohlich) scattering
-- Units: eV
--
-- No sufficiently reliable value/reference identified.
-- Disabled rather than estimated.
--
-- Notes:
-- InGaN LO phonon composition dependence was not verified; linear
-- interpolation of endpoint LO energies is not a recognised effective mode.
local enabled = false
local value = 0.0
return value, enabled
end
Static dielectric constant (material.epsilon_static)
function material.epsilon_static(state)
-- Static relative dielectric constant (lattice + electronic)
-- Dimensionless
--
-- No sufficiently reliable value/reference identified.
-- Disabled rather than estimated.
--
-- Notes:
-- InN dielectric constants are unsettled (values were revised after the
-- InN band gap was re-determined at ~0.7 eV), so no defensible InN endpoint.
local enabled = false
local value = 0.0
return value, enabled
end
High-frequency dielectric constant (material.epsilon_inf)
function material.epsilon_inf(state)
-- High-frequency (electronic) relative dielectric constant
-- Dimensionless
--
-- No sufficiently reliable value/reference identified.
-- Disabled rather than estimated.
--
-- Notes:
-- See epsilon_static: no defensible InN endpoint.
local enabled = false
local value = 0.0
return value, enabled
end
Wurtzite piezoelectric coefficient e15 (material.qw_e15)
function material.qw_e15(state)
-- Wurtzite piezoelectric stress coefficient e15
-- Units: C m^-2
--
-- No sufficiently reliable value/reference identified.
-- Disabled rather than estimated.
--
-- Notes:
-- No experimental InN e15 identified (theory only, with sign spread).
local enabled = false
local value = 0.0
return value, enabled
end
Material parameter summary (material.print)
function material.print()
-- Representative composition: In(0.15)Ga(0.85)N, a typical
-- blue-LED active composition (x = In fraction = 0.15).
local state = {
T = 300.0,
x = 0.15,
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("Composition x (In): %.4f", state.x))
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
-- ============================================================================
-- Copyright (C) 2026 The OghmaNano Project
-- All rights reserved.
--
-- This file is part of the OghmaNano Materials Model Library.
--
-- Website:
-- https://www.oghma-nano.com
--
-- Documentation and accuracy statement:
-- https://www.oghma-nano.com/manual/material-scripts.html
--
-- These material models are provided to support scientific research and
-- semiconductor device simulation. If you find them useful, please cite
-- OghmaNano where appropriate. Please do not redistribute these files or
-- incorporate them into other software or databases without permission.
-- ============================================================================