forked from qpv-research-group/solcore5
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Absorption_profile_AlGaAs_GaAs_structure.py
executable file
·45 lines (37 loc) · 1.77 KB
/
Absorption_profile_AlGaAs_GaAs_structure.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import matplotlib.pyplot as plt
import numpy as np
from solcore.absorption_calculator import calculate_absorption_profile
from solcore import material, si
from solcore.structure import Structure, Layer
# First we defined a couple of materials, for example, GaAs and AlGAs
GaAs = material('GaAs')(T=300)
AlGaAs = material('AlGaAs')(T=300, Al=0.3)
# Now, let's build the structure
my_structure = Structure([
Layer(si(30, 'nm'), material=AlGaAs),
Layer(si(3000, 'nm'), material=GaAs),
Layer(si(300, 'um'), material=GaAs),
])
# We want to calculate the absorption profile of this structure as a function of the position and wavelength
wl = np.linspace(400, 1000, 200)
out = calculate_absorption_profile(my_structure, wl, steps_size=1, z_limit=3000)
# Finally, we plot the absorption profile. Note that absorption at short wavelengths take place near the surface of the
# structure, in the AlGaAs layer and top of the GaAs layer, while longer wavelengths penetrate more. Wavelengths beyond
# the GaAs band edge are not absorbed.
plt.figure(1)
ax = plt.contourf(out['position'], wl, out['absorption'], 200)
plt.xlabel('Position (nm)')
plt.ylabel('Wavelength (nm)')
cbar = plt.colorbar()
cbar.set_label('Absorption (1/nm)')
# We can also check what is the overall light absorption in the AlGaAs and GaAs epilayers as that represents the total
# light absorption in our solar cell and therefore the maximum EQE (light absorbed in the thick substrate lost).
# The absorption is mostly limited by the reflexion in the front surface. Clearly, this solar cell needs an AR coating.
A = np.zeros_like(wl)
for i, absorption in enumerate(out['absorption'][:]):
A[i] = np.trapz(absorption, out['position'])
plt.figure(2)
plt.plot(wl, A)
plt.xlabel('Wavelength (nm)')
plt.ylabel('Absorption')
plt.show()