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