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

Methylammonium lead iodide-bromide-chloride material model

1. Introduction

This page contains the OghmaNano material model for Methylammonium lead iodide-bromide-chloride (CH3NH3Pb(I1-x-y Brx Cly)3).

Methylammonium lead mixed-halide perovskite CH3NH3Pb(I1-x-y Brx Cly)3 (x = Br fraction, y = Cl fraction), pseudo-cubic phase; ternary linear interpolation of CH3NH3PbI3, CH3NH3PbBr3 and CH3NH3PbCl3.

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.
--
-- OghmaNano material file: CH3NH3Pb(I1-x-y Brx Cly)3
-- Methylammonium lead iodide-bromide-chloride
--
-- Composition: x = bromide fraction, y = chloride fraction,
-- iodide fraction = 1 - x - y (x >= 0, y >= 0, x + y <= 1),
-- taken from state.x and state.y.
--
-- Phase: Pseudo-cubic (approx C4v; exact point group C1), as in all three
-- Phase: endpoint files; the phase used by the k.p model.
--
-- Every numerical parameter is a ternary linear interpolation of the
-- endpoint files CH3NH3PbI3.lua, CH3NH3PbBr3.lua and CH3NH3PbCl3.lua:
--   p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
-- Where an endpoint function has a temperature law, the law is kept
-- and its coefficient is interpolated.
-- Generated: 29 September 2026
--
-- The eight perovskite_* functions and material.Eg_qw carry the
-- eight-band k.p parameters of the endpoint files (Table I of
-- Gawarecki et al., Phys. Rev. Applied 22, 014058 (2024)).
--
-- Units are SI unless stated otherwise. P_parallel and Pz are kept in
-- eV*Angstrom exactly as in the endpoint files (they are NOT the Kane
-- energy Ep).

local material = {}

Material name (material.name)

function material.name()
	local enabled = true

	return "Methylammonium lead iodide-bromide-chloride", enabled
end

Material description (material.description)

function material.description()
	local enabled = true

	return "Methylammonium lead mixed-halide perovskite CH3NH3Pb(I1-x-y Brx Cly)3 (x = Br fraction, y = Cl fraction), pseudo-cubic phase; ternary linear interpolation of CH3NH3PbI3, CH3NH3PbBr3 and CH3NH3PbCl3.", enabled
end

Chemical formula (material.formula)

function material.formula()
	local enabled = true

	return "CH3NH3Pb(I1-x-y Brx Cly)3", enabled
end

Band gap energy (material.Eg)

function material.Eg(state)
	-- Band gap (general device model)
	-- Units: eV
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 1.6
	--   CH3NH3PbBr3.lua  p_Br = 2.24
	--   CH3NH3PbCl3.lua  p_Cl = 2.88
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Endpoint references:
	-- CH3NH3PbI3:
	--   S. De Wolf et al., J. Phys. Chem. Lett. 5, 1035 (2014).
	--   DOI: 10.1021/jz500279b
	-- CH3NH3PbBr3:
	--   G. Mannino et al., J. Phys. Chem. Lett. 11, 2490 (2020).
	--   DOI: 10.1021/acs.jpclett.0c00295
	-- CH3NH3PbCl3:
	--   G. Maculan et al., J. Phys. Chem. Lett. 6, 3781 (2015).
	--   DOI: 10.1021/acs.jpclett.5b01666

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 1.6
	local p_Br = 2.24
	local p_Cl = 2.88
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Deformation potential Xi (material.Xi)

function material.Xi(state)
	-- Electron affinity (absolute conduction-band minimum vs vacuum)
	-- Units: eV
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 3.9
	--   CH3NH3PbBr3.lua  p_Br = 3.5
	--   CH3NH3PbCl3.lua  p_Cl = 2.9
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Endpoint references:
	-- CH3NH3PbCl3:
	--   G. Maculan et al., J. Phys. Chem. Lett. 6, 3781 (2015).

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 3.9
	local p_Br = 3.5
	local p_Cl = 2.9
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	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
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   A_I  = 1.329e+24
	--   CH3NH3PbBr3.lua  A_Br = 1.885e+24
	--   CH3NH3PbCl3.lua  A_Cl = 2.415e+24
	-- Interpolation: ternary linear interpolation
	-- A(x,y) = (1-x-y)*A_I + x*A_Br + y*A_Cl
	-- value = A*(T/300)^1.5 (temperature law of the endpoint files)
	-- Generated: 29 September 2026
	--
	-- Endpoint reference:
	-- Gawarecki et al., Phys. Rev. Applied 22, 014058 (2024), Table I
	-- (valence-band masses m_v used for the endpoint values).

	local enabled = true
	local T = state.T
	local x = state.x
	local y = state.y
	local A_I = 1.329e+24
	local A_Br = 1.885e+24
	local A_Cl = 2.415e+24
	local A = (1.0-x-y)*A_I + x*A_Br + y*A_Cl
	local value = A*(T/300.0)^1.5

	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
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   A_I  = 1.329e+24
	--   CH3NH3PbBr3.lua  A_Br = 1.885e+24
	--   CH3NH3PbCl3.lua  A_Cl = 2.415e+24
	-- Interpolation: ternary linear interpolation
	-- A(x,y) = (1-x-y)*A_I + x*A_Br + y*A_Cl
	-- value = A*(T/300)^1.5 (temperature law of the endpoint files)
	-- Generated: 29 September 2026
	--
	-- Endpoint reference:
	-- Gawarecki et al., Phys. Rev. Applied 22, 014058 (2024), Table I
	-- (valence-band masses m_v used for the endpoint values).

	local enabled = true
	local T = state.T
	local x = state.x
	local y = state.y
	local A_I = 1.329e+24
	local A_Br = 1.885e+24
	local A_Cl = 2.415e+24
	local A = (1.0-x-y)*A_I + x*A_Br + y*A_Cl
	local value = A*(T/300.0)^1.5

	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
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   A_I  = 2.000e-03
	--   CH3NH3PbBr3.lua  A_Br = 1.000e-03
	--   CH3NH3PbCl3.lua  A_Cl = 5.000e-04
	-- Interpolation: ternary linear interpolation
	-- A(x,y) = (1-x-y)*A_I + x*A_Br + y*A_Cl
	-- value = A*(300/T)^1.5 (temperature law of the endpoint files)
	-- Generated: 29 September 2026
	--
	-- Endpoint references:
	-- CH3NH3PbI3:
	--   L. M. Herz, ACS Energy Lett. 2, 1539 (2017).

	local enabled = true
	local T = state.T
	local x = state.x
	local y = state.y
	local A_I = 2.000e-03
	local A_Br = 1.000e-03
	local A_Cl = 5.000e-04
	local A = (1.0-x-y)*A_I + x*A_Br + y*A_Cl
	local value = A*(300.0/T)^1.5

	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
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   A_I  = 2.000e-03
	--   CH3NH3PbBr3.lua  A_Br = 1.000e-03
	--   CH3NH3PbCl3.lua  A_Cl = 5.000e-04
	-- Interpolation: ternary linear interpolation
	-- A(x,y) = (1-x-y)*A_I + x*A_Br + y*A_Cl
	-- value = A*(300/T)^1.5 (temperature law of the endpoint files)
	-- Generated: 29 September 2026
	--
	-- Endpoint references:
	-- CH3NH3PbI3:
	--   L. M. Herz, ACS Energy Lett. 2, 1539 (2017).

	local enabled = true
	local T = state.T
	local x = state.x
	local y = state.y
	local A_I = 2.000e-03
	local A_Br = 1.000e-03
	local A_Cl = 5.000e-04
	local A = (1.0-x-y)*A_I + x*A_Br + y*A_Cl
	local value = A*(300.0/T)^1.5

	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 permittivity for the electrostatic (drift-diffusion) model
	-- Dimensionless
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 25.0
	--   CH3NH3PbBr3.lua  p_Br = 25.0
	--   CH3NH3PbCl3.lua  p_Cl = 23.0
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Endpoint reference:
	-- S. Becker et al., Nature 553, 189 (2018), arXiv:1707.03071.

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 25.0
	local p_Br = 25.0
	local p_Cl = 23.0
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	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
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 1.000e-16
	--   CH3NH3PbBr3.lua  p_Br = 1.000e-16
	--   CH3NH3PbCl3.lua  p_Cl = 1.000e-16
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Endpoint reference:
	-- L. M. Herz, Acc. Chem. Res. 49, 146 (2016).

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 1.000e-16
	local p_Br = 1.000e-16
	local p_Cl = 1.000e-16
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	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
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 1.0e-40
	--   CH3NH3PbBr3.lua  p_Br = 1.0e-40
	--   CH3NH3PbCl3.lua  p_Cl = 1.0e-40
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Endpoint reference:
	-- L. M. Herz, Acc. Chem. Res. 49, 146 (2016).

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 1.0e-40
	local p_Br = 1.0e-40
	local p_Cl = 1.0e-40
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	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
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 1.0e-40
	--   CH3NH3PbBr3.lua  p_Br = 1.0e-40
	--   CH3NH3PbCl3.lua  p_Cl = 1.0e-40
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Endpoint reference:
	-- L. M. Herz, Acc. Chem. Res. 49, 146 (2016).

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 1.0e-40
	local p_Br = 1.0e-40
	local p_Cl = 1.0e-40
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Interface trap energy (material.ss_srh_trap_energy)

function material.ss_srh_trap_energy(state)
	-- SRH trap energy relative to mid-gap
	-- Units: eV
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 0.0
	--   CH3NH3PbBr3.lua  p_Br = 0.0
	--   CH3NH3PbCl3.lua  p_Cl = 0.0
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 0.0
	local p_Br = 0.0
	local p_Cl = 0.0
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Interface trap density (material.ss_srh_Nt)

function material.ss_srh_Nt(state)
	-- SRH trap density
	-- Units: m^-3
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 1.0e21
	--   CH3NH3PbBr3.lua  p_Br = 1.0e21
	--   CH3NH3PbCl3.lua  p_Cl = 1.0e21
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 1.0e21
	local p_Br = 1.0e21
	local p_Cl = 1.0e21
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	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
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 1.0e-19
	--   CH3NH3PbBr3.lua  p_Br = 1.0e-19
	--   CH3NH3PbCl3.lua  p_Cl = 1.0e-19
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 1.0e-19
	local p_Br = 1.0e-19
	local p_Cl = 1.0e-19
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	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
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 1.0e-19
	--   CH3NH3PbBr3.lua  p_Br = 1.0e-19
	--   CH3NH3PbCl3.lua  p_Cl = 1.0e-19
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 1.0e-19
	local p_Br = 1.0e-19
	local p_Cl = 1.0e-19
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Lattice thermal conductivity (material.thermal_kl)

function material.thermal_kl(state)
	-- Thermal conductivity
	-- Units: W m^-1 K^-1
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 0.4
	--   CH3NH3PbBr3.lua  p_Br = 0.4
	--   CH3NH3PbCl3.lua  p_Cl = 0.4
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Endpoint references:
	-- CH3NH3PbI3:
	--   A. Pisoni et al., J. Phys. Chem. Lett. 5, 2488 (2014).

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 0.4
	local p_Br = 0.4
	local p_Cl = 0.4
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Specific heat capacity (material.heat_capacity)

function material.heat_capacity(state)
	-- Specific heat capacity
	-- Units: J kg^-1 K^-1
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 330.0
	--   CH3NH3PbBr3.lua  p_Br = 330.0
	--   CH3NH3PbCl3.lua  p_Cl = 330.0
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 330.0
	local p_Br = 330.0
	local p_Cl = 330.0
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Mass density (material.density)

function material.density(state)
	-- Mass density
	-- Units: kg m^-3
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 4060.9
	--   CH3NH3PbBr3.lua  p_Br = 3870.7
	--   CH3NH3PbCl3.lua  p_Cl = 3140.1
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 4060.9
	local p_Br = 3870.7
	local p_Cl = 3140.1
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Crystal lattice constant (material.lattice_constant)

function material.lattice_constant(state)
	-- Cubic / pseudo-cubic lattice constant
	-- Units: m
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 6.329e-10
	--   CH3NH3PbBr3.lua  p_Br = 5.901e-10
	--   CH3NH3PbCl3.lua  p_Cl = 5.675e-10
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Endpoint reference:
	-- K. Gawarecki, M. Wisniewski, M. Polak, R. Kudrawiec,
	-- and M. Gladysiewicz,
	-- "Eight-band k.p description and material gain for selected
	-- cubic and pseudocubic perovskites,"
	-- Physical Review Applied 22, 014058 (2024).
	-- DOI: 10.1103/PhysRevApplied.22.014058
	-- Table I.

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 6.329e-10
	local p_Br = 5.901e-10
	local p_Cl = 5.675e-10
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	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
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 1.000000e-12
	--   CH3NH3PbBr3.lua  p_Br = 1.000000e-12
	--   CH3NH3PbCl3.lua  p_Cl = 1.000000e-12
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 1.000000e-12
	local p_Br = 1.000000e-12
	local p_Cl = 1.000000e-12
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	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
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 1.000000e-12
	--   CH3NH3PbBr3.lua  p_Br = 1.000000e-12
	--   CH3NH3PbCl3.lua  p_Cl = 1.000000e-12
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 1.000000e-12
	local p_Br = 1.000000e-12
	local p_Cl = 1.000000e-12
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Band gap for quantum-well calculations (material.Eg_qw)

function material.Eg_qw(state)
	-- Band gap used by the eight-band k.p Hamiltonian (R point)
	-- Units: eV
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 1.549
	--   CH3NH3PbBr3.lua  p_Br = 2.277
	--   CH3NH3PbCl3.lua  p_Cl = 3.007
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- DFT gap used by the eight-band k.p Hamiltonian; distinct from
	-- material.Eg() (the device-model gap).
	--
	-- Endpoint reference:
	-- K. Gawarecki, M. Wisniewski, M. Polak, R. Kudrawiec,
	-- and M. Gladysiewicz,
	-- "Eight-band k.p description and material gain for selected
	-- cubic and pseudocubic perovskites,"
	-- Physical Review Applied 22, 014058 (2024).
	-- DOI: 10.1103/PhysRevApplied.22.014058
	-- Table I.

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 1.549
	local p_Br = 2.277
	local p_Cl = 3.007
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Perovskite conduction-band splitting parameter delta_c (material.perovskite_delta_c)

function material.perovskite_delta_c(state)
	-- Conduction-band spin-orbit splitting Delta_c
	-- Units: eV
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 1.5
	--   CH3NH3PbBr3.lua  p_Br = 1.508
	--   CH3NH3PbCl3.lua  p_Cl = 1.506
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Perovskite-specific conduction-band spin-orbit parameter (the CB
	-- is p-like). NOT a III-V valence-band delta_so.
	--
	-- Endpoint reference:
	-- K. Gawarecki, M. Wisniewski, M. Polak, R. Kudrawiec,
	-- and M. Gladysiewicz,
	-- "Eight-band k.p description and material gain for selected
	-- cubic and pseudocubic perovskites,"
	-- Physical Review Applied 22, 014058 (2024).
	-- DOI: 10.1103/PhysRevApplied.22.014058
	-- Table I.

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 1.5
	local p_Br = 1.508
	local p_Cl = 1.506
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Perovskite band-structure splitting parameter delta (material.perovskite_delta)

function material.perovskite_delta(state)
	-- Non-cubic splitting parameter delta
	-- Units: eV
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 0.075
	--   CH3NH3PbBr3.lua  p_Br = 0.057
	--   CH3NH3PbCl3.lua  p_Cl = 0.045
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Endpoint reference:
	-- K. Gawarecki, M. Wisniewski, M. Polak, R. Kudrawiec,
	-- and M. Gladysiewicz,
	-- "Eight-band k.p description and material gain for selected
	-- cubic and pseudocubic perovskites,"
	-- Physical Review Applied 22, 014058 (2024).
	-- DOI: 10.1103/PhysRevApplied.22.014058
	-- Table I.

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 0.075
	local p_Br = 0.057
	local p_Cl = 0.045
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Perovskite band-structure parameter zeta (material.perovskite_zeta)

function material.perovskite_zeta(state)
	-- Non-cubic / asymmetry coupling zeta
	-- Units: eV
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 0.045
	--   CH3NH3PbBr3.lua  p_Br = 0.03
	--   CH3NH3PbCl3.lua  p_Cl = 0.016
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Endpoint reference:
	-- K. Gawarecki, M. Wisniewski, M. Polak, R. Kudrawiec,
	-- and M. Gladysiewicz,
	-- "Eight-band k.p description and material gain for selected
	-- cubic and pseudocubic perovskites,"
	-- Physical Review Applied 22, 014058 (2024).
	-- DOI: 10.1103/PhysRevApplied.22.014058
	-- Table I.

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 0.045
	local p_Br = 0.03
	local p_Cl = 0.016
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Perovskite in-plane momentum matrix element (material.perovskite_P_parallel)

function material.perovskite_P_parallel(state)
	-- Kane momentum coupling P_parallel
	-- Units: eV Angstrom
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 8.097
	--   CH3NH3PbBr3.lua  p_Br = 8.623
	--   CH3NH3PbCl3.lua  p_Cl = 8.878
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Kept in eV*Angstrom as in the endpoint files; NOT the Kane energy Ep.
	--
	-- Endpoint reference:
	-- K. Gawarecki, M. Wisniewski, M. Polak, R. Kudrawiec,
	-- and M. Gladysiewicz,
	-- "Eight-band k.p description and material gain for selected
	-- cubic and pseudocubic perovskites,"
	-- Physical Review Applied 22, 014058 (2024).
	-- DOI: 10.1103/PhysRevApplied.22.014058
	-- Table I.

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 8.097
	local p_Br = 8.623
	local p_Cl = 8.878
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Perovskite out-of-plane momentum matrix element (material.perovskite_Pz)

function material.perovskite_Pz(state)
	-- Kane momentum coupling P_z
	-- Units: eV Angstrom
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 9.058
	--   CH3NH3PbBr3.lua  p_Br = 9.302
	--   CH3NH3PbCl3.lua  p_Cl = 9.896
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Kept in eV*Angstrom as in the endpoint files; NOT the Kane energy Ep.
	--
	-- Endpoint reference:
	-- K. Gawarecki, M. Wisniewski, M. Polak, R. Kudrawiec,
	-- and M. Gladysiewicz,
	-- "Eight-band k.p description and material gain for selected
	-- cubic and pseudocubic perovskites,"
	-- Physical Review Applied 22, 014058 (2024).
	-- DOI: 10.1103/PhysRevApplied.22.014058
	-- Table I.

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 9.058
	local p_Br = 9.302
	local p_Cl = 9.896
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Perovskite band parameter gamma1 prime (material.perovskite_gamma1_prime)

function material.perovskite_gamma1_prime(state)
	-- Modified Luttinger-like parameter gamma1' (primed)
	-- Units: dimensionless
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 2.967
	--   CH3NH3PbBr3.lua  p_Br = 2.144
	--   CH3NH3PbCl3.lua  p_Cl = 1.581
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- PRIMED far-band parameter used directly in the Hamiltonian.
	-- Do NOT substitute the unprimed gamma1.
	--
	-- Endpoint reference:
	-- K. Gawarecki, M. Wisniewski, M. Polak, R. Kudrawiec,
	-- and M. Gladysiewicz,
	-- "Eight-band k.p description and material gain for selected
	-- cubic and pseudocubic perovskites,"
	-- Physical Review Applied 22, 014058 (2024).
	-- DOI: 10.1103/PhysRevApplied.22.014058
	-- Table I.

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 2.967
	local p_Br = 2.144
	local p_Cl = 1.581
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Perovskite band parameter gamma2 prime (material.perovskite_gamma2_prime)

function material.perovskite_gamma2_prime(state)
	-- Modified Luttinger-like parameter gamma2' (primed)
	-- Units: dimensionless
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 0.286
	--   CH3NH3PbBr3.lua  p_Br = 0.19
	--   CH3NH3PbCl3.lua  p_Cl = 0.14
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- PRIMED far-band parameter used directly in the Hamiltonian.
	-- Do NOT substitute the unprimed gamma2.
	--
	-- Endpoint reference:
	-- K. Gawarecki, M. Wisniewski, M. Polak, R. Kudrawiec,
	-- and M. Gladysiewicz,
	-- "Eight-band k.p description and material gain for selected
	-- cubic and pseudocubic perovskites,"
	-- Physical Review Applied 22, 014058 (2024).
	-- DOI: 10.1103/PhysRevApplied.22.014058
	-- Table I.

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 0.286
	local p_Br = 0.19
	local p_Cl = 0.14
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Perovskite band parameter gamma3 prime (material.perovskite_gamma3_prime)

function material.perovskite_gamma3_prime(state)
	-- Modified Luttinger-like parameter gamma3' (primed)
	-- Units: dimensionless
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = -1.15
	--   CH3NH3PbBr3.lua  p_Br = -1.06
	--   CH3NH3PbCl3.lua  p_Cl = -0.599
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- PRIMED far-band parameter used directly in the Hamiltonian.
	-- Do NOT substitute the unprimed gamma3.
	--
	-- Endpoint reference:
	-- K. Gawarecki, M. Wisniewski, M. Polak, R. Kudrawiec,
	-- and M. Gladysiewicz,
	-- "Eight-band k.p description and material gain for selected
	-- cubic and pseudocubic perovskites,"
	-- Physical Review Applied 22, 014058 (2024).
	-- DOI: 10.1103/PhysRevApplied.22.014058
	-- Table I.

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = -1.15
	local p_Br = -1.06
	local p_Cl = -0.599
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Longitudinal optical phonon energy (material.phonon_lo_energy)

function material.phonon_lo_energy(state)
	-- Effective longitudinal optical phonon energy
	-- Units: eV
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 0.0115
	--   CH3NH3PbBr3.lua  p_Br = 0.0153
	--   CH3NH3PbCl3.lua  p_Cl = 0.0279
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Endpoint references:
	-- CH3NH3PbI3:
	--   A. D. Wright et al., Nature Communications 7, 11755 (2016).
	-- CH3NH3PbBr3:
	--   A. D. Wright et al., Nature Communications 7, 11755 (2016).
	-- CH3NH3PbCl3:
	--   M. Sendner et al., Materials Horizons 3, 613-620 (2016).

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 0.0115
	local p_Br = 0.0153
	local p_Cl = 0.0279
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Static dielectric constant (material.epsilon_static)

function material.epsilon_static(state)
	-- Static dielectric constant used for polar optical phonon scattering
	-- Dimensionless
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 33.5
	--   CH3NH3PbBr3.lua  p_Br = 32.3
	--   CH3NH3PbCl3.lua  p_Cl = 29.8
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Endpoint reference:
	-- M. Sendner et al., Materials Horizons 3, 613-620 (2016).

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 33.5
	local p_Br = 32.3
	local p_Cl = 29.8
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

High-frequency dielectric constant (material.epsilon_inf)

function material.epsilon_inf(state)
	-- High-frequency dielectric constant used for polar optical phonon scattering
	-- Dimensionless
	--
	-- Endpoint values:
	--   CH3NH3PbI3.lua   p_I  = 5.0
	--   CH3NH3PbBr3.lua  p_Br = 4.7
	--   CH3NH3PbCl3.lua  p_Cl = 4.0
	-- Interpolation: ternary linear interpolation
	-- p(x,y) = (1-x-y)*p_I + x*p_Br + y*p_Cl
	-- Generated: 29 September 2026
	--
	-- Endpoint reference:
	-- M. Sendner et al., Materials Horizons 3, 613-620 (2016).

	local enabled = true
	local x = state.x
	local y = state.y
	local p_I = 5.0
	local p_Br = 4.7
	local p_Cl = 4.0
	local value = (1.0-x-y)*p_I + x*p_Br + y*p_Cl

	return value, enabled
end

Elastic stiffness constant C11 (material.C11)

function material.C11(state)
    -- Elastic stiffness constant C11
    -- Units: Pa
    --
    -- Composition: CH3NH3Pb(I_(1-x-y) Br_x Cl_y)3, x = state.x (Br), y = state.y (Cl).
    --
    -- Endpoints (cubic phases):
    -- MAPbI3 (INS, 340 K, cubic) and MAPbBr3 (INS, RT):
    -- A. C. Ferreira, A. Letoublon, S. Paofai, S. Raymond, C. Ecolivet,
    -- B. Ruffle, S. Cordier, C. Katan, M. I. Saidaminov, A. A. Zhumekenov,
    -- O. M. Bakr, J. Even, P. Bourges,
    -- "Elastic softness of hybrid lead halide perovskites,"
    -- Phys. Rev. Lett. 121, 085502 (2018).
    -- DOI: 10.1103/PhysRevLett.121.085502
    -- MAPbCl3 (Brillouin RT; C12 derived as in CH3NH3PbCl3.lua):
    -- J. W. Lee, F. H. Naqvi, J.-H. Ko, T. H. Kim, C. W. Ahn,
    -- "Acoustic anomalies and the critical slowing-down behavior of MAPbCl3
    -- single crystals studied by Brillouin light scattering,"
    -- Materials 15, 3692 (2022).
    -- DOI: 10.3390/ma15103692
    --
    -- Interpolation:
    -- Linear (Vegard-type) in halide fractions:
    -- value = (1-x-y)*I + x*Br + y*Cl. Supported for C11 on the Br-Cl side by
    -- the quasi-linear C11(Cl content) reported in
    -- "Influence of halides on elastic and vibrational properties of
    -- mixed-halide perovskite systems studied by Brillouin and Raman
    -- scattering," Materials 16, 3986 (2023).
    -- DOI: 10.3390/ma16113986
    -- No bowing applied. MAPbI3 is tetragonal at 300 K; its endpoint is the
    -- cubic-phase value at 340 K.
    -- Endpoint values (GPa): I 21.8, Br 34.5, Cl 41.0.

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

    local I = 21.8e9
    local Br = 34.5e9
    local Cl = 41.0e9

    local value = (1.0-x-y)*I + x*Br + y*Cl

    return value, enabled
end

Elastic stiffness constant C12 (material.C12)

function material.C12(state)
    -- Elastic stiffness constant C12
    -- Units: Pa
    --
    -- Composition: CH3NH3Pb(I_(1-x-y) Br_x Cl_y)3, x = state.x (Br), y = state.y (Cl).
    --
    -- Endpoints (cubic phases):
    -- MAPbI3 (INS, 340 K, cubic) and MAPbBr3 (INS, RT):
    -- A. C. Ferreira, A. Letoublon, S. Paofai, S. Raymond, C. Ecolivet,
    -- B. Ruffle, S. Cordier, C. Katan, M. I. Saidaminov, A. A. Zhumekenov,
    -- O. M. Bakr, J. Even, P. Bourges,
    -- "Elastic softness of hybrid lead halide perovskites,"
    -- Phys. Rev. Lett. 121, 085502 (2018).
    -- DOI: 10.1103/PhysRevLett.121.085502
    -- MAPbCl3 (Brillouin RT; C12 derived as in CH3NH3PbCl3.lua):
    -- J. W. Lee, F. H. Naqvi, J.-H. Ko, T. H. Kim, C. W. Ahn,
    -- "Acoustic anomalies and the critical slowing-down behavior of MAPbCl3
    -- single crystals studied by Brillouin light scattering,"
    -- Materials 15, 3692 (2022).
    -- DOI: 10.3390/ma15103692
    --
    -- Interpolation:
    -- Linear (Vegard-type) in halide fractions:
    -- value = (1-x-y)*I + x*Br + y*Cl. Supported for C11 on the Br-Cl side by
    -- the quasi-linear C11(Cl content) reported in
    -- "Influence of halides on elastic and vibrational properties of
    -- mixed-halide perovskite systems studied by Brillouin and Raman
    -- scattering," Materials 16, 3986 (2023).
    -- DOI: 10.3390/ma16113986
    -- No bowing applied. MAPbI3 is tetragonal at 300 K; its endpoint is the
    -- cubic-phase value at 340 K.
    -- Endpoint values (GPa): I 11.3, Br 18.5, Cl 19.4.

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

    local I = 11.3e9
    local Br = 18.5e9
    local Cl = 19.4e9

    local value = (1.0-x-y)*I + x*Br + y*Cl

    return value, enabled
end

Elastic stiffness constant C44 (material.C44)

function material.C44(state)
    -- Elastic stiffness constant C44
    -- Units: Pa
    --
    -- Composition: CH3NH3Pb(I_(1-x-y) Br_x Cl_y)3, x = state.x (Br), y = state.y (Cl).
    --
    -- Endpoints (cubic phases):
    -- MAPbI3 (INS, 340 K, cubic) and MAPbBr3 (INS, RT):
    -- A. C. Ferreira, A. Letoublon, S. Paofai, S. Raymond, C. Ecolivet,
    -- B. Ruffle, S. Cordier, C. Katan, M. I. Saidaminov, A. A. Zhumekenov,
    -- O. M. Bakr, J. Even, P. Bourges,
    -- "Elastic softness of hybrid lead halide perovskites,"
    -- Phys. Rev. Lett. 121, 085502 (2018).
    -- DOI: 10.1103/PhysRevLett.121.085502
    -- MAPbCl3 (Brillouin RT; C12 derived as in CH3NH3PbCl3.lua):
    -- J. W. Lee, F. H. Naqvi, J.-H. Ko, T. H. Kim, C. W. Ahn,
    -- "Acoustic anomalies and the critical slowing-down behavior of MAPbCl3
    -- single crystals studied by Brillouin light scattering,"
    -- Materials 15, 3692 (2022).
    -- DOI: 10.3390/ma15103692
    --
    -- Interpolation:
    -- Linear (Vegard-type) in halide fractions:
    -- value = (1-x-y)*I + x*Br + y*Cl. Supported for C11 on the Br-Cl side by
    -- the quasi-linear C11(Cl content) reported in
    -- "Influence of halides on elastic and vibrational properties of
    -- mixed-halide perovskite systems studied by Brillouin and Raman
    -- scattering," Materials 16, 3986 (2023).
    -- DOI: 10.3390/ma16113986
    -- No bowing applied. MAPbI3 is tetragonal at 300 K; its endpoint is the
    -- cubic-phase value at 340 K.
    -- Endpoint values (GPa): I 7.3, Br 4.1, Cl 3.74.

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

    local I = 7.3e9
    local Br = 4.1e9
    local Cl = 3.74e9

    local value = (1.0-x-y)*I + x*Br + y*Cl

    return value, enabled
end

Electron acoustic deformation potential (material.D_ac_e)

function material.D_ac_e(state)
    -- Effective scalar acoustic deformation potential for electrons
    -- Units: eV
    --
    -- No sufficiently reliable value/reference identified.
    -- Disabled rather than estimated.
    --
    -- Notes:
    -- Targeted search (coherent-acoustic-phonon / picosecond-ultrasonics
    -- experiments, temperature-dependent mobility fits, first-principles
    -- deformation-potential and electron-phonon studies, band-edge strain
    -- studies) found no defensible, separately-resolved scalar acoustic
    -- deformation potential for electrons and holes in this compound.
    -- Mobility-fit analyses of halide perovskites (e.g. the review by
    -- L. M. Herz, ACS Energy Lett. 2, 1539 (2017), DOI 10.1021/
    -- acsenergylett.7b00276) conclude that acoustic deformation-potential
    -- scattering is weak compared with Frohlich scattering but give no
    -- compound-specific D_ac. Band-gap deformation potentials (dEg/dlnV) and
    -- optical/Frohlich coupling constants are not substitutes. The only
    -- experimental separation of electron and hole values found is for
    -- MAPbI3 (Mante et al., Nat. Commun. 8, 14398 (2017)); transferring it to
    -- other halides or cations is not justified.
    -- Mixed-halide file: only the MAPbI3 endpoint is experimentally available
    -- (see CH3NH3PbI3.lua), so no composition-dependent value can be built
    -- for MAPb(I,Br,Cl)3 without inventing the Br and Cl endpoints.

    local enabled = false
    local value = 0.0

    return value, enabled
end

Hole acoustic deformation potential (material.D_ac_h)

function material.D_ac_h(state)
    -- Effective scalar acoustic deformation potential for holes
    -- Units: eV
    --
    -- No sufficiently reliable value/reference identified.
    -- Disabled rather than estimated.
    --
    -- Notes:
    -- Targeted search (coherent-acoustic-phonon / picosecond-ultrasonics
    -- experiments, temperature-dependent mobility fits, first-principles
    -- deformation-potential and electron-phonon studies, band-edge strain
    -- studies) found no defensible, separately-resolved scalar acoustic
    -- deformation potential for electrons and holes in this compound.
    -- Mobility-fit analyses of halide perovskites (e.g. the review by
    -- L. M. Herz, ACS Energy Lett. 2, 1539 (2017), DOI 10.1021/
    -- acsenergylett.7b00276) conclude that acoustic deformation-potential
    -- scattering is weak compared with Frohlich scattering but give no
    -- compound-specific D_ac. Band-gap deformation potentials (dEg/dlnV) and
    -- optical/Frohlich coupling constants are not substitutes. The only
    -- experimental separation of electron and hole values found is for
    -- MAPbI3 (Mante et al., Nat. Commun. 8, 14398 (2017)); transferring it to
    -- other halides or cations is not justified.
    -- Only the MAPbI3 endpoint is available; see D_ac_e above.

    local enabled = false
    local value = 0.0

    return value, enabled
end

Material parameter summary (material.print)

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)))
	print(string.format("Lattice constant:       %.6e m", material.lattice_constant(state)))

	print(string.format("kp Eg (Hamiltonian):    %.6f eV", material.Eg_qw(state)))
	print(string.format("kp Delta_c:             %.6f eV", material.perovskite_delta_c(state)))
	print(string.format("kp delta:               %.6f eV", material.perovskite_delta(state)))
	print(string.format("kp zeta:                %.6f eV", material.perovskite_zeta(state)))
	print(string.format("kp P_parallel:           %.6f eV A", material.perovskite_P_parallel(state)))
	print(string.format("kp Pz:                   %.6f eV A", material.perovskite_Pz(state)))
	print(string.format("kp gamma1 prime:         %.6f", material.perovskite_gamma1_prime(state)))
	print(string.format("kp gamma2 prime:         %.6f", material.perovskite_gamma2_prime(state)))
	print(string.format("kp gamma3 prime:         %.6f", material.perovskite_gamma3_prime(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.
-- ============================================================================