Commit 4d3ee0fa authored by Lucas Laplanche's avatar Lucas Laplanche
Browse files

rien qui fonctionne comme d'hab

parent 75893edf
...@@ -46,15 +46,16 @@ def zandberg_electromagnetic_amplitude(electric_field=0., wavelength=1e-6): ...@@ -46,15 +46,16 @@ def zandberg_electromagnetic_amplitude(electric_field=0., wavelength=1e-6):
sl = st.structure_zandbergen() sl = st.structure_zandbergen()
sl = op.algaas_super_lattice_refractive_index(sl, electric_field, wavelength) sl = op.algaas_super_lattice_refractive_index(sl, electric_field, wavelength)
sl = pt.cut_in_equal_layers_thickness(sl, 1e-9) sl = pt.cut_in_equal_layers_thickness(sl, 1e-9)
em = op.em_amplitude_tmm(sl, wavelength) em = op.em_amplitude_smm(sl, wavelength)
sl['electromagnetic_amplitude'] = em.tolist() sl.insert(sl.shape[1], 'electromagnetic_amplitude', value=em)
plt.plot_refra_em(sl) plt.plot_refra_em(sl)
def mqw_psi(lz=0.01e-9, electric_field=0., wavelength=850e-9): def mqw_psi(lz=0.01e-9, electric_field=0., wavelength=850e-9):
sl = st.structure_eam(air=False, top_dbr=False, bot_dbr=False, shared_dbr=False, contact=False, substrate=False) sl = st.structure_eam(air=False, top_dbr=False, bot_dbr=False, shared_dbr=False, contact=False, substrate=False, amount_qw=5)
sl = pt.cut_in_equal_layers_thickness(sl, 1e-11)
v_e, v_hh, eig_e, psi_e, eig_hh, psi_hh = qt.solve_schrodinger(sl) v_e, v_hh, eig_e, psi_e, eig_hh, psi_hh = qt.solve_schrodinger(sl)
np.savez_compressed('v_e', v_e) np.savez_compressed('v_e', v_e)
np.savez_compressed('v_hh', v_hh) np.savez_compressed('v_hh', v_hh)
...@@ -62,7 +63,7 @@ def mqw_psi(lz=0.01e-9, electric_field=0., wavelength=850e-9): ...@@ -62,7 +63,7 @@ def mqw_psi(lz=0.01e-9, electric_field=0., wavelength=850e-9):
np.savez_compressed('psi_e', psi_e[0, :]) np.savez_compressed('psi_e', psi_e[0, :])
np.savez_compressed('eig_hh', eig_hh) np.savez_compressed('eig_hh', eig_hh)
np.savez_compressed('psi_hh', psi_hh[0, :]) np.savez_compressed('psi_hh', psi_hh[0, :])
# plt.plot_psi(lz, v_e, psi_e) plt.plot_psie()
def benchmark_refractive_index(): def benchmark_refractive_index():
......
...@@ -411,7 +411,7 @@ def scattering_matrix_layer(vi, vg, xi): ...@@ -411,7 +411,7 @@ def scattering_matrix_layer(vi, vg, xi):
return s return s
def redheffer_star_product(sa, sb, e): def redheffer_star_product(sa, sb):
ba = np.matmul(sb[0, 0], sa[1, 1]) ba = np.matmul(sb[0, 0], sa[1, 1])
ab = np.matmul(sa[1, 1], sb[0, 0]) ab = np.matmul(sa[1, 1], sb[0, 0])
...@@ -426,11 +426,8 @@ def redheffer_star_product(sa, sb, e): ...@@ -426,11 +426,8 @@ def redheffer_star_product(sa, sb, e):
sb[1, 1] +np.matmul(np.matmul(f, sa[1, 1]), sb[0, 1]) sb[1, 1] +np.matmul(np.matmul(f, sa[1, 1]), sb[0, 1])
]]) ]])
amp = np.abs(sab[0, 0][0, 0] +sab[1, 1][0, 0])**2
e = np.append(e, amp)
return sab
return sab, e
def em_amplitude_smm(super_lattice, wavelength): def em_amplitude_smm(super_lattice, wavelength):
...@@ -475,7 +472,13 @@ def em_amplitude_smm(super_lattice, wavelength): ...@@ -475,7 +472,13 @@ def em_amplitude_smm(super_lattice, wavelength):
s_i = scattering_matrix_layer(v_i, v_global, x_i) s_i = scattering_matrix_layer(v_i, v_global, x_i)
# update global scattering matrix # update global scattering matrix
s_global, e = redheffer_star_product(s_global, s_i, e) s_global = redheffer_star_product(s_global, s_i)
# calculate transmitted and reflected fields
e_ref = np.matmul( s_global[0, 0], np.array([1., 0.]) )
e_trm = np.matmul( s_global[1, 0], np.array([1., 0.]) )
amplitude = np.abs(e_ref[0] +e_trm[0])**2
e = np.append(e, amplitude)
# compute reflection side scattering matrix # compute reflection side scattering matrix
......
...@@ -40,8 +40,8 @@ def hamiltonian(sl, particle): ...@@ -40,8 +40,8 @@ def hamiltonian(sl, particle):
m = mass(al) m = mass(al)
a = - HREV**2 /(2 * m * lz**2) a = -HREV**2 /(2 * m * lz**2)
b = HREV**2 /(m * lz**2) -sl.at[i, barrier] b = HREV**2 /(m * lz**2) +sl.at[i, barrier]
c = a c = a
h[i +1 , i ] = a h[i +1 , i ] = a
...@@ -63,12 +63,16 @@ def algaas_potential_barrier(al): ...@@ -63,12 +63,16 @@ def algaas_potential_barrier(al):
valence_band_offset = 0.33 # G.Ji, D.Huang, U.K.Reddy, H.Unlu, T.S.Henderson, and H.Morko9 1987 valence_band_offset = 0.33 # G.Ji, D.Huang, U.K.Reddy, H.Unlu, T.S.Henderson, and H.Morko9 1987
conduction_band_offset = 1. -valence_band_offset conduction_band_offset = 1. -valence_band_offset
eg_al_x = EG_GAAS +1.087 * al +0.438 * al**2 # http://www.ioffe.ru/SVA/NSM/Semicond/AlGaAs/bandstr.html
delta_eg = eg_al_x -EG_GAAS if al<0.45:
delta_eg = 1.247*al
else:
delta_eg = 1.9 -EG_GAAS +0.125*al +0.143*al**2
v_hh = valence_band_offset * delta_eg v_hh = valence_band_offset * delta_eg
v_e = conduction_band_offset * delta_eg v_e = conduction_band_offset * delta_eg
return v_e, v_hh return v_e, v_hh
...@@ -92,16 +96,6 @@ def algaas_super_lattice_potential_barrier(sl): ...@@ -92,16 +96,6 @@ def algaas_super_lattice_potential_barrier(sl):
def last_bound_states_index(v, e):
limit = np.max(v)
for i in range(e.shape[0]):
if e[i]>limit:
return i -1
def solve_schrodinger(sl): def solve_schrodinger(sl):
# compute the potential barrier array # compute the potential barrier array
sl = algaas_super_lattice_potential_barrier(sl) sl = algaas_super_lattice_potential_barrier(sl)
...@@ -111,6 +105,7 @@ def solve_schrodinger(sl): ...@@ -111,6 +105,7 @@ def solve_schrodinger(sl):
# solve the schrodinger equation # solve the schrodinger equation
eig_e, psi_e = np.linalg.eig(h_e) eig_e, psi_e = np.linalg.eig(h_e)
# delete the hamiltonian in order to free RAM # delete the hamiltonian in order to free RAM
np.savez_compressed('h_e', h_e)
del h_e del h_e
# compute the hamiltonian for heavy holes # compute the hamiltonian for heavy holes
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment