2D_HOIP material model
1. Introduction
This page contains the OghmaNano material model for 2D_HOIP ((R-NH3)2(MA)n-1PbnI3n+1).
2D hybrid organic-inorganic perovskite (generic layered Ruddlesden-Popper family, e.g. (spacer)2(MA)n-1PbnX3n+1)
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 = {}
Material name (material.name)
function material.name()
local enabled = true
return "2D_HOIP", enabled
end
Material description (material.description)
function material.description()
local enabled = true
return "2D hybrid organic-inorganic perovskite (generic layered Ruddlesden-Popper family, e.g. (spacer)2(MA)n-1PbnX3n+1)", enabled
end
Chemical formula (material.formula)
function material.formula()
local enabled = true
return "(R-NH3)2(MA)n-1PbnI3n+1", enabled
end
Band gap energy (material.Eg)
function material.Eg(state)
-- Units: eV
--
-- Reference:
-- L. Mao, C. C. Stoumpos, M. G. Kanatzidis, reviews of 2D halide
-- perovskites (e.g. J. Am. Chem. Soc. / Chem. Rev.).
--
-- GENERIC family entry. The gap depends strongly on the layer
-- number n, the halide, and the organic spacer: low-n iodides
-- (n=1, e.g. (PEA)2PbI4) have gaps ~2.2-2.4 eV, decreasing towards
-- the 3D value (~1.6 eV) as n increases. A representative low-n
-- value of 2.2 eV is used.
--
-- Note: 2D perovskites have large exciton binding energies
-- (~150-400 meV) from quantum + dielectric confinement, so
-- near-edge optics is strongly excitonic. EDIT THIS PER SYSTEM.
local enabled = true
local value = 2.2
return value, enabled
end
Deformation potential Xi (material.Xi)
function material.Xi(state)
-- Electron affinity
-- Units: eV
--
-- Reference:
-- Photoemission literature on 2D halide perovskites.
--
-- Family-dependent; conduction-band minimum typically ~ -3.5 to
-- -4.0 eV vs vacuum. A representative 3.8 eV is used. Approximate;
-- adjust for the specific spacer/halide/n.
local enabled = true
local value = 3.8
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
--
-- Note: quantum-confined and anisotropic; not well defined for a
-- generic 2D system. Order-of-magnitude placeholder.
local enabled = true
local T = state.T
local value = 1.0e24*(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
--
-- Note: order-of-magnitude placeholder; see Nc note.
local enabled = true
local T = state.T
local value = 1.0e24*(T/300.0)^1.5
return value, enabled
end
Electron mobility (material.mu_e)
function material.mu_e(state)
-- Low-field electron mobility (IN-PLANE)
-- Units: m^2 V^-1 s^-1
--
-- Reference:
-- Transport studies of 2D halide perovskites (e.g. J.-C. Blancon
-- et al. and reviews by Mao/Stoumpos/Kanatzidis).
--
-- 2D perovskites are STRONGLY ANISOTROPIC: transport is good
-- within the inorganic sheets (in-plane) and poor across the
-- insulating organic spacers (cross-plane). This value is the
-- IN-PLANE electron mobility, representative ~1 cm^2/V/s = 1e-4
-- m^2/V/s. See mue_z for the suppressed cross-plane value.
-- Approximate; strongly system-dependent.
local enabled = true
local value = 1.0e-4
return value, enabled
end
Electron mobility in the x direction (material.mue_x)
function material.mue_x(state)
-- In-plane (within inorganic sheets)
return material.mu_e(state)
end
Electron mobility in the y direction (material.mue_y)
function material.mue_y(state)
-- In-plane (within inorganic sheets)
return material.mu_e(state)
end
Electron mobility in the z direction (material.mue_z)
function material.mue_z(state)
-- Cross-plane (through organic spacer layers): STRONGLY
-- suppressed. Assumes z is the stacking / device-thickness
-- direction with layers parallel to the substrate. Taken here as
-- ~100x lower than in-plane; the true ratio varies widely with
-- spacer length. Approximate.
local v, en = material.mu_e(state)
return v*0.01, en
end
Hole mobility (material.mu_h)
function material.mu_h(state)
-- Low-field hole mobility (IN-PLANE)
-- Units: m^2 V^-1 s^-1
--
-- In-plane hole mobility, representative ~1 cm^2/V/s = 1e-4
-- m^2/V/s (fairly ambipolar in-plane). See muh_z for the
-- suppressed cross-plane value. Approximate.
local enabled = true
local value = 1.0e-4
return value, enabled
end
Hole mobility in the x direction (material.muh_x)
function material.muh_x(state)
-- In-plane
return material.mu_h(state)
end
Hole mobility in the y direction (material.muh_y)
function material.muh_y(state)
-- In-plane
return material.mu_h(state)
end
Hole mobility in the z direction (material.muh_z)
function material.muh_z(state)
-- Cross-plane (through organic spacers): strongly suppressed,
-- taken as ~100x lower than in-plane. Approximate.
local v, en = material.mu_h(state)
return v*0.01, en
end
Relative dielectric permittivity (material.epsilonr)
function material.epsilonr(state)
-- Relative static permittivity
-- Dimensionless
--
-- Note: 2D perovskites have an anisotropic, spatially modulated
-- permittivity - low-epsilon organic spacers (~2-3) alternating
-- with higher-epsilon inorganic sheets. This dielectric
-- confinement is a major cause of the large exciton binding. An
-- effective value ~6 is used; approximate and system-dependent.
local enabled = true
local value = 6.0
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
--
-- Note: 2D perovskites are strong (often excitonic) emitters;
-- band-to-band bimolecular treatment is only approximate. A
-- representative ~1e-16 m^3/s is used. Approximate.
local enabled = true
local value = 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
--
-- Note: not well constrained for the generic family.
-- Order-of-magnitude placeholder.
local enabled = true
local value = 1.0e-40
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
--
-- Note: order-of-magnitude placeholder; see Cn note.
local enabled = true
local value = 1.0e-40
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
--
-- Quality-dependent placeholder. 2D perovskites are often prized
-- for lower non-radiative loss / better stability than 3D; set
-- from measurement.
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
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
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
--
-- Note: even lower than 3D halide perovskites, and anisotropic
-- (cross-plane strongly suppressed by the organic spacers),
-- ~0.1-0.5 W/m/K. A value of 0.3 W/m/K is used. Approximate.
local enabled = true
local value = 0.3
return value, enabled
end
Specific heat capacity (material.heat_capacity)
function material.heat_capacity(state)
-- Specific heat capacity
-- Units: J kg^-1 K^-1
--
-- Note: higher than 3D perovskites owing to the larger organic
-- fraction; ~400 J/kg/K used as a representative placeholder.
-- Spacer-dependent. Approximate.
local enabled = true
local value = 400.0
return value, enabled
end
Mass density (material.density)
function material.density(state)
-- Mass density
-- Units: kg m^-3
--
-- Note: lower than 3D perovskites (bulky low-density organic
-- spacers); ~2.8 g/cm^3 used as a representative value.
-- Spacer-dependent. Approximate.
local enabled = true
local value = 2800.0
return value, enabled
end
Crystal lattice constant (material.lattice_constant)
function material.lattice_constant(state)
-- Cubic lattice constant
-- Units: m
--
-- DISABLED: 2D perovskites are LAYERED (quantum-well
-- superlattices), not cubic. There is no single cubic lattice
-- constant. The relevant length scales are the in-plane Pb-Pb
-- spacing (~6.3 A, set by the inorganic octahedra) and the
-- interlayer (d-)spacing (~1.3-2.5 nm, set by the organic spacer
-- and n). The in-plane value is returned only so the field is
-- finite.
local enabled = false
local value = 6.3e-10
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: Literature-guided family estimate
-- Confidence: Low
--
-- Reference:
-- https://doi.org/10.1039/D5TC00723B
--
-- Comments:
-- Low-fluence 2D perovskite cooling is commonly sub-ps to ~1.5 ps; use 1 ps
-- as an effective lattice-relaxation time. Strong density and
-- dimensionality dependence.
local enabled = true
local value = 1.000000e-12
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: Literature-guided family estimate
-- Confidence: Low
--
-- Reference:
-- https://doi.org/10.1039/D5TC00723B
--
-- Comments:
-- Low-fluence 2D perovskite cooling is commonly sub-ps to ~1.5 ps; use 1 ps
-- as an effective lattice-relaxation time. Strong density and
-- dimensionality dependence.
local enabled = true
local value = 1.000000e-12
return value, enabled
end
Elastic stiffness constant C11 (material.C11)
function material.C11(state)
-- Elastic stiffness constant C11
-- Units: Pa
--
-- No sufficiently reliable value/reference identified.
-- Disabled rather than estimated.
--
-- Notes:
-- "2D_HOIP" does not identify a specific compound (spacer cation, n
-- value); layered 2D perovskites are strongly anisotropic and not cubic,
-- and their dielectric response is confined/layer-dependent. No defensible
-- parameter set.
local enabled = false
local value = 0.0
return value, enabled
end
Elastic stiffness constant C12 (material.C12)
function material.C12(state)
-- Elastic stiffness constant C12
-- Units: Pa
--
-- No sufficiently reliable value/reference identified.
-- Disabled rather than estimated.
--
-- Notes:
-- "2D_HOIP" does not identify a specific compound (spacer cation, n
-- value); layered 2D perovskites are strongly anisotropic and not cubic,
-- and their dielectric response is confined/layer-dependent. No defensible
-- parameter set.
local enabled = false
local value = 0.0
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:
-- "2D_HOIP" does not identify a specific compound (spacer cation, n
-- value); layered 2D perovskites are strongly anisotropic and not cubic,
-- and their dielectric response is confined/layer-dependent. No defensible
-- parameter set.
local enabled = false
local value = 0.0
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:
-- "2D_HOIP" does not identify a specific compound (spacer cation, n
-- value); layered 2D perovskites are strongly anisotropic and not cubic,
-- and their dielectric response is confined/layer-dependent. No defensible
-- parameter set.
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:
-- "2D_HOIP" does not identify a specific compound (spacer cation, n
-- value); layered 2D perovskites are strongly anisotropic and not cubic,
-- and their dielectric response is confined/layer-dependent. No defensible
-- parameter set.
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:
-- "2D_HOIP" does not identify a specific compound (spacer cation, n
-- value); layered 2D perovskites are strongly anisotropic and not cubic,
-- and their dielectric response is confined/layer-dependent. No defensible
-- parameter set.
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:
-- "2D_HOIP" does not identify a specific compound (spacer cation, n
-- value); layered 2D perovskites are strongly anisotropic and not cubic,
-- and their dielectric response is confined/layer-dependent. No defensible
-- parameter set.
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:
-- "2D_HOIP" does not identify a specific compound (spacer cation, n
-- value); layered 2D perovskites are strongly anisotropic and not cubic,
-- and their dielectric response is confined/layer-dependent. No defensible
-- parameter set.
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 (ip): %.6e m^2/V/s", material.mu_e(state)))
print(string.format("Electron mobility (z): %.6e m^2/V/s", material.mue_z(state)))
print(string.format("Hole mobility (ip): %.6e m^2/V/s", material.mu_h(state)))
print(string.format("Hole mobility (z): %.6e m^2/V/s", material.muh_z(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.
-- ============================================================================