Simple quantum cascade structure

In this tutorial we simulate a simple quantum cascade structure that has been presented in the following paper:

Resonant Tunneling Through Double Barriers, Perpendicular Quantum Transport Phenomena in Superlattices, and Their Device Applications
F. Capasso, K. Mohammed, A.Y. Cho
IEEE Journal of Quantum Electronics QE-22 (9), 1853 (1986)

Input files used in this tutorial are followings:

  • / *

These are available in the sample file folder.

We can generate the following picture that is based on Fig. 3 of

Simulation of quantum cascade lasers - optimizing laser performance (in English)
S. Birner, T. Kubis, P. Vogl
Photonik international 2, 60 (2008)
Simulation zur Optimierung von Quantenkaskadenlasern (in German)
S. Birner, T. Kubis, P. Vogl
Photonik 1 (2008)

It shows the conduction band edge profile of an Al0.48In0.52As/In0.53Ga0.47As superlattice at an electric field of -89 kV/cm. The single-band effective-mass Schrödinger equation is solved for this band profile. The wave functions (psi²) of this quantum cascade structure are shown.


The basic idea of such a structure is to depopulate the lowest eigenstate of each quantum well efficiently by bringing it into resonance with the third eigenstate of the next quantum well (resonant tunneling).

The transition second eigenstate \(\rightarrow\) lowest eigenstate should be a nonradiative intersubband transition.

On the other hand, the transition third eigenstate \(\rightarrow\) second eigenstate should be a radiative intersubband transition, i.e. a photon is emitted.

Another important condition for a quantum cascade laser is population inversion, i.e. the occupation of the third eigenstate must be much higher than the occupation of the second eigenstate and lowest eigenstate.

  • The input file 1DQCL_simple_nnp/* should be rather intuitive and self-explanatory. Documentation for each keyword and each specifier can be found here: Keywords

  • In the nextnano++ sample file, the electric field is applied by specifying the keyword contacts as follows:

        name = "leftgate"
        bias = 0.0
        name = "rightgate"
        bias = 1.36081          # corresponds to electric field of F = -89 kV/cm

    In the keyword structure, “leftgate” is defined at x = [-1, 0] and “rightgate” is at x = [152.9, 153.9]. Thus the electric field applied by this specification is -1.36081 [V] / 152.9 [nm] = -89 [kV/cm]

  • We can also apply the constant electric field throughout the …..


The output files are ASCII files.


The conduction and balence band edges can be found in the following file:

  • bias_0000/Quantum/bandedges.dat (nextnano++)

  • band_profile/cb_Gamma.dat (nextnano³, conduction band edge only)

If one plots the conduction band profile, one gets the following figure.


There are six Al0.48In0.52As barriers and five In0.53Ga0.47As wells. The conduction band offset is 0.51 eV.


The 40 eigenvalues that were calculated can be found in these files. The units are [eV].

  • bias_0000/Quantum/wf_energy_spectrum_quantum_region_Gamma_0000.dat (nextnano++)

  • wavefunctions/ev_cb1_qc1_sg1_deg1.dat (nextnano³)

The eigenvalues are also contained in these files, i.e. the eigenvalues for each grid point

  • bias_0000/Quantum/wf_probabilities_shift_quantum_region_Gamma_0000.dat (nextnano++)

  • wavefunctions/cb1_qc1_sg1_deg1_psi_squared_shift.dat (nextnano³)

1st column

2nd column

3rd column

41st column

grid points in units of [nm]

1st eigenvalue in units of [eV]

2nd eigenvalue in units of [eV]

40th eigenvalue in units of [eV]

If one plots these columns (together with the conduction band edge) one obtains the following picture:



The figure shows only the following energy levels: 1,2,3,4,5,9,10,12,16,18,20,26,27,30,37


The square of the wave functions (\(\psi^2\)) of the 40 eigenstates can be found in these files.

  • bias_0000/Quantum/wf_probabilities_shift_quantum_region_Gamma_0000.dat (nextnano++)

  • wavefunctions/cb1_qc1_sg1_deg1_psi_squared_shift.dat (nextnano³)

1st column

42nd column

43rd column

81st column

grid points in units of [nm]

\(\psi^2\)of 1st eigenstate

\(\psi^2\)of 2nd eigenstate

\(\psi^2\)of 40st eigenstate


In order to be able to plot the wave functions nicely into the conduction band edge profile, we shift the square of the wave function by its corresponding energy.

If one plots these columns (together with the conduction band edge) one obtains the following picture:



The figure shows only the following wave functions: 1,2,3,4,5,9,10,12,16,18,20,26,27,30,37

Now the lowest eigenstate of each quantum well is in resonance with the third eigenstate of the next quantum well. This leads to the depopulation of the lowest eigenstate of each quantum well.

Photon should be emitted with the radiative intersubband transition 3 \(\rightarrow\) 2 whreas 2 \(\rightarrow\) 1 should be nonradiative intersubband transition.

Effective masses

The effective masses that were used for each grid point can be found in these files.

  • Structure/charge_carrier_masses.dat (nextnano++)

  • material_parameters/conduction_band_masses1D.dat (nextnano³)


We need to add the following option into the sample file for nextnano++.

        charge_carrier_masses{ boxes = yes }
  • 1st column: grid points in units of [nm]

  • other columns:

    • nextnano++: effective mass tensor components of Gamma and HH valley in units of [m0]. When we use other valleys for the simulation, then these columns shows the effective mass tensor components in that valleys.

    • nextnano³: effective mass tensor components of Gamma, L and X valleys in units of [m0].

These masses have been calculated from the binaries InAs, GaAs and AlAs for the relevant ternaries, including bowing parameters.

Intersubband matrix elements

Experienced users might be interested in having a look at the intersubband matrix elements.

We can find the intersubband (or intraband) matrix elements pz, the oscillator strengths and the transitin energies by adding the followings into quantum{} in

    output_matrix_elements = yes
    output_transition_energies = yes
    output_oscillator_strengths = yes

The relevatnt output files are

  • bias_0000/Quantum/intraband_matrix_elements_quantum_region_Gamma_100.txt (nextnano++)

  • bias_0000/Quantum/transition_energies_quantum_region_Gamma_Gamma.txt (nextnano++)

In the output file of the nextnano³ sample file, we can already have them here:

  • wavefunctions/intraband_pz1D_cb001_qc001_sg001_deg001_dir.txt (nextnano³)

More information and documentation on these matrix elements are available here: