Optical generation in InGaAs/GaAs QW
Header
- Files for the tutorial located in nextnano++\examples\tricks_and_hacks
1D_optical_generation_ingas_gaas_qw.in
1D_optical_generation_ingas_gaas_2qw.in
1D_optical_generation_ingas_gaas_qw.py
1D_optical_generation_ingas_gaas_2qw.py
- Scope:
In this tutorial, a procedure for simulating photogeneration inside quantum wells is described.
- Important keywords:
optics{ irradiation{} quantum_spectra{} }
import{ }
region{ generation{} }
- Relevant output files:
bias_00000\Optics\absorption_quantum_region_TE_eV.dat
Irradiation\illumination_spectrum_power_eV.dat
bias_00000\recombination.dat
bias_00000\bandedges.dat
Introduction
We consider a simple 1D single QW (In0.2Ga0.8As/ GaAs) structure under illumination along the QW growth direction. The photon energy is little above the absorption edge of the GaAs QW. The In0.2Ga0.8barriers are transparent for the incident photons, because the band gap in these regions exceeds the energy of the photons. Thus generation of charge carriers only occurs inside the QW.
Simulation Scheme
Based on the current implementation of photogeneration in nextnano++, the simulation procedure shown in Figure 2.4.585 is employed.

Figure 2.4.585 Visualization of the Simulation Procedure
Each step of the procedure is further elaborated in the sections below.
First Step
In the first step, data files for the absorption spectrum and the illumination spectrum are created, which are going
to be used to determine the generation profile
Before running the input file, the user should specify the properties of
the light source inside the group optics{ irradiation{} }
.
optics{
irradiation{
min_energy = 1.0 # minimum energy of the light source spectrum
max_energy = 1.8 # maximum energy of the light source spectrum
energy_resolution = 0.001 # resolution of the light source spectrum
global_illumination{
direction_x=1
gaussian_spectrum{ # lineshape
irradiance = 1e5 # total intensity [W/m^2]
energy = 1.25 # peak energy [eV]
gamma = 0.01 # FWHM [eV]
}
}
output_spectra{} # create light source spectrum in the output folder
}
...
}
When running the input file, nextnano++ computes the absorption spectrum quantum mechanically
based on the settings inside optics{ quantum_spectra{} }
.
optics{
...
quantum_spectra{
name = "quantum_region"
polarization{ name = "TE" re = [0,1,0] }
k_integration{
relative_size = 0.2
num_subpoints = 6
num_points = 8
}
output_spectra{
spectra_over_energy = yes # output spectrum dI/dE
emission = yes
}
output_occupations = yes
energy_broadening_lorentzian= 1.0e-2
spontaneous_emission = yes
# Note: the following settings should be the same as in irradiation{}
energy_min = 1.0 # minimum energy of the absorption spectrum
energy_max = 1.8 # maximum energy of the absorption spectrum
energy_resolution = 0.001 # resolution of the absorption spectrum
}
}
The computed absorption and illumination spectra are located in the output folder at:
<input file name>\bias_00000\Optics\absorption_quantum_region_TE_eV.dat
<input file name>\Irradiation\illumination_spectrum_power_eV.dat
Warning
Depending on the settings in nextnanomat, <input file name> could contain, in addition to the actual input file name, the current date or a counting index if the input file is run several times. It has to be checked that the path name of the simulation results is consistent with the path name which is used later in the python script when extracting the files.
Second Step
With the python script, the generation rate profile
where
with the spectral photon flux
The spectral photon flux is determined by the spectral properties of the light source, i.e.
the light source spectrum
with energy
compensates the dependency on

Figure 2.4.586 Computed absorption spectrum of a single InGaAs/GaAs quantum well for different quantum region widths
The rescaling factor for multiple quantum well structures becomes:
Third Step
The generation rate profile can now be imported from the data file. The file should contain values for position and generation rate as separate columns.
import{
file{
name = "my_generation_profile" # reference name
filename = "Generation_profile.dat" # relative path to generation rate profile
format = DAT
}
}
The imported generation profile is then applied to the QW region:
structure{
...
region{
ternary_constant{ name = "Ga(1-x)In(x)As" alloy_x = 0.2 } # material GaInAs alloy
line{ x = [ $well_start, $well_end ] } # overwriting previously defined GaAs
!IF($second_run)
generation{ # generation profile G(x) applied to QW region
import{ import_from = "my_generation_profile" } # refer to imported data file with name "my_generation_profile"
}
!ENDIF
}
...
}
Results
Generation Rate Profile
Figure 2.4.587 shows the generation rate profile calculated according to the above described methodology.

Figure 2.4.587 Computed generation rate profile G(x) for single QW structure
Bandedges and Fermi Levels
Figure 2.4.588 compares the band edges and Fermi levels without photogeneration (left) and with photogeneration based on the imported generation rate profile (right).

Figure 2.4.588 Band edge profile of 1D QW (
Last update: 17/07/2024