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
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 "P3HT", enabled
end
Material description (material.description)
function material.description()
local enabled = true
return "Regioregular poly(3-hexylthiophene) conjugated polymer", enabled
end
Chemical formula (material.formula)
function material.formula()
local enabled = true
return "(C10H14S)n", enabled
end
Band gap energy (material.Eg)
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
Deformation potential Xi (material.Xi)
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
Effective conduction-band density of states (material.Nc)
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
Effective valence-band density of states (material.Nv)
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
Electron mobility (material.mu_e)
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
Electron mobility in the x direction (material.mue_x)
function material.mue_x(state)
return material.mu_e(state)
end
Electron mobility in the y direction (material.mue_y)
function material.mue_y(state)
return material.mu_e(state)
end
Electron mobility in the z direction (material.mue_z)
function material.mue_z(state)
return material.mu_e(state)
end
Hole mobility (material.mu_h)
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
Hole mobility in the x direction (material.muh_x)
function material.muh_x(state)
return material.mu_h(state)
end
Hole mobility in the y direction (material.muh_y)
function material.muh_y(state)
return material.mu_h(state)
end
Hole mobility in the z direction (material.muh_z)
function material.muh_z(state)
return material.mu_h(state)
end
Relative dielectric permittivity (material.epsilonr)
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
Free-carrier radiative recombination (material.free_to_free_recombination)
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
Electron Auger recombination coefficient (material.auger_Cn)
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
Hole Auger recombination coefficient (material.auger_Cp)
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
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/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
Interface trap density (material.ss_srh_Nt)
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
Interface electron capture cross-section (material.ss_srh_sigma_n)
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
Interface hole capture cross-section (material.ss_srh_sigma_p)
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
Lattice thermal conductivity (material.thermal_kl)
function material.thermal_kl(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
Specific heat capacity (material.heat_capacity)
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
Mass density (material.density)
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
Crystal lattice constant (material.lattice_constant)
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
Electron trap density (material.Ntrape)
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
Hole trap density (material.Ntraph)
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
Electron trap energy (material.Etrape)
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
Hole trap energy (material.Etraph)
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
Electron capture cross-section for electron traps (material.srhsigman_e)
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
Hole capture cross-section for electron traps (material.srhsigmap_e)
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
Electron capture cross-section for hole traps (material.srhsigman_h)
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
Hole capture cross-section for hole traps (material.srhsigmap_h)
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
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: Organic default
-- Confidence: Low
--
-- Reference:
-- https://doi.org/10.1039/D4EE02612H
--
-- Comments:
-- Conjugated/disordered organic semiconductor default. For PFN or RefF this
-- may be only a numerical placeholder if the layer is treated as passive.
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: Organic default
-- Confidence: Low
--
-- Reference:
-- https://doi.org/10.1039/D4EE02612H
--
-- Comments:
-- Conjugated/disordered organic semiconductor default. For PFN or RefF this
-- may be only a numerical placeholder if the layer is treated as passive.
local enabled = true
local value = 1.000000e-12
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: %.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("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)))
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.
-- ============================================================================