2.9 Iteration scheme and convergence

The system of equations formed by the Poisson and continuity equations are solved in an iterative manner (see Fig. 2.5) based on the work of Gummel. [ 15 ] First, a guess is made for the potential and the carrier densities. With this guess, a correction \(\delta V(x)\) to the potential is calculated from the Poisson equation: this Poisson solver is iterative and keeps on improving the potential until the changes \(\delta V\) become very small (i.e. smaller than \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} tolPois}}\)). This new potential is then used to update the carrier densities by solving the continuity equations. This process, the main loop, is repeated until convergence is reached.

How do we know when the main loop has converged? Of course, the Poisson solver should have converged. Depending on the numerical settings (see parameter \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} convVar}}\)), we monitor either the relative change in carrier densities (including the ions), or the error on the current density. We can also choose to do a combination of the two.

If we focus on the carrier densities (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} convVar}}\) = 1), then the iteration stops and convergence is deemed successful if the relative change in the densities is smaller than a preset tolerance (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} tolDens}}\)). Next, the program computes the internal and external current densities and their error. The error (in A/m\(^2\), so it is absolute rather than relative) is based on the root-mean-square deviation of the current from its average value.

Alternatively, if we are mostly interested in the current-voltage characteristic and the internal variables (most notably the carrier and ion densities) are of secondary interest, we can focus on the current density (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} convVar}}\) = 2). In this case, convergence is deemed successful if the relative error in the current is smaller than its tolerance \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} tolCurr}}\). Please note, that if the current itself is very small (equilibrium conditions), then this is problematic and convergence is successful if the absolute error (so in A/m\(^2\)) is smaller than a constant (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} tolCurrAbs}}\) in DDTypesAndConstants, set to \(q\) A/m\(^2\)).

There are two other options: We can require that the density or the current is sufficiently accurate (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} convVar}}\) = 3), or we require that both criteria are met (\(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} convVar}}\) = 4). The former is somewhat lax. The latter is, of course, more strict. Section 5.3 provides some guidance on the appropriate choice of values for these parameters.

\includegraphics[width=0.4\linewidth ]{figs/Iteration_scheme.svg}
Figure 2.5 Simplified flow diagram of the simulation program. To solve the basic equations, Gummel iteration is used. First, the internal voltage \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vint}}\) is applied to the electrodes (see Eq. (??)) and a guess is made for the potential and carrier densities. Subsequently, a correction \(\delta V\) to the potential is calculated from the Poisson equation. This correction is added to the potential \(V\) and this is repeated until convergence is reached. Next, the carrier densities are calculated from the new potential by solving the continuity equations. This entire procedure is repeated until converged is reached. The external current and voltage, \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Jext}}\) and \(\mathtt{\require{color}{\color[rgb]{0.000000000000000,0.500000000000000,0.500000000000000} Vext}}\) are calculated and the output is shown.