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)')
MatParams["B1s"] = 1.0
MatParams["Gamma_Eg_ID"] = 0.3
MatParams["Alpha_Eg_ID"] = 0.0
MatParams["E1"] = 2.8
MatParams["E1_d1"] = 2.9
MatParams["Gamma_E1"] = 0.1
MatParams["E2"] = 4.72
MatParams["C"] = 3.0
MatParams["Alpha_E2"] = 0.04
MatParams["Gamma_E2"] = 0.19

# Must define a structure object containing the required oscillator functions. The oscillator type and material
# parameters are both passed to individual 'Oscillators' in the structure...
Adachi_GaAs = Structure([
    Oscillator(oscillator_type="E0andE0_d0", material_parameters=MatParams),
    Oscillator(oscillator_type="E1andE1_d1", material_parameters=MatParams),
    Oscillator(oscillator_type="E_ID", material_parameters=MatParams),
    Oscillator(oscillator_type="E2", material_parameters=MatParams)
])

Output = CPPB_Model.eps_calc(Adachi_GaAs, E)

# PLOT OUTPUT...
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(7, 4.5))

# Subplot I :: Real part of the dielectric function.
ax1.set_yscale("linear")
ax1.set_xlim(0, 5.3)
ax1.set_ylim(-14, 27)

ax1.plot(Palik_Eps1[:, 0], Palik_Eps1[:, 1], label="Exp. Data (Palik)",
         marker='o', ls='none', markerfacecolor='none', markeredgecolor=colours("Red"))
    "hwhm": si("6meV"),
    "dimensionality": 0.16,
    "line_shape": "Gauss"
}

# plt.figure(figsize=(4, 4.5))
for j, i in enumerate(comp):
    # We create the QW material at the given composition
    QW = material("InGaAs")(T=293, In=i, strained=True)

    # And the layer
    well_layer = Layer(width=si("7.2nm"), material=QW)

    # The following lines create the QW structure, with different number of QWs and interlayers
    test_structure = Structure(
        [barrier_layer, inter, well_layer, inter, barrier_layer],
        substrate=bulk)

    # Finally, the quantum properties are claculated here
    output = QM.schrodinger(test_structure,
                            quasiconfined=0,
                            num_eigenvalues=20,
                            alpha_params=alpha_params,
                            calculate_absorption=True)

    alfa = output[0]['alphaE'](E)
    plt.plot(1240 / (E / q), alfa / 100, label='{}%'.format(int(i * 100)))

plt.xlim(826, 1100)
plt.ylim(0, 23000)
plt.xlabel('Wavelength (nm)')
Beispiel #4
0
Air = material("Air")(T=T)
TiO2 = material("TiO2", sopra=True)(T=T)  # for the nanoparticles
GaAs = material("GaAs")(T=T)

# define a flat layer and another with circular discs with the same thickness
Flat = Layer(si('50nm'), TiO2)
NP_layer = Layer(si('50nm'),
                 Air,
                 geometry=[{
                     'type': 'circle',
                     'mat': TiO2,
                     'center': (200, 200),
                     'radius': 50
                 }])

flat_struct = Structure([Flat])
np_struct = Structure([NP_layer])

# And the wavelength in which the solve the problem
wl = np.linspace(300, 1000, 150)

rat_flat = calculate_rat_rcwa(flat_struct,
                              size=((400, 0), (0, 400)),
                              orders=10,
                              wavelength=wl,
                              substrate=GaAs,
                              incidence=Air)
rat_np = calculate_rat_rcwa(np_struct,
                            size=((400, 0), (0, 400)),
                            orders=10,
                            wavelength=wl,
Beispiel #5
0
        "line_shape": "Gauss"
    }

    comp = [0.05, 0.10, 0.15, 0.20]
    colors = plt.cm.jet(np.linspace(0, 1, len(comp)))

    plt.figure(figsize=(6, 4.5))
    for j, i in enumerate(comp):
        QW = material("InGaAs")(T=293, In=i)
        QW.strained = True
        well_layer = Layer(width=si("7.2nm"), material=QW)

        # test_structure = Structure([top_layer, barrier_layer, inter] + 1 * [well_layer, inter, barrier_layer, inter] +
        #                            [bottom_layer])

        test_structure = Structure([barrier_layer, inter] +
                                   1 * [well_layer, inter] + [barrier_layer])

        # test_structure = Structure([top_layer, barrier_layer] + 10 * [well_layer, barrier_layer] +
        #                            [bottom_layer])

        test_structure.substrate = bulk

        output = schrodinger(test_structure,
                             quasiconfined=0,
                             mode='kp4x4',
                             plot_bands=False,
                             num_eigenvalues=20,
                             alpha_params=alpha_params,
                             calculate_absorption=True)

        alfa = output[0]['alphaE'](E)