Commit 09bc7e98 authored by Lucas Laplanche's avatar Lucas Laplanche
Browse files

ajout calcul indices à 550°C

parent 58a40d63
This diff is collapsed.
This diff is collapsed.
......@@ -12,6 +12,12 @@ def algaas_super_lattice_refractive_index(super_lattice, electric_field, wavelen
lengyel = False
if temperature == 550 :
refractive_index_function = almuneau_complex_550C_algaas_refractive_index
else :
refractive_index_function = afromovitz_varshni_real_algaas_refractive_index
for i in range(len(super_lattice)):
name = super_lattice.at[i, 'name']
al = super_lattice.at[i, 'al']
......@@ -32,7 +38,7 @@ def algaas_super_lattice_refractive_index(super_lattice, electric_field, wavelen
# if refractive index has never been calculated
if calculated_qw_layers.empty:
# refractive index value
n = afromovitz_varshni_real_algaas_refractive_index(al, wavelength, temperature=temperature)
n = refractive_index_function(al, wavelength, temperature=temperature)
# confinement barrier aluminium content
al = confinement_barrier_mean_al_content(super_lattice, i) # [1]
......@@ -64,7 +70,7 @@ def algaas_super_lattice_refractive_index(super_lattice, electric_field, wavelen
# layer is NOT a quantum well
else:
# refractive index value
n = afromovitz_varshni_real_algaas_refractive_index(al, wavelength, temperature=temperature)
n = refractive_index_function(al, wavelength, temperature=temperature)
if only_real:
super_lattice.at[i, 'refractive_index'] = np.real(n)
......@@ -171,6 +177,10 @@ def afromovitz_simplified_real_algaas_refractive_index(al, wavelength):
def afromovitz_varshni_real_algaas_refractive_index(al, wavelength, temperature=T):
if temperature > 100. or temperature < 0. :
print('error : temperature out of range')
t_c = temperature -273.15
e = HEV*C/wavelength
......@@ -206,6 +216,21 @@ def afromovitz_varshni_real_algaas_refractive_index(al, wavelength, temperature=
return n
def almuneau_complex_550C_algaas_refractive_index(al, wavelength, temperature=550):
if temperature != 550 :
print('error : temperature out of range')
# loads al_array, wavelength_array, n_array (real part) and k_array (imaginary part)
data = np.load('data/550C_AlGaAs_refractive_indices/indices_arrays')
n = barycenter(al, data['al_array'], wavelength, data['wavelength_array'], data['n_array'])
k = barycenter(al, data['al_array'], wavelength, data['wavelength_array'], data['k_array'])
return n + 1j * k
def ioffe_algaas_permittivity(al, high_frequency=True):
if high_frequency:
mu = 10.89 - 2.73 * al
......@@ -234,3 +259,39 @@ def confinement_barrier_mean_al_content(super_lattice, i):
return al
def find_two_nearest_indices(value, array):
# array must be a numpy array
idx0 = (np.abs(array -value)).idxmin()
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[al_i0, wave_i0] * coeff_al_i0 * coeff_wave_i0
value += value_array[al_i1, wave_i0] * coeff_al_i1 * coeff_wave_i0
value += value_array[al_i0, wave_i1] * coeff_al_i0 * coeff_wave_i1
value += value_array[al_i1, wave_i1] * coeff_al_i1 * coeff_wave_i1
value /= 4
return value
OBJECTIFS
Faire la structure en python. (reste les claddings du vcsel)
Calculer pour plusieurs épaisseurs de cladding ( cladding du vcsel? dj7?) l'amplitude du champ électromagnétique et comparer avec la publication de Krassimir.
Présenter à Ghuillem et Christophe le résultat.
Nettoyer le code de la structure python
Traiter les courbes mesurées de la refléctivité temporelle.
Les comparer aux calculs théoriques.
Planifier les épitaxies des deux vcsels eam, et du substrat nid pour les tlms.
Faire l'épitaxie.
Faire la présentation pour la réunion.
Faire le fit du FTIR.
Refaire le FTIR.
Vérifier quelles cellules sont ouvertes lors de l'éptiaxie d'un puit, et corriger le code en conséquence.
ACCOMPLI
Alliages digitaux dynamiques.
Calculer la réflectivité temporelle des deux structures totales.
Ajout indices à 550°C.
ECHOUÉ
FTIR.
QUESTIONS
Je comprends pas la MTF.
PRESENTATION
Rappel des faits.
Matrices de diffusions.
Reflectivités temporelles.
FTIR EAM.
AFM EAM.
Caractérisations de l'AC450CT.
Méthode accordage vcsel eam.
Comparaison FTIR calculs en fonction vitesses croissances.
import super_lattice_structure as sls
def eam_alox():
return sls.structure_eam_vcsel()
\ No newline at end of file
......@@ -15,12 +15,13 @@ def structure_eam_vcsel(vcsel_only = False,
air = True,
top_contact = True,
top_eam_dbr = True,
eam_alox = False,
eam_mqw = True,
bypass_dbr = True,
bot_eam_dbr = True,
middle_contact = True,
shared_dbr = True,
alox = True,
vcsel_alox = True,
vcsel_mqw = True,
bot_vcsel_dbr = True,
substrate = True,
......@@ -61,12 +62,13 @@ def structure_eam_vcsel(vcsel_only = False,
air = True
top_contact = False
top_eam_dbr = False
eam_alox = False
eam_mqw = False
bypass_dbr = False
bot_eam_dbr = False
middle_contact = True
shared_dbr = True
alox = True
vcsel_alox = True
vcsel_mqw = True
bot_vcsel_dbr = True
substrate = True
......@@ -74,11 +76,12 @@ def structure_eam_vcsel(vcsel_only = False,
air = True
top_contact = True
top_eam_dbr = True
eam_alox = False
eam_mqw = True
bot_eam_dbr = True
middle_contact = True
shared_dbr = True
alox = False
vcsel_alox = False
vcsel_mqw = False
bot_vcsel_dbr = False
substrate = True
......@@ -86,11 +89,12 @@ def structure_eam_vcsel(vcsel_only = False,
air = False
top_contact = False
top_eam_dbr = False
eam_alox = False
eam_mqw = True
bot_eam_dbr = False
middle_contact = False
shared_dbr = False
alox = False
vcsel_alox = False
vcsel_mqw = False
bot_vcsel_dbr = False
substrate = False
......@@ -129,6 +133,12 @@ def structure_eam_vcsel(vcsel_only = False,
sl = sl.append(dbr, ignore_index=True)
# aluminium oxide aperture
if eam_alox:
alox_layers = structure_alox()
sl = sl.append(alox_layers, ignore_index=True)
# eam mqw
if eam_mqw:
mqw = structure_mqw(name = 'eam',
......@@ -208,7 +218,7 @@ def structure_eam_vcsel(vcsel_only = False,
# aluminium oxide aperture
if alox:
if vcsel_alox:
alox_layers = structure_alox()
sl = sl.append(alox_layers, ignore_index=True)
......
......@@ -92,7 +92,7 @@ def vcsel_eam_structures_description(document_folder=False):
if document_folder:
writer = pd.ExcelWriter('Z:\\Documents\\' +'vcsel_eam_structures_layers.xlsx', engine='xlsxwriter')
else:
writer = pd.ExcelWriter('vcsel_eam_structures_layers.xlsx', engine='xlsxwriter')
writer = pd.ExcelWriter('data/vcsel_eam_structures_layers.xlsx', engine='xlsxwriter')
# get the xlsxwriter workbook objects
#workbook = writer.book
......
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