Налаштування розв’язувача для моделі дрейфу–дифузії
Модуль розв’язувача рівнянь дрейфу-дифузії можна налаштувати, вибравши пункт «Налаштування» на стрічці інструментів «Електрика». Відкривається вікно налаштування модуля, де можна змінити числові параметри, такі як межі ітерацій, допустимі похибки та стратегії збіжності. Ці параметри дають користувачеві змогу контролювати продуктивність і стабільність модуля для різних моделей пристроїв.
Налаштування електричного розв’язувача.
Електричний двигун OghmaNano вирішує систему тісно пов’язаних нелінійних рівнянь (рівняння Пуассона + рівняння переносу-дифузії, а також будь-які увімкнені кінетичні рівняння). Ці рівняння містять експоненти та сильні зв’язки, тому їх вирішують ітеративно, використовуючи метод Ньютона-Рафсона на єдиному глобальному якобіані. Зазвичай вам не потрібно змінювати параметри за замовчуванням, але панель налаштувань дозволяє стабілізувати складні випадки, прискорити обчислення для простих випадків або перевірити, як поводяться числові методи.
Відкрийте налаштування, перейшовши на вкладку «Електрика», вибравши «Дрейф-дифузія» та натиснувши «Налаштувати» – див. DD Solver Open. Відкриється вікно, показане на DD Solver Window, де ви зможете налаштувати, як працює розв’язувач і як він досягає збіжності.
Які функції виконує кожен розділ.
Панель поділена на чотири основні блоки, які регулюють різні фази обчислення: перша ітерація, наступні ітерації, нарощування напруги та стратегія завершення. В усіх фазах основна ідея залишається незмінною: починаємо з припущення, оновлюємо невідомі значення за допомогою кроків Ньютона і зупиняємося, коли глобальна похибка стає достатньо малою. Обмежувач обмежує максимальне оновлення на кожному кроці, щоб запобігти переходу розв’язувача в нефізичні області. Невеликі обмежувачі → повільніша, але дуже стабільна робота; великі обмежувачі → швидша, але потенційно нестабільна робота.
Перша ітерація
- Максимальна кількість електричних ітерацій (перший крок) — верхня межа кількості кроків Ньютона для першого обчислення (зазвичай при 0 В у темряві). Більше значення допомагає при складних «холодних» запусках.
- Електричний затискач (перший крок) — визначає максимальне значення корекції за методом Ньютона на першому кроці. Як правило: 0,1 – дуже безпечне (повільне) значення, 1,0 – гарне значення за замовчуванням, ≥2,0 може бути швидким, але менш стабільним.
- Бажана похибка розв’язку (перший крок) — цільове значення збіжності для першого обчислення (менше значення = вища точність, але повільніша швидкість). Зазвичай допустиме значення: не гірше, ніж \(1\times10^{-5}\); для надійного початку обчислень можна встановити значення \(1\times10^{-8}\)–\(1\times10^{-9}\).
Наступні версії/ітерації
- Максимальна кількість електричних ітерацій — обмеження кількості ітерацій для всіх наступних розв’язків після першого.
- Електричний затискач — як описано вище, але застосовується до кожного наступного кроку, крім першого. Щоб пришвидшити процес, зазвичай можна послабити затиск порівняно з першим кроком.
- Бажана похибка розв’язувача — цільове значення збіжності для окремих етапів обчислення. Забезпечте відповідність між цим значенням і необхідною точністю; \(1\times10^{-6}\)–\(1\times10^{-8}\) є типовими значеннями.
Зміна напруги з часом.
Під час переходу від початкового значення зміщення (наприклад, 0 В) до цільової робочої точки (можливо, високої напруги), проміжні значення часто є лише проміжними етапами. Цей блок дозволяє використовувати ширші допустимі значення або різні обмеження, щоб швидше пройти цей перехід, зберігаючи при цьому точність кінцевих значень робочої точки.
- Максимальна кількість електричних ітерацій (для кожної сходинки на графіку) — обмеження для кожної сходинки.
- Електричний затискач (рампа) — регулювання кроку зміни під час нахилу (рампи).
- Бажана похибка розв’язувача (для етапу нарощування) — цільове значення збіжності, яке використовується лише для етапів нарощування.
- Мінімальна кількість ітерацій за методом Ньютона — забезпечте виконання щонайменше цієї кількості кроків, щоб алгоритм не завершував роботу передчасно лише тому, що початкова похибка виявилася невеликою.
Стратегія виходу з бізнесу/проекту/інвестицій.
- Розумний алгоритм завершення ітерацій Ньютона — якщо залишкова похибка «коливається в межах шуму» (змінюється вгору-вниз без певної тенденції), припиніть ітерації та прийміть найкращий на поточний момент результат.
- Розв’яжіть задачу, використовуючи закон Кірхгофа для струмів у розв’язувачі Ньютона — безпосередньо включіть обмеження KCL у матрицю Якобі для забезпечення більш точної неперервності струму.
- Припинити обчислення у разі виникнення проблем зі збіжністю / Припинити обчислення у разі інверсії рівня Фермі — жорсткі критерії для автоматичної зупинки обчислень, якщо отримані результати явно неприйнятні.
Тип розв’язувача та інструменти
- Виберіть метод Ньютона для розв’язання:
none— Не передбачено електричне рішення (лише оптичне/теплове).newton— Стандартний одномірний чисельний метод Ньютона.
- Розв’язувач матриць / Розв’язувач комплексних матриць — оберіть механізм розв’язування лінійних рівнянь.
- Slotboom T0 / D0 / n0 — параметри для
newtonnorm. - Використовуйте кеш Ньютона (експериментальна функція) — для зменшення навантаження на пам’ять, великі обсяги проміжних даних зберігайте на диску (експериментальна функція).
- Рівень деталізації виводу інформації про хід виконання — визначає, який обсяг інформації про прогрес виводиться.
Практичні рекомендації
Якщо виникають проблеми (високе легування, екстремальні поля, сильне впорскування), опустіть затиск і послабте допуск першого етапу. Для простих випадків, коли все працює добре, підніміть затиск, щоб збільшити швидкість. Використовуйте перехідну секцію, щоб швидко перейти до потрібної робочої точки, а потім встановіть там більш жорсткі допуски.
Див. також: точку входу для налаштування, показану у DD Solver Open, і повне вікно діалогу у DD Solver Window.
Стабільність розв’язувача
OghmaNano — це чисельний симулятор, який розв’язує систему тісно пов’язаних диференціальних рівнянь для заряду, потенціалу та рекомбінації. Як і будь-який чисельний розв’язувач, він потребує фізично реалістичних вхідних параметрів для успішного досягнення збіжності. Значення, які дорівнюють точно нулю, нескінченно великі або розподілені на занадто великій кількості порядків величини, можуть призвести до нестабільності основних матричних операцій. Щоб допомогти вам уникнути цих проблем, у цьому розділі наведено деякі практичні міркування під час налаштування ваших симуляцій.
Уникайте використання надто великих і надто малих чисел.
Відкрийте MATLAB (або Octave у Linux) і введіть наступний вираз: \(((1e-1+1e1)-1e1)/1e-1\). Перш ніж натиснути Enter, подумки обчисліть його: \(1e1\) і \(-1e1\) скорочуються, залишаючи \(\frac{1e-1}{1e-1}=1\). Тепер замініть степені 10 на 19 і спробуйте: \(((1e-19+1e19)-1e19)/1e-19\). Знову ж таки, на папері результат має бути \(1\).
Однак, якщо дозволити комп’ютеру виконати обчислення, відповідь буде \(0\), а не \(1\). Це відбувається тому, що комп’ютери зберігають числа з обмеженою точністю (приблизно 15–16 десяткових знаків у сучасних пристроях). Коли ви додаєте \(1e-19\) до \(1e19\), менший доданок втрачається під час округлення, тому комп’ютер бачить \(1.000000000000000e19\) замість \(1.0000000000000000001e19\). Віднімання \(1e19\) дає в результаті точно нуль, і внесок \(1e-19\) зникає.
Важлива точність обчислень.
Якщо ваша модель передбачає параметри, що охоплюють надто великий діапазон значень, розв’язувач може втратити точність. Намагайтеся уникати екстремальних співвідношень, особливо щодо рухливості або щільності станів, щоб забезпечити стабільність.
На всі комп’ютери це впливає, незалежно від їхньої потужності. У випадку моделювання пристроїв це означає, що слід уникати діапазонів параметрів, які створюють матриці з дуже великими та дуже малими числами, розташованими поруч. Наприклад, якщо поруч використовувати рухливості \(1e-19\) і \(1e5\), це може спричинити чисельні труднощі. Це особливо важливо під час моделювання діелектриків.
Уникайте нулів.
Значення, що дорівнює нулю, спричиняє помилки ділення на нуль. Не встановлюйте значення рухливості, перерізу захоплення, нахилу кривої або щільності станів точно рівним нулю. Використання нуля для констант рекомбінації є допустимим.
⚠️ Уникайте точних значень, що дорівнюють нулю.
Замініть нулі на дуже малі значення (наприклад, \(1e-30\)), щоб запобігти числовим нестабільностям, зберігаючи при цьому наближене значення «майже нуль».
Значні зміни в ширині забороненої зони.
Значні зміни енергії в зоні заборонених енергій призводять до надзвичайно низької або надзвичайно високої концентрації носіїв заряду, що безпосередньо спричиняє ті самі проблеми з точністю, про які йдеться у Уникайте використання дуже великих і дуже малих чисел. Забезпечте достатньо дрібний крок дискретизації енергії, щоб уникнути нефізичних стрибків.
🔍 Перевірте свою мережу.
Якщо дискретизація ширини забороненої зони занадто груба, це може призвести до отримання нереалістичних значень концентрації носіїв заряду. Удоскональте сітку, щоб значення залишалися в межах чисельно стабільного діапазону.