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