InGaAs QW 1D

In this tutorial we will see how to calculate quantum properties of a GaAs/InGaAs QW.
Schrödinger 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
{
meshfile = InGaAs_1D.msh
# mesh is drawn in nm
mesh_units = 1e-9
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 drift-diffusion 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 = poissonSolver{nonlinear_solver = tiberpc_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 = ohmicvoltage = 0.0}  Contact anode {type = ohmicvoltage = 0.0}}`

Alternatively, we could choose the default flat-band 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:

1. a single block named band_properties containing parameters for both conduction and  valence band
2. 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 Pikus-Bir 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 k-vector (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 = elmodel = 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_holesregions = 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).

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 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....

### 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 nm-wide 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.