Commit 9c101694 authored by Lucas Laplanche's avatar Lucas Laplanche
Browse files

ajout calcul indices à 550°C

parent a37d6f3b
......@@ -246,6 +246,10 @@ 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)
......@@ -280,17 +284,19 @@ 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)):
sl_j = op.algaas_super_lattice_refractive_index(sl_i, electric_field, wavelength[j], temperature=550, lengyel=False)
n, d = op.algaas_super_lattice_refractive_index_opti(sl_arrays_i, wavelength[j], refra_data_550, temperature=550+273.15)
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])
return time, wavelength, r
......
......@@ -44,7 +44,5 @@ ME_QW = ME_GAAS # e- effective mass in well
MZHH_QW = MZHH_GAAS # heavy hole effective mass in well
# 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')
......@@ -14,12 +14,12 @@ import transfer_matrix_method as tmm
def eam_vcsels_heatmaps():
cl.reflectivity_heatmap(bypass_dbr=False,
n_wavelength=900,
n_time=1600,
n_wavelength=1080,
n_time=1920,
r_file_name='heatmap_r_eam_vcsel_1')
cl.reflectivity_heatmap(bypass_dbr=True,
n_wavelength=900,
n_time=1600,
n_wavelength=1080,
n_time=1920,
r_file_name='heatmap_r_eam_vcsel_2')
def eam_heatmaps():
......
import numpy as np
from globals import C, HEV, N0, REFRA_DATA_550, T
from globals import C, HEV, N0, 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
......@@ -216,13 +250,13 @@ def afromovitz_varshni_real_algaas_refractive_index(al, wavelength, temperature=
return n
def almuneau_complex_550C_algaas_refractive_index(al, wavelength, temperature=550+273.15):
def almuneau_complex_550C_algaas_refractive_index(refra_data_550, 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'])
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'])
return n + 1j * k
......@@ -258,6 +292,24 @@ def confinement_barrier_mean_al_content(super_lattice, i):
return al
def confinement_barrier_mean_al_content_array(name_array, al_array, thickness_array, i):
name = name_array[i +1]
al = 0.
total_thickness = 0.
while 'barrier' in name:
al += al_array[i +1] * thickness_array[i +1]
total_thickness += thickness_array[i +1]
i += 1
name = name_array[i +1]
al = al / total_thickness
return al
def find_two_nearest_indices(value, array):
# array must be a numpy array
idx0 = (np.abs(array -value)).argmin()
......
......@@ -246,6 +246,16 @@ def add_epitaxial_time_columns(super_lattice,
def extract_arrays_from_super_lattice(super_lattice):
name_array = super_lattice['name'].to_numpy()
al_array = super_lattice['al'].to_numpy(dtype=float)
thickness_array = super_lattice['thickness'].to_numpy(dtype=float)
r_array = super_lattice['refractive_index'].to_numpy(dtype=np.complex128)
return [name_array, al_array, thickness_array, r_array]
def fexp(number):
(sign, digits, exponent) = Decimal(number).as_tuple()
return len(digits) + exponent - 1
......
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