In this tutorial we will see how to calculate quantum properties of a GaAs/InGaAs QW.
Schrödinger equation is solved, with a singleband effective mass model for conduction band and with a 6 bandkp model for valence band. Eigenvalues and eigenfunctions are calculated to get energy levels and wavefunctions in the quantum well.
Simulation is performed at equilibrium, and first a strain calculation for the GaAs/InGaAs/GaAs heterostructure, with GaAs as a reference substrate, is performed.
In order to execute correctly the example you should have the following files in the same working directory:
InGaAs_1D.tib: input file for TiberCAD
InGaAs_1D.msh: mesh file produced by GMSH
InGaAs_1D.geo: GMSH .geo file
In the following, the input file will be described in details; for further details you can refer to the program reference manual.
First, let's see the device's structure:
Device
{
meshfile = InGaAs_1D.msh
# mesh is drawn in nm
mesh_units = 1e9
Region buffer
{
material = GaAs
}
Region barrier_1
{
mesh_regions = (barrier1_cl, barrier1_q)
material = GaAs
}
Region QWell
{
material = InGaAs
x = 0.40
}
Region barrier_2
{
mesh_regions = (barrier2_q, barrier2_cl)
material = GaAs
}
# group together the regions for the quantum simulation
Cluster Quantum_1
{
regions = (barrier1_q, QWell, barrier2_q)
}
}
Region QWell defines the quantum well, constituted by InGaAs; since it is an alloy, definition of alloy composition is required (x=0.40 ), where x is the In concentration in In _{(x)}GaAs.
Note that the Regions barrier_1 and barrier_2 (defining the GaAs barriers) are composed each by two mesh regions mesh_regions = (barrier1_cl, barrier1_q) and mesh_regions = (barrier2_q, barrier2_cl) . This is useful for the proper definition of the quantum region, that is the set of mesh regions, where quantum calculation is to be performed.
In fact, usually it is convenient to apply the quantum calculations to a region including both the InGaAs quantum well and a part of the two GaAs barriers.
To be able to do this, we define a Cluster composed by the mesh regions (barrier1_q, QWell, barrier2_q) : region barrier1_q and barrier2_q are parts of the GaAs barriers, while region QWell is the InGaAs quantum well.
In this way, in the rest of the input file, it will be possible to refer to all the set of these mesh regions by the label Quantum_1 .
Cluster Quantum_1
{
regions = (barrier1_q, QWell, barrier2_q)
}
We pass now to the definition of the TiberCAD simulation models which will be used in this example.
POISSON CALCULATION
The band profile calculation needs the Poisson equation to be solved. Therefore, we have to define a driftdiffusion Module and solve the Poisson equation without any voltage applied.
Thus, a simulation which runs the driftdiffusion model is defined, with two ohmic contacts fixed at zero voltage:
Module driftdiffusion { name = driftdiffusionregions = all plot = (Polarization, Ec, Ev, eQFermi, hQFermi, ElField, eDensity, hDensity, CurrentDensity, ContactCurrent, eMobility, hMobility) coupling = poisson
Solver { nonlinear_solver = tiber pc_type = lu }
Physics
{ band_properties { density_of_states bulk_kp { strain_simulation = strain } }
polarization pyro {} polarization piezo { strain_simulation = strain }
recombination srh {} recombination direct {} }
Contact cathode { type = ohmic voltage = 0.0 }
Contact anode { type = ohmic voltage = 0.0 } }
Alternatively, we could choose the default flatband boundary conditions, simply by omitting completely the Contact section; if the substrate and top regions are wide enough (that is if the 'active' region of the device is far from the boundaries), the results obtained with the two choices should tend to coincide.
With the statement coupling = poisson we declare that we want just the Poisson equation to be solved.
In Physics section it is in general possible to choose a model with which to obtain band properties (see User Manual for details). Band parameter models may be defined through the block density_of_states. This can be done inside:
 a single block named band_properties containing parameters for both conduction and valence band
 separate blocks named conduction_band and valence_band to control each band independently
Note that in this example we define a band_properties block where we choose a model for the calculation of bulk band parameters based on kp, valid for both conduction and valence band.
band_properties { density_of_states bulk_kp { strain_simulation = strain } }
This model, defined by density_of_states bulk_kp calculates the band edge energies and masses from bulk kp theory, including PikusBir strain corrections. To include strain corrections, the keyword strain_simulation has to be used, providing the name of the module instance which calculates strain. In the current versionit is not possible to provide kp parameters from the input file.
Important: In the previous TiberCAD releases the bulk_kp model for the DOS was the default model. Now the default model is the Bulk model, which describes the 3D DOS of a parabolic band semiconductor. By default, band edge energies and the DOS mass are taken from the database. This is particularly suited for Si.
However, when any materials different from Silicon are present in the device, or when strain has to be included in calculations, as it is the case of this example, it is necessary to define the bulk_kp model for density_of_states.
STRAIN CALCULATION
Then, we define a simulation called strain , belonging to the module elasticity which will be used to calculate the strain tensor:
Module elasticity
{
name = strain
regions = all
plot = (Strain)
Physics
{
body_force lattice_mismatch
{
reference_material = GaAs
structure = zb
}
}
Contact cathode
{
type = clamp
}
}
Through the physical model body_force with the specification lattice_mismatch we are able to calculate the stress and the strain induced at the heterointerface between two materials with different lattice constant by the lattice mismatch between them. This stress is considered as an external force applied to the device. This model needs a boundary condition (type = clamp ), which is assigned to one of the contact regions of the device, to fix the nodes of that region, and the name of the material whose lattice is taken as a reference for the strain calculation (reference_material = GaAs ). In this example GaAs is the reference material, and so the substrate layer contact is taken as the strain boundary condition. This is made by associating the boundary region with the GMSH physical point cathode Contact cathode {type = clamp} .
QUANTUM CALCULATION
Simulation Models
Finally, the Module efaschroedinger for quantum effective mass calculations, is defined.
We are going to study quantized states of electrons and holes in the quantum well. Since the structure is 1D, the eigenstate is characterized by the energy level number n and the k_{} vector that is perpendicular to the growth direction. In this tutorial, we define two simulations that solve Schrödinger equation for a single kvector (k_{} = 0), for electrones and holes.
For electrons:
Module efaschroedinger { name = quantum_electrons regions = Quantum_1 plot = (ProbabilityDensity, EigenEnergy)
poisson_simulation = driftdiffusion # potential from driftdiffusion strain_simulation = strain
number_of_eigenstates = 6
Physics { particle = el model = single_band } } We choose a single band model with electron as particle:
Physics { particle = el model = single_band } which substitutes to the old syntax
model = conduction_band
the number of eigenvalues to be computed is given by:
number_of_eigenstates = 6 Do not forget the links with the driftdiffusion simulation, which provides band edges:
poisson_simulation = driftdiffusion and with elasticity simulation, which provides strain info:
strain_simulation = strain In this way we connect Module efaschroedinger to the modules which calculate poisson and strain models. Note that this is very important, otherwise the quantum model will not have access to the information on strain and potential which are needed to write correctly the Hamiltonian of the system.
Similarly for holes:
Module efaschroedinger { name = quantum_holes regions = Quantum_1
plot = (ProbabilityDensity, EigenEnergy) poisson_simulation = driftdiffusion # potential from driftdiffusion strain_simulation = strain number_of_eigenstates = 12 Physics { model = 6x6 } }
Note that we choose a 6 band kp model with:
Physics { model = 6x6 }
which substitutes the old syntax
model = kp kp_model = 6x6
In this way, two different simulations efaschroedinger have been defined, quantum_electrons and quantum_holes . The same TiberCAD Cluster is associated to both the Modules: Quantum_1 .
SOLVER PARAMETERS
An optional Solver section may be present, where one can specify the numerical solvers for the schroedinger problem: if they are not explicitly specified, the default will be used.
In particular, one can choose a solver for the eigenvalue problem (e.g. solver = lapack ).
The available solvers are: lapack, krylovshur (default), arnoldi.
In this example we use the default (krylovshur).
Preconditioners and linear solvers are also needed in general (they are neglected if lapack solver is used); they can be defined explicitly, respectively with the options pc_type and ksp_type .
In this example, we use the default in 1D, that is pc_type = cholesky and ksp_type = bcgsl .
The default in 2 and 3D is pc_type = jacobi and ksp_type = bcgsl
RUN SIMULATIONS
Finally, in Simulation section, we define all the simulations to be performed, specified by
solve = (strain, driftdiffusion, quantum_electrons, quantum_holes )
this means that we are going to perform first a strain calculation (through Elasticity module), then a calculation of driftdiffusion (which in this case consists only in solving Poisson, since we have defined coupling = poisson in driftdiffusion module ), then a quantum calculation for electrons (quantum_electrons ) and for holes (quantum_holes ).
Results of calculations will be in the format of xmgr (output_format = grace ).
The plot keyword defines the output variables to be calculated in each Module.
In particular, Strain indicates strain tensor ouput, ProbabilityDensity and EigenEnergy refer respectively to the output of wavefunctions and energy levels.
Now we can run TiberCAD....
tibercad InGaAs_1D.tib
OUTPUT
At the end of the simulation, the output directory contains the simulation results, as defined in output_format and plot.
In ths case, beside the driftdiffusion output with the equibrium results, the following files should be present:
 strain_msh.dat: strain tensor components.
 quantum_electrons_msh.dat and quantum_holes_msh.dat: wavefunctions and energy levels in the quantum well, for electrons and holes.
 quantum_electrons.dat and quantum_holes.dat: eigenenergies for all the chosen states, for electrons and holes.
First we look at the output of driftdiffusion calculation; here are the conduction and valence bands profile in equilibrium condition (contained in the output file driftdiffusion_msh.dat); the Fermi level is in correspondance of the zero of energy.
Here we show the conduction band profile and the the quantized levels for electrons (from the file quantum_electrons_msh.dat) in the InGaAs quantum well; for this 8 nmwide quantum well only the first two energy levels are confined.
Here is the valence band profile (again from the output file driftdiffusion_msh.dat). The first 12 quantized levels for the holes (from the file quantum_holes_msh.dat) in the InGaAs quantum well are shown (there are 6 couples of degenerated energy levels).
These are the wavefunctions (square module) for the energy states in the conduction band: only the first two states are confined in the conduction band and are shown here.
Here are the wavefunctions for the first 12 confined energy states in the valence band. The first of each couple of degenerated states is shown.
States from the heavy hole and the light hole bands are visible.
ATTACHMENTS
