Konfiguration des Drift-Diffusions-Solvers
Der Drift-Diffusions-Solver kann über die Option „Konfigurieren“ im Menüband „Elektrisch“ eingestellt werden. Dadurch wird das Konfigurationsfenster des Solvers geöffnet, in dem numerische Parameter wie Iterationsgrenzwerte, Fehlertoleranzen und Konvergenzstrategien angepasst werden können. Diese Optionen ermöglichen es dem Benutzer, die Leistung und Stabilität des Solvers für verschiedene Geräte-Simulationen zu steuern.
Konfiguration des elektrischen Solvers
Die elektrische Motor-Simulation von OghmaNano löst ein eng miteinander verknüpftes System nichtlinearer Gleichungen (Poisson-Gleichung + Drift-Diffusions-Gleichung sowie alle aktivierten kinetischen Gleichungen). Diese Gleichungen enthalten Exponentialfunktionen und starke Kopplungen, weshalb sie iterativ mithilfe einer Newton-Raphson-Methode auf einer einzigen, globalen Jacobi-Matrix gelöst werden. In der Regel müssen Sie die Standardeinstellungen nicht ändern, aber über das Konfigurationsfeld können Sie schwierige Fälle stabilisieren, einfache Fälle beschleunigen oder untersuchen, wie sich die numerischen Berechnungen verhalten.
Öffnen Sie die Konfiguration, indem Sie zum Reiter „Elektrisch“ gehen, „Drift-Diffusionsmodell“ auswählen und „Konfigurieren“ anklicken – siehe DD-Solver öffnen. Daraufhin wird das in DD-Solver-Fenster gezeigte Fenster geöffnet, in dem Sie einstellen können, wie der Solver iteriert und konvergiert.
Welche Funktionen die einzelnen Abschnitte steuern.
Das Panel ist in vier Hauptbereiche unterteilt, die verschiedene Phasen eines Durchlaufs steuern: Erste Iteration, Folgende Iterationen, Spannungsanhebung und Abbruchstrategie. In allen Phasen ist das Grundprinzip gleich: Beginnend mit einer Schätzung werden die unbekannten Variablen mit Hilfe von Newton-Schritten aktualisiert, und der Prozess wird beendet, wenn der globale Fehler ausreichend klein ist. Eine Begrenzung schränkt die maximale Aktualisierung pro Schritt ein, um zu verhindern, dass der Solver in physikalisch unrealistische Bereiche gelangt. Kleine Begrenzungen → langsamer, aber sehr stabil; große Begrenzungen → schneller, aber potenziell instabil.
Erste Iteration
- Maximale Anzahl von elektrischen Iterationen (erster Schritt) – obere Grenze für die Newton-Schritte bei der allerersten Berechnung (oft bei 0 V im Dunkeln). Ein größerer Wert hilft bei schwierigen Kaltstarts.
- Elektrische Klemme (erster Schritt) – Skaliert die maximale Newton-Aktualisierung im ersten Schritt. Als Faustregel gilt: 0,1 ist sehr sicher (langsam), 1,0 ist ein guter Standardwert, ≥2,0 kann schnell sein, ist aber weniger stabil.
- Gewünschte Fehlertoleranz des Solvers (erster Schritt) – Zielwert für die Konvergenz beim ersten Lösungsschritt (kleinerer Wert = höhere Genauigkeit, aber langsamere Berechnung). Üblicherweise akzeptiert: nicht schlechter als \(1\times10^{-5}\); für eine robuste Initialisierung können Sie \(1\times10^{-8}\)–\(1\times10^{-9}\) einstellen.
Spätere Versionen
- Maximale Anzahl an elektrischen Iterationen – Begrenzung der Iterationsanzahl für alle nachfolgenden Berechnungen nach der ersten.
- Elektrische Klemme – Wie oben beschrieben, wird diese jedoch bei jedem Schritt angewendet, außer beim ersten. Um die Bearbeitung zu beschleunigen, kann man dies im Vergleich zum ersten Schritt oft etwas vereinfachen.
- Gewünschte Fehlertoleranz des Solvers – Zielwert für die Konvergenz bei den einzelnen Schritten. Achten Sie darauf, dass dieser Wert mit Ihren Anforderungen an die Genauigkeit übereinstimmt; \(1\times10^{-6}\)–\(1\times10^{-8}\) sind gängige Werte.
Spannungsanstieg
Wenn Sie von einem anfänglichen Ruhezustand (z. B. 0 V) zu einem gewünschten Betriebspunkt (möglicherweise einer hohen Spannung) übergehen, sind die Zwischenwerte oft nur Übergangspunkte. Mit diesem Baustein können Sie größere Toleranzen oder andere Begrenzungswerte verwenden, um den Übergang schneller durchzuführen, während die endgültigen Betriebspunktwerte weiterhin streng eingehalten werden.
- Maximale Anzahl von elektrischen Iterationen (Anstiegsphase) – Begrenzung für jeden Schritt der Anstiegsphase.
- Elektrische Klemmvorrichtung (Rampensteuerung) – Steuerung der Schrittweite während der Rampenphase.
- Gewünschte Solver-Fehlertoleranz (Anstiegsfunktion) – das Konvergenzziel wird nur für Anstiegsphasen verwendet.
- Mindestanzahl an Newton-Iterationen – Stellen Sie sicher, dass mindestens diese Anzahl von Schritten durchgeführt wird, damit der Solver nicht vorzeitig abbricht, nur weil der anfängliche Restwert zufällig klein ist.
Ausstiegsstrategie
- Newton-Solver: Intelligenter Abbruch – Wenn die Residuen „im Rauschen auf und ab springen“ (ohne einen erkennbaren Trend), wird die Iteration beendet und der bisher beste Zustand akzeptiert.
- Lösen Sie das kirchhoffsche Stromgesetz mit dem Newton-Solver – Fügen Sie die KCL-Nebenbedingungen direkt in die Jacobi-Matrix ein, um eine präzisere Stromkontinuität zu gewährleisten.
- Abbruch bei Konvergenzproblemen / Abbruch bei invertiertem Fermi-Niveau – Strikte Abbruchbedingungen für offensichtlich fehlerhafte Zustände.
Art des Solvers und verwendete Werkzeuge
- Zu verwendender Newton-Solver – Wählen Sie den Algorithmus:
none– Keine elektrische Lösung (nur optische/thermische Lösung).newton– Standard-Newton-Solver (eindimensional).
- Matrix-Solver / Solver für komplexe Matrizen – Wählen Sie die zu verwendende Methode für die Lösung linearer Gleichungssysteme.
- Slotboom T0 / D0 / n0 – Parameter für
newtonnorm. - Verwenden Sie den Newton-Cache (experimentell), um große, temporäre Daten auf der Festplatte zu speichern und so den Speicherbedarf zu reduzieren (experimentell).
- Ausführlichkeit der Solver-Ausgabe – Steuert, wie viele Fortschrittsinformationen ausgegeben werden.
Praktische Anleitungen
Wenn ein Fall besonders empfindlich ist (hohe Dotierung, extreme Felder, starke Injektion), verringern Sie die Klemmkraft und verschärfen Sie die Toleranz für den ersten Schritt. Bei einfachen, unkomplizierten Fällen können Sie die Klemmkraft erhöhen, um die Geschwindigkeit zu steigern. Verwenden Sie den Rampenblock, um schnell zu Ihrem Arbeitspunkt zu gelangen, und setzen Sie dort strengere Toleranzen durch.
Siehe auch: Der in DD Solver Open angezeigte Konfigurationseinstiegspunkt und das vollständige Dialogfenster in DD Solver Window.
Stabilität des Solvers
OghmaNano ist ein numerischer Simulator, der ein eng gekoppeltes System von Differentialgleichungen für Ladung, Potential und Rekombination löst. Wie jeder numerische Solver benötigt auch dieser physikalisch realistische Eingangsparameter, um erfolgreich zu konvergieren. Werte, die exakt null, unendlich groß sind oder über zu viele Größenordnungen verteilt sind, können dazu führen, dass die zugrunde liegenden Matrixoperationen instabil werden. Um Ihnen zu helfen, diese Probleme zu vermeiden, werden in diesem Abschnitt einige praktische Aspekte bei der Konfiguration Ihrer Simulationen erläutert.
Sehr große und sehr kleine Zahlen vermeiden
Öffnen Sie MATLAB (oder Octave unter Linux) und geben Sie den folgenden Ausdruck ein: \(((1e-1+1e1)-1e1)/1e-1\). Bevor Sie die Eingabetaste drücken, überlegen Sie sich das Ergebnis: \(1e1\) und \(-1e1\) heben sich auf, sodass \(\frac{1e-1}{1e-1}=1\) übrig bleibt. Ersetzen Sie nun die Zehnerpotenzen durch 19 und versuchen Sie Folgendes: \(((1e-19+1e19)-1e19)/1e-19\). Auch hier sollte das Ergebnis auf dem Papier \(1\) sein.
Wenn Sie jedoch den Computer die Berechnung durchführen lassen, ist das Ergebnis \(0\) und nicht \(1\). Das liegt daran, dass Computer Zahlen mit begrenzter Genauigkeit speichern (etwa 15–16 Dezimalstellen auf einem modernen Gerät). Wenn Sie \(1e-19\) zu \(1e19\) addieren, geht der kleinere Wert beim Runden verloren, sodass der Computer stattdessen \(1.000000000000000e19\) anzeigt, anstatt \(1.0000000000000000001e19\). Wenn Sie dann \(1e19\) subtrahieren, ergibt sich genau Null, und der Beitrag von \(1e-19\) verschwindet.
Die Genauigkeit bei der numerischen Darstellung ist wichtig.
Wenn Ihre Simulation Parameter umfasst, die über einen zu großen Wertebereich verteilt sind, kann die Genauigkeit des Solvers beeinträchtigt werden. Versuchen Sie, extreme Verhältnisse zu vermeiden, insbesondere bei der Mobilität oder der Zustandsdichte, um die Stabilität zu gewährleisten.
Alle Computer sind davon betroffen, unabhängig von ihrer Leistung. Für Gerätesimulationen bedeutet dies, dass Sie Parameterbereiche vermeiden sollten, die Matrizen mit sehr großen und sehr kleinen Zahlen nebeneinander erzeugen. Beispielsweise führen die Mobilitäten von \(1e-19\) zusammen mit \(1e5\) zu numerischen Problemen. Dies ist besonders wichtig bei der Simulation von Isolatoren.
Vermeiden Sie Nullen.
Nullwerte führen zu Fehlern, die durch Division durch Null entstehen. Stellen Sie die Mobilität, den Wirkungsquerschnitt für die Einfangreaktion, die Form der Enden der Verteilung oder die Zustandsdichte nicht exakt auf Null ein. Es ist jedoch zulässig, Null für Rekombinationskonstanten zu verwenden.
⚠️ Verwenden Sie keine exakten Nullen.
Ersetzen Sie Nullen durch sehr kleine Werte (z. B. \(1e-30\)), um numerische Instabilitäten zu vermeiden und gleichzeitig eine gute Annäherung an „fast Null“ zu gewährleisten.
Sehr große Veränderungen in der Bandlücke
Große Energiesprünge innerhalb der Bandlücke führen zu Trägerdichten, die entweder extrem gering oder extrem hoch sind, was direkt zu den gleichen Präzisionsproblemen führt, die in Vermeidung sehr großer und sehr kleiner Zahlen beschrieben werden. Achten Sie darauf, die Energie ausreichend fein zu diskretisieren, um physikalisch unplausible Sprünge zu vermeiden.
🔍 Überprüfen Sie Ihr Netz.
Wenn die Diskretisierung Ihrer Bandlücke zu grob ist, können unrealistische Trägerdichten entstehen. Verfeinern Sie das Netz, um die Werte innerhalb eines numerisch stabilen Bereichs zu halten.