Strona główna Przykłady Zrzuty ekranu Instrukcja obsługi Logo Bluesky. YouTube ☰
OghmaNano Platforma do symulacji wielofizycznych procesów zachodzących w optoelektronicznych urządzeniach i systemach fotonicznych. POBIERZ Przewodnik szybkiego uruchomienia

Stabilność algorytmu OFET Solver: błędy siatki, konwergencji i symulacji.

W tej sekcji wyjaśniono, jak diagnozować problemy ze stabilnością i zbieżnością rozwiązań w dwuwymiarowych symulacjach OFET. Symulacje jednowymiarowe są zazwyczaj stabilne i szybkie, ale wraz ze wzrostem wymiarowości z 1D do 2D i 3D liczba sprzężonych równań i powiązanych elementów gwałtownie wzrasta. Złe wybory siatki, nierealistyczne wartości ruchliwości, słabo zdefiniowane kontakty lub zbyt duże kroki polaryzacji mogą zatem powodować, że solver oparty na równaniach transportu ładunku przestanie generować zbieżne wyniki.

W tym miejscu celowo zastosujemy kilka prostych konfiguracji, aby wywołać sytuację, w której proces nie zbiega się do rozwiązania, a następnie zdiagnozujemy przyczyny tego zjawiska i sposoby jego naprawy. Odtwarzając samodzielnie te typowe scenariusze niepowodzeń, nauczysz się rozpoznawać objawy i stosować odpowiednie metody naprawcze (np. dostosowywanie siatki, zmniejszanie kroku korekcji lub modyfikowanie ekstremalnych parametrów materiału), aby uzyskać stabilne rozwiązanie.

1. Problemy ze stabilnością algorytmu spowodowane zbyt niską wartością współczynnika ruchliwości.

W wielu przypadkach problemy z konwergencją wynikają z użycia nierealnych wartości wejściowych. Aby to zilustrować, celowo ustawiamy ruchliwość nośników na wartość 0 i analizujemy wynikające z tego błędy. Oczywiście, w rzeczywistych materiałach ruchliwość nigdy nie jest dokładnie równa zeru – zawsze ma skończoną wartość – ale ten przykład pokazuje, co się dzieje, gdy algorytm otrzymuje nierealistyczny parametr. Ruchliwość jest konfigurowana w edytorze parametrów elektrycznych OFET. Jeśli wartość zostanie ustawiona poza fizycznie sensownym zakresem, równania dryfu i dyfuzji mogą stać się źle uwarunkowane lub algorytm może nie osiągnąć konwergencji.

Otwórz edytor parametrów elektrycznych (główne okno → zakładka Urządzenie) i ustaw wartość mobilności na 0, zgodnie z ilustracją ??. Następnie uruchom symulację. Powinien pojawić się ekran z komunikatem o błędzie, podobny do ??, z dwoma czerwonymi prostokątami: pionowym prostokątem otaczającym podsumowanie resztkowe oraz poziomym prostokątem w pobliżu komunikatu o błędzie.

Jeśli przyjrzysz się pionowemu, czerwonemu polu, zauważysz f()=2.54e2, a następnie inne linie, na których f() ma bardzo dużą wartość (np. 1e15, 1e5, 1e8, 1e7). W tym przypadku f() oznacza błąd resztkowy solvera: jest to miara tego, jak dobrze aktualnie spełnione są sprzężone równania. Idealnie, błąd resztkowy solvera powinien wynosić dokładnie zero, choć w praktyce nigdy nie udaje się tego osiągnąć. Wartość resztkowa w zakresie od 1e−10 do 1e−8 wskazuje na bardzo dobrą konwergencję, natomiast wartości w okolicach 1e−1 są nadal akceptowalne. Z kolei wartości resztkowe rzędu setek (np. 2.54e2) – zwłaszcza gdy towarzyszą im wartości komponentów tak duże jak 1e15 – są wyraźnym sygnałem, że solver ma problemy, a system stał się niestabilny.

Electrical parameters editor with mobility set to 0, a non-physical value that prevents carrier transport and causes solver errors.
Brak ruchliwości (μ = 0). Stan nierealny, który całkowicie uniemożliwia transport i zazwyczaj powoduje brak zbieżności w modelu dryfu i dyfuzji.
Solver crash trace showing failure after setting mobility to zero.
Wystąpił błąd spowodowany zerową mobilnością. Przy μ = 0 równania transportu stają się niespójne, co prowadzi do błędów w symulacji, a ostatecznie do jej zawieszenia.

Czerwony, poziomy pasek zazwyczaj wyświetla przyczynę, dla której symulacja zostaje przerwana: Holes asking for 3e5 but only defined in range [min, max]. Oznacza to, że obliczona wartość quasi-poziomu Fermiego wykracza poza zakres określony w tabeli. Przed rozpoczęciem symulacji model tworzy tabelę zależności, takich jak quasi-poziom Fermiego w funkcji gęstości nośników, w szerokim zakresie energii – zakres ten jest znacznie większy niż można by się spodziewać w przypadku typowego urządzenia. Gdy solver staje się niestabilny, model może zażądać nierealnych wartości, znacznie wykraczających poza ten zakres; w tym momencie solver nie może obliczyć wymaganych wartości i symulacja zostaje zatrzymana.

Krótko mówiąc, ustawiając wartość mobilności na nierealną wartość (μ = 0), zmusiliśmy równania do działania w reżimie, który nie ma sensu fizycznego, co powoduje, że metoda numeryczna zawodzi: pojawiają się duże błędy, a następnie program żąda wartości spoza wcześniej obliczonych tabel, co prowadzi do awarii. Ważne jest, aby zauważyć, że taki wynik nie jest wynikiem słabości modelu ani błędu w oprogramowaniu. Wprowadzając nierealne parametry, zmuszamy solver do działania w reżimie, w którym nie istnieje żadne matematycznie lub fizycznie poprawne rozwiązanie, dlatego nie może on dostarczyć sensownego wyniku.

2. Problemy ze stabilnością algorytmu spowodowane zbyt wysoką, nierealną wartością mobilności.

W tym przykładzie ustawiliśmy ruchliwość nośników na wartość μ = 1×106 m²·V⁻¹·s⁻¹. Jest to celowo nierealna wartość dla modelu dryfu i dyfuzji półprzewodnika: tak duża wartość może być bardziej związana z przewodnictwem metalicznym niż z transportem skokowym/przez pasy w organicznych lub typowych półprzewodnikach. W praktyce nie używalibyśmy tak dużej wartości w symulacjach OFET.

Jeśli uruchomisz symulację z tymi ustawieniami, możesz zaobserwować, że algorytm ma trudności z osiągnięciem zbieżności. W oknie wyświetlającym wartości reszt (okienko, które pokazuje f()), zobaczysz bardzo duże błędy – np. 1e24, 1e19, 1e21 – które nie maleją. To normalne, że wartości reszt są początkowo wysokie podczas pierwszych kilku iteracji, gdy algorytm szuka stabilnego stanu, ale powinny one szybko zmaleć do małych wartości. Uporczywie duże wartości reszt są wyraźnym sygnałem, że system stał się numerycznie niestabilny lub nie odpowiada rzeczywistości ze względu na wybrane parametry.

Wnioski: należy unikać nierealistycznie wysokich wartości mobilności. Zbyt duże współczynniki transportu powodują, że układ równań różniczkowych staje się bardzo wrażliwy, co prowadzi do słabego warunkowania i braku zbieżności. Należy stosować fizycznie uzasadnione wartości μ dla danego materiału i ponownie uruchomić symulację, stosując umiarkowane kroki zmiany parametrów, aby przywrócić stabilne zachowanie.

Electrical parameters editor with an unrealistically high mobility set to 1×10^6 m²·V⁻¹·s⁻¹, which destabilises the solver.
Nierealistyczna ruchliwość (μ = 1 × 10⁶ m²·V⁻¹·s⁻¹). Wyjątkowo duże współczynniki transportu prowadzą do powstania bardzo sztywnych układów i często powodują niepowodzenie obliczeń.
Solver error message caused by unrealistically high mobility settings that destabilise the numerical solution.
Błąd spowodowany zbyt wysoką, nierealną wartością mobilności. Bardzo duże wartości μ powodują, że układ równań różniczkowych cząstkowych staje się zbyt sztywny, co prowadzi do niestabilności i niepowodzenia obliczeń.

3. Nieprawidłowa konstrukcja elementów i problemy z połączeniami.

W tym przykładzie otwieramy edytor kontaktów i ustawiamy bardzo małą wartość szerokości kontaktu źródła (patrz ??), konkretnie jeden mikrometr. Na pierwszy rzut oka może się to wydawać nieistotne, ale powoduje to subtelny problem: symulacja opiera się na siatce różnic skończonych, w której wielkości takie jak pole elektryczne i gęstość nośników są obliczane tylko w zdefiniowanych punktach siatki.

Jeśli sprawdzisz edytor siatki elektrycznej (dostępny w zakładce „Elektryka”), zauważysz, że ta niezwykle cienka, jednomikronowa warstwa kontaktowa znajduje się pomiędzy punktami siatki (patrz ??). W rezultacie warstwa kontaktowa nie jest właściwie uwzględniana przez siatkę opartą na metodzie różnic skończonych i nigdy nie jest poprawnie aplikowana do struktury urządzenia. Powoduje to rozbieżność między zdefiniowaną geometrią a siatką numeryczną, co uniemożliwia osiągnięcie zbieżności symulacji.

Aby rozwiązać ten problem, można albo zwiększyć grubość obszaru styku, tak aby nakładał się on przynajmniej na jeden punkt siatki, albo zwiększyć gęstość siatki (czyli dodać więcej punktów) w siatce różnic skończonych, aby zapewnić prawidłowe odwzorowanie obszaru styku.

Layer editor showing the source contact set to an extremely thin width—much smaller than the mesh spacing—which leads to non-convergence.
Źródło kontaktu ma ustawioną patologicznie małą szerokość (mniejszą niż odstęp między liniami siatki). Tego typu elementy siatki powodują nieprawidłowe warunki brzegowe i zazwyczaj uniemożliwiają osiągnięcie zbieżności.
Mesh settings panel showing a typical 2D OFET mesh with about 10 divisions along X—a stable baseline configuration.
Typowa, stabilna siatka obliczeniowa dla dwuwymiarowych tranzystorów OFET: około 10 punktów wzdłuż osi X. Umiarkowanie gęsta siatka zapewnia dobrą stabilność systemu i zazwyczaj umożliwia uzyskanie zbieżnych wyników.

4. Gęstość siatki, zbieżność i nadmierne zagęszczenie siatki.

Powszechnym błędnym przekonaniem na początku pracy z modelami opartymi na metodzie różnic skończonych jest to, że zwiększenie liczby punktów siatki automatycznie prowadzi do uzyskania dokładniejszych wyników. Często zakłada się, że „pięć punktów siatki to za mało, ale tysiąc punktów musi dać doskonałe rezultaty”. W praktyce jednak nie jest to prawdą.

OghmaNano wykorzystuje metodę dyskretyzacji zwaną schematem Scharfetter–Gummel, która precyzyjnie interpoluje wielkości, takie jak gęstość nośników i potencjał, między punktami siatki. Rozwiązujący nie zakłada po prostu liniowego zachowania między węzłami, lecz stosuje metodę dopasowania eksponencjalnego, która z dużą dokładnością oddaje fizykę transportu, nawet w przypadku stosunkowo gruboziarnistej siatki. Oznacza to, że można uzyskać dobrą dokładność przy użyciu zaskakująco małej liczby punktów.

Zwiększenie gęstości siatki nie tylko wydłuża czas obliczeń, ale może również obniżyć stabilność i dokładność. Bardziej szczegółowa siatka generuje większy układ równań, co utrudnia rozwiązanie problemu numerycznego. W rezultacie macierz staje się bardziej sztywna, reszty mogą się zwiększać, a algorytm może mieć trudności z osiągnięciem zbieżności.

Zawsze istnieje kompromis między dokładnym odwzorowaniem praw fizyki, utrzymaniem rozsądnego czasu symulacji oraz unikaniem niepotrzebnych błędów numerycznych. Poniższe rysunki ilustrują to: przy 100 punktach siatki w całym obszarze urządzenia, solver początkowo generuje bardzo duże wartości reszt (np. 1e6, 1e5). Dopiero po wielu iteracjach wartości te stabilizują się i osiągają rozsądne wartości f(). Ta niestabilność wynika z faktu, że siatka jest zbyt gęsta, co utrudnia solverowi prawidłowe obliczenia.

Mesh settings panel with the X-mesh set to 100 divisions, far higher than normally required for a 2D OFET.
Zbyt gęsta siatka: X-mesh = 100 punktów. Zbyt drobne siatki zwiększają rozmiar i sztywność systemu, co spowalnia działanie solvera 2D i powoduje problemy z konwergencją.
Solver error dialog highlighted in red after using an excessively high number of mesh points.
Błąd spowodowany zbyt szczegółową siatką. Zbyt duża gęstość siatki zwiększa sztywność i obciążenie pamięci, co prowadzi do błędów w działaniu solvera (oznaczonych czerwonym prostokątem).

👉 Kolejne kroki: