آموزش 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 را برگزینید. دو پنجره انتخاب در زیر نشان داده شدهاند.
پس از بارگذاری، پنجره اصلی OghmaNano با یک صحنه سهبعدی ساده ظاهر میشود. جهان محاسباتی در ابتدا بهجز یک منبع و یک ناحیه آشکارساز خالی است. داخل نمای سهبعدی راستکلیک کنید و Show world box را فعال کنید. یک جعبه مرزی قرمز ظاهر خواهد شد که حدود دامنه FDTD را تعریف میکند.
ابعاد جهان را میتوان با کلیک روی دکمه Substrate xz-size در نوار ابزار سمت چپ بررسی کرد. این کار ویرایشگر اندازه جهان را باز میکند، جایی که اندازه فیزیکی دامنه شبیهسازی بر حسب میکرومتر تعریف میشود. در این آموزش نیازی به تغییر هیچ چیز ندارید؛ دامنه از پیش بهگونهای پیکربندی شده است که چندین طول موج نور سبز را بهراحتی در بر گیرد.
3. بررسی تنظیمات نوری و مش
سپس نوار Optical را در بالای پنجره باز کنید.
روی Optical mesh کلیک کنید تا ویرایشگر مش باز شود.
ویرایشگر مش نشان میدهد که در هر راستای فضایی چه تعداد نقطه شبکه استفاده میشود. اینها تفکیکپذیری فضایی محاسبه FDTD را تعیین میکنند. بازه طول موج بین 531 nm و 532 nm تنظیم شده است که متناظر با نور سبز است. در این مثال، پارامترهای ضخامت نشاندادهشده در ویرایشگر مش بهصورت خودکار با اندازه جهان مقیاس میشوند و میتوان آنها را نادیده گرفت. نکته مهم این است که شبکه فضایی به اندازه کافی ریز است تا طول موج الکترومغناطیسی را resolve کند.
4. اجرای حلگر FDTD شتابگرفته با GPU
شبیهسازی را با کلیک روی دکمه Run simulation یا فشردن F9 آغاز کنید. زبانه Terminal اطلاعات حلگر را نمایش خواهد داد.
snapshots/ حاوی دادههای میدان با تفکیک زمانی هستند.
در خروجی Terminal، به متن سبز با عبارت Searching for OpenCL devices توجه کنید. در این مرحله برنامه در حال اسکن سامانه شما برای GPUهای سازگار است. در سامانههایی با کارت گرافیک پشتیبانیشده، حلگر GPU را انتخاب میکند و حلقه گامزنی زمانی را در آنجا اجرا میکند. در مثال نشاندادهشده، محاسبه روی یک backend از CPU که یک دستگاه OpenCL را شبیهسازی میکند اجرا میشود، اما در یک ایستگاه کاری مدرن همین شبیهسازی بهصورت خودکار از پردازنده گرافیکی برای شتابدهی استفاده خواهد کرد.
5. بررسی خروجی و snapshotهای میدان
پس از تکمیل، به زبانه Output بروید. فایلهای تولیدشده در آنجا فهرست شدهاند.
برای باز کردن نمایشگر 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 تبدیل شود.
اکنون که مش به دو بعد کاهش یافته است، شبیهسازی را دوباره اجرا کنید. باید فوراً متوجه شوید که حلگر
در مقایسه با حالت 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 را دوباره باز کنید، قادر خواهید بود موج را که در زمان منتشر میشود با دقت بسیار بالا دنبال کنید، با تفکیکپذیری زمانی بسیار ریزتر در هنگام پخش و پیمایش.