Abbildung 4.1: Mittels einer binären
Suche wird die Box (definiert durch das Gitter) bestimmt, in der das
Teilchen eingeordnet wird. Die Boxen sind von links oben nach rechts
unten durchnumeriert.
Wie in Abschnitt 4.2 bereits erwähnt, wird das Simulationsgebiet zuerst mit einem sehr dichten Anfangsgitter mit konstantem Gitterabstand überzogen. Dieses Gitter unterteilt das Simulationsgebiet in Histogrammboxen (Quadrate im zweidimensionalen, Würfel im dreidimensionalen Fall), deren Seiten von aufeinanderstoßenden Gitterlinien (im zweidimensionalen Fall, sonst Gitterebenen) begrenzt werden. Diese Boxen sind programmintern in einer vorgegebenen Reihenfolge durchnumeriert - in Abb. 4.1 etwa von links oben nach rechts unten.
Abbildung 4.2: Ausschnitt aus
einem Histogramm vor dem Löschen einer Gitterlinie. Die Zahlen geben
die Anzahl der Ionen in der jeweiligen Box an.
Abbildung 4.3: Histogramm,
nachdem eine Gitterlinie entfernt wurde: Die Teilchenzähler der
angrenzenden Boxen werden addiert.
Abbildung 4.4: Histogramm
nach dem Wiedereinfügen einer Gitterlinie: Die Aufteilung der
Teilchen auf die neuen Boxen ist nicht eindeutig bestimmt. Es kommt zu
einer unphysikalischen Drift der Teilchen und damit zu einer
Verbreiterung des Dotierungsprofils.
Für jede Box gibt es einen Teilchenzähler, der in einer Tabelle abgespeichert wird. Allerdings werden nur jene Boxen in diese Tabelle aufgenommen, in welchen Ionen liegen, das heißt also, wo der Zählerstand von Null verschieden ist. Dadurch wird der Speicheraufwand verringert. Jedesmal, wenn ein Partikel an einem Punkt zum Stillstand kommt, muß nun die umgebende Box B() bestimmt werden. Für die Umrechnung einer gespeicherten Box auf die reale Boxposition wird eine Indextabelle verwendet, welche einen effizienten Zugriff auf die Daten erlaubt. Zu jedem Teilchenzähler in der Tabelle gibt es also einen Eintrag mit der Boxnummer, für die dieser Zähler gilt.
Um diejenige Box zu finden, in der ein Teilchen zum Stillstand kommt, was gleichbedeutend damit ist, B() für einen bestimmten, vorgegebenen Punkt zu ermitteln (siehe Abb. 4.1), wird eine binäre Suche durchgeführt. Dabei wird zuerst aus den Koordinaten des Endpunktes einer Ionentrajektorie die Nummer der Box ermittelt und dann dieser Index in der Indextabelle binär gesucht. Dadurch wird die gesamte Rechenzeit um bis zu 10 % gegenüber dem vorher verwendeten linearen Suchalgorithmus vermindert. Die Anzahl der Boxen, die einen von Null verschiedenen Zählerstand aufweisen, wird mitgeführt, und falls ein vordefiniertes Maximum überschritten wird, dann wird die entsprechend den oben besprochenen Kriterien am wenigsten wichtige Gitterlinie gelöscht.
Im Gegensatz zu anderen Algorithmen für die Gitteradaption können bei der Simulation der Ionen-Implantation mittels der Monte-Carlo Methode keine Gitterlinien mehr eingefügt werden, weil die Aufteilung der Teilchen in die durch die Teilung neu entstandenen Boxen nicht eindeutig bestimmt werden kann. Würden nämlich Gitterlinien eingefügt, dann käme es zu einer ungewollten und unphysikalischen Verschiebung von Partikeln (in den Abb. 4.2 - Abb. 4.4 ist die ungewollte ,,Teilchendrift`` deutlich zu erkennen), was eine Verbreiterung und Verflachung des Profiles zur Folge hätte. Da Gitterlinien also nur gelöscht werden können, muß neben den vorgenannten, eigentlichen Kriterien für die Gitteradaption noch vorsichtig getestet werden, ob eine Linie wirklich gelöscht werden kann. Diese Forderung ist aber relativ einfach zu erfüllen. Es muß gewährleistet sein, daß das Gitter möglichst gleichförmig ist. Daher ist die Einhaltung von Bedingung (4.5) unumgänglich.
Wird eine vorgegebene Maximalanzahl von Histogrammboxen überschritten, so muß zumindest eine Gitterlinie gelöscht werden; es ist zwar auch möglich, daß mehrere Gitterlinien entfernt werden müssen. Es wird aber versucht, diesen Fall möglichst zu verhindern. Die benachbarten Boxen, die durch diese Gitterlinie getrennt waren, werden zusammengelegt, wie es in Abb. 4.5 und Abb. 4.6 gezeigt
Abbildung 4.5: Zweidimensionales Histogramm vor dem Löschen einer
Gitterlinie. Das Volumen der Quader entspricht der Konzentration in
der Histogrammbox.
Abbildung 4.6: Zweidimensionales Histogramm nach dem Löschen einer
Gitterlinie. Die Boxen entlang der Gitterlinie werden zusammengelegt
und die Teilchenzähler addiert.
wird. Die Teilchenzähler der ursprünglich aneinandergrenzenden Boxen werden addiert. Außerdem muß natürlich auch die Indextabelle konsistent geändert werden.
Typischerweise würden während der ersten Adaptionsschritte nur Gitterlinien gelöscht, die leere Histogrammboxen begrenzen, wenn keine speziellen Überlegungen angestellt werden. Werden solche Linien entfernt, so wird der Speicherbedarf nicht verringert, weil ja nur besetzte Boxen gespeichert werden. Da also keine Boxen zusammengelegt werden, muß nach weiteren geeigneten, löschbaren Linien gesucht werden. Es entstünden daher Regionen, in denen sehr viel größere Boxen vorkommen als in anderen Teilen. Wenn dann später in einer dieser übergroßen Boxen ein Teilchen zur Ruhe kommt, verursacht die Ortsunschärfe einen nicht zu vernachlässigenden Fehler, weil die Konzentration auf einem Gitterpunkt aus der Anzahl der Teilchen in den umgebenden Boxen gewichtet mit der jeweiligen Boxengröße bestimmt wird. Außerdem schlägt sich dieses Problem auch in der Rechenzeit nieder: Die Maßzahlen müssen immer wieder neu bestimmt werden, und die zu löschende Linie muß auch bestimmt werden.
Dieses Problem wird aber wieder durch die Bedingung (4.5), die eine möglichst homogene Boxgröße garantiert, entschärft. Darüber hinaus wird durch diese Bedingung noch zusätzlich die Anzahl der Adaptionsschritte minimiert. Das hat auch eine Verminderung der Rechenzeit zur Folge.
Eine eventuell denkbare Verbesserung der Gitteradaptionsmethode wäre, ein hierarchisches Gitter aufzubauen und dann nur immer Gitterabstände nach Gl. (4.6) zuzulassen. Die Generation eines solchen Rechengitters wäre etwa mittels eines Quadtrees für den zweidimensionalen oder eines Octrees (siehe hiezu Kapitel 5) im dreidimensionalen Fall möglich.
Eine andere Verbesserungsmöglichkeit wäre noch, daß man nicht immer von einer Seite her zu löschen beginnt, sondern abwechselnd von den verschiedenen Seiten des Rechengebietes oder auch aus der Mitte, und damit den Algorithmus symmetrisch macht. Ansonsten wird immer von einer Seite her gelöscht, weshalb es vorkommen kann, daß trotz symmetrischer Bedingungen auf einer Seite des Simulationsgebietes mehr Gitterlinien liegen als auf der anderen. Diese Verbesserung würde also helfen, Unsymmetrien zu vermeiden.