پیکربندی حلگر Drift–Diffusion
حلگر Drift–Diffusion را میتوان با انتخاب Configure از نوار Electrical پیکربندی کرد. این کار پنجره پیکربندی حلگر را باز میکند، جایی که ویژگیهای عددی مانند محدودیتهای تکرار، تلورانسهای خطا، و راهبردهای همگرایی قابل تنظیم هستند. این گزینهها به کاربر اجازه میدهند عملکرد و پایداری حلگر را برای شبیهسازیهای مختلف دستگاه کنترل کند.
پیکربندی حلگر الکتریکی
موتور الکتریکی OghmaNano یک مجموعه شدیداً کوپلشده از معادلات غیرخطی را حل میکند (Poisson + drift–diffusion، بهعلاوه هر گونه سینتیک فعالشده). این معادلات شامل توابع نمایی و کوپلشدگیهای قوی هستند، بنابراین بهصورت تکراری با استفاده از روش Newton–Raphson روی یک Jacobian سراسری واحد حل میشوند. معمولاً نیازی به تغییر مقادیر پیشفرض ندارید، اما پنل پیکربندی به شما امکان میدهد موارد دشوار را پایدار کنید، موارد آسان را سریعتر کنید، یا رفتار عددی را بررسی کنید.
پیکربندی را با رفتن به زبانه Electrical، انتخاب Drift–diffusion، و سپس انتخاب Configure باز کنید — به DD Solver Open نگاه کنید. این کار پنجره نشاندادهشده در DD Solver Window را باز میکند، جایی که میتوانید نحوه تکرار و همگرایی حلگر را تنظیم کنید.
هر بخش چه چیزی را کنترل میکند
این پنل به چهار بلوک اصلی تقسیم شده است که فازهای مختلف یک اجرا را کنترل میکنند: First iteration, Later iterations, Voltage ramp, و Exit strategy. در همه فازها ایده اصلی یکسان است: از یک حدس شروع کنید، مجهولها را با گامهای Newton بهروزرسانی کنید، و وقتی خطای سراسری بهاندازه کافی کوچک شد متوقف شوید. یک clamp بیشینه بهروزرسانی در هر گام را محدود میکند تا حلگر به نواحی غیرفیزیکی نپرد. clamp کوچک → کندتر اما بسیار پایدار؛ clamp بزرگ → سریعتر اما بالقوه ناپایدار.
First iteration
- Max electrical iterations (first step) — کران بالای گامهای Newton برای اولین حل (اغلب در 0 V در تاریکی). مقدار بیشتر به شروعهای سرد دشوار کمک میکند.
- Electrical clamp (first step) — بیشینه بهروزرسانی Newton را در اولین گام مقیاس میکند. بهعنوان یک قاعده سرانگشتی: 0.1 بسیار امن است (کند)، 1.0 یک پیشفرض خوب است، و ≥2.0 میتواند سریع ولی کمپایدارتر باشد.
- Desired solver error (first step) — هدف همگرایی برای اولین حل (کوچکتر = دقیقتر اما کندتر). پذیرش معمول: بدتر از \(1\times10^{-5}\) نباشد؛ برای شروعهای پایدارتر میتوانید \(1\times10^{-8}\)–\(1\times10^{-9}\) تنظیم کنید.
Later iterations
- Max electrical iterations — سقف تکرار برای همه حلهای بعدی پس از اولین حل.
- Electrical clamp — مشابه بالا، اما برای هر گام بهجز گام اول اعمال میشود. معمولاً میتوانید آن را نسبت به گام اول برای افزایش سرعت شلتر بگیرید.
- Desired solver error — هدف همگرایی برای گامهای معمول. آن را با نیازهای دقت خود سازگار نگه دارید؛ \(1\times10^{-6}\)–\(1\times10^{-8}\) رایج هستند.
Voltage ramp
وقتی از یک بایاس اولیه (مثلاً 0 V) به یک نقطه کاری هدف (احتمالاً ولتاژ بالا) پله میزنید، حلهای میانی اغلب فقط نقاط میانی هستند. این بلوک به شما امکان میدهد از تلورانسهای سستتر یا clampهای متفاوت استفاده کنید تا در ramp سریعتر پیش بروید، در حالی که حلهای نهایی در نقطه کاری را سختگیرانه نگه میدارید.
- Max electrical iterations (ramp) — سقف برای هر گام ramp.
- Electrical clamp (ramp) — کنترل اندازه گام در طول ramp.
- Desired solver error (ramp) — هدف همگرایی که فقط برای گامهای ramp استفاده میشود.
- Newton minimum iterations — حداقل این تعداد گام را اعمال میکند تا حلگر فقط به این دلیل که باقیمانده اولیه بهطور اتفاقی کوچک است زود متوقف نشود.
Exit strategy
- Newton solver clever exit — اگر باقیمانده «در نویز بالا و پایین بپرد» (بدون روند)، تکرار را متوقف کرده و بهترین حالت تا آن لحظه را بپذیرد.
- Solve Kirchhoff’s current law in Newton solver — قیود KCL را مستقیماً در Jacobian بگنجانید تا پیوستگی جریان سختگیرانهتری داشته باشید.
- Quit on convergence problem / Quit on inverted Fermi-level — توقفهای سخت برای حالتهای آشکارا نامناسب.
نوع حلگر و ابزارها
- Newton solver to use — الگوریتم را انتخاب کنید:
none— بدون حل الکتریکی (فقط نوری/حرارتی).newton— حلگر استاندارد Newton در 1D.
- Matrix solver / Complex matrix solver — backend حلگر خطی را انتخاب کنید.
- Slotboom T0 / D0 / n0 — پارامترها برای
newtonnorm. - Use newton cache (experimental) — دادههای میانی بزرگ را برای کاهش فشار حافظه روی دیسک بنویسید (آزمایشی).
- Solver output verbosity — مقدار اطلاعات پیشرفتی را که چاپ میشود کنترل میکند.
راهنمای عملی
اگر یک مورد حساس است (دوپینگ بالا، میدانهای شدید، تزریق قوی)، clamp را کاهش دهید و تلورانس گام اول را سختتر کنید. برای موارد آسان و خوشرفتار، clamp را برای افزایش سرعت بالا ببرید. از بلوک ramp استفاده کنید تا سریع به نقطه کاری خود برسید، و سپس در آنجا تلورانسهای سختگیرانهتری اعمال کنید.
همچنین ببینید: نقطه ورود پیکربندی که در DD Solver Open نشان داده شده و گفتوگوی کامل در DD Solver Window.
پایداری حلگر
OghmaNano یک شبیهساز عددی است که مجموعهای شدیداً کوپلشده از معادلات دیفرانسیل را برای بار، پتانسیل، و بازترکیب حل میکند. مانند هر حلگر عددی دیگر، برای همگرا شدن موفق به پارامترهای ورودی فیزیکیِ واقعبینانه نیاز دارد. مقادیری که دقیقاً صفر، بینهایت بزرگ، یا در گسترهای بسیار زیاد از مرتبههای بزرگی پخش شده باشند میتوانند باعث ناپایداری عملیات ماتریسی زیربنایی شوند. برای کمک به اجتناب از این مشکلات، این بخش برخی ملاحظات عملی را هنگام پیکربندی شبیهسازیهای شما برجسته میکند.
اجتناب از اعداد بسیار بزرگ و بسیار کوچک
MATLAB را باز کنید (یا در لینوکس Octave) و عبارت زیر را تایپ کنید: \(((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\) باعث مشکلات عددی خواهند شد. این موضوع هنگام شبیهسازی عایقها بهویژه مهم است.
از صفرها اجتناب کنید
مقادیر صفر باعث خطاهای تقسیم بر صفر میشوند. تحرکپذیریها، سطحمقطعهای گیراندازی، شیبهای tail، یا چگالی حالات را دقیقاً صفر تنظیم نکنید. استفاده از صفر برای ثابتهای بازترکیب مشکلی ندارد.
⚠️ از صفرهای دقیق اجتناب کنید
صفرها را با مقادیر بسیار کوچک (مثلاً \(1e-30\)) جایگزین کنید تا از ناپایداریهای عددی جلوگیری شود، در حالی که هنوز تقریب خوبی از «تقریباً صفر» باقی بماند.
گامهای بسیار بزرگ در گاف نواری
گامهای انرژی بزرگ در گاف نواری، چگالیهای حاملی تولید میکنند که یا بسیار کوچک هستند یا بسیار بزرگ، و این مستقیماً به همان مشکلات دقت شرحدادهشده در اجتناب از اعداد بسیار بزرگ و بسیار کوچک منجر میشود. تفکیک انرژی را بهاندازه کافی ریز نگه دارید تا از جهشهای غیرفیزیکی جلوگیری شود.
🔍 مش خود را بررسی کنید
اگر گسستهسازی گاف نواری شما بیش از حد درشت باشد، ممکن است چگالیهای حامل غیرفیزیکی ایجاد کنید. برای نگه داشتن مقادیر در یک بازه عددی پایدار، مش را ریزتر کنید.