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

PTB7 material model

1. Introduction

This page contains the OghmaNano material model for PTB7 (C41H53FO4S4).

PTB7 low-bandgap donor polymer (benzodithiophene-alt-fluorothienothiophene)

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


function material.description()
	local enabled = true

	return "PTB7 low-bandgap donor polymer (benzodithiophene-alt-fluorothienothiophene)", enabled
end


function material.formula()
	local enabled = true

	-- Nominal repeat-unit formula of the benzodithiophene-alt-
	-- fluorothieno[3,4-b]thiophene copolymer (MW ~725 g/mol).
	return "C41H53FO4S4", enabled
end


function material.Eg(state)
	-- Units: eV
	--
	-- The value returned is the electrochemical HOMO-LUMO gap
	-- (5.15 - 3.31 = 1.84 eV), chosen so that Eg = HOMO - Xi is
	-- self-consistent with the frontier levels below. The OPTICAL gap is
	-- lower, ~1.6-1.65 eV (absorption onset ~750-770 nm), the difference
	-- being roughly the exciton binding energy. Optical absorption itself is
	-- set separately via the n/k database. The Varshni model does not apply
	-- to a disordered polymer; a constant value is returned.
	--
	-- Reference:
	-- Y. Liang, Z. Xu, J. Xia, S.-T. Tsai, Y. Wu, G. Li, C. Ray, L. Yu,
	-- "For the Bright Future - Bulk Heterojunction Polymer Solar Cells with
	-- Power Conversion Efficiency of 7.4%", Adv. Mater., 22, E135-E138, 2010.

	local enabled = true
	local value = 1.84

	return value, enabled
end


function material.Xi(state)
	-- Electron affinity (LUMO level below vacuum)
	-- Units: eV
	--
	-- Reported LUMO of PTB7 is -3.31 eV and HOMO -5.15 eV (cyclic
	-- voltammetry). With Eg = 1.84 eV this reproduces the measured HOMO at
	-- -5.15 eV.
	--
	-- Reference:
	-- Y. Liang et al., Adv. Mater., 22, E135-E138, 2010.

	local enabled = true
	local value = 3.31

	return value, enabled
end


function material.Nc(state)
	-- Effective conduction-band (LUMO) density of states
	-- Units: m^-3
	--
	-- Disordered organic (approximately Gaussian DOS): a constant effective
	-- DOS is used; the crystalline (T/300)^1.5 scaling does not apply. The
	-- polymer site density is ~1e27 m^-3; the effective transport-level DOS
	-- used in drift-diffusion is normally set lower (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 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


function material.mu_e(state)
	-- Low-field electron mobility
	-- Units: m^2 V^-1 s^-1
	--
	-- PTB7 is a donor (hole-transporting) polymer; neat-film electron
	-- transport is poorly defined (in blends electrons travel through the
	-- fullerene phase). A low representative value is used; adjust for the
	-- specific system.
	--
	-- Note: organic mobility is thermally activated, field dependent
	-- (Poole-Frenkel) and carrier-density dependent; the crystalline
	-- (300/T)^n form is not used.
	--
	-- Reference:
	-- Add the precise reference used for this value.

	local enabled = true
	local value = 1.0e-10

	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
	--
	-- Neat PTB7 hole mobility is ~1e-3 cm^2/V/s (= 1e-7 m^2/V/s) by
	-- time-of-flight; space-charge-limited-current values are somewhat lower
	-- (~4e-4 cm^2/V/s neat, ~2e-4 cm^2/V/s in PTB7:PC71BM blends). The
	-- neat-film value is returned; reduce it for blends.
	--
	-- Note: organic mobility is thermally activated, field dependent and
	-- carrier-density dependent.
	--
	-- References:
	-- "Charge carrier mobility of the organic photovoltaic materials PTB7 and
	-- PC71BM and its influence on device performance", Organic Electronics,
	-- 2015 (time-of-flight, neat ~1e-3 cm^2/V/s).
	-- Appl. Phys. Lett., 108, 073505, 2016 (SCLC, PTB7 ~3.9e-4 cm^2/V/s).

	local enabled = true
	local value = 1.0e-7

	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
	--
	-- A value of ~3 is the standard assumption for conjugated polymers such
	-- as PTB7 and is commonly used when extracting SCLC mobilities.
	--
	-- Reference:
	-- Add the precise reference used for this value (eps_r ~= 3 is the typical
	-- assumed value for conjugated polymers).

	local enabled = true
	local value = 3.0

	return value, enabled
end


function material.free_to_free_recombination(state)
	-- Bimolecular (band-to-band) recombination coefficient
	-- Units: m^3 s^-1
	--
	-- Free-carrier recombination is Langevin-type (non-radiative). The
	-- Langevin coefficient q*(mu_e + mu_h)/(eps0*eps_r) is ~6e-16 m^3/s for
	-- the values above; PTB7:PC71BM is well known to show strongly REDUCED
	-- (sub-)Langevin recombination (prefactor << 1), so a smaller 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
	--
	-- Negligible in organic semiconductors; 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. Very small representative value.
	--
	-- 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.

	local enabled = true
	local value = 0.0

	return value, enabled
end


function material.ss_srh_Nt(state)
	-- SRH trap density
	-- Units: m^-3
	--
	-- SCLC-extracted trap density for neat PTB7 is ~1.1e17 cm^-3
	-- (= 1.1e23 m^-3).
	--
	-- Reference:
	-- Appl. Phys. Lett., 108, 073505, 2016.

	local enabled = true
	local value = 1.1e23

	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
	--
	-- Not specifically characterised for PTB7; organic semiconducting films
	-- are typically ~0.1-0.3 W/m/K. A representative value is used and the
	-- crystalline phonon (300/T)^n scaling is not applied.
	--
	-- Reference:
	-- Add the precise reference used for this value.

	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
	--
	-- Not specifically characterised for PTB7; organic polymers are typically
	-- ~1000-2000 J/kg/K 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
	--
	-- Representative organic-polymer film density (~1.1 g/cm^3); not
	-- precisely characterised for PTB7.
	--
	-- 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
	--
	-- PTB7 is weakly ordered / largely amorphous, so a single cubic lattice
	-- constant is not meaningful. GIWAXS typically shows a lamellar (100)
	-- spacing of ~1.9-2.2e-9 m (set by the branched 2-ethylhexyl side chains)
	-- and a pi-pi (010) stacking distance of ~0.37-0.39e-9 m. The lamellar
	-- spacing is returned as a representative value.
	--
	-- Reference:
	-- Add the precise reference used for this value.

	local enabled = true
	local value = 2.0e-9

	return value, enabled
end

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. (Distinct from the deep SCLC trap density in ss_srh_Nt.)

	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
	--
	-- Representative disordered-organic value (Urbach energy ~60-70 meV).

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