Home Examples Screenshots User manual Bluesky logo YouTube ☰
OghmaNano Multiphysics simulation platform for optoelectronic devices and photonic systems DOWNLOAD Quick Start guide

InGaAsP material model

1. Introduction

This page contains the OghmaNano material model for InGaAsP (In(1-x)Ga(x)As(y)P(1-y)).

In(1-x)Ga(x)As(y)P(1-y) quaternary alloy

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(1-x)Ga(x)As(y)P(1-y) quaternary alloy.
--
-- Composition convention:
--   x = Ga fraction   (In fraction = 1 - x)
--   y = As fraction   (P  fraction = 1 - y)
--
-- Binary corners:
--   (x=0, y=0) -> InP
--   (x=1, y=0) -> GaP
--   (x=0, y=1) -> InAs
--   (x=1, y=1) -> GaAs
--
-- Most properties are obtained by linear (Vegard-style) interpolation
-- between the four binary corner values, each evaluated at state.T so
-- the alloy inherits the temperature dependence of its endpoints:
--
--   Q(x,y) = (1-x)(1-y) Q_InP + x(1-y) Q_GaP
--          + (1-x) y   Q_InAs + x  y   Q_GaAs
--
-- The band gap additionally includes ternary bowing (see Eg).
--
-- FIRST-PASS LIMITATIONS (read before trusting quantitative output):
--  * Linear interpolation is exact only for the lattice constant.
--  * Electron/hole MOBILITY and THERMAL CONDUCTIVITY are dominated by
--    alloy-disorder scattering in the quaternary and are FAR BELOW the
--    linear interpolation of the binaries at intermediate composition.
--    See the strong notes in those functions.
--  * The band gap returned is the direct (Gamma) gap; near the
--    Ga/P-rich corner the true fundamental gap becomes indirect.
-- =====================================================================

-- Linear four-binary interpolation helper.

Quaternion helper (quat)

local function quat(x, y, v_InP, v_GaP, v_InAs, v_GaAs)
	return (1.0 - x)*(1.0 - y)*v_InP
	     + x*(1.0 - y)*v_GaP
	     + (1.0 - x)*y*v_InAs
	     + x*y*v_GaAs
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 "InGaAsP", enabled
end

Material description (material.description)

function material.description()
	local enabled = true

	return "In(1-x)Ga(x)As(y)P(1-y) quaternary alloy", enabled
end

Chemical formula (material.formula)

function material.formula()
	local enabled = true

	return "In(1-x)Ga(x)As(y)P(1-y)", enabled
end

Band gap energy (material.Eg)

function material.Eg(state)
	-- Units: eV
	--
	-- Direct (Gamma) band gap of In(1-x)Ga(x)As(y)P(1-y).
	--
	-- Method:
	--  1. Evaluate the direct (Gamma) gap of each binary corner at
	--     state.T using Varshni (Y. P. Varshni, Physica 34, 149, 1967).
	--  2. Linearly interpolate the four corner gaps.
	--  3. Subtract composition-weighted ternary bowing.
	--
	-- Binary Gamma-gap Varshni parameters and ternary bowing
	-- parameters from
	-- I. Vurgaftman, J. R. Meyer, L. R. Ram-Mohan,
	-- "Band parameters for III-V compound semiconductors and their
	-- alloys", J. Appl. Phys. 89, 5815-5875, 2001.
	--
	-- Bowing (eV): InGaAs 0.477, InGaP 0.65, GaAsP 0.19, InAsP 0.10.
	--
	-- Note: this returns the DIRECT gap. In(1-x)Ga(x)As(y)P(1-y) is
	-- direct across its technologically useful (In/As-rich) range,
	-- including the region lattice-matched to InP used for 1.1-1.65 um
	-- telecom devices. Near the Ga/P-rich corner the fundamental gap
	-- crosses over to indirect (X), which this function does not model.

	local enabled = true
	local T = state.T
	local x = state.x
	local y = state.y

	local Eg_InP  = varshni(T, 1.4236, 3.63e-4, 162.0)
	local Eg_GaP  = varshni(T, 2.886,  1.081e-3, 164.0)   -- Gamma valley
	local Eg_InAs = varshni(T, 0.417,  2.76e-4, 93.0)
	local Eg_GaAs = varshni(T, 1.519,  5.405e-4, 204.0)

	local Eg_lin = quat(x, y, Eg_InP, Eg_GaP, Eg_InAs, Eg_GaAs)

	local bow = x*(1.0 - x)*(y*0.477 + (1.0 - y)*0.65)
	          + y*(1.0 - y)*(x*0.19  + (1.0 - x)*0.10)

	local value = Eg_lin - bow

	return value, enabled
end

Deformation potential Xi (material.Xi)

function material.Xi(state)
	-- Electron affinity
	-- Units: eV
	--
	-- Linear interpolation of the binary corner affinities:
	-- InP 4.38, GaP 3.8, InAs 4.9, GaAs 4.07 eV.
	--
	-- Note: affinities of the corners are themselves uncertain, and
	-- affinity differencing is unreliable for heterojunction offsets.
	-- Treat as approximate.

	local enabled = true
	local x = state.x
	local y = state.y

	local value = quat(x, y, 4.38, 3.8, 4.9, 4.07)

	return value, enabled
end

Electron effective mass (material.me)

function material.me(state)
    local enabled = true
    local x = state.x     -- InP-LM series: x=0 InP, x=1 Ga0.47In0.53As (VERIFY)
    -- NOTE: a single state.x parameterizes only a 1-DOF series. If the file carries
    -- two composition variables, this block needs the second one.
    -- Gamma mass, InP 0.079 -> In0.53Ga0.47As 0.041
    local value = 0.079 - 0.038*x
    return value, enabled
end

Hole effective mass (material.mh)

function material.mh(state)
    local enabled = true
    local x = state.x
    -- HH[001]: InP 0.53 -> In0.53Ga0.47As ~0.34
    local value = 0.53 - 0.19*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): InP 5.7e23, GaP 1.8e25, InAs 8.7e22, GaAs 4.7e23 m^-3.
	--
	-- Note: near the In/As-rich (small-gap) corner, conduction-band
	-- non-parabolicity makes the parabolic-band Nc approximate.

	local enabled = true
	local T = state.T
	local x = state.x
	local y = state.y
	local f = (T/300.0)^1.5

	local value = quat(x, y, 5.7e23, 1.8e25, 8.7e22, 4.7e23)*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): InP 1.1e25, GaP 1.9e25, InAs 6.6e24, GaAs 7.0e24 m^-3.

	local enabled = true
	local T = state.T
	local x = state.x
	local y = state.y
	local f = (T/300.0)^1.5

	local value = quat(x, y, 1.1e25, 1.9e25, 6.6e24, 7.0e24)*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:
	--   InP  0.54  * (300/T)^2.0
	--   GaP  0.025 * (300/T)^1.8
	--   InAs 3.3   * (300/T)^1.7
	--   GaAs 0.80  * (300/T)^(2/3)
	--
	-- WARNING: this linear interpolation is physically OPTIMISTIC.
	-- In the quaternary, ALLOY-DISORDER SCATTERING strongly reduces
	-- the mobility below the interpolated value, with the largest
	-- suppression at intermediate composition. For quantitative work,
	-- override with a measured mobility or an explicit alloy-scattering
	-- model; do not trust the interpolated value mid-composition.

	local enabled = true
	local T = state.T
	local x = state.x
	local y = state.y

	local m_InP  = 0.54 *(300.0/T)^2.0
	local m_GaP  = 0.025*(300.0/T)^1.8
	local m_InAs = 3.3  *(300.0/T)^1.7
	local m_GaAs = 0.80 *(300.0/T)^(2.0/3.0)

	local value = quat(x, y, m_InP, m_GaP, m_InAs, m_GaAs)

	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:
	--   InP  0.02  * (300/T)^2.0
	--   GaP  0.015 * (300/T)^1.8
	--   InAs 0.05  * (300/T)^2.3
	--   GaAs 0.04  * (300/T)^2.3
	--
	-- WARNING: as for mu_e, alloy-disorder scattering reduces the real
	-- quaternary hole mobility below this linear interpolation.

	local enabled = true
	local T = state.T
	local x = state.x
	local y = state.y

	local m_InP  = 0.02 *(300.0/T)^2.0
	local m_GaP  = 0.015*(300.0/T)^1.8
	local m_InAs = 0.05 *(300.0/T)^2.3
	local m_GaAs = 0.04 *(300.0/T)^2.3

	local value = quat(x, y, m_InP, m_GaP, m_InAs, m_GaAs)

	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:
	-- InP 12.5, GaP 11.1, InAs 15.15, GaAs 12.9.

	local enabled = true
	local x = state.x
	local y = state.y

	local value = quat(x, y, 12.5, 11.1, 15.15, 12.9)

	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:
	-- InP 1.2e-16, GaP 5e-20, InAs 1.1e-16, GaAs 1.0e-16.
	--
	-- Note: the corner values are themselves representative; the
	-- direct-gap corners (InP, InAs, GaAs) dominate the useful region.
	-- Adjust by hand to match your material / device.

	local enabled = true
	local x = state.x
	local y = state.y

	local value = quat(x, y, 1.2e-16, 5.0e-20, 1.1e-16, 1.0e-16)

	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:
	-- InP 9e-43, GaP 1e-43, InAs 1e-39, GaAs 7e-42.
	--
	-- IMPORTANT: the InAs corner is ~3-4 orders larger than the others
	-- because Auger scales strongly with decreasing gap. As a result
	-- the interpolated coefficient rises sharply toward the small-gap
	-- (In/As-rich) region relevant to telecom devices, where Auger is
	-- an important loss. These corner values are representative and
	-- temperature-independent here; adjust by hand for quantitative
	-- work.

	local enabled = true
	local x = state.x
	local y = state.y

	local value = quat(x, y, 9.0e-43, 1.0e-43, 1.0e-39, 7.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:
	-- InP 9e-43, GaP 1e-43, InAs 1e-39, GaAs 1e-41.
	--
	-- IMPORTANT: see auger_Cn. Auger grows strongly toward the
	-- small-gap corner; adjust by hand.

	local enabled = true
	local x = state.x
	local y = state.y

	local value = quat(x, y, 9.0e-43, 1.0e-43, 1.0e-39, 1.0e-41)

	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.

	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
	--
	-- Linear interpolation of the binary corner values, each with a
	-- (300/T)^exponent dependence:
	--   InP  68  * (300/T)^1.4
	--   GaP  110 * (300/T)^1.4
	--   InAs 27  * (300/T)^1.4
	--   GaAs 55  * (300/T)^1.25
	--
	-- WARNING: linear interpolation is badly WRONG for alloy thermal
	-- conductivity. Mass-disorder phonon scattering collapses kappa far
	-- below the interpolated value: measured InGaAsP at intermediate
	-- composition is only ~4-5 W/m/K, roughly an order of magnitude
	-- below this interpolation. For any thermal / self-heating
	-- simulation, OVERRIDE this with a measured value or a proper alloy
	-- (virtual-crystal + disorder) model. The interpolated value here
	-- is a placeholder only.

	local enabled = true
	local T = state.T
	local x = state.x
	local y = state.y

	local k_InP  = 68.0 *(300.0/T)^1.4
	local k_GaP  = 110.0*(300.0/T)^1.4
	local k_InAs = 27.0 *(300.0/T)^1.4
	local k_GaAs = 55.0 *(300.0/T)^1.25

	local value = quat(x, y, k_InP, k_GaP, k_InAs, k_GaAs)

	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 of the binary corner values (approximately
	-- Neumann-Kopp): InP 310, GaP 430, InAs 250, GaAs 330.

	local enabled = true
	local x = state.x
	local y = state.y

	local value = quat(x, y, 310.0, 430.0, 250.0, 330.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:
	-- InP 4810, GaP 4138, InAs 5670, GaAs 5317.
	--
	-- Note: strictly, density should follow from the interpolated
	-- lattice constant and the alloy molar mass; the linear form here
	-- is a good approximation for these lattice-similar corners.

	local enabled = true
	local x = state.x
	local y = state.y

	local value = quat(x, y, 4810.0, 4138.0, 5670.0, 5317.0)

	return value, enabled
end

Crystal lattice constant (material.lattice_constant)

function material.lattice_constant(state)
	-- Cubic lattice constant
	-- Units: m
	--
	-- Vegard's law (linear interpolation) of the binary corner lattice
	-- constants, each with its own linear thermal expansion:
	--   InP  a=5.8697 A, exp 4.6e-6 /K
	--   GaP  a=5.4505 A, exp 5.3e-6 /K
	--   InAs a=6.0583 A, exp 4.5e-6 /K
	--   GaAs a=5.65325 A, exp 5.7e-6 /K
	-- (Vurgaftman et al., 2001.)
	--
	-- Vegard's law is accurate for the lattice constant, so this is the
	-- most reliable interpolated quantity in this file.
	--
	-- Lattice matching to InP (a = 5.8697 A) occurs along the line
	-- x ~ 0.47 y; this is the composition family used for InP-based
	-- 1.1-1.65 um optoelectronics.

	local enabled = true
	local T = state.T
	local x = state.x
	local y = state.y

	local a_InP  = 5.8697e-10 *(1.0 + 4.6e-6*(T - 300.0))
	local a_GaP  = 5.4505e-10 *(1.0 + 5.3e-6*(T - 300.0))
	local a_InAs = 6.0583e-10 *(1.0 + 4.5e-6*(T - 300.0))
	local a_GaAs = 5.65325e-10*(1.0 + 5.7e-6*(T - 300.0))

	local value = quat(x, y, a_InP, a_GaP, a_InAs, a_GaAs)

	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: 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

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: 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

Spin–orbit splitting energy (material.delta_so)

function material.delta_so(state)
	-- Spin-orbit splitting energy (Delta_SO)
	-- Units: eV
	--
	-- Reference:
	-- Linear interpolation of binary endpoints GaAs, GaP, InAs, InP from
	-- Vurgaftman, Meyer, Ram-Mohan, J. Appl. Phys. 89, 5815 (2001).
	--
	-- Note:
	-- Composition: Ga(x)In(1-x)As(y)P(1-y); x=Ga group-III fraction, y=As group-V fraction.
	-- Linear interpolation of endpoints (no bowing applied).

	local enabled = true
	local x = state.x
	local y = state.y
	local value = (x*y)*0.341 + (x*(1.0-y))*0.08 + ((1.0-x)*y)*0.39 + ((1.0-x)*(1.0-y))*0.108

	return value, enabled
end

Kane interband coupling energy (material.Ep)

function material.Ep(state)
	-- Kane energy E_P (optical matrix element parameter)
	-- Units: eV
	--
	-- Reference:
	-- Linear interpolation of binary endpoints GaAs, GaP, InAs, InP from
	-- Vurgaftman, Meyer, Ram-Mohan, J. Appl. Phys. 89, 5815 (2001).
	--
	-- Note:
	-- Composition: Ga(x)In(1-x)As(y)P(1-y); x=Ga group-III fraction, y=As group-V fraction.
	-- Linear interpolation of endpoints (no bowing applied).

	local enabled = true
	local x = state.x
	local y = state.y
	local value = (x*y)*28.8 + (x*(1.0-y))*31.4 + ((1.0-x)*y)*21.5 + ((1.0-x)*(1.0-y))*20.7

	return value, enabled
end

Luttinger parameter gamma1 (material.gamma1)

function material.gamma1(state)
	-- Luttinger parameter gamma1
	-- Units: dimensionless
	--
	-- Reference:
	-- Linear interpolation of binary endpoints GaAs, GaP, InAs, InP from
	-- Vurgaftman, Meyer, Ram-Mohan, J. Appl. Phys. 89, 5815 (2001).
	--
	-- Note:
	-- Composition: Ga(x)In(1-x)As(y)P(1-y); x=Ga group-III fraction, y=As group-V fraction.
	-- Linear interpolation of endpoints (no bowing applied).

	local enabled = true
	local x = state.x
	local y = state.y
	local value = (x*y)*6.98 + (x*(1.0-y))*4.05 + ((1.0-x)*y)*20 + ((1.0-x)*(1.0-y))*5.08

	return value, enabled
end

Luttinger parameter gamma2 (material.gamma2)

function material.gamma2(state)
	-- Luttinger parameter gamma2
	-- Units: dimensionless
	--
	-- Reference:
	-- Linear interpolation of binary endpoints GaAs, GaP, InAs, InP from
	-- Vurgaftman, Meyer, Ram-Mohan, J. Appl. Phys. 89, 5815 (2001).
	--
	-- Note:
	-- Composition: Ga(x)In(1-x)As(y)P(1-y); x=Ga group-III fraction, y=As group-V fraction.
	-- Linear interpolation of endpoints (no bowing applied).

	local enabled = true
	local x = state.x
	local y = state.y
	local value = (x*y)*2.06 + (x*(1.0-y))*0.49 + ((1.0-x)*y)*8.5 + ((1.0-x)*(1.0-y))*1.6

	return value, enabled
end

Luttinger parameter gamma3 (material.gamma3)

function material.gamma3(state)
	-- Luttinger parameter gamma3
	-- Units: dimensionless
	--
	-- Reference:
	-- Linear interpolation of binary endpoints GaAs, GaP, InAs, InP from
	-- Vurgaftman, Meyer, Ram-Mohan, J. Appl. Phys. 89, 5815 (2001).
	--
	-- Note:
	-- Composition: Ga(x)In(1-x)As(y)P(1-y); x=Ga group-III fraction, y=As group-V fraction.
	-- Linear interpolation of endpoints (no bowing applied).

	local enabled = true
	local x = state.x
	local y = state.y
	local value = (x*y)*2.93 + (x*(1.0-y))*1.25 + ((1.0-x)*y)*9.2 + ((1.0-x)*(1.0-y))*2.1

	return value, enabled
end

Optical absorption coefficient (material.ac)

function material.ac(state)
	-- Conduction-band hydrostatic deformation potential a_c
	-- Units: eV
	--
	-- Reference:
	-- Linear interpolation of binary endpoints GaAs, GaP, InAs, InP from
	-- Vurgaftman, Meyer, Ram-Mohan, J. Appl. Phys. 89, 5815 (2001).
	--
	-- Note:
	-- Composition: Ga(x)In(1-x)As(y)P(1-y); x=Ga group-III fraction, y=As group-V fraction.
	-- VMR sign convention: interband hydrostatic deformation potential
	-- a_gap = a_c - a_v, with a_c negative and a_v tabulated positive.
	-- Sign preserved from source; no sign flip applied.
	-- Linear interpolation of endpoints (no bowing applied).

	local enabled = true
	local x = state.x
	local y = state.y
	local value = (x*y)*-7.17 + (x*(1.0-y))*-8.2 + ((1.0-x)*y)*-5.08 + ((1.0-x)*(1.0-y))*-6

	return value, enabled
end

Optical absorption / extinction parameter (material.av)

function material.av(state)
	-- Valence-band hydrostatic deformation potential a_v
	-- Units: eV
	--
	-- Reference:
	-- Linear interpolation of binary endpoints GaAs, GaP, InAs, InP from
	-- Vurgaftman, Meyer, Ram-Mohan, J. Appl. Phys. 89, 5815 (2001).
	--
	-- Note:
	-- Composition: Ga(x)In(1-x)As(y)P(1-y); x=Ga group-III fraction, y=As group-V fraction.
	-- VMR sign convention: a_v tabulated as a POSITIVE number; the
	-- interband hydrostatic deformation potential is a_gap = a_c - a_v.
	-- Sign preserved from source; no sign flip applied.
	-- Linear interpolation of endpoints (no bowing applied).

	local enabled = true
	local x = state.x
	local y = state.y
	local value = (x*y)*1.16 + (x*(1.0-y))*1.7 + ((1.0-x)*y)*1 + ((1.0-x)*(1.0-y))*1.27

	return value, enabled
end

Recombination parameter b (material.b)

function material.b(state)
	-- Valence-band shear (tetragonal) deformation potential b
	-- Units: eV
	--
	-- Reference:
	-- Linear interpolation of binary endpoints GaAs, GaP, InAs, InP from
	-- Vurgaftman, Meyer, Ram-Mohan, J. Appl. Phys. 89, 5815 (2001).
	--
	-- Note:
	-- Composition: Ga(x)In(1-x)As(y)P(1-y); x=Ga group-III fraction, y=As group-V fraction.
	-- Sign convention as in VMR (b negative). Sign preserved; not flipped.
	-- Linear interpolation of endpoints (no bowing applied).

	local enabled = true
	local x = state.x
	local y = state.y
	local value = (x*y)*-2 + (x*(1.0-y))*-1.6 + ((1.0-x)*y)*-1.8 + ((1.0-x)*(1.0-y))*-2

	return value, enabled
end

Material parameter d (material.d)

function material.d(state)
	-- Valence-band shear (rhombohedral) deformation potential d
	-- Units: eV
	--
	-- Reference:
	-- Linear interpolation of binary endpoints GaAs, GaP, InAs, InP from
	-- Vurgaftman, Meyer, Ram-Mohan, J. Appl. Phys. 89, 5815 (2001).
	--
	-- Note:
	-- Composition: Ga(x)In(1-x)As(y)P(1-y); x=Ga group-III fraction, y=As group-V fraction.
	-- Sign convention as in VMR (d negative). Sign preserved; not flipped.
	-- Linear interpolation of endpoints (no bowing applied).

	local enabled = true
	local x = state.x
	local y = state.y
	local value = (x*y)*-4.8 + (x*(1.0-y))*-4.6 + ((1.0-x)*y)*-3.6 + ((1.0-x)*(1.0-y))*-5

	return value, enabled
end

Lattice constant a (material.lattice_a)

function material.lattice_a(state)
	-- Cubic (zincblende) lattice constant a
	-- Units: m
	--
	-- Reference:
	-- Vegard's law (linear) interpolation of GaAs, GaP, InAs, InP endpoints,
	-- Vurgaftman, Meyer, Ram-Mohan, J. Appl. Phys. 89, 5815 (2001).
	--
	-- Note:
	-- Composition: Ga(x)In(1-x)As(y)P(1-y); x=Ga group-III fraction, y=As group-V fraction.
	-- Endpoint a(T)=a300+da/dT*(T-300); linear (Vegard) mixing.

	local enabled = true
	local x = state.x
	local y = state.y
	local T = state.T
	local value = ((x*y)*(5.65325 + 3.88e-05*(T-300.0)) + (x*(1.0-y))*(5.4505 + 2.92e-05*(T-300.0)) + ((1.0-x)*y)*(6.0583 + 2.74e-05*(T-300.0)) + ((1.0-x)*(1.0-y))*(5.8697 + 2.79e-05*(T-300.0)))*1e-10

	return value, enabled
end

Elastic stiffness constant C11 (material.C11)

function material.C11(state)
	-- Elastic stiffness constant C11
	-- Units: Pa
	--
	-- Reference:
	-- Linear interpolation of binary endpoints GaAs, GaP, InAs, InP from
	-- Vurgaftman, Meyer, Ram-Mohan, J. Appl. Phys. 89, 5815 (2001).
	--
	-- Note:
	-- Composition: Ga(x)In(1-x)As(y)P(1-y); x=Ga group-III fraction, y=As group-V fraction.
	-- Linear interpolation of endpoints (no bowing applied).

	local enabled = true
	local x = state.x
	local y = state.y
	local value = ((x*y)*122.1 + (x*(1.0-y))*140.5 + ((1.0-x)*y)*83.29 + ((1.0-x)*(1.0-y))*101.1)*1e9

	return value, enabled
end

Elastic stiffness constant C12 (material.C12)

function material.C12(state)
	-- Elastic stiffness constant C12
	-- Units: Pa
	--
	-- Reference:
	-- Linear interpolation of binary endpoints GaAs, GaP, InAs, InP from
	-- Vurgaftman, Meyer, Ram-Mohan, J. Appl. Phys. 89, 5815 (2001).
	--
	-- Note:
	-- Composition: Ga(x)In(1-x)As(y)P(1-y); x=Ga group-III fraction, y=As group-V fraction.
	-- Linear interpolation of endpoints (no bowing applied).

	local enabled = true
	local x = state.x
	local y = state.y
	local value = ((x*y)*56.6 + (x*(1.0-y))*62.03 + ((1.0-x)*y)*45.26 + ((1.0-x)*(1.0-y))*56.1)*1e9

	return value, enabled
end

Elastic stiffness constant C44 (material.C44)

function material.C44(state)
    -- Elastic stiffness constant C44
    -- Units: Pa
    --
    -- No sufficiently reliable value/reference identified.
    -- Disabled rather than estimated.
    --
    -- Notes:
    -- Quaternary InGaAsP: conventionally In_(1-x)Ga_x As_y P_(1-y), but other
    -- orderings are common and the filename does not establish which
    -- state.x/state.y mapping this file uses. Not interpolated.

    local enabled = false
    local value = 0.0

    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:
    -- Quaternary InGaAsP: conventionally In_(1-x)Ga_x As_y P_(1-y), but other
    -- orderings are common and the filename does not establish which
    -- state.x/state.y mapping this file uses. Not interpolated.

    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:
    -- Quaternary InGaAsP: conventionally In_(1-x)Ga_x As_y P_(1-y), but other
    -- orderings are common and the filename does not establish which
    -- state.x/state.y mapping this file uses. Not interpolated.

    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:
    -- Quaternary InGaAsP: conventionally In_(1-x)Ga_x As_y P_(1-y), but other
    -- orderings are common and the filename does not establish which
    -- state.x/state.y mapping this file uses. Not interpolated.

    local enabled = false
    local value = 0.0

    return value, enabled
end

Piezoelectric coefficient e14 (material.e14)

function material.e14(state)
    -- Zincblende piezoelectric stress coefficient e14
    -- Units: C m^-2
    --
    -- No sufficiently reliable value/reference identified.
    -- Disabled rather than estimated.
    --
    -- Notes:
    -- Quaternary InGaAsP: conventionally In_(1-x)Ga_x As_y P_(1-y), but other
    -- orderings are common and the filename does not establish which
    -- state.x/state.y mapping this file uses. Not interpolated.

    local enabled = false
    local value = 0.0

    return value, enabled
end

Material parameter summary (material.print)

function material.print()
	-- Representative composition: In(0.73)Ga(0.27)As(0.58)P(0.42),
	-- approximately lattice-matched to InP, ~1.3 um emission.
	local state = {
		T = 300.0,
		x = 0.27,
		y = 0.58,
		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 (Ga):     %.4f", state.x))
	print(string.format("Composition y (As):     %.4f", state.y))
	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.
-- ============================================================================