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

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.
-- ============================================================================