def d_rho_dDPsi(z, Psi): dn_nodes, dp_nodes = SchDiode.dn_carriers_dEf_theory(Psi, z) if SchDiode.Semiconductor.dop_type == 'n': dp_nodes = np.zeros_like(z) elif SchDiode.Semiconductor.dop_type == 'p': dn_nodes = np.zeros_like(z) d_carriers_nodes = dn_nodes - dp_nodes dN_dopants_nodes = np.zeros_like(z) for dopant in SchDiode.Semiconductor.dopants: dN_dopants_nodes += dopant.concentration(z) * ( dopant.charge_states[1][0] - dopant.charge_states[0][0]) * dopant.dF(z) dN_BI_nodes = np.zeros_like(z) for BI in SchDiode.Semiconductor.bonding_interfaces: dN_BI_nodes += smooth_dd(z - BI.depth, BI.smooth_dirac_epsilon) * BI.d_density_of_charge return (d_carriers_nodes - dN_dopants_nodes - dN_BI_nodes) * to_numeric(q ** 2) / Eps0Eps
def rho_z_Psi(z, Psi): rho = 0 if carriers_charge: if Psi != Psi_zero: n, p = self.n_carriers_theory(Psi, z) if self.Semiconductor.dop_type == 'n': p = 0 elif self.Semiconductor.dop_type == 'p': n = 0 rho += p - n for dopant in self.Semiconductor.dopants: Nd = dopant.concentration(z) rho += Nd * ( (dopant.charge_states[1][0] - dopant.charge_states[0][0]) * dopant.F(z) + dopant.charge_states[0][ 0]) for BI in self.Semiconductor.bonding_interfaces: rho += smooth_dd(z - BI.depth, BI.smooth_dirac_epsilon) * BI.density_of_charge return to_numeric(q) * rho
def d_rho_dDPsi(z, Psi): dn_nodes, dp_nodes = SchDiode.dn_carriers_dEf_theory(Psi, z) if SchDiode.Semiconductor.dop_type == 'n': dp_nodes = np.zeros_like(z) elif SchDiode.Semiconductor.dop_type == 'p': dn_nodes = np.zeros_like(z) d_carriers_nodes = dn_nodes - dp_nodes dN_dopants_nodes = np.zeros_like(z) for dopant in SchDiode.Semiconductor.dopants: dN_dopants_nodes += dopant.concentration(z) * ( dopant.charge_states[1][0] - dopant.charge_states[0][0]) * dopant.dF(z) dN_BI_nodes = np.zeros_like(z) for BI in SchDiode.Semiconductor.bonding_interfaces: dN_BI_nodes += smooth_dd( z - BI.depth, BI.smooth_dirac_epsilon) * BI.d_density_of_charge return (d_carriers_nodes - dN_dopants_nodes - dN_BI_nodes) * to_numeric(q**2) / Eps0Eps