# 2.4.20. 1D - Multiple quantum wells and finite superlattices¶

Author: Brandon Loke

This tutorial simulates a real layered structure with a finite number of quantum wells. The transition between a finite superlattice and a multiple quantum well system is also observed. This tutorial aims to reproduce the figures in Paul Harrison’s book “Quantum Wells, Wires and Dots” (Section 3.10, “Multiple Quantum Wells and Finite Superlattices”)

The inputfile used for this tutorial is

• Superlattice_N_wells_nnp.in

The corresponding Jupyter Notebook for this tutorial can be found over here: MQW_Superlattices.ipynb.

## Structure¶

The structure consists of N repeats of 4 nm GaAs wells and 4 nm Ga0.8Al0.2As quantum wells. This superlattice structure is sandwiched between 20 nm Ga0.8Al0.2As barriers.

We first define key variables, such as the well width, the right and left wall width, and the number of wells.

# Global constants
$TEMPERATURE = 300 # Temperature (DisplayUnit:K)(ListOfValues:270, 280, 290, 300, 310, 320, 330) # Structure$WELL_WIDTH                           = 10.0           # Width of the quantum well (DisplayUnit:nm)(HighlightInUserInterface)(ListOfValues:5.0, 6.0, 7.0, 8.0, 9.0)  (RangeOfValues:From=5.0,To=9.0,Step=1.0)
$BARRIER_WIDTH = 10.0 # Width of the barrier (DisplayUnit:nm)(HighlightInUserInterface)(ListOfValues:7.0, 8.0, 9.0, 10.0, 11.0)(RangeOfValues:From=57.0,To=11.0,Step=1.0)$NUMBER_OF_WELLS                      = 4              # number of quantum wells   (DisplayUnit:)(HighlightInUserInterface)(ListOfValues:4, 5, 6, 7, 8)(RangeOfValues:From=3,To=10,Step=1)

$SUPERLATTICE_WIDTH =$NUMBER_OF_WELLS * ( $BARRIER_WIDTH +$WELL_WIDTH ) - $BARRIER_WIDTH # (DisplayUnit:nm)(DoNotShowInUserInterface)$LEFT_BARRIER_WIDTH                       = 10            # Width of the Separate Confinement Heterostructure (SCH) (on the left) (DisplayUnit:nm)
$RIGHT_BARRIER_WIDTH = 10 # Width of the Separate Confinement Heterostructure (SCH) (on the right)(DisplayUnit:nm)$FINE_GRID_SPACING                    = 0.1               # (DisplayUnit:nm)(ListOfValues:0.1, 0.5, 1.0)(DoNotShowInUserInterface)
$COARSE_GRID_SPACING = 1.0 # (DisplayUnit:nm)(ListOfValues:0.5, 1.0, 5.0)(DoNotShowInUserInterface) # Materials and doping$ALLOY_X = 0.8


Following this, we are able to generate the structure of the GaAs/Ga0.8Al0.2As superlattice under structure{}. The keywords array_x{} duplicate the structure in the x-direction to give us the number of wells required.

region{                                            # LEFT WALL
line{
x = [-$LEFT_BARRIER_WIDTH, 0] } ternary_constant{ name = "Ga(x)Al(1-x)As" # Ga0.8Al0.2As alloy_x =$ALLOY_X
}
}

# SUPERLATTICE

region{                                            # Barrier
array_x{
shift          = $BARRIER_WIDTH +$WELL_WIDTH
max            = $NUMBER_OF_WELLS - 1 } line{ x = [0,$BARRIER_WIDTH]
}
binary{
name     = "GaAs"
}
}
region{                                            # Quantum well
array_x{
shift          = $BARRIER_WIDTH +$WELL_WIDTH
max            = $NUMBER_OF_WELLS - 2 } line{ x = [$BARRIER_WIDTH,   $BARRIER_WIDTH +$WELL_WIDTH]
}
ternary_constant{
name     = "Ga(x)Al(1-x)As"
alloy_x  = $ALLOY_X } } region{ # RIGHT WALL line{ x = [$SUPERLATTICE_WIDTH,   $SUPERLATTICE_WIDTH +$RIGHT_BARRIER_WIDTH]
}
ternary_constant{
name    = "Ga(x)Al(1-x)As"
alloy_x = $ALLOY_X } }  ## Simulation Settings¶ Under quantum{}, we specify quantum { region{ name = "quantum_region" x = [ -$LEFT_BARRIER_WIDTH, $SUPERLATTICE_WIDTH +$RIGHT_BARRIER_WIDTH ]                         # Schroedinger equation is solved only in region of LEFT WALL + SUPERLATTICE + RIGHT WALL

boundary{
#       x  = dirichlet                                  # Dirichlet boundary condition for the Schroedinger equation,     psi = 0
x  = neumann                                    #   Neumann boundary condition for the Schroedinger equation, dpsi/dx = 0
}

Gamma{
num_ev = 70
# 70 eigenvalues have to be calculated
}

HH{
num_ev = 250                                    # 150 eigenvalues have to be calculated
}

LH{
num_ev = 70                                    # 70 eigenvalues have to be calculated
}

SO{
num_ev = 100                                    # 100 eigenvalues have to be calculated
}

output_wavefunctions{
max_num = 20                                    # only 20 eigenfunctions from 100 calculated are shown in output
amplitudes = yes
probabilities = yes
}
}
}


We want to obtain the energies and the amplitudes of the wave functions outputted.

## Ground state energies¶

After generating the input file, we are able to run the simulation for a variable number of quantum wells using the variable sweep functionality in nextnanomat. One can go to “Template” on the tabs at the top, under “Sweep”, select the variable of interest and the range or list of values to iterate over. Click on “Create input file” at the bottom and run the simulations in the “Simulation” tab.

The following graphs were generated with nextnanopy. The reference potential energy used in Harrison’s book and nextnano++ is different. Thus, post-processing was done in Python to match the reference energy levels.

## Wavefunction in a superlattice¶

The wave functions can also be plotted. The first example in Harrison’s book has the following parameters:

• 10 wells

• 4 nm Ga0.8Al0.2As barrier

• 4 nm Ga0.8Al0.2As quantum well width

• 20 nm left and right Ga0.8Al0.2As walls

This figure is in agreement with Harrison’s result. It is observed that the system functions as a superlattice as the wavefunction in each well overlaps with the wavefunction of the adjacment wells.

## Wavefunction in a multiple quantum well system¶

Harrison’s final figure uses the following parameters:

• 4 wells

• 10 nm Ga0.6Al0.4As barriers

• 10 nm Ga0.6Al0.4As quantum wells

• 10 nm Ga0.6Al0.4As left and right walls

This figure is also in good agreement with Harrison’s results. It is observed from the figure that this system functions as a multiple quantum well because the wavefunction reaches zero between the wells.