CH3NH3PbBr3 material model
1. Introduction
This page contains the OghmaNano material model for CH3NH3PbBr3 (CH3NH3PbBr3).
Methylammonium lead tribromide (MAPbBr3), 3D hybrid perovskite (wide-gap absorber)
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
-- See end of file for copyright, licensing and documentation links.
local material = {}
function material.name()
local enabled = true
return "CH3NH3PbBr3", enabled
end
function material.description()
local enabled = true
return "Methylammonium lead tribromide (MAPbBr3), 3D hybrid perovskite (wide-gap absorber)", enabled
end
function material.formula()
local enabled = true
return "CH3NH3PbBr3", enabled
end
function material.Eg(state)
-- Units: eV
--
-- Reference:
-- M. A. Green, A. Ho-Baillie, H. J. Snaith, Nat. Photonics 8, 506,
-- 2014; halide-perovskite optical literature.
--
-- Direct gap ~2.30 eV at 300 K (reported ~2.2-2.3 eV).
--
-- Note: like MAPbI3, MAPbBr3 has an ANOMALOUS POSITIVE dEg/dT
-- (~+0.3 meV/K, opposite to Varshni). The linear term below is
-- approximate. MAPbBr3 is cubic at room temperature (see
-- lattice_constant).
local enabled = true
local T = state.T
local value = 2.30 + 3.0e-4*(T - 300.0)
return value, enabled
end
function material.Xi(state)
-- Electron affinity
-- Units: eV
--
-- Reference:
-- Photoemission / device band-alignment literature for MAPbBr3.
--
-- Conduction-band minimum ~ -3.6 eV vs vacuum (electron affinity
-- ~3.6 eV); with Eg ~2.3 eV the valence band is at ~ -5.9 eV. Both
-- bands are shallower/deeper than MAPbI3 respectively. Reported
-- values scatter ~0.2 eV. Approximate.
local enabled = true
local value = 3.6
return value, enabled
end
function material.Nc(state)
-- Effective conduction-band density of states
-- Units: m^-3
--
-- Reference:
-- From CB effective mass m_e* ~ 0.23 m0 (slightly heavier than the
-- iodide): Nc(300 K) ~ 2.5e18 cm^-3 = 2.5e24 m^-3. Approximate.
local enabled = true
local T = state.T
local value = 2.5e24*(T/300.0)^1.5
return value, enabled
end
function material.Nv(state)
-- Effective valence-band density of states
-- Units: m^-3
--
-- Reference:
-- From VB effective mass m_h* ~ 0.26 m0:
-- Nv(300 K) ~ 3.0e18 cm^-3 = 3.0e24 m^-3. Approximate.
local enabled = true
local T = state.T
local value = 3.0e24*(T/300.0)^1.5
return value, enabled
end
function material.mu_e(state)
-- Low-field electron mobility
-- Units: m^2 V^-1 s^-1
--
-- Reference:
-- L. M. Herz, "Charge-Carrier Mobilities in Metal Halide
-- Perovskites", Annu. Rev. Phys. Chem. 67, 65, 2016.
--
-- Single-crystal MAPbBr3 ~20-115 cm^2/V/s; device films lower. A
-- representative 10 cm^2/V/s = 1e-3 m^2/V/s is used with a
-- (300/T)^1.5 phonon form. Approximate; tune to film.
local enabled = true
local T = state.T
local value = 1.0e-3*(300.0/T)^1.5
return value, enabled
end
function material.mue_x(state)
return material.mu_e(state)
end
function material.mue_y(state)
return material.mu_e(state)
end
function material.mue_z(state)
return material.mu_e(state)
end
function material.mu_h(state)
-- Low-field hole mobility
-- Units: m^2 V^-1 s^-1
--
-- Reference:
-- L. M. Herz, Annu. Rev. Phys. Chem. 67, 65, 2016.
--
-- Comparable to the electron value (fairly ambipolar); 10
-- cm^2/V/s = 1e-3 m^2/V/s with (300/T)^1.5. Approximate.
local enabled = true
local T = state.T
local value = 1.0e-3*(300.0/T)^1.5
return value, enabled
end
function material.muh_x(state)
return material.mu_h(state)
end
function material.muh_y(state)
return material.mu_h(state)
end
function material.muh_z(state)
return material.mu_h(state)
end
function material.epsilonr(state)
-- Relative static permittivity
-- Dimensionless
--
-- Reference:
-- Dielectric studies of MAPbBr3.
--
-- Frequency-dependent: high-frequency epsilon_inf ~4.7-5; the
-- low-frequency value (ionic + MA dipole) rises to ~25-30. A
-- low-frequency value ~25 is used for drift-diffusion; choose to
-- match your timescale. Approximate.
local enabled = true
local value = 25.0
return value, enabled
end
function material.free_to_free_recombination(state)
-- Radiative (band-to-band) recombination coefficient
-- Units: m^3 s^-1
--
-- Reference:
-- L. M. Herz, Annu. Rev. Phys. Chem. 67, 65, 2016.
--
-- Bimolecular coefficient ~1e-10 cm^3/s = 1e-16 m^3/s. Direct-gap
-- emitter (MAPbBr3 is a good green emitter). Approximate.
local enabled = true
local value = 1.0e-16
return value, enabled
end
function material.auger_Cn(state)
-- Electron Auger recombination coefficient
-- Units: m^6 s^-1
--
-- Reference:
-- L. M. Herz, Annu. Rev. Phys. Chem. 67, 65, 2016.
-- ~1e-28 cm^6/s = 1e-40 m^6/s. Approximate.
local enabled = true
local value = 1.0e-40
return value, enabled
end
function material.auger_Cp(state)
-- Hole Auger recombination coefficient
-- Units: m^6 s^-1
--
-- Reference:
-- L. M. Herz, Annu. Rev. Phys. Chem. 67, 65, 2016.
-- ~1e-28 cm^6/s = 1e-40 m^6/s. Approximate.
local enabled = true
local value = 1.0e-40
return value, enabled
end
function material.ss_srh_trap_energy(state)
-- SRH trap energy relative to the middle of the band gap.
-- Units: eV
--
-- Positive values are above mid-gap (towards the conduction band).
-- Negative values are below mid-gap (towards the valence band).
local enabled = true
local value = 0.0
return value, enabled
end
function material.ss_srh_Nt(state)
-- SRH trap density
-- Units: m^-3
--
-- Note: quality-dependent placeholder (~1e15 cm^-3 for good
-- films); interfaces dominate real devices. Set from measurement.
local enabled = true
local value = 1.0e21
return value, enabled
end
function material.ss_srh_sigma_n(state)
-- Electron capture cross section
-- Units: m^2
local enabled = true
local value = 1.0e-19
return value, enabled
end
function material.ss_srh_sigma_p(state)
-- Hole capture cross section
-- Units: m^2
local enabled = true
local value = 1.0e-19
return value, enabled
end
function material.thermal_conductivity(state)
-- Thermal conductivity
-- Units: W m^-1 K^-1
--
-- Reference:
-- Ultralow lattice thermal conductivity of MAPbBr3, ~0.4-0.5
-- W/m/K (strong anharmonicity, MA disorder).
--
-- A value of 0.5 W/m/K is used. Approximate.
local enabled = true
local value = 0.5
return value, enabled
end
function material.heat_capacity(state)
-- Specific heat capacity
-- Units: J kg^-1 K^-1
--
-- Reference:
-- Calorimetry of MAPbBr3, c_p(300 K) ~ 330 J/kg/K. Approximate.
local enabled = true
local value = 330.0
return value, enabled
end
function material.density(state)
-- Mass density
-- Units: kg m^-3
--
-- Reference:
-- C. C. Stoumpos, C. D. Malliakas, M. G. Kanatzidis, Inorg. Chem.
-- 52, 9019, 2013. Cubic MAPbBr3 rho ~ 3.58 g/cm^3.
local enabled = true
local value = 3580.0
return value, enabled
end
function material.lattice_constant(state)
-- Cubic lattice constant
-- Units: m
--
-- Reference:
-- C. C. Stoumpos, C. D. Malliakas, M. G. Kanatzidis, Inorg. Chem.
-- 52, 9019, 2013.
--
-- MAPbBr3 IS cubic (Pm-3m) at room temperature, so this is a
-- genuine cubic lattice constant: a = 5.93 A at 300 K. (It
-- transitions to tetragonal/orthorhombic only below ~236 K.)
local enabled = true
local value = 5.93e-10
return value, enabled
end
function material.print()
local state = {
T = 300.0,
x = 0.0,
y = 0.0,
z = 0.0,
photon_density = 0.0,
}
print(string.format("Material: %s", material.name()))
print(string.format("Description: %s", material.description()))
print(string.format("Formula: %s", material.formula()))
print(string.format("Temperature: %.2f K", state.T))
print(string.format("Position: %.6e, %.6e, %.6e m", state.x, state.y, state.z))
print(string.format("Photon density: %.6e m^-3", state.photon_density))
print(string.format("Band gap: %.6f eV", material.Eg(state)))
print(string.format("Electron affinity: %.6f eV", material.Xi(state)))
print(string.format("Electron mobility: %.6e m^2/V/s", material.mu_e(state)))
print(string.format("Hole mobility: %.6e m^2/V/s", material.mu_h(state)))
print(string.format("Nc: %.6e m^-3", material.Nc(state)))
print(string.format("Nv: %.6e m^-3", material.Nv(state)))
print(string.format("Relative permittivity: %.6f", material.epsilonr(state)))
print(string.format("Radiative coeff.: %.6e m^3/s", material.free_to_free_recombination(state)))
print(string.format("Electron Auger coeff.: %.6e m^6/s", material.auger_Cn(state)))
print(string.format("Hole Auger coeff.: %.6e m^6/s", material.auger_Cp(state)))
print(string.format("SRH trap energy: %.6f eV", material.ss_srh_trap_energy(state)))
print(string.format("SRH trap density: %.6e m^-3", material.ss_srh_Nt(state)))
print(string.format("SRH sigma n: %.6e m^2", material.ss_srh_sigma_n(state)))
print(string.format("SRH sigma p: %.6e m^2", material.ss_srh_sigma_p(state)))
print(string.format("Thermal conductivity: %.6e W/m/K", material.thermal_conductivity(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.
-- ============================================================================