Source code for simudo.example.heterojunction.silicongermanium

from math import pi
from simudo.physics import Material

from .silicon import SiliconMaterial
from .germanium import GermaniumMaterial


[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 X = 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(X) def vegard(param, C): """ use vegard's law to interpolate parameter param with bowing parameter C.""" return ( Silicon[param] * (U("1") - X) + Germanium[param] * X + C * (U("1") - X) * X ) def linear_interp(param): return Silicon[param] * (U("1") - X) + Germanium[param] * X 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 recombination parameters "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")) m_e = U.electron_mass k_B = U.boltzmann_constant h = U.planck_constant NC = 2 * d["CB/MCX"] * (2 * pi * mn * m_e * k_B * T / h ** 2) ** (3 / 2) NV = 2 * (2 * pi * mp * m_e * k_B * T / h ** 2) ** (3 / 2) ########################### # TODO: Update these for SiGe. Below is just the calculation for silicon # Effective masses and thermal velocity from Green (1990) # mtc actually has a small temperature dependence acording to Green mtc = U("0.28") vth_c = ( 8 * U.boltzmann_constant * T / (pi * mtc * U.electron_mass) ) ** 0.5 mtv = ( 0.3676 + U("1.98738e-5 /K^2") * T ** 2 - U("2.588144e-7 /K^3") * T ** 3 + U("1.415372e-9 /K^4") * T ** 4 - U("3.919169e-12 /K^5") * T ** 5 + U("5.410849e-15 /K^6") * T ** 6 - U("2.959797e-18 /K^7") * T ** 7 ) vth_v = ( 8 * U.boltzmann_constant * T / (pi * mtv * U.electron_mass) ) ** 0.5 ################################# 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"), "CB/vth": vth_c, "VB/vth": vth_v, # SRH energy level "SRH/energy_level": -Chi - Eg / 2, } ) return d