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

PEDOT:PSS material model

1. Introduction

This page contains the OghmaNano material model for PEDOT:PSS ((C6H4O2S)m:(C8H8O3S)n).

Poly(3,4-ethylenedioxythiophene):poly(styrenesulfonate) conducting polymer, hole-transport layer

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 = {}

-- ============================================================================
-- IMPORTANT MODELLING NOTE
-- ----------------------------------------------------------------------------
-- PEDOT:PSS is a heavily p-doped, quasi-metallic conducting polymer, normally
-- used as a hole-transport / hole-injection (anode) interlayer, NOT as an
-- intrinsic photoactive semiconductor. In a device stack it is most often
-- represented either as a metallic contact with a defined work function
-- (~5.0-5.2 eV) or as a very heavily p-doped thin HTL.
--
-- Several fields below (band gap, radiative recombination, Auger, SRH traps)
-- are therefore only weakly physical for this material and are given notional
-- / representative values so the interface stays complete. Treat the work
-- function, permittivity and (vertical) hole mobility as the meaningful
-- numbers, and set the p-doping via the device rather than inferring it from
-- the intrinsic DOS.
-- ============================================================================

Material name (material.name)

function material.name()
	local enabled = true

	return "PEDOT:PSS", enabled
end

Material description (material.description)

function material.description()
	local enabled = true

	return "Poly(3,4-ethylenedioxythiophene):poly(styrenesulfonate) conducting polymer, hole-transport layer", enabled
end

Chemical formula (material.formula)

function material.formula()
	local enabled = true

	-- Blend of PEDOT (repeat ~C6H4O2S) and PSS (repeat ~C8H8O3S), typically
	-- with a PSS:PEDOT mass ratio in the range ~2.5:1 to 6:1.
	return "(C6H4O2S)m:(C8H8O3S)n", enabled
end

Band gap energy (material.Eg)

function material.Eg(state)
	-- Units: eV
	--
	-- Optical band gap of NEUTRAL (undoped) PEDOT is ~1.6-1.7 eV. As used,
	-- PEDOT:PSS is heavily oxidised (p-doped): polaron/bipolaron states fill
	-- the gap and it shows broad free-carrier absorption into the NIR, i.e.
	-- it behaves quasi-metallically rather than as a clean-gap semiconductor.
	-- A single "band gap" is thus only notional here. The Varshni model used
	-- for crystalline GaAs does not apply; a constant value is returned.
	--
	-- Reference:
	-- L. Groenendaal, F. Jonas, D. Freitag, H. Pielartzik,
	-- J. R. Reynolds, "Poly(3,4-ethylenedioxythiophene) and Its
	-- Derivatives: Past, Present, and Future", Adv. Mater., 12,
	-- 481-494, 2000 (neutral PEDOT gap ~1.6-1.7 eV).

	local enabled = true
	local value = 1.6

	return value, enabled
end

Deformation potential Xi (material.Xi)

function material.Xi(state)
	-- Electron affinity (LUMO level below vacuum)
	-- Units: eV
	--
	-- The practically important energetic quantity for PEDOT:PSS is its
	-- WORK FUNCTION, ~5.0-5.2 eV (tunable by processing), which is what makes
	-- it an efficient hole injector into donor HOMOs near -5.0 to -5.2 eV.
	-- With a HOMO of ~-5.1 eV and Eg ~1.6 eV the implied electron affinity
	-- (LUMO) is ~-3.5 eV, returned here. If the layer is modelled as a metal
	-- contact, use the work function (~5.1 eV) directly instead.
	--
	-- Reference:
	-- PEDOT:PSS work function is tunable over ~4.8-5.3 eV (higher-PSS
	-- grades such as Clevios AI 4083 ~5.0-5.2 eV), measured by UPS;
	-- see the review by X. Fan et al., J. Mater. Chem. A, 2023,
	-- DOI: 10.1039/D3TA03213B (and Ossila PEDOT:PSS work-function data).

	local enabled = true
	local value = 3.5

	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
	--
	-- Disordered organic: constant effective DOS is used (the crystalline
	-- (T/300)^1.5 scaling does not apply). Note that the very high hole
	-- density responsible for PEDOT:PSS's conductivity comes from doping,
	-- not from the intrinsic DOS, and should be set via the device doping
	-- rather than inferred here. 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 material.Nc. Constant effective DOS; representative value.
	--
	-- 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
	--
	-- PEDOT:PSS is a hole conductor; electron transport is not relevant and
	-- is poorly defined. A small representative value is used.
	--
	-- Note: organic mobility is thermally activated, field dependent
	-- (Poole-Frenkel) and carrier-density dependent; the crystalline
	-- (300/T)^n form is not used.
	--
	-- Reference:
	-- Not applicable / negligible for this hole-transport material.

	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
	--
	-- PEDOT:PSS mobility spans several orders of magnitude with formulation
	-- and processing (standard grade vs high-conductivity grades treated with
	-- DMSO / ethylene glycol / acid). Transport is strongly anisotropic:
	-- in-plane mobility greatly exceeds through-film (vertical) mobility, and
	-- the high electrical conductivity (~0.1 to >1000 S/cm) is driven mainly
	-- by the very high carrier density rather than by high mobility. A
	-- representative through-film (device-relevant) value for a standard-type
	-- grade is used; adjust for the specific formulation.
	--
	-- Reference:
	-- J. Ouyang, Q. Xu, C.-W. Chu, Y. Yang, G. Li, J. Shinar,
	-- "On the mechanism of conductivity enhancement in
	-- poly(3,4-ethylenedioxythiophene):poly(styrene sulfonate) film through
	-- solvent treatment", Polymer, 45, 8443-8450, 2004.

	local enabled = true
	local value = 1.0e-6

	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
	--
	-- Reported values scatter (~2-3 at optical/high frequency); the
	-- low-frequency static value can be substantially higher because of
	-- ionic/polaronic contributions. A representative value commonly used in
	-- device modelling is returned.
	--
	-- Reference:
	-- Add the precise reference used for this value.

	local enabled = true
	local value = 3.0

	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
	--
	-- As a doped transport/injection interlayer, band-to-band recombination
	-- is not usually a meaningful loss channel for PEDOT:PSS. A notional
	-- Langevin-scale value is used to keep the interface complete.
	--
	-- Reference:
	-- Not typically modelled for a hole-transport layer.

	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
	--
	-- Negligible / not applicable for this organic HTL. A very small
	-- representative value is used so the channel is effectively inactive.
	--
	-- Reference:
	-- Not applicable 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. Very small representative value.
	--
	-- Reference:
	-- Not applicable 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 notional single-level default; SRH recombination
	-- is not the dominant physics for a doped transport layer.

	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.

	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
	--
	-- PEDOT:PSS thermal conductivity is low and anisotropic; reported values
	-- are ~0.2-0.5 W/m/K (cross-plane at the lower end, in-plane higher,
	-- especially for high-conductivity grades). The crystalline phonon
	-- (300/T)^n scaling does not apply; a constant representative value is
	-- used.
	--
	-- Reference:
	-- Add the precise reference used for this value (measurements report
	-- ~0.2-0.5 W/m/K depending on grade and orientation).

	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
	--
	-- Organic polymers typically fall in the ~1000-1500 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 = 1300.0

	return value, enabled
end

Mass density (material.density)

function material.density(state)
	-- Mass density
	-- Units: kg m^-3
	--
	-- Reported film densities of PEDOT:PSS span ~1.0-1.5 g/cm^3. A
	-- representative value is used.
	--
	-- Reference:
	-- Add the precise reference used for this value.

	local enabled = true
	local value = 1000.0

	return value, enabled
end

Crystal lattice constant (material.lattice_constant)

function material.lattice_constant(state)
	-- Characteristic structural spacing
	-- Units: m
	--
	-- PEDOT:PSS films are largely amorphous with small PEDOT nanocrystallites,
	-- so a single cubic lattice constant is not meaningful. GIWAXS reports a
	-- lamellar (100) spacing of ~1.3-1.4e-9 m and a pi-pi (010) stacking
	-- distance of ~0.34e-9 m. The lamellar spacing is returned as a
	-- representative value.
	--
	-- Reference:
	-- T. Takano, H. Masunaga, A. Fujiwara, H. Okuzaki, A. Sasaki,
	-- "PEDOT Nanocrystal in Highly Conductive PEDOT:PSS Polymer Films",
	-- Macromolecules, 45, 3859-3865, 2012.

	local enabled = true
	local value = 1.3e-9

	return value, enabled
end

Electron trap density (material.Ntrape)

function material.Ntrape(state)
	-- Electron tail (exponential band-tail) trap density
	-- Units: m^-3
	--
	-- Representative magnitude for a disordered organic; 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
	--
	-- Representative disordered-organic value.

	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: Numerical fallback
	-- Confidence: Low
	--
	-- Reference:
	-- No specific reference supplied.
	--
	-- Comments:
	-- Normally used as a degenerate conductor/electrode, not as a bipolar
	-- non-degenerate DD layer. Fast fallback only.

	local enabled = false
	local value = 1.000000e-14

	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: Numerical fallback
	-- Confidence: Low
	--
	-- Reference:
	-- No specific reference supplied.
	--
	-- Comments:
	-- Normally used as a degenerate conductor/electrode, not as a bipolar
	-- non-degenerate DD layer. Fast fallback only.

	local enabled = false
	local value = 1.000000e-14

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