Commit 7a1efef6 authored by Lucas Laplanche's avatar Lucas Laplanche
Browse files

ajout calcul indices à 550°C

parent 1640c206
......@@ -47,7 +47,7 @@ def reflectivity(bypass_dbr=True,
stop_wavelength=900e-9,
electric_field=0.,
n_points=100,
l_eam_clad=8e-9,
l_eam_clad=10e-9,
l_vcsel_clad=15e-9,
plot=True):
wavelength = np.linspace(start_wavelength, stop_wavelength, num=n_points)
......
......@@ -246,10 +246,6 @@ def reflectivity_heatmap(bypass_dbr=True,
v_ga11=850,
v_al5=900,
v_al12=150):
# refractive indices at 550°C
# loads al_array, wavelength_array, n_array (real part) and k_array (imaginary part)
refra_data_550 = np.load('data/550C_AlGaAs_refractive_indices/indices_arrays.npz')
# create the wavelength array
wavelength = np.linspace(start_wavelength, stop_wavelength, num=n_wavelength)
......@@ -284,11 +280,13 @@ def reflectivity_heatmap(bypass_dbr=True,
for i in tqdm(range(n_time)):
sl_i = pdt.cut_sl_at_time(sl, time[i])
sl_arrays_i = pdt.extract_arrays_from_super_lattice(sl_i)
# wavelength in [m]
# wavelength must be a numpy array
for j in range(len(wavelength)):
n, d = op.algaas_super_lattice_refractive_index_opti(sl_arrays_i, wavelength[j], refra_data_550, temperature=550+273.15)
sl_j = op.algaas_super_lattice_refractive_index(sl_i, electric_field, wavelength[j], temperature=550+273.15, lengyel=False, only_real=True)
n = sl_j['refractive_index'].to_numpy(dtype=np.complex128)
d = sl_j['thickness'].to_numpy(dtype=np.complex128)
r[j, i] = tmm.reflection(n, d, wavelength[j])
......
......@@ -27,6 +27,11 @@ NAL = 2.5702 # Al refractive index at 852.1nm
NALOX = 1.6 # oxided Al refractive index
# refractive indices at 550°C
# loads al_array, wavelength_array, n_array (real part) and k_array (imaginary part)
REFRA_DATA_550 = np.load('data/550C_AlGaAs_refractive_indices/indices_arrays.npz')
# distributed Bragg Reflectors constants @ 850nm
L_15_AL_DBR = 6.07310545767979e-08
L_90_AL_DBR = 6.995041869479308e-08
......
import numpy as np
from globals import C, HEV, NALOX, N0, T
from globals import C, HEV, NALOX, N0, REFRA_DATA_550, T
from sqw_lengyel_absorption import gaas_sqw_absorption_at_wavelength
from time import time as tm
def algaas_super_lattice_refractive_index_opti(super_lattice_arrays, wavelength, refra_data_550, temperature=T):
[name_array, al_array, thickness_array, r_array] = super_lattice_arrays
start = tm()
for i in range(al_array.shape[0]):
name = name_array[i]
al = al_array[i]
if 'air' in name:
r_array[i] = N0
# layer is NOT a quantum well
else:
# refractive index value
if temperature == 550 + 273.15:
n = almuneau_complex_550C_algaas_refractive_index(refra_data_550, al, wavelength, temperature=temperature)
else:
n = afromovitz_varshni_real_algaas_refractive_index(al, wavelength, temperature=temperature)
r_array[i] = n
print('s = ', tm() - start)
return r_array, thickness_array
def algaas_super_lattice_refractive_index(super_lattice, electric_field, wavelength, temperature=T, lengyel=True, only_real=False):
if only_real:
lengyel = False
......@@ -250,13 +217,24 @@ def afromovitz_varshni_real_algaas_refractive_index(al, wavelength, temperature=
return n
def almuneau_complex_550C_algaas_refractive_index(refra_data_550, al, wavelength, temperature=550+273.15):
def almuneau_complex_550C_algaas_refractive_index(al, wavelength, temperature=550+273.15):
if temperature != 550+273.15 :
print('error : temperature out of range')
n = barycenter(al, refra_data_550['al_array'], wavelength, refra_data_550['wavelength_array'], refra_data_550['n_array'])
k = barycenter(al, refra_data_550['al_array'], wavelength, refra_data_550['wavelength_array'], refra_data_550['k_array'])
if 'refra_data_550' in globals() :
pass
else :
global refra_data_550
refra_data_550 = REFRA_DATA_550
idx_al = find_nearest_index(al, refra_data_550['al_array'])
idx_wavelength = find_nearest_index(wavelength, refra_data_550['wavelength_array'])
n = refra_data_550['n_array'][idx_wavelength, idx_al]
k = refra_data_550['k_array'][idx_wavelength, idx_al]
return n + 1j * k
......@@ -328,37 +306,9 @@ def confinement_barrier_mean_al_content_array(name_array, al_array, thickness_ar
return al
def find_two_nearest_indices(value, array):
def find_nearest_index(value, array):
# array must be a numpy array
idx0 = (np.abs(array -value)).argmin()
if idx0 == 0 :
idx1 = 1
elif idx0 == (len(array) -1) :
idx1 = len(array) -2
elif np.abs(array[idx0 +1] -value) < np.abs(array[idx0 -1] -value) :
idx1 = idx0 +1
else :
idx1 = idx0 -1
return idx0, idx1
def barycenter(al, al_array, wavelength, wavelength_array, value_array):
al_i0, al_i1 = find_two_nearest_indices(al, al_array)
wave_i0, wave_i1 = find_two_nearest_indices(wavelength, wavelength_array)
coeff_al_i0 = np.abs(al - al_array[al_i1]) / np.abs(al_array[al_i0] - al_array[al_i1])
coeff_al_i1 = np.abs(al - al_array[al_i0]) / np.abs(al_array[al_i0] - al_array[al_i1])
coeff_wave_i0 = np.abs(wavelength - wavelength_array[wave_i1]) / np.abs(wavelength_array[wave_i0] - wavelength_array[wave_i1])
coeff_wave_i1 = np.abs(wavelength - wavelength_array[wave_i0]) / np.abs(wavelength_array[wave_i0] - wavelength_array[wave_i1])
value = value_array[wave_i0, al_i0] * coeff_al_i0 * coeff_wave_i0
value += value_array[wave_i0, al_i1] * coeff_al_i1 * coeff_wave_i0
value += value_array[wave_i1, al_i0] * coeff_al_i0 * coeff_wave_i1
value += value_array[wave_i1, al_i1] * coeff_al_i1 * coeff_wave_i1
value /= 4
return value
return idx0
......@@ -12,10 +12,7 @@ OBJECTIFS
ACCOMPLI
Faire les calculs VCSEL EAM avec oxydation eam.
Modifier la fiche process pour rajouter les étapes d'oxidation.
Réinstaller crystal XE et faire les recettes EAM-VCSELs.
Vérifier quelles cellules sont ouvertes lors de l'éptiaxie d'un puit, et corriger le code en conséquence.
Déterminer quels masques doivent etre en positif ou negatif.
ECHOUÉ
......
......@@ -135,7 +135,7 @@ def structure_eam_vcsel(vcsel_only = False,
# aluminium oxide aperture
if eam_alox:
sl.drop(sl.tail(1).index, inplace=True)
alox_layers = structure_alox(name='eam mesa', end_thickness = 32e-9)
alox_layers = structure_alox(name='eam mesa')
sl = sl.append(alox_layers, ignore_index=True)
......
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