خانه نمونه‌ها اسکرین‌شات‌ها راهنمای کاربر لوگوی Bluesky YouTube
OghmaNano شبیه‌سازی سلول‌های خورشیدی آلی/پروسکایتی، OFETها و OLEDها دانلود

آموزش FDTD: انتشار نور سبز در فضای آزاد

1. مرور کلی: چه چیزی را شبیه‌سازی خواهید کرد

این آموزش موتور Finite-Difference Time-Domain (FDTD) را در OghmaNano با استفاده از ساده‌ترین سامانه فیزیکی ممکن معرفی می‌کند: انتشار موج الکترومغناطیسی در فضای آزاد. یک منبع تک‌فام از نور سبز، با طول موج 530 nm، به درون یک دامنه محاسباتی خالی فرستاده می‌شود. هیچ موج‌بری، هیچ رزوناتوری، و هیچ ماده‌ای به‌جز خلأ وجود ندارد. هدف نمایش یک دستگاه نیست، بلکه نمایان کردن ماشین‌آلات عددی است.

ماژول FDTD معادلات curl ماکسول را مستقیماً در حوزه زمان روی یک شبکه فضایی گسسته حل می‌کند. در هر گام زمانی، میدان‌های الکتریکی و مغناطیسی در سراسر کل مش به‌روزرسانی می‌شوند. چون الگوریتم به‌شدت موازی است، OghmaNano آن را با استفاده از OpenCL اجرا می‌کند و اگر GPU در دسترس باشد به‌صورت خودکار از آن استفاده خواهد کرد. این آموزش بنابراین هم یک نمایش فیزیکی است و هم نخستین معرفی backend شتاب‌گرفته با GPU برای FDTD.

تا پایان این صفحه شما یک شبیه‌سازی ایجاد کرده‌اید، اندازه جهان و مش فضایی را بررسی کرده‌اید، حل‌گر را اجرا کرده‌اید، و بصری‌سازی کرده‌اید که چگونه نور سبز در سه بعد در فضا منتشر می‌شود.

2. ایجاد شبیه‌سازی Free space

پنجره New simulation را باز کنید و دسته FDTD examples را انتخاب کنید، سپس مثالی با نام Free space را برگزینید. دو پنجره انتخاب در زیر نشان داده شده‌اند.

پنجره New simulation که دسته FDTD examples را نشان می‌دهد.
FDTD examples را از پنجره New simulation باز کنید.
فهرست مثال‌های FDTD که شبیه‌سازی Free space را نشان می‌دهد.
مثال Free space را انتخاب کنید.

پس از بارگذاری، پنجره اصلی OghmaNano با یک صحنه سه‌بعدی ساده ظاهر می‌شود. جهان محاسباتی در ابتدا به‌جز یک منبع و یک ناحیه آشکارساز خالی است. داخل نمای سه‌بعدی راست‌کلیک کنید و Show world box را فعال کنید. یک جعبه مرزی قرمز ظاهر خواهد شد که حدود دامنه FDTD را تعریف می‌کند.

پنجره اصلی OghmaNano که شبیه‌سازی Free space را نشان می‌دهد. انتخاب گزینه show world.
پنجره اصلی OghmaNano که شبیه‌سازی Free space را نشان می‌دهد. انتخاب گزینه show world.
پنجره اصلی OghmaNano که شبیه‌سازی Free space را نشان می‌دهد. نمایش world box که گستره دامنه شبیه‌سازی را نشان می‌دهد.
پنجره اصلی OghmaNano که شبیه‌سازی Free space را نشان می‌دهد. نمایش world box که گستره دامنه شبیه‌سازی را نشان می‌دهد
ویرایشگر اندازه جهان که ابعاد دامنه شبیه‌سازی FDTD را نشان می‌دهد.
ویرایشگر اندازه جهان که از طریق دکمه Substrate xz-size قابل دسترسی است.

ابعاد جهان را می‌توان با کلیک روی دکمه Substrate xz-size در نوار ابزار سمت چپ بررسی کرد. این کار ویرایشگر اندازه جهان را باز می‌کند، جایی که اندازه فیزیکی دامنه شبیه‌سازی بر حسب میکرومتر تعریف می‌شود. در این آموزش نیازی به تغییر هیچ چیز ندارید؛ دامنه از پیش به‌گونه‌ای پیکربندی شده است که چندین طول موج نور سبز را به‌راحتی در بر گیرد.

3. بررسی تنظیمات نوری و مش

سپس نوار Optical را در بالای پنجره باز کنید.

نوار Optical در OghmaNano که دکمه Optical mesh را نشان می‌دهد.
نوار Optical. برای بررسی گسسته‌سازی فضایی روی Optical mesh کلیک کنید.

روی Optical mesh کلیک کنید تا ویرایشگر مش باز شود.

ویرایشگر مش نوری که نقاط مش و بازه طول موج بین 531 nm و 532 nm را نشان می‌دهد.
تنظیمات مش نوری، شامل تفکیک‌پذیری فضایی و بازه طول موج (531–532 nm).

ویرایشگر مش نشان می‌دهد که در هر راستای فضایی چه تعداد نقطه شبکه استفاده می‌شود. این‌ها تفکیک‌پذیری فضایی محاسبه FDTD را تعیین می‌کنند. بازه طول موج بین 531 nm و 532 nm تنظیم شده است که متناظر با نور سبز است. در این مثال، پارامترهای ضخامت نشان‌داده‌شده در ویرایشگر مش به‌صورت خودکار با اندازه جهان مقیاس می‌شوند و می‌توان آن‌ها را نادیده گرفت. نکته مهم این است که شبکه فضایی به اندازه کافی ریز است تا طول موج الکترومغناطیسی را resolve کند.

4. اجرای حل‌گر FDTD شتاب‌گرفته با GPU

شبیه‌سازی را با کلیک روی دکمه Run simulation یا فشردن F9 آغاز کنید. زبانه Terminal اطلاعات حل‌گر را نمایش خواهد داد.

خروجی Terminal که راه‌اندازی ماژول FDTD و جست‌وجو برای دستگاه‌های OpenCL را نشان می‌دهد.
خروجی Terminal در حین اجرا. ماژول FDTD مقداردهی اولیه می‌شود، فاصله مش و طول موج را گزارش می‌کند، و پیش از آغاز حلقه گام‌زنی زمانی دستگاه‌های OpenCL موجود را جست‌وجو می‌کند.
زبانه Output که فایل‌های نتیجه شبیه‌سازی شامل داده‌های آشکارساز و پوشه snapshots را نشان می‌دهد.
زبانه Output پس از تکمیل. فایل‌های تولیدشده شامل ردگیری‌های آشکارساز، خروجی‌های پیکربندی، و پوشه snapshots/ حاوی داده‌های میدان با تفکیک زمانی هستند.

در خروجی Terminal، به متن سبز با عبارت Searching for OpenCL devices توجه کنید. در این مرحله برنامه در حال اسکن سامانه شما برای GPUهای سازگار است. در سامانه‌هایی با کارت گرافیک پشتیبانی‌شده، حل‌گر GPU را انتخاب می‌کند و حلقه گام‌زنی زمانی را در آنجا اجرا می‌کند. در مثال نشان‌داده‌شده، محاسبه روی یک backend از CPU که یک دستگاه OpenCL را شبیه‌سازی می‌کند اجرا می‌شود، اما در یک ایستگاه کاری مدرن همین شبیه‌سازی به‌صورت خودکار از پردازنده گرافیکی برای شتاب‌دهی استفاده خواهد کرد.

5. بررسی خروجی و snapshotهای میدان

پس از تکمیل، به زبانه Output بروید. فایل‌های تولیدشده در آنجا فهرست شده‌اند.

snapshot در زمان‌های دیرتر که انتشار جبهه موج کروی را نشان می‌دهد.
یک snapshot در زمان دیرتر که انتشار رو‌به‌بیرون جبهه موج نور سبز را نشان می‌دهد.
نمایشگر snapshot که انتشار نور سبز در فضای آزاد را نشان می‌دهد.
نمایشگر snapshot: power density را انتخاب کنید و برای بررسی زمان و فضا از لغزنده‌ها استفاده کنید.

برای باز کردن نمایشگر snapshot روی پوشه snapshots دوبار کلیک کنید. از فهرست کشویی پایین پنجره power density را انتخاب کنید. میدان رنگی نشان‌دهنده چگالی انرژی الکترومغناطیسی لحظه‌ای است. از لغزنده افقی برای حرکت به جلو و عقب در زمان، و از لغزنده‌های فضایی برای بررسی مقاطع مختلف دامنه استفاده کنید. در برخی رایانه‌ها، به‌ویژه هنگام اجرای مش‌های بزرگ، ممکن است نمایشگر هنگام بارگذاری هر مجموعه‌داده اندکی زمان برای پاسخ‌دادن نیاز داشته باشد.

با حرکت در زمان، خواهید دید که جبهه موج در سراسر دامنه گسترش می‌یابد. در فضای آزاد، بدون مرزها یا ساختارها، انتشار یکنواخت و متقارن است و تنها به‌وسیله شرایط مرزی جاذب در لبه‌های جعبه محاسباتی محدود می‌شود.

6. مشاهده توان آشکارساز

شبکه بنفش قابل مشاهده در پنجره اصلی، یک صفحه آشکارساز را نشان می‌دهد که داخل دامنه شبیه‌سازی قرار داده شده است. در زبانه Output روی detector 0 دوبار کلیک کنید تا ردگیری توان ثبت‌شده آن باز شود.

پنجره اصلی که صفحه آشکارساز را به رنگ بنفش نشان می‌دهد.
صفحه آشکارساز (شبکه بنفش) درون دامنه فضای آزاد.
نمودار توان آشکارساز برحسب زمان.
توان آشکارساز به‌عنوان تابعی از زمان.

نمودار حاصل توان الکترومغناطیسی عبوری از آن صفحه را به‌عنوان تابعی از زمان نشان می‌دهد. در ابتدا آشکارساز سیگنال صفر ثبت می‌کند. با رسیدن جبهه موج به صفحه، توان اندازه‌گیری‌شده افزایش می‌یابد و سپس مطابق با پروفایل زمانی منبع پایدار می‌شود. این پیکربندی ساده باعث می‌شود بتوان به‌آسانی انتشار دیداری موج در نمایشگر snapshot را با یک اندازه‌گیری کمی توان مرتبط کرد.

اکنون نخستین شبیه‌سازی FDTD خود را در OghmaNano تکمیل کرده‌اید. اگرچه سامانه فاقد هرگونه ماده یا دستگاه بود، اما کل خط لوله عددی را نشان داد: تعریف جهان، ساخت مش، انتخاب دستگاه GPU، گام‌زنی زمانی، بصری‌سازی میدان، و استخراج آشکارساز. در آموزش‌های بعدی، همین ابزارها برای سامانه‌های فوتونیکی و اپتوالکترونیکی ساختاریافته به‌کار گرفته خواهند شد.

7. افزایش سرعت شبیه‌سازی با تغییر به 2D (XZ)

اغلب برای درک ساختارها و دستگاه‌ها به شبیه‌سازی‌های کاملاً سه‌بعدی نیازی نیست، به‌ویژه وقتی فیزیک در یک راستا اساساً ناوردا باشد. در آن موارد می‌توانید با کاهش مسئله به دو بعد، افزایش سرعت قابل‌توجهی به دست آورید. برای مثال Free space، تغییر از یک جهان 3D به یک شبیه‌سازی XZ کل بُعد Y را از شبکه محاسباتی حذف می‌کند. نتیجه این است که نقاط مش کمتر، داده میدان کمتر، و زمان‌های اجرا به‌مراتب کوتاه‌تر می‌شوند—معمولاً آن‌قدر سریع که اجرای دوباره‌ها عملاً تعاملی شوند.

برای انجام این کار، به نوار Optical بازگردید، Optical mesh را باز کنید، و پیکربندی مش دوبعدی نشان‌داده‌شده در ?? را انتخاب کنید. تغییر کلیدی این است که محور Y حذف می‌شود تا شبیه‌سازی به یک محاسبه در صفحه XZ تبدیل شود.

ویرایشگر مش نوری که برای یک شبیه‌سازی دوبعدی XZ با حذف بُعد Y پیکربندی شده است.
مش نوری پیکربندی‌شده برای 2D: محور Y را حذف کنید تا یک شبیه‌سازی XZ اجرا شود.
نمایشگر snapshot در 2D که انتشار موج را در صفحه XZ نشان می‌دهد.
نمایشگر snapshot در 2D: تحول میدان در صفحه XZ سریع رندر می‌شود و به‌سادگی می‌توان در آن پیمایش کرد.
ویرایشگر FDTD که verbosity خروجی به دیسک را روی write everything to disk نشان می‌دهد.
برای پخش روان‌تر، با تنظیم verbosity خروجی روی Write everything to disk چگالی snapshotها را افزایش دهید.

اکنون که مش به دو بعد کاهش یافته است، شبیه‌سازی را دوباره اجرا کنید. باید فوراً متوجه شوید که حل‌گر در مقایسه با حالت 3D تقریباً آنی کامل می‌شود. پوشه snapshots/ را دوباره باز کنید و در نمایشگر snapshot در زمان پیمایش کنید (??). چون مجموعه‌داده بسیار کوچک‌تر است، نمایشگر نه‌تنها سریع‌تر بارگذاری می‌شود، بلکه وقتی لغزنده زمان را می‌کشید یا کنترل‌های مقطع فضایی را جابه‌جا می‌کنید نیز سریع‌تر پاسخ می‌دهد.

یک نکته‌ای که باید به آن توجه داشته باشید این است که نرمیِ ادراک‌شده انیمیشن می‌تواند تغییر کند. در اجرای 2D، شبیه‌سازی بسیار سریع پیش می‌رود و معمولاً شما فریم‌های کمتری dump می‌کنید، بنابراین وقتی در زمان پیمایش می‌کنید، ممکن است تحول کمی ناپیوسته به نظر برسد—صرفاً به این دلیل که بین یک اندیس زمانی و بعدی snapshotهای ثبت‌شده کمتری وجود دارد. اگر می‌خواهید انتشار موج را با جزئیات زمانی ریزتری دنبال کنید، مقدار خروجی نوشته‌شده روی دیسک را افزایش دهید.

برای این کار، دوباره به زبانه Optical بروید، روی دکمه FDTD simulation کلیک کنید تا پنجره پیکربندی FDTD باز شود، و Output verbosity to disk را از Write everything to disk every 8th step به Write everything to disk تغییر دهید (??). این کار در هر گام زمانی یک snapshot می‌نویسد. وقتی نمایشگر snapshot را دوباره باز کنید، قادر خواهید بود موج را که در زمان منتشر می‌شود با دقت بسیار بالا دنبال کنید، با تفکیک‌پذیری زمانی بسیار ریزتر در هنگام پخش و پیمایش.