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

ajout alliages digitaux dynamiques

parent 3a9fd56f
......@@ -72,6 +72,15 @@ def electromagnetic_amplitude(bypass_dbr=True, electric_field=0., wavelength=850
plt.plot_refra_em(sl)
def cladding_electromagnetic_amplitude(bypass_dbr=True, electric_field=0., wavelength=850e-9):
sl = st.structure_eam_vcsel(bypass_dbr=bypass_dbr)
sl = op.algaas_super_lattice_refractive_index(sl, electric_field, wavelength)
sl = pt.cut_in_equal_layers_thickness(sl, 1e-9)
em = op.em_amplitude_smm(sl, wavelength)
sl.insert(sl.shape[1], 'electromagnetic_amplitude', value=em)
plt.plot_refra_em(sl)
def zandberg_electromagnetic_amplitude(electric_field=0., wavelength=1e-6):
sl = st.structure_zandbergen()
sl = op.algaas_super_lattice_refractive_index(sl, electric_field, wavelength)
......
......@@ -8,6 +8,13 @@ OBJECTIFS
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.
QUESTIONS
......@@ -15,7 +22,12 @@ QUESTIONS
Si oui alors modifier l'épaisseur des puits et des barrières de confinement n'a pas d'influence.
Je remarque que Krassimir et Ludovic on mis un grading autour de la cavité du vcsel, ne devrais-je pas faire de même avec l'EAM?
Est-ce que c'est ok si je remplace le grading du vcsel par mon grading de 90nm? (90 nm de 0% à 100%)?
Il y a aussi en petit blip autour de la cavité vcsel grading des figures de Krassimir... ?
La couche AlOx a soit-disant 98% d'aluminium, comment la fabrique-t-on? Dois-je considérer dans les calculs qu'elle fait 90%, 98%, 100%?
Je n'ai pas le même vcsel que Ludovic, est-ce que je rajoute un cladding ou je fais comme lui sachant que je ne connais pas ses alliages digitaux.
Au vu des ambiguïtés de la différence entre le calcul de Krassimir et ma structure, peut être étalonner le cladding avec le calcul amplitue du champ electromagnétique.
Ne vaudrait il pas mieux fixer le cladding du modulateur et modifier celui du vcsel pour rester à la FP de 850nm?
Je comprends pas la MTF.
PRESENTATION
......@@ -26,4 +38,5 @@ PRESENTATION
AFM EAM.
Caractérisations de l'AC450CT.
Comparaison FTIR calculs en fonction vitesses croissances.
TLM si terminées.
import numpy as np
import pandas as pd
......@@ -15,11 +16,10 @@ def structure_eam(air = True,
contact = True,
substrate = True,
amount_qw = 25,
eam_mean_al = 0.22,
l_qw = 8.27e-9,
l_cb_low_al = 2.2e-9,
l_cb_high_al = 0.3e-9,
l_clad_low_al = 2.2e-9,
l_clad_high_al = 0.3e-9,
l_cb = 10.3e-9,
l_clad = 2.8e-9,
top_dbr_period = 6,
bot_dbr_period = 8,
shared_dbr_period = 12,
......@@ -71,12 +71,10 @@ def structure_eam(air = True,
# mqw
if mqw:
mqw = structure_mqw(amount_qw = amount_qw,
mean_al = eam_mean_al,
l_qw = l_qw,
l_cb_low_al = l_cb_low_al,
l_cb_high_al = l_cb_high_al,
l_clad_low_al = l_clad_low_al,
l_clad_high_al = l_clad_high_al,
bypass_dbr = bypass_dbr,
l_cb = l_cb,
l_clad = l_clad,
v_ga6 = v_ga6,
v_ga11 = v_ga11,
v_al12 = v_al12)
......@@ -156,30 +154,38 @@ def structure_eam(air = True,
def structure_eam_vcsel(air = True,
eam_mqw = True,
vcsel_mqw = True,
contact = True,
top_eam_dbr = True,
eam_mqw = True,
bypass_dbr = False,
bot_eam_dbr = True,
shared_dbr = True,
bot_vcsel_dbr = True,
bypass_dbr = False,
contact = True,
alox = True,
vcsel_mqw = True,
bot_vcsel_dbr = True,
substrate = True,
amount_eam_qw = 25,
amount_vcsel_qw = 2,
l_qw = 8.27e-9,
l_cb_low_al = 2.2e-9,
l_cb_high_al = 0.3e-9,
l_clad_low_al = 2.2e-9,
l_clad_high_al = 0.3e-9,
eam_mean_al = 0.22,
l_eam_qw = 8.27e-9,
l_eam_cb = 10.3e-9,
l_eam_clad = 2.8e-9,
amount_vcsel_qw = 3,
vcsel_mean_al = 0.3,
l_vcsel_qw = 8.5e-9,
l_vcsel_cb = 10e-9,
l_vcsel_clad = 5e-9,
top_eam_dbr_period = 6,
bot_eam_dbr_period = 8,
shared_dbr_period = 12,
bot_vcsel_period = 35,
grading_type = 'linear',
grading_width = 20e-9,
grading_period = 10,
v_ga6 = 100,
v_ga11 = 850,
v_al5 = 900,
......@@ -225,12 +231,10 @@ def structure_eam_vcsel(air = True,
# eam mqw
if eam_mqw:
mqw = structure_mqw(amount_qw = amount_eam_qw,
l_qw = l_qw,
l_cb_low_al = l_cb_low_al,
l_cb_high_al = l_cb_high_al,
l_clad_low_al = l_clad_low_al,
l_clad_high_al = l_clad_high_al,
bypass_dbr = bypass_dbr,
mean_al = eam_mean_al,
l_qw = l_eam_qw,
l_cb = l_eam_cb,
l_clad = l_eam_clad,
v_ga6 = v_ga6,
v_ga11 = v_ga11,
v_al12 = v_al12)
......@@ -313,16 +317,14 @@ def structure_eam_vcsel(air = True,
v_ga11=v_ga11,
v_al5=v_al5)
linear_grading_high_to_low_al = linear_grading_low_to_high_al[::-1].copy()
mqw = structure_mqw(amount_qw=amount_vcsel_qw,
vcsel=True,
l_qw=l_qw,
l_cb_low_al=l_cb_low_al,
l_cb_high_al=l_cb_high_al,
l_clad_low_al=l_clad_low_al,
l_clad_high_al=l_clad_high_al,
v_ga6=v_ga6,
v_ga11=v_ga11,
v_al12=v_al12)
mqw = structure_mqw(amount_qw = amount_vcsel_qw,
mean_al = vcsel_mean_al,
l_qw = l_vcsel_qw,
l_cb = l_vcsel_cb,
l_clad = l_vcsel_clad,
v_ga6 = v_ga6,
v_ga11 = v_ga11,
v_al12 = v_al12)
sl = sl.append(linear_grading_high_to_low_al, ignore_index=True)
sl = sl.append(mqw, ignore_index=True)
sl = sl.append(linear_grading_low_to_high_al, ignore_index=True)
......@@ -356,14 +358,11 @@ def structure_eam_vcsel(air = True,
def structure_mqw(amount_qw = 25,
bypass_dbr = True,
vcsel=False,
l_qw = 8.27e-9,
l_cb_low_al = 2.2e-9,
l_cb_high_al = 0.3e-9,
l_clad_low_al = 2.2e-9,
l_clad_high_al = 0.3e-9,
def structure_mqw(amount_qw = 3,
mean_al = 0.3,
l_clad = 5e-9,
l_cb = 10e-9,
l_qw = 8.5e-9,
v_ga6 = 100,
v_ga11 = 850,
v_al12 = 150):
......@@ -373,57 +372,29 @@ def structure_mqw(amount_qw = 25,
# super lattice
sl = pd.DataFrame(columns = ['name', 'thickness', 'al', 'na', 'nd', 'refractive_index', 'ga6', 'ga11', 'al5', 'al12'])
clad = pd.DataFrame(columns = ['name', 'thickness', 'al', 'na', 'nd', 'refractive_index', 'ga6', 'ga11', 'al5', 'al12'])
cb = pd.DataFrame(columns = ['name', 'thickness', 'al', 'na', 'nd', 'refractive_index', 'ga6', 'ga11', 'al5', 'al12'])
# structure properties
if vcsel:
if bypass_dbr:
amount_clad = 1
else:
amount_clad = 1
else:
if bypass_dbr:
amount_clad = 1
else:
amount_clad = 1
# layers definitions
# cladding
clad = structure_standard_digital_alloy_15_60_hlh(l_clad,
mean_al=mean_al,
layer_name='cladding',
v_ga6=v_ga6,
v_ga11=v_ga11,
v_al12=v_al12)
# confinement barrier
cb = structure_standard_digital_alloy_15_60_hlh(l_cb,
mean_al=mean_al,
layer_name='confinement barrier',
v_ga6=v_ga6,
v_ga11=v_ga11,
v_al12=v_al12)
# quantum well
l_qw = true_epitaxy_thickness(l_qw, v_ga6, ga6=True)
l_cb_low_al = true_epitaxy_thickness(l_cb_low_al, v_ga11 +v_al12, ga11=True, al12=True)
l_cb_high_al = true_epitaxy_thickness(l_cb_high_al, v_ga6 +v_al12, ga6=True, al12=True)
l_clad_low_al = true_epitaxy_thickness(l_clad_low_al, v_ga11 +v_al12, ga11=True, al12=True)
l_clad_high_al = true_epitaxy_thickness(l_clad_high_al, v_ga6 +v_al12, ga6=True, al12=True)
low_al = v_al12/(v_al12 +v_ga11) # [1] 15% Al si tout va bien
high_al = v_al12/(v_al12 +v_ga6) # [1] 60% Al si tout va bien
# layers definition
quantum_well = pd.DataFrame([['quantum well', l_qw, 0., 0., 0., True, False, False, False]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12'])
clad_low = pd.DataFrame([['cladding low Al ~ 15%', l_clad_low_al, low_al, 0., 0., False, True, False, True]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12'])
clad_high = pd.DataFrame([['cladding high Al ~ 60%', l_clad_high_al, high_al, 0., 0., True, False, False, True]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12'])
cb_low = pd.DataFrame([['confinement barrier low Al ~ 15%', l_cb_low_al, low_al, 0., 0., False, True, False, True]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12'])
cb_high = pd.DataFrame([['confinement barrier high Al ~ 60%', l_cb_high_al, high_al, 0., 0., True, False, False, True]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12'])
clad = clad.append(clad_high, ignore_index=True)
for i in range(amount_clad):
clad = clad.append(clad_low, ignore_index=True)
clad = clad.append(clad_high, ignore_index=True)
cb = cb.append(cb_high, ignore_index = True)
for i in range(4):
cb = cb.append(cb_low, ignore_index = True)
cb = cb.append(cb_high, ignore_index = True)
# super lattice
# cladding
sl = sl.append(clad, ignore_index = True)
......@@ -739,6 +710,70 @@ def structure_alox(period = 10,
return sl
def structure_standard_digital_alloy_15_60_hlh(total_thickness,
mean_al = 0.5,
na = 0.,
nd = 0.,
layer_name = 'digital alloy',
v_ga6=100,
v_ga11=850,
v_al12=150):
# for digital alloy where mean al content is within the range of 15% to 60%
# start and end with high al content layers
# width is in [m]
# al contents are unitary [1]
# dopings are in [at/cm3]
# speeds are in [nm/h]
# super lattice
sl = pd.DataFrame(columns = ['name', 'thickness', 'al', 'na', 'nd', 'refractive_index', 'ga6', 'ga11', 'al5', 'al12'])
# name parameters
if na > nd:
doping_type = 'P'
elif nd > na:
doping_type = 'N'
else:
doping_type = '?'
layer_name = layer_name +' ' +doping_type +' '
# physical parameters
low_al = v_al12/(v_al12 +v_ga11) # [1] 15% Al si tout va bien
high_al = v_al12/(v_al12 +v_ga6) # [1] 60% Al si tout va bien
low_al_thickness_coeff = (high_al - mean_al) / (high_al - low_al) # [1]
high_al_thickness_coeff = 1. - low_al_thickness_coeff # [1]
period = optimized_period_amount(total_thickness, low_al_thickness_coeff, high_al_thickness_coeff)
low_al_thickness = total_thickness * low_al_thickness_coeff / period # [m]
high_al_thickness = total_thickness * high_al_thickness_coeff / (period +1) # [m]
l_low_al = true_epitaxy_thickness(low_al_thickness, v_ga11 +v_al12, ga11=True, al12=True)
l_high_al = true_epitaxy_thickness(high_al_thickness, v_ga6 +v_al12, ga6=True, al12=True)
# digital alloy
for i in range(period):
sl = sl.append(pd.DataFrame([[layer_name +' ~60% Al', l_high_al, high_al, na, nd, True, False, False, True]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12']),
ignore_index=True)
sl = sl.append(pd.DataFrame([[layer_name +' ~15% Al', l_low_al, low_al, na, nd, False, True, False, True]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12']),
ignore_index=True)
sl = sl.append(pd.DataFrame([[layer_name +' ~60% Al',l_high_al, high_al, na, nd, True, False, False, True]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12']),
ignore_index=True)
return sl
def structure_zandbergen():
......@@ -867,3 +902,14 @@ def nmph_to_nmps(v):
return v
def optimized_period_amount(total_thickness, low_al_thickness_coeff, high_al_thickness_coeff):
min_coeff = np.min([low_al_thickness_coeff, high_al_thickness_coeff])
period = total_thickness * min_coeff / 1e-9
return np.ceil(period).astype(int)
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