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

SnO2 material model

1. Introduction

This page contains the OghmaNano material model for SnO2 (SnO2).

Tin oxide (nominally undoped/lightly-doped SnO2), n-type wide-gap semiconductor / electron-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 = {}

Material name (material.name)

function material.name()
	local enabled = true

	return "SnO2", enabled
end

Material description (material.description)

function material.description()
	local enabled = true

	return "Tin oxide (nominally undoped/lightly-doped SnO2), n-type wide-gap semiconductor / electron-transport layer", enabled
end

Chemical formula (material.formula)

function material.formula()
	local enabled = true

	return "SnO2", enabled
end

Band gap energy (material.Eg)

function material.Eg(state)
	-- Units: eV
	--
	-- Reference:
	-- M. Batzill, U. Diebold, "The surface and materials science of
	-- tin oxide", Prog. Surf. Sci. 79, 47-154, 2005.
	--
	-- Fundamental (direct) gap ~3.6 eV at 300 K.
	--
	-- Note: this is the undoped/lightly-doped semiconductor (e.g. an
	-- ETL in perovskite cells). Unlike degenerate FTO, there is no
	-- strong Burstein-Moss widening. T-dependence weak and not well
	-- characterised for films; a constant is used.

	local enabled = true
	local value = 3.6

	return value, enabled
end

Deformation potential Xi (material.Xi)

function material.Xi(state)
	-- Electron affinity
	-- Units: eV
	--
	-- Reference:
	-- M. Batzill, U. Diebold, Prog. Surf. Sci. 79, 47, 2005;
	-- perovskite-device-modelling literature.
	--
	-- SnO2 electron affinity ~4.5 eV. Device-modelling values for the
	-- SnO2 conduction band scatter over ~4.0-4.5 eV; this shallow CB
	-- and deep VB are what make SnO2 a good electron-transport /
	-- hole-blocking layer. Approximate.

	local enabled = true
	local value = 4.5

	return value, enabled
end

Effective conduction-band density of states (material.Nc)

function material.Nc(state)
	-- Effective conduction-band density of states
	-- Units: m^-3
	--
	-- Reference:
	-- From SnO2 CB effective mass m_e* ~ 0.3 m0 (M. Batzill,
	-- U. Diebold, Prog. Surf. Sci. 79, 47, 2005):
	-- Nc(300 K) ~ 4e18 cm^-3 = 4e24 m^-3. Approximate.

	local enabled = true
	local T = state.T
	local value = 4.0e24*(T/300.0)^1.5

	return value, enabled
end

Effective valence-band density of states (material.Nv)

function material.Nv(state)
	-- Effective valence-band density of states
	-- Units: m^-3
	--
	-- Reference:
	-- From a heavy valence-band mass (m_h* ~ 1 m0):
	-- Nv(300 K) ~ 2.5e19 cm^-3 = 2.5e25 m^-3.
	--
	-- Note: the SnO2 hole mass is poorly constrained (M. Batzill,
	-- U. Diebold, Prog. Surf. Sci. 79, 47, 2005); approximate.

	local enabled = true
	local T = state.T
	local value = 2.5e25*(T/300.0)^1.5

	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
	--
	-- Reference:
	-- Single-crystal SnO2 electron mobility up to ~240 cm^2/V/s
	-- (M. Batzill, U. Diebold, Prog. Surf. Sci. 79, 47, 2005).
	--
	-- Note: polycrystalline SnO2 ETL device FILMS are far lower and
	-- strongly process-dependent (~0.1-25 cm^2/V/s). A representative
	-- 10 cm^2/V/s = 1e-3 m^2/V/s is used. Film transport is
	-- grain-boundary limited, not phonon limited, so no (300/T)^n law
	-- is applied. Approximate; tune to your film.

	local enabled = true
	local value = 1.0e-3

	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
	--
	-- Note: in an SnO2 ETL holes are the blocked minority carrier;
	-- hole mobility is poorly constrained and rarely the limiting
	-- quantity. Low placeholder.

	local enabled = true
	local value = 1.0e-4

	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
	--
	-- Reference:
	-- SnO2 (rutile) static permittivity, M. Batzill, U. Diebold,
	-- Prog. Surf. Sci. 79, 47, 2005.
	--
	-- Note: rutile SnO2 is anisotropic (~9 perpendicular to c, ~14
	-- parallel to c). A representative perpendicular value is used.

	local enabled = true
	local value = 9.0

	return value, enabled
end

Free-carrier radiative recombination (material.free_to_free_recombination)

function material.free_to_free_recombination(state)
	-- Radiative (band-to-band) recombination coefficient
	-- Units: m^3 s^-1
	--
	-- Note: SnO2 is a wide-gap oxide with weak intrinsic radiative
	-- recombination; not the operative loss channel in an ETL. Poorly
	-- constrained placeholder.

	local enabled = true
	local value = 1.0e-20

	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
	--
	-- Note: not characterised. Order-of-magnitude placeholder.

	local enabled = true
	local value = 1.0e-43

	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
	--
	-- Note: not characterised. Order-of-magnitude placeholder.

	local enabled = true
	local value = 1.0e-43

	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 band).
	-- Negative values are below mid-gap (towards the valence band).

	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
	--
	-- Note: for an SnO2 ETL, interfacial/bulk SRH recombination is
	-- often the dominant loss and this is the key parameter. Strongly
	-- quality-dependent; placeholder to be set from measurement.

	local enabled = true
	local value = 1.0e21

	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

	local enabled = true
	local value = 1.0e-19

	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

	local enabled = true
	local value = 1.0e-19

	return value, enabled
end

Lattice thermal conductivity (material.thermal_kl)

function material.thermal_kl(state)
	-- Thermal conductivity
	-- Units: W m^-1 K^-1
	--
	-- Reference:
	-- Bulk rutile SnO2 ~55-98 W/m/K, anisotropic (CRC Handbook of
	-- Chemistry and Physics).
	--
	-- Note: polycrystalline device films are much lower (~1-15 W/m/K).
	-- A bulk value is returned; reduce for thin films. Approximate.

	local enabled = true
	local value = 55.0

	return value, enabled
end

Specific heat capacity (material.heat_capacity)

function material.heat_capacity(state)
	-- Specific heat capacity
	-- Units: J kg^-1 K^-1
	--
	-- Reference:
	-- SnO2, c_p(300 K) ~ 350 J/kg/K (CRC Handbook of Chemistry and
	-- Physics). Approximate.

	local enabled = true
	local value = 350.0

	return value, enabled
end

Mass density (material.density)

function material.density(state)
	-- Mass density
	-- Units: kg m^-3
	--
	-- Reference:
	-- SnO2 (rutile/cassiterite) rho = 6.95 g/cm^3 (CRC Handbook of
	-- Chemistry and Physics).

	local enabled = true
	local value = 6950.0

	return value, enabled
end

Crystal lattice constant (material.lattice_constant)

function material.lattice_constant(state)
	-- Cubic lattice constant
	-- Units: m
	--
	-- DISABLED: SnO2 is tetragonal (rutile), NOT cubic, so a single
	-- cubic lattice constant is not meaningful.
	--
	-- Reference (crystallography):
	-- R. W. G. Wyckoff, "Crystal Structures".
	-- Rutile SnO2: a = b = 4.737 A, c = 3.186 A at 300 K.
	-- The a-axis value is returned for reference only.

	local enabled = false
	local value = 4.737e-10

	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: Oxide family estimate
	-- Confidence: Low
	--
	-- Reference:
	-- https://doi.org/10.1021/jp802455p
	--
	-- Comments:
	-- n-type oxide/ETL. Electron relaxation is assumed sub-ps; the hole channel
	-- is normally inactive or trap dominated.

	local enabled = true
	local value = 5.000000e-13

	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: Oxide family estimate
	-- Confidence: Low
	--
	-- Reference:
	-- https://doi.org/10.1021/jp802455p
	--
	-- Comments:
	-- n-type oxide/ETL. Electron relaxation is assumed sub-ps; the hole channel
	-- is normally inactive or trap dominated.

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