next up previous contents
Next: 5.3 Interfaces Up: 5. Contacts and Boundaries Previous: 5.1 Quantities, Segments, Boundaries,

5.2 Equation Assembly

MINIMOS-NT solves f = 0 using a damped Newton algorithm:

- $\displaystyle \mathbb {J}$k . u = f(xk) (5.1)
x* = xk + d . u (5.2)
$\displaystyle \mathbb {J}$ = $\displaystyle {\frac{\partial \mathbf{f}}{\partial \mathbf{x}}}$ (5.3)

Applying the finite boxes discretization scheme to the basic semiconductor equations one gets for each quantity $ \nu_{i}^{}$ located at the grid point i constitutive relations fS$\scriptstyle \nu_{i}$ of the form

fS$\scriptstyle \nu_{i}$ = $ \sum_{j}^{}$F$\scriptstyle \nu_{i,j}$ + Gi = 0 (5.4)

where j runs over all neighboring grid points in the same segment, F$\scriptstyle \nu_{i,j}$ is the flux between those grid points, and Gi is the source term at grid point i. (5.4) controls the value of $ \nu$. For grid points located at boundaries or interfaces, the situation is different. Despite of general boundary conditions, the two extreme cases Dirichlet (5.5) and Neumann (5.6) are of fundamental importance.
$\displaystyle \nu$ = a (5.5)
F$\scriptstyle \nu$ = b (5.6)

In case of a Dirichlet condition, (5.4) is not needed as the value of $ \nu$ is determined by (5.5). In case of a Neumann condition (5.6) can be used to calculate (5.4) as fluxes over contacts and interfaces cannot be obtained by discretizing the semiconductor equations.

As is obvious from these considerations, boundary and interface points have to be handled in a different manner compared to points located inside the segments. In a generic device simulator like MINIMOS-NT which can handle an arbitrary number of contacts, segments, and interfaces, efficient handling of these situations is of utmost importance. This is achieved by treating the segments separately from the boundary conditions in such a way that all segment points are treated in the same manner. (5.4) is calculated for all segment points including boundary points. The derivatives of (5.4) for all grid points ( fS) with respect to the solution vector x yield the segment matrix $ \mathbb {J}$S.

The system matrix $ \mathbb {J}$ (Jacobian) will be assembled from two parts, namely the direct part $ \mathbb {J}$B (boundary models) and the transformed part $ \mathbb {J}$S (segment models). The latter will be multiplied by the so called row transformation matrix $ \mathbb {T}$B before contributing to the system matrix $ \mathbb {J}$. The same treatment applies for the right hand side vector b.

$\displaystyle \mathbb {J}$ = $\displaystyle \mathbb {J}$B + $\displaystyle \mathbb {T}$B . $\displaystyle \mathbb {J}$S (5.7)
b = bB + $\displaystyle \mathbb {T}$B . bS (5.8)

The direct part of the system matrix $ \mathbb {J}$B and the row transformation matrix $ \mathbb {T}$B are set up by the boundary models, while the transformed part $ \mathbb {J}$S will be handled by the segment models. $ \mathbb {T}$B is initialized to be the unity matrix. In the actual implementation only entries different to the unity matrix will be stored. Direct matrix multiplication is avoided by assembling the transformation matrix in a pre-pass. The transformation matrix allows for arbitrary linear combination of the equations found in $ \mathbb {J}$S and is normally extremely sparse with most of the non-zero entries being $ \pm$1. For the special case with the main-diagonal entry ti, i = 0, the constitutive relation for grid point i will not contribute to the final constitutive relation i. Another special case is ti, j = tj, j = 1 which simply combines rows i and j of $ \mathbb {T}$S and adds them to row j of $ \mathbb {T}$B.

next up previous contents
Next: 5.3 Interfaces Up: 5. Contacts and Boundaries Previous: 5.1 Quantities, Segments, Boundaries,
Tibor Grasser