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

P3HT material model

1. Introduction

This page contains the OghmaNano material model for P3HT ((C10H14S)n).

Regioregular poly(3-hexylthiophene) conjugated polymer

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 "P3HT", enabled
end


function material.description()
	local enabled = true

	return "Regioregular poly(3-hexylthiophene) conjugated polymer", enabled
end


function material.formula()
	local enabled = true

	return "(C10H14S)n", enabled
end


function material.Eg(state)
	-- Units: eV
	--
	-- Optical band gap of regioregular P3HT (absorption onset ~650 nm).
	-- The transport gap (HOMO-LUMO separation used in drift-diffusion) is
	-- slightly larger than the optical gap because of the exciton binding
	-- energy (~0.3 eV), so some device models use ~2.0-2.2 eV instead.
	--
	-- The Varshni model used for crystalline GaAs does NOT apply to a
	-- disordered polymer: the gap is only weakly temperature dependent and
	-- is treated here as constant. A representative value is returned.
	--
	-- Reference:
	-- Y. Kim et al., "A strong regioregularity effect in self-organizing
	-- conjugated polymer films and high-efficiency polythiophene:fullerene
	-- solar cells", Nature Materials, 5, 197-203, 2006.

	local enabled = true
	local value = 1.9

	return value, enabled
end


function material.Xi(state)
	-- Electron affinity (LUMO level below vacuum)
	-- Units: eV
	--
	-- Reported LUMO of P3HT is typically -3.0 to -3.2 eV and HOMO
	-- -5.0 to -5.2 eV (cyclic voltammetry / UPS). With Xi = 3.2 eV and
	-- Eg = 1.9 eV the implied HOMO is ~-5.1 eV, consistent with literature.
	-- Absolute values are method dependent; a representative value is used.
	--
	-- Reference:
	-- Y. Kim et al., Nature Materials, 5, 197-203, 2006.

	local enabled = true
	local value = 3.2

	return value, enabled
end


function material.Nc(state)
	-- Effective conduction-band (LUMO) density of states
	-- Units: m^-3
	--
	-- Organic semiconductors have a disordered (approximately Gaussian) DOS
	-- rather than a parabolic band, so the crystalline (T/300)^1.5 scaling
	-- used for GaAs does not apply and a constant effective DOS is used.
	-- The P3HT monomer site density is ~4e27 m^-3 (density 1100 kg/m^3,
	-- repeat-unit mass ~166 g/mol); the effective transport-level DOS used
	-- in drift-diffusion is normally set well below this, commonly
	-- 1e25-1e27 m^-3. A representative value is used.
	--
	-- Reference:
	-- Add the precise reference used for the effective density of states.

	local enabled = true
	local value = 1.0e26

	return value, enabled
end


function material.Nv(state)
	-- Effective valence-band (HOMO) density of states
	-- Units: m^-3
	--
	-- See the note in material.Nc. Constant effective DOS used; the
	-- crystalline temperature scaling does not apply to a disordered
	-- polymer. A representative value is used.
	--
	-- Reference:
	-- Add the precise reference used for the effective density of states.

	local enabled = true
	local value = 1.0e26

	return value, enabled
end


function material.mu_e(state)
	-- Low-field electron mobility
	-- Units: m^2 V^-1 s^-1
	--
	-- P3HT is a strongly hole-transporting (p-type) polymer; electron
	-- transport is deep-trap limited and poorly defined for the pristine
	-- material. Reported values scatter widely and are typically several
	-- orders of magnitude below the hole mobility. A representative value
	-- is used and should be adjusted for the specific film/blend.
	--
	-- Note: organic mobility is thermally activated (increases with T,
	-- opposite to the phonon-limited GaAs power law), field dependent
	-- (Poole-Frenkel) and carrier-density dependent. A single low-field
	-- value is returned here.
	--
	-- Reference:
	-- Add the precise reference used for this value.

	local enabled = true
	local value = 1.0e-11

	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
	--
	-- Space-charge-limited hole mobility of P3HT in the ~1e-8 m^2/V/s range
	-- for as-cast films, rising towards ~1e-7 m^2/V/s after thermal
	-- annealing (increased crystallinity). Field-effect (in-plane)
	-- mobilities are higher (~1e-6 to 1e-5 m^2/V/s) due to anisotropy.
	-- A representative vertical (SCLC) value is used.
	--
	-- Note: organic mobility is thermally activated (increases with T),
	-- field dependent (Poole-Frenkel) and carrier-density dependent; the
	-- crystalline (300/T)^n form is not used.
	--
	-- Reference:
	-- V. D. Mihailetchi, H. Xie, B. de Boer, L. J. A. Koster, P. W. M. Blom,
	-- "Charge Transport and Photocurrent Generation in
	-- Poly(3-hexylthiophene):Methanofullerene Bulk-Heterojunction Solar
	-- Cells", Adv. Funct. Mater., 16, 699-708, 2006.

	local enabled = true
	local value = 1.0e-8

	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
	--
	-- Low-frequency dielectric constant of P3HT is commonly taken as
	-- 3.0-3.5 in device modelling. A representative value is used.
	--
	-- Reference:
	-- Add the precise reference used for this value.

	local enabled = true
	local value = 3.4

	return value, enabled
end


function material.free_to_free_recombination(state)
	-- Bimolecular (band-to-band) recombination coefficient
	-- Units: m^3 s^-1
	--
	-- In organic semiconductors free-carrier recombination is dominated by
	-- non-radiative Langevin-type encounters, not radiative emission. The
	-- Langevin coefficient is beta = q*(mu_e + mu_h)/(eps0*eps_r), which for
	-- the mobilities and permittivity above gives ~5e-17 m^3/s. Experiment
	-- often shows reduced (sub-)Langevin behaviour with a prefactor of
	-- 0.01-0.1. A representative effective value is used.
	--
	-- Reference:
	-- Add the precise reference used for this value.

	local enabled = true
	local value = 1.0e-17

	return value, enabled
end


function material.auger_Cn(state)
	-- Electron Auger recombination coefficient
	-- Units: m^6 s^-1
	--
	-- Auger recombination is generally negligible in organic semiconductors
	-- at operational carrier densities and is not usually included in P3HT
	-- device models. A very small representative value is used so the
	-- channel is effectively inactive.
	--
	-- Reference:
	-- Not applicable / negligible for organic semiconductors.

	local enabled = true
	local value = 1.0e-45

	return value, enabled
end


function material.auger_Cp(state)
	-- Hole Auger recombination coefficient
	-- Units: m^6 s^-1
	--
	-- See material.auger_Cn: negligible for organics. A very small
	-- representative value is used.
	--
	-- Reference:
	-- Not applicable / negligible for organic semiconductors.

	local enabled = true
	local value = 1.0e-45

	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/LUMO band).
	-- Negative values are below mid-gap (towards the valence/HOMO band).
	--
	-- Placed at mid-gap as a representative single-level approximation; real
	-- P3HT trapping is better described by the exponential tail states
	-- (see Ntrape/Ntraph/Etrape/Etraph below).

	local enabled = true
	local value = 0.0

	return value, enabled
end


function material.ss_srh_Nt(state)
	-- SRH trap density
	-- Units: m^-3
	--
	-- Representative value; trap densities in P3HT films vary strongly with
	-- purity, morphology and processing.

	local enabled = true
	local value = 1.0e22

	return value, enabled
end


function material.ss_srh_sigma_n(state)
	-- Electron capture cross section
	-- Units: m^2
	--
	-- Representative value.

	local enabled = true
	local value = 1.0e-20

	return value, enabled
end


function material.ss_srh_sigma_p(state)
	-- Hole capture cross section
	-- Units: m^2
	--
	-- Representative value.

	local enabled = true
	local value = 1.0e-20

	return value, enabled
end


function material.thermal_conductivity(state)
	-- Thermal conductivity
	-- Units: W m^-1 K^-1
	--
	-- P3HT is a low-conductivity, semicrystalline polymer. Reported values
	-- are ~0.1-0.3 W/m/K and are anisotropic (higher along the chain/
	-- in-plane direction). The crystalline phonon (300/T)^n scaling used for
	-- GaAs does not apply; a constant representative value is used.
	--
	-- Reference:
	-- Add the precise reference used for this value (measurements report
	-- ~0.1-0.3 W/m/K depending on morphology and orientation).

	local enabled = true
	local value = 0.2

	return value, enabled
end


function material.heat_capacity(state)
	-- Specific heat capacity
	-- Units: J kg^-1 K^-1
	--
	-- Organic polymers typically fall in the ~1000-2000 J/kg/K range near
	-- room temperature. A representative value is used.
	--
	-- Reference:
	-- Add the precise reference used for this value.

	local enabled = true
	local value = 1200.0

	return value, enabled
end


function material.density(state)
	-- Mass density
	-- Units: kg m^-3
	--
	-- P3HT film density is ~1.1 g/cm^3. A representative value is used.
	--
	-- Reference:
	-- Add the precise reference used for this value.

	local enabled = true
	local value = 1100.0

	return value, enabled
end


function material.lattice_constant(state)
	-- Characteristic structural spacing
	-- Units: m
	--
	-- P3HT is a semicrystalline polymer, NOT a cubic crystal, so a single
	-- cubic lattice constant is not physically meaningful. The monoclinic
	-- unit cell has approximately a ~1.6e-9 m (lamellar / alkyl stacking,
	-- the (100) XRD peak), b ~0.78e-9 m (backbone repeat) and a pi-pi
	-- stacking distance of ~0.38e-9 m. The largest and most commonly
	-- reported spacing (the lamellar a-axis) is returned as a
	-- representative value. Thermal expansion is anisotropic and is not
	-- included.
	--
	-- Reference:
	-- N. Kayunkid, S. Uttiya, M. Brinkmann, "Structural Model of Regioregular
	-- Poly(3-hexylthiophene) Obtained by Electron Diffraction Analysis",
	-- Macromolecules, 43, 4961-4967, 2010.

	local enabled = true
	local value = 1.66e-9

	return value, enabled
end

function material.Ntrape(state)
	-- Electron tail (exponential band-tail) trap density
	-- Units: m^-3
	--
	-- Disordered organics have substantial exponential tail states. A
	-- representative magnitude is used; adjust for the specific film.

	local enabled = true
	local value = 1.0e26

	return value, enabled
end


function material.Ntraph(state)
	-- Hole tail (exponential band-tail) trap density
	-- Units: m^-3
	--
	-- See material.Ntrape. Representative value.

	local enabled = true
	local value = 1.0e26

	return value, enabled
end


function material.Etrape(state)
	-- Electron tail characteristic (Urbach) energy
	-- Units: eV
	--
	-- The Urbach energy of P3HT is typically ~50-70 meV. A representative
	-- value is used.

	local enabled = true
	local value = 0.06

	return value, enabled
end


function material.Etraph(state)
	-- Hole tail characteristic (Urbach) energy
	-- Units: eV
	--
	-- See material.Etrape. Representative value.

	local enabled = true
	local value = 0.06

	return value, enabled
end


function material.srhsigman_e(state)
	-- Electron-to-electron capture cross section
	-- Units: m^2
	--
	-- Representative value for the tail-state SRH model.

	local enabled = true
	local value = 1.0e-20

	return value, enabled
end


function material.srhsigmap_e(state)
	-- Hole-to-electron capture cross section
	-- Units: m^2
	--
	-- Representative value for the tail-state SRH model.

	local enabled = true
	local value = 1.0e-20

	return value, enabled
end


function material.srhsigman_h(state)
	-- Electron-to-hole capture cross section
	-- Units: m^2
	--
	-- Representative value for the tail-state SRH model.

	local enabled = true
	local value = 1.0e-20

	return value, enabled
end


function material.srhsigmap_h(state)
	-- Hole-to-hole capture cross section
	-- Units: m^2
	--
	-- Representative value for the tail-state SRH model.

	local enabled = true
	local value = 1.0e-20

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

	print(string.format("Electron trap density:  %.6e m^-3", material.Ntrape(state)))
	print(string.format("Hole trap density:      %.6e m^-3", material.Ntraph(state)))
	print(string.format("Electron trap energy:   %.6f eV", material.Etrape(state)))
	print(string.format("Hole trap energy:       %.6f eV", material.Etraph(state)))

	print(string.format("SRH sigma n->e:         %.6e m^2", material.srhsigman_e(state)))
	print(string.format("SRH sigma p->e:         %.6e m^2", material.srhsigmap_e(state)))
	print(string.format("SRH sigma n->h:         %.6e m^2", material.srhsigman_h(state)))
	print(string.format("SRH sigma p->h:         %.6e m^2", material.srhsigmap_h(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.
-- ============================================================================