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


-- See end of file for copyright, licensing and documentation links.

local material = {}

function material.name()
	local enabled = true

	return "2D_HOIP", enabled
end


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


function material.formula()
	local enabled = true

	return "(R-NH3)2(MA)n-1PbnI3n+1", enabled
end


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


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


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


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


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

function material.mue_x(state)
	-- In-plane (within inorganic sheets)
	return material.mu_e(state)
end

function material.mue_y(state)
	-- In-plane (within inorganic sheets)
	return material.mu_e(state)
end

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


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

function material.muh_x(state)
	-- In-plane
	return material.mu_h(state)
end

function material.muh_y(state)
	-- In-plane
	return material.mu_h(state)
end

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


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


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


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


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


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


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


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


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


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


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