Frequently Asked Questions (FAQ)

Dichlet vs. Neumann boundary conditions

There are three different boundary conditions that we use:

  • periodic: \(\psi(x=0) = \psi(x=L)\)

  • Dirichlet: \(\psi(x=0) = \psi(x=L) = 0\), and

  • Neumann: \(\frac{\text{d}\psi}{\text{d}x} = \text{const}\) at the left (\(x=0\)) and right (\(x=L\)) boundary. Typically, \(\text{const} = 0\).

By specifying both Dirichlet and Neumann boundary conditions, the system would be over-determined.

No Dirichlet points for Fermi levels found


I get the error message:

ERROR: No dirichlet points for Fermi levels were found!
Terminating program !!

Comment: Meanwhile, this error message is different. Once an update has been released, change the FAQ here.


The program does not know at which energy the Fermi level should be located. A solution is this:

   binary { name = "GaAs"  }
   contact{ name = "dummy" }
   fermi{ name = "dummy" bias = 0.0 }
   # only needed to define reference energy

This defines the Fermi level to be at 0 [eV] in the whole device.

Quasi-Fermi level

So-called quasi-Fermi levels which are different for electrons \(E_\text{F,n}\) and holes \(E_\text{F,p}\) are used to describe nonequilibrium carrier concentrations. In equilibrium the quasi-Fermi levels are constant and have the same value for both electrons and holes, \(E_\text{F,n}=E_\text{F,n}=0\text{ eV}\). The electron current is proportional to the electron mobility \(\mu_\text{n}(x)\), carrier density \(n(x)\) and the gradient of the quasi-Fermi level of the carriers, \(\nabla E_\text{F,n}(x)\), and analogously for the holes.

Quantum-Current-Poisson fails to converge


My Quantum-Current-Poisson calculation fails to converge. How can I avoid this problem?


The most common errors are the following:

  1. The maximum number of iterations has been chosen too small (run{} ==> outer_iteration{} ==> iterations) and the calculation just needs some more iterations.

  2. The number of electron or hole eigenstates has been chosen too small (e.g. quantum{} ==> region{} ==> Gamma{} ==> num_ev). Check the occupations in the files wf_spectrum_"name quantum region"_"name quantum model".dat. If the occupation does not drop from the ground state to the highest excited state by several orders of magnitude, you need to calculate more states (= more possibilities to fill in charges).

  3. The underrelaxation parameter has been chosen too large (run{} ==> outer_iteration{} ==> alpha_current). Check whether the solution oscillates (residuals do not drop continuously but increase in some iterations). Try to decrease the underrelaxation parameter in order to damp the oscillations.

  4. The minimum charge density in the current equation has been chosen too small (currents{} ==> minimum_density). Try to increase the minimum charge density to improve conditioning of the current equation. In fact, the current equation is solved with the charge density = max( real density, minimum_density).