Tutorial 03: InGaAs QW 1D

In this tutorial we will see how to calculate quantum properties of a GaAs/InGaAs QW.
Schroedinger equation is solved, with a single-band effective mass model for conduction band and with a 6 band-kp 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
{
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
{
mesh_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 part of the GaAs barriers, while region QWellis the InGaAs quantum well . In this way, in the rest of input file, it will be possible to refer to all the set of these mesh regions by the label Quantum_1.

Cluster Quantum_1
{
mesh_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 drift-diffusion model and solve it without any voltage applied.
Thus, a simulation which runs the driftdiffusion model is defined, with two ohmic contacts fixed at zero voltage:


$Models
{
model driftdiffusion
{
.......................
BC_Regions
{
BC_Region cathode
{
type = ohmic
voltage = 0.0
}
BC_Region anode
{
type = ohmic
voltage = 0.0
}

Alternatively, we could choose the default flat-band boundary conditions (see Tutorial 6 ), simply by omitting completely the BC_Regions 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.

Later, in $Solver section, with coupling = poisson we declare that we want just the Poisson equation to be solved

$Solver
{
driftdiffusion
{
coupling = poisson
........................................

 

Strain calculation


Then, we define a simulation called strain, belonging to the model macrostrain , which will be used to calculate strain tensor:

model macrostrain
{
options
{
simulation_name = strain
physical_regions = all
}
BC_Regions
{
BC_Region cathode
{
type = substrate
material = GaAs
structure = zb 


This model needs a boundary condition (type = substrate) to be defined, to indicate the reference lattice material. 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 (BC_Region cathode.

 

Quantum calculation

 

1.Simulation Models

Finally, the model 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 k-vector (k|| = 0) , for electrones and holes. See Tutorial 6 for an example of dispersion calculation.
For electrons:

model efaschroedinger
{
options
{
simulation_name = quantum_electrons
physical_regions = Quantum_1
}
}


and for holes:

model efaschroedinger
{
option
{
simulation_name = quantum_holes
physical_regions = Quantum_1
}
}


In this way, two simulation models have been defined, quantum_electronsand quantum_holes, both of the class efaschroedinger. To both the models the same TiberCAD Cluster is associated
(Quantum_1).

 

2.Solver parameters

Now, we define the parameters for the solvers, in the Solver section.

After the block for driftdiffusion, a block for macrostrain is present, to specify the substrate reference.

macrostrain
{
substrate = cathode
}


Then the solver parameters for quantum calculations:
first, the parameters which are common to all the defined efaschroedinger simulations.

efaschroedinger
{
x-periodicity = false
Dirichlet_bc_everywhere = true poisson_model_name = driftdiffusion 
strain_model_name = macrostrain
convergent_density = true
}

Here, 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 an eigensolver (e.g. solver = lapack) : lapack, krylovshur (default) , arnoldi, lanczos.

Pre-conditioners and linear solvers are also needed in general (they are neglected if lapack solver is used); they can be defined explicitly, respectively with pc_type = ... and ksp_type = ... . Alternatively, one can specify a convenient combination of pre-conditioner and linear solver by using the keyword solution_method.
In this example, we use the default in 1D, solution_method = combined, which means pc_type = cholesky and ksp_type = bcgsl.
Other possible choices are solution_method = matlab (pc_type = cholesky and ksp_type = preonly) ;
solution_method = general (default in 2 and 3D) (pc_type = jacobi and ksp_type = bcgsl).

N.B.: We have to specify the names of a "Poisson" and/or of a strain model which we have previously defined, if we want that the results of these models will be used in quantum calculations (e.g. potential and strain effects on band structure) : strain_model_name = macrostrain, poisson_model_name = driftdiffusion.

Then, we can set some parameters specifical for each of the two efaschroedinger simulations:

 

  • for quantum_electrons we specify the calculation of electrons (particle = el) and set to 6 the number of eigenvalues to be calculated (number_of_eigenstates = 6).

 

quantum_electrons
{
particle = el
number_of_eigenstates = 6
}

 

  • for quantum_holes, we specify the calculation of holes (particle = hl) and choose to calculate the first 12 eigenvalues (number_of_eigenstates = 12).

 


quantum_holes
{
particle = hl
number_of_eigenstates = 12
}

3.Physics parameters.

 

In the Physics section:

  • For the driftdiffusion simulation, we state that we want to use the results from the macrostrain simulation (whose name here is strain). Note that, if this declaration is absent, strain results (if any) are NOT included in driftdiffusion calculations.


strain_simulation = strain


  • For the efaschroedinger simulation quantum_electrons, we choose a single band model (model = conduction_band) for electrons (particle = el)

 


quantum_electrons
{
particle = el
model = conduction_band   #eff mass  cb
}

  • For the efaschroedinger simulation quantum_holes, instead, we choose a 6 band kp model (model =  kp, kp_model = 6x6) for holes (particle = hl).


quantum_holes
{
particle = hl
model = kp   #  k.p  for  valence  band
kp_model = 6x6
}


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, then a calculation of drift-diffusion (which in this case consists only in solving Poisson, since we have defined coupling = poisson in Solver section ), 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).
In plot we define the output variables to be calculated.
In particular, strain indicates strain tensor ouput, EigenFunctions, EigenEnergy, EnergyLevels 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_elemental.dat: strain tensor components.
  • quantum_electrons_nodal.dat and quantum_holes_nodal.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_nodal.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_nodal.dat) in the InGaAs quantum well; for this 8 nm-wide quantum well only the first two energy levels are confined.

 

Here is the valence band profile (again from the output file driftdiffusion_nodal.dat). The first 12 quantized levels for the holes (from the file quantum_holes_nodal.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.

 

AttachmentSize
InGaAs_1D.tib3.12 KB
InGaAs_1D.geo1.02 KB
InGaAs_1D.msh26.04 KB