Source code for simudo.materials.silicongermanium

from math import pi
from simudo.physics import Material
from .silicon import SiliconMaterial
from .germanium import GermaniumMaterial
from .helpers import Alloy

[docs] class SiliconGermaniumAlloy(Material): '''Silicon-Germanium material data based on Palankovski. This is for Si(1-x)Ge(x) strained to the Silicon lattice. mole fraction should be specified by the MoleFractionX spatial rule. V. Palankovski and R. Quay, "Analysis and Simulation of Heterostructure Devices", Springer-Verlag (2004). ''' name = 'SiliconGermanium'
[docs] def get_dict(self): d = super().get_dict() U = self.unit_registry MoleFractionX = self.problem_data.pdd.spatial.value_rules['MoleFractionX'][0].value Silicon = SiliconMaterial(problem_data=self.problem_data).get_dict() Germanium = GermaniumMaterial(problem_data=self.problem_data).get_dict() print(MoleFractionX) alloy = Alloy(U, MoleFractionX, at_x0=Silicon, at_x1=Germanium) vegard = alloy.vegard def linear_interp(param): return Silicon[param]*(U('1') - MoleFractionX) + Germanium[param]*MoleFractionX d.update({ 'poisson/permittivity': vegard('poisson/permittivity', U('0')), # Table 3.9 'CB/EgX_0K': vegard('CB/EgX_0K', U('-0.4 eV')), 'CB/ChiX_0K': vegard('CB/ChiX_0K', U('0.4 eV')), 'CB/varshni_alphaX': Silicon['CB/varshni_alphaX'], 'CB/varshni_betaX': Silicon['CB/varshni_betaX'], # Table 3.21 'CB/MCX': U('6'), # recombination velocity at interfaces with other materials 'CB/SRV': U('500 cm/s'), 'VB/SRV': U('500 cm/s'), 'SRH/CB/tau': U('1e-9 s'), 'SRH/VB/tau': U('1e-6 s'), # Properties for band-to-band tunneling 'CB/eff_mass_tunnel': U('0.05'), 'VB/eff_mass_tunnel': U('0.1'), 'CB/tunnel_offset_energy': U('0 eV'), 'VB/tunnel_offset_energy': U('0 eV') }) T = self.temperature Eg = d['CB/EgX_0K'] - d['CB/varshni_alphaX'] * T**2 / (d['CB/varshni_betaX'] + T) Chi = d['CB/ChiX_0K'] + d['CB/varshni_alphaX'] * T**2 / (d['CB/varshni_betaX'] + T) mn = vegard('CB/mDOS', U('-0.183')) mp = vegard('VB/mDOS', U('-0.096')) NC = 2 * d['CB/MCX'] * (2 * pi * mn * U.electron_mass * U.boltzmann_constant * T / U.planck_constant**2)**(3/2) NV = 2 * (2 * pi * mp * U.electron_mass * U.boltzmann_constant * T / U.planck_constant**2)**(3/2) d.update({ 'CB/mDOS': mn, 'VB/mDOS': mp, 'CB/energy_level': -Chi, 'VB/energy_level': -Chi -Eg, 'CB/effective_density_of_states': NC, 'VB/effective_density_of_states': NV, # TODO - update these from Palankovski 'CB/mobility': U('1400 cm^2/V/s'), 'VB/mobility': U(' 450 cm^2/V/s'), 'SRH/energy_level': -Chi -Eg/2 }) return d