Commit 7a1efef6 by Lucas Laplanche

### 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