 
nextnano^{3}  Tutorial
next generation 3D nano device simulator
1D Tutorial
Optical absorption of an InGaAs quantum well
Author:
Stefan Birner
If you want to obtain the input files that are used within this tutorial, please contact stefan.birner@nextnano.de.
> InGaAs_7nm_optics_step1.in
InGaAs_7nm_optics_step2.in
InGaAs_7nm_optics_step3_x_polarized.in
InGaAs_7nm_optics_step3_z_polarized.in
InGaAs quantum well
 We want to calculate the optical absorption as a function of photon energy
for interband (i.e. electronhole) transitions in a quantum well by means of
8band k.p theory.
 This input file simulates a 7 nm In_{0.3}Ga_{0.7}As
quantum well embedded in GaAs which acts as the barrier material. The InGaAs
quantum well is strained pseudomorphically with respect to the substrate
material GaAs (001). The temperature is assumed to be 150 K. The effect of
strain is included into the 8band k.p Hamiltonian.
 Detailed description about the physical background that is used to
calculate the optical absorption:
Absorption, Matrix elements, Interband transitions, Intraband transitions
(pdf file).
Restrictions: The physical model is only correct for [001] growth direction.
We also neglect the k vector dependence of the matrix elements.
 The
$numericcontrol features that have to be used are:
$numericcontrol
simulationdimension = 1
...
$end_numericcontrol
To calculate the optical absorption, we have to perform a 3step approach:
 Step 1: Here: Calculate k.p eigenstates for k_{}=0
calculateoptics = no
Solve k.p and determine lowest and highest eigenvalue to specify
eminstate and emaxstate in the second step.
Note: Usually one could do the following:
 Solve for selfconsistent potential with effectivemass approximation
instead of 8band k.p. This is much faster.
 Write out raw data for potential and Fermi levels (and strain if necessary).
 Use this potential and these Fermi levels to solve 8band k.p
eigenstates in step 2.
 Step 2: Calculate eigenstates for k_{}/=0
calculateoptics = yes
readinkpoints = no
Read in raw data (potential, quasiFermi levels, strain (if
applicable)) and output k points:
rawpotentialin = yes, rawfermilevelsin
= yes, straincalculation =
rawstrainin
 Step 3: Calculate optical absorption
calculateoptics = yes
readinkpoints = yes
Read in k points, calculate and output optical absorption.
If one wants to repeat the calculation for another polarization, one only
needs to change the polarization vector and repeat step 3.
It is not necessary in this case to recalculate step 1 or step 2.
Step 1: Calculate k.p eigenstates for k_{}=0
 For step 1, the relevant specifier for the keyword
$opticalabsorption is only the following:
calculateoptics =
no
This is equivalent to not including this keyword at all. For
step 1 we do not need optics, we just calculate the k.p eigenstates.
$opticalabsorption
destinationdirectory = optics1/
! directory for output and data files
calculateoptics = no
! flag: "yes "/"no "
kindofabsorption =
interbandonly ! 'interbandonly' ,
'intravbonly' , 'intracbonly'
readinkpoints = no
! flag: "yes "/"no "
...
$end_opticalabsorption
 This pictures shows the calculated electron and hole states that are bound
inside the well. The conduction (cb) and valence band edges (hh: heavy hole,
lh: light hole) are also indicated. The electron and hole states that are not
bound inside the well are not shown although they are needed to calculate the
optical absorption.
The transition energies that are relevant
for the interband (i.e. electronhole) transitions were calculated. Note that
'lh1' corresponds to the first light hole state, and hh1, hh2 and hh3 to the
heavy holes. These transition energies between bound states were calculated
without taking into account the exciton corrections. The three lines indicate
the strongest transitions: The "Delta n = 0" selection rule, i.e. transitions
between levels with the same index.
Figure 1:
Step 2: Calculate eigenstates for k_{}/=0
 For step 2, the relevant specifiers for the keyword
$opticalabsorption are the following:
In step 1 we used:
calculateoptics =
no
This time we need:
calculateoptics =
yes
$opticalabsorption
destinationdirectory = optics1/
! directory for output and data files
calculateoptics = yes
! flag: "yes "/"no "
kindofabsorption =
interbandonly ! 'interbandonly' (8x8kp) , 'intracbonly'
(8x8kp) ,
'intravbonly' (6x6kp)
readinkpoints = no
! flag: "yes "/"no "
!
!
2^{nd} step: k point calculations eminstate
= 0.80d0
! energy of lowest eigenvalue considered for calculation
emaxstate =
1.60d0
! energy of highest eigenvalue considered for calculation
...
$end_opticalabsorption
If readinkpoints = no ,
we therefore have to specify the relevant parameters that are needed for the k
point calculations.
$quantummodelelectrons
...
numkpparallel =
1000 ! STEP 2/3
! total number of k_{} points for Brillouin zone
discretization
$quantummodelholes
...
numkpparallel =
1000 ! STEP 2/3
! total number of k_{} points for Brillouin zone
discretization
 Explanations:
 In order to study interband (electronhole) transitions, we need 8band k.p.
 From Figure 1 we obtain the minimum and maxium
energy of the eigenstates that will be considered for transitions. We consider
all electron states up to 1.6 eV and all hole states up to 0.8 eV (CHECK: It
seems that 0.8 is not low enough). This corresponds to 50 eigenvalues for the
electrons and 40 for the holes.
 Output
Once the calculation of step 2 is done, the folder optics1/
contains the following files:
optics_out_eigenvalues_el1D.txt  contains electron
eigenvalues
in ASCII format
optics_out_eigenvalues_hl1D.txt  contains hole
eigenvalues in ASCII format
optics_out_spinor_el1D.raw 
contains electron k.p wave function components (spinors) in raw data
(binary) format
optics_out_spinor_hl1D.raw 
contains hole k.p wave function
components (spinors) in raw data (binary) format
In this tutorial example, the latter files are very large.
They contain for each k_{} = (k_{x},k_{y})
value, the k.p wave function components (spinors) for all eigenvalues.
In detail:
 We have 95 grid points in the quantum region (from 30 nm to
77 nm), i.e. a grid point resolution of 0.5 nm which is rather coarse.
This means that each spinor has a size of 96.
grid = 95
 We have 8band k.p, i.e. 8 spinors.
spinor = 8
 The dimension of the matrix that we have to diagonalize for each
k_{} point is 760, i.e. a 760 x 760 matrix.
grid * spinor = 95 * 8 = 760
 We have 961 k_{} points, i.e. 961 matrices
have to be diagonalized.
k_parallel = 961
 The wave functions are complex, thus we have to store two numbers, a
real part and an imaginary part.
complex = 2
==> For each eigenvalue of a k_{} point we have to
store the following amount of data for its wave function:
complex * k_parallel * spinor * grid =
2 *
961 * 8 * 95 =
1,460,720 double precision numbers
A double precision number needs 8 byte. ==>
11,685,760 byte = 11.14 MB
 However, there are several eigenvalues (and thus wave function
components (spinors) for each of them) for each k_{} point
which have to be stored.
number of electron eigenvalues:
MAX_NUM_EL1D = 50
number of hole eigenvalues:
MAX_NUM_HL1D = 38
==> for electrons: 50 * 11.14 MB = 557.22 MB
( corresponding to the size of the file optics_out_spinor_el1D )
==> for holes: 38 * 11.14 MB =
423.49 MB ( corresponding to the size of the file
optics_out_spinor_hl1D )
(Note that 1 kB is 1024 byte, and that 1 MB is 1024
kB.)
These data files will be read in in the next step (Step 3).
Step 3: Calculate optical absorption
 For step 3, the relevant specifiers for the keyword
$opticalabsorption are the following:
In step 2 we used:
calculateoptics =
yes
readinkpoints =
no
This time we need:
calculateoptics =
yes
readinkpoints
= yes
$opticalabsorption
destinationdirectory = optics1/
! directory for output and data files
calculateoptics =
yes
! flag: "yes "/"no "
kindofabsorption =
interbandonly ! 'interbandonly' ,
'intravbonly' , 'intracbonly'
readinkpoints =
yes
! flag: "yes "/"no "
eminstate
= 0.80d0
! energy of lowest eigenvalue considered for calculation
emaxstate
= 1.60d0
! energy of highest eigenvalue considered for calculation
!
3^{rd} step: Calculate optical absorption
eminphoton =
1.10d0
! [eV] lower boundary for photon energy interval
emaxphoton =
1.60d0
! [eV] upper boundary for photon energy interval
smoothingofcurve =
yes
!
(default)
smoothingdampingparameter =
5d4 ! [eV]
artificial damping parameter for smoothing of absorption curve
numenergysteps =
1000
! number of energy steps
! y polarized light
polarizationvector1 = 1d0 0d0 0d0
! x y z coordinates (in simulation system) for first inplane vector
polarizationvector2 = 0d0 1d0 0d0
! x y z coordinates (in simulation system) for second inplane vector
magnituderelation12 = 0d0
! relation of magnitudes E1/E2
phase
= 0.0d0
! phase: E2 > exp(i*phase*Pi)*E2
$end_opticalabsorption
If readinkpoints = yes ,
we read in the data files that were created in step 2:
optics1/optics_out_eigenvalues_el1D
optics_out_eigenvalues_hl1D
optics_out_spinor_el1D
optics_out_spinor_hl1D
 Figure 2 shows the optical absorption spectrum as a function of photon
energy for x and z polarized light.
xpolarized light (black line): The light propagation is normal to the
quantum well along the z direction. Here, it is xpolarized. If it were
ypolarized, the same absorption spectrum would have been obtained.
zpolarized light (red line): The light
propagation is in the plane of the quantum well with perpendicular Efield
polarization (along the z direction). This is the transverse magnetic (TM)
mode. No absorption for heavy holes is seen. (This is not exactly true
because the TM mode has a component of the electric field along the direction of
propagation x. But it is small in a weakly guiding structure.) Consequently in
Fig. 2 only the transition involving the light hole is seen (e1lh1)
and the heavy hole transitions are suppressed (e1hh1, e2hh2).
Figure 2
The optical absorption spectrum ranges from 1.10 eV to 1.60 eV. The relevant
specifiers to determine this range are:
eminphoton
= 1.10d0
! lower boundary for photon energy interval
emaxphoton =
1.60d0
! upper boundary for photon energy interval
The energy interval from 1.10 eV to 1.60 eV ([eminphoton,emaxphoton]
= [1.10d0,1.60d0] )
is divided into a number of energy steps (energy grid) that must be specified in the input
file: numenergysteps = 1000
How to specify xpolarized light:
polarizationvector1 = 0d0 1d0 0d0
! x y z coordinates (in simulation system) for first inplane vector
polarizationvector2 = 1d0 0d0 0d0
! x y z coordinates (in simulation system) for second inplane vector
magnituderelation12 = 0d0
! relation of magnitudes E1/E2
(In this case, polarizationvector1 is ignored as
E1 is set to be zero.)
How to specify zpolarized light:
polarizationvector1 = 1d0 0d0 0d0
! x y z coordinates (in simulation system) for first inplane vector
polarizationvector2 = 0d0 0d0 1d0
! x y z coordinates (in simulation system) for second inplane vector
magnituderelation12 = 0d0
! relation of magnitudes E1/E2
(In this case, polarizationvector1 is ignored as
E1 is set to be zero.)
How to specify circularly polarized light [(x,z) plane]:
polarizationvector1 = 1d0 0d0 0d0
! x y z coordinates (in simulation system) for first inplane vector
polarizationvector2 = 0d0 0d0 1d0
! x y z coordinates (in simulation system) for second inplane vector
magnituderelation12 = 1d0
! relation of magnitudes E1/E2
(In this case, polarizationvector1 is not ignored as
E1=E2 .)
Exciton binding energy in quantum wells
 In order to correlate the calculated optical transition energies of a 1D
quantum well to experimental data, one has to include the exciton
(electronhole pair) corrections.
 GaAs band gap transition at 1.49 eV:
The 3D bulk exciton binding energy can be calculated analytically
E_{ex,b} =  µ e^{4} / ( 32 pi² h_{bar}² e_{r}²
e_{0}²) =  µ / (m_{0} e_{r}²) x 13.61 eV
where µ is the reduced mass of the
electronhole pair: 1/µ = 1/m_{e} + 1/ m_{h}
h_{bar} is Planck's constant
divided by 2pi
e is the electron charge
e_{r} is the dielectric constant
e_{0} is the vacuum permittivity
m_{0} is the rest mass of the
electron and
13.61 eV is the Rydberg energy.
In GaAs it is equal to 4.8 meV.
Thus the energy of the exciton, i.e. band gap transition, reads
E_{ex} = E_{gap} + E_{ex,b} = 1.49 eV  0.005 eV
= 1.485 eV.
A 1D quantum well for a type I structure has two exciton limits for the ground
state transition (e1hh1):
 infinitely thin quantum well (2D limit): E_{ex,qw} = 4E_{ex}
 infinitely thick quantum well (3D bulk exciton limit): E_{ex,qw} = E_{ex
}Between these limits, the exciton correction which depends on the well
width has to be calculated numerically, not only for the ground state but also
for excited states (e.g. e2hh2, e1lh1).
For more details, please have a look at our 1D exciton tutorial:
Exciton energy in quantum wells
 Please help us to improve our tutorial! Send comments to
support
[at] nextnano.com .
