def n2D(Vds, Vgs, p, EFs): ene0 = E0_2d_root(Vds, Vgs, EFs, p) n2dos = p.ems*const.electron_mass / \ (math.pi*const.hbar**2)*p.temp*const.Boltzmann beta = const.elementary_charge/(p.temp*const.Boltzmann) ns = (fdint.fdk(0, beta*(EFs-ene0))+fdint.fdk(0, beta*(EFs-ene0-Vds)))/2*n2dos return ns
def cylinder_seebeck(cp): '''seebeck coefficient (V/K)''' try: return (constant['k'] / constant['e']) * (2.0 * fdk(1, cp) / fdk(0, cp) - cp) except ValueError: return 0.
def fermi_fdint(nu): """ Fermi-Dirac integral of order 1/2 calculated using `fdint` package. """ F = fdk(k=0.5, phi=nu) F *= 2 / np.sqrt(np.pi) return F
def powerlaw_seebeck(cp, s): ''' returns the seebeck coeficient (V/K) Args: cp: (float/ndarray) reduced chemical potential, unitless s: (int) energy exponent restricted to integer/half-integer, unitless Returns: (float/ndarray) ''' if s == 0: # s=0 requires analytic simplification return constant['k'] / constant['e'] * (( (1. + np.exp(-cp)) * fdk(0, cp)) - cp) else: return constant['k'] / constant['e'] * (( (s + 1.) * fdk(s, cp) / s / fdk(s - 1, cp)) - cp)
def calculate_n_j(self, j, Ef): """ Calculates electron concentration in the `j`th sub-band [1/m^3] """ c = 1. / (np.pi**2 * self.R**2) * np.sqrt(2. * const.k * self.T * self.meG) / const.hbar eta = (float(Ef) - self.E_lns_CB[j]) / const.k / self.T n_j = c * fdk(-1 / 2, eta) self.n_js[j] = n_j return n_j
def fermi_dirac_integral(k, phi): if k == 0.5: gamma = np.sqrt(pi) / 2 elif k == 0: gamma = 1 elif k == -0.5: gamma = sqrt(pi) else: raise ValueError('k is not the correct value') fd = (1 / gamma) * fdk(k, phi) return fd
def calculate_p(self, Ef, T): """ Calculates total hole concentration [1/m^3] """ c = 1. / (np.pi**2 * self.R**2) * np.sqrt(2. * const.k * T * self.mat.mh_DOS) / const.hbar p_ = 0. Eg = self.mat.get_Eg(T) for E_ln in self.E_lns_VB: eta = -(float(Ef) + E_ln + Eg) / const.k / T p_ += c * fdk(-1 / 2, eta) return p_
def Ids_ballistic2d_0(Vds, Vgs, p, EFs): ene0 = E0_2d_root(Vds, Vgs, EFs, p) n2d = p.ems*const.electron_mass / \ (math.pi*const.hbar**2)*p.temp*const.Boltzmann beta = const.elementary_charge/(p.temp*const.Boltzmann) ns = (fdint.fdk(0, beta*(EFs-ene0))+fdint.fdk(0, beta*(EFs-ene0-Vds)))/2*n2d v0 = math.sqrt(2*p.temp*const.Boltzmann / (math.pi*p.ems*const.electron_mass)) v1 = fdint.fdk(0.5, beta*(EFs-ene0))*(2/math.sqrt(math.pi)) v2 = fdint.fdk(0, beta*(EFs-ene0)) vinj = v0*v1/v2 f1 = 1 - fdint.fdk(0.5, beta*(EFs-ene0-Vds))/fdint.fdk(0.5, beta*(EFs-ene0)) f2 = 1 + fdint.fdk(0, beta*(EFs-ene0-Vds))/fdint.fdk(0, beta*(EFs-ene0)) return const.elementary_charge*ns*vinj*f1/f2
def powerlaw_conductivity(cp, s, sigma_E_0): ''' returns the electrical conductivity (S/m) Args: cp: (float/ndarray) reduced chemical potential, unitless s: (int) energy exponent restricted to integer/half-integer, unitless sigma_E_0: (float) powerlaw prefactor, S/m Returns: (float/ndarray) ''' if s == 0: # s=0 requires analytic simplification return sigma_E_0 / (1. + np.exp(-cp)) else: return sigma_E_0 * s * fdk(s - 1, cp)
def seebeck_spb(eta, Lambda=0.5): return BOLTZMANN_CONST / ELECTRON_CHARGE * ( (2. + Lambda) * fdk(1. + Lambda, eta) / ((1. + Lambda) * fdk(Lambda, eta)) - eta) * 1e+6
def seebeck_eff_mass_from_carr(eta, n, T, Lambda): """ eta in kB*T units, n in cm-3, T in K returns mass in m0 units """ return (2 * np.pi**2 * abs(n) * 10 ** 6 / (fdk(0.5,eta))) ** (2. / 3)\ / (2 * ELECTRON_MASS * BOLTZMANN_CONST * T / (PLANCK_CONSTANT/2/np.pi) ** 2)
def cylinder_conductivity(cp, T, tau_0, l): '''electrical conductivity (S/m)''' return (constant['e']**2. * l / 2. / constant['pi']**2. / constant['hbar']**2. * constant['k'] * T * tau_0 * fdk(0, cp))
def cylinder_carriers(cp, T, mstar, l): '''carrier concentration (1/m3)''' return fdk(0, cp) * (l * mstar / 2. / constant['pi']**2. / constant['hbar']**2. * constant['k'] * T)
def sphere_conductivity(cp, T, tau_0, mstar): '''electrical conductivity (S/m)''' return (tau_0 * fdk(0, cp) * 8. * constant['pi'] * mstar**0.5 * constant['e']**2. * (2. * constant['k'] * T)**1.5 / 3. / constant['h']**3.)
def sphere_carriers(cp, T, mstar): '''carrier concentration (1/m3)''' return fdk( 0.5, cp) * (4. * constant['pi'] * (2. * mstar * constant['k'] * T / constant['h']**2.)**1.5)