Source code for piel.materials.silicon
import numpy as np
[docs]
def k():
"""Return the Boltzmann constant in eV/K."""
return 8.617333262145e-5
[docs]
def epsilon_0():
"""Return the permittivity of free space in F/m (Farads per meter)."""
return 8.854e-12
[docs]
def h():
"""Return Planck's constant in J.s or eV.s."""
return 6.62607015e-34
[docs]
def T_a():
"""Return an array of ambient temperatures ranging from 0.1 to 300 K."""
return np.linspace(0.1, 300)
[docs]
def epsilon_si():
"""Return the permittivity of Silicon."""
return 11.7 * epsilon_0()
[docs]
def E_g_si_bardin(T):
"""Calculate the bandgap energy of silicon as a function of temperature."""
return 1.17 + 5.65e-6 * T - 5.11e-7 * T**2 - 8.03e-10 * T**3 + 2.50e-12 * T**4
[docs]
def m_dh_green_h(T):
"""Calculate the density of states effective mass for holes (Green) as a function of temperature."""
numerator = (
0.444 + 0.361e-2 * T + 0.117e-3 * T**2 + 0.126e-5 * T**3 + 0.303e-8 * T**4
)
denominator = 1 + 0.468e-2 * T + 0.229e-3 * T**2 + 0.747e-6 * T**3 + 0.173e-8 * T**4
return (numerator / denominator) ** (2 / 3)
[docs]
def m_l_askt_h(T):
"""Calculate the normalized light hole effective mass as a function of temperature."""
return 0.14615 + 3.7414e-4 * T - 1.8809e-7 * T**2
[docs]
def m_h_askt_h(T):
"""Calculate the normalized heavy hole effective mass as a function of temperature."""
return 0.51741 + 2.5139e-3 * T - 4.4117e-6 * T**2 + 2.6974e-3
[docs]
def m_so_askt_h(T):
"""Calculate the normalized split-off hole effective mass as a function of temperature."""
return 0.22775 + 2.963e-4 * T + 2.3872e-7 * T**2
[docs]
def m_dh_askt_h(T):
"""Calculate the density of states effective mass for holes as a function of temperature."""
m_h = m_h_askt_h(T)
m_l = m_l_askt_h(T)
m_so = m_so_askt_h(T)
return (m_h ** (3 / 2) + m_l ** (3 / 2) + m_so ** (3 / 2)) ** (2 / 3)
[docs]
def m_t_askt_e(T):
"""Calculate the transversal effective mass for electrons as a function of temperature."""
return (
0.19049
- 2.0905e-6 * T
+ 9.8985e-7 * T**2
- 2.6798e-9 * T**3
+ 2.0270e-12 * T**4
)
[docs]
def m_ce_askt_e(T):
"""Calculate the effective conduction mass for electrons as a function of temperature."""
m_t = m_t_askt_e(T)
m_l = 0.9163
return 1 / ((1 / m_t + 2 / m_l) / 3)
[docs]
def m_de_askt_e(T):
"""Calculate the electron density-of-states effective mass as a function of temperature."""
m_t = m_t_askt_e(T)
m_l = 0.9163
return (6 * np.sqrt(m_l * (m_t**2))) ** (2 / 3)
[docs]
def N_c(T):
"""Calculate the effective density of states in the conduction band as a function of temperature."""
m_de = m_de_askt_e(T)
return (2 * (2 * np.pi * m_de * k() * T) ** (3 / 2)) / (h() ** 2)
[docs]
def E_c(T):
"""Calculate the conduction band energy as a function of temperature."""
return E_g_si_bardin(T)
[docs]
def E_f(T):
"""Calculate the Fermi level energy as a function of temperature."""
return E_g_si_bardin(T) / 2
[docs]
def n_0(T):
"""Calculate the electron concentration at equilibrium as a function of temperature."""
Ec = E_c(T)
Ef = E_f(T)
return N_c(T) * (1 / (1 + np.exp((Ec - Ef) / (k() * T))))
[docs]
def N_v(T):
"""Calculate the effective density of states in the valence band as a function of temperature."""
m_dh = m_dh_askt_h(T)
return (2 * (2 * np.pi * m_dh * k() * T) ** (3 / 2)) / (h() ** 2)
[docs]
def p_0(T):
"""Calculate the hole concentration at equilibrium as a function of temperature."""
Ec = E_c(T)
Ef = E_f(T)
return N_v(T) * (1 - (1 / (1 + np.exp((Ec - Ef) / (k() * T)))))
[docs]
def n_i(T):
"""Calculate the intrinsic carrier concentration as a function of temperature."""
return np.sqrt(N_c(T) * N_v(T)) * np.exp(-E_g_si_bardin(T) / (2 * k() * T))
[docs]
def n_io(T):
"""Calculate the intrinsic carrier concentration for a given temperature using an alternative method."""
m_t = m_t_askt_e(T)
m_l = 0.9163
return (
4.82e15
* T ** (3 / 2)
* np.sqrt(6 * m_t * np.sqrt(m_l))
* np.exp(-E_g_si_bardin(T) / (2 * k() * T))
)
[docs]
def mu_0a_e():
"""Return the parameter mu_0a for electron mobility."""
return 4195
[docs]
def mu_0b_e():
"""Return the parameter mu_0b for electron mobility."""
return 2153
[docs]
def kappa_a_e():
"""Return the exponent kappa_a for electron mobility."""
return 1.5
[docs]
def kappa_b_e():
"""Return the exponent kappa_b for electron mobility."""
return 3.13
[docs]
def mu_0a_h():
"""Return the parameter mu_0a for hole mobility."""
return 2502
[docs]
def mu_0b_h():
"""Return the parameter mu_0b for hole mobility."""
return 519
[docs]
def kappa_a_h():
"""Return the exponent kappa_a for hole mobility."""
return 1.5
[docs]
def kappa_b_h():
"""Return the exponent kappa_b for hole mobility."""
return 3.25
[docs]
def mu_ps_e(T):
"""Calculate the electron mobility due to phonon scattering as a function of temperature."""
return 1 / ((mu_0a_e() ** -1) * (T / 300) ** kappa_a_e()) + 1 / (
(mu_0b_e() ** -1) * (T / 300) ** kappa_b_e()
)
[docs]
def mu_ps_h(T):
"""Calculate the hole mobility due to phonon scattering as a function of temperature."""
return 1 / ((mu_0a_h() ** -1) * (T / 300) ** kappa_a_h()) + 1 / (
(mu_0b_h() ** -1) * (T / 300) ** kappa_b_h()
)
[docs]
def mu_min_e(T):
"""Calculate the minimum electron mobility as a function of temperature."""
return 197.17 - 45.505 * np.log10(T)
[docs]
def N_ref_e(T):
"""Return the reference concentration N_ref for electrons as a function of temperature."""
return 1.12e17 * (T / 300) ** 3.2
[docs]
def kappa_c_e(T):
"""Return the exponent kappa_c for electron mobility as a function of temperature."""
return 0.72 * (T / 300) ** 0.065
[docs]
def mu_min_h(T):
"""Calculate the minimum hole mobility as a function of temperature."""
return 110.90 - 25.597 * np.log10(T)
[docs]
def N_ref_h(T):
"""Return the reference concentration N_ref for holes as a function of temperature."""
return 2.23e17 * (T / 300) ** 3.2
[docs]
def kappa_c_h(T):
"""Return the exponent kappa_c for hole mobility as a function of temperature."""
return 0.72 * (T / 300) ** 0.065
[docs]
def mu_psii_e(T, N_I_e):
"""Calculate the phonon scattering and ionized impurity electron scattering mobility."""
mu_min = mu_min_e(T)
mu_ps = mu_ps_e(T)
N_ref = N_ref_e(T)
kappa_c = kappa_c_e(T)
return mu_min + (mu_ps - mu_min) / (1 + (N_I_e / N_ref) ** kappa_c)
[docs]
def mu_psii_h(T, N_I_h):
"""Calculate the phonon scattering and ionized impurity hole scattering mobility."""
mu_min = mu_min_h(T)
mu_ps = mu_ps_h(T)
N_ref = N_ref_h(T)
kappa_c = kappa_c_h(T)
return mu_min + (mu_ps - mu_min) / (1 + (N_I_h / N_ref) ** kappa_c)