Source code for simudo.materials.galliumarsenide

from math import pi
import numpy as np
from simudo.physics import Material

from .helpers import thermal_velocity


[docs] class GalliumArsenideMaterial(Material): """ GaAs material data based on Palankovski V. Palankovski and R. Quay, "Analysis and Simulation of Heterostructure Devices", Springer-Verlag (2004). Both gamma and X valley properties are included here for later use in the valleyPV InGaAs alloy. The CB energy level is still taken to be that of the lowest valley """ name = "GalliumArsenide"
[docs] def get_dict(self): d = super().get_dict() U = self.unit_registry d.update( { # Static dielectric constant, Palankovski Table 3.3 "poisson/permittivity": U("13.1 vacuum_permittivity"), # Springer's handbook (2017) , Table 30.12 "CB/Eg_300K": U("1.43 eV"), "CBX/Eg_300K": U("1.91 eV"), "CBL/Eg_300K": U("1.72 eV"), # Table 3.15 band edge alignment "VB/E_off": U("-0.712 eV"), # Table 3.21 Parameter for energy minima in the DOS model "CB/MC": U("1"), "CBX/MC": U("3"), "CBL/MC": U("4"), # Springer handbook Table 30.17 Effective electron masses "CB/mn": U("0.067"), "CBX/mn": U("0.85"), "CBL/mn": U("0.56"), # Springer Table 3.20 Effective hole masses "VB/mp": U("0.55"), # conductivity mass, Springer Table 30.17 "CBX/mc": U("0.32"), "CBL/mc": U("0.11"), # Include other parameters for SRH etc. here. # SRH recombination lifetimes, Table 3.38 "SRH/CB/tau": U("0.3e-9 s"), "SRH/CBX/tau": U("0.3e-9 s"), "SRH/CBL/tau": U("0.3e-9 s"), #TODO - find appropriate lifetimes for these valleys "SRH/VB/tau": U("10e-9 s"), # Springer 2017, Table 30.1 "a": U("5.6533e-10 m"), # Lattice parameter # Palankovski Table 3.22, lattice scattering mobility, not L-valley "CB/mu_L": U("8500 cm^2/V/s"), "CBX/mu_L": U("410 cm^2/V/s"), "CBL/mu_L": U("410 cm^2/V/s"), "VB/mu_L": U("470 cm^2/V/s"), # Palankovski Table 3.22, mobility temperature dependence power term "CB/y_0": U("-2.2"), "CBX/y_0": U("-2.2"), "CBL/y_0": U("-2.2"), "VB/y_0": U("-0.9"), # Palankvoski Table 3.23, mobility parameters to factor in ionized impurities "CB/mu_min" : U("800 cm^2/V/s"), "CBX/mu_min": U("40 cm^2/V/s"), "VB/mu_min" : U("40 cm^2/V/s"), "CB/C_ref" : U("1e17 elementary_charge/cm^3"), "CBX/C_ref": U("1e17 elementary_charge/cm^3"), "VB/C_ref" : U("1e17 elementary_charge/cm^3"), "CB/alpha_mu" : U("0.5 dimensionless"), "CBX/alpha_mu" : U("0.5 dimensionless"), "VB/alpha_mu" : U("1.0 dimensionless"), } ) T = self.temperature E_off = d["VB/E_off"] # Effective electron and hole mass mn = d["CB/mn"] mnX = d["CBX/mn"] mnL = d["CBL/mn"] mp = d["VB/mp"] # Effective DOS. Palankovski eq. 3.111 & 3.112 m_e = U.electron_mass k_B = U.boltzmann_constant h = U.planck_constant DOS_term = lambda m : (2 * pi * m * m_e * k_B * T / h ** 2) ** (3 / 2) NC = 2 * d["CB/MC"] * DOS_term(mn) NCX = 2 * d["CBX/MC"] * DOS_term(mnX) NCL = 2 * d["CBL/MC"] * DOS_term(mnL) NV = 2 * DOS_term(mp) # Thermal velocity vth = lambda m : thermal_velocity(U, T, m) #Gamma valley mtc = d["CB/mn"] vth_c = vth(mtc) #X valley mtcX = d["CBX/mc"] vth_cX = vth(mtcX) #L valley mtcL = d["CBL/mc"] vth_cL = vth(mtcL) # For valence band, just use the DOS effective mass mtv = d["VB/mp"] vth_v = vth(mtv) Eg = d["CB/Eg_300K"] EgX = d["CBX/Eg_300K"] EgL = d["CBL/Eg_300K"] # Caughey-Thomas impurity scattering, Palankovski eq. 3.116 def mu_LI(band: str): '''Band is either `CB`, `CBX`, or `VB`''' doping = abs(self.pdd.spatial.get('poisson/static_rho')) mu_min = d[band+'/mu_min']; mu_L = d[band+'/mu_L']; C_ref = d[band+'/C_ref']; alpha = d[band+'/alpha_mu'] return mu_min + (mu_L - mu_min) / (1 + (doping/C_ref)**alpha) # Palankovski eq. 3.115 incorporates temperature dependence with mobility mu_T = lambda mu, y_0 : mu * (T/U("300 K"))**y_0 d.update( { # Palankovski Table 3.22 Mobility "CB/mobility": mu_T(d["CB/mu_L"], d["CB/y_0"]), #Gamma valley "CBX/mobility": mu_T(d["CBX/mu_L"], d["CBX/y_0"]), #X valley "CBL/mobility": mu_T(d["CBL/mu_L"], d["CBL/y_0"]), "VB/mobility": mu_T(d["VB/mu_L"], d["VB/y_0"]), # "CB/mobility" : mu_LI('CB'), # "CBX/mobility" : mu_LI('CBX'), # "VB/mobility" : mu_LI('VB'), "CB/mDOS": mn, "CBX/mDOS": mnX, "CBL/mDOS": mnL, "VB/mDOS": mp, "CB/energy_level": E_off + Eg, "CBX/energy_level": E_off + EgX, "CBL/energy_level": E_off + EgL, "VB/energy_level": E_off, # Midgap trap level for SRH. The material sets the SRH # lifetimes above, so it should set the level they go with; # without it a project using SRHRecombination has to supply # <proc>/energy_level by hand. Midgap is the usual default. # TODO it should be source- and destination-band dependent. "SRH/energy_level": E_off + Eg / 2, "VB/effective_density_of_states": NV, "CB/effective_density_of_states": NC, "CBX/effective_density_of_states": NCX, "CBL/effective_density_of_states": NCL, "CB/vth": vth_c, "CBX/vth": vth_cX, "CBL/vth": vth_cL, "VB/vth": vth_v, "opt_cv/alpha": U("1e4 cm^-1"), } ) # alpha(E) for a BeerLambert process named 'opt_cv', from the measured # table below. ("opt_cv/alpha" above is the flat value used instead by # the NonOverlappingTopHat* classes.) A top-hat set on a layer or # overlay overrides this: material rules have the lowest priority. # Keep this a literal dict -- the GUI detects it by AST scan. d["opt_cv/alpha_function"] = { "type": "wavelength_table", "data": self.optical_properties_table()[:, 0:2], "arg_unit": "nm", "value_unit": "1/cm", } return d
# Optical data sourced from: # K. Papatryfonos, T. Angelova, A. Brimont, B. Reid, S. Guldin, P. R. Smith, M. Tang, K. Li, A. J. Seeds, H. Liu, D. R. Selviah. Refractive indices of MBE-grown AlxGa1-xAs ternary alloys in the transparent wavelength region. AIP Adv. 11, 025327 (2021) # Data was collated into CSV files from: # https://refractiveindex.info/?shelf=maxin&book=GaAs&page=Papatryfonos
[docs] def optical_properties_table(self): '''Array of arrays, where each element is of the form [wl, alpha, n, k].''' return np.array([ [260.49, 1.78492730e+06, 3.43000, 3.70000e+00], [267.23, 1.56591753e+06, 3.74000, 3.33000e+00], [274.32, 1.35595133e+06, 3.96000, 2.96000e+00], [281.80, 1.12374925e+06, 4.02000, 2.52000e+00], [289.70, 9.54298079e+05, 3.90000, 2.20000e+00], [298.06, 8.55858966e+05, 3.76000, 2.03000e+00], [306.91, 7.98423730e+05, 3.64000, 1.95000e+00], [316.31, 7.62778021e+05, 3.57000, 1.92000e+00], [326.30, 7.39424811e+05, 3.53000, 1.92000e+00], [336.94, 7.27263688e+05, 3.52000, 1.95000e+00], [348.29, 7.17995852e+05, 3.55000, 1.99000e+00], [360.44, 7.18197854e+05, 3.63000, 2.06000e+00], [373.47, 7.20058723e+05, 3.78000, 2.14000e+00], [387.48, 7.36184095e+05, 4.18000, 2.27000e+00], [402.57, 6.80495018e+05, 4.47000, 2.18000e+00], [418.89, 5.90984509e+05, 4.96000, 1.97000e+00], [436.59, 4.08718621e+05, 4.88000, 1.42000e+00], [455.86, 2.28248911e+05, 4.60000, 8.28000e-01], [476.89, 1.54678428e+05, 4.39000, 5.87000e-01], [499.97, 1.13858149e+05, 4.22000, 4.53000e-01], [525.39, 8.75405250e+04, 4.09000, 3.66000e-01], [553.54, 6.78784697e+04, 3.99000, 2.99000e-01], [584.87, 5.39292326e+04, 3.90000, 2.51000e-01], [619.96, 4.21608666e+04, 3.84000, 2.08000e-01], [659.54, 3.29620966e+04, 3.78000, 1.73000e-01], [704.50, 2.22966122e+04, 3.72000, 1.25000e-01], [756.05, 1.59562407e+04, 3.67000, 9.60000e-02], [815.74, 1.04136937e+04, 3.63000, 6.76000e-02], [885.66, 5.74642651e+02, 3.54000, 4.05000e-03], [968.69, 0.00000000e+00, 3.49000, 0.00000e+00], [1068.90, 0.00000000e+00, 3.45000, 0.00000e+00], [1192.24, 0.00000000e+00, 3.42000, 0.00000e+00], [1347.75, 0.00000000e+00, 3.40000, 0.00000e+00], [1549.91, 0.00000000e+00, 3.38000, 0.00000e+00], [1823.42, 0.00000000e+00, 3.37000, 0.00000e+00], ])