Commit e001afef authored by Lucas Laplanche's avatar Lucas Laplanche
Browse files

maj

parent 2c5e8acc
......@@ -56,7 +56,7 @@ def al_doping(bypass_dbr=True):
def reflectivity(vcsel_only=False,
eam_only=False,
eam_only=True,
bypass_dbr=False,
start_wavelength=845e-9,
stop_wavelength=855e-9,
......@@ -88,7 +88,7 @@ def reflectivity(vcsel_only=False,
if plot:
plt.plot_reflectivity(wavelength, r)
else:
return
return r
def dbr_reflectivity(start_wavelength=700e-9,
......@@ -102,12 +102,7 @@ def dbr_reflectivity(start_wavelength=700e-9,
# wavelength in [m]
# wavelength must be a numpy array
for i in tqdm(range(len(wavelength))):
l_dbr_low_al = 850e-9 / ( 4 * op.algaas_refractive_index(0.15, 0., 850e-9) )
l_dbr_high_al = 850e-9 / ( 4 * op.algaas_refractive_index(0.9, 0., 850e-9) )
sl = st.structure_dbr(period=20,
grading_type = 'linear slope',
l_dbr_low_al = l_dbr_low_al,
l_dbr_high_al = l_dbr_high_al)
sl = st.structure_dbr(period=20, grading_type = 'linear slope')
sl = op.algaas_super_lattice_refractive_index(sl, electric_field, wavelength[i], lengyel=True)
n = sl['refractive_index'].to_numpy(dtype=np.complex128)
......@@ -151,12 +146,12 @@ def reflectivity_heatmap(bypass_dbr=True,
def electromagnetic_amplitude(bypass_dbr=False, electric_field=0., wavelength=850e-9):
sl = st.structure_eam_vcsel(bypass_dbr=bypass_dbr, vcsel_only=True, grading_type='linear slope', mqw_alloy_type='mean', l_eam_clad = 15e-9, l_vcsel_clad=15e-9)
sl = st.structure_eam_vcsel(bypass_dbr=bypass_dbr, vcsel_only=False, grading_type='linear slope', mqw_alloy_type='mean', l_eam_clad = 15e-9, l_vcsel_clad=8e-9)
sl = op.algaas_super_lattice_refractive_index(sl, electric_field, wavelength)
sl = pt.cut_in_equal_layers_thickness(sl, 5e-9)
em = op.em_amplitude_smm(sl, wavelength)
sl.insert(sl.shape[1], 'electromagnetic_amplitude', value=em)
plt.plot_refra_em(sl)
plt.plot_refra_em(sl, '- vcsel cladding = ' +str(8e-9))
def vcsel_electromagnetic_resonnance(electric_field=0.,
......@@ -214,15 +209,16 @@ def clad_coupling_electromagnetic_amplitude(bypass_dbr=False, electric_field=0.,
def animation_clad_coupling(bypass_dbr=False, electric_field=0., wavelength=850e-9):
cladding = np.linspace(1e-9, 50e-9, 20)
cladding = np.linspace(10e-9, 20e-9, 9)
for cl in cladding:
sl = st.structure_eam_vcsel(bypass_dbr=bypass_dbr, vcsel_only=True, grading_type='linear slope', mqw_alloy_type='mean', l_eam_clad=15e-9, amount_eam_qw=25, l_vcsel_clad=cl)
sl = op.algaas_super_lattice_refractive_index(sl, electric_field, wavelength)
sl = st.structure_eam_vcsel(bypass_dbr=bypass_dbr, vcsel_only=False, grading_type='linear slope', mqw_alloy_type='mean', l_eam_clad=cl, l_vcsel_clad=8.345e-9)
sl = op.algaas_super_lattice_refractive_index(sl, electric_field, wavelength, lengyel=False)
sl['refractive_index'] = sl['refractive_index'].apply(np.real)
sl = pt.cut_in_equal_layers_thickness(sl, 1e-8)
em = op.em_amplitude_smm(sl, wavelength)
sl.insert(sl.shape[1], 'electromagnetic_amplitude', value=em)
plt.plot_refra_em(sl)
plt.plot_refra_em(sl, str(cl))
def zandberg_electromagnetic_amplitude(electric_field=0., wavelength=1e-6):
......
......@@ -21,12 +21,17 @@ NGAAS = 3.642 # GaAs refractive index
NAL = 2.5702 # Al refractive index at 852.1nm
# distributed Bragg Reflectors constants @ 850nm
L_15_AL_DBR = 6.07310545767979e-08
L_90_AL_DBR = 6.995041869479308e-08
# conversion constants
J_TO_EV = 6.24e18 # [eV] amount of eV in 1J
EV_TO_J = 1./J_TO_EV # [J]
# qw GaAs
# QW GaAs
EG_GAAS = 1.424 # [eV]
ME_GAAS = 0.067*M0 # e- effective mass p.40 GaAs
MZHH_GAAS = 0.48*M0 # heavy hole effective mass p.298 GaAs
......
......@@ -138,6 +138,20 @@ def cut_sl_at_time(sl, time):
return sl_cut
def remove_slice_exclusive(sl, beginning_name, end_name, grading_type, period):
idx_1 = sl.index[sl.name == beginning_name][0]
idx_2 = sl.index[sl.name == end_name][0]
sl_cut = sl.truncate(after=idx_1)
if 'linear' in grading_type:
sl_cut = sl_cut.append(sl.truncate(before=idx_2 -int(period/2)), ignore_index=True)
else:
sl_cut = sl_cut.append(sl.truncate(before=idx_2), ignore_index=True)
return sl_cut
def add_depth_column(super_lattice):
......
......@@ -244,7 +244,7 @@ def plot_al_doping(sl):
fig.show()
def plot_refra_em(sl):
def plot_refra_em(sl, text_to_display=''):
# remove the substrate layer
sl = sl.drop(sl.shape[0] -1, axis=0)
......@@ -309,7 +309,7 @@ def plot_refra_em(sl):
# update layout properties
fig.update_layout(
title_text='refractive index and electromagnetic amplitude along z axis',
title_text='refractive index and electromagnetic amplitude along z axis ' +text_to_display,
width=1600,
)
......
......@@ -2,20 +2,22 @@ import numpy as np
import pandas as pd
from globals import L_15_AL_DBR, L_90_AL_DBR
import optic as op
import pandas_tools as pdt
def structure_eam_vcsel(vcsel_only = False,
eam_only = False,
eam_mqw_only = False,
#eam_only = False,
#eam_mqw_only = False,
air = True,
top_contact = True,
top_eam_dbr = True,
eam_mqw = True,
bypass_dbr = False,
bypass_dbr = True,
bot_eam_dbr = True,
middle_contact = True,
shared_dbr = True,
......@@ -69,30 +71,30 @@ def structure_eam_vcsel(vcsel_only = False,
vcsel_mqw = True
bot_vcsel_dbr = True
substrate = True
elif eam_only:
air = True
top_contact = True
top_eam_dbr = True
eam_mqw = True
bot_eam_dbr = True
middle_contact = True
shared_dbr = True
alox = False
vcsel_mqw = False
bot_vcsel_dbr = False
substrate = True
elif eam_mqw_only:
air = False
top_contact = False
top_eam_dbr = False
eam_mqw = True
bot_eam_dbr = False
middle_contact = False
shared_dbr = False
alox = False
vcsel_mqw = False
bot_vcsel_dbr = False
substrate = False
#elif eam_only:
# air = True
# top_contact = True
# top_eam_dbr = True
# eam_mqw = True
# bot_eam_dbr = True
# middle_contact = True
# shared_dbr = True
# alox = False
# vcsel_mqw = False
# bot_vcsel_dbr = False
# substrate = True
#elif eam_mqw_only:
# air = False
# top_contact = False
# top_eam_dbr = False
# eam_mqw = True
# bot_eam_dbr = False
# middle_contact = False
# shared_dbr = False
# alox = False
# vcsel_mqw = False
# bot_vcsel_dbr = False
# substrate = False
# super lattice
......@@ -370,8 +372,8 @@ def structure_dbr(period = 6,
next_structure_is_contact = False,
next_structure_is_dbr = False,
next_structure_is_alox = False,
l_dbr_low_al = 61.3e-9,
l_dbr_high_al = 69.1e-9,
l_dbr_low_al = L_15_AL_DBR,
l_dbr_high_al = L_90_AL_DBR,
v_ga6 = 100,
v_ga11 = 850,
v_al5 = 900,
......@@ -558,7 +560,7 @@ def structure_middle_contact(bypass_dbr = False,
grading_width = 20e-9,
grading_period = 10,
l_low_al = 181e-9,
l_high_al = 69.1e-9,
l_high_al = L_90_AL_DBR,
v_ga6 = 100,
v_ga11 = 850,
v_al5 = 900,
......@@ -612,9 +614,12 @@ def structure_middle_contact(bypass_dbr = False,
# normal contact
else:
if grading_type == 'linear':
if 'linear' in grading_type:
if vcsel_only:
sl = sl.append(linear_grading_high_to_low_al[9:19], ignore_index=True)
if 'digital' in grading_type:
sl = sl.append(linear_grading_high_to_low_al[grading_period -1 : 2*grading_period -1], ignore_index=True)
else:
sl = sl.append(linear_grading_high_to_low_al[int(grading_period/2) - 1 : grading_period - 1], ignore_index=True)
sl = sl.append(pd.DataFrame([['middle contact', l_low_al -grading_width, low_al, 5e18, 0., False, True, False, True]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12']),
ignore_index=True)
......@@ -625,7 +630,7 @@ def structure_middle_contact(bypass_dbr = False,
else:
sl = sl.append(pd.DataFrame([['middle contact', l_low_al, low_al, 5e18, 0., False, True, False, True]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12']),
ignore_index=True)
ignore_index=True)
previous_layer_is_dbr = False
......
......@@ -76,7 +76,7 @@ def eam_structures_description(document_folder=True):
def vcsel_eam_structures_description(document_folder=False):
# create the structures
vcsel_eam = st.structure_eam_vcsel()
vcsel_eam = st.structure_eam_vcsel(vcsel_only=True, bypass_dbr=False)
vcsel_eam_dbr_bypass = st.structure_eam_vcsel(bypass_dbr=True)
# structures list
......
Supports Markdown
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