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

CdTe material model

1. Introduction

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

Bulk crystalline cadmium telluride (zinc-blende)

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

Material description (material.description)

function material.description()
	local enabled = true

	return "Bulk crystalline cadmium telluride (zinc-blende)", enabled
end

Chemical formula (material.formula)

function material.formula()
	local enabled = true

	return "CdTe", enabled
end

Band gap energy (material.Eg)

function material.Eg(state)
	-- Units: eV
	--
	-- Reference:
	-- Y. P. Varshni,
	-- "Temperature dependence of the energy gap in semiconductors",
	-- Physica, 34, 149-154, 1967.
	--
	-- Zinc-blende CdTe parameter set (Eg(0) = 1.60 eV, alpha = 5.6e-4
	-- eV/K, beta = 200 K); representative II-VI compilation values.
	-- Gives Eg(300 K) = 1.50 eV. Direct gap.
	--
	-- Note: the parameters are chosen to reproduce the ~1.50 eV value
	-- conventionally used for CdTe absorbers in photovoltaic device
	-- modelling; reported room-temperature gaps span ~1.49-1.51 eV.
	-- The ~1.5 eV direct gap is near-ideal for single-junction solar
	-- cells (Shockley-Queisser optimum).

	local enabled = true
	local T = state.T
	local value = 1.60 - 5.6e-4*T*T/(T + 200.0)

	return value, enabled
end

Deformation potential Xi (material.Xi)

function material.Xi(state)
	-- Electron affinity
	-- Units: eV
	--
	-- Reference:
	-- Photovoltaic device-modelling literature (a common value).
	--
	-- IMPORTANT (for PV use): together with the CdS affinity, this sets
	-- the CdS/CdTe conduction-band offset, which strongly affects the
	-- simulated junction (a small "spike" CBO is generally beneficial,
	-- a "cliff" is harmful). 4.28 eV used here. Fix the offset from a
	-- measured band alignment rather than affinity differencing.

	local enabled = true
	local value = 4.28

	return value, enabled
end

Electron effective mass (material.me)

function material.me(state)
    local enabled = true
    local value = 0.096   -- Gamma electron mass (Adachi 2005)
    return value, enabled
end

Hole effective mass (material.mh)

function material.mh(state)
    local enabled = true
    local value = 0.65    -- HH curvature ~0.6-0.8 in literature (Adachi 2005)
    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 electron effective mass m_e* ~ 0.11 m0 (CdTe).
	-- Nc(300 K) ~ 8e17 cm^-3 = 8e23 m^-3 (a common PV-modelling value).
	--
	-- Note: the (T/300)^1.5 form is the simple parabolic-band model.

	local enabled = true
	local T = state.T
	local value = 8.0e23*(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 the (heavy) hole effective mass of CdTe.
	-- Nv(300 K) ~ 1.8e19 cm^-3 = 1.8e25 m^-3 (a common PV value).

	local enabled = true
	local T = state.T
	local value = 1.8e25*(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:
	-- CdTe experimental compilation.
	-- Representative mu_n(300 K) ~ 500 cm^2/V/s = 0.05 m^2/V/s,
	-- temperature dependence approximately (300/T)^1.5.
	--
	-- IMPORTANT: strongly process dependent. Single-crystal CdTe
	-- reaches ~1000-1100 cm^2/V/s; polycrystalline thin-film CdTe used
	-- in solar cells is lower (grain-boundary scattering, often
	-- ~50-500 cm^2/V/s). Set from your film.

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

	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
	--
	-- Reference:
	-- CdTe experimental compilation.
	-- Representative mu_p(300 K) ~ 60 cm^2/V/s = 0.006 m^2/V/s,
	-- temperature dependence approximately (300/T)^1.5.
	--
	-- Note: as the PV absorber, both carrier mobilities matter here
	-- (unlike a window layer). Also process dependent.

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

	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:
	-- CdTe compilation.
	-- Static value ~10.4 (high-frequency value ~7.1).

	local enabled = true
	local value = 10.4

	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
	--
	-- Reference:
	-- Representative CdTe value, ~2e-10 cm^3/s = 2e-16 m^3/s.
	--
	-- CdTe is direct-gap, so B is significant and sets the radiative
	-- (Shockley-Queisser) limit for high-quality material. In present
	-- polycrystalline CdTe cells, however, SRH recombination (bulk and
	-- grain-boundary) usually dominates; adjust by hand as needed.

	local enabled = true
	local value = 2.0e-16

	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
	--
	-- Reference:
	-- Representative placeholder, ~1e-30 cm^6/s = 1e-42 m^6/s.
	--
	-- Note: Auger is not usually the dominant loss in CdTe solar cells
	-- (SRH dominates). Placeholder; adjust by hand.

	local enabled = true
	local value = 1.0e-42

	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
	--
	-- Reference:
	-- Representative placeholder, ~1e-30 cm^6/s = 1e-42 m^6/s.
	--
	-- Note: as for Cn, not usually dominant. Placeholder only.

	local enabled = true
	local value = 1.0e-42

	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
	--
	-- Material-quality dependent; set from the intended bulk lifetime.
	-- Representative placeholder for device-grade material.
	--
	-- IMPORTANT: SRH recombination is the KEY performance-limiting
	-- parameter in CdTe solar cells. The bulk lifetime (historically
	-- ~ns, now longer with CdCl2 treatment and passivation) and the
	-- grain-boundary and CdS/CdTe interface defect densities dominate
	-- the device. Set this from your material's measured lifetime
	-- rather than trusting the placeholder.

	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
	--
	-- Representative value ~1e-15 cm^2 = 1e-19 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
	--
	-- Representative value ~1e-15 cm^2 = 1e-19 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:
	-- CdTe compilation.
	-- kappa(300 K) ~ 6.2 W/m/K; near room temperature kappa decreases
	-- with T with an effective exponent of about -1.4.
	--
	-- Note: CdTe has a low thermal conductivity (reported ~5.5-7.5
	-- W/m/K); thin-film values are lower still.

	local enabled = true
	local T = state.T
	local value = 6.2*(300.0/T)^1.4

	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:
	-- CdTe compilation. c_p(300 K) ~ 210 J/kg/K.

	local enabled = true
	local value = 210.0

	return value, enabled
end

Mass density (material.density)

function material.density(state)
	-- Mass density
	-- Units: kg m^-3
	--
	-- Reference:
	-- CdTe compilation. rho = 5.85 g/cm^3.

	local enabled = true
	local value = 5850.0

	return value, enabled
end

Crystal lattice constant (material.lattice_constant)

function material.lattice_constant(state)
	-- Cubic lattice constant
	-- Units: m
	--
	-- Reference:
	-- CdTe compilation (Landolt-Boernstein).
	-- a(300 K) = 6.481 A; linear expansion ~4.9e-6 /K near 300 K.
	--
	-- Note: CdTe is zinc-blende (cubic), so unlike wurtzite CdS/CdSe a
	-- single lattice constant fully describes it. CdTe is very heavily
	-- lattice-mismatched to CdS (~10%), so the CdS/CdTe heterojunction
	-- is highly defective -- one reason interface recombination is
	-- important in these cells.

	local enabled = true
	local T = state.T
	local a300 = 6.481e-10
	local expansion = 4.9e-6
	local value = a300*(1.0 + expansion*(T - 300.0))

	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: II-VI family estimate
	-- Confidence: Low
	--
	-- Reference:
	-- https://doi.org/10.1109/16.381985
	--
	-- Comments:
	-- II-VI family default. Direct carrier-specific hydrodynamic parameters are
	-- scarce; use sensitivity analysis.

	local enabled = true
	local value = 1.000000e-12

	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: II-VI family estimate
	-- Confidence: Low
	--
	-- Reference:
	-- https://doi.org/10.1109/16.381985
	--
	-- Comments:
	-- II-VI family default. Direct carrier-specific hydrodynamic parameters are
	-- scarce; use sensitivity analysis.

	local enabled = true
	local value = 1.000000e-12

	return value, enabled
end

Spin–orbit splitting energy (material.delta_so)

function material.delta_so(state)
	-- Spin-orbit splitting energy (Delta_SO)
	-- Units: eV
	--
	-- Reference:
	-- Adachi, Properties of Group-IV, III-V and II-VI Semiconductors
	-- (Wiley, 2005); Landolt-Boernstein III/41B. Zincblende CdTe.

	local enabled = true
	local value = 0.9

	return value, enabled
end

Kane interband coupling energy (material.Ep)

function material.Ep(state)
	-- Kane energy E_P (optical matrix element parameter)
	-- Units: eV
	--
	-- Reference:
	-- No sufficiently reliable value identified for this material/parameter.
	--
	-- Note:
	-- Disabled rather than estimating an unsupported value.

	local enabled = false
	local value = 0.0

	return value, enabled
end

Luttinger parameter gamma1 (material.gamma1)

function material.gamma1(state)
	-- Luttinger parameter gamma1
	-- Units: dimensionless
	--
	-- Reference:
	-- No sufficiently reliable value identified for this material/parameter.
	--
	-- Note:
	-- Disabled rather than estimating an unsupported value.

	local enabled = false
	local value = 0.0

	return value, enabled
end

Luttinger parameter gamma2 (material.gamma2)

function material.gamma2(state)
	-- Luttinger parameter gamma2
	-- Units: dimensionless
	--
	-- Reference:
	-- No sufficiently reliable value identified for this material/parameter.
	--
	-- Note:
	-- Disabled rather than estimating an unsupported value.

	local enabled = false
	local value = 0.0

	return value, enabled
end

Luttinger parameter gamma3 (material.gamma3)

function material.gamma3(state)
	-- Luttinger parameter gamma3
	-- Units: dimensionless
	--
	-- Reference:
	-- No sufficiently reliable value identified for this material/parameter.
	--
	-- Note:
	-- Disabled rather than estimating an unsupported value.

	local enabled = false
	local value = 0.0

	return value, enabled
end

Optical absorption coefficient (material.ac)

function material.ac(state)
	-- Conduction-band hydrostatic deformation potential a_c
	-- Units: eV
	--
	-- Reference:
	-- No sufficiently reliable value identified for this material/parameter.
	--
	-- Note:
	-- Disabled rather than estimating an unsupported value.

	local enabled = false
	local value = 0.0

	return value, enabled
end

Optical absorption / extinction parameter (material.av)

function material.av(state)
	-- Valence-band hydrostatic deformation potential a_v
	-- Units: eV
	--
	-- Reference:
	-- No sufficiently reliable value identified for this material/parameter.
	--
	-- Note:
	-- Disabled rather than estimating an unsupported value.

	local enabled = false
	local value = 0.0

	return value, enabled
end

Recombination parameter b (material.b)

function material.b(state)
	-- Valence-band shear (tetragonal) deformation potential b
	-- Units: eV
	--
	-- Reference:
	-- No sufficiently reliable value identified for this material/parameter.
	--
	-- Note:
	-- Disabled rather than estimating an unsupported value.

	local enabled = false
	local value = 0.0

	return value, enabled
end

Material parameter d (material.d)

function material.d(state)
	-- Valence-band shear (rhombohedral) deformation potential d
	-- Units: eV
	--
	-- Reference:
	-- No sufficiently reliable value identified for this material/parameter.
	--
	-- Note:
	-- Disabled rather than estimating an unsupported value.

	local enabled = false
	local value = 0.0

	return value, enabled
end

Lattice constant a (material.lattice_a)

function material.lattice_a(state)
	-- Cubic (zincblende) lattice constant a
	-- Units: m
	--
	-- Reference:
	-- Adachi, Properties of Group-IV, III-V and II-VI Semiconductors
	-- (Wiley, 2005); Landolt-Boernstein III/41B. Zincblende CdTe.
	-- a=6.482 Angstrom (room temperature).
	--
	-- Note:
	-- Room-temperature constant used; no reliable da/dT applied here.

	local enabled = true
	local value = 6.482*1e-10

	return value, enabled
end

Elastic stiffness constant C11 (material.C11)

function material.C11(state)
	-- Elastic stiffness constant C11
	-- Units: Pa
	--
	-- Reference:
	-- Adachi, Properties of Group-IV, III-V and II-VI Semiconductors
	-- (Wiley, 2005); Landolt-Boernstein III/41B. Zincblende CdTe.
	-- C11=53.8 GPa, converted to Pa.

	local enabled = true
	local value = 53.8e9

	return value, enabled
end

Elastic stiffness constant C12 (material.C12)

function material.C12(state)
	-- Elastic stiffness constant C12
	-- Units: Pa
	--
	-- Reference:
	-- Adachi, Properties of Group-IV, III-V and II-VI Semiconductors
	-- (Wiley, 2005); Landolt-Boernstein III/41B. Zincblende CdTe.
	-- C12=37.4 GPa, converted to Pa.

	local enabled = true
	local value = 37.4e9

	return value, enabled
end

Elastic stiffness constant C44 (material.C44)

function material.C44(state)
    -- Elastic stiffness constant C44
    -- Units: Pa
    --
    -- Reference:
    -- D. Berlincourt, H. Jaffe, L. R. Shiozawa,
    -- "Electroelastic properties of the sulfides, selenides, and tellurides
    -- of zinc and cadmium,"
    -- Phys. Rev. 129, 1009 (1963).
    -- DOI: 10.1103/PhysRev.129.1009
    -- Measured value as tabulated in:
    -- B. D. Rajput and D. A. Browne,
    -- "Lattice dynamics of II-VI materials using adiabatic bond charge
    -- model," arXiv:cond-mat/9510155, Table II (measured values in
    -- parentheses, with original sources identified).
    --
    -- Notes:
    -- C44 = 1.994e11 dyn/cm^2 = 19.94 GPa -> 19.94e9 Pa (room temperature).

    local enabled = true
    local value = 19.94e9

    return value, enabled
end

Longitudinal optical phonon energy (material.phonon_lo_energy)

function material.phonon_lo_energy(state)
    -- Representative LO phonon energy for polar optical (Frohlich) scattering
    -- Units: eV
    --
    -- Reference:
    -- J. M. Rowe, R. M. Nicklow, D. L. Price, K. Zanio,
    -- Phys. Rev. B 10, 671 (1974). (CdTe lattice dynamics, inelastic neutron
    -- scattering)
    -- LO(Gamma) as tabulated in:
    -- P. Gopal, M. Fornari, S. Curtarolo, L. A. Agapito, L. S. I. Liyanage,
    -- M. Buongiorno Nardelli,
    -- "Improved predictions of the physical properties of Zn- and Cd-based
    -- wide band-gap semiconductors: a validation of the ACBN0 functional,"
    -- arXiv:1505.05245, Tables VII and VIII (experimental columns).
    --
    -- Notes:
    -- LO(Gamma) = 167 cm^-1 -> 167 x 1.239842e-4 = 0.02071 eV.

    local enabled = true
    local value = 0.02071

    return value, enabled
end

Static dielectric constant (material.epsilon_static)

function material.epsilon_static(state)
    -- Static relative dielectric constant (lattice + electronic)
    -- Dimensionless
    --
    -- Derived (LST) from:
    -- P. Gopal, M. Fornari, S. Curtarolo, L. A. Agapito, L. S. I. Liyanage,
    -- M. Buongiorno Nardelli,
    -- "Improved predictions of the physical properties of Zn- and Cd-based
    -- wide band-gap semiconductors: a validation of the ACBN0 functional,"
    -- arXiv:1505.05245, Tables VII and VIII (experimental columns).
    -- experimental eps_inf = 7.1 and LO/TO(Gamma) = 167/138 cm^-1
    -- (neutron data of Rowe et al., Phys. Rev. B 10, 671 (1974)).
    --
    -- Notes:
    -- eps_s = 7.1*(167/138)^2 = 10.40. Consistent with the commonly quoted
    -- 10.2-10.6. Derivation keeps the Frohlich set self-consistent.

    local enabled = true
    local value = 10.40

    return value, enabled
end

High-frequency dielectric constant (material.epsilon_inf)

function material.epsilon_inf(state)
    -- High-frequency (electronic) relative dielectric constant
    -- Dimensionless
    --
    -- Reference:
    -- P. Gopal, M. Fornari, S. Curtarolo, L. A. Agapito, L. S. I. Liyanage,
    -- M. Buongiorno Nardelli,
    -- "Improved predictions of the physical properties of Zn- and Cd-based
    -- wide band-gap semiconductors: a validation of the ACBN0 functional,"
    -- arXiv:1505.05245, Tables VII and VIII (experimental columns).
    -- (experimental column, Table VIII).
    --
    -- Notes:
    -- eps_inf = 7.1.

    local enabled = true
    local value = 7.1

    return value, enabled
end

Piezoelectric coefficient e14 (material.e14)

function material.e14(state)
    -- Zincblende piezoelectric stress coefficient e14
    -- Units: C m^-2
    --
    -- No sufficiently reliable value/reference identified.
    -- Disabled rather than estimated.
    --
    -- Notes:
    -- A magnitude ~0.03 C/m^2 can be inferred from Berlincourt et al.
    -- (1963) d14 via secondary citation only; the value and sign were not
    -- verified against the original.

    local enabled = false
    local value = 0.0

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