The use of the discretized and linearized semiconductor equations yields large
linear equation systems of the form
. Such a system has to be solved with
a given accuracy.
As described in [65], the results of both direct and iterative
solvers depend on the accuracy of digitally stored numbers and the condition of
the system matrix
.
The internal storage representation of numbers is responsible for their
accuracy. The assembly module currently provides the C data type
double according to its IEEE norm 754-1985 standard for binary
floating-point arithmetic. This standard defines four binary formats for 32-bit
single, (normally 43-bit) single-extended, 64-bit double, and (normally 80-bit)
double-extended precision numbers. They are composed of three parts. A double
precision number has a sign bit being either zero or one, an eleven bit
exponent ranging from
to
, and
a 52 bits fraction [60]. The standard also defines how zero,
infinity, and so-called NaNs (Not a Number) are to be encoded. NaNs represent
undefined or invalid results, for example the square root of a negative
number. For the sake of completeness it is stated that a complex-valued number
stores both the real and imaginary part in the double precision
format. Furthermore, due to the limited representation results of mathematical
formulae generally vary although they are correctly changed according to
mathematical laws such as the commutative law.
The condition of a matrix can be used to estimate the worst possible error of
the solution vector
of
obtained by Gaussian
elimination using a restricted number representation. This is measured by the
condition number of that matrix. Well-conditioned matrices have a small
condition number [51]:
![]() |
(4.3) |
The larger the value of
the poorer is the condition of the system
matrix. Iterative solvers are particularly sensitive to bad condition numbers
which can then cause
An important way to handle ill-conditioned matrices (
)
is to precondition the matrix
. Hence, iterative methods usually
determine a second matrix that transforms the system matrix into one with a
better condition. This second matrix is called a preconditioner and
improves the convergence of the iterative solver (see Section 5.2.5).
Beside the purely numerical concept of preconditioning, a good approach to improve the condition during the assembly process is to aim for diagonal dominance of the equations, since it is a necessary (but not sufficient) condition in the proof of convergence for a range of iterative solver schemes. A matrix is diagonally dominant, if in all equations the absolute value of the diagonal element is larger than the sum of the absolute values of all off-diagonal elements in all equations, and equal in at least one row [52]:
![]() |
(4.4) |
![]() |
(4.5) |