اسکریپتنویسی (Scripting) در Ansys Fluent برای اتوماسیون (جامع)
در مهندسی مدرن دینامیک سیالات محاسباتی (CFD)، اتوماسیون از یک ابزار راحتی به یک تغییر پارادایم استراتژیک تبدیل شده است. پیچیدگی روزافزون شبیهسازیها، به ویژه در مطالعات بهینهسازی مانند تحلیل آیرودینامیک خودرو، مهندسان را با وظایف تکراری مواجه میکند که نه تنها زمانبر هستند، بلکه مانعی برای نوآوری محسوب میشوند. اتوماسیون این فرآیند را متحول میکند و نقش مهندس را از یک “اپراتور شبیهسازی” به یک “استراتژیست طراحی” ارتقا میدهد.
تأثیر استراتژیک اتوماسیون فراتر از صرفهجویی در زمان است؛ این یک توانمندساز حیاتی برای اجرای مطالعات بهینهسازی جامع و آزمایشهای طراحی (DOE) است که در غیر این صورت به دلیل حجم بالای کار غیرعملی خواهند بود. با خودکارسازی گردش کارهای تکراری، مهندسان میتوانند فضای طراحی را به طور کامل کاوش کرده، بینش عمیقتری از فیزیک مسئله به دست آورند و به راهحلهای بهینهای دست یابند که از طریق تحلیلهای تکنقطهای قابل کشف نیستند.
این مقاله سه رویکرد اصلی و قدرتمند برای خودکارسازی گردش کار در Ansys Fluent را بررسی میکند:
- فایلهای ژورنال (Journal Files): سادهترین روش برای ثبت و اجرای مجدد توالی دستورات.
- برنامهنویسی Scheme: ابزاری پیشرفته برای پیادهسازی منطق پیچیده و کنترل کامل فرآیند.
- توابع تعریفشده توسط کاربر (UDFs): روشی برای توسعه قابلیتهای فیزیکی حلگر با استفاده از زبان C.
آنچه در این مقاله میخوانید
درک رابط کاربری متنی (TUI) در Ansys Fluent (بنیان اتوماسیون)
رابط کاربری متنی (TUI) زبان فرمان مشترک و ستون فقرات تمام روشهای اتوماسیون مبتنی بر اسکریپت در Ansys Fluent است. در حالی که رابط کاربری گرافیکی (GUI) برای تعامل بصری عالی است، TUI دسترسی مستقیم و رویهای به تمام قابلیتهای نرمافزار را از طریق دستورات متنی فراهم میکند. تسلط بر TUI یک پیشنیاز اساسی برای اتوماسیون پیشرفته است، زیرا هم فایلهای ژورنال و هم اسکریپتهای Scheme بر مبنای این دستورات ساخته شدهاند.
ویژگیهای کلیدی TUI که آن را به ابزاری قدرتمند تبدیل کردهاند، عبارتند از:
مبنای زبان: TUI بر اساس گویشی از زبان برنامهنویسی Lisp به نام Scheme نوشته شده است. این ویژگی به کاربران پیشرفته اجازه میدهد تا از قابلیتهای تفسیری این زبان برای ایجاد دستورات سفارشی و منطق پیچیده بهره ببرند.
ساختار سلسلهمراتبی: سیستم منوی TUI ساختاری درختی و شبیه به سیستمعامل لینوکس دارد. این ساختار منطقی، اسکریپتها را خوانا و قابل نگهداری میکند، زیرا دستورات به صورت موضوعی گروهبندی شدهاند (مثلاً تمام عملیات فایل تحت file/ و تمام عملیات نمایش تحت display/ قرار دارند). کاربران با وارد کردن نام منوها (که به / ختم میشوند) در این ساختار حرکت میکنند.
سیستم فرمان: اجرای دستورات بسیار ساده است. میتوان نام کامل دستور یا یک مخفف منحصر به فرد از آن را تایپ کرد (مثلاً s-a-c برای set-ambient-color). علاوه بر این، TUI دارای یک ویژگی تکمیل خودکار (auto-completer) است که با شروع تایپ، ورودیهای معتبر را نمایش میدهد و سرعت ورود دستورات را افزایش میدهد.
انواع آرگومانها و ورودیها
دستورات TUI انواع مختلفی از آرگومانها را برای اجرا میپذیرند. درک این انواع ورودی برای نوشتن اسکریپتهای صحیح ضروری است:
اعداد (Numbers): شامل اعداد صحیح (16) و اعشاری (2.4-, .9e5) میشود. اعداد صحیح را میتوان در قالبهای باینری (#b11111)، اکتال (#o37) یا هگزادسیمال (#x1f) نیز وارد کرد. توجه داشته باشید که اگر در یک ورودی عدد صحیح، یک عدد اعشاری وارد کنید، بخش کسری آن حذف میشود (مثلاً 1.9 به 1 تبدیل میشود).
مقادیر بولی (Booleans): برخی دستورات به پاسخ yes/no (یا y/n) نیاز دارند. برخی دیگر مقادیر بولی استاندارد Scheme یعنی #t (برای true) و #f (برای false) را میپذیرند.
رشتهها (Strings): متنهایی هستند که باید در داخل گیومه (" ") قرار گیرند، مانند "red".
نمادها (Symbols): نامهایی مانند نام زونها یا مواد که بدون گیومه وارد میشوند (مثلاً wall-1). این نامها نمیتوانند شامل فاصله باشند.
نام فایلها (Filenames): به طور کلی نوعی رشته هستند، اما برای سهولت استفاده، نیازی به قرار گرفتن در گیومه ندارند، مگر اینکه نام فایل حاوی کاراکتر فاصله باشد.
لیستها (Lists): دنبالهای از اشیاء (مانند اعداد یا نامها) هستند که به صورت عنصر به عنصر وارد میشوند و با یک لیست خالی (()) به پایان میرسند.
تمایز قائل شدن بین یک رشته ("10") و یک عدد (10)، یا یک نماد (wall-1) و یک رشته ("wall-1")، یکی از منابع رایج خطا در اسکریپتنویسی است. تسلط بر این تفاوتها برای نوشتن اسکریپتهای اتوماسیون قوی، امری بنیادین است.
روش اول: اتوماسیون با فایلهای ژورنال (Journal Files) – نقطه شروع
فایلهای ژورنال در دسترسترین و سادهترین روش برای خودکارسازی وظایف تکراری در Ansys Fluent هستند. این روش یک نقطه شروع عالی برای مهندسانی است که به تازگی با اتوماسیون آشنا شدهاند و به دنبال راهی سریع برای افزایش بهرهوری خود هستند.
یک فایل ژورنال، یک فایل متنی ساده با پسوند .jou است که مجموعهای از دستورات TUI را در خود جای داده است. هنگامی که Fluent این فایل را میخواند، دستورات را به صورت متوالی و به همان ترتیبی که نوشته شدهاند، اجرا میکند.
دو روش اصلی برای ایجاد فایلهای ژورنال وجود دارد که در جدول زیر مقایسه شدهاند:
روش ایجاد | توضیحات | کاربرد ایدهآل |
ضبط از طریق رابط کاربری گرافیکی (GUI) | این روش با استفاده از منوی | ضبط یک گردش کار استاندارد و اجرای مجدد آن. برای مثال، میتوان تنظیمات یک کیس را برای یک مش درشت ضبط کرد و سپس همان فایل ژورنال را برای اعمال تنظیمات مشابه بر روی یک مش ریزتر اجرا نمود. |
نوشتن مستقیم دستورات TUI | کاربران میتوانند دستورات TUI را مستقیماً در یک ویرایشگر متن بنویسند، فایل را با پسوند | ایجاد قالبهای تمیز و قابل استفاده مجدد و پارامتریک کردن گردش کارهای ساده که در آنها فقط مقادیر ورودی (مانند سرعت یا دما) بین اجراها تغییر میکند. |
نکته تخصصی: هرچند ضبط ژورنال از طریق GUI سریع است، اما فایلهای حاصل اغلب حاوی دستورات اضافی مربوط به تغییرات نمای گرافیکی هستند. برای ایجاد اسکریپتهای تمیز و قابل استفاده مجدد، بهترین روش این است که یک گردش کار را ضبط کرده و سپس به صورت دستی فایل .jou را ویرایش کنید تا دستورات غیرضروری حذف شده و فقط مراحل اصلی تنظیمات باقی بمانند.
اگرچه فایلهای ژورنال برای وظایف خطی و تکراری بسیار کارآمد هستند، اما برای گردش کارهای پیچیدهای که نیازمند منطق شرطی (مانند دستورات if-then) یا حلقهها هستند، انعطافپذیری کمی ارائه میدهند. برای غلبه بر این محدودیتها، باید از قدرت برنامهنویسی Scheme که زیربنای TUI است، بهره برد.
روش دوم: اتوماسیون پیشرفته با برنامهنویسی Scheme
برنامهنویسی Scheme از اجرای صرف دستورات TUI فراتر رفته و به مهندسان اجازه میدهد تا منطق پیچیده، حلقهها، و عملیات سفارشی را مستقیماً در گردش کار Fluent خود پیادهسازی کنند. در واقع، فایلهای ژورنال خود از سینتکس Scheme پیروی میکنند، اما استفاده مستقیم از این زبان برنامهنویسی، درهای جدیدی به روی اتوماسیون باز میکند.
Scheme یک زبان برنامهنویسی سطح بالا و گویشی از زبان Lisp است. این زبان به دلیل ساختار انعطافپذیر خود، ابزاری بسیار قدرتمند برای سفارشیسازی و اتوماسیون در Fluent است. قابلیتهای کلیدی آن عبارتند از:
- عملیات بر روی دادههای ساختاریافته مانند رشتهها (strings)، لیستها (lists) و بردارها (vectors).
- کنترل کامل بر فرآیند شبیهسازی و تولید گزارشهای سفارشی.
- توانایی انجام عملیات خواندن و نوشتن فایل (file read/write).
- امکان سفارشیسازی منوهای GUI، مانند افزودن دکمهها یا منوهای جدید.
مطالعه موردی عملی: خودکارسازی پسپردازش
برای نمایش قدرت Scheme، چالشی رایج در پسپردازش شبیهسازیهای بزرگ را در نظر بگیرید: ایجاد دستی ۱۵۰ صفحه (plane) در موقعیتهای مختلف محور z، نمایش کانتور سرعت بر روی هر صفحه و ذخیره تصویر آن. انجام این کار به صورت دستی یک فرآیند بسیار خستهکننده و زمانبر است. با استفاده از یک اسکریپت Scheme کوتاه، میتوان این فرآیند را در چند دقیقه خودکار کرد.
کد زیر با استفاده از یک حلقه do (مشابه حلقه for در سایر زبانها)، ابتدا ۱۵۰ صفحه ایزوسرفیس (iso-surface) ایجاد میکند:
; Code for creating 150 planes
(Do ((x 1 (+ x 1))) ((> x 150))
(Ti-menu-load-string (format #f "surface/iso-surface z-coordinate z-plane-~a () () ~a" x x))
)
سپس، حلقه do دوم، کانتورهای سرعت را بر روی هر یک از این صفحات نمایش داده و تصویر حاصل را در یک فایل جداگانه ذخیره میکند:
; Code for displaying contours and saving pictures
(Do ((x 1 (+ x 1))) ((> x 150))
(Ti-menu-load-string (format #f "display/set/contours surface z-plane-~a ()" x))
(Ti-menu-load-string (format #f "display/contour/velocity-magnitude 0 5.0"))
(Ti-menu-load-string (format #f "display/save-picture/cont-plane-%4n.jpg"))
)
در این کد، تابع (format #f "...") برای ساخت رشته دستور TUI با درج پویای مقدار متغیر حلقه x استفاده میشود. سپس، تابع (ti-menu-load-string) این رشته را به عنوان یک دستور TUI اجرا میکند. این تابع در واقع پل ارتباطی حیاتی بین قدرت رویهای و منطقی Scheme (حلقهها، شروط) و کتابخانه وسیع دستورات داخلی Fluent (TUI) است. این مکانیسم اصلی به یک اسکریپت اجازه میدهد تا دستورات TUI را به صورت پویا تولید و اجرا کند که هسته اتوماسیون پیشرفته را تشکیل میدهد.
روش سوم: توسعه قابلیتهای حلگر با توابع تعریفشده توسط کاربر (UDFs)
توابع تعریفشده توسط کاربر (User-Defined Functions یا UDFs) از نظر استراتژیک با دو روش قبلی تفاوت اساسی دارند. در حالی که فایلهای ژورنال و Scheme تعامل کاربر با حلگر را خودکار میکنند، UDFها قابلیتهای فیزیکی خود حلگر را توسعه میدهند. دو روش اول گردش کار را از بیرون کنترل میکنند؛ UDFها رفتار حلگر را از درون اصلاح مینمایند.
یک UDF برنامهای است که به زبان C نوشته شده و میتواند به صورت دینامیک به حلگر Ansys Fluent متصل شود تا توابع اضافی را پیادهسازی کند. این رویکرد به مهندسان اجازه میدهد تا فیزیک سفارشی، شرایط مرزی پیچیده یا رفتارهای خاصی را مدلسازی کنند که در قابلیتهای پیشفرض Fluent وجود ندارد.
کاربردهای کلیدی UDFها عبارتند از:
- شرایط مرزی سفارشی: تعریف شرایط مرزی که به صورت دینامیک با زمان، مکان یا سایر متغیرهای جریان تغییر میکنند (مثلاً ورودی سرعت نوسانی).
- اجرای دستورات شرطی: اجرای دستورات یا محاسبات خاص در پایان هر تکرار (iteration) یا گام زمانی (time step).
- تنظیم مقادیر محاسبهشده: اصلاح مقادیر محاسبهشده توسط حلگر به صورت تکرار به تکرار، مانند افزودن یک ترم چشمه (source term) سفارشی به معادلات بقا.
برای مثال، یک UDF میتواند گرادیان فشار را در یک منطقه بحرانی نظارت کند و اگر از یک آستانه مشخص فراتر رفت، با استفاده از ماکروی Execute_At_End یک دستور TUI را اجرا کند که اندازه گام زمانی (time step size) را برای گام بعدی کاهش میدهد. این کار به صورت هوشمندانه پایداری شبیهسازی را در طول تحلیلهای گذرا تضمین میکند.
تدوین یک استراتژی اتوماسیون جامع
یک استراتژی اتوماسیون واقعاً قوی بر یک ابزار واحد تکیه نمیکند. در عوض، این سه روش را با هم هماهنگ کرده و از هر یک برای نقاط قوت خاص خود بهره میبرد. آنچه در ادامه میآید، یک طرح کلی برای یک حلقه بهینهسازی کاملاً خودکار است.
- راهاندازی کیس (Case Setup): از فایلهای ژورنال برای اعمال تنظیمات اولیه و استاندارد استفاده کنید. سپس، اسکریپتهای Scheme را برای پارامتریک کردن ورودیها مانند سرعت ورودی یا تغییرات هندسی به کار ببرید.
- اجرای شبیهسازی (Simulation): فرآیند حل، از جمله مقداردهی اولیه، تنظیمات حلگر و اجرای تکرارها، میتواند به طور کامل توسط یک اسکریپت Scheme کنترل شود.
- جمعآوری نتایج (Result Collection): پس از اتمام شبیهسازی، دستورات TUI که توسط Scheme فراخوانی میشوند، میتوانند دادههای کلیدی مانند نیروهای آیرودینامیکی یا نرخ جریان جرمی را استخراج کنند.
- تولید گزارش (Report Generation): برنامهنویسی Scheme برای خودکارسازی فرآیند پسپردازش، از جمله ایجاد تصاویر کانتور، پلاتها و گزارشهای متنی، ابزاری ایدهآل است.
- تحلیل دادهها و اصلاح طراحی (Data Analysis & Design Modification): قدرت واقعی اتوماسیون در این مرحله آشکار میشود. یک اسکریپت Scheme میتواند نتایج را بخواند و یک الگوریتم بهینهسازی پایه (مانند یک روش مبتنی بر گرادیان یا جستجوی ساده) را برای پیمایش هوشمندانه فضای طراحی پیادهسازی کند. اسکریپت بر اساس نتایج جمعآوریشده تصمیمگیری کرده و شبیهسازی بعدی را با پارامترهای جدید به صورت خودکار اجرا میکند.
- سفارشیسازی فیزیک (Physics Customization): اگر مطالعه بهینهسازی نیازمند مدلهای فیزیکی سفارشی یا شرایط مرزی پیچیدهای باشد که در Fluent وجود ندارد، UDFها برای توسعه قابلیتهای حلگر و پیادهسازی این موارد به کار گرفته میشوند.
اتوماسیون برای چالشهای آینده CFD
این مقاله سه رویکرد استراتژیک برای خودکارسازی در Ansys Fluent را تشریح کرد: فایلهای ژورنال به عنوان یک نقطه ورود ساده، برنامهنویسی Scheme برای اتوماسیون پیچیده گردش کار، و UDFها برای توسعه قابلیتهای بنیادی حلگر.
ارزش نهایی اتوماسیون فراتر از افزایش سرعت است؛ این یک تغییر پارادایم در نحوه انجام تحلیلهای CFD است. با خودکارسازی فرآیندهای مکانیکی، مهندسان از وظایف تکراری رها شده و میتوانند بر تحلیل عمیقتر نتایج، نوآوری در طراحی و حل چالشهای مهندسی پیچیدهتر تمرکز کنند. تسلط بر این ابزارها دیگر فقط به معنای کارایی نیست، بلکه به معنای تغییر اساسی در گستره مسائلی است که یک مهندس میتواند حل کند و حرکت از تحلیلهای تکنقطهای به سمت کاوش جامع و خودکار فضای طراحی است.
برای مواجهه با چالشهای روزافزون در دنیای مهندسی، پذیرش این ابزارها دیگر یک انتخاب نیست، بلکه یک ضرورت است. مهندسان CFD تشویق میشوند تا این روشها را به عنوان بخشی ضروری از مجموعه مهارتهای خود بیاموزند تا کارایی، بهرهوری و ظرفیت نوآوری خود را در پروژههای آینده به حداکثر برسانند.