def test_energies_are_order_unity(): """Tests that energies are approximately around 1. """ a = Material(1.0, 0.0, 1.0, 1.0, 1.0) b = Material(1.0, -0.5, 1.0, 1.0, 1.0) # Lower band edges. csnc1 = CoreShellParticle(a, b, 1.0, 1.0) # Type 2 CSNC. h/e structure. energies = csnc1.calculate_s1_energies() assert np.all(np.logical_and(1e-1 < energies, energies < 10))
def test_adaptive_energy_bracketing_for_high_energies(): """Tests that high energies are bracketed for extremely small CSNCs. """ a = Material(1.0, 0.0, 1.0, 1.0, 1.0) b = Material(1.0, -0.5, 1.0, 1.0, 1.0) # Lower band edges. csnc1 = CoreShellParticle(a, b, 0.1, 0.1) # Type 2 CSNC. h/e structure. energies = csnc1.calculate_s1_energies() # print(energies) assert np.isclose(energies[0], energies[1])
def test_wavenumbers_are_order_unity(): """Tests that wavenumbers are approximately around 1. """ a = Material(1.0, 0.0, 1.0, 1.0, 1.0) b = Material(1.0, -0.5, 1.0, 1.0, 1.0) # Lower band edges. csnc1 = CoreShellParticle(a, b, 1.0, 1.0) # Type 2 CSNC. h/e structure. wavenumbers = csnc1.calculate_wavenumbers() assert np.all( np.logical_and(1e-1 < abs(wavenumbers), abs(wavenumbers) < 10))
def test_thicker_core_requires_smaller_shell_for_localization_eh(): """Tests that a thicker core leads to carrier confinement in a thinner shell, in type-2 e/h CSNCs. """ a = Material(1.0, 0.0, 1.0, 1.0, 1.0) b = Material(1.0, -0.5, 1.0, 1.0, 1.0) # Lower band edges. csnc1 = CoreShellParticle(b, a, 1.0, 1.0) # Type 2 CSNC. e/h structure. csnc2 = CoreShellParticle(b, a, 1.1, 1.0) # Type 2 CSNC. e/h structure. csnc1_shellloc = csnc1.localization_hole_shell() csnc2_shellloc = csnc2.localization_hole_shell() assert csnc2_shellloc < csnc1_shellloc
def test_overlap_integrals_are_consistent(): a = Material(1.0, 0.0, 1.0, 1.0, 1.0) b = Material(1.0, -0.5, 1.0, 1.0, 1.0) # Lower band edges. csnc1 = CoreShellParticle(a, b, 1.0, 1.0) # Type 2 CSNC. h/e structure. assert np.isclose(csnc1.analytical_overlap_integral(), csnc1.numerical_overlap_integral())
def test_analytical_overlap_integral_is_at_or_below_one(): a = Material(1.0, 0.0, 1.0, 1.0, 1.0) b = Material(1.0, -0.5, 1.0, 1.0, 1.0) # Lower band edges. csnc1 = CoreShellParticle(a, b, 1.0, 1.0) # Type 2 CSNC. h/e structure. assert csnc1.analytical_overlap_integral() <= 1.0