In this tutorial we will see an example of selfconsistent calculation of PoissonDriftdiffusion model together with EFA Schroedinger calculations (through the Modules efaschroedinger and driftdiffusion).
First we will bring a AlGaAs /GaAs quantum well based pndiode 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 predictorcorrector method is applied to improve the convergence of the selfconsistence cycle.
The following files should be present in the working directory:
DEVICE STRUCTURE
The structure is as follows:
 a barrier of AlGaAs
 a 10 nm GaAs quantum well
 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 PoissonDriftdiffusion 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 Al_{0.3}GaAs as reference material.
TRANSPORT WITH DRIFTDIFFUSION 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 selfconsistent 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:
 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
In this example, as we want to perform selfconsistent 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 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.
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 "PoissonDriftDiffusion" 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 POISSONSCHROEDINGER INCLUDING CURRENT EQUATION
TiberCAD is able to perform SchroedingerPoisson or even SchroedingerDriftDiffusion 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 predictorcorrector scheme will be adopted in the selfconsistent cycle. The Poisson/DriftDiffusion 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 predictorcorrector scheme
#relaxation_factor = 0.5
max_iterations = 10
abs_tolerance = 1e3
rel_tolerance = 1e8
monitor = true
}
}
Here, we select which simulations have to be run in the selfconsistent 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 driftdiffusion sweep until an appropriate bias (1.8 V), and then, when the desired polarization bias for the pn diode is reached, the selfconsistence 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 driftdiffusion (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 selfconsistent calculations (from the output file dd_selfconsistent_msh.dat)
ATTACHMENTS
