SCHROEDINGER-POISSON-DRIFT DIFFUSION SIMULATION OF A QUANTUM WELL
TUTORIALS

In this tutorial we will see an example of self-consistent calculation of Poisson-Driftdiffusion model together with EFA Schroedinger calculations (through the Modules efaschroedinger and driftdiffusion).
First we will bring a AlGaAs /GaAs quantum well based pn-diode to a bias point where energy levels in the well are suitable populated; then we will calculate the self consistent charge density in the GaAs quantum well.
A predictor-corrector method is applied to improve the convergence of the self-consistence cycle.


The following files should be present in the working directory:


DEVICE STRUCTURE

The structure is as follows:

  1. a barrier of AlGaAs
  2. a 10 nm GaAs quantum well
  3. a barrier of AlGaAs


Here is, for example, the Region well


Region well
{
  material = GaAs
  Doping 
  { 
    Nd = 1e15
    type = donor
    doping_level = 0.025
  }
}



We define a quantum Cluster which comprises the well region and two regions beside it


Cluster quantum
{
  mesh_regions = (well, buffer_quantum)
}



SIMULATION MODULES

We define the simulations:

  • strain (elasticity module) for the strain calculation with GaAs reference substrate
  • dd (driftdiffusion module) for the calculation of classical current; two boundary conditions (ohmic contacts) are defined.
  • quantum_el (efaschroedinger module) for schroedinger solution of electrons in the quantum cluster (will be used to calculate electron quantum charge density).
  • quantum_hl (efaschroedinger module) for schroedinger solution of holes in the quantum cluster (will be used to calculate hole quantum charge density).
  • selfconsistent  (selfconsistent module) for selfconsistent Poisson-Driftdiffusion- Schroedinger solution


CALCULATION OF STRAIN

First of all we need to calculate strain in the heterostructure.
We define a simulation belonging to the model elasticity, to be associated to the whole device.
Here is the Module:

Module elasticity

{ name = strain

regions = all
}
......................

Physics
{
body_force lattice_mismatch
{
reference_material =  AlGaAs
x = 0.3

}
}
Contact anode {type=clamp}


Note that a lattice_mismatch model is defined, with Al0.3GaAs as reference material.


TRANSPORT WITH DRIFT-DIFFUSION


We will calculate transport with driftdiffusion Module until a bias point where the quantized levels are likely to be occupied. Then we will use driftdiffusion coupled with efaschroedinger to provide self-consistent results

To this aim, we define a simulation as usual:

name = dd


belonging to the model driftdiffusion and associated to the whole device

regions = all


In Physics section, a srh recombination model is implemented

recombination srh  {}


Still 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


In this example, as we want to perform self-consistent calculations using both electron and hole particles, we need to define a model for the local DOS in each band, so we have, for conduction band:

conduction_band 
{
 density_of_states quantum
{
# where to get the quantum density from
quantum_simulation = quantum_el
barrier_regions = buffer_quantum
classical_DOS bulk_kp
{
strain_simulation = strain
}
}
}



With this block, we define for the conduction band a model density_of_states of type quantum.
This means that the local DOS (and thus also  the quantum electron density)  is obtained from the solution of the Schroedinger equation solved in the quantum simulation given by

quantum_simulation = quantum_el


which is a efaschrodinger simulation declared in the following efaschroedinger Module.

Moreover, we define also a classical_DOS model where we choose  an alternative model to be used to obtain the DOS inside the barrier regions (defined by keyword barrier_regions), or whenever the quantum density is not available, for example because it has not been yet calculated in the simulation.

classical_DOS bulk_kp 
{
strain_simulation = strain
}


In our case, we choose a model bulk_kp for the classical_DOS. The  bulk_kp model  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.

A very similar block is defined for valence band, where the local DOS (and thus also the quantum hole density) is going to be obtained from the EFA simulation quantum_hl  (see in the following)

 valence_band 
{
 density_of_states quantum
 {
# where to get the quantum density from
 quantum_simulation = quantum_hl
barrier_regions = buffer_quantum
classical_DOS bulk_kp
{
 strain_simulation = strain
}
}
}




QUANTUM CALCULATIONS


First, let's see how to set the quantum simulations to get the local DOS (and the quantum charge density), then we'll see how to implement a self consistent cycle between the quantum charge and the classical "Poisson-Drift-Diffusion" calculation.

1. SCHROEDINGER SOLUTION


To solve Schroedinger equation in the quantum regions we set quantum_el and quantum_hl simulations in two different efaschroedinger modules.

For electrons:


module efaschroedinger
{
  name = quantum_el
  regions = quantum 
} 



In Physics section, single band model for conduction band is selected:


{
particle = el
model = single_band
}

Note that this replaces the old syntax:

 model = conduction_band 


For holes, a kp 6x6 model for valence band is defined:


Physics
{
  model = 6x6
}


Note that this replaces the previous syntax:

 model = kp 
kp_model = 6x6

2. QUANTUM DENSITY

To calculate quantum charge density, we just need to add QuantumDensity to the output variables of module efaschroedinger, both for electrons and holes.


plot = (ProbabilityDensity, EigenEnergy, QuantumDensity)



SELF CONSISTENT POISSON-SCHROEDINGER INCLUDING CURRENT EQUATION

TiberCAD is able to perform Schroedinger-Poisson or even Schroedinger-Drift-Diffusion selfconsistent calculations.
For this purpose, a selfconsistent simulation has to be defined in the selfconsistent block.

Moreover, some parameters have to be defined in the Physics section of the driftdiffusion module.
Here, when use_density_predictor is set to true (default), a predictor-corrector scheme will be adopted in the selfconsistent cycle. The Poisson/Drift-Diffusion solver does not just take the particle densities as given by the Schroedinger calculation, but it will assume a dependency from the quantum and classical density at the previoius step (see the User Manual).

Again in Physics section of driftdiffusion module, we have to define which quantum simulation will provide the quantum density to the driftdiffusion simulation, which in turn will calculate the potential for the next step of quantum calculation.
As we have seen above, this is made e.g. for electrons, through the conduction_band block described earlier:


conduction_band 
{
density_of_states quantum
{
# where to get the quantum density from
quantum_simulation = quantum_el
barrier_regons = buffer_quantum
...................................................


In this way, the quantum_el simulation, that is the efaschroedinger module for electrons will provide the needed densities to driftdiffusion.
The same is needed for particle hole in a separate valence_band block, as described earlier.


The option  barrier_regions may be used to control the mixing between classical and quantum density:

barrier_regions = buffer_quantum

In this way the regions given by buffer_quantum will be regarded as pure barriers. In these regions a classical density will be added using the barrier materials bulk band edge.


Let's go now to the selfconsistent Module:


Module selfconsistent
{
  solve = (quantum_el, quantum_hl, dd)
# we do not use relaxation, but a predictor-corrector scheme
#relaxation_factor = 0.5
  max_iterations = 10
  abs_tolerance = 1e-3
  rel_tolerance = 1e-8
  monitor = true
}
}



Here, we select which simulations have to be run in the self-consistent cycle:


solve = (quantum_el, quantum_hl, dd)


In this way, at each step of the cycle, electron and hole charge densities, as calculated by the efaschroedinger Module, are used to perform poisson calculation together with the current transport; the potentials and charges thus found are sent back again to the efaschroedinger Module for a new quantum calculation. The cycle is repeated until the set tolerances are satisfied.

Note that the quantum density calculation makes sense only if there are populated levels in the quantum well; this is why, in this example, we will set, in solve declaration in the Simulation block, first a drift-diffusion sweep until an appropriate bias (1.8 V), and then, when the desired polarization bias for the pn diode is reached, the self-consistence cycle.

So, in the solve declaration, we specify the selfconsistent cycle selfconsistent after the strain and sweep calculations:


Simulation
{
  solve = (strain, sweep, selfconsistent)
}



RUN SIMULATIONS

tibercad quantum_well.tib


OUTPUT

  • strain_msh.dat: strain tensor components
  • dd_selfconsistent_msh.dat: selfconsistent drift-diffusion (Poisson) quantities
  • quantum_el_selfconsistent_msh.dat: probability densities, eigenvalues and quantum densities for electrons
  • quantum_hl_selfconsistent_msh.dat: probability densities, eigenvalues and quantum densities for holes


Here are the conduction and valence band profiles (in black) and electron and hole densities (blue and red, respectively) obtained from the self-consistent calculations (from the output file dd_selfconsistent_msh.dat)


selfconsistent band profiles and particle densities


ATTACHMENTS